diff --git a/backend/FwLite/AGENTS.md b/backend/FwLite/AGENTS.md index b935a7c511..0a0b16efa7 100644 --- a/backend/FwLite/AGENTS.md +++ b/backend/FwLite/AGENTS.md @@ -266,6 +266,21 @@ Imperative validation in `MiniLcmApiValidationWrapper` (rules that need an async --- +## `Submit*` write variants (sync fire-and-forget) + +`SubmitUpdateX`/`SubmitCreateX` on `IMiniLcmWriteApi` are the **result-less writes the sync's diff-apply uses** instead of the returning `Update`/`Create`. The CRDT submits the change without fetching, so a target concurrently deleted on the other replica is **delete-wins** (no-op) rather than a `NotFoundException` that wedges the whole project sync (see `sync_delete_vs_edit_notfound`). The returning methods fetch-after-write and throw. + +**When you need a new `Submit*` variant:** only where the sync diff writes to a target that could be concurrently deleted — every id-targeted update/move, plus child creates inside `EntrySync` whose parent entry may be gone. **Not** for a fresh top-level `Create` of a dependency type (a new GUID has no delete race — that's why there is no `SubmitCreateVariantType`/`ComplexFormType`). + +**Wrapper authoring (the trap):** `Submit*` have default interface bodies, so they are **not** compile-enforced like other write methods — a wrapper compiles without handling them, but its default behavior is wrong: + +- `MiniLcmApiValidationWrapper` (BeaKona `MemberMatch=Any`): un-overridden `Submit*` forward straight to `_api`, **skipping validation** (the #2362 gap). Override only where an invariant must hold on sync-supplied data (e.g. single-main publication, variant refs). +- `MiniLcmApiWriteNormalizationWrapper` (writes manual): un-overridden `Submit*` hit the default body, which re-routes to the wrapper's own returning `Update`/`Create` and **silently downgrades delete-wins into a throwing update**. Any `Submit*` reachable through this wrapper must be overridden to normalize the payload *and* forward to `_api.Submit*`. + +Also fan out to `CrdtMiniLcmApi`, `FwDataMiniLcmApi`, and `DryRunMiniLcmApi` (`SubmitUpdateVariant` is abstract — no id-based twin to forward to). The write-normalization wrapper's coverage is currently variant-complete but not exhaustive across all types; completing it is tracked separately. + +--- + ## Important Files Quick Reference | File | Purpose | Risk Level | diff --git a/backend/FwLite/FwDataMiniLcmBridge.Tests/MiniLcmTests/VariantTests.cs b/backend/FwLite/FwDataMiniLcmBridge.Tests/MiniLcmTests/VariantTests.cs new file mode 100644 index 0000000000..6ebd4d9b45 --- /dev/null +++ b/backend/FwLite/FwDataMiniLcmBridge.Tests/MiniLcmTests/VariantTests.cs @@ -0,0 +1,249 @@ +using FwDataMiniLcmBridge.Api; +using FwDataMiniLcmBridge.LcmUtils; +using FwDataMiniLcmBridge.Tests.Fixtures; +using MiniLcm.Models; +using SIL.LCModel; + +namespace FwDataMiniLcmBridge.Tests.MiniLcmTests; + +[Collection(ProjectLoaderFixture.Name)] +public class VariantTests(ProjectLoaderFixture fixture) : VariantTestsBase +{ + protected override Task NewApi() + { + return Task.FromResult(fixture.NewProjectApi("variant-test", "en", "en")); + } + + [Fact] + public async Task GetVariantTypes_IncludesIrregularlyInflectedFormSubtypes() + { + // Plural and Past are children of Irregularly Inflected Form in the possibility + // list; the flattened read must surface them (they're the headline use case) + var types = await Api.GetVariantTypes().ToArrayAsync(); + types.Should().Contain(t => t.Id == LexEntryTypeTags.kguidLexTypPluralVar); + types.Should().Contain(t => t.Id == LexEntryTypeTags.kguidLexTypPastVar); + types.Should().Contain(t => t.Id == LexEntryTypeTags.kguidLexTypSpellingVar); + } + + [Fact] + public async Task CreateVariantType_LandsAsATopLevelPossibility() + { + // the flattened read can surface children, but created types must be top-level + var created = await Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", "custom type" } } }); + var fwDataApi = (FwDataMiniLcmApi)BaseApi; + fwDataApi.Cache.LangProject.LexDbOA.VariantEntryTypesOA.PossibilitiesOS + .Should().Contain(p => p.Guid == created.Id); + } + + [Fact] + public async Task UpdateVariant_PreservesAMultiBitHideMinorEntry() + { + // LCM reserves HideMinorEntry as a per-publication bitfield; a bool-level no-op + // write must not collapse a multi-bit value to 1 + var created = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { HideMinorEntry = true }); + var fwDataApi = (FwDataMiniLcmApi)BaseApi; + var variantEntry = fwDataApi.EntriesRepository.GetObject(_variantEntryId); + await fwDataApi.Cache.DoUsingNewOrCurrentUOW("Set HideMinorEntry bits", + "Unset HideMinorEntry bits", + () => + { + variantEntry.VariantEntryRefs.Single().HideMinorEntry = 2; + return ValueTask.CompletedTask; + }); + + // before deliberately disagrees so the diff emits a HideMinorEntry patch op + await Api.UpdateVariant(created with { HideMinorEntry = false }, created with { HideMinorEntry = true }); + + variantEntry.VariantEntryRefs.Single().HideMinorEntry.Should().Be(2); + var entry = await Api.GetEntry(_variantEntryId); + entry!.VariantOf.Single().HideMinorEntry.Should().BeTrue(); + } +} + +/// +/// tests the per-link fidelity when FwData has multiple variant LexEntryRefs on one entry +/// +[Collection(ProjectLoaderFixture.Name)] +public class VariantTestsMultipleRefs(ProjectLoaderFixture fixture) : VariantTestsBase +{ + protected override Task NewApi() + { + return Task.FromResult(fixture.NewProjectApi("variant-test-multipleRefs", "en", "en")); + } + + public override async Task InitializeAsync() + { + await base.InitializeAsync(); + var fwDataApi = (FwDataMiniLcmApi)BaseApi; + var variantEntry = fwDataApi.EntriesRepository.GetObject(_variantEntryId); + await fwDataApi.Cache.DoUsingNewOrCurrentUOW("Add dangling variant LexEntryRefs", + "Remove dangling variant LexEntryRefs", + () => + { + //FLEx data can contain variant refs with no components; they must not confuse reads or writes + foreach (var _ in Enumerable.Range(0, 2)) + { + var entryRef = fwDataApi.Cache.ServiceLocator.GetInstance().Create(); + variantEntry.EntryRefsOS.Add(entryRef); + entryRef.RefType = LexEntryRefTags.krtVariant; + } + return ValueTask.CompletedTask; + }); + } + + [Fact] + public async Task VariantRefsWithDifferentTypes_ReadAsSeparateLinksWithOwnTypes() + { + var otherMainEntry = await Api.CreateEntry(new() + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", "other main" } } + }); + var typeA = await Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", "type a" } } }); + var typeB = await Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", "type b" } } }); + + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [typeA.ToRef()] }); + await Api.CreateVariant(Variant.FromEntries(_variantEntry, otherMainEntry) with { Types = [typeB.ToRef()] }); + + var entry = await Api.GetEntry(_variantEntryId); + entry!.VariantOf.Should().HaveCount(2); + entry.VariantOf.Should().ContainSingle(v => v.MainEntryId == _mainEntryId) + .Which.Types.Should().ContainSingle(t => t.Id == typeA.Id); + entry.VariantOf.Should().ContainSingle(v => v.MainEntryId == otherMainEntry.Id) + .Which.Types.Should().ContainSingle(t => t.Id == typeB.Id); + } + + [Fact] + public async Task DuplicateVariantRefs_AreNotDuplicated() + { + await AddDuplicateVariantRef(); + + var entry = await Api.GetEntry(_variantEntryId); + entry.Should().NotBeNull(); + entry!.VariantOf.Should().HaveCount(1); + var mainEntry = await Api.GetEntry(_mainEntryId); + mainEntry.Should().NotBeNull(); + mainEntry!.Variants.Should().HaveCount(1); + } + + [Fact] + public async Task DuplicateVariantRefs_BothAreRemoved() + { + await AddDuplicateVariantRef(); + + var entry = await Api.GetEntry(_variantEntryId); + await Api.DeleteVariant(entry!.VariantOf.Single()); + + entry = await Api.GetEntry(_variantEntryId); + entry.Should().NotBeNull(); + entry!.VariantOf.Should().BeEmpty(); + } + + private async Task AddDuplicateVariantRef() + { + var fwDataApi = (FwDataMiniLcmApi)BaseApi; + var variantEntry = fwDataApi.EntriesRepository.GetObject(_variantEntryId); + var mainEntry = fwDataApi.EntriesRepository.GetObject(_mainEntryId); + await fwDataApi.Cache.DoUsingNewOrCurrentUOW("Add variant LexEntryRefs", + "Remove variant LexEntryRefs", + () => + { + variantEntry.MakeVariantOf(mainEntry, fwDataApi.VariantTypesFlattened.First()); + variantEntry.MakeVariantOf(mainEntry, fwDataApi.VariantTypesFlattened.Last()); + return ValueTask.CompletedTask; + }); + } +} + +/// +/// tests per-link edits when FLEx put multiple targets in ONE variant LexEntryRef: +/// Types/HideMinorEntry/Comment live on the ref, shared across all its targets +/// +[Collection(ProjectLoaderFixture.Name)] +public class VariantTestsSharedRef(ProjectLoaderFixture fixture) : MiniLcmTestBase +{ + private readonly Guid _variantEntryId = Guid.NewGuid(); + private readonly Guid _mainEntryId = Guid.NewGuid(); + private readonly Guid _otherMainEntryId = Guid.NewGuid(); + + protected override Task NewApi() + { + return Task.FromResult(fixture.NewProjectApi("variant-test-sharedRef", "en", "en")); + } + + public override async Task InitializeAsync() + { + await base.InitializeAsync(); + await Api.CreateEntry(new() + { + Id = _variantEntryId, + LexemeForm = { { "en", "variant form" } } + }); + await Api.CreateEntry(new() + { + Id = _mainEntryId, + LexemeForm = { { "en", "main entry" } } + }); + await Api.CreateEntry(new() + { + Id = _otherMainEntryId, + LexemeForm = { { "en", "other main" } } + }); + var fwDataApi = (FwDataMiniLcmApi)BaseApi; + var variantEntry = fwDataApi.EntriesRepository.GetObject(_variantEntryId); + await fwDataApi.Cache.DoUsingNewOrCurrentUOW("Add shared variant LexEntryRef", + "Remove shared variant LexEntryRef", + () => + { + var entryRef = fwDataApi.Cache.ServiceLocator.GetInstance().Create(); + variantEntry.EntryRefsOS.Add(entryRef); + entryRef.RefType = LexEntryRefTags.krtVariant; + entryRef.HideMinorEntry = 1; + entryRef.VariantEntryTypesRS.Add(fwDataApi.Cache.ServiceLocator + .GetInstance() + .GetObject(LexEntryTypeTags.kguidLexTypDialectalVar)); + entryRef.ComponentLexemesRS.Add(fwDataApi.EntriesRepository.GetObject(_mainEntryId)); + entryRef.ComponentLexemesRS.Add(fwDataApi.EntriesRepository.GetObject(_otherMainEntryId)); + return ValueTask.CompletedTask; + }); + } + + [Fact] + public async Task SharedRef_ReadsAsOneLinkPerTarget() + { + var entry = await Api.GetEntry(_variantEntryId); + entry!.VariantOf.Should().HaveCount(2); + entry.VariantOf.Should().OnlyContain(v => v.HideMinorEntry && v.Types.Count == 1); + } + + [Fact] + public async Task AddVariantType_OnASharedRefLink_DoesNotAffectTheSiblingLink() + { + var entry = await Api.GetEntry(_variantEntryId); + var link = entry!.VariantOf.Single(v => v.MainEntryId == _mainEntryId); + + await Api.AddVariantType(link, LexEntryTypeTags.kguidLexTypSpellingVar); + + entry = await Api.GetEntry(_variantEntryId); + var edited = entry!.VariantOf.Single(v => v.MainEntryId == _mainEntryId); + var sibling = entry.VariantOf.Single(v => v.MainEntryId == _otherMainEntryId); + edited.Types.Select(t => t.Id).Should() + .BeEquivalentTo([LexEntryTypeTags.kguidLexTypDialectalVar, LexEntryTypeTags.kguidLexTypSpellingVar]); + sibling.Types.Select(t => t.Id).Should().BeEquivalentTo([LexEntryTypeTags.kguidLexTypDialectalVar]); + sibling.HideMinorEntry.Should().BeTrue(); + } + + [Fact] + public async Task RemoveVariantType_OnASharedRefLink_DoesNotAffectTheSiblingLink() + { + var entry = await Api.GetEntry(_variantEntryId); + var link = entry!.VariantOf.Single(v => v.MainEntryId == _mainEntryId); + + await Api.RemoveVariantType(link, LexEntryTypeTags.kguidLexTypDialectalVar); + + entry = await Api.GetEntry(_variantEntryId); + entry!.VariantOf.Single(v => v.MainEntryId == _mainEntryId).Types.Should().BeEmpty(); + entry.VariantOf.Single(v => v.MainEntryId == _otherMainEntryId).Types + .Should().ContainSingle(t => t.Id == LexEntryTypeTags.kguidLexTypDialectalVar); + } +} diff --git a/backend/FwLite/FwDataMiniLcmBridge/Api/FwDataMiniLcmApi.cs b/backend/FwLite/FwDataMiniLcmBridge/Api/FwDataMiniLcmApi.cs index 4d390f93f5..f52a6f928d 100644 --- a/backend/FwLite/FwDataMiniLcmBridge/Api/FwDataMiniLcmApi.cs +++ b/backend/FwLite/FwDataMiniLcmBridge/Api/FwDataMiniLcmApi.cs @@ -68,6 +68,7 @@ public LcmCache Cache internal IEnumerable ComplexFormTypesFlattened => ComplexFormTypes.PossibilitiesOS.Cast().Flatten(); private ICmPossibilityList VariantTypes => Cache.LangProject.LexDbOA.VariantEntryTypesOA; + internal IEnumerable VariantTypesFlattened => VariantTypes.PossibilitiesOS.Cast().Flatten(); private ICmPossibilityList Publications => Cache.LangProject.LexDbOA.PublicationTypesOA; public void Dispose() @@ -568,6 +569,76 @@ await Cache.DoUsingNewOrCurrentUOW("Delete Complex Form Type", }); } + // flattened (unlike complex-form types' public read) because the Irregularly Inflected Form + // subtypes (Plural, Past) are children in the possibility list and must be assignable + public IAsyncEnumerable GetVariantTypes() + { + return VariantTypesFlattened.Select(ToVariantType).ToAsyncEnumerable(); + } + + public Task GetVariantType(Guid id) + { + var lexEntryType = VariantTypesFlattened.SingleOrDefault(t => t.Guid == id); + if (lexEntryType is null) return Task.FromResult(null); + return Task.FromResult(ToVariantType(lexEntryType)); + } + + private VariantType ToVariantType(ILexEntryType t) + { + return new VariantType() { Id = t.Guid, Name = FromLcmMultiString(t.Name) }; + } + + public Task CreateVariantType(VariantType variantType) + { + if (variantType.Id == default) variantType.Id = Guid.NewGuid(); + UndoableUnitOfWorkHelper.DoUsingNewOrCurrentUOW("Create variant type", + "Remove variant type", + Cache.ActionHandlerAccessor, + () => + { + var lexVariantType = Cache.ServiceLocator + .GetInstance() + .Create(variantType.Id); + VariantTypes.PossibilitiesOS.Add(lexVariantType); + UpdateLcmMultiString(lexVariantType.Name, variantType.Name); + }); + return Task.FromResult(ToVariantType(VariantTypesFlattened.Single(t => t.Guid == variantType.Id))); + } + + public Task UpdateVariantType(Guid id, UpdateObjectInput update) + { + var type = VariantTypesFlattened.SingleOrDefault(t => t.Guid == id); + if (type is null) throw new NullReferenceException($"unable to find variant type with id {id}"); + UndoableUnitOfWorkHelper.DoUsingNewOrCurrentUOW("Update Variant Type", + "Revert Variant Type", + Cache.ServiceLocator.ActionHandler, + () => + { + var updateProxy = new UpdateVariantTypeProxy(type, this); + update.Apply(updateProxy); + }); + return Task.FromResult(ToVariantType(type)); + } + + public async Task UpdateVariantType(VariantType before, VariantType after, IMiniLcmApi? api = null) + { + await VariantTypeSync.Sync(before, after, api ?? this); + return ToVariantType(VariantTypesFlattened.Single(t => t.Guid == after.Id)); + } + + public async Task DeleteVariantType(Guid id) + { + var type = VariantTypesFlattened.SingleOrDefault(t => t.Guid == id); + if (type is null) return; + await Cache.DoUsingNewOrCurrentUOW("Delete Variant Type", + "Revert delete", + () => + { + type.Delete(); + return ValueTask.CompletedTask; + }); + } + public IAsyncEnumerable GetMorphTypes() { return @@ -634,12 +705,6 @@ public async Task UpdateMorphType(MorphType before, MorphType after, return await GetMorphType(after.Id) ?? throw new NullReferenceException("unable to find morph type with id " + after.Id); } - public IAsyncEnumerable GetVariantTypes() - { - return VariantTypes.PossibilitiesOS - .Select(t => new VariantType() { Id = t.Guid, Name = FromLcmMultiString(t.Name) }) - .ToAsyncEnumerable(); - } public IAsyncEnumerable GetPublications() { return Publications.PossibilitiesOS @@ -688,6 +753,8 @@ private Entry FromLexEntry(ILexEntry entry) ..entry.ComplexFormEntries.Select(complexEntry => ToEntryReference(entry, complexEntry)), ..entry.AllSenses.SelectMany(sense => sense.ComplexFormEntries.Select(complexEntry => ToSenseReference(sense, complexEntry))) ], + VariantOf = [.. ToVariantOf(entry)], + Variants = [.. ToVariants(entry)], // ILexEntry.PublishIn is a virtual property that inverts DoNotPublishInRC against all publications PublishIn = entry.PublishIn.Select(FromLcmPossibility).ToList(), }; @@ -718,27 +785,43 @@ private IEnumerable ToComplexFormComponents(ILexEntry entr }).DistinctBy(c => (c.ComponentEntryId, c.ComplexFormEntryId, c.ComponentSenseId)); } - private Variants? ToVariants(ILexEntry entry) + private IEnumerable ToVariantOf(ILexEntry entry) { - var variantEntryRef = entry.VariantEntryRefs.SingleOrDefault(); - if (variantEntryRef is null) return null; - return new Variants - { - Id = variantEntryRef.Guid, - VariantsOf = - [ - ..variantEntryRef.ComponentLexemesRS.Select(o => o switch + //ComponentLexemesRS is only ICmObject; legacy/corrupt data may hold other types — + //skip them like liblcm's own back-ref reads do, or one bad ref wedges the whole entry + return entry.VariantEntryRefs.SelectMany(r => r.ComponentLexemesRS, + (r, o) => o switch { - ILexEntry component => ToEntryReference(component, entry), - ILexSense s => ToSenseReference(s, entry), - _ => throw new NotSupportedException($"object type {o.ClassName} not supported") + ILexEntry mainEntry => ToVariant(entry, r, mainEntry, null), + ILexSense mainSense => ToVariant(entry, r, mainSense.Entry, mainSense), + _ => null }) - ], - Types = - [ - ..variantEntryRef.VariantEntryTypesRS.Select(t => - new VariantType() { Id = t.Guid, Name = FromLcmMultiString(t.Name), }) - ] + .OfType() + .DistinctBy(v => (v.VariantEntryId, v.MainEntryId, v.MainSenseId)) + .Order(Variant.VariantOfOrder); + } + + private IEnumerable ToVariants(ILexEntry entry) + { + return entry.VariantFormEntryBackRefs.Select(r => ToVariant(r.OwningEntry, r, entry, null)) + .Concat(entry.AllSenses.SelectMany(sense => + sense.VariantFormEntryBackRefs.Select(r => ToVariant(r.OwningEntry, r, entry, sense)))) + .DistinctBy(v => (v.VariantEntryId, v.MainEntryId, v.MainSenseId)) + .Order(Variant.VariantsOrder); + } + + private Variant ToVariant(ILexEntry variantEntry, ILexEntryRef variantRef, ILexEntry mainEntry, ILexSense? mainSense) + { + return new Variant + { + VariantEntryId = variantEntry.Guid, + VariantHeadword = variantEntry.LexEntryHeadwordOrUnknown(), + MainEntryId = mainEntry.Guid, + MainSenseId = mainSense?.Guid, + MainHeadword = mainEntry.LexEntryHeadwordOrUnknown(), + Types = [..variantRef.VariantEntryTypesRS.Select((t, i) => new VariantTypeRef { Id = t.Guid, Order = i + 1 })], // Order indexes from 1, like pictures + HideMinorEntry = variantRef.HideMinorEntry != 0, + Comment = FromLcmMultiString(variantRef.Summary), }; } @@ -1066,7 +1149,7 @@ public async Task CreateEntry(Entry entry, CreateEntryOptions? options = AddComplexFormType(lexEntry, complexFormType.Id); } - if (options.IncludeComplexFormsAndComponents) + if (options.IncludeEntryReferences) { foreach (var component in entry.Components) { @@ -1078,6 +1161,19 @@ public async Task CreateEntry(Entry entry, CreateEntryOptions? options = var complexLexEntry = EntriesRepository.GetObject(complexForm.ComplexFormEntryId); AddComplexFormComponent(complexLexEntry, complexForm); } + + foreach (var variantOf in entry.VariantOf) + { + if (variantOf.VariantEntryId == default) variantOf.VariantEntryId = entry.Id; + AddVariant(lexEntry, variantOf); + } + + foreach (var variant in entry.Variants) + { + if (variant.MainEntryId == default) variant.MainEntryId = entry.Id; + var lexVariantEntry = EntriesRepository.GetObject(variant.VariantEntryId); + AddVariant(lexVariantEntry, variant); + } } // Remove publications not in entry.PublishIn from lexEntry.PublishIn foreach (var lcmPub in Publications.PossibilitiesOS.Where(p => entry.PublishIn.All(ep => ep.Id != p.Guid))) @@ -1285,6 +1381,240 @@ internal void RemoveComplexFormType(ILexEntry lexEntry, Guid complexFormTypeId) } } + public Task CreateVariant(Variant variant) + { + UndoableUnitOfWorkHelper.DoUsingNewOrCurrentUOW("Create Variant", + "Remove Variant", + Cache.ServiceLocator.ActionHandler, + () => + { + var lexVariantEntry = EntriesRepository.GetObject(variant.VariantEntryId); + AddVariant(lexVariantEntry, variant); + }); + return Task.FromResult(ToVariantOf(EntriesRepository.GetObject(variant.VariantEntryId)) + .Single(v => v.MainEntryId == variant.MainEntryId && v.MainSenseId == variant.MainSenseId)); + } + + public async Task UpdateVariant(Variant before, Variant after, IMiniLcmApi? api = null) + { + await VariantSync.Sync(before, after, api ?? this); + return ToVariantOf(EntriesRepository.GetObject(after.VariantEntryId)) + .Single(v => v.MainEntryId == after.MainEntryId && v.MainSenseId == after.MainSenseId); + } + + public Task SubmitUpdateVariant(Variant variant, UpdateObjectInput update) + { + var lexVariantEntry = EntriesRepository.GetObject(variant.VariantEntryId); + UndoableUnitOfWorkHelper.DoUsingNewOrCurrentUOW("Update Variant", + "Revert Variant", + Cache.ServiceLocator.ActionHandler, + () => + { + var entryRef = FindVariantRefForUpdate(lexVariantEntry, variant) + ?? throw NotFoundException.ForType(variant.VariantEntryId); + var updateProxy = new UpdateVariantProxy(entryRef, this); + update.Apply(updateProxy); + }); + return Task.CompletedTask; + } + + public Task DeleteVariant(Variant variant) + { + //variant entry has been deleted, so this link is gone already + if (!EntriesRepository.TryGetObject(variant.VariantEntryId, out var lexVariantEntry)) + return Task.CompletedTask; + + UndoableUnitOfWorkHelper.DoUsingNewOrCurrentUOW("Delete Variant", + "Add Variant", + Cache.ServiceLocator.ActionHandler, + () => + { + RemoveVariant(lexVariantEntry, variant); + }); + return Task.CompletedTask; + } + + public Task AddVariantType(Variant variant, Guid variantTypeId, BetweenPosition? position = null) + { + UndoableUnitOfWorkHelper.DoUsingNewOrCurrentUOW("Add Variant Type", + "Remove Variant Type", + Cache.ServiceLocator.ActionHandler, + () => + { + //link (or its entry) deleted already — match CRDT tolerance + if (!EntriesRepository.TryGetObject(variant.VariantEntryId, out var lexVariantEntry)) return; + var entryRef = FindVariantRefForUpdate(lexVariantEntry, variant); + if (entryRef is null) return; + //type concurrently deleted on the other replica → drop the add (delete wins), matching Remove/MoveVariantType + var lexEntryType = VariantTypesFlattened.SingleOrDefault(t => t.Guid == variantTypeId); + if (lexEntryType is null) return; + if (entryRef.VariantEntryTypesRS.Contains(lexEntryType)) return; + entryRef.VariantEntryTypesRS.Insert(PickTypeInsertIndex(entryRef, position), lexEntryType); + }); + return Task.CompletedTask; + } + + public Task RemoveVariantType(Variant variant, Guid variantTypeId) + { + UndoableUnitOfWorkHelper.DoUsingNewOrCurrentUOW("Remove Variant Type", + "Add Variant Type", + Cache.ServiceLocator.ActionHandler, + () => + { + if (!EntriesRepository.TryGetObject(variant.VariantEntryId, out var lexVariantEntry)) return; + var entryRef = FindVariantRefForUpdate(lexVariantEntry, variant); + if (entryRef is null) return; + var lexEntryType = entryRef.VariantEntryTypesRS.SingleOrDefault(t => t.Guid == variantTypeId); + if (lexEntryType is null) return; + entryRef.VariantEntryTypesRS.Remove(lexEntryType); + }); + return Task.CompletedTask; + } + + public Task MoveVariantType(Variant variant, Guid variantTypeId, BetweenPosition position) + { + UndoableUnitOfWorkHelper.DoUsingNewOrCurrentUOW("Move Variant Type", + "Move Variant Type back", + Cache.ServiceLocator.ActionHandler, + () => + { + if (!EntriesRepository.TryGetObject(variant.VariantEntryId, out var lexVariantEntry)) return; + var entryRef = FindVariantRefForUpdate(lexVariantEntry, variant); + if (entryRef is null) return; + var lexEntryType = entryRef.VariantEntryTypesRS.SingleOrDefault(t => t.Guid == variantTypeId); + if (lexEntryType is null) return; + entryRef.VariantEntryTypesRS.Remove(lexEntryType); + entryRef.VariantEntryTypesRS.Insert(PickTypeInsertIndex(entryRef, position), lexEntryType); + }); + return Task.CompletedTask; + } + + private static int PickTypeInsertIndex(ILexEntryRef entryRef, BetweenPosition? position) + { + var types = entryRef.VariantEntryTypesRS; + if (position?.Previous is { } previousId) + { + var previous = types.FirstOrDefault(t => t.Guid == previousId); + if (previous is not null) return types.IndexOf(previous) + 1; + } + if (position?.Next is { } nextId) + { + var next = types.FirstOrDefault(t => t.Guid == nextId); + if (next is not null) return types.IndexOf(next); + } + return types.Count; + } + + /// + /// must be called as part of an lcm action + /// + internal void AddVariant(ILexEntry lexVariantEntry, Variant variant) + { + if (FindVariantRef(lexVariantEntry, variant) is not null) return; //idempotent, like the CRDT side + ICmObject target; + if (variant.MainSenseId is not null) + { + var sense = SenseRepository.GetObject(variant.MainSenseId.Value); + //fail before mutating: a mismatched pair would create a link whose derived + //MainEntryId is the sense's actual entry, not the requested one + if (sense.Entry.Guid != variant.MainEntryId) + throw new InvalidOperationException($"Sense {variant.MainSenseId} does not belong to entry {variant.MainEntryId}, it belongs to {sense.Entry.Guid}"); + target = sense; + } + else + { + target = EntriesRepository.GetObject(variant.MainEntryId); + } + //one LexEntryRef per link — multiple variant refs on an entry are how FLEx represents + //being a variant of multiple things with different types + var entryRef = Cache.ServiceLocator.GetInstance().Create(); + lexVariantEntry.EntryRefsOS.Add(entryRef); + entryRef.RefType = LexEntryRefTags.krtVariant; + entryRef.HideMinorEntry = variant.HideMinorEntry ? 1 : 0; + UpdateLcmMultiString(entryRef.Summary, variant.Comment); + foreach (var type in variant.Types) + { + //skip a type concurrently deleted on the other replica (delete wins), like the CRDT create path + var lexEntryType = VariantTypesFlattened.SingleOrDefault(t => t.Guid == type.Id); + if (lexEntryType is not null) entryRef.VariantEntryTypesRS.Add(lexEntryType); + } + entryRef.ComponentLexemesRS.Add(target); + } + + internal void RemoveVariant(ILexEntry lexVariantEntry, Variant variant) + { + ICmObject target; + if (variant.MainSenseId is not null) + { + //sense has been deleted, so this link is gone already + if (!SenseRepository.TryGetObject(variant.MainSenseId.Value, out var sense)) return; + //links are identified by their full composite key; when the sense has moved to a + //different entry this link no longer exists (it became a link to the new entry) + if (sense.Entry.Guid != variant.MainEntryId) return; + target = sense; + } + else + { + //entry has been deleted, so this link is gone already + if (!EntriesRepository.TryGetObject(variant.MainEntryId, out var mainEntry)) return; + target = mainEntry; + } + + foreach (var entryRef in lexVariantEntry.VariantEntryRefs.ToArray()) + { + entryRef.ComponentLexemesRS.Remove(target); + if (entryRef.ComponentLexemesRS.Count == 0) + { + //an empty variant ref is meaningless; liblcm deletes them in its own cleanup paths too + lexVariantEntry.EntryRefsOS.Remove(entryRef); + } + } + //not throwing to match CRDT behavior + } + + internal ILexEntryRef? FindVariantRef(ILexEntry lexVariantEntry, Variant variant) + { + //prefer a dedicated ref over a shared (multi-component) one, like FLEx's FindMatchingVariantEntryRef + return lexVariantEntry.VariantEntryRefs + .Where(r => r.ComponentLexemesRS.Any(o => MatchesVariantTarget(o, variant))) + .OrderBy(r => r.ComponentLexemesRS.Count == 1 ? 0 : 1) + .FirstOrDefault(); + } + + /// + /// must be called as part of an lcm action. Returns the ref that exclusively represents + /// this link, first splitting the target out of a shared (multi-component) ref: per-link + /// fields (Types, HideMinorEntry, Summary) live on the ref, so mutating a shared one + /// would silently edit the sibling links too. + /// + internal ILexEntryRef? FindVariantRefForUpdate(ILexEntry lexVariantEntry, Variant variant) + { + var entryRef = FindVariantRef(lexVariantEntry, variant); + if (entryRef is null || entryRef.ComponentLexemesRS.Count == 1) return entryRef; + var target = entryRef.ComponentLexemesRS.First(o => MatchesVariantTarget(o, variant)); + var newRef = Cache.ServiceLocator.GetInstance().Create(); + lexVariantEntry.EntryRefsOS.Insert(lexVariantEntry.EntryRefsOS.IndexOf(entryRef) + 1, newRef); + newRef.RefType = LexEntryRefTags.krtVariant; + newRef.HideMinorEntry = entryRef.HideMinorEntry; + newRef.Summary.CopyAlternatives(entryRef.Summary); + foreach (var type in entryRef.VariantEntryTypesRS) + { + newRef.VariantEntryTypesRS.Add(type); + } + entryRef.ComponentLexemesRS.Remove(target); + newRef.ComponentLexemesRS.Add(target); + return newRef; + } + + //match the full composite key: a sense target only counts while the sense still belongs + //to the link's main entry (a moved sense means this is a different link) + private static bool MatchesVariantTarget(ICmObject o, Variant variant) + { + return variant.MainSenseId is not null + ? o is ILexSense sense && sense.Guid == variant.MainSenseId && sense.Entry.Guid == variant.MainEntryId + : o is ILexEntry entry && entry.Guid == variant.MainEntryId; + } + private IList MultiStringToTsStrings(MultiString? multiString) { if (multiString is null) return []; diff --git a/backend/FwLite/FwDataMiniLcmBridge/Api/UpdateProxy/UpdateVariantProxy.cs b/backend/FwLite/FwDataMiniLcmBridge/Api/UpdateProxy/UpdateVariantProxy.cs new file mode 100644 index 0000000000..aab9d4f79a --- /dev/null +++ b/backend/FwLite/FwDataMiniLcmBridge/Api/UpdateProxy/UpdateVariantProxy.cs @@ -0,0 +1,67 @@ +using System.Diagnostics.CodeAnalysis; +using MiniLcm.Models; +using SIL.LCModel; + +namespace FwDataMiniLcmBridge.Api.UpdateProxy; + +/// +/// Applies patches of a variant link's own fields (HideMinorEntry, Comment) to the +/// LexEntryRef. Endpoints and Types are not patchable — links are recreated for endpoint +/// changes and types go through Add/RemoveVariantType. +/// +public record UpdateVariantProxy : Variant +{ + private readonly ILexEntryRef _lexEntryRef; + private readonly FwDataMiniLcmApi _lexboxLcmApi; + + [SetsRequiredMembers] + public UpdateVariantProxy(ILexEntryRef lexEntryRef, FwDataMiniLcmApi lexboxLcmApi) + { + _lexEntryRef = lexEntryRef; + _lexboxLcmApi = lexboxLcmApi; + } + + public override required Guid VariantEntryId + { + get => _lexEntryRef.Owner.Guid; + set => throw new NotImplementedException(); + } + + public override required Guid MainEntryId + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + + public override Guid? MainSenseId + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + + public override List Types + { + get => throw new NotImplementedException(); + set => throw new NotImplementedException(); + } + + public override bool HideMinorEntry + { + get => _lexEntryRef.HideMinorEntry != 0; + //LCM reserves the int as a per-publication bitfield; only write when our bool view + //actually flips so a multi-bit value isn't collapsed to 1 + set + { + if (_lexEntryRef.HideMinorEntry != 0 != value) + _lexEntryRef.HideMinorEntry = value ? 1 : 0; + } + } + + public override RichMultiString Comment + { + get => new UpdateRichMultiStringProxy(_lexEntryRef.Summary, _lexboxLcmApi); + set + { + } + } +} diff --git a/backend/FwLite/FwDataMiniLcmBridge/Api/UpdateProxy/UpdateVariantTypeProxy.cs b/backend/FwLite/FwDataMiniLcmBridge/Api/UpdateProxy/UpdateVariantTypeProxy.cs new file mode 100644 index 0000000000..3c2a8b15ca --- /dev/null +++ b/backend/FwLite/FwDataMiniLcmBridge/Api/UpdateProxy/UpdateVariantTypeProxy.cs @@ -0,0 +1,33 @@ +using System.Diagnostics.CodeAnalysis; +using MiniLcm.Models; +using SIL.LCModel; + +namespace FwDataMiniLcmBridge.Api.UpdateProxy; + +public record UpdateVariantTypeProxy : VariantType +{ + private readonly ILexEntryType _lexEntryType; + private readonly FwDataMiniLcmApi _lexboxLcmApi; + + [SetsRequiredMembers] + public UpdateVariantTypeProxy(ILexEntryType lexEntryType, FwDataMiniLcmApi lexboxLcmApi) + { + _lexEntryType = lexEntryType; + _lexboxLcmApi = lexboxLcmApi; + Name = base.Name = new(); + } + + public override Guid Id + { + get => _lexEntryType.Guid; + set => throw new NotImplementedException(); + } + + public override required MultiString Name + { + get => new UpdateMultiStringProxy(_lexEntryType.Name, _lexboxLcmApi); + set + { + } + } +} diff --git a/backend/FwLite/FwLiteProjectSync.Tests/EntrySyncTests.cs b/backend/FwLite/FwLiteProjectSync.Tests/EntrySyncTests.cs index e204582aeb..7982da9bac 100644 --- a/backend/FwLite/FwLiteProjectSync.Tests/EntrySyncTests.cs +++ b/backend/FwLite/FwLiteProjectSync.Tests/EntrySyncTests.cs @@ -370,6 +370,19 @@ public async Task CanSyncRandomEntries(ApiType? roundTripApiType) options = options .For(e => e.Components).Exclude(c => c.ComplexFormHeadword) .For(e => e.ComplexForms).Exclude(c => c.ComponentHeadword); + // both apis sort variant links by composite key, not the order the expected object was built in; + // headwords are derived on read like the complex-form ones above (see VariantTestsBase) + options = options + .WithoutStrictOrderingFor(e => e.VariantOf) + .WithoutStrictOrderingFor(e => e.Variants) + .For(e => e.VariantOf).Exclude(v => v.VariantHeadword) + .For(e => e.VariantOf).Exclude(v => v.MainHeadword) + .For(e => e.Variants).Exclude(v => v.VariantHeadword) + .For(e => e.Variants).Exclude(v => v.MainHeadword) + // Type order is (re)assigned on write like every other Order above; the randomly-built + // values don't round-trip. Real order round-trip is asserted in VariantSyncTests. + .For(e => e.VariantOf).For(v => v.Types).Exclude(t => t.Order) + .For(e => e.Variants).For(v => v.Types).Exclude(t => t.Order); if (currentApiType == ApiType.FwData) { // does not support changing MorphType yet (see UpdateEntryProxy.MorphType) @@ -952,6 +965,43 @@ public async Task CanSyncComponentWhenSenseMovesToDifferentEntry(string entryOrd actualNewComponentEntry.ComplexForms[0].ComplexFormEntryId.Should().Be(complexForm.Id); } + [Fact] + public async Task CanSyncVariantWhenTargetSenseMovesToDifferentEntry() + { + var senseId = Guid.NewGuid(); + var oldMainEntry = await Api.CreateEntry(new() { LexemeForm = { { "en", "old-main" } }, Senses = [new() { Id = senseId }] }); + var oldMainEntryAfter = oldMainEntry.Copy(); + oldMainEntryAfter.Senses.Clear(); // sense is moved from here + + var newMainEntry = await Api.CreateEntry(new() { Id = Guid.NewGuid(), LexemeForm = { { "en", "new-main" } } }); + var newMainEntryAfter = newMainEntry.Copy(); + newMainEntryAfter.Senses.Add(new Sense() { Id = senseId }); // sense is moved to here + + var variantEntry = new Entry + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", "variant" } }, + }; + variantEntry.VariantOf.Add(Variant.FromEntries(variantEntry, oldMainEntry, senseId)); + variantEntry = await Api.CreateEntry(variantEntry); + + var variantEntryAfter = variantEntry.Copy(); + variantEntryAfter.VariantOf = [Variant.FromEntries(variantEntry, newMainEntry, senseId)]; + + await EntrySync.SyncFull( + [variantEntry, oldMainEntry, newMainEntry], + [variantEntryAfter, oldMainEntryAfter, newMainEntryAfter], + Api); + + var actualVariantEntry = await Api.GetEntry(variantEntry.Id); + actualVariantEntry.Should().NotBeNull(); + var link = actualVariantEntry!.VariantOf.Should().ContainSingle().Subject; + link.MainEntryId.Should().Be(newMainEntry.Id); + link.MainSenseId.Should().Be(senseId); + (await Api.GetEntry(oldMainEntry.Id))!.Variants.Should().BeEmpty(); + (await Api.GetEntry(newMainEntry.Id))!.Variants.Should().ContainSingle(); + } + [Fact] public async Task SyncComplexFormsAndComponents_MovesComponentsToCorrectPosition() { diff --git a/backend/FwLite/FwLiteProjectSync.Tests/Import/ResumableTests.cs b/backend/FwLite/FwLiteProjectSync.Tests/Import/ResumableTests.cs index 7bb31a7e67..127a4d9cd2 100644 --- a/backend/FwLite/FwLiteProjectSync.Tests/Import/ResumableTests.cs +++ b/backend/FwLite/FwLiteProjectSync.Tests/Import/ResumableTests.cs @@ -82,6 +82,12 @@ public async Task ImportProject_IsResumable_AcrossRandomFailures() Id = Guid.NewGuid(), Name = new(){ ["en"] = "Test Complex Form Type" } }])); + mockFrom.Setup(f => f.GetVariantTypes()) + .Returns(MockAsyncEnumerable([new VariantType() + { + Id = Guid.NewGuid(), + Name = new(){ ["en"] = "Test Variant Type" } + }])); mockFrom.Setup(f => f.GetMorphTypes()) .Returns(MockAsyncEnumerable(expectedMorphTypes)); mockFrom.Setup(f => f.GetSemanticDomains()) diff --git a/backend/FwLite/FwLiteProjectSync.Tests/Snapshots/sena-3_snapshot.2026-06-18.verified.txt b/backend/FwLite/FwLiteProjectSync.Tests/Snapshots/sena-3_snapshot.2026-06-18.verified.txt index 37f9fde0ec..a2568e6031 100644 --- a/backend/FwLite/FwLiteProjectSync.Tests/Snapshots/sena-3_snapshot.2026-06-18.verified.txt +++ b/backend/FwLite/FwLiteProjectSync.Tests/Snapshots/sena-3_snapshot.2026-06-18.verified.txt @@ -98,6 +98,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -238,6 +240,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -313,6 +317,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -477,6 +483,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -528,6 +536,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -579,6 +589,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -662,6 +674,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -713,6 +727,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -764,6 +780,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -872,6 +890,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -915,6 +935,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -966,6 +988,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1076,6 +1100,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1163,6 +1189,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1214,6 +1242,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1265,6 +1295,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1332,6 +1364,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1383,6 +1417,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1434,6 +1470,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1485,6 +1523,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1578,6 +1618,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1658,6 +1700,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1728,6 +1772,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1815,6 +1861,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1878,6 +1926,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1964,6 +2014,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2051,6 +2103,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2171,6 +2225,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2262,6 +2318,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2347,6 +2405,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2425,6 +2485,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2476,6 +2538,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2571,6 +2635,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2651,6 +2717,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2719,6 +2787,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2780,6 +2850,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2943,6 +3015,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3021,6 +3095,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3089,6 +3165,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3157,6 +3235,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3218,6 +3298,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3281,6 +3363,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3358,6 +3442,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3476,6 +3562,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3547,6 +3635,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3632,6 +3722,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3700,6 +3792,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3785,6 +3879,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3848,6 +3944,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3928,6 +4026,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4023,6 +4123,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4084,6 +4186,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4216,6 +4320,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4320,6 +4426,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4466,6 +4574,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4551,6 +4661,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4612,6 +4724,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4673,6 +4787,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4733,6 +4849,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4810,6 +4928,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4895,6 +5015,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4975,6 +5097,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5035,6 +5159,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5096,6 +5222,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5147,6 +5275,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5217,6 +5347,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5352,6 +5484,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5505,6 +5639,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5568,6 +5704,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5631,6 +5769,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5703,6 +5843,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5771,6 +5913,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5832,6 +5976,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6001,6 +6147,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6094,6 +6242,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6166,6 +6316,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6267,6 +6419,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6370,6 +6524,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6438,6 +6594,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6501,6 +6659,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6613,6 +6773,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6730,6 +6892,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6809,6 +6973,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6902,6 +7068,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6979,6 +7147,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7073,6 +7243,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7136,6 +7308,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7222,6 +7396,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7275,6 +7451,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7360,6 +7538,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7430,6 +7610,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7523,6 +7705,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7632,6 +7816,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7711,6 +7897,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7774,6 +7962,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7851,6 +8041,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7914,6 +8106,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7984,6 +8178,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8035,6 +8231,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8105,6 +8303,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8158,6 +8358,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8201,6 +8403,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8302,6 +8506,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8382,6 +8588,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8452,6 +8660,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8532,6 +8742,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8602,6 +8814,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8672,6 +8886,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8742,6 +8958,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8812,6 +9030,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8899,6 +9119,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8950,6 +9172,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9051,6 +9275,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9114,6 +9340,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9184,6 +9412,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9325,6 +9555,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9429,6 +9661,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9492,6 +9726,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9562,6 +9798,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9625,6 +9863,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9688,6 +9928,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9751,6 +9993,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9804,6 +10048,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9872,6 +10118,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9935,6 +10183,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9998,6 +10248,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10060,6 +10312,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10152,6 +10406,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10222,6 +10478,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10292,6 +10550,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10377,6 +10637,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10440,6 +10702,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10510,6 +10774,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10587,6 +10853,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10674,6 +10942,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10737,6 +11007,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10800,6 +11072,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10938,6 +11212,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11047,6 +11323,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11098,6 +11376,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11209,6 +11489,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11289,6 +11571,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11369,6 +11653,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11441,6 +11727,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11504,6 +11792,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11567,6 +11857,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11630,6 +11922,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11693,6 +11987,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11765,6 +12061,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11835,6 +12133,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11886,6 +12186,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11966,6 +12268,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12029,6 +12333,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12128,6 +12434,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12179,6 +12487,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12266,6 +12576,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12353,6 +12665,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12416,6 +12730,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12488,6 +12804,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12577,6 +12895,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12640,6 +12960,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12724,6 +13046,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12802,6 +13126,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12865,6 +13191,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12960,6 +13288,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13037,6 +13367,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13088,6 +13420,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13158,6 +13492,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13261,6 +13597,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13324,6 +13662,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13411,6 +13751,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13505,6 +13847,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13558,6 +13902,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13628,6 +13974,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13698,6 +14046,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13759,6 +14109,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13899,6 +14251,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13962,6 +14316,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14041,6 +14397,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14104,6 +14462,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14183,6 +14543,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14265,6 +14627,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14359,6 +14723,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14446,6 +14812,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14516,6 +14884,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14589,6 +14959,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14662,6 +15034,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14732,6 +15106,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14800,6 +15176,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14895,6 +15273,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14989,6 +15369,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15059,6 +15441,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15120,6 +15504,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15190,6 +15576,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15260,6 +15648,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15313,6 +15703,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15376,6 +15768,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15470,6 +15864,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15540,6 +15936,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15610,6 +16008,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15680,6 +16080,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15760,6 +16162,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15839,6 +16243,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15909,6 +16315,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15991,6 +16399,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16067,6 +16477,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16161,6 +16573,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16231,6 +16645,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16282,6 +16698,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16345,6 +16763,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16436,6 +16856,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16530,6 +16952,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16612,6 +17036,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16740,6 +17166,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16819,6 +17247,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16891,6 +17321,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16951,6 +17383,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17021,6 +17455,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17091,6 +17527,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17159,6 +17597,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17219,6 +17659,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17304,6 +17746,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17367,6 +17811,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17454,6 +17900,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17522,6 +17970,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17585,6 +18035,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17653,6 +18105,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17714,6 +18168,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17793,6 +18249,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17856,6 +18314,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17941,6 +18401,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18009,6 +18471,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18070,6 +18534,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18123,6 +18589,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18193,6 +18661,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18280,6 +18750,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18371,6 +18843,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18434,6 +18908,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18485,6 +18961,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18576,6 +19054,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18654,6 +19134,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18722,6 +19204,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18833,6 +19317,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18918,6 +19404,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19011,6 +19499,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19128,6 +19618,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19233,6 +19725,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19301,6 +19795,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19371,6 +19867,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19439,6 +19937,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19507,6 +20007,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19594,6 +20096,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19664,6 +20168,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19727,6 +20233,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19790,6 +20298,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19860,6 +20370,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19963,6 +20475,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20033,6 +20547,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20096,6 +20612,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20199,6 +20717,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20328,6 +20848,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20420,6 +20942,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20480,6 +21004,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20566,6 +21092,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20634,6 +21162,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20713,6 +21243,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20764,6 +21296,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20834,6 +21368,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20945,6 +21481,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21008,6 +21546,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21069,6 +21609,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21130,6 +21672,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21193,6 +21737,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21244,6 +21790,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21353,6 +21901,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21421,6 +21971,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21541,6 +22093,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21609,6 +22163,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21670,6 +22226,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21738,6 +22296,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21801,6 +22361,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21880,6 +22442,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21950,6 +22514,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22120,6 +22686,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22206,6 +22774,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22259,6 +22829,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22322,6 +22894,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22402,6 +22976,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22463,6 +23039,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22531,6 +23109,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22609,6 +23189,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22689,6 +23271,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22774,6 +23358,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22827,6 +23413,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22895,6 +23483,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22958,6 +23548,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23036,6 +23628,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23127,6 +23721,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23214,6 +23810,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23282,6 +23880,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23369,6 +23969,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23463,6 +24065,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23528,6 +24132,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23651,6 +24257,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23702,6 +24310,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23762,6 +24372,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23832,6 +24444,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23900,6 +24514,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24042,6 +24658,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24112,6 +24730,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24204,6 +24824,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24272,6 +24894,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24352,6 +24976,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24424,6 +25050,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24511,6 +25139,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24572,6 +25202,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24625,6 +25257,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24678,6 +25312,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24748,6 +25384,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24801,6 +25439,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24864,6 +25504,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24969,6 +25611,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25051,6 +25695,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25104,6 +25750,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25165,6 +25813,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25233,6 +25883,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25319,6 +25971,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25389,6 +26043,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25476,6 +26132,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25563,6 +26221,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25702,6 +26362,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25793,6 +26455,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25856,6 +26520,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25919,6 +26585,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25972,6 +26640,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26072,6 +26742,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26135,6 +26807,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26222,6 +26896,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26285,6 +26961,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26348,6 +27026,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26410,6 +27090,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26496,6 +27178,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26566,6 +27250,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26636,6 +27322,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26713,6 +27401,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26847,6 +27537,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26898,6 +27590,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26966,6 +27660,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27027,6 +27723,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27114,6 +27812,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27194,6 +27894,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27262,6 +27964,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27315,6 +28019,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27395,6 +28101,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27488,6 +28196,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27558,6 +28268,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27621,6 +28333,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27691,6 +28405,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27771,6 +28487,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27859,6 +28577,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27946,6 +28666,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28009,6 +28731,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28094,6 +28818,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28165,6 +28891,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28228,6 +28956,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28314,6 +29044,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28367,6 +29099,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28430,6 +29164,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28525,6 +29261,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28612,6 +29350,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28696,6 +29436,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28764,6 +29506,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28887,6 +29631,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28988,6 +29734,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29039,6 +29787,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29099,6 +29849,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29169,6 +29921,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29220,6 +29974,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29273,6 +30029,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29333,6 +30091,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29403,6 +30163,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29456,6 +30218,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29526,6 +30290,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29594,6 +30360,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29687,6 +30455,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29757,6 +30527,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29809,6 +30581,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29888,6 +30662,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29939,6 +30715,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29990,6 +30768,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30041,6 +30821,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30109,6 +30891,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30261,6 +31045,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30312,6 +31098,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30363,6 +31151,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30433,6 +31223,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30486,6 +31278,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30546,6 +31340,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30621,6 +31417,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30672,6 +31470,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30740,6 +31540,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30791,6 +31593,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30859,6 +31663,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30927,6 +31733,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30978,6 +31786,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31038,6 +31848,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31089,6 +31901,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31149,6 +31963,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31209,6 +32025,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31356,6 +32174,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31448,6 +32268,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31499,6 +32321,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31567,6 +32391,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31654,6 +32480,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31722,6 +32550,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31783,6 +32613,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31844,6 +32676,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31931,6 +32765,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31994,6 +32830,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32079,6 +32917,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32199,6 +33039,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32260,6 +33102,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32401,6 +33245,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32462,6 +33308,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32554,6 +33402,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32622,6 +33472,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32700,6 +33552,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32780,6 +33634,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32848,6 +33704,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32926,6 +33784,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32987,6 +33847,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33057,6 +33919,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33125,6 +33989,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33193,6 +34059,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33261,6 +34129,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33329,6 +34199,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33406,6 +34278,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33545,6 +34419,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33630,6 +34506,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33698,6 +34576,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33771,6 +34651,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33854,6 +34736,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33922,6 +34806,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33973,6 +34859,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34041,6 +34929,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34173,6 +35063,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34264,6 +35156,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34325,6 +35219,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34393,6 +35289,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34517,6 +35415,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34611,6 +35511,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34698,6 +35600,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34759,6 +35663,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34894,6 +35800,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34957,6 +35865,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35098,6 +36008,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35195,6 +36107,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35280,6 +36194,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35350,6 +36266,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35445,6 +36363,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35496,6 +36416,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35581,6 +36503,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35649,6 +36573,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35712,6 +36638,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35773,6 +36701,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35859,6 +36789,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35936,6 +36868,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36021,6 +36955,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36089,6 +37025,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36159,6 +37097,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36231,6 +37171,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36318,6 +37260,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36411,6 +37355,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36498,6 +37444,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36566,6 +37514,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36650,6 +37600,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36730,6 +37682,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36793,6 +37747,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36856,6 +37812,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36975,6 +37933,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37054,6 +38014,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37117,6 +38079,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37187,6 +38151,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37255,6 +38221,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37319,6 +38287,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37380,6 +38350,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37441,6 +38413,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37502,6 +38476,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37582,6 +38558,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37645,6 +38623,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37722,6 +38702,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37775,6 +38757,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37878,6 +38862,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37941,6 +38927,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38031,6 +39019,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38147,6 +39137,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38219,6 +39211,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38282,6 +39276,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38352,6 +39348,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38422,6 +39420,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38483,6 +39483,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38570,6 +39572,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38717,6 +39721,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38840,6 +39846,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38908,6 +39916,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38959,6 +39969,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39010,6 +40022,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39122,6 +40136,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39317,6 +40333,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39385,6 +40403,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39472,6 +40492,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39544,6 +40566,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39631,6 +40655,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39724,6 +40750,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39786,6 +40814,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39839,6 +40869,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39947,6 +40979,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40097,6 +41131,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40167,6 +41203,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40237,6 +41275,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40300,6 +41340,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40361,6 +41403,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40424,6 +41468,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40492,6 +41538,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40585,6 +41633,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40678,6 +41728,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40746,6 +41798,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40825,6 +41879,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40911,6 +41967,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41021,6 +42079,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41081,6 +42141,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41151,6 +42213,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41276,6 +42340,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41370,6 +42436,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41443,6 +42511,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41537,6 +42607,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41621,6 +42693,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41691,6 +42765,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41785,6 +42861,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41865,6 +42943,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41928,6 +43008,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41991,6 +43073,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42051,6 +43135,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42131,6 +43217,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42194,6 +43282,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42288,6 +43378,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42416,6 +43508,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42479,6 +43573,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42558,6 +43654,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42628,6 +43726,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42698,6 +43798,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42792,6 +43894,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42855,6 +43959,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42935,6 +44041,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43015,6 +44123,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43088,6 +44198,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43151,6 +44263,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43214,6 +44328,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43301,6 +44417,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43369,6 +44487,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43451,6 +44571,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43519,6 +44641,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43612,6 +44736,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43699,6 +44825,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43779,6 +44907,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43849,6 +44979,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43919,6 +45051,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43989,6 +45123,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44059,6 +45195,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44122,6 +45260,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44190,6 +45330,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44258,6 +45400,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44345,6 +45489,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44438,6 +45584,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44501,6 +45649,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44573,6 +45723,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44686,6 +45838,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44803,6 +45957,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44894,6 +46050,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44964,6 +46122,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45027,6 +46187,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45115,6 +46277,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45217,6 +46381,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45287,6 +46453,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45350,6 +46518,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45420,6 +46590,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45497,6 +46669,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45558,6 +46732,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45621,6 +46797,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45684,6 +46862,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45744,6 +46924,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45835,6 +47017,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45913,6 +47097,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45976,6 +47162,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46100,6 +47288,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46151,6 +47341,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46271,6 +47463,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46341,6 +47535,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46404,6 +47600,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46455,6 +47653,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46525,6 +47725,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46588,6 +47790,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46680,6 +47884,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46743,6 +47949,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46794,6 +48002,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46845,6 +48055,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46915,6 +48127,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46994,6 +48208,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47097,6 +48313,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47160,6 +48378,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47230,6 +48450,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47296,6 +48518,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47376,6 +48600,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47444,6 +48670,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47567,6 +48795,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47742,6 +48972,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47828,6 +49060,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47913,6 +49147,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47976,6 +49212,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48037,6 +49275,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48090,6 +49330,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48141,6 +49383,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48202,6 +49446,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48327,6 +49573,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48406,6 +49654,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48469,6 +49719,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48566,6 +49818,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48675,6 +49929,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48738,6 +49994,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48919,6 +50177,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48987,6 +50247,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49076,6 +50338,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49160,6 +50424,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49237,6 +50503,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49331,6 +50599,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49425,6 +50695,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49497,6 +50769,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49632,6 +50906,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49692,6 +50968,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49753,6 +51031,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49821,6 +51101,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49898,6 +51180,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49977,6 +51261,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50047,6 +51333,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50117,6 +51405,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50178,6 +51468,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50241,6 +51533,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50304,6 +51598,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50376,6 +51672,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50494,6 +51792,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50571,6 +51871,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50648,6 +51950,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50718,6 +52022,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50779,6 +52085,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50840,6 +52148,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50927,6 +52237,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51006,6 +52318,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51067,6 +52381,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51138,6 +52454,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51208,6 +52526,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51278,6 +52598,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51348,6 +52670,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51458,6 +52782,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51538,6 +52864,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51618,6 +52946,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51705,6 +53035,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51792,6 +53124,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51845,6 +53179,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51915,6 +53251,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51985,6 +53323,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52036,6 +53376,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52115,6 +53457,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52195,6 +53539,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52280,6 +53626,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52348,6 +53696,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52416,6 +53766,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52501,6 +53853,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52571,6 +53925,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52648,6 +54004,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52737,6 +54095,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52822,6 +54182,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52892,6 +54254,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53022,6 +54386,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53102,6 +54468,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53182,6 +54550,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53250,6 +54620,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53313,6 +54685,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53393,6 +54767,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53456,6 +54832,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53526,6 +54904,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53612,6 +54992,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53732,6 +55114,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53785,6 +55169,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53855,6 +55241,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53918,6 +55306,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53988,6 +55378,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54058,6 +55450,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54137,6 +55531,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54188,6 +55584,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54258,6 +55656,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54326,6 +55726,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54420,6 +55822,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54500,6 +55904,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54570,6 +55976,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54633,6 +56041,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54727,6 +56137,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54807,6 +56219,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54858,6 +56272,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54919,6 +56335,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54989,6 +56407,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55059,6 +56479,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55129,6 +56551,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55199,6 +56623,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55262,6 +56688,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55341,6 +56769,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55411,6 +56841,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55474,6 +56906,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55517,6 +56951,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55647,6 +57083,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55744,6 +57182,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55814,6 +57254,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55884,6 +57326,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55954,6 +57398,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56119,6 +57565,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56198,6 +57646,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56261,6 +57711,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56331,6 +57783,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56399,6 +57853,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56462,6 +57918,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56515,6 +57973,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56585,6 +58045,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56688,6 +58150,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56758,6 +58222,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56821,6 +58287,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56891,6 +58359,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56961,6 +58431,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57024,6 +58496,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57118,6 +58592,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57181,6 +58657,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57244,6 +58722,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57345,6 +58825,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57423,6 +58905,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57517,6 +59001,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57587,6 +59073,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57681,6 +59169,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57751,6 +59241,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57838,6 +59330,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57908,6 +59402,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57978,6 +59474,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58048,6 +59546,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58118,6 +59618,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58197,6 +59699,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58260,6 +59764,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58330,6 +59836,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58443,6 +59951,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58515,6 +60025,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58585,6 +60097,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58663,6 +60177,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58741,6 +60257,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58792,6 +60310,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58867,6 +60387,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58942,6 +60464,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59010,6 +60534,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59078,6 +60604,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59225,6 +60753,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59334,6 +60864,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59503,6 +61035,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59589,6 +61123,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59671,6 +61207,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59741,6 +61279,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59863,6 +61403,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59943,6 +61485,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60013,6 +61557,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60083,6 +61629,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60146,6 +61694,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60209,6 +61759,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60329,6 +61881,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60416,6 +61970,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60503,6 +62059,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60610,6 +62168,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60690,6 +62250,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60760,6 +62322,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60852,6 +62416,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60922,6 +62488,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60985,6 +62553,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61064,6 +62634,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61134,6 +62706,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61212,6 +62786,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61275,6 +62851,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61338,6 +62916,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61400,6 +62980,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61497,6 +63079,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61610,6 +63194,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61680,6 +63266,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61800,6 +63388,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61880,6 +63470,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61950,6 +63542,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62013,6 +63607,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62093,6 +63689,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62163,6 +63761,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62257,6 +63857,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62310,6 +63912,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62423,6 +64027,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62515,6 +64121,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62633,6 +64241,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62712,6 +64322,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62782,6 +64394,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62845,6 +64459,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62915,6 +64531,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63002,6 +64620,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63065,6 +64685,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63128,6 +64750,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63198,6 +64822,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63249,6 +64875,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63312,6 +64940,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63390,6 +65020,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63484,6 +65116,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63554,6 +65188,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63617,6 +65253,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63704,6 +65342,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63783,6 +65423,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63853,6 +65495,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63950,6 +65594,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64046,6 +65692,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64126,6 +65774,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64213,6 +65863,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64283,6 +65935,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64334,6 +65988,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64711,6 +66367,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64773,6 +66431,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64841,6 +66501,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64909,6 +66571,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64993,6 +66657,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65078,6 +66744,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65139,6 +66807,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65219,6 +66889,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65289,6 +66961,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65359,6 +67033,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65422,6 +67098,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65492,6 +67170,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65562,6 +67242,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65632,6 +67314,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65702,6 +67386,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65765,6 +67451,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65826,6 +67514,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65889,6 +67579,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65985,6 +67677,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66046,6 +67740,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66109,6 +67805,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66161,6 +67859,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66229,6 +67929,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66290,6 +67992,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66378,6 +68082,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66455,6 +68161,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66515,6 +68223,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66566,6 +68276,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66627,6 +68339,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66695,6 +68409,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66842,6 +68558,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66912,6 +68630,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67046,6 +68766,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67133,6 +68855,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67266,6 +68990,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67348,6 +69074,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67418,6 +69146,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67499,6 +69229,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67550,6 +69282,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67593,6 +69327,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67710,6 +69446,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67763,6 +69501,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67840,6 +69580,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67918,6 +69660,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67979,6 +69723,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68056,6 +69802,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68126,6 +69874,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68220,6 +69970,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68290,6 +70042,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68360,6 +70114,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68485,6 +70241,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68570,6 +70328,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68621,6 +70381,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68689,6 +70451,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68757,6 +70521,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68834,6 +70600,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69010,6 +70778,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69094,6 +70864,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69188,6 +70960,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69267,6 +71041,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69335,6 +71111,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69414,6 +71192,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69508,6 +71288,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69627,6 +71409,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69700,6 +71484,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69768,6 +71554,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69838,6 +71626,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69901,6 +71691,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69986,6 +71778,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70083,6 +71877,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70162,6 +71958,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70230,6 +72028,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70300,6 +72100,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70363,6 +72165,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70433,6 +72237,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70501,6 +72307,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70588,6 +72396,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70656,6 +72466,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70726,6 +72538,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70843,6 +72657,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70995,6 +72811,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71065,6 +72883,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71144,6 +72964,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71223,6 +73045,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71293,6 +73117,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71391,6 +73217,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71461,6 +73289,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71522,6 +73352,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71583,6 +73415,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71677,6 +73511,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71740,6 +73576,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71820,6 +73658,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71890,6 +73730,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71960,6 +73802,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72030,6 +73874,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72121,6 +73967,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72191,6 +74039,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72270,6 +74120,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72349,6 +74201,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72417,6 +74271,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72520,6 +74376,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72581,6 +74439,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72644,6 +74504,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72712,6 +74574,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72784,6 +74648,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72864,6 +74730,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72927,6 +74795,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72990,6 +74860,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73060,6 +74932,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73214,6 +75088,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73282,6 +75158,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73368,6 +75246,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73438,6 +75318,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73501,6 +75383,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73571,6 +75455,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73651,6 +75537,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73713,6 +75601,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73804,6 +75694,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73865,6 +75757,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73928,6 +75822,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74018,6 +75914,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74081,6 +75979,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74144,6 +76044,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74207,6 +76109,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74277,6 +76181,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74347,6 +76253,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74417,6 +76325,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74504,6 +76414,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74594,6 +76506,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74683,6 +76597,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74746,6 +76662,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74825,6 +76743,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74895,6 +76815,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75012,6 +76934,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75092,6 +77016,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75162,6 +77088,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75232,6 +77160,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75295,6 +77225,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75365,6 +77297,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75435,6 +77369,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75498,6 +77434,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75549,6 +77487,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75634,6 +77574,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75721,6 +77663,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75808,6 +77752,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75878,6 +77824,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75939,6 +77887,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76024,6 +77974,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76094,6 +78046,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76157,6 +78111,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76227,6 +78183,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76290,6 +78248,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76360,6 +78320,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76453,6 +78415,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76516,6 +78480,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76579,6 +78545,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76656,6 +78624,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76719,6 +78689,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76782,6 +78754,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76871,6 +78845,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76939,6 +78915,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77007,6 +78985,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77077,6 +79057,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77147,6 +79129,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77210,6 +79194,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77278,6 +79264,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77348,6 +79336,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77411,6 +79401,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77479,6 +79471,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77570,6 +79564,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77633,6 +79629,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77722,6 +79720,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77775,6 +79775,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77854,6 +79856,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77945,6 +79949,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78015,6 +80021,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78068,6 +80076,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78129,6 +80139,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78220,6 +80232,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78298,6 +80312,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78395,6 +80411,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78492,6 +80510,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78578,6 +80598,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78646,6 +80668,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78732,6 +80756,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78836,6 +80862,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78925,6 +80953,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78993,6 +81023,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79063,6 +81095,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79142,6 +81176,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79212,6 +81248,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79291,6 +81329,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79359,6 +81399,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79420,6 +81462,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79488,6 +81532,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79551,6 +81597,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79619,6 +81667,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79696,6 +81746,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79764,6 +81816,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79835,6 +81889,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79903,6 +81959,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79975,6 +82033,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80036,6 +82096,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80097,6 +82159,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80165,6 +82229,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80243,6 +82309,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80328,6 +82396,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80420,6 +82490,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80481,6 +82553,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80549,6 +82623,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80617,6 +82693,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80668,6 +82746,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80729,6 +82809,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80797,6 +82879,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80868,6 +82952,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80971,6 +83057,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81041,6 +83129,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81109,6 +83199,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81186,6 +83278,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81300,6 +83394,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81370,6 +83466,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81431,6 +83529,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81499,6 +83599,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81586,6 +83688,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81656,6 +83760,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81724,6 +83830,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81792,6 +83900,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81920,6 +84030,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81991,6 +84103,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82068,6 +84182,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82153,6 +84269,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82238,6 +84356,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82318,6 +84438,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82388,6 +84510,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82466,6 +84590,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82537,6 +84663,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82672,6 +84800,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82770,6 +84900,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82831,6 +84963,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82901,6 +85035,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82969,6 +85105,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83048,6 +85186,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83101,6 +85241,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83169,6 +85311,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83230,6 +85374,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83293,6 +85439,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83356,6 +85504,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83426,6 +85576,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83575,6 +85727,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83628,6 +85782,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83715,6 +85871,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83778,6 +85936,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83848,6 +86008,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83911,6 +86073,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83981,6 +86145,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84044,6 +86210,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84114,6 +86282,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84267,6 +86437,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84337,6 +86509,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84407,6 +86581,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84500,6 +86676,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84596,6 +86774,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84666,6 +86846,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84719,6 +86901,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84789,6 +86973,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84874,6 +87060,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85062,6 +87250,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85113,6 +87303,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85215,6 +87407,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85285,6 +87479,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85376,6 +87572,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85482,6 +87680,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85552,6 +87752,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85629,6 +87831,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85729,6 +87933,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85790,6 +87996,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85843,6 +88051,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85934,6 +88144,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85985,6 +88197,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86048,6 +88262,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86116,6 +88332,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86185,6 +88403,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86248,6 +88468,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86342,6 +88564,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86433,6 +88657,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86503,6 +88729,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86573,6 +88801,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86636,6 +88866,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86706,6 +88938,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86769,6 +89003,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86903,6 +89139,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86996,6 +89234,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87089,6 +89329,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87150,6 +89392,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87218,6 +89462,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87312,6 +89558,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87380,6 +89628,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87443,6 +89693,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87511,6 +89763,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87593,6 +89847,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87644,6 +89900,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87704,6 +89962,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87780,6 +90040,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87843,6 +90105,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87913,6 +90177,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87985,6 +90251,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88055,6 +90323,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88298,6 +90568,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88382,6 +90654,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88452,6 +90726,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88520,6 +90796,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88609,6 +90887,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88679,6 +90959,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88732,6 +91014,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88811,6 +91095,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88881,6 +91167,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88951,6 +91239,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89021,6 +91311,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89091,6 +91383,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89195,6 +91489,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89258,6 +91554,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89328,6 +91626,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89398,6 +91698,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89471,6 +91773,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89589,6 +91893,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89652,6 +91958,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89722,6 +92030,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89815,6 +92125,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89885,6 +92197,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89964,6 +92278,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90034,6 +92350,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90128,6 +92446,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90198,6 +92518,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90266,6 +92588,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90346,6 +92670,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90418,6 +92744,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90481,6 +92809,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90551,6 +92881,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90614,6 +92946,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90687,6 +93021,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90774,6 +93110,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90842,6 +93180,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90946,6 +93286,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91032,6 +93374,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91095,6 +93439,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91158,6 +93504,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91228,6 +93576,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91298,6 +93648,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91378,6 +93730,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91458,6 +93812,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91528,6 +93884,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91589,6 +93947,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91712,6 +94072,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91791,6 +94153,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91938,6 +94302,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91989,6 +94355,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92066,6 +94434,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92157,6 +94527,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92244,6 +94616,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92324,6 +94698,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92392,6 +94768,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92455,6 +94833,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92508,6 +94888,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92609,6 +94991,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92755,6 +95139,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92827,6 +95213,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92907,6 +95295,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92987,6 +95377,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93074,6 +95466,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93175,6 +95569,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93245,6 +95641,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93400,6 +95798,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93480,6 +95880,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93571,6 +95973,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93641,6 +96045,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93709,6 +96115,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93772,6 +96180,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93840,6 +96250,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93908,6 +96320,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93987,6 +96401,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94081,6 +96497,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94151,6 +96569,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94221,6 +96641,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94291,6 +96713,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94361,6 +96785,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94424,6 +96850,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94487,6 +96915,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94555,6 +96985,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94625,6 +97057,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94695,6 +97129,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94788,6 +97224,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94856,6 +97294,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94917,6 +97357,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94997,6 +97439,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95050,6 +97494,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95111,6 +97557,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95195,6 +97643,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95265,6 +97715,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95335,6 +97787,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95405,6 +97859,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95475,6 +97931,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95545,6 +98003,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95617,6 +98077,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95680,6 +98142,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95752,6 +98216,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95848,6 +98314,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95911,6 +98379,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96036,6 +98506,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96097,6 +98569,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96191,6 +98665,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96252,6 +98728,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96322,6 +98800,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96401,6 +98881,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96488,6 +98970,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96556,6 +99040,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96624,6 +99110,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96675,6 +99163,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96752,6 +99242,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96815,6 +99307,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96887,6 +99381,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96937,6 +99433,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97005,6 +99503,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97098,6 +99598,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97168,6 +99670,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97231,6 +99735,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97375,6 +99881,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97469,6 +99977,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97532,6 +100042,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97595,6 +100107,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97720,6 +100234,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97806,6 +100322,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97869,6 +100387,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97955,6 +100475,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98025,6 +100547,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98095,6 +100619,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98172,6 +100698,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98242,6 +100770,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98303,6 +100833,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98373,6 +100905,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98443,6 +100977,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98513,6 +101049,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98583,6 +101121,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98636,6 +101176,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98704,6 +101246,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98774,6 +101318,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98844,6 +101390,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98912,6 +101460,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98980,6 +101530,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99043,6 +101595,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99106,6 +101660,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99176,6 +101732,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99253,6 +101811,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99504,6 +102064,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99567,6 +102129,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99760,6 +102324,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99828,6 +102394,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100009,6 +102577,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100071,6 +102641,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100134,6 +102706,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100197,6 +102771,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100250,6 +102826,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100335,6 +102913,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100411,6 +102991,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100481,6 +103063,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100544,6 +103128,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100631,6 +103217,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100701,6 +103289,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100771,6 +103361,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100868,6 +103460,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100955,6 +103549,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101023,6 +103619,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101084,6 +103682,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101156,6 +103756,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101216,6 +103818,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101303,6 +103907,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101371,6 +103977,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101422,6 +104030,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101494,6 +104104,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101574,6 +104186,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101652,6 +104266,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101720,6 +104336,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101799,6 +104417,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101862,6 +104482,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101925,6 +104547,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102028,6 +104652,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102098,6 +104724,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102161,6 +104789,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102214,6 +104844,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102331,6 +104963,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102392,6 +105026,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102460,6 +105096,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102521,6 +105159,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102608,6 +105248,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102676,6 +105318,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102737,6 +105381,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102800,6 +105446,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102860,6 +105508,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102937,6 +105587,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103029,6 +105681,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103113,6 +105767,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103164,6 +105820,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103256,6 +105914,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103319,6 +105979,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103370,6 +106032,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103422,6 +106086,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103504,6 +106170,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103605,6 +106273,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103699,6 +106369,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103762,6 +106434,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103832,6 +106506,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103912,6 +106588,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103992,6 +106670,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104045,6 +106725,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104130,6 +106812,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104183,6 +106867,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104234,6 +106920,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104350,6 +107038,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104485,6 +107175,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104553,6 +107245,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104702,6 +107396,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104765,6 +107461,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104816,6 +107514,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104901,6 +107601,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104996,6 +107698,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105057,6 +107761,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105125,6 +107831,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105188,6 +107896,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105258,6 +107968,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105394,6 +108106,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105464,6 +108178,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105534,6 +108250,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105602,6 +108320,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105681,6 +108401,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105751,6 +108473,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105821,6 +108545,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105874,6 +108600,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105946,6 +108674,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106009,6 +108739,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106081,6 +108813,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106192,6 +108926,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106360,6 +109096,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106428,6 +109166,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106551,6 +109291,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106650,6 +109392,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106701,6 +109445,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106801,6 +109547,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106890,6 +109638,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106960,6 +109710,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107030,6 +109782,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107098,6 +109852,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107166,6 +109922,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107234,6 +109992,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107347,6 +110107,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107424,6 +110186,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107508,6 +110272,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107571,6 +110337,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107639,6 +110407,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107707,6 +110477,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107785,6 +110557,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107871,6 +110645,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107922,6 +110698,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108014,6 +110792,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108065,6 +110845,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108142,6 +110924,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108202,6 +110986,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108255,6 +111041,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108318,6 +111106,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108403,6 +111193,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108454,6 +111246,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108517,6 +111311,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108594,6 +111390,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108674,6 +111472,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108760,6 +111560,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108823,6 +111625,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108891,6 +111695,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108954,6 +111760,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109005,6 +111813,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109075,6 +111885,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109162,6 +111974,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109239,6 +112053,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109290,6 +112106,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109353,6 +112171,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109421,6 +112241,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109532,6 +112354,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109633,6 +112457,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109718,6 +112544,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109803,6 +112631,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109890,6 +112720,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109960,6 +112792,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110030,6 +112864,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110100,6 +112936,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110168,6 +113006,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110231,6 +113071,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110361,6 +113203,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110429,6 +113273,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110499,6 +113345,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110596,6 +113444,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110690,6 +113540,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110741,6 +113593,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110811,6 +113665,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110890,6 +113746,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110984,6 +113842,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111035,6 +113895,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111098,6 +113960,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111159,6 +114023,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111229,6 +114095,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111309,6 +114177,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111372,6 +114242,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111489,6 +114361,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111561,6 +114435,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111696,6 +114572,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111764,6 +114642,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111834,6 +114714,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111902,6 +114784,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111970,6 +114854,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112031,6 +114917,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112082,6 +114970,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112143,6 +115033,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112223,6 +115115,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112291,6 +115185,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112342,6 +115238,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112412,6 +115310,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112480,6 +115380,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112564,6 +115466,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112627,6 +115531,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112690,6 +115596,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112753,6 +115661,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112900,6 +115810,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113031,6 +115943,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113110,6 +116024,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113173,6 +116089,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113236,6 +116154,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113306,6 +116226,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113369,6 +116291,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -130490,5 +133414,6 @@ "Order": 2 } ] - } + }, + "VariantTypes": [] } \ No newline at end of file diff --git a/backend/FwLite/FwLiteProjectSync.Tests/SyncTests.cs b/backend/FwLite/FwLiteProjectSync.Tests/SyncTests.cs index 3f313a5b0f..f743930198 100644 --- a/backend/FwLite/FwLiteProjectSync.Tests/SyncTests.cs +++ b/backend/FwLite/FwLiteProjectSync.Tests/SyncTests.cs @@ -92,14 +92,16 @@ internal static EquivalencyOptions SyncExclusions(EquivalencyOptions e.Components).Exclude(c => c.Id) .For(e => e.Components).Exclude(c => c.Order) .For(e => e.ComplexForms).Exclude(c => c.Id) - .For(e => e.ComplexForms).Exclude(c => c.Order); + .For(e => e.ComplexForms).Exclude(c => c.Order) + .For(e => e.VariantOf).Exclude(v => v.Id) + .For(e => e.Variants).Exclude(v => v.Id); return options; } internal static void AssertSnapshotsAreEquivalent(ProjectSnapshot expected, ProjectSnapshot actual) { - var excludeOrderTypes = new[] { typeof(Sense), typeof(ExampleSentence), typeof(Picture), typeof(ComplexFormComponent), typeof(WritingSystem) }; - var excludeIds = new[] { typeof(ComplexFormComponent), typeof(WritingSystem) }; + var excludeOrderTypes = new[] { typeof(Sense), typeof(ExampleSentence), typeof(Picture), typeof(ComplexFormComponent), typeof(VariantTypeRef), typeof(WritingSystem) }; + var excludeIds = new[] { typeof(ComplexFormComponent), typeof(Variant), typeof(WritingSystem) }; actual.Should().BeEquivalentTo(expected, options => options @@ -109,6 +111,7 @@ internal static void AssertSnapshotsAreEquivalent(ProjectSnapshot expected, Proj .WithoutStrictOrderingFor(x => x.SemanticDomains) .WithoutStrictOrderingFor(x => x.ComplexFormTypes) .WithoutStrictOrderingFor(x => x.MorphTypes) + .WithoutStrictOrderingFor(x => x.VariantTypes) //when excluding properties consider https://github.com/sillsdev/languageforge-lexbox/issues/1912 .Using(Exclude) .When(info => info.RuntimeType == typeof(double) && info.Path.EndsWith(".Order") && excludeOrderTypes.Contains(info.ParentType)) diff --git a/backend/FwLite/FwLiteProjectSync.Tests/UpdateDiffTests.cs b/backend/FwLite/FwLiteProjectSync.Tests/UpdateDiffTests.cs index 7daa8468a4..bbacc49119 100644 --- a/backend/FwLite/FwLiteProjectSync.Tests/UpdateDiffTests.cs +++ b/backend/FwLite/FwLiteProjectSync.Tests/UpdateDiffTests.cs @@ -25,6 +25,8 @@ public void EntryDiffShouldUpdateAllFields() .Excluding(x => x.Components) .Excluding(x => x.ComplexForms) .Excluding(x => x.ComplexFormTypes) + .Excluding(x => x.VariantOf) + .Excluding(x => x.Variants) .Excluding(x => x.PublishIn); }); } diff --git a/backend/FwLite/FwLiteProjectSync.Tests/VariantSyncTests.cs b/backend/FwLite/FwLiteProjectSync.Tests/VariantSyncTests.cs new file mode 100644 index 0000000000..66ac45dde0 --- /dev/null +++ b/backend/FwLite/FwLiteProjectSync.Tests/VariantSyncTests.cs @@ -0,0 +1,344 @@ +using FwLiteProjectSync.Tests.Fixtures; +using MiniLcm; +using MiniLcm.Models; + +namespace FwLiteProjectSync.Tests; + +public class VariantSyncTests : IClassFixture, IAsyncLifetime +{ + private readonly SyncFixture _fixture; + private readonly CrdtFwdataProjectSyncService _syncService; + + private readonly Guid _mainEntryId = Guid.NewGuid(); + private readonly Guid _variantEntryId = Guid.NewGuid(); + private Entry _mainEntry = null!; + private Entry _variantEntry = null!; + + public VariantSyncTests(SyncFixture fixture) + { + _fixture = fixture; + _syncService = _fixture.SyncService; + } + + public async Task InitializeAsync() + { + _fixture.DeleteSyncSnapshot(); + _mainEntry = await _fixture.FwDataApi.CreateEntry(new() + { + Id = _mainEntryId, + LexemeForm = { { "en", "color" } }, + Senses = + [ + new Sense { Gloss = { { "en", "colour sense" } } } + ] + }); + // sense-less on purpose — the FLEx "Insert Variant" shape + _variantEntry = await _fixture.FwDataApi.CreateEntry(new() + { + Id = _variantEntryId, + LexemeForm = { { "en", "colour" } } + }); + } + + public async Task DisposeAsync() + { + await foreach (var entry in _fixture.FwDataApi.GetAllEntries()) + { + await _fixture.FwDataApi.DeleteEntry(entry.Id); + } + foreach (var entry in await _fixture.CrdtApi.GetAllEntries().ToArrayAsync()) + { + await _fixture.CrdtApi.DeleteEntry(entry.Id); + } + _fixture.DeleteSyncSnapshot(); + } + + private async Task GetVariantType(IMiniLcmApi api, string name) + { + return (await api.GetVariantTypes().ToArrayAsync()).Single(t => t.Name["en"] == name); + } + + [Fact] + [Trait("Category", "Integration")] + public async Task VariantTypesSyncFwToCrdtAtProjectImport() + { + await _syncService.Import(_fixture.CrdtApi, _fixture.FwDataApi); + var fwdataVariantTypes = await _fixture.FwDataApi.GetVariantTypes().ToArrayAsync(); + var crdtVariantTypes = await _fixture.CrdtApi.GetVariantTypes().ToArrayAsync(); + fwdataVariantTypes.Should().NotBeEmpty(); + crdtVariantTypes.Should().BeEquivalentTo(fwdataVariantTypes); + } + + [Fact] + [Trait("Category", "Integration")] + public async Task CreatingVariantInFwDataSyncsWithoutIssue() + { + var crdtApi = _fixture.CrdtApi; + var fwdataApi = _fixture.FwDataApi; + await _syncService.Import(crdtApi, fwdataApi); + var projectSnapshot = await _fixture.RegenerateAndGetSnapshot(); + + var dialectal = await GetVariantType(fwdataApi, "Dialectal Variant"); + await fwdataApi.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with + { + Types = [dialectal.ToRef()], + HideMinorEntry = true, + Comment = new() { { "en", new RichString("british spelling") } }, + }); + + await _syncService.Sync(crdtApi, fwdataApi, projectSnapshot); + + SyncTests.AssertSnapshotsAreEquivalent(await fwdataApi.TakeProjectSnapshot(), await crdtApi.TakeProjectSnapshot()); + var crdtVariantEntry = await crdtApi.GetEntry(_variantEntryId); + crdtVariantEntry.Should().NotBeNull(); + crdtVariantEntry!.Senses.Should().BeEmpty(); + var link = crdtVariantEntry.VariantOf.Should().ContainSingle().Subject; + link.Types.Should().ContainSingle(t => t.Id == dialectal.Id); + link.HideMinorEntry.Should().BeTrue(); + + // Sync again, ensure no problems or changes + var secondSnapshot = await _fixture.RegenerateAndGetSnapshot(); + var secondSync = await _syncService.Sync(crdtApi, fwdataApi, secondSnapshot); + secondSync.CrdtChanges.Should().Be(0); + secondSync.FwdataChanges.Should().Be(0); + } + + [Fact] + [Trait("Category", "Integration")] + public async Task CreatingVariantInCrdtSyncsWithoutIssue() + { + var crdtApi = _fixture.CrdtApi; + var fwdataApi = _fixture.FwDataApi; + await _syncService.Import(crdtApi, fwdataApi); + var projectSnapshot = await _fixture.RegenerateAndGetSnapshot(); + + var spelling = await GetVariantType(crdtApi, "Spelling Variant"); + await crdtApi.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [spelling.ToRef()] }); + + await _syncService.Sync(crdtApi, fwdataApi, projectSnapshot); + + SyncTests.AssertSnapshotsAreEquivalent(await fwdataApi.TakeProjectSnapshot(), await crdtApi.TakeProjectSnapshot()); + var fwVariantEntry = await fwdataApi.GetEntry(_variantEntryId); + fwVariantEntry.Should().NotBeNull(); + var link = fwVariantEntry!.VariantOf.Should().ContainSingle().Subject; + link.Types.Should().ContainSingle(t => t.Id == spelling.Id); + } + + [Fact] + [Trait("Category", "Integration")] + public async Task SenseTargetedVariantWithNewSenseSyncs() + { + var crdtApi = _fixture.CrdtApi; + var fwdataApi = _fixture.FwDataApi; + await _syncService.Import(crdtApi, fwdataApi); + var projectSnapshot = await _fixture.RegenerateAndGetSnapshot(); + + var newSense = await fwdataApi.CreateSense(_mainEntryId, new Sense { Gloss = { { "en", "new target sense" } } }); + await fwdataApi.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry, newSense.Id)); + + await _syncService.Sync(crdtApi, fwdataApi, projectSnapshot); + + SyncTests.AssertSnapshotsAreEquivalent(await fwdataApi.TakeProjectSnapshot(), await crdtApi.TakeProjectSnapshot()); + var crdtMainEntry = await crdtApi.GetEntry(_mainEntryId); + crdtMainEntry!.Variants.Should().ContainSingle(v => v.MainSenseId == newSense.Id); + } + + [Fact] + [Trait("Category", "Integration")] + public async Task VariantTypesSyncBothWays() + { + var crdtApi = _fixture.CrdtApi; + var fwdataApi = _fixture.FwDataApi; + await _syncService.Import(crdtApi, fwdataApi); + var projectSnapshot = await _fixture.RegenerateAndGetSnapshot(); + + var fwType = new VariantType() + { + Id = Guid.NewGuid(), + Name = new() { { "en", "fw custom type" } }, + }; + await fwdataApi.CreateVariantType(fwType); + + var crdtType = new VariantType() + { + Id = Guid.NewGuid(), + Name = new() { { "en", "crdt custom type" } }, + }; + await crdtApi.CreateVariantType(crdtType); + + await _syncService.Sync(crdtApi, fwdataApi, projectSnapshot); + + var crdtVariantTypes = await crdtApi.GetVariantTypes().ToArrayAsync(); + var fwdataVariantTypes = await fwdataApi.GetVariantTypes().ToArrayAsync(); + crdtVariantTypes.Should().ContainEquivalentOf(fwType); + crdtVariantTypes.Should().ContainEquivalentOf(crdtType); + fwdataVariantTypes.Should().ContainEquivalentOf(fwType); + fwdataVariantTypes.Should().ContainEquivalentOf(crdtType); + crdtVariantTypes.Should().BeEquivalentTo(fwdataVariantTypes); + } + + [Fact] + [Trait("Category", "Integration")] + public async Task VariantLinkEditsSyncBothWays() + { + var crdtApi = _fixture.CrdtApi; + var fwdataApi = _fixture.FwDataApi; + var free = await GetVariantType(fwdataApi, "Free Variant"); + var created = await fwdataApi.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [free.ToRef()] }); + await _syncService.Import(crdtApi, fwdataApi); + var projectSnapshot = await _fixture.RegenerateAndGetSnapshot(); + + // edit the same link's own fields on each side (types in FwData, scalars in CRDT) + var dialectal = await GetVariantType(fwdataApi, "Dialectal Variant"); + var fwLink = (await fwdataApi.GetEntry(_variantEntryId))!.VariantOf.Single(); + await fwdataApi.AddVariantType(fwLink, dialectal.Id); + await fwdataApi.RemoveVariantType(fwLink, free.Id); + + var crdtLink = (await crdtApi.GetEntry(_variantEntryId))!.VariantOf.Single(); + var crdtAfter = crdtLink.Copy(); + crdtAfter.HideMinorEntry = true; + crdtAfter.Comment = new() { { "en", new RichString("prefer the main entry") } }; + await crdtApi.UpdateVariant(crdtLink, crdtAfter); + + await _syncService.Sync(crdtApi, fwdataApi, projectSnapshot); + + SyncTests.AssertSnapshotsAreEquivalent(await fwdataApi.TakeProjectSnapshot(), await crdtApi.TakeProjectSnapshot()); + var merged = (await crdtApi.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + merged.Types.Should().ContainSingle(t => t.Id == dialectal.Id); + merged.HideMinorEntry.Should().BeTrue(); + merged.Comment["en"].GetPlainText().Should().Be("prefer the main entry"); + } + + [Fact] + [Trait("Category", "Integration")] + public async Task VariantTypeOrderSyncsBothWays() + { + var crdtApi = _fixture.CrdtApi; + var fwdataApi = _fixture.FwDataApi; + var free = await GetVariantType(fwdataApi, "Free Variant"); + var dialectal = await GetVariantType(fwdataApi, "Dialectal Variant"); + // deliberately not alphabetical and not creation order: order must come from the ref sequence + await fwdataApi.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [free.ToRef(), dialectal.ToRef()] }); + await _syncService.Import(crdtApi, fwdataApi); + var projectSnapshot = await _fixture.RegenerateAndGetSnapshot(); + + var imported = (await crdtApi.GetEntry(_variantEntryId))!.VariantOf.Single(); + imported.Types.Select(t => t.Id).Should().Equal(free.Id, dialectal.Id); + + // reorder on the CRDT side, expect FwData to follow + var reordered = imported.Copy(); + reordered.Types = [.. reordered.Types.AsEnumerable().Reverse()]; + await crdtApi.UpdateVariant(imported, reordered); + + await _syncService.Sync(crdtApi, fwdataApi, projectSnapshot); + + SyncTests.AssertSnapshotsAreEquivalent(await fwdataApi.TakeProjectSnapshot(), await crdtApi.TakeProjectSnapshot()); + var fwLink = (await fwdataApi.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + fwLink.Types.Select(t => t.Id).Should().Equal(dialectal.Id, free.Id); + } + + [Fact] + [Trait("Category", "Integration")] + public async Task DeletingMainEntryInCrdtRemovesLinkOnSync() + { + var crdtApi = _fixture.CrdtApi; + var fwdataApi = _fixture.FwDataApi; + await fwdataApi.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await _syncService.Import(crdtApi, fwdataApi); + var projectSnapshot = await _fixture.RegenerateAndGetSnapshot(); + + await crdtApi.DeleteEntry(_mainEntryId); + + await _syncService.Sync(crdtApi, fwdataApi, projectSnapshot); + + (await fwdataApi.GetEntry(_mainEntryId)).Should().BeNull(); + var fwVariantEntry = await fwdataApi.GetEntry(_variantEntryId); + fwVariantEntry.Should().NotBeNull("only the link dies, not the variant entry"); + fwVariantEntry!.VariantOf.Should().BeEmpty(); + (await crdtApi.GetEntry(_variantEntryId))!.VariantOf.Should().BeEmpty(); + } + + [Fact] + [Trait("Category", "Integration")] + public async Task DeletingVariantEntryInFwDataRemovesLinkOnSync() + { + var crdtApi = _fixture.CrdtApi; + var fwdataApi = _fixture.FwDataApi; + await fwdataApi.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await _syncService.Import(crdtApi, fwdataApi); + var projectSnapshot = await _fixture.RegenerateAndGetSnapshot(); + + await fwdataApi.DeleteEntry(_variantEntryId); + + await _syncService.Sync(crdtApi, fwdataApi, projectSnapshot); + + (await crdtApi.GetEntry(_variantEntryId)).Should().BeNull(); + var crdtMainEntry = await crdtApi.GetEntry(_mainEntryId); + crdtMainEntry.Should().NotBeNull("only the link dies, not the main entry"); + crdtMainEntry!.Variants.Should().BeEmpty(); + (await fwdataApi.GetEntry(_mainEntryId))!.Variants.Should().BeEmpty(); + } + + [Fact] + [Trait("Category", "Integration")] + public async Task VariantAddedInFwDataWhileMainEntryDeletedInCrdt_SyncDoesNotThrow() + { + var crdtApi = _fixture.CrdtApi; + var fwdataApi = _fixture.FwDataApi; + await _syncService.Import(crdtApi, fwdataApi); + var projectSnapshot = await _fixture.RegenerateAndGetSnapshot(); + + await fwdataApi.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await crdtApi.DeleteEntry(_mainEntryId); + + await _syncService.Sync(crdtApi, fwdataApi, projectSnapshot); + + (await crdtApi.GetEntry(_mainEntryId)).Should().BeNull(); + (await fwdataApi.GetEntry(_mainEntryId)).Should().BeNull(); + var crdtVariantEntry = await crdtApi.GetEntry(_variantEntryId); + crdtVariantEntry.Should().NotBeNull(); + crdtVariantEntry!.VariantOf.Should().BeEmpty(); + } + + [Fact] + [Trait("Category", "Integration")] + public async Task LegacySnapshotWithoutVariantTypes_FirstSyncImportsVariantsIntoCrdt() + { + var crdtApi = _fixture.CrdtApi; + var fwdataApi = _fixture.FwDataApi; + await _syncService.Import(crdtApi, fwdataApi); + var projectSnapshot = await _fixture.RegenerateAndGetSnapshot(); + + // wipe the variants a CRDT imported before variant support would have missed; + // pre-variant snapshot json deserializes with an empty VariantTypes list + // (ProjectSnapshot normalizes the missing property) + foreach (var entry in await crdtApi.GetAllEntries().ToArrayAsync()) + { + foreach (var link in entry.VariantOf) + { + await crdtApi.DeleteVariant(link); + } + } + var legacySnapshot = projectSnapshot with + { + VariantTypes = [], + Entries = [..projectSnapshot.Entries.Select(e => StripVariants(e.Copy()))] + }; + + var fwdataVariant = await fwdataApi.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + + await _syncService.Sync(crdtApi, fwdataApi, legacySnapshot); + + // FwData kept its link and the CRDT gained it + (await fwdataApi.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle(); + (await crdtApi.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle(v => v.MainEntryId == fwdataVariant.MainEntryId); + (await crdtApi.GetVariantTypes().ToArrayAsync()).Should().NotBeEmpty(); + + static Entry StripVariants(Entry entry) + { + entry.VariantOf = []; + entry.Variants = []; + return entry; + } + } +} diff --git a/backend/FwLite/FwLiteProjectSync.Tests/sena-3-live.verified.sqlite b/backend/FwLite/FwLiteProjectSync.Tests/sena-3-live.verified.sqlite index 55dcad0faa..f83e3cace6 100644 Binary files a/backend/FwLite/FwLiteProjectSync.Tests/sena-3-live.verified.sqlite and b/backend/FwLite/FwLiteProjectSync.Tests/sena-3-live.verified.sqlite differ diff --git a/backend/FwLite/FwLiteProjectSync.Tests/sena-3-live_snapshot.verified.txt b/backend/FwLite/FwLiteProjectSync.Tests/sena-3-live_snapshot.verified.txt index 035ac6ab5b..375788300c 100644 --- a/backend/FwLite/FwLiteProjectSync.Tests/sena-3-live_snapshot.verified.txt +++ b/backend/FwLite/FwLiteProjectSync.Tests/sena-3-live_snapshot.verified.txt @@ -98,6 +98,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -238,6 +240,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -313,6 +317,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -477,6 +483,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -528,6 +536,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -579,6 +589,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -662,6 +674,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -713,6 +727,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -764,6 +780,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -872,6 +890,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -915,6 +935,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -966,6 +988,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1076,6 +1100,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1163,6 +1189,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1214,6 +1242,27 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [ + { + "Id": "3b4ca7e3-ad5a-4d5c-93cd-19ddb0aa5027", + "MaybeId": "3b4ca7e3-ad5a-4d5c-93cd-19ddb0aa5027", + "DeletedAt": null, + "VariantEntryId": "6485b811-120d-486b-bb97-425faa9008d9", + "VariantHeadword": "inde", + "MainEntryId": "425289f4-fbcd-4644-99d7-c9417e20fa66", + "MainSenseId": null, + "MainHeadword": "ande", + "Types": [ + { + "Id": "bbd4adb3-9af5-4542-94e8-b0932124108b", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": {} + } + ], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1265,6 +1314,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1332,6 +1383,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1383,6 +1436,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1434,6 +1489,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1485,6 +1542,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1578,6 +1637,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1658,6 +1719,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1728,6 +1791,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1815,6 +1880,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1878,6 +1945,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -1964,6 +2033,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2051,6 +2122,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2171,6 +2244,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2262,6 +2337,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2347,6 +2424,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2425,6 +2504,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2476,6 +2557,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2571,6 +2654,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2651,6 +2736,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2719,6 +2806,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2780,6 +2869,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -2943,6 +3034,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3021,6 +3114,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3089,6 +3184,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3157,6 +3254,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3218,6 +3317,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3281,6 +3382,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3358,6 +3461,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3476,6 +3581,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3547,6 +3654,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3632,6 +3741,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3700,6 +3811,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3785,6 +3898,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3848,6 +3963,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -3928,6 +4045,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4023,6 +4142,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4084,6 +4205,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4216,6 +4339,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4320,6 +4445,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4466,6 +4593,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4551,6 +4680,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4612,6 +4743,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4673,6 +4806,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4733,6 +4868,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4810,6 +4947,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4895,6 +5034,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -4975,6 +5116,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5035,6 +5178,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5096,6 +5241,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5147,6 +5294,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5217,6 +5366,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5352,6 +5503,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5505,6 +5658,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5568,6 +5723,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5631,6 +5788,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5703,6 +5862,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5771,6 +5932,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -5832,6 +5995,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6001,6 +6166,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6094,6 +6261,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6166,6 +6335,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6267,6 +6438,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6370,6 +6543,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6438,6 +6613,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6501,6 +6678,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6613,6 +6792,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6730,6 +6911,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6809,6 +6992,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6902,6 +7087,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -6979,6 +7166,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7073,6 +7262,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7136,6 +7327,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7222,6 +7415,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7275,6 +7470,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7360,6 +7557,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7430,6 +7629,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7523,6 +7724,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7632,6 +7835,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7711,6 +7916,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7774,6 +7981,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7851,6 +8060,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7914,6 +8125,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -7984,6 +8197,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8035,6 +8250,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8105,6 +8322,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8158,6 +8377,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8201,6 +8422,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8302,6 +8525,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8382,6 +8607,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8452,6 +8679,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8532,6 +8761,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8602,6 +8833,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8672,6 +8905,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8742,6 +8977,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8812,6 +9049,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8899,6 +9138,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -8950,6 +9191,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9051,6 +9294,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9114,6 +9359,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9184,6 +9431,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9325,6 +9574,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9429,6 +9680,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9492,6 +9745,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9562,6 +9817,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9625,6 +9882,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9688,6 +9947,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9751,6 +10012,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9804,6 +10067,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9872,6 +10137,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9935,6 +10202,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -9998,6 +10267,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10060,6 +10331,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10152,6 +10425,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10222,6 +10497,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10292,6 +10569,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10377,6 +10656,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10440,6 +10721,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10510,6 +10793,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10587,6 +10872,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10674,6 +10961,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10737,6 +11026,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10800,6 +11091,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -10938,6 +11231,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11047,6 +11342,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11098,6 +11395,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11209,6 +11508,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11289,6 +11590,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11369,6 +11672,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11441,6 +11746,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11504,6 +11811,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11567,6 +11876,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11630,6 +11941,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11693,6 +12006,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11765,6 +12080,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11835,6 +12152,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11886,6 +12205,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -11966,6 +12287,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12029,6 +12352,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12128,6 +12453,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12179,6 +12506,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12266,6 +12595,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12353,6 +12684,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12416,6 +12749,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12488,6 +12823,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12577,6 +12914,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12640,6 +12979,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12724,6 +13065,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12802,6 +13145,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12865,6 +13210,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -12960,6 +13307,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13037,6 +13386,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13088,6 +13439,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13158,6 +13511,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13261,6 +13616,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13324,6 +13681,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13411,6 +13770,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13505,6 +13866,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13558,6 +13921,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13628,6 +13993,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13698,6 +14065,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13759,6 +14128,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13899,6 +14270,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -13962,6 +14335,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14041,6 +14416,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14104,6 +14481,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14183,6 +14562,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14265,6 +14646,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14359,6 +14742,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14446,6 +14831,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14516,6 +14903,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14589,6 +14978,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14662,6 +15053,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14732,6 +15125,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14800,6 +15195,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14895,6 +15292,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -14989,6 +15388,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15059,6 +15460,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15120,6 +15523,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15190,6 +15595,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15260,6 +15667,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15313,6 +15722,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15376,6 +15787,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15470,6 +15883,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15540,6 +15955,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15610,6 +16027,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15680,6 +16099,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15760,6 +16181,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15839,6 +16262,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15909,6 +16334,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -15991,6 +16418,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16067,6 +16496,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16161,6 +16592,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16231,6 +16664,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16282,6 +16717,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16345,6 +16782,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16436,6 +16875,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16530,6 +16971,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16612,6 +17055,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16740,6 +17185,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16819,6 +17266,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16891,6 +17340,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -16951,6 +17402,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17021,6 +17474,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17091,6 +17546,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17159,6 +17616,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17219,6 +17678,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17304,6 +17765,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17367,6 +17830,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17454,6 +17919,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17522,6 +17989,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17585,6 +18054,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17653,6 +18124,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17714,6 +18187,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17793,6 +18268,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17856,6 +18333,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -17941,6 +18420,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18009,6 +18490,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18070,6 +18553,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18123,6 +18608,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18193,6 +18680,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18280,6 +18769,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18371,6 +18862,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18434,6 +18927,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18485,6 +18980,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18576,6 +19073,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18654,6 +19153,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18722,6 +19223,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18833,6 +19336,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -18918,6 +19423,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19011,6 +19518,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19128,6 +19637,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19233,6 +19744,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19301,6 +19814,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19371,6 +19886,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19439,6 +19956,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19507,6 +20026,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19594,6 +20115,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19664,6 +20187,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19727,6 +20252,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19790,6 +20317,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19860,6 +20389,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -19963,6 +20494,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20033,6 +20566,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20096,6 +20631,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20199,6 +20736,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20328,6 +20867,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20420,6 +20961,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20480,6 +21023,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20566,6 +21111,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20634,6 +21181,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20713,6 +21262,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20764,6 +21315,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20834,6 +21387,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -20945,6 +21500,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21008,6 +21565,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21069,6 +21628,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21130,6 +21691,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21193,6 +21756,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21244,6 +21809,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21353,6 +21920,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21421,6 +21990,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21541,6 +22112,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21609,6 +22182,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21670,6 +22245,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21738,6 +22315,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21801,6 +22380,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21880,6 +22461,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -21950,6 +22533,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22120,6 +22705,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22206,6 +22793,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22259,6 +22848,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22322,6 +22913,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22402,6 +22995,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22463,6 +23058,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22531,6 +23128,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22609,6 +23208,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22689,6 +23290,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22774,6 +23377,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22827,6 +23432,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22895,6 +23502,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -22958,6 +23567,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23036,6 +23647,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23127,6 +23740,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23214,6 +23829,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23282,6 +23899,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23369,6 +23988,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23463,6 +24084,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23528,6 +24151,27 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [ + { + "Id": "dafa2dec-2fe6-4c6c-a07c-121de360d7b1", + "MaybeId": "dafa2dec-2fe6-4c6c-a07c-121de360d7b1", + "DeletedAt": null, + "VariantEntryId": "564fffa0-0aec-46ab-8d41-cbd30be82be1", + "VariantHeadword": "yenda", + "MainEntryId": "2bde7e2c-9ddc-4de0-b416-c24c0710c2fa", + "MainSenseId": null, + "MainHeadword": "enda", + "Types": [ + { + "Id": "bbd4adb3-9af5-4542-94e8-b0932124108b", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": {} + } + ], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23651,6 +24295,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23702,6 +24348,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23762,6 +24410,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23832,6 +24482,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -23900,6 +24552,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24042,6 +24696,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24112,6 +24768,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24204,6 +24862,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24272,6 +24932,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24352,6 +25014,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24424,6 +25088,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24511,6 +25177,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24572,6 +25240,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24625,6 +25295,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24678,6 +25350,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24748,6 +25422,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24801,6 +25477,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24864,6 +25542,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -24969,6 +25649,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25051,6 +25733,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25104,6 +25788,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25165,6 +25851,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25233,6 +25921,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25319,6 +26009,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25389,6 +26081,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25476,6 +26170,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25563,6 +26259,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25702,6 +26400,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25793,6 +26493,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25856,6 +26558,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25919,6 +26623,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -25972,6 +26678,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26072,6 +26780,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26135,6 +26845,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26222,6 +26934,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26285,6 +26999,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26348,6 +27064,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26410,6 +27128,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26496,6 +27216,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26566,6 +27288,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26636,6 +27360,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26713,6 +27439,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26847,6 +27575,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26898,6 +27628,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -26966,6 +27698,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27027,6 +27761,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27114,6 +27850,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27194,6 +27932,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27262,6 +28002,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27315,6 +28057,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27395,6 +28139,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27488,6 +28234,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27558,6 +28306,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27621,6 +28371,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27691,6 +28443,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27771,6 +28525,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27859,6 +28615,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -27946,6 +28704,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28009,6 +28769,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28094,6 +28856,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28165,6 +28929,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28228,6 +28994,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28314,6 +29082,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28367,6 +29137,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28430,6 +29202,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28525,6 +29299,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28612,6 +29388,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28696,6 +29474,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28764,6 +29544,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28887,6 +29669,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -28988,6 +29772,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29039,6 +29825,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29099,6 +29887,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29169,6 +29959,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29220,6 +30012,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29273,6 +30067,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29333,6 +30129,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29403,6 +30201,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29456,6 +30256,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29526,6 +30328,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29594,6 +30398,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29687,6 +30493,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29757,6 +30565,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29809,6 +30619,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29888,6 +30700,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29939,6 +30753,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -29990,6 +30806,27 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [ + { + "Id": "3b4ca7e3-ad5a-4d5c-93cd-19ddb0aa5027", + "MaybeId": "3b4ca7e3-ad5a-4d5c-93cd-19ddb0aa5027", + "DeletedAt": null, + "VariantEntryId": "6485b811-120d-486b-bb97-425faa9008d9", + "VariantHeadword": "inde", + "MainEntryId": "425289f4-fbcd-4644-99d7-c9417e20fa66", + "MainSenseId": null, + "MainHeadword": "ande", + "Types": [ + { + "Id": "bbd4adb3-9af5-4542-94e8-b0932124108b", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": {} + } + ], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30041,6 +30878,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30109,6 +30948,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30261,6 +31102,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30312,6 +31155,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30363,6 +31208,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30433,6 +31280,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30486,6 +31335,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30546,6 +31397,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30621,6 +31474,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30672,6 +31527,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30740,6 +31597,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30791,6 +31650,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30859,6 +31720,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30927,6 +31790,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -30978,6 +31843,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31038,6 +31905,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31089,6 +31958,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31149,6 +32020,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31209,6 +32082,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31356,6 +32231,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31448,6 +32325,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31499,6 +32378,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31567,6 +32448,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31654,6 +32537,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31722,6 +32607,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31783,6 +32670,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31844,6 +32733,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31931,6 +32822,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -31994,6 +32887,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32079,6 +32974,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32199,6 +33096,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32260,6 +33159,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32401,6 +33302,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32462,6 +33365,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32554,6 +33459,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32622,6 +33529,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32700,6 +33609,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32780,6 +33691,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32848,6 +33761,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32926,6 +33841,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -32987,6 +33904,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33057,6 +33976,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33125,6 +34046,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33193,6 +34116,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33261,6 +34186,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33329,6 +34256,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33406,6 +34335,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33545,6 +34476,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33630,6 +34563,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33698,6 +34633,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33771,6 +34708,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33854,6 +34793,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33922,6 +34863,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -33973,6 +34916,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34041,6 +34986,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34173,6 +35120,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34264,6 +35213,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34325,6 +35276,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34393,6 +35346,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34517,6 +35472,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34611,6 +35568,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34698,6 +35657,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34759,6 +35720,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34894,6 +35857,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -34957,6 +35922,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35098,6 +36065,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35195,6 +36164,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35280,6 +36251,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35350,6 +36323,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35445,6 +36420,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35496,6 +36473,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35581,6 +36560,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35649,6 +36630,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35712,6 +36695,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35773,6 +36758,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35859,6 +36846,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -35936,6 +36925,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36021,6 +37012,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36089,6 +37082,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36159,6 +37154,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36231,6 +37228,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36318,6 +37317,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36411,6 +37412,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36498,6 +37501,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36566,6 +37571,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36650,6 +37657,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36730,6 +37739,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36793,6 +37804,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36856,6 +37869,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -36975,6 +37990,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37054,6 +38071,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37117,6 +38136,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37187,6 +38208,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37255,6 +38278,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37319,6 +38344,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37380,6 +38407,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37441,6 +38470,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37502,6 +38533,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37582,6 +38615,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37645,6 +38680,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37722,6 +38759,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37775,6 +38814,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37878,6 +38919,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -37941,6 +38984,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38031,6 +39076,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38147,6 +39194,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38219,6 +39268,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38282,6 +39333,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38352,6 +39405,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38422,6 +39477,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38483,6 +39540,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38570,6 +39629,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38717,6 +39778,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38840,6 +39903,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38908,6 +39973,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -38959,6 +40026,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39010,6 +40079,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39122,6 +40193,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39317,6 +40390,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39385,6 +40460,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39472,6 +40549,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39544,6 +40623,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39631,6 +40712,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39724,6 +40807,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39786,6 +40871,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39839,6 +40926,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -39947,6 +41036,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40097,6 +41188,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40167,6 +41260,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40237,6 +41332,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40300,6 +41397,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40361,6 +41460,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40424,6 +41525,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40492,6 +41595,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40585,6 +41690,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40678,6 +41785,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40746,6 +41855,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40825,6 +41936,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -40911,6 +42024,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41021,6 +42136,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41081,6 +42198,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41151,6 +42270,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41276,6 +42397,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41370,6 +42493,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41443,6 +42568,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41537,6 +42664,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41621,6 +42750,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41691,6 +42822,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41785,6 +42918,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41865,6 +43000,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41928,6 +43065,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -41991,6 +43130,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42051,6 +43192,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42131,6 +43274,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42194,6 +43339,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42288,6 +43435,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42416,6 +43565,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42479,6 +43630,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42558,6 +43711,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42628,6 +43783,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42698,6 +43855,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42792,6 +43951,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42855,6 +44016,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -42935,6 +44098,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43015,6 +44180,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43088,6 +44255,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43151,6 +44320,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43214,6 +44385,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43301,6 +44474,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43369,6 +44544,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43451,6 +44628,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43519,6 +44698,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43612,6 +44793,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43699,6 +44882,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43779,6 +44964,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43849,6 +45036,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43919,6 +45108,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -43989,6 +45180,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44059,6 +45252,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44122,6 +45317,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44190,6 +45387,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44258,6 +45457,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44345,6 +45546,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44438,6 +45641,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44501,6 +45706,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44573,6 +45780,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44686,6 +45895,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44803,6 +46014,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44894,6 +46107,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -44964,6 +46179,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45027,6 +46244,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45115,6 +46334,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45217,6 +46438,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45287,6 +46510,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45350,6 +46575,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45420,6 +46647,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45497,6 +46726,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45558,6 +46789,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45621,6 +46854,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45684,6 +46919,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45744,6 +46981,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45835,6 +47074,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45913,6 +47154,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -45976,6 +47219,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46100,6 +47345,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46151,6 +47398,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46271,6 +47520,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46341,6 +47592,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46404,6 +47657,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46455,6 +47710,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46525,6 +47782,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46588,6 +47847,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46680,6 +47941,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46743,6 +48006,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46794,6 +48059,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46845,6 +48112,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46915,6 +48184,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -46994,6 +48265,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47097,6 +48370,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47160,6 +48435,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47230,6 +48507,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47296,6 +48575,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47376,6 +48657,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47444,6 +48727,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47567,6 +48852,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47742,6 +49029,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47828,6 +49117,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47913,6 +49204,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -47976,6 +49269,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48037,6 +49332,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48090,6 +49387,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48141,6 +49440,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48202,6 +49503,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48327,6 +49630,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48406,6 +49711,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48469,6 +49776,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48566,6 +49875,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48675,6 +49986,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48738,6 +50051,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48919,6 +50234,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -48987,6 +50304,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49076,6 +50395,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49160,6 +50481,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49237,6 +50560,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49331,6 +50656,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49425,6 +50752,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49497,6 +50826,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49632,6 +50963,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49692,6 +51025,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49753,6 +51088,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49821,6 +51158,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49898,6 +51237,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -49977,6 +51318,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50047,6 +51390,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50117,6 +51462,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50178,6 +51525,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50241,6 +51590,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50304,6 +51655,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50376,6 +51729,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50494,6 +51849,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50571,6 +51928,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50648,6 +52007,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50718,6 +52079,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50779,6 +52142,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50840,6 +52205,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -50927,6 +52294,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51006,6 +52375,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51067,6 +52438,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51138,6 +52511,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51208,6 +52583,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51278,6 +52655,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51348,6 +52727,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51458,6 +52839,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51538,6 +52921,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51618,6 +53003,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51705,6 +53092,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51792,6 +53181,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51845,6 +53236,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51915,6 +53308,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -51985,6 +53380,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52036,6 +53433,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52115,6 +53514,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52195,6 +53596,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52280,6 +53683,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52348,6 +53753,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52416,6 +53823,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52501,6 +53910,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52571,6 +53982,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52648,6 +54061,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52737,6 +54152,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52822,6 +54239,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -52892,6 +54311,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53022,6 +54443,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53102,6 +54525,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53182,6 +54607,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53250,6 +54677,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53313,6 +54742,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53393,6 +54824,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53456,6 +54889,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53526,6 +54961,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53612,6 +55049,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53732,6 +55171,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53785,6 +55226,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53855,6 +55298,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53918,6 +55363,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -53988,6 +55435,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54058,6 +55507,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54137,6 +55588,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54188,6 +55641,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54258,6 +55713,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54326,6 +55783,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54420,6 +55879,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54500,6 +55961,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54570,6 +56033,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54633,6 +56098,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54727,6 +56194,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54807,6 +56276,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54858,6 +56329,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54919,6 +56392,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -54989,6 +56464,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55059,6 +56536,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55129,6 +56608,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55199,6 +56680,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55262,6 +56745,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55341,6 +56826,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55411,6 +56898,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55474,6 +56963,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55517,6 +57008,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55647,6 +57140,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55744,6 +57239,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55814,6 +57311,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55884,6 +57383,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -55954,6 +57455,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56119,6 +57622,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56198,6 +57703,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56261,6 +57768,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56331,6 +57840,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56399,6 +57910,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56462,6 +57975,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56515,6 +58030,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56585,6 +58102,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56688,6 +58207,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56758,6 +58279,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56821,6 +58344,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56891,6 +58416,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -56961,6 +58488,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57024,6 +58553,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57118,6 +58649,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57181,6 +58714,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57244,6 +58779,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57345,6 +58882,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57423,6 +58962,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57517,6 +59058,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57587,6 +59130,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57681,6 +59226,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57751,6 +59298,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57838,6 +59387,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57908,6 +59459,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -57978,6 +59531,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58048,6 +59603,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58118,6 +59675,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58197,6 +59756,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58260,6 +59821,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58330,6 +59893,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58443,6 +60008,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58515,6 +60082,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58585,6 +60154,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58663,6 +60234,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58741,6 +60314,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58792,6 +60367,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58867,6 +60444,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -58942,6 +60521,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59010,6 +60591,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59078,6 +60661,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59225,6 +60810,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59334,6 +60921,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59503,6 +61092,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59589,6 +61180,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59671,6 +61264,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59741,6 +61336,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59863,6 +61460,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -59943,6 +61542,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60013,6 +61614,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60083,6 +61686,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60146,6 +61751,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60209,6 +61816,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60329,6 +61938,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60416,6 +62027,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60503,6 +62116,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60610,6 +62225,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60690,6 +62307,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60760,6 +62379,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60852,6 +62473,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60922,6 +62545,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -60985,6 +62610,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61064,6 +62691,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61134,6 +62763,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61212,6 +62843,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61275,6 +62908,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61338,6 +62973,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61400,6 +63037,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61497,6 +63136,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61610,6 +63251,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61680,6 +63323,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61800,6 +63445,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61880,6 +63527,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -61950,6 +63599,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62013,6 +63664,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62093,6 +63746,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62163,6 +63818,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62257,6 +63914,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62310,6 +63969,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62423,6 +64084,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62515,6 +64178,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62633,6 +64298,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62712,6 +64379,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62782,6 +64451,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62845,6 +64516,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -62915,6 +64588,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63002,6 +64677,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63065,6 +64742,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63128,6 +64807,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63198,6 +64879,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63249,6 +64932,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63312,6 +64997,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63390,6 +65077,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63484,6 +65173,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63554,6 +65245,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63617,6 +65310,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63704,6 +65399,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63783,6 +65480,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63853,6 +65552,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -63950,6 +65651,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64046,6 +65749,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64126,6 +65831,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64213,6 +65920,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64283,6 +65992,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64334,6 +66045,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64711,6 +66424,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64773,6 +66488,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64841,6 +66558,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64909,6 +66628,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -64993,6 +66714,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65078,6 +66801,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65139,6 +66864,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65219,6 +66946,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65289,6 +67018,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65359,6 +67090,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65422,6 +67155,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65492,6 +67227,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65562,6 +67299,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65632,6 +67371,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65702,6 +67443,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65765,6 +67508,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65826,6 +67571,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65889,6 +67636,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -65985,6 +67734,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66046,6 +67797,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66109,6 +67862,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66161,6 +67916,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66229,6 +67986,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66290,6 +68049,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66378,6 +68139,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66455,6 +68218,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66515,6 +68280,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66566,6 +68333,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66627,6 +68396,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66695,6 +68466,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66842,6 +68615,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -66912,6 +68687,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67046,6 +68823,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67133,6 +68912,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67266,6 +69047,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67348,6 +69131,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67418,6 +69203,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67499,6 +69286,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67550,6 +69339,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67593,6 +69384,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67710,6 +69503,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67763,6 +69558,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67840,6 +69637,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67918,6 +69717,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -67979,6 +69780,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68056,6 +69859,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68126,6 +69931,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68220,6 +70027,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68290,6 +70099,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68360,6 +70171,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68485,6 +70298,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68570,6 +70385,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68621,6 +70438,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68689,6 +70508,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68757,6 +70578,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -68834,6 +70657,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69010,6 +70835,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69094,6 +70921,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69188,6 +71017,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69267,6 +71098,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69335,6 +71168,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69414,6 +71249,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69508,6 +71345,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69627,6 +71466,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69700,6 +71541,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69768,6 +71611,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69838,6 +71683,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69901,6 +71748,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -69986,6 +71835,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70083,6 +71934,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70162,6 +72015,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70230,6 +72085,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70300,6 +72157,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70363,6 +72222,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70433,6 +72294,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70501,6 +72364,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70588,6 +72453,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70656,6 +72523,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70726,6 +72595,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70843,6 +72714,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -70995,6 +72868,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71065,6 +72940,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71144,6 +73021,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71223,6 +73102,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71293,6 +73174,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71391,6 +73274,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71461,6 +73346,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71522,6 +73409,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71583,6 +73472,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71677,6 +73568,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71740,6 +73633,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71820,6 +73715,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71890,6 +73787,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -71960,6 +73859,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72030,6 +73931,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72121,6 +74024,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72191,6 +74096,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72270,6 +74177,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72349,6 +74258,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72417,6 +74328,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72520,6 +74433,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72581,6 +74496,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72644,6 +74561,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72712,6 +74631,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72784,6 +74705,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72864,6 +74787,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72927,6 +74852,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -72990,6 +74917,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73060,6 +74989,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73214,6 +75145,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73282,6 +75215,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73368,6 +75303,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73438,6 +75375,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73501,6 +75440,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73571,6 +75512,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73651,6 +75594,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73713,6 +75658,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73804,6 +75751,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73865,6 +75814,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -73928,6 +75879,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74018,6 +75971,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74081,6 +76036,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74144,6 +76101,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74207,6 +76166,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74277,6 +76238,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74347,6 +76310,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74417,6 +76382,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74504,6 +76471,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74594,6 +76563,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74683,6 +76654,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74746,6 +76719,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74825,6 +76800,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -74895,6 +76872,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75012,6 +76991,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75092,6 +77073,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75162,6 +77145,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75232,6 +77217,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75295,6 +77282,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75365,6 +77354,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75435,6 +77426,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75498,6 +77491,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75549,6 +77544,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75634,6 +77631,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75721,6 +77720,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75808,6 +77809,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75878,6 +77881,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -75939,6 +77944,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76024,6 +78031,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76094,6 +78103,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76157,6 +78168,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76227,6 +78240,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76290,6 +78305,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76360,6 +78377,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76453,6 +78472,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76516,6 +78537,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76579,6 +78602,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76656,6 +78681,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76719,6 +78746,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76782,6 +78811,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76871,6 +78902,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -76939,6 +78972,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77007,6 +79042,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77077,6 +79114,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77147,6 +79186,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77210,6 +79251,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77278,6 +79321,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77348,6 +79393,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77411,6 +79458,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77479,6 +79528,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77570,6 +79621,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77633,6 +79686,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77722,6 +79777,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77775,6 +79832,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77854,6 +79913,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -77945,6 +80006,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78015,6 +80078,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78068,6 +80133,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78129,6 +80196,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78220,6 +80289,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78298,6 +80369,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78395,6 +80468,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78492,6 +80567,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78578,6 +80655,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78646,6 +80725,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78732,6 +80813,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78836,6 +80919,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78925,6 +81010,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -78993,6 +81080,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79063,6 +81152,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79142,6 +81233,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79212,6 +81305,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79291,6 +81386,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79359,6 +81456,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79420,6 +81519,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79488,6 +81589,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79551,6 +81654,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79619,6 +81724,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79696,6 +81803,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79764,6 +81873,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79835,6 +81946,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79903,6 +82016,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -79975,6 +82090,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80036,6 +82153,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80097,6 +82216,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80165,6 +82286,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80243,6 +82366,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80328,6 +82453,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80420,6 +82547,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80481,6 +82610,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80549,6 +82680,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80617,6 +82750,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80668,6 +82803,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80729,6 +82866,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80797,6 +82936,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80868,6 +83009,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -80971,6 +83114,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81041,6 +83186,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81109,6 +83256,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81186,6 +83335,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81300,6 +83451,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81370,6 +83523,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81431,6 +83586,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81499,6 +83656,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81586,6 +83745,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81656,6 +83817,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81724,6 +83887,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81792,6 +83957,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81920,6 +84087,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -81991,6 +84160,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82068,6 +84239,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82153,6 +84326,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82238,6 +84413,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82318,6 +84495,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82388,6 +84567,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82466,6 +84647,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82537,6 +84720,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82672,6 +84857,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82770,6 +84957,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82831,6 +85020,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82901,6 +85092,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -82969,6 +85162,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83048,6 +85243,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83101,6 +85298,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83169,6 +85368,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83230,6 +85431,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83293,6 +85496,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83356,6 +85561,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83426,6 +85633,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83575,6 +85784,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83628,6 +85839,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83715,6 +85928,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83778,6 +85993,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83848,6 +86065,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83911,6 +86130,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -83981,6 +86202,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84044,6 +86267,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84114,6 +86339,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84267,6 +86494,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84337,6 +86566,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84407,6 +86638,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84500,6 +86733,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84596,6 +86831,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84666,6 +86903,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84719,6 +86958,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84789,6 +87030,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -84874,6 +87117,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85062,6 +87307,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85113,6 +87360,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85215,6 +87464,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85285,6 +87536,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85376,6 +87629,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85482,6 +87737,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85552,6 +87809,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85629,6 +87888,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85729,6 +87990,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85790,6 +88053,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85843,6 +88108,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85934,6 +88201,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -85985,6 +88254,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86048,6 +88319,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86116,6 +88389,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86185,6 +88460,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86248,6 +88525,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86342,6 +88621,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86433,6 +88714,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86503,6 +88786,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86573,6 +88858,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86636,6 +88923,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86706,6 +88995,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86769,6 +89060,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86903,6 +89196,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -86996,6 +89291,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87089,6 +89386,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87150,6 +89449,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87218,6 +89519,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87312,6 +89615,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87380,6 +89685,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87443,6 +89750,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87511,6 +89820,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87593,6 +89904,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87644,6 +89957,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87704,6 +90019,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87780,6 +90097,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87843,6 +90162,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87913,6 +90234,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -87985,6 +90308,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88055,6 +90380,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88298,6 +90625,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88382,6 +90711,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88452,6 +90783,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88520,6 +90853,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88609,6 +90944,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88679,6 +91016,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88732,6 +91071,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88811,6 +91152,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88881,6 +91224,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -88951,6 +91296,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89021,6 +91368,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89091,6 +91440,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89195,6 +91546,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89258,6 +91611,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89328,6 +91683,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89398,6 +91755,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89471,6 +91830,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89589,6 +91950,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89652,6 +92015,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89722,6 +92087,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89815,6 +92182,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89885,6 +92254,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -89964,6 +92335,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90034,6 +92407,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90128,6 +92503,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90198,6 +92575,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90266,6 +92645,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90346,6 +92727,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90418,6 +92801,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90481,6 +92866,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90551,6 +92938,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90614,6 +93003,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90687,6 +93078,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90774,6 +93167,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90842,6 +93237,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -90946,6 +93343,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91032,6 +93431,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91095,6 +93496,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91158,6 +93561,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91228,6 +93633,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91298,6 +93705,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91378,6 +93787,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91458,6 +93869,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91528,6 +93941,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91589,6 +94004,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91712,6 +94129,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91791,6 +94210,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91938,6 +94359,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -91989,6 +94412,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92066,6 +94491,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92157,6 +94584,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92244,6 +94673,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92324,6 +94755,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92392,6 +94825,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92455,6 +94890,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92508,6 +94945,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92609,6 +95048,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92755,6 +95196,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92827,6 +95270,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92907,6 +95352,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -92987,6 +95434,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93074,6 +95523,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93175,6 +95626,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93245,6 +95698,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93400,6 +95855,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93480,6 +95937,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93571,6 +96030,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93641,6 +96102,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93709,6 +96172,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93772,6 +96237,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93840,6 +96307,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93908,6 +96377,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -93987,6 +96458,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94081,6 +96554,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94151,6 +96626,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94221,6 +96698,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94291,6 +96770,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94361,6 +96842,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94424,6 +96907,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94487,6 +96972,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94555,6 +97042,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94625,6 +97114,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94695,6 +97186,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94788,6 +97281,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94856,6 +97351,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94917,6 +97414,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -94997,6 +97496,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95050,6 +97551,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95111,6 +97614,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95195,6 +97700,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95265,6 +97772,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95335,6 +97844,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95405,6 +97916,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95475,6 +97988,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95545,6 +98060,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95617,6 +98134,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95680,6 +98199,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95752,6 +98273,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95848,6 +98371,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -95911,6 +98436,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96036,6 +98563,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96097,6 +98626,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96191,6 +98722,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96252,6 +98785,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96322,6 +98857,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96401,6 +98938,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96488,6 +99027,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96556,6 +99097,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96624,6 +99167,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96675,6 +99220,27 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [ + { + "Id": "be2fc635-b543-4267-9dbc-b1fc96711f48", + "MaybeId": "be2fc635-b543-4267-9dbc-b1fc96711f48", + "DeletedAt": null, + "VariantEntryId": "d03f39d0-10ef-4d35-b13b-a965124a9230", + "VariantHeadword": "sia", + "MainEntryId": "05640c89-1b5b-463b-83e9-778928d23fc7", + "MainSenseId": null, + "MainHeadword": "siya", + "Types": [ + { + "Id": "0c4663b3-4d9a-47af-b9a1-c8565d8112ed", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": {} + } + ], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96752,6 +99318,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96815,6 +99383,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96887,6 +99457,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -96937,6 +99509,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97005,6 +99579,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97098,6 +99674,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97168,6 +99746,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97231,6 +99811,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97375,6 +99957,27 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [ + { + "Id": "be2fc635-b543-4267-9dbc-b1fc96711f48", + "MaybeId": "be2fc635-b543-4267-9dbc-b1fc96711f48", + "DeletedAt": null, + "VariantEntryId": "d03f39d0-10ef-4d35-b13b-a965124a9230", + "VariantHeadword": "sia", + "MainEntryId": "05640c89-1b5b-463b-83e9-778928d23fc7", + "MainSenseId": null, + "MainHeadword": "siya", + "Types": [ + { + "Id": "0c4663b3-4d9a-47af-b9a1-c8565d8112ed", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": {} + } + ], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97469,6 +100072,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97532,6 +100137,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97595,6 +100202,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97720,6 +100329,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97806,6 +100417,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97869,6 +100482,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -97955,6 +100570,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98025,6 +100642,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98095,6 +100714,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98172,6 +100793,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98242,6 +100865,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98303,6 +100928,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98373,6 +101000,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98443,6 +101072,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98513,6 +101144,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98583,6 +101216,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98636,6 +101271,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98704,6 +101341,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98774,6 +101413,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98844,6 +101485,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98912,6 +101555,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -98980,6 +101625,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99043,6 +101690,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99106,6 +101755,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99176,6 +101827,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99253,6 +101906,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99504,6 +102159,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99567,6 +102224,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99760,6 +102419,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -99828,6 +102489,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100009,6 +102672,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100071,6 +102736,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100134,6 +102801,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100197,6 +102866,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100250,6 +102921,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100335,6 +103008,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100411,6 +103086,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100481,6 +103158,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100544,6 +103223,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100631,6 +103312,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100701,6 +103384,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100771,6 +103456,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100868,6 +103555,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -100955,6 +103644,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101023,6 +103714,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101084,6 +103777,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101156,6 +103851,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101216,6 +103913,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101303,6 +104002,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101371,6 +104072,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101422,6 +104125,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101494,6 +104199,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101574,6 +104281,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101652,6 +104361,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101720,6 +104431,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101799,6 +104512,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101862,6 +104577,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -101925,6 +104642,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102028,6 +104747,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102098,6 +104819,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102161,6 +104884,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102214,6 +104939,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102331,6 +105058,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102392,6 +105121,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102460,6 +105191,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102521,6 +105254,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102608,6 +105343,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102676,6 +105413,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102737,6 +105476,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102800,6 +105541,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102860,6 +105603,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -102937,6 +105682,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103029,6 +105776,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103113,6 +105862,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103164,6 +105915,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103256,6 +106009,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103319,6 +106074,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103370,6 +106127,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103422,6 +106181,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103504,6 +106265,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103605,6 +106368,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103699,6 +106464,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103762,6 +106529,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103832,6 +106601,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103912,6 +106683,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -103992,6 +106765,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104045,6 +106820,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104130,6 +106907,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104183,6 +106962,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104234,6 +107015,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104350,6 +107133,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104485,6 +107270,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104553,6 +107340,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104702,6 +107491,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104765,6 +107556,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104816,6 +107609,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104901,6 +107696,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -104996,6 +107793,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105057,6 +107856,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105125,6 +107926,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105188,6 +107991,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105258,6 +108063,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105394,6 +108201,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105464,6 +108273,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105534,6 +108345,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105602,6 +108415,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105681,6 +108496,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105751,6 +108568,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105821,6 +108640,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105874,6 +108695,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -105946,6 +108769,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106009,6 +108834,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106081,6 +108908,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106192,6 +109021,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106360,6 +109191,8 @@ } ], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106428,6 +109261,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106551,6 +109386,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106650,6 +109487,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106701,6 +109540,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106801,6 +109642,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106890,6 +109733,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -106960,6 +109805,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107030,6 +109877,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107098,6 +109947,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107166,6 +110017,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107234,6 +110087,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107347,6 +110202,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107424,6 +110281,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107508,6 +110367,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107571,6 +110432,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107639,6 +110502,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107707,6 +110572,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107785,6 +110652,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107871,6 +110740,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -107922,6 +110793,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108014,6 +110887,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108065,6 +110940,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108142,6 +111019,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108202,6 +111081,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108255,6 +111136,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108318,6 +111201,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108403,6 +111288,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108454,6 +111341,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108517,6 +111406,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108594,6 +111485,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108674,6 +111567,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108760,6 +111655,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108823,6 +111720,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108891,6 +111790,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -108954,6 +111855,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109005,6 +111908,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109075,6 +111980,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109162,6 +112069,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109239,6 +112148,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109290,6 +112201,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109353,6 +112266,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109421,6 +112336,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109532,6 +112449,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109633,6 +112552,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109718,6 +112639,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109803,6 +112726,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109890,6 +112815,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -109960,6 +112887,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110030,6 +112959,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110100,6 +113031,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110168,6 +113101,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110231,6 +113166,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110361,6 +113298,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110429,6 +113368,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110499,6 +113440,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110596,6 +113539,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110690,6 +113635,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110741,6 +113688,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110811,6 +113760,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110890,6 +113841,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -110984,6 +113937,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111035,6 +113990,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111098,6 +114055,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111159,6 +114118,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111229,6 +114190,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111309,6 +114272,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111372,6 +114337,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111489,6 +114456,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111561,6 +114530,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111696,6 +114667,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111764,6 +114737,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111834,6 +114809,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111902,6 +114879,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -111970,6 +114949,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112031,6 +115012,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112082,6 +115065,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112143,6 +115128,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112223,6 +115210,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112291,6 +115280,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112342,6 +115333,27 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [ + { + "Id": "dafa2dec-2fe6-4c6c-a07c-121de360d7b1", + "MaybeId": "dafa2dec-2fe6-4c6c-a07c-121de360d7b1", + "DeletedAt": null, + "VariantEntryId": "564fffa0-0aec-46ab-8d41-cbd30be82be1", + "VariantHeadword": "yenda", + "MainEntryId": "2bde7e2c-9ddc-4de0-b416-c24c0710c2fa", + "MainSenseId": null, + "MainHeadword": "enda", + "Types": [ + { + "Id": "bbd4adb3-9af5-4542-94e8-b0932124108b", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": {} + } + ], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112412,6 +115424,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112480,6 +115494,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112564,6 +115580,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112627,6 +115645,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112690,6 +115710,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112753,6 +115775,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -112900,6 +115924,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113031,6 +116057,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113110,6 +116138,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113173,6 +116203,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113236,6 +116268,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113306,6 +116340,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -113369,6 +116405,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "70c0a758-5901-4884-b992-94ca31087607", @@ -130490,5 +133528,91 @@ "Order": 2 } ] - } + }, + "VariantTypes": [ + { + "Id": "024b62c9-93b3-41a0-ab19-587a0030219a", + "Name": { + "en": "Dialectal Variant", + "pt": "Variac\u0327a\u0303o Dialectal" + }, + "DeletedAt": null + }, + { + "Id": "86dd5eb3-b90a-4296-afd3-60c312b63a9a", + "Name": { + "en": "Semantic Dialect Variant", + "pt": "Variac\u0327a\u0303o Sema\u0302ntica" + }, + "DeletedAt": null + }, + { + "Id": "bbd4adb3-9af5-4542-94e8-b0932124108b", + "Name": { + "en": "Pronunciation Variant", + "pt": "Variac\u0327a\u0303o da Pronuncia" + }, + "DeletedAt": null + }, + { + "Id": "c7fe4c4a-abaf-4a0b-b633-d3e73f4057ee", + "Name": { + "en": "Lexical Dialect Variant", + "pt": "Variac\u0327a\u0303o Lexical" + }, + "DeletedAt": null + }, + { + "Id": "4343b1ef-b54f-4fa4-9998-271319a6d74c", + "Name": { + "en": "Free Variant", + "pt": "Variac\u0327a\u0303o livre" + }, + "DeletedAt": null + }, + { + "Id": "fcc61889-00e6-467b-9cf0-8c4f48b9a486", + "Name": { + "en": "Inflectional Variant", + "pt": "Variac\u0327a\u0303o Inflectional" + }, + "DeletedAt": null + }, + { + "Id": "0c4663b3-4d9a-47af-b9a1-c8565d8112ed", + "Name": { + "en": "Spelling Variant", + "pt": "Variac\u0327a\u0303o de Soletrac\u0327a\u0303o" + }, + "DeletedAt": null + }, + { + "Id": "01d4fbc1-3b0c-4f52-9163-7ab0d4f4711c", + "Name": { + "en": "Irregularly Inflected Form" + }, + "DeletedAt": null + }, + { + "Id": "a32f1d1c-4832-46a2-9732-c2276d6547e8", + "Name": { + "en": "Plural" + }, + "DeletedAt": null + }, + { + "Id": "837ebe72-8c1d-4864-95d9-fa313c499d78", + "Name": { + "en": "Past" + }, + "DeletedAt": null + }, + { + "Id": "3942addb-99fd-43e9-ab7d-99025ceb0d4e", + "Name": { + "en": "Unspecified Variant" + }, + "DeletedAt": null + } + ] } \ No newline at end of file diff --git a/backend/FwLite/FwLiteProjectSync/CrdtFwdataProjectSyncService.cs b/backend/FwLite/FwLiteProjectSync/CrdtFwdataProjectSyncService.cs index 588803caba..63fea51dde 100644 --- a/backend/FwLite/FwLiteProjectSync/CrdtFwdataProjectSyncService.cs +++ b/backend/FwLite/FwLiteProjectSync/CrdtFwdataProjectSyncService.cs @@ -134,6 +134,12 @@ private async Task SyncInternal(IMiniLcmApi crdtApi, IMiniLcmApi fwd crdtChanges += await ComplexFormTypeSync.Sync(projectSnapshot.ComplexFormTypes, currentFwDataComplexFormTypes, crdtApi); fwdataChanges += await ComplexFormTypeSync.Sync(currentFwDataComplexFormTypes, await crdtApi.GetComplexFormTypes().ToArrayAsync(), fwdataApi); + var currentFwDataVariantTypes = await fwdataApi.GetVariantTypes().ToArrayAsync(); + // Legacy snapshots predate variant support and deserialize with an empty list; the CRDT + // genuinely has no variant types yet, so that baseline correctly imports FwData's list. + crdtChanges += await VariantTypeSync.Sync(projectSnapshot.VariantTypes, currentFwDataVariantTypes, crdtApi); + fwdataChanges += await VariantTypeSync.Sync(currentFwDataVariantTypes, await crdtApi.GetVariantTypes().ToArrayAsync(), fwdataApi); + var currentFwDataMorphTypes = await fwdataApi.GetMorphTypes().ToArrayAsync(); crdtChanges += await MorphTypeSync.Sync(projectSnapshot.MorphTypes, currentFwDataMorphTypes, crdtApi); fwdataChanges += await MorphTypeSync.Sync(currentFwDataMorphTypes, await crdtApi.GetMorphTypes().ToArrayAsync(), fwdataApi); diff --git a/backend/FwLite/FwLiteProjectSync/DryRunMiniLcmApi.cs b/backend/FwLite/FwLiteProjectSync/DryRunMiniLcmApi.cs index 61ea258c89..3265987449 100644 --- a/backend/FwLite/FwLiteProjectSync/DryRunMiniLcmApi.cs +++ b/backend/FwLite/FwLiteProjectSync/DryRunMiniLcmApi.cs @@ -126,6 +126,31 @@ public Task DeleteComplexFormType(Guid id) return Task.CompletedTask; } + public Task CreateVariantType(VariantType variantType) + { + DryRunRecords.Add(new DryRunRecord(nameof(CreateVariantType), + $"Create variant type {variantType.Name}")); + return Task.FromResult(variantType); + } + + public async Task UpdateVariantType(Guid id, UpdateObjectInput update) + { + DryRunRecords.Add(new DryRunRecord(nameof(UpdateVariantType), $"Update variant type {id}")); + return await _api.GetVariantType(id) ?? throw new NullReferenceException($"unable to find variant type with id {id}"); + } + + public Task UpdateVariantType(VariantType before, VariantType after, IMiniLcmApi? api) + { + DryRunRecords.Add(new DryRunRecord(nameof(UpdateVariantType), $"Update variant type {after.Id}")); + return Task.FromResult(after); + } + + public Task DeleteVariantType(Guid id) + { + DryRunRecords.Add(new DryRunRecord(nameof(DeleteVariantType), $"Delete variant type {id}")); + return Task.CompletedTask; + } + public Task CreateMorphType(MorphType morphType) { DryRunRecords.Add(new DryRunRecord(nameof(CreateMorphType), $"Create morph type {morphType.Kind} ({morphType.Id})")); @@ -149,10 +174,10 @@ public Task CreateEntry(Entry entry, CreateEntryOptions? options) options ??= new CreateEntryOptions(); DryRunRecords.Add(new DryRunRecord(nameof(CreateEntry), $"Create entry {entry.Headword()} ({options})")); // Only return what would have been persisted - if (options.IncludeComplexFormsAndComponents) + if (options.IncludeEntryReferences) return Task.FromResult(entry); else - return Task.FromResult(entry with { Components = [], ComplexForms = [] }); + return Task.FromResult(entry with { Components = [], ComplexForms = [], VariantOf = [], Variants = [] }); } public Task UpdateEntry(Guid id, UpdateObjectInput update) @@ -364,6 +389,47 @@ public async Task AddComplexFormType(Guid entryId, Guid complexFormTypeId) await Task.CompletedTask; } + public Task CreateVariant(Variant variant) + { + DryRunRecords.Add(new DryRunRecord(nameof(CreateVariant), $"Create variant link {VariantName(variant)}")); + return Task.FromResult(variant); + } + + public Task UpdateVariant(Variant before, Variant after, IMiniLcmApi? api = null) + { + DryRunRecords.Add(new DryRunRecord(nameof(UpdateVariant), $"Update variant link {VariantName(after)}")); + return Task.FromResult(after); + } + + public Task DeleteVariant(Variant variant) + { + DryRunRecords.Add(new DryRunRecord(nameof(DeleteVariant), $"Delete variant link {VariantName(variant)}")); + return Task.CompletedTask; + } + + public Task AddVariantType(Variant variant, Guid variantTypeId, BetweenPosition? position = null) + { + DryRunRecords.Add(new DryRunRecord(nameof(AddVariantType), $"Add variant type {variantTypeId} to variant link {VariantName(variant)}")); + return Task.CompletedTask; + } + + public Task RemoveVariantType(Variant variant, Guid variantTypeId) + { + DryRunRecords.Add(new DryRunRecord(nameof(RemoveVariantType), $"Remove variant type {variantTypeId} from variant link {VariantName(variant)}")); + return Task.CompletedTask; + } + + public Task MoveVariantType(Variant variant, Guid variantTypeId, BetweenPosition position) + { + DryRunRecords.Add(new DryRunRecord(nameof(MoveVariantType), $"Move variant type {variantTypeId} on variant link {VariantName(variant)}")); + return Task.CompletedTask; + } + + private static string VariantName(Variant variant) + { + return $"{variant.VariantHeadword ?? variant.VariantEntryId.ToString()} -> {variant.MainHeadword ?? variant.MainEntryId.ToString()}{(variant.MainSenseId is null ? "" : $" (sense {variant.MainSenseId})")}"; + } + public async Task CreatePublication(Publication pub) { DryRunRecords.Add(new DryRunRecord(nameof(CreatePublication), $"Create publication {pub.Id}")); @@ -440,6 +506,24 @@ public Task SubmitCreateComplexFormComponent(ComplexFormComponent complexFormCom return Task.CompletedTask; } + public Task SubmitCreateVariant(Variant variant) + { + DryRunRecords.Add(new DryRunRecord(nameof(SubmitCreateVariant), $"Create variant link {VariantName(variant)}")); + return Task.CompletedTask; + } + + public Task SubmitUpdateVariant(Variant variant, UpdateObjectInput update) + { + DryRunRecords.Add(new DryRunRecord(nameof(SubmitUpdateVariant), $"Update variant link {VariantName(variant)}")); + return Task.CompletedTask; + } + + public Task SubmitUpdateVariantType(Guid id, UpdateObjectInput update) + { + DryRunRecords.Add(new DryRunRecord(nameof(SubmitUpdateVariantType), $"Update variant type {id}")); + return Task.CompletedTask; + } + public Task SubmitUpdatePartOfSpeech(Guid id, UpdateObjectInput update) { DryRunRecords.Add(new DryRunRecord(nameof(SubmitUpdatePartOfSpeech), $"Update part of speech {id}")); diff --git a/backend/FwLite/FwLiteProjectSync/Import/ResumableImportApi.cs b/backend/FwLite/FwLiteProjectSync/Import/ResumableImportApi.cs index 942b81f900..159c6de0dd 100644 --- a/backend/FwLite/FwLiteProjectSync/Import/ResumableImportApi.cs +++ b/backend/FwLite/FwLiteProjectSync/Import/ResumableImportApi.cs @@ -58,6 +58,10 @@ async Task IMiniLcmWriteApi.CreateComplexFormType(ComplexFormTy { return await HasCreated(complexFormType, _api.GetComplexFormTypes(), () => _api.CreateComplexFormType(complexFormType)); } + async Task IMiniLcmWriteApi.CreateVariantType(VariantType variantType) + { + return await HasCreated(variantType, _api.GetVariantTypes(), () => _api.CreateVariantType(variantType)); + } async Task IMiniLcmWriteApi.CreateSemanticDomain(SemanticDomain semanticDomain) { return await HasCreated(semanticDomain, _api.GetSemanticDomains(), () => _api.CreateSemanticDomain(semanticDomain)); diff --git a/backend/FwLite/FwLiteShared/Services/MiniLcmApiNotifyWrapper.cs b/backend/FwLite/FwLiteShared/Services/MiniLcmApiNotifyWrapper.cs index ebf9048bd3..e0a6bee82d 100644 --- a/backend/FwLite/FwLiteShared/Services/MiniLcmApiNotifyWrapper.cs +++ b/backend/FwLite/FwLiteShared/Services/MiniLcmApiNotifyWrapper.cs @@ -136,6 +136,44 @@ async Task IMiniLcmWriteApi.DeleteComplexFormComponent(ComplexFormComponent comp NotifyEntriesChanged(complexFormComponent.ComplexFormEntryId, complexFormComponent.ComponentEntryId); } + async Task IMiniLcmWriteApi.CreateVariant(Variant variant) + { + var result = await _api.CreateVariant(variant); + NotifyEntriesChanged(result.VariantEntryId, result.MainEntryId); + return result; + } + + async Task IMiniLcmWriteApi.UpdateVariant(Variant before, Variant after, IMiniLcmApi? api) + { + var result = await _api.UpdateVariant(before, after, api ?? this); + NotifyEntriesChanged(result.VariantEntryId, result.MainEntryId); + return result; + } + + async Task IMiniLcmWriteApi.DeleteVariant(Variant variant) + { + await _api.DeleteVariant(variant); + NotifyEntriesChanged(variant.VariantEntryId, variant.MainEntryId); + } + + async Task IMiniLcmWriteApi.AddVariantType(Variant variant, Guid variantTypeId, BetweenPosition? position) + { + await _api.AddVariantType(variant, variantTypeId, position); + NotifyEntriesChanged(variant.VariantEntryId, variant.MainEntryId); + } + + async Task IMiniLcmWriteApi.RemoveVariantType(Variant variant, Guid variantTypeId) + { + await _api.RemoveVariantType(variant, variantTypeId); + NotifyEntriesChanged(variant.VariantEntryId, variant.MainEntryId); + } + + async Task IMiniLcmWriteApi.MoveVariantType(Variant variant, Guid variantTypeId, BetweenPosition position) + { + await _api.MoveVariantType(variant, variantTypeId, position); + NotifyEntriesChanged(variant.VariantEntryId, variant.MainEntryId); + } + async Task IMiniLcmWriteApi.DeleteEntry(Guid id) { await _api.DeleteEntry(id); diff --git a/backend/FwLite/FwLiteShared/Services/MiniLcmJsInvokable.cs b/backend/FwLite/FwLiteShared/Services/MiniLcmJsInvokable.cs index a5fcfffb44..72601ea15f 100644 --- a/backend/FwLite/FwLiteShared/Services/MiniLcmJsInvokable.cs +++ b/backend/FwLite/FwLiteShared/Services/MiniLcmJsInvokable.cs @@ -430,6 +430,48 @@ public async Task RemoveComplexFormType(Guid entryId, Guid complexFormTypeId) OnDataChanged(); } + [JSInvokable] + public ValueTask GetVariantTypes() + { + return _wrappedApi.GetVariantTypes().ToArrayAsync(); + } + + [JSInvokable] + [TsFunction(Type = "Promise")] + public Task GetVariantType(Guid id) + { + return _wrappedApi.GetVariantType(id); + } + + [JSInvokable] + public async Task CreateVariant(Variant variant) + { + var createdVariant = await _wrappedApi.CreateVariant(variant); + OnDataChanged(); + return createdVariant; + } + + [JSInvokable] + public async Task DeleteVariant(Variant variant) + { + await _wrappedApi.DeleteVariant(variant); + OnDataChanged(); + } + + [JSInvokable] + public async Task AddVariantType(Variant variant, Guid variantTypeId) + { + await _wrappedApi.AddVariantType(variant, variantTypeId); + OnDataChanged(); + } + + [JSInvokable] + public async Task RemoveVariantType(Variant variant, Guid variantTypeId) + { + await _wrappedApi.RemoveVariantType(variant, variantTypeId); + OnDataChanged(); + } + [JSInvokable] public async Task CreateSense(Guid entryId, Sense sense) { diff --git a/backend/FwLite/FwLiteShared/TypeGen/ReinforcedFwLiteTypingConfig.cs b/backend/FwLite/FwLiteShared/TypeGen/ReinforcedFwLiteTypingConfig.cs index 18bdb27bac..55bb3d8870 100644 --- a/backend/FwLite/FwLiteShared/TypeGen/ReinforcedFwLiteTypingConfig.cs +++ b/backend/FwLite/FwLiteShared/TypeGen/ReinforcedFwLiteTypingConfig.cs @@ -91,6 +91,7 @@ private static void ConfigureMiniLcmTypes(ConfigurationBuilder builder) typeof(Translation), typeof(Picture), + typeof(VariantTypeRef), typeof(MediaFile), typeof(LcmFileMetadata), typeof(ViewField), diff --git a/backend/FwLite/FwLiteWeb/Hubs/MiniLcmApiHubBase.cs b/backend/FwLite/FwLiteWeb/Hubs/MiniLcmApiHubBase.cs index 1d79927f9e..220def7307 100644 --- a/backend/FwLite/FwLiteWeb/Hubs/MiniLcmApiHubBase.cs +++ b/backend/FwLite/FwLiteWeb/Hubs/MiniLcmApiHubBase.cs @@ -48,6 +48,11 @@ public IAsyncEnumerable GetComplexFormTypes() return _miniLcmApi.GetComplexFormTypes(); } + public IAsyncEnumerable GetVariantTypes() + { + return _miniLcmApi.GetVariantTypes(); + } + public virtual async Task UpdateMorphType(Guid id, JsonPatchDocument update) { var updatedMorphType = await _miniLcmApi.UpdateMorphType(id, new UpdateObjectInput(update)); diff --git a/backend/FwLite/FwLiteWeb/Routes/MiniLcmRoutes.cs b/backend/FwLite/FwLiteWeb/Routes/MiniLcmRoutes.cs index 1ac6ebe96c..4dd8d99613 100644 --- a/backend/FwLite/FwLiteWeb/Routes/MiniLcmRoutes.cs +++ b/backend/FwLite/FwLiteWeb/Routes/MiniLcmRoutes.cs @@ -193,10 +193,10 @@ private class CreateEntryOptionsParams [FromQuery] public bool? AutoAddMainPublication { get; set; } [FromQuery] - public bool? IncludeComplexFormsAndComponents { get; set; } + public bool? IncludeEntryReferences { get; set; } public CreateEntryOptions ToOptions(CreateEntryOptions defaults) => new( - IncludeComplexFormsAndComponents: IncludeComplexFormsAndComponents ?? defaults.IncludeComplexFormsAndComponents, + IncludeEntryReferences: IncludeEntryReferences ?? defaults.IncludeEntryReferences, AutoAddMainPublication: AutoAddMainPublication ?? defaults.AutoAddMainPublication); } diff --git a/backend/FwLite/LcmCrdt.Tests/Changes/ChangeDeserializationRegressionData.latest.verified.txt b/backend/FwLite/LcmCrdt.Tests/Changes/ChangeDeserializationRegressionData.latest.verified.txt index d9295d1c9a..b9d03cb570 100644 --- a/backend/FwLite/LcmCrdt.Tests/Changes/ChangeDeserializationRegressionData.latest.verified.txt +++ b/backend/FwLite/LcmCrdt.Tests/Changes/ChangeDeserializationRegressionData.latest.verified.txt @@ -1346,5 +1346,112 @@ { "$type": "delete:UserComment", "EntityId": "4be242d0-b1a6-986f-cc0d-b35860e69e60" + }, + { + "$type": "jsonPatch:VariantType", + "PatchDocument": [], + "EntityId": "f796b111-fed8-1fae-dacf-b549eb9ec93c" + }, + { + "$type": "jsonPatch:Variant", + "PatchDocument": [], + "EntityId": "c753ced5-4a9f-8b3f-441a-72fd448a4ecb" + }, + { + "$type": "delete:VariantType", + "EntityId": "32502ad4-c55c-fd4e-9e03-fd41b1630ada" + }, + { + "$type": "delete:Variant", + "EntityId": "eb03a87f-0d94-f1d4-be8b-1843383fe74d" + }, + { + "$type": "AddVariantChange", + "VariantEntryId": "e269cf82-fb4c-b0e2-1327-93389e9c4a21", + "MainEntryId": "7cf2ef69-3a01-1402-43b4-59f0340c03aa", + "MainSenseId": "f4d3d906-6aed-5cf3-55f5-ceb2a3b4f595", + "Types": [ + { + "Id": "606508ea-b0bb-5b9e-2cfb-2e2fdc2aba35", + "Order": 0 + }, + { + "Id": "7de9cece-74e6-93b4-9cda-1a0b21616664", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": { + "se": { + "Spans": [ + { + "Text": "mobile", + "Ws": "yal", + "Bold": "Off", + "FontSize": 971683928, + "ForeColor": "#00FFFF", + "Tags": [ + "6bfc8990-ba0c-4312-0978-a188b7362a9c" + ] + }, + { + "Text": "bandwidth", + "Ws": "lpo", + "Bold": "Off", + "FontSize": 361788072, + "ForeColor": "#0000FF", + "Tags": [ + "e25b45a2-560d-8122-6c0c-3aa989bd4667" + ] + }, + { + "Text": "Money Market Account", + "Ws": "aox", + "Bold": "Invert", + "FontSize": 1881504352, + "ForeColor": "#A52A2A", + "Tags": [ + "6cc91054-e9b2-75ca-58c4-833bb87a1948" + ] + }, + { + "Text": "index", + "Ws": "se", + "Tags": [ + "7353c7b7-43d3-40be-a82b-f1e5b4d31652" + ] + } + ] + } + }, + "EntityId": "3dd7c405-ea5e-d908-08cc-11e36ddb60fa" + }, + { + "$type": "AddVariantTypeChange", + "VariantTypeId": "3d19f188-5dc5-ec28-7035-bdf83b9d2df3", + "Order": 0.9152785924984018, + "Between": { + "Previous": "33187bcc-9543-d9ff-a3ae-99463cba8305", + "Next": "d6bee76a-42a1-6dff-cc98-18a0d3faeb21" + }, + "EntityId": "440ffc2f-b320-ffbc-e9d2-b921bdefcd3f" + }, + { + "$type": "RemoveVariantTypeChange", + "VariantTypeId": "c525542a-22f9-3f06-ce7e-d968f464e381", + "EntityId": "11589fe6-8515-f40c-1d0a-d2a844cc8fe1" + }, + { + "$type": "ReorderVariantTypeChange", + "VariantTypeId": "a6ba2998-406e-47af-fa84-76cc23f1e835", + "Order": 0.7073390569914089, + "EntityId": "3984f906-7fb3-27c5-506d-30898c9d029c" + }, + { + "$type": "CreateVariantType", + "Name": { + "es": "Health, Music \u0026 Tools" + }, + "EntityId": "814b85d6-0828-bc87-3c0b-a0b120ddc230" } ] \ No newline at end of file diff --git a/backend/FwLite/LcmCrdt.Tests/Changes/UseChangesTests.cs b/backend/FwLite/LcmCrdt.Tests/Changes/UseChangesTests.cs index 247ca900c3..43954db973 100644 --- a/backend/FwLite/LcmCrdt.Tests/Changes/UseChangesTests.cs +++ b/backend/FwLite/LcmCrdt.Tests/Changes/UseChangesTests.cs @@ -239,6 +239,28 @@ private static IEnumerable GetAllChanges() var setComplexFormComponentChange = SetComplexFormComponentChange.NewComponent(complexFormComponent.Id, componentEntry.Id); yield return new ChangeWithDependencies(setComplexFormComponentChange, [createcomponentEntryChange, createComplexFormComponentChange]); + var variantTypeName = new MultiString { { "en", "test vt" } }; + var variantType = new VariantType { Id = Guid.NewGuid(), Name = variantTypeName }; + var createVariantType = new CreateVariantType(variantType.Id, variantTypeName); + yield return new ChangeWithDependencies(createVariantType); + + var variantEntry = new Entry { Id = Guid.NewGuid(), LexemeForm = { { "en", "test variant" } } }; + var createVariantEntryChange = new CreateEntryChange(variantEntry); + yield return new ChangeWithDependencies(createVariantEntryChange); + + var variant = Variant.FromEntries(variantEntry, entry, sense.Id); + var addVariantChange = new AddVariantChange(variant); + yield return new ChangeWithDependencies(addVariantChange, [createVariantEntryChange, createEntryChange, createSenseChange]); + + var addVariantTypeChange = new AddVariantTypeChange(variant.Id, variantType.ToRef()); + yield return new ChangeWithDependencies(addVariantTypeChange, [createVariantType, addVariantChange]); + + var removeVariantTypeChange = new RemoveVariantTypeChange(variant.Id, variantType.Id); + yield return new ChangeWithDependencies(removeVariantTypeChange, [addVariantTypeChange]); + + var reorderVariantTypeChange = new ReorderVariantTypeChange(variantType.Id, variant.Id, 1.5); + yield return new ChangeWithDependencies(reorderVariantTypeChange, [addVariantChange]); + var setSenseOrderChange = new LcmCrdt.Changes.SetOrderChange(sense.Id, 10); yield return new ChangeWithDependencies(setSenseOrderChange, [createSenseChange]); diff --git a/backend/FwLite/LcmCrdt.Tests/Changes/VariantChangeTests.cs b/backend/FwLite/LcmCrdt.Tests/Changes/VariantChangeTests.cs new file mode 100644 index 0000000000..1d25fe829a --- /dev/null +++ b/backend/FwLite/LcmCrdt.Tests/Changes/VariantChangeTests.cs @@ -0,0 +1,217 @@ +using LcmCrdt.Changes.Entries; +using MiniLcm.Models; +using SIL.Harmony.Changes; + +namespace LcmCrdt.Tests.Changes; + +public class VariantChangeTests(MiniLcmApiFixture fixture) : IClassFixture +{ + private async Task<(Entry variantEntry, Entry mainEntry)> CreateEntryPair() + { + var variantEntry = await fixture.Api.CreateEntry(new() { LexemeForm = { { "en", "colour" } }, }); + var mainEntry = await fixture.Api.CreateEntry(new() { LexemeForm = { { "en", "color" } }, }); + return (variantEntry, mainEntry); + } + + [Fact] + public async Task AddVariant() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(Variant.FromEntries(variantEntry, mainEntry))); + var updatedVariantEntry = await fixture.Api.GetEntry(variantEntry.Id); + updatedVariantEntry.Should().NotBeNull(); + updatedVariantEntry!.VariantOf.Should().ContainSingle(v => v.MainEntryId == mainEntry.Id); + + var updatedMainEntry = await fixture.Api.GetEntry(mainEntry.Id); + updatedMainEntry.Should().NotBeNull(); + updatedMainEntry!.Variants.Should().ContainSingle(v => v.VariantEntryId == variantEntry.Id); + } + + [Fact] + public async Task AddVariant_CarriesTypesAndScalars() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + var variantType = await fixture.Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", "spelling" } } }); + + var variant = Variant.FromEntries(variantEntry, mainEntry) with + { + Types = [variantType.ToRef()], + HideMinorEntry = true, + Comment = new() { { "en", new RichString("british spelling") } }, + }; + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(variant)); + + var link = (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Should().ContainSingle(t => t.Id == variantType.Id); + link.HideMinorEntry.Should().BeTrue(); + link.Comment["en"].GetPlainText().Should().Be("british spelling"); + } + + [Fact] + public async Task AddVariant_SkipsDeletedTypes() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + var variantType = await fixture.Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", "doomed" } } }); + await fixture.Api.DeleteVariantType(variantType.Id); + + var variant = Variant.FromEntries(variantEntry, mainEntry) with { Types = [variantType.ToRef()] }; + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(variant)); + + var link = (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Should().BeEmpty(); + } + + [Fact] + public async Task DeleteVariant() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(Variant.FromEntries(variantEntry, mainEntry))); + var link = (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Should().ContainSingle().Subject; + + await fixture.DataModel.AddChange(Guid.NewGuid(), new DeleteChange(link.Id)); + (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Should().BeEmpty(); + (await fixture.Api.GetEntry(mainEntry.Id))!.Variants.Should().BeEmpty(); + } + + [Fact] + public async Task DuplicateVariantsAreDeleted() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(Variant.FromEntries(variantEntry, mainEntry))); + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(Variant.FromEntries(variantEntry, mainEntry))); + + var updatedVariantEntry = await fixture.Api.GetEntry(variantEntry.Id); + updatedVariantEntry.Should().NotBeNull(); + updatedVariantEntry!.VariantOf.Should().ContainSingle(v => v.MainEntryId == mainEntry.Id); + + var updatedMainEntry = await fixture.Api.GetEntry(mainEntry.Id); + updatedMainEntry.Should().NotBeNull(); + updatedMainEntry!.Variants.Should().ContainSingle(v => v.VariantEntryId == variantEntry.Id); + } + + [Fact] + public async Task SelfReferenceVariantIsDeleted() + { + var (variantEntry, _) = await CreateEntryPair(); + + await fixture.DataModel.AddChange(Guid.NewGuid(), + new AddVariantChange(new Variant { Id = Guid.NewGuid(), VariantEntryId = variantEntry.Id, MainEntryId = variantEntry.Id })); + + var updated = await fixture.Api.GetEntry(variantEntry.Id); + updated.Should().NotBeNull(); + updated!.VariantOf.Should().BeEmpty(); + updated.Variants.Should().BeEmpty(); + } + + [Fact] + public async Task AddVariantType() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + var variantType = await fixture.Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", "test" } } }); + + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(Variant.FromEntries(variantEntry, mainEntry))); + var link = (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Single(); + + var change = new AddVariantTypeChange(link.Id, variantType.ToRef()); + await fixture.DataModel.AddChange(Guid.NewGuid(), change); + + link = (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Single(); + link.Types.Should().ContainSingle().Which.Id.Should().Be(variantType.Id); + } + + [Fact] + public async Task RemoveVariantType() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + var variantType = await fixture.Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", "test" } } }); + + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(Variant.FromEntries(variantEntry, mainEntry) with { Types = [variantType.ToRef()] })); + var link = (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Single(); + link.Types.Should().ContainSingle(); + + await fixture.DataModel.AddChange(Guid.NewGuid(), new RemoveVariantTypeChange(link.Id, variantType.Id)); + + link = (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Single(); + link.Types.Should().BeEmpty(); + } + + [Fact] + public async Task ReorderVariantType_AppliesPerTypeOrderAndSkipsRemovedTypes() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + var typeA = await fixture.Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", "a" } } }); + var typeB = await fixture.Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", "b" } } }); + var typeC = await fixture.Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", "c" } } }); + + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(Variant.FromEntries(variantEntry, mainEntry) with { Types = [typeA.ToRef(), typeB.ToRef()] })); + var link = (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Single(); + + // move B before A by giving it a smaller order (like ReorderSensePictureChange) + await fixture.DataModel.AddChange(Guid.NewGuid(), new ReorderVariantTypeChange(typeB.Id, link.Id, 0.5)); + link = (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Single(); + link.Types.Select(t => t.Id).Should().Equal(typeB.Id, typeA.Id); + + // adds append after existing orders; reordering a type removed in the meantime is a no-op + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantTypeChange(link.Id, typeC.ToRef())); + await fixture.DataModel.AddChange(Guid.NewGuid(), new RemoveVariantTypeChange(link.Id, typeA.Id)); + await fixture.DataModel.AddChange(Guid.NewGuid(), new ReorderVariantTypeChange(typeA.Id, link.Id, 10)); + link = (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Single(); + link.Types.Select(t => t.Id).Should().Equal(typeB.Id, typeC.Id); + } + + [Fact] + public async Task DeletingVariantTypeRemovesItFromLinks() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + var variantType = await fixture.Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", "test" } } }); + + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(Variant.FromEntries(variantEntry, mainEntry) with { Types = [variantType.ToRef()] })); + await fixture.DataModel.AddChange(Guid.NewGuid(), new DeleteChange(variantType.Id)); + + var link = (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Should().ContainSingle().Subject; + link.DeletedAt.Should().BeNull("deleting a type must not delete the link"); + link.Types.Should().BeEmpty(); + } + + [Fact] + public async Task DeletingMainEntryDeletesTheLink() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(Variant.FromEntries(variantEntry, mainEntry))); + + await fixture.DataModel.AddChange(Guid.NewGuid(), new DeleteChange(mainEntry.Id)); + + var updatedVariantEntry = await fixture.Api.GetEntry(variantEntry.Id); + updatedVariantEntry.Should().NotBeNull("only the link dies, not the variant entry"); + updatedVariantEntry!.VariantOf.Should().BeEmpty(); + } + + [Fact] + public async Task DeletingVariantEntryDeletesTheLink() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(Variant.FromEntries(variantEntry, mainEntry))); + + await fixture.DataModel.AddChange(Guid.NewGuid(), new DeleteChange(variantEntry.Id)); + + var updatedMainEntry = await fixture.Api.GetEntry(mainEntry.Id); + updatedMainEntry.Should().NotBeNull("only the link dies, not the main entry"); + updatedMainEntry!.Variants.Should().BeEmpty(); + } + + [Fact] + public async Task DeletingTargetSenseDeletesTheLink() + { + var (variantEntry, mainEntry) = await CreateEntryPair(); + var sense = await fixture.Api.CreateSense(mainEntry.Id, new Sense { Id = Guid.NewGuid(), Gloss = { { "en", "target" } } }); + await fixture.DataModel.AddChange(Guid.NewGuid(), new AddVariantChange(Variant.FromEntries(variantEntry, mainEntry, sense.Id))); + + await fixture.Api.DeleteSense(mainEntry.Id, sense.Id); + + (await fixture.Api.GetEntry(variantEntry.Id))!.VariantOf.Should().BeEmpty(); + (await fixture.Api.GetEntry(mainEntry.Id))!.Variants.Should().BeEmpty(); + } +} diff --git a/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests.cs b/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests.cs index b8c985e6c4..24e979e04f 100644 --- a/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests.cs +++ b/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests.cs @@ -164,6 +164,9 @@ await api.GetComplexFormTypes() await api.GetMorphTypes() .OrderBy(m => m.Id) .ToArrayAsync(), + await api.GetVariantTypes() + .OrderBy(v => v.Id) + .ToArrayAsync(), await api.GetWritingSystems()); } diff --git a/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v1.ProjectSnapshot.verified.txt b/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v1.ProjectSnapshot.verified.txt index 51798c24e9..10b9e90d11 100644 --- a/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v1.ProjectSnapshot.verified.txt +++ b/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v1.ProjectSnapshot.verified.txt @@ -70,6 +70,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] } ], @@ -251,5 +253,6 @@ "Order": 0 } ] - } + }, + "VariantTypes": [] } \ No newline at end of file diff --git a/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v1.Snapshots.verified.txt b/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v1.Snapshots.verified.txt index 54ae3b7d2e..90d6a2b57c 100644 --- a/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v1.Snapshots.verified.txt +++ b/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v1.Snapshots.verified.txt @@ -77,6 +77,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "b802e01f-fac1-42b8-b605-a5bbb7efcdc1", diff --git a/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v2.ProjectSnapshot.verified.txt b/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v2.ProjectSnapshot.verified.txt index c25af14c52..4eea61e35a 100644 --- a/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v2.ProjectSnapshot.verified.txt +++ b/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v2.ProjectSnapshot.verified.txt @@ -164,6 +164,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, { @@ -248,6 +250,8 @@ ], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, { @@ -320,6 +324,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, { @@ -392,6 +398,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] } ], @@ -733,5 +741,6 @@ "Order": 3 } ] - } + }, + "VariantTypes": [] } \ No newline at end of file diff --git a/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v2.Snapshots.verified.txt b/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v2.Snapshots.verified.txt index fea2fb4e3e..7a8a7c489d 100644 --- a/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v2.Snapshots.verified.txt +++ b/backend/FwLite/LcmCrdt.Tests/Data/MigrationTests_FromScriptedDb.v2.Snapshots.verified.txt @@ -107,6 +107,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "00edefeb-173e-45cd-836c-eea2ba514429", @@ -152,6 +154,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "00edefeb-173e-45cd-836c-eea2ba514429", @@ -198,6 +202,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "00edefeb-173e-45cd-836c-eea2ba514429", @@ -252,6 +258,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "00edefeb-173e-45cd-836c-eea2ba514429", @@ -314,6 +322,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "00edefeb-173e-45cd-836c-eea2ba514429", @@ -385,6 +395,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "00edefeb-173e-45cd-836c-eea2ba514429", @@ -429,6 +441,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "75050583-70d7-4605-a6e6-872b8f36c482", @@ -473,6 +487,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "9e84db09-1885-4bbb-9482-4891a46f6f49", @@ -517,6 +533,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "d9f70cf9-a479-4141-92e5-44155d063da2", diff --git a/backend/FwLite/LcmCrdt.Tests/Data/SnapshotDeserializationRegressionData.latest.verified.txt b/backend/FwLite/LcmCrdt.Tests/Data/SnapshotDeserializationRegressionData.latest.verified.txt index da0cb7652f..7ea30724bf 100644 --- a/backend/FwLite/LcmCrdt.Tests/Data/SnapshotDeserializationRegressionData.latest.verified.txt +++ b/backend/FwLite/LcmCrdt.Tests/Data/SnapshotDeserializationRegressionData.latest.verified.txt @@ -88,11 +88,424 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "8f403ae3-9859-4a74-a52d-3c0736bb5917", "DeletedAt": null }, + { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "bf4962e9-5c96-2f29-c85e-b7687f28d070", + "DeletedAt": null, + "LexemeForm": { + "gzn": "national" + }, + "CitationForm": { + "ojc": "Alaska", + "rcf": "Incredible Soft Fish" + }, + "LiteralMeaning": { + "iml": { + "Spans": [ + { + "Text": "Integrated", + "Ws": "iml", + "Tags": [ + "37438afb-6b8d-48e5-9c5b-2e8871bc9e4d" + ] + }, + { + "Text": "Buckinghamshire", + "Ws": "oyy", + "Bold": "Off", + "FontSize": 707185645, + "ForeColor": "#ADFF2F", + "Tags": [ + "c996c387-f7b6-fb66-7e2f-426741acea0f" + ] + } + ] + }, + "knq": { + "Spans": [ + { + "Text": "Ergonomic Metal Soap", + "Ws": "knq", + "Tags": [ + "ffc1538b-e4b6-46af-81fe-8cce7fc10a36" + ] + }, + { + "Text": "Garden, Clothing \u0026 Clothing", + "Ws": "knq", + "Tags": [ + "7d60117d-2e75-438f-a897-d2ea8f4984ee" + ] + }, + { + "Text": "compressing", + "Ws": "mmq", + "Bold": "Off", + "FontSize": -1187981343, + "ForeColor": "#00000000", + "Tags": [ + "5e3f8cec-424e-08ee-e197-328ba0b99e81" + ] + } + ] + } + }, + "MorphType": "Proclitic", + "HomographNumber": -850064052, + "Senses": [], + "Note": { + "lrk": { + "Spans": [ + { + "Text": "Rustic Plastic Car", + "Ws": "lrk", + "Tags": [ + "1e7bc491-6f50-492c-8c45-bf104b68dcb6" + ] + }, + { + "Text": "Fresh", + "Ws": "cbj", + "Bold": "Off", + "FontSize": 308548902, + "ForeColor": "#FF0000", + "Tags": [ + "c246a3f6-e89a-da4c-612b-20916c2db4b2" + ] + }, + { + "Text": "Balanced", + "Ws": "adw", + "Bold": "Invert", + "FontSize": 2119811446, + "ForeColor": "#00000000", + "Tags": [ + "97dbd03c-d2d2-5a8b-8ccd-dca4a7ca0a37" + ] + }, + { + "Text": "payment", + "Ws": "lrk", + "Tags": [ + "e6884732-f266-49eb-8c00-0f355eac2514" + ] + } + ] + }, + "paw": { + "Spans": [ + { + "Text": "Rustic Plastic Car", + "Ws": "izr", + "Bold": "Invert", + "FontSize": 680131701, + "ForeColor": "#A52A2A", + "Tags": [ + "4de94f62-05ee-003c-4d9a-38aabb2faef2" + ] + }, + { + "Text": "Wyoming", + "Ws": "paw", + "Tags": [ + "722cd080-bac7-4c79-b1f1-c9ac0c134d9f" + ] + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "02a621e9-c055-e52b-e8cc-9cb6705fea3a", + "Name": { + "rod": "withdrawal" + }, + "DeletedAt": null + } + ], + "VariantOf": [ + { + "Id": "fb9beb25-df2d-0b19-3598-801f5d91d72a", + "MaybeId": "fb9beb25-df2d-0b19-3598-801f5d91d72a", + "DeletedAt": null, + "VariantEntryId": "60478e2f-f450-2007-8da5-3b5358768e82", + "VariantHeadword": "redundant", + "MainEntryId": "89649473-5411-0b9f-c5fd-d41a04edbd63", + "MainSenseId": "9c005f06-13d6-51a9-b4eb-656f3a6607aa", + "MainHeadword": "Tunnel", + "Types": [ + { + "Id": "dbb1df41-feb3-e235-6b25-3c8c4dcd84a1", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": { + "oti": { + "Spans": [ + { + "Text": "Reunion", + "Ws": "ydd", + "Bold": "Off", + "FontSize": -849399494, + "ForeColor": "#ADFF2F", + "Tags": [ + "6d9317f4-f447-5565-7c37-bbc46d759853" + ] + }, + { + "Text": "International", + "Ws": "oti", + "Tags": [ + "382ad894-1c92-4fdc-80f3-db29d5b87dc9" + ] + }, + { + "Text": "Nakfa", + "Ws": "smb", + "Bold": "Invert", + "FontSize": 1648622716, + "ForeColor": "#00FFFF", + "Tags": [ + "af269938-09d5-6529-920a-59d0ea2e1d50" + ] + } + ] + }, + "xzp": { + "Spans": [ + { + "Text": "sky blue", + "Ws": "ler", + "Bold": "Off", + "FontSize": 282922036, + "ForeColor": "#ADFF2F", + "Tags": [ + "446dafd4-020c-1d9a-c10c-9ea22fd3fb21" + ] + }, + { + "Text": "New York", + "Ws": "ojw", + "Bold": "Off", + "FontSize": 1995635092, + "ForeColor": "#A52A2A", + "Tags": [ + "f6664356-72f5-4958-7641-e5de17c30c67" + ] + }, + { + "Text": "Fantastic Cotton Computer", + "Ws": "abu", + "Bold": "Invert", + "FontSize": -1892591319, + "ForeColor": "#FF0000", + "Tags": [ + "3f20c1de-4b44-178c-02bd-2af2cde031bb" + ] + }, + { + "Text": "Unbranded Frozen Gloves", + "Ws": "xzp", + "Tags": [ + "b826f3d8-22cb-4a65-8113-f90ba7da3225" + ] + } + ] + }, + "krt": { + "Spans": [ + { + "Text": "microchip", + "Ws": "krt", + "Tags": [ + "22c63d7d-e9ff-4134-a081-7192cfe3546d" + ] + }, + { + "Text": "generating", + "Ws": "krt", + "Tags": [ + "02181ee7-d298-4b61-88a4-705bd49a78ab" + ] + }, + { + "Text": "Operations", + "Ws": "beq", + "Bold": "Invert", + "FontSize": -774998708, + "ForeColor": "#ADFF2F", + "Tags": [ + "e9d6cef4-4657-ce72-90f4-0274c70b21bd" + ] + } + ] + }, + "sch": { + "Spans": [ + { + "Text": "Tasty Metal Ball", + "Ws": "ddg", + "Bold": "Invert", + "FontSize": 1612041462, + "ForeColor": "#0000FF", + "Tags": [ + "aff1b2a9-eef7-a62f-f923-9c4f71b3c9f1" + ] + }, + { + "Text": "Money Market Account", + "Ws": "kah", + "Bold": "On", + "FontSize": 124771842, + "ForeColor": "#A52A2A", + "Tags": [ + "72ae8f88-09a8-3fd4-f2bd-7dba7193fdf1" + ] + }, + { + "Text": "sticky", + "Ws": "zsm", + "Bold": "Off", + "FontSize": -994459854, + "ForeColor": "#FF0000", + "Tags": [ + "1a9cce82-d09f-fc22-2775-e8dbe05482bf" + ] + } + ] + } + } + } + ], + "Variants": [ + { + "Id": "27f3fdfa-13e0-fb8a-927b-bbbc906d4fda", + "MaybeId": "27f3fdfa-13e0-fb8a-927b-bbbc906d4fda", + "DeletedAt": null, + "VariantEntryId": "7f807593-0418-9cff-78f5-939329b41279", + "VariantHeadword": "Checking Account", + "MainEntryId": "6027296b-5916-6cc4-ebe5-8f137001f592", + "MainSenseId": "044f9fb2-0eff-349e-4372-05cbf51bf087", + "MainHeadword": "Tennessee", + "Types": [ + { + "Id": "d3b39b47-3d4c-ce5a-6058-9ba5841646a4", + "Order": 0 + } + ], + "HideMinorEntry": true, + "Comment": { + "zin": { + "Spans": [ + { + "Text": "Hawaii", + "Ws": "gym", + "Bold": "On", + "FontSize": -1347248649, + "ForeColor": "#ADFF2F", + "Tags": [ + "7032a11d-40a3-22e4-2395-7ae60c761a50" + ] + }, + { + "Text": "SQL", + "Ws": "zin", + "Tags": [ + "b49b3651-dd20-4caa-819b-6925fd54f93b" + ] + } + ] + }, + "dgx": { + "Spans": [ + { + "Text": "feed", + "Ws": "dgx", + "Tags": [ + "85a0ceee-dcb9-49cb-a9ce-7e74c56d37b2" + ] + }, + { + "Text": "coherent", + "Ws": "kfa", + "Bold": "Off", + "FontSize": 1309563073, + "ForeColor": "#0000FF", + "Tags": [ + "0168d141-5d00-3fc6-ab81-2d08ebf00987" + ] + }, + { + "Text": "Chief", + "Ws": "dgx", + "Tags": [ + "3b04517a-8cb4-4a89-9da2-e2ad264960bb" + ] + } + ] + }, + "kfv": { + "Spans": [ + { + "Text": "Fantastic Plastic Salad", + "Ws": "mua", + "Bold": "Off", + "FontSize": -15563487, + "ForeColor": "#00FFFF", + "Tags": [ + "bee27cc9-d701-af26-9eec-c85661c08e54" + ] + }, + { + "Text": "Serbian Dinar", + "Ws": "ptt", + "Bold": "Invert", + "FontSize": 2076379368, + "ForeColor": "#0000FF", + "Tags": [ + "b060b619-183b-7ecd-e0ae-e47a731bb5df" + ] + }, + { + "Text": "granular", + "Ws": "kfv", + "Tags": [ + "3ede3eda-e9cf-4d98-b5d6-c2c353e8c877" + ] + } + ] + } + } + } + ], + "PublishIn": [ + { + "Id": "9cf28984-4dfc-1d50-3fbe-089a616a3058", + "DeletedAt": null, + "IsMain": false, + "Name": { + "gus": "Fantastic Rubber Pants", + "laj": "models", + "tdf": "Director" + } + } + ] + }, + "Id": "bf4962e9-5c96-2f29-c85e-b7687f28d070", + "DeletedAt": null + }, { "$type": "MiniLcmCrdtAdapter", "Obj": { @@ -187,6 +600,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [ { "Id": "ec21b4b7-3861-38d4-bc7b-fe77bd2321c2", @@ -205,184 +620,1885 @@ "$type": "MiniLcmCrdtAdapter", "Obj": { "$type": "Entry", - "Id": "82cf7254-3a4f-497a-9e15-7d93fc830356", + "Id": "1d8a775a-bfd3-a6fe-692e-9245a79d7bd7", "DeletedAt": null, "LexemeForm": { - "en": "\uD83C\uDF4C", - "th": "\u0E01\u0E25\u0E49\u0E27\u0E22" + "hy": "firewall", + "nkb": "Sleek Metal Ball", + "nud": "Lesotho", + "tiz": "sensor" + }, + "CitationForm": { + "gvn": "European Unit of Account 17(E.U.A.-17)", + "kyn": "Namibia", + "zmk": "orange" }, - "CitationForm": {}, "LiteralMeaning": { - "en": { + "kke": { "Spans": [ { - "Text": "yellow fruit that comes in bunches.", - "Ws": "en" - } + "Text": "Falkland Islands (Malvinas)", + "Ws": "nli", + "Bold": "On", + "FontSize": -1494764401, + "ForeColor": "#ADFF2F", + "Tags": [ + "775021f6-656f-1efd-d336-775b11f37e58" + ] + }, + { + "Text": "transmitting", + "Ws": "myw", + "Bold": "Off", + "FontSize": 772315443, + "ForeColor": "#FF0000", + "Tags": [ + "23868115-db0c-3209-9154-ba48d3c146d8" + ] + }, + { + "Text": "Optimization", + "Ws": "anf", + "Bold": "Invert", + "FontSize": -1556605222, + "ForeColor": "#A52A2A", + "Tags": [ + "515622a3-66e0-b3aa-e729-7d5f1c327347" + ] + } + ] + }, + "eyo": { + "Spans": [ + { + "Text": "Ergonomic Frozen Bike", + "Ws": "eyo", + "Tags": [ + "778ac45e-cb7c-4184-99cf-b7ffd5397a95" + ] + } + ] + }, + "bil": { + "Spans": [ + { + "Text": "Berkshire", + "Ws": "bil", + "Tags": [ + "e26e18cd-8f97-44de-a469-579020b6b641" + ] + }, + { + "Text": "Games", + "Ws": "bsv", + "Bold": "Invert", + "FontSize": -470950863, + "ForeColor": "#00000000", + "Tags": [ + "cad08191-2873-c06a-5c25-1ebdd6f334c0" + ] + }, + { + "Text": "viral", + "Ws": "bil", + "Tags": [ + "d5a8340f-7217-400a-80a5-68f6d7782138" + ] + } + ] + } + }, + "MorphType": "Circumfix", + "HomographNumber": -51048004, + "Senses": [], + "Note": { + "ekl": { + "Spans": [ + { + "Text": "District", + "Ws": "ivb", + "Bold": "On", + "FontSize": -1122711579, + "ForeColor": "#ADFF2F", + "Tags": [ + "3960b24e-e06a-2b1b-06fb-050329ba2b08" + ] + }, + { + "Text": "Ergonomic Fresh Shirt", + "Ws": "ekl", + "Tags": [ + "07b4957e-0ec2-4f7b-8f88-9849b89a6fdd" + ] + }, + { + "Text": "Ameliorated", + "Ws": "rmw", + "Bold": "Off", + "FontSize": 2070273298, + "ForeColor": "#00FFFF", + "Tags": [ + "47133df0-f72f-f8c5-269f-47f825eb0c87" + ] + }, + { + "Text": "Rubber", + "Ws": "ekl", + "Tags": [ + "3932709b-a402-4a62-81e5-62f02be0f8f8" + ] + } + ] + }, + "fj": { + "Spans": [ + { + "Text": "Park", + "Ws": "fj", + "Tags": [ + "f68e0589-6725-4849-93fb-872d22d9aefd" + ] + }, + { + "Text": "Music, Beauty \u0026 Games", + "Ws": "fj", + "Tags": [ + "ce23af36-05e7-42f8-b743-2e1b570fa05c" + ] + }, + { + "Text": "Borders", + "Ws": "duk", + "Bold": "Off", + "FontSize": -1365945895, + "ForeColor": "#0000FF", + "Tags": [ + "11e3a59f-ffe8-3e6a-2b1a-79c99e2c5224" + ] + }, + { + "Text": "Tasty Metal Car", + "Ws": "qwc", + "Bold": "Off", + "FontSize": -1184685308, + "ForeColor": "#0000FF", + "Tags": [ + "7fd6b658-e8f7-b252-5552-1f9805276d66" + ] + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "159f6453-6831-97fb-7c86-dbca59e0159b", + "Name": { + "bxe": "Rubber" + }, + "DeletedAt": null + } + ], + "VariantOf": [ + { + "Id": "77a79311-e842-2093-d12a-aec819d524ac", + "MaybeId": "77a79311-e842-2093-d12a-aec819d524ac", + "DeletedAt": null, + "VariantEntryId": "e76b9972-391a-ce7e-2895-fc7cd4189d6f", + "VariantHeadword": "Awesome", + "MainEntryId": "eacdb24f-619b-f1b0-6f8e-74fd59d6d13c", + "MainSenseId": "2b97b703-ddb6-ebdb-396c-8ea2a084226c", + "MainHeadword": "Tasty", + "Types": [ + { + "Id": "054ea0cf-ce17-c9b3-afc0-1ec662aac6ec", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": { + "sbl": { + "Spans": [ + { + "Text": "array", + "Ws": "yat", + "Bold": "Invert", + "FontSize": -1831640374, + "ForeColor": "#00FFFF", + "Tags": [ + "268fe4d4-c574-c42c-cb28-e3af560d5e91" + ] + }, + { + "Text": "Western Sahara", + "Ws": "sbl", + "Tags": [ + "2e9390f6-90af-4a5c-af67-55dcaaa1e8cf" + ] + }, + { + "Text": "open-source", + "Ws": "mbe", + "Bold": "Invert", + "FontSize": -311542634, + "ForeColor": "#0000FF", + "Tags": [ + "64424a9a-c861-6954-8dbc-73693f2ec59f" + ] + } + ] + }, + "kzu": { + "Spans": [ + { + "Text": "compress", + "Ws": "hah", + "Bold": "Invert", + "FontSize": -1310526443, + "ForeColor": "#FF0000", + "Tags": [ + "96ad1270-e500-554a-965b-117f57178656" + ] + } + ] + }, + "tkw": { + "Spans": [ + { + "Text": "Data", + "Ws": "txc", + "Bold": "Invert", + "FontSize": 1200633738, + "ForeColor": "#00FFFF", + "Tags": [ + "07532fba-272f-7e9b-cbf0-5cf4a37bbdae" + ] + }, + { + "Text": "Applications", + "Ws": "tkw", + "Tags": [ + "2b733ba3-ae5c-4b4c-8198-2dcb7ccf772b" + ] + }, + { + "Text": "Bedfordshire", + "Ws": "tht", + "Bold": "Invert", + "FontSize": -804762725, + "ForeColor": "#FF0000", + "Tags": [ + "c1eb7ca4-1c01-c6a9-b7a5-e6d499aa7549" + ] + }, + { + "Text": "Rustic Steel Table", + "Ws": "tkw", + "Tags": [ + "45fd9bcf-bc27-42aa-b1d6-2afbf58b1ae5" + ] + } + ] + }, + "tpu": { + "Spans": [ + { + "Text": "neural", + "Ws": "tpu", + "Tags": [ + "90b8b1f4-ad72-4b8b-9931-c0533c763d58" + ] + }, + { + "Text": "Chad", + "Ws": "gko", + "Bold": "Off", + "FontSize": 1056523512, + "ForeColor": "#A52A2A", + "Tags": [ + "62984e31-ed54-d474-5e47-251c024b9a89" + ] + }, + { + "Text": "Small Rubber Bike", + "Ws": "tlr", + "Bold": "On", + "FontSize": -1182208765, + "ForeColor": "#ADFF2F", + "Tags": [ + "43cf5dcf-344f-dff6-380f-6e1af1e31e6d" + ] + }, + { + "Text": "Rustic Concrete Hat", + "Ws": "zty", + "Bold": "Invert", + "FontSize": -1660688565, + "ForeColor": "#ADFF2F", + "Tags": [ + "e87cd788-714a-059a-8e24-bce9109d722c" + ] + } + ] + } + } + } + ], + "Variants": [ + { + "Id": "39b4b52f-7a17-8d33-238a-0be490bf01a6", + "MaybeId": "39b4b52f-7a17-8d33-238a-0be490bf01a6", + "DeletedAt": null, + "VariantEntryId": "57719c6b-9c3d-0f6e-6b4a-6e9f34dfd5de", + "VariantHeadword": "New Caledonia", + "MainEntryId": "a9b44260-b890-6fd1-45ff-ca4cb76aa708", + "MainSenseId": "7ebf1833-b4cc-e1aa-7dd1-d0d2203644c4", + "MainHeadword": "Brand", + "Types": [ + { + "Id": "c66f9102-ecdc-6d87-992b-10ded9818f3f", + "Order": 0 + } + ], + "HideMinorEntry": true, + "Comment": { + "wry": { + "Spans": [ + { + "Text": "Stream", + "Ws": "ngh", + "Bold": "Off", + "FontSize": 1979712535, + "ForeColor": "#ADFF2F", + "Tags": [ + "42e2a507-f62d-d0ff-7c23-aaeb9268c504" + ] + }, + { + "Text": "Wisconsin", + "Ws": "czo", + "Bold": "On", + "FontSize": 1369507130, + "ForeColor": "#ADFF2F", + "Tags": [ + "b03bdecc-fcb4-3737-819b-42a1d2c06f2c" + ] + }, + { + "Text": "Engineer", + "Ws": "akj", + "Bold": "On", + "FontSize": 429767630, + "ForeColor": "#ADFF2F", + "Tags": [ + "6a616c96-ac6c-cc41-6599-5b94fc0fe9d1" + ] + }, + { + "Text": "Buckinghamshire", + "Ws": "wry", + "Tags": [ + "1589addb-a60a-49fc-a887-f511ba32c8c5" + ] + } + ] + } + } + } + ], + "PublishIn": [ + { + "Id": "75156d2a-5bf0-a378-f8b1-362b9c636578", + "DeletedAt": null, + "IsMain": false, + "Name": { + "jeu": "parse", + "gpe": "Groves", + "acw": "olive" + } + } + ] + }, + "Id": "1d8a775a-bfd3-a6fe-692e-9245a79d7bd7", + "DeletedAt": null + }, + { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "82cf7254-3a4f-497a-9e15-7d93fc830356", + "DeletedAt": null, + "LexemeForm": { + "en": "\uD83C\uDF4C", + "th": "\u0E01\u0E25\u0E49\u0E27\u0E22" + }, + "CitationForm": {}, + "LiteralMeaning": { + "en": { + "Spans": [ + { + "Text": "yellow fruit that comes in bunches.", + "Ws": "en" + } + ] + } + }, + "MorphType": "Stem", + "HomographNumber": 0, + "Senses": [], + "Note": { + "en": { + "Spans": [ + { + "Text": "often used in cartoon gags for slipping", + "Ws": "en" + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], + "PublishIn": [] + }, + "Id": "82cf7254-3a4f-497a-9e15-7d93fc830356", + "DeletedAt": null + }, + { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "30d58205-965c-2a33-4599-9c585889d5c7", + "DeletedAt": null, + "LexemeForm": { + "sty": "Avon", + "xsd": "matrix", + "aid": "Investor" + }, + "CitationForm": { + "bwr": "Tasty Rubber Mouse", + "xby": "primary" + }, + "LiteralMeaning": { + "ctc": { + "Spans": [ + { + "Text": "Granite", + "Ws": "ctc", + "Tags": [ + "aaa5ecd4-4303-421a-ba5f-667a05a1bc65" + ] + }, + { + "Text": "Money Market Account", + "Ws": "ctc", + "Tags": [ + "016bf87c-0a77-4c7f-bd26-015dc3794caf" + ] + } + ] + }, + "bml": { + "Spans": [ + { + "Text": "Iran", + "Ws": "lbw", + "Bold": "Invert", + "FontSize": 1582530665, + "ForeColor": "#00FFFF", + "Tags": [ + "b1381579-272d-8cac-28d9-9bb505e9c139" + ] + }, + { + "Text": "bleeding-edge", + "Ws": "bml", + "Tags": [ + "a533d601-bdfc-43a3-864f-ad26d5be5f58" + ] + }, + { + "Text": "Inverse", + "Ws": "puy", + "Bold": "On", + "FontSize": -817997980, + "ForeColor": "#A52A2A", + "Tags": [ + "810a7fd7-ccf1-5855-a585-4ec880142c78" + ] + }, + { + "Text": "Canada", + "Ws": "bml", + "Tags": [ + "be7c7e0c-68ac-4709-bc90-0a2b7cd32c83" + ] + } + ] + } + }, + "MorphType": "Infix", + "HomographNumber": 2064387912, + "Senses": [], + "Note": { + "crc": { + "Spans": [ + { + "Text": "invoice", + "Ws": "crc", + "Tags": [ + "18790013-952a-4fa9-bfde-2c76464fbc71" + ] + }, + { + "Text": "hack", + "Ws": "msi", + "Bold": "On", + "FontSize": -1747541532, + "ForeColor": "#FF0000", + "Tags": [ + "cce1dc34-bfed-a52c-1963-f6eda06e7c80" + ] + }, + { + "Text": "Assimilated", + "Ws": "nif", + "Bold": "On", + "FontSize": 1939951237, + "ForeColor": "#0000FF", + "Tags": [ + "d80aeca0-ca70-e7f8-f016-65444bbda239" + ] + } + ] + }, + "wyn": { + "Spans": [ + { + "Text": "Practical Frozen Ball", + "Ws": "wyn", + "Tags": [ + "86ee9890-a0d4-40e2-bf8c-5f4006ab635b" + ] + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "d59e6708-7af7-df1f-dac8-286401de2c5b", + "Name": { + "bwe": "Consultant" + }, + "DeletedAt": null + } + ], + "VariantOf": [ + { + "Id": "7e085f06-8c48-043f-1b6d-658d1146cf16", + "MaybeId": "7e085f06-8c48-043f-1b6d-658d1146cf16", + "DeletedAt": null, + "VariantEntryId": "62d9a361-b1c2-5983-90b2-e1b1f49f1fa1", + "VariantHeadword": "intangible", + "MainEntryId": "3bf1e285-3012-ae47-1039-82fa89d550c3", + "MainSenseId": "5eebb67c-4bfe-6019-ae0f-df0390b38ad3", + "MainHeadword": "withdrawal", + "Types": [ + { + "Id": "28b2f8f0-f9df-7df9-697b-c4a2313542b0", + "Order": 0 + } + ], + "HideMinorEntry": true, + "Comment": { + "la": { + "Spans": [ + { + "Text": "content", + "Ws": "la", + "Tags": [ + "29a77338-58a0-4e93-8e07-7310f3ade423" + ] + }, + { + "Text": "Unbranded Metal Pants", + "Ws": "la", + "Tags": [ + "cc45f05c-ae2c-47e5-9913-612a392cc4c8" + ] + }, + { + "Text": "Personal Loan Account", + "Ws": "tcu", + "Bold": "On", + "FontSize": 725320051, + "ForeColor": "#A52A2A", + "Tags": [ + "249936dd-f01a-4bf3-8eeb-3d1755e3b327" + ] + } + ] + } + } + } + ], + "Variants": [ + { + "Id": "2dfab0b4-b355-b356-7383-5cbd025e51cf", + "MaybeId": "2dfab0b4-b355-b356-7383-5cbd025e51cf", + "DeletedAt": null, + "VariantEntryId": "9bba6d7b-72e1-f7c4-1ad8-06dc440371c0", + "VariantHeadword": "deposit", + "MainEntryId": "c0829fcf-0390-7b0d-678c-fd3228dce8c3", + "MainSenseId": "fc43dc1f-069f-4fa3-fd3c-9a6fdd3ea9c4", + "MainHeadword": "Small", + "Types": [ + { + "Id": "b6d6e825-a357-04c7-72f4-9d5d5ba53379", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": { + "grj": { + "Spans": [ + { + "Text": "SMTP", + "Ws": "grj", + "Tags": [ + "27983f9a-7260-4a81-a11a-4bcaac05208a" + ] + }, + { + "Text": "challenge", + "Ws": "arz", + "Bold": "On", + "FontSize": 181408199, + "ForeColor": "#0000FF", + "Tags": [ + "335e6d81-f36b-721a-e236-23d2f2290232" + ] + }, + { + "Text": "SSL", + "Ws": "grj", + "Tags": [ + "9f25846d-75da-48b7-a9dc-9f4cc84b3d22" + ] + } + ] + }, + "agn": { + "Spans": [ + { + "Text": "extend", + "Ws": "opa", + "Bold": "On", + "FontSize": -386565667, + "ForeColor": "#ADFF2F", + "Tags": [ + "ff7b0614-a5e9-716a-93b5-4c85ac02ca62" + ] + } + ] + }, + "koc": { + "Spans": [ + { + "Text": "Inlet", + "Ws": "rsk", + "Bold": "Invert", + "FontSize": -407491826, + "ForeColor": "#A52A2A", + "Tags": [ + "81d80356-91b6-1c2f-aad5-4c514d5b6531" + ] + } + ] + } + } + } + ], + "PublishIn": [ + { + "Id": "94a023cf-0dab-d295-1ea7-62c883599409", + "DeletedAt": null, + "IsMain": false, + "Name": { + "syw": "grow" + } + } + ] + }, + "Id": "30d58205-965c-2a33-4599-9c585889d5c7", + "DeletedAt": null + }, + { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "8dbc0f41-998e-836a-97e1-f05d46d95c92", + "DeletedAt": null, + "LexemeForm": { + "mqs": "maximized" + }, + "CitationForm": { + "nrz": "Portugal" + }, + "LiteralMeaning": { + "juy": { + "Spans": [ + { + "Text": "Kyat", + "Ws": "juy", + "Tags": [ + "bc47798c-6e35-430e-a94a-2d1aa82d9119" + ] + }, + { + "Text": "synthesize", + "Ws": "juy", + "Tags": [ + "75fc659a-ae47-45ec-87a8-2475d5667496" + ] + } + ] + }, + "rer": { + "Spans": [ + { + "Text": "Licensed", + "Ws": "rer", + "Tags": [ + "adf734b1-3abb-4644-a5b7-e712c29a59e6" + ] + }, + { + "Text": "architectures", + "Ws": "dos", + "Bold": "On", + "FontSize": -1392951304, + "ForeColor": "#ADFF2F", + "Tags": [ + "b316a4f4-208a-e75f-13f0-09a91a2b3506" + ] + } + ] + }, + "zpa": { + "Spans": [ + { + "Text": "Concrete", + "Ws": "zpa", + "Tags": [ + "10cb16c2-6f15-4101-8689-7c77e6576f52" + ] + }, + { + "Text": "Shoals", + "Ws": "cjy", + "Bold": "Invert", + "FontSize": -437265941, + "ForeColor": "#ADFF2F", + "Tags": [ + "53cd8e2b-15c6-0490-70d6-738a6708b9ca" + ] + } + ] + } + }, + "MorphType": "BoundStem", + "HomographNumber": 0, + "Senses": [], + "Note": { + "rkw": { + "Spans": [ + { + "Text": "XML", + "Ws": "vot", + "Bold": "On", + "FontSize": -1698959192, + "ForeColor": "#ADFF2F", + "Tags": [ + "9218c79b-f453-0ef3-de05-ea5eeba26367" + ] + }, + { + "Text": "invoice", + "Ws": "rkw", + "Tags": [ + "6ef3cf72-b5a5-488c-9381-fb7a7f6f961e" + ] + }, + { + "Text": "bypass", + "Ws": "rkw", + "Tags": [ + "e615bb12-61d9-452e-bac5-06deb6942851" + ] + } + ] + }, + "kee": { + "Spans": [ + { + "Text": "Money Market Account", + "Ws": "ekp", + "Bold": "On", + "FontSize": -315220510, + "ForeColor": "#A52A2A", + "Tags": [ + "424e0f12-78a7-37c7-8fa5-74dd81ccc8a7" + ] + }, + { + "Text": "Glens", + "Ws": "kee", + "Tags": [ + "a323544c-2b85-4fa7-b3c7-f5321ad75c49" + ] + }, + { + "Text": "Buckinghamshire", + "Ws": "kee", + "Tags": [ + "13a974bf-8b90-4f36-99c6-9f0771f53db0" + ] + }, + { + "Text": "SMTP", + "Ws": "cly", + "Bold": "Invert", + "FontSize": 872689318, + "ForeColor": "#0000FF", + "Tags": [ + "498aea00-217b-9a3e-7fd0-2748edadf3b3" + ] + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "292e9847-8c7c-56e1-87fb-41d200c789e1", + "Name": { + "hup": "THX", + "rsk": "Reduced", + "zmq": "hard drive", + "nnx": "cyan" + }, + "DeletedAt": null + } + ], + "VariantOf": [], + "Variants": [], + "PublishIn": [ + { + "Id": "bd874c92-e063-2a20-d263-bdc6897a1e85", + "DeletedAt": null, + "IsMain": false, + "Name": { + "zrg": "cross-platform", + "bno": "heuristic" + } + } + ] + }, + "Id": "8dbc0f41-998e-836a-97e1-f05d46d95c92", + "DeletedAt": null + }, + { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "bb1f4630-5959-3949-9952-903e94a801ad", + "DeletedAt": null, + "LexemeForm": { + "jcs": "Sleek Plastic Salad" + }, + "CitationForm": { + "jaq": "Consultant", + "xoi": "RSS", + "klm": "Data" + }, + "LiteralMeaning": { + "nbr": { + "Spans": [ + { + "Text": "Ergonomic Steel Chair", + "Ws": "nbr", + "Tags": [ + "70109348-e7f5-4ceb-89d6-e6eae8373b37" + ] + } + ] + }, + "mhc": { + "Spans": [ + { + "Text": "1080p", + "Ws": "bbv", + "Bold": "Off", + "FontSize": -104284910, + "ForeColor": "#A52A2A", + "Tags": [ + "0883dec2-65f0-4dd6-3bc8-f94d89f13245" + ] + }, + { + "Text": "reboot", + "Ws": "cae", + "Bold": "Off", + "FontSize": -900262706, + "ForeColor": "#FF0000", + "Tags": [ + "043e6626-56de-8bcd-0593-42b7a76644b3" + ] + }, + { + "Text": "action-items", + "Ws": "zas", + "Bold": "Invert", + "FontSize": -1037024496, + "ForeColor": "#A52A2A", + "Tags": [ + "50d85661-b038-9eec-aba3-5f0f2459930e" + ] + }, + { + "Text": "matrix", + "Ws": "mhc", + "Tags": [ + "f1386d6f-2341-484b-bfcd-e504d89f6e1a" + ] + } + ] + }, + "njj": { + "Spans": [ + { + "Text": "Sao Tome and Principe", + "Ws": "bjn", + "Bold": "Invert", + "FontSize": -1991872558, + "ForeColor": "#A52A2A", + "Tags": [ + "ee219235-6bde-d74d-6ae7-250ed84d1014" + ] + } + ] + } + }, + "MorphType": "Clitic", + "HomographNumber": 1357146770, + "Senses": [], + "Note": { + "xnj": { + "Spans": [ + { + "Text": "driver", + "Ws": "xnj", + "Tags": [ + "2e519c31-c236-4048-a95d-8a33d3d35c07" + ] + }, + { + "Text": "interface", + "Ws": "xnj", + "Tags": [ + "ed8c15b7-ccc3-4572-b8ff-085bff64a10f" + ] + }, + { + "Text": "protocol", + "Ws": "xnj", + "Tags": [ + "71c2cbf9-3e62-4488-9647-09bf868de715" + ] + } + ] + }, + "ghe": { + "Spans": [ + { + "Text": "Rubber", + "Ws": "ghe", + "Tags": [ + "37a062b3-d1c0-45d0-ae8f-f97ad0c07415" + ] + }, + { + "Text": "orange", + "Ws": "twg", + "Bold": "On", + "FontSize": 39466271, + "ForeColor": "#00000000", + "Tags": [ + "4c88e176-b322-353f-f84c-354e30d5e91f" + ] + }, + { + "Text": "navigate", + "Ws": "ded", + "Bold": "On", + "FontSize": -625062189, + "ForeColor": "#00FFFF", + "Tags": [ + "6b8930f0-af30-4601-1fac-2a26774998bc" + ] + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "4b2cae1d-e958-58ca-7b61-8cc682137007", + "Name": { + "ayy": "Legacy", + "kzj": "framework", + "lva": "optical" + }, + "DeletedAt": null + } + ], + "VariantOf": [ + { + "Id": "5122c9d4-c7a9-a8c8-bfc2-030c5b6074d8", + "MaybeId": "5122c9d4-c7a9-a8c8-bfc2-030c5b6074d8", + "DeletedAt": null, + "VariantEntryId": "cc33a6b2-f0f4-419d-3b59-efd4df9f7b91", + "VariantHeadword": "open-source", + "MainEntryId": "36213113-db4d-c035-bf72-8c3418141858", + "MainSenseId": "3ad0091a-12b4-b612-0f59-a60b6a3cb6f1", + "MainHeadword": "PNG", + "Types": [ + { + "Id": "001e896d-f956-c801-4be7-f03c03b3047a", + "Order": 0 + } + ], + "HideMinorEntry": true, + "Comment": { + "jiq": { + "Spans": [ + { + "Text": "Oklahoma", + "Ws": "xcc", + "Bold": "On", + "FontSize": -513164310, + "ForeColor": "#A52A2A", + "Tags": [ + "521c1689-3717-6146-3c7c-2a10376cf6bf" + ] + } + ] + }, + "xpk": { + "Spans": [ + { + "Text": "Associate", + "Ws": "xpk", + "Tags": [ + "cd0a96e8-8f59-46dd-a1fb-01af2684ac5a" + ] + } + ] + }, + "usu": { + "Spans": [ + { + "Text": "wireless", + "Ws": "lwg", + "Bold": "Invert", + "FontSize": 410493062, + "ForeColor": "#0000FF", + "Tags": [ + "9e75d9d8-22f5-8064-e224-7f16547012cd" + ] + }, + { + "Text": "mobile", + "Ws": "xhe", + "Bold": "Off", + "FontSize": -1111900054, + "ForeColor": "#ADFF2F", + "Tags": [ + "96f95626-98d6-e4b9-22fb-3e38e7fd73c4" + ] + } + ] + }, + "sck": { + "Spans": [ + { + "Text": "Cambridgeshire", + "Ws": "kvz", + "Bold": "Off", + "FontSize": -1538201404, + "ForeColor": "#ADFF2F", + "Tags": [ + "e481f393-1861-d9f7-ff93-8629746c0e6e" + ] + } + ] + } + } + } + ], + "Variants": [ + { + "Id": "c9789085-71cd-0529-761f-1224cf5e7327", + "MaybeId": "c9789085-71cd-0529-761f-1224cf5e7327", + "DeletedAt": null, + "VariantEntryId": "4339dd6b-47df-7f7b-0b42-1ec39ee39fd4", + "VariantHeadword": "customer loyalty", + "MainEntryId": "8f529f62-de46-d4d8-7d0d-16211c59f847", + "MainSenseId": "e3e65208-044e-fea9-07c1-79ad75a3ad8f", + "MainHeadword": "Specialist", + "Types": [ + { + "Id": "b89b5e6e-e117-e312-84e4-a4dd810549ff", + "Order": 0 + } + ], + "HideMinorEntry": true, + "Comment": { + "omw": { + "Spans": [ + { + "Text": "Up-sized", + "Ws": "omw", + "Tags": [ + "9008854c-b175-4018-9c30-7441c61a82dc" + ] + }, + { + "Text": "Cotton", + "Ws": "myk", + "Bold": "Off", + "FontSize": -890379863, + "ForeColor": "#FF0000", + "Tags": [ + "00205ce5-6879-94a0-1b02-8d64b1bc713e" + ] + }, + { + "Text": "Cotton", + "Ws": "omw", + "Tags": [ + "a098366f-f6fc-498f-b48d-ed7e6970dafa" + ] + } + ] + }, + "oke": { + "Spans": [ + { + "Text": "tan", + "Ws": "oke", + "Tags": [ + "09095092-b90c-4385-9d7d-3be3787cf21a" + ] + }, + { + "Text": "Kiribati", + "Ws": "kmo", + "Bold": "Off", + "FontSize": 684860900, + "ForeColor": "#ADFF2F", + "Tags": [ + "26a6e345-0b6f-98de-95dc-555977683d44" + ] + } + ] + }, + "tcu": { + "Spans": [ + { + "Text": "integrated", + "Ws": "brt", + "Bold": "Off", + "FontSize": -1732237582, + "ForeColor": "#ADFF2F", + "Tags": [ + "83caf2e5-0fef-d3dc-5a4e-26617b7adeab" + ] + }, + { + "Text": "Tools", + "Ws": "ian", + "Bold": "On", + "FontSize": 1768458048, + "ForeColor": "#A52A2A", + "Tags": [ + "34a03e1a-f250-8eaf-1113-0b57cf9cb432" + ] + } + ] + } + } + } + ], + "PublishIn": [ + { + "Id": "0703f391-1ec3-ba69-74bb-e85cf3a260b8", + "DeletedAt": null, + "IsMain": false, + "Name": { + "pyx": "Uzbekistan Sum", + "bnl": "Soft", + "kou": "communities", + "jay": "Avenue" + } + } + ] + }, + "Id": "bb1f4630-5959-3949-9952-903e94a801ad", + "DeletedAt": null + }, + { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "84bb5f48-b2a9-d0c8-85ee-aec9203830ee", + "DeletedAt": null, + "LexemeForm": { + "dkk": "Product" + }, + "CitationForm": {}, + "LiteralMeaning": {}, + "MorphType": "Infix", + "HomographNumber": 1102525176, + "Senses": [], + "Note": {}, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], + "PublishIn": [ + { + "Id": "78c00e29-d69e-56ba-77f5-b5be25469c4f", + "DeletedAt": null, + "IsMain": true, + "Name": { + "mps": "Small Granite Salad" + } + } + ] + }, + "Id": "84bb5f48-b2a9-d0c8-85ee-aec9203830ee", + "DeletedAt": null + }, + { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "db4dd8f2-9e6f-6713-fc25-a65b91387dac", + "DeletedAt": null, + "LexemeForm": { + "rth": "Intelligent Plastic Sausages", + "kdv": "Generic Plastic Sausages", + "bph": "Samoa" + }, + "CitationForm": { + "plb": "matrix" + }, + "LiteralMeaning": { + "ssq": { + "Spans": [ + { + "Text": "Incredible Cotton Bacon", + "Ws": "ssq", + "Tags": [ + "2ec406ff-4175-429c-a0c0-01d0a5963f6b" + ] + } + ] + }, + "ysd": { + "Spans": [ + { + "Text": "parsing", + "Ws": "ysd", + "Tags": [ + "dd853748-3e1f-4af6-b38c-8313414c59f0" + ] + }, + { + "Text": "Concrete", + "Ws": "ysd", + "Tags": [ + "c28fe7b3-ca24-4457-9519-f7936e35f5a8" + ] + }, + { + "Text": "e-commerce", + "Ws": "ysd", + "Tags": [ + "3adabe01-eb75-4a04-8f18-ed1bac6b1ca2" + ] + }, + { + "Text": "Producer", + "Ws": "ysd", + "Tags": [ + "144dc49c-f4e0-4799-890d-33f4db3dc102" + ] + } + ] + }, + "tck": { + "Spans": [ + { + "Text": "Wyoming", + "Ws": "xyj", + "Bold": "Off", + "FontSize": 400415632, + "ForeColor": "#00000000", + "Tags": [ + "42d74c45-ea1e-d292-cf04-586ca8da958f" + ] + }, + { + "Text": "Cambridgeshire", + "Ws": "tck", + "Tags": [ + "48cd7451-4d5f-4b2b-aea1-0ab4555e66ab" + ] + } + ] + } + }, + "MorphType": "Root", + "HomographNumber": 337527947, + "Senses": [], + "Note": { + "tlf": { + "Spans": [ + { + "Text": "interface", + "Ws": "tlf", + "Tags": [ + "8970547c-62fd-486f-a530-e0e021b80fb8" + ] + }, + { + "Text": "Home Loan Account", + "Ws": "tlf", + "Tags": [ + "6e53eaa2-9303-4ba6-8fd5-b6df538bca7e" + ] + }, + { + "Text": "Landing", + "Ws": "tlf", + "Tags": [ + "a6d5ac59-2b01-402e-82db-f97d4990111c" + ] + }, + { + "Text": "payment", + "Ws": "tlf", + "Tags": [ + "48079899-2abc-4a4c-932d-516d56b30580" + ] + } + ] + }, + "idt": { + "Spans": [ + { + "Text": "Legacy", + "Ws": "tbk", + "Bold": "On", + "FontSize": -1796905800, + "ForeColor": "#FF0000", + "Tags": [ + "a1ad698f-7de2-185d-bb29-48b5893b317c" + ] + }, + { + "Text": "impactful", + "Ws": "idt", + "Tags": [ + "d386899e-ce84-4c3b-9e56-f69eb3e716c2" + ] + } ] } }, - "MorphType": "Stem", - "HomographNumber": 0, - "Senses": [], - "Note": { - "en": { - "Spans": [ + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "1afbcbdc-d0cb-83a0-9b70-a79ae6a8b71d", + "Name": { + "ccj": "Handcrafted Cotton Chips", + "noc": "Accounts", + "nos": "RSS", + "bwy": "Paradigm" + }, + "DeletedAt": null + } + ], + "VariantOf": [ + { + "Id": "826f23a2-a088-26db-2fad-a0b3309e3ec0", + "MaybeId": "826f23a2-a088-26db-2fad-a0b3309e3ec0", + "DeletedAt": null, + "VariantEntryId": "acd7b772-1950-a411-96b4-52a7e52ca5eb", + "VariantHeadword": "Ergonomic", + "MainEntryId": "f3e88c84-06d0-22d8-81c3-816318f0775b", + "MainSenseId": "2b621cd4-9f77-152f-ecf8-d7db1ac0b5b4", + "MainHeadword": "Seychelles Rupee", + "Types": [ { - "Text": "often used in cartoon gags for slipping", - "Ws": "en" + "Id": "46b023dc-a62e-cf94-4c70-d6fe45d8b57a", + "Order": 0 } - ] + ], + "HideMinorEntry": false, + "Comment": { + "gmb": { + "Spans": [ + { + "Text": "transmitting", + "Ws": "nck", + "Bold": "On", + "FontSize": -123133489, + "ForeColor": "#ADFF2F", + "Tags": [ + "abbb6698-4f7e-a852-ed95-1e6cd8ef1d6c" + ] + } + ] + }, + "dae": { + "Spans": [ + { + "Text": "Tennessee", + "Ws": "dae", + "Tags": [ + "b53e5780-db98-4fab-82b7-d7d8feac7a5e" + ] + }, + { + "Text": "Seychelles Rupee", + "Ws": "ihi", + "Bold": "Invert", + "FontSize": 331660934, + "ForeColor": "#00FFFF", + "Tags": [ + "20afe0d2-3e77-a58a-6e3e-c96d9119b690" + ] + }, + { + "Text": "Fiji Dollar", + "Ws": "dae", + "Tags": [ + "fbf6a16e-5159-452f-a01a-9d9f99ca73fb" + ] + } + ] + } + } + } + ], + "Variants": [ + { + "Id": "fde312e5-dfa0-738b-f3f8-bae6717e5fba", + "MaybeId": "fde312e5-dfa0-738b-f3f8-bae6717e5fba", + "DeletedAt": null, + "VariantEntryId": "77932ec1-a4cc-9543-b333-bb0565e4ab3e", + "VariantHeadword": "Generic Cotton Hat", + "MainEntryId": "0ab60e91-c9b7-3b78-b52e-b86e605d1fc3", + "MainSenseId": "abf2b730-a912-8f8d-1bfb-31e42236309e", + "MainHeadword": "platforms", + "Types": [ + { + "Id": "97fc9f8c-27a3-cea7-857a-56861af3461c", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": { + "xuu": { + "Spans": [ + { + "Text": "Kansas", + "Ws": "xuu", + "Tags": [ + "0940eaf6-dcbf-4335-9e97-43bc8c9c43f3" + ] + }, + { + "Text": "protocol", + "Ws": "xuu", + "Tags": [ + "c789f589-a4fa-47e2-9b35-f3e7fe004369" + ] + } + ] + }, + "cty": { + "Spans": [ + { + "Text": "wireless", + "Ws": "cty", + "Tags": [ + "f3c45011-2eca-4835-aa68-7e9a93325bb1" + ] + }, + { + "Text": "Director", + "Ws": "nod", + "Bold": "Invert", + "FontSize": 1170789126, + "ForeColor": "#ADFF2F", + "Tags": [ + "144621a3-1ede-d5a0-c375-d4278f2cc2e2" + ] + } + ] + }, + "bup": { + "Spans": [ + { + "Text": "Manor", + "Ws": "mwn", + "Bold": "On", + "FontSize": 834087519, + "ForeColor": "#00FFFF", + "Tags": [ + "52debd24-da84-59aa-29c9-3395f558243d" + ] + } + ] + }, + "bgd": { + "Spans": [ + { + "Text": "Response", + "Ws": "ruo", + "Bold": "Invert", + "FontSize": 827740833, + "ForeColor": "#ADFF2F", + "Tags": [ + "3bd217c0-cebc-a2bb-5257-360a7839bf28" + ] + }, + { + "Text": "Tasty", + "Ws": "pto", + "Bold": "Invert", + "FontSize": -195800950, + "ForeColor": "#0000FF", + "Tags": [ + "d01da82a-3b40-fab0-1775-0134a9ce9d53" + ] + }, + { + "Text": "Auto Loan Account", + "Ws": "bgd", + "Tags": [ + "cc6655ee-c4af-454d-8d9d-6b474248d24c" + ] + }, + { + "Text": "Orchestrator", + "Ws": "bgd", + "Tags": [ + "7d4c377a-d025-4b0b-8051-47a37f517672" + ] + } + ] + } + } + } + ], + "PublishIn": [ + { + "Id": "64284e6b-1297-7581-297b-ca9983c150ba", + "DeletedAt": null, + "IsMain": false, + "Name": { + "res": "Money Market Account", + "ljp": "overriding" + } } + ] + }, + "Id": "db4dd8f2-9e6f-6713-fc25-a65b91387dac", + "DeletedAt": null + }, + { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "249c38f3-fc0d-195f-7533-97e8c140d0d7", + "DeletedAt": null, + "LexemeForm": { + "kvj": "Florida" }, + "CitationForm": null, + "LiteralMeaning": null, + "MorphType": "Prefix", + "HomographNumber": 4, + "Senses": [], + "Note": null, "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, - "Id": "82cf7254-3a4f-497a-9e15-7d93fc830356", + "Id": "249c38f3-fc0d-195f-7533-97e8c140d0d7", "DeletedAt": null }, { "$type": "MiniLcmCrdtAdapter", "Obj": { "$type": "Entry", - "Id": "8dbc0f41-998e-836a-97e1-f05d46d95c92", + "Id": "a02fc1cc-cde6-1323-5f8c-ad7d857e9a43", "DeletedAt": null, "LexemeForm": { - "mqs": "maximized" + "osn": "Infrastructure" }, "CitationForm": { - "nrz": "Portugal" + "awc": "value-added", + "wrd": "Handmade", + "rtc": "Toys", + "hrp": "encryption" }, "LiteralMeaning": { - "juy": { + "pci": { "Spans": [ { - "Text": "Kyat", - "Ws": "juy", + "Text": "Slovenia", + "Ws": "pci", "Tags": [ - "bc47798c-6e35-430e-a94a-2d1aa82d9119" + "94c29979-f26a-4fdc-92dd-bb97790bc643" ] }, { - "Text": "synthesize", - "Ws": "juy", + "Text": "Unbranded Plastic Hat", + "Ws": "jek", + "Bold": "Invert", + "FontSize": 2105187089, + "ForeColor": "#FF0000", "Tags": [ - "75fc659a-ae47-45ec-87a8-2475d5667496" + "0b9a10fd-e1b2-837b-9e35-a3fa5632bce9" + ] + }, + { + "Text": "synthesizing", + "Ws": "wof", + "Bold": "Off", + "FontSize": -1515988199, + "ForeColor": "#ADFF2F", + "Tags": [ + "70010557-94b7-b35b-6cb7-bd1f9b238fda" + ] + }, + { + "Text": "solution-oriented", + "Ws": "pci", + "Tags": [ + "ac7e9a59-75a8-4a2e-9aae-9f1973701598" ] } ] }, - "rer": { + "tte": { "Spans": [ { - "Text": "Licensed", - "Ws": "rer", + "Text": "open-source", + "Ws": "dmd", + "Bold": "Off", + "FontSize": 1055017616, + "ForeColor": "#0000FF", "Tags": [ - "adf734b1-3abb-4644-a5b7-e712c29a59e6" + "31d578fc-d5bc-63eb-d10c-d46e8828d891" ] }, { - "Text": "architectures", - "Ws": "dos", - "Bold": "On", - "FontSize": -1392951304, + "Text": "deposit", + "Ws": "tte", + "Tags": [ + "a61a6e3c-3872-401d-b48c-ec8c2c47ed4b" + ] + }, + { + "Text": "model", + "Ws": "kns", + "Bold": "Invert", + "FontSize": -990665577, "ForeColor": "#ADFF2F", "Tags": [ - "b316a4f4-208a-e75f-13f0-09a91a2b3506" + "6e8e574f-4a83-b7f5-bd87-54082ec3e104" + ] + }, + { + "Text": "throughput", + "Ws": "kmm", + "Bold": "Off", + "FontSize": -1750125892, + "ForeColor": "#FF0000", + "Tags": [ + "7714d67a-4440-d296-9734-a50fbd44221f" ] } ] }, - "zpa": { + "zag": { "Spans": [ { - "Text": "Concrete", - "Ws": "zpa", + "Text": "Auto Loan Account", + "Ws": "frc", + "Bold": "Off", + "FontSize": 1775564293, + "ForeColor": "#0000FF", "Tags": [ - "10cb16c2-6f15-4101-8689-7c77e6576f52" + "306db40b-1014-5000-54c6-e37a5c96e576" ] - }, + } + ] + }, + "nfa": { + "Spans": [ { - "Text": "Shoals", - "Ws": "cjy", + "Text": "Belize Dollar", + "Ws": "mi", "Bold": "Invert", - "FontSize": -437265941, - "ForeColor": "#ADFF2F", + "FontSize": -992544100, + "ForeColor": "#FF0000", "Tags": [ - "53cd8e2b-15c6-0490-70d6-738a6708b9ca" + "f9688735-457a-0bb0-1a60-53aa858fd005" + ] + }, + { + "Text": "Row", + "Ws": "nfa", + "Tags": [ + "3066709d-0ae5-4697-9eaa-07b12879fe70" + ] + }, + { + "Text": "card", + "Ws": "dnt", + "Bold": "Off", + "FontSize": -584132002, + "ForeColor": "#0000FF", + "Tags": [ + "f96cb3a3-24f0-692d-cad1-12cc39d2b157" + ] + }, + { + "Text": "1080p", + "Ws": "nfa", + "Tags": [ + "43cde2ee-4b31-4b42-b2d8-910828fa8bb2" ] } ] } }, - "MorphType": "BoundStem", - "HomographNumber": 0, + "MorphType": "Suffix", + "HomographNumber": -1669938420, "Senses": [], "Note": { - "rkw": { + "to": { "Spans": [ { - "Text": "XML", - "Ws": "vot", - "Bold": "On", - "FontSize": -1698959192, - "ForeColor": "#ADFF2F", + "Text": "Berkshire", + "Ws": "to", "Tags": [ - "9218c79b-f453-0ef3-de05-ea5eeba26367" + "81b63ae6-6c34-4130-8c5b-6c9839e37940" ] }, { - "Text": "invoice", - "Ws": "rkw", + "Text": "Investment Account", + "Ws": "to", "Tags": [ - "6ef3cf72-b5a5-488c-9381-fb7a7f6f961e" + "494cfcf4-500c-42c4-9ac5-5602770e4ef4" ] - }, + } + ] + }, + "mpw": { + "Spans": [ { - "Text": "bypass", - "Ws": "rkw", + "Text": "Investor", + "Ws": "mnc", + "Bold": "Invert", + "FontSize": -557568898, + "ForeColor": "#00000000", "Tags": [ - "e615bb12-61d9-452e-bac5-06deb6942851" + "93acedce-cdd7-b6b8-7d7f-ff7842e2ac4d" ] } ] }, - "kee": { + "uzs": { "Spans": [ { - "Text": "Money Market Account", - "Ws": "ekp", - "Bold": "On", - "FontSize": -315220510, - "ForeColor": "#A52A2A", + "Text": "Texas", + "Ws": "uzs", + "Tags": [ + "753e76cd-d18d-4b74-be3e-a2df6c3f321a" + ] + }, + { + "Text": "implement", + "Ws": "uzs", "Tags": [ - "424e0f12-78a7-37c7-8fa5-74dd81ccc8a7" + "0657e35e-0f45-493d-b2ba-788d8d491fb4" ] }, { - "Text": "Glens", - "Ws": "kee", + "Text": "copying", + "Ws": "chw", + "Bold": "Invert", + "FontSize": 2053832449, + "ForeColor": "#0000FF", "Tags": [ - "a323544c-2b85-4fa7-b3c7-f5321ad75c49" + "7c555dc7-1c26-5ea1-b642-1ca6f305e51a" ] }, { - "Text": "Buckinghamshire", - "Ws": "kee", + "Text": "Corporate", + "Ws": "uzs", "Tags": [ - "13a974bf-8b90-4f36-99c6-9f0771f53db0" + "56a7aa06-11f6-4b6d-bbcd-4cf96ad199e5" + ] + } + ] + }, + "odt": { + "Spans": [ + { + "Text": "interface", + "Ws": "odt", + "Tags": [ + "83f93c25-8a02-4820-84ee-0169dd2b295e" ] }, { - "Text": "SMTP", - "Ws": "cly", - "Bold": "Invert", - "FontSize": 872689318, - "ForeColor": "#0000FF", + "Text": "transform", + "Ws": "odt", "Tags": [ - "498aea00-217b-9a3e-7fd0-2748edadf3b3" + "570a0ea7-1d3c-49fb-90ed-9ea436dbacd2" ] } ] @@ -392,84 +2508,244 @@ "ComplexForms": [], "ComplexFormTypes": [ { - "Id": "292e9847-8c7c-56e1-87fb-41d200c789e1", + "Id": "8d692b64-4613-8b57-114d-5f7b3aa94ba8", "Name": { - "hup": "THX", - "rsk": "Reduced", - "zmq": "hard drive", - "nnx": "cyan" + "yxg": "morph" }, "DeletedAt": null } ], - "PublishIn": [ + "VariantOf": [ { - "Id": "bd874c92-e063-2a20-d263-bdc6897a1e85", + "Id": "c690f7e4-41f8-bb3a-1946-c67075ed707f", + "MaybeId": "c690f7e4-41f8-bb3a-1946-c67075ed707f", "DeletedAt": null, - "IsMain": false, - "Name": { - "zrg": "cross-platform", - "bno": "heuristic" + "VariantEntryId": "ad874392-54fc-cc32-507d-480e82eee2f3", + "VariantHeadword": "Tasty Plastic Chair", + "MainEntryId": "056fb156-33b7-e51c-f859-7213fd431b3c", + "MainSenseId": "a93bffea-5f9a-83fd-f50d-34408a012e31", + "MainHeadword": "Open-source", + "Types": [ + { + "Id": "38acdb78-0431-071f-3c85-e576b4565384", + "Order": 0 + } + ], + "HideMinorEntry": true, + "Comment": { + "pgz": { + "Spans": [ + { + "Text": "zero administration", + "Ws": "tmc", + "Bold": "Invert", + "FontSize": 1419447388, + "ForeColor": "#0000FF", + "Tags": [ + "c22d8455-e30a-275a-5442-dd5bbabc5123" + ] + }, + { + "Text": "Ergonomic", + "Ws": "bht", + "Bold": "Off", + "FontSize": -484805391, + "ForeColor": "#FF0000", + "Tags": [ + "86a0fa0d-e9d8-a856-f616-08d82b255c96" + ] + }, + { + "Text": "navigate", + "Ws": "kyr", + "Bold": "Invert", + "FontSize": -1846839705, + "ForeColor": "#00FFFF", + "Tags": [ + "94c6156c-d5fa-16a0-a3b8-9452227ff55c" + ] + }, + { + "Text": "Investment Account", + "Ws": "tif", + "Bold": "Invert", + "FontSize": 1638586573, + "ForeColor": "#FF0000", + "Tags": [ + "55e11dac-c1ef-c766-9132-a83de7cd5713" + ] + } + ] + }, + "vmh": { + "Spans": [ + { + "Text": "Buckinghamshire", + "Ws": "snp", + "Bold": "Invert", + "FontSize": -457275380, + "ForeColor": "#00000000", + "Tags": [ + "a6c6604f-3b4d-e6c4-15f9-496005d6425c" + ] + } + ] + }, + "pdn": { + "Spans": [ + { + "Text": "backing up", + "Ws": "bfg", + "Bold": "On", + "FontSize": 1476064418, + "ForeColor": "#A52A2A", + "Tags": [ + "620108a7-f72b-d92b-74c4-c1f07cf414c0" + ] + }, + { + "Text": "Credit Card Account", + "Ws": "pdn", + "Tags": [ + "d7c07e29-bfe6-4c0f-9567-3d4816a0657e" + ] + }, + { + "Text": "Generic Concrete Soap", + "Ws": "pdn", + "Tags": [ + "8fbad8ec-c73a-4704-a01f-04efc36d2500" + ] + }, + { + "Text": "navigate", + "Ws": "pdn", + "Tags": [ + "9b912851-99b0-4b47-ad2b-c89a049526da" + ] + } + ] + } } } - ] - }, - "Id": "8dbc0f41-998e-836a-97e1-f05d46d95c92", - "DeletedAt": null - }, - { - "$type": "MiniLcmCrdtAdapter", - "Obj": { - "$type": "Entry", - "Id": "84bb5f48-b2a9-d0c8-85ee-aec9203830ee", - "DeletedAt": null, - "LexemeForm": { - "dkk": "Product" - }, - "CitationForm": {}, - "LiteralMeaning": {}, - "MorphType": "Infix", - "HomographNumber": 1102525176, - "Senses": [], - "Note": {}, - "Components": [], - "ComplexForms": [], - "ComplexFormTypes": [], + ], + "Variants": [ + { + "Id": "a88c0ff0-52a2-c536-2e97-4c2e91db32d4", + "MaybeId": "a88c0ff0-52a2-c536-2e97-4c2e91db32d4", + "DeletedAt": null, + "VariantEntryId": "b47ed157-8289-dbd7-27ea-7afadb354c72", + "VariantHeadword": "Reverse-engineered", + "MainEntryId": "317afcb9-2792-06e2-d782-2392d3ef4cda", + "MainSenseId": "e46df476-37ed-0e6a-80c2-659a8b315df8", + "MainHeadword": "expedite", + "Types": [ + { + "Id": "664f6b07-5a7a-8c87-b3ea-3e04f3204651", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": { + "nhx": { + "Spans": [ + { + "Text": "Coves", + "Ws": "nhx", + "Tags": [ + "7e4b4d56-b5dd-4a72-881d-e0706bd39d88" + ] + }, + { + "Text": "Sweden", + "Ws": "nhx", + "Tags": [ + "2d852f3d-c0a5-4f1d-a5f4-7ad85f6b9ddd" + ] + }, + { + "Text": "projection", + "Ws": "nhx", + "Tags": [ + "8484aa66-eeae-4b17-ba52-9b871c2fcf9b" + ] + }, + { + "Text": "model", + "Ws": "nhx", + "Tags": [ + "15310484-3559-4537-a27a-64d0c39e660d" + ] + } + ] + }, + "dgt": { + "Spans": [ + { + "Text": "Alabama", + "Ws": "dgt", + "Tags": [ + "a98660a4-ea9c-488e-89db-9062ab7eb800" + ] + } + ] + }, + "dbf": { + "Spans": [ + { + "Text": "Handmade Rubber Pizza", + "Ws": "dbf", + "Tags": [ + "926e556b-884e-4e06-8050-5488752287c3" + ] + } + ] + }, + "bpm": { + "Spans": [ + { + "Text": "Clothing", + "Ws": "bpm", + "Tags": [ + "3eb4e6b3-7762-4cec-acc0-7e97a91697a0" + ] + }, + { + "Text": "Circles", + "Ws": "baz", + "Bold": "On", + "FontSize": -2100919, + "ForeColor": "#00000000", + "Tags": [ + "707a2132-ee66-ff50-4fe6-348c87224f20" + ] + }, + { + "Text": "Kids", + "Ws": "bpm", + "Tags": [ + "9797d4cf-9808-4a28-8b4c-bfc4360ff8f0" + ] + } + ] + } + } + } + ], "PublishIn": [ { - "Id": "78c00e29-d69e-56ba-77f5-b5be25469c4f", + "Id": "0ac7bd0f-0fa9-f39b-7caf-31a12fd7c1cf", "DeletedAt": null, - "IsMain": true, + "IsMain": false, "Name": { - "mps": "Small Granite Salad" + "agb": "Silver", + "ksv": "Baht", + "nur": "Convertible Marks" } } ] }, - "Id": "84bb5f48-b2a9-d0c8-85ee-aec9203830ee", - "DeletedAt": null - }, - { - "$type": "MiniLcmCrdtAdapter", - "Obj": { - "$type": "Entry", - "Id": "249c38f3-fc0d-195f-7533-97e8c140d0d7", - "DeletedAt": null, - "LexemeForm": { - "kvj": "Florida" - }, - "CitationForm": null, - "LiteralMeaning": null, - "MorphType": "Prefix", - "HomographNumber": 4, - "Senses": [], - "Note": null, - "Components": [], - "ComplexForms": [], - "ComplexFormTypes": [], - "PublishIn": [] - }, - "Id": "249c38f3-fc0d-195f-7533-97e8c140d0d7", + "Id": "a02fc1cc-cde6-1323-5f8c-ad7d857e9a43", "DeletedAt": null }, { @@ -4089,5 +6365,86 @@ }, "Id": "4f5808a8-bbf1-e23d-e5fe-5a997f13bf3a", "DeletedAt": null + }, + { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "VariantType", + "Id": "3ac31501-c564-10b5-e4ee-b12b32f904ac", + "Name": { + "fj": "Unbranded Fresh Soap", + "fuj": "Designer", + "ckq": "Computers, Movies \u0026 Beauty" + }, + "DeletedAt": null + }, + "Id": "3ac31501-c564-10b5-e4ee-b12b32f904ac", + "DeletedAt": null + }, + { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Variant", + "Id": "849394dd-9fe6-5932-8389-66178cff84d2", + "MaybeId": "849394dd-9fe6-5932-8389-66178cff84d2", + "DeletedAt": null, + "VariantEntryId": "24ece159-b502-9c8e-976d-b304e938d64a", + "VariantHeadword": "Direct", + "MainEntryId": "b3280c69-d3b4-838c-c2e5-12ab63d13e50", + "MainSenseId": "9dd558f7-cc1d-1d7c-f985-1335de4b4f20", + "MainHeadword": "leverage", + "Types": [ + { + "Id": "8a986a26-bdba-709e-952a-dfa9ce354ff4", + "Order": 0 + } + ], + "HideMinorEntry": false, + "Comment": { + "kvi": { + "Spans": [ + { + "Text": "Designer", + "Ws": "goj", + "Bold": "On", + "FontSize": -557984113, + "ForeColor": "#00FFFF", + "Tags": [ + "1bfe7841-b495-e07e-e50b-d5702f517179" + ] + }, + { + "Text": "Ergonomic Metal Pizza", + "Ws": "kvi", + "Tags": [ + "d7b748ec-9d3a-437a-8d29-d6436e2976c5" + ] + }, + { + "Text": "Savings Account", + "Ws": "kns", + "Bold": "Off", + "FontSize": -2087775132, + "ForeColor": "#00FFFF", + "Tags": [ + "0638f7cf-ac11-1031-5b58-f80350017b17" + ] + }, + { + "Text": "Awesome", + "Ws": "ngm", + "Bold": "On", + "FontSize": -1829076208, + "ForeColor": "#FF0000", + "Tags": [ + "d631cfbc-6afd-3ba8-3f62-7c3e56370e51" + ] + } + ] + } + } + }, + "Id": "849394dd-9fe6-5932-8389-66178cff84d2", + "DeletedAt": null } ] \ No newline at end of file diff --git a/backend/FwLite/LcmCrdt.Tests/Data/SnapshotDeserializationRegressionData.legacy.verified.txt b/backend/FwLite/LcmCrdt.Tests/Data/SnapshotDeserializationRegressionData.legacy.verified.txt index 625c969cc8..6546256a26 100644 --- a/backend/FwLite/LcmCrdt.Tests/Data/SnapshotDeserializationRegressionData.legacy.verified.txt +++ b/backend/FwLite/LcmCrdt.Tests/Data/SnapshotDeserializationRegressionData.legacy.verified.txt @@ -158,6 +158,8 @@ "DeletedAt": null } ], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "8f403ae3-9859-4a74-a52d-3c0736bb5917", @@ -246,6 +248,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "82cf7254-3a4f-497a-9e15-7d93fc830356", @@ -4020,5 +4024,849 @@ "Id": "b14e4cf6-2b50-74a4-e21e-482b38efd849", "DeletedAt": null } + }, + { + "Input": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "8f403ae3-9859-4a74-a52d-3c0736bb5917", + "DeletedAt": null, + "LexemeForm": { + "en": "Pineapple" + }, + "CitationForm": {}, + "LiteralMeaning": {}, + "MorphType": "Stem", + "HomographNumber": 0, + "Senses": [], + "Note": {}, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "1f6ae209-141a-40db-983c-bee93af0ca3c", + "Name": { + "en": "Compound" + }, + "DeletedAt": null + } + ], + "PublishIn": [] + }, + "Id": "8f403ae3-9859-4a74-a52d-3c0736bb5917", + "DeletedAt": null + }, + "Output": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "8f403ae3-9859-4a74-a52d-3c0736bb5917", + "DeletedAt": null, + "LexemeForm": { + "en": "Pineapple" + }, + "CitationForm": {}, + "LiteralMeaning": {}, + "MorphType": "Stem", + "HomographNumber": 0, + "Senses": [], + "Note": {}, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "1f6ae209-141a-40db-983c-bee93af0ca3c", + "Name": { + "en": "Compound" + }, + "DeletedAt": null + } + ], + "VariantOf": [], + "Variants": [], + "PublishIn": [] + }, + "Id": "8f403ae3-9859-4a74-a52d-3c0736bb5917", + "DeletedAt": null + } + }, + { + "Input": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "691dda9c-b83e-71c6-3638-e66a279c396e", + "DeletedAt": null, + "LexemeForm": { + "luq": "Communications" + }, + "CitationForm": { + "ykl": "Dominican Republic", + "tw": "Unbranded", + "sqh": "hack" + }, + "LiteralMeaning": { + "rpn": { + "Spans": [ + { + "Text": "Home Loan Account", + "Ws": "kmd", + "Bold": "On", + "FontSize": 1210454949, + "ForeColor": "#A52A2A", + "Tags": [ + "7231e128-410a-9cae-4141-997965f4a853" + ] + } + ] + } + }, + "MorphType": "Particle", + "HomographNumber": 0, + "Senses": [], + "Note": { + "ekl": { + "Spans": [ + { + "Text": "Sleek", + "Ws": "akv", + "Bold": "Off", + "FontSize": 2066121125, + "ForeColor": "#ADFF2F", + "Tags": [ + "82408188-7ce4-ba9a-5f35-8ffec5b3b254" + ] + } + ] + }, + "uki": { + "Spans": [ + { + "Text": "Refined Fresh Computer", + "Ws": "uki", + "Tags": [ + "122f575c-140b-4bb1-9c8c-f98e1969951d" + ] + }, + { + "Text": "internet solution", + "Ws": "uki", + "Tags": [ + "a5bd8ab1-99a0-4bcc-baaf-93c7ccc77429" + ] + }, + { + "Text": "wireless", + "Ws": "uki", + "Tags": [ + "005d71cb-4f05-486c-897c-710a7a6b5346" + ] + }, + { + "Text": "navigate", + "Ws": "uki", + "Tags": [ + "f04879c9-1e04-49b5-b4e0-0ce28e77aacd" + ] + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "15a8d32f-5cac-8a71-7b31-cbefa36ad322", + "Name": { + "tgi": "input", + "gnk": "silver", + "suo": "Refined Wooden Chair" + }, + "DeletedAt": null + } + ], + "PublishIn": [ + { + "Id": "ec21b4b7-3861-38d4-bc7b-fe77bd2321c2", + "DeletedAt": null, + "IsMain": false, + "Name": { + "nak": "CSS" + } + } + ] + }, + "Id": "691dda9c-b83e-71c6-3638-e66a279c396e", + "DeletedAt": null + }, + "Output": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "691dda9c-b83e-71c6-3638-e66a279c396e", + "DeletedAt": null, + "LexemeForm": { + "luq": "Communications" + }, + "CitationForm": { + "ykl": "Dominican Republic", + "tw": "Unbranded", + "sqh": "hack" + }, + "LiteralMeaning": { + "rpn": { + "Spans": [ + { + "Text": "Home Loan Account", + "Ws": "kmd", + "Bold": "On", + "FontSize": 1210454949, + "ForeColor": "#A52A2A", + "Tags": [ + "7231e128-410a-9cae-4141-997965f4a853" + ] + } + ] + } + }, + "MorphType": "Particle", + "HomographNumber": 0, + "Senses": [], + "Note": { + "ekl": { + "Spans": [ + { + "Text": "Sleek", + "Ws": "akv", + "Bold": "Off", + "FontSize": 2066121125, + "ForeColor": "#ADFF2F", + "Tags": [ + "82408188-7ce4-ba9a-5f35-8ffec5b3b254" + ] + } + ] + }, + "uki": { + "Spans": [ + { + "Text": "Refined Fresh Computer", + "Ws": "uki", + "Tags": [ + "122f575c-140b-4bb1-9c8c-f98e1969951d" + ] + }, + { + "Text": "internet solution", + "Ws": "uki", + "Tags": [ + "a5bd8ab1-99a0-4bcc-baaf-93c7ccc77429" + ] + }, + { + "Text": "wireless", + "Ws": "uki", + "Tags": [ + "005d71cb-4f05-486c-897c-710a7a6b5346" + ] + }, + { + "Text": "navigate", + "Ws": "uki", + "Tags": [ + "f04879c9-1e04-49b5-b4e0-0ce28e77aacd" + ] + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "15a8d32f-5cac-8a71-7b31-cbefa36ad322", + "Name": { + "tgi": "input", + "gnk": "silver", + "suo": "Refined Wooden Chair" + }, + "DeletedAt": null + } + ], + "VariantOf": [], + "Variants": [], + "PublishIn": [ + { + "Id": "ec21b4b7-3861-38d4-bc7b-fe77bd2321c2", + "DeletedAt": null, + "IsMain": false, + "Name": { + "nak": "CSS" + } + } + ] + }, + "Id": "691dda9c-b83e-71c6-3638-e66a279c396e", + "DeletedAt": null + } + }, + { + "Input": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "82cf7254-3a4f-497a-9e15-7d93fc830356", + "DeletedAt": null, + "LexemeForm": { + "en": "\uD83C\uDF4C", + "th": "\u0E01\u0E25\u0E49\u0E27\u0E22" + }, + "CitationForm": {}, + "LiteralMeaning": { + "en": { + "Spans": [ + { + "Text": "yellow fruit that comes in bunches.", + "Ws": "en" + } + ] + } + }, + "MorphType": "Stem", + "HomographNumber": 0, + "Senses": [], + "Note": { + "en": { + "Spans": [ + { + "Text": "often used in cartoon gags for slipping", + "Ws": "en" + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [], + "PublishIn": [] + }, + "Id": "82cf7254-3a4f-497a-9e15-7d93fc830356", + "DeletedAt": null + }, + "Output": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "82cf7254-3a4f-497a-9e15-7d93fc830356", + "DeletedAt": null, + "LexemeForm": { + "en": "\uD83C\uDF4C", + "th": "\u0E01\u0E25\u0E49\u0E27\u0E22" + }, + "CitationForm": {}, + "LiteralMeaning": { + "en": { + "Spans": [ + { + "Text": "yellow fruit that comes in bunches.", + "Ws": "en" + } + ] + } + }, + "MorphType": "Stem", + "HomographNumber": 0, + "Senses": [], + "Note": { + "en": { + "Spans": [ + { + "Text": "often used in cartoon gags for slipping", + "Ws": "en" + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], + "PublishIn": [] + }, + "Id": "82cf7254-3a4f-497a-9e15-7d93fc830356", + "DeletedAt": null + } + }, + { + "Input": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "8dbc0f41-998e-836a-97e1-f05d46d95c92", + "DeletedAt": null, + "LexemeForm": { + "mqs": "maximized" + }, + "CitationForm": { + "nrz": "Portugal" + }, + "LiteralMeaning": { + "juy": { + "Spans": [ + { + "Text": "Kyat", + "Ws": "juy", + "Tags": [ + "bc47798c-6e35-430e-a94a-2d1aa82d9119" + ] + }, + { + "Text": "synthesize", + "Ws": "juy", + "Tags": [ + "75fc659a-ae47-45ec-87a8-2475d5667496" + ] + } + ] + }, + "rer": { + "Spans": [ + { + "Text": "Licensed", + "Ws": "rer", + "Tags": [ + "adf734b1-3abb-4644-a5b7-e712c29a59e6" + ] + }, + { + "Text": "architectures", + "Ws": "dos", + "Bold": "On", + "FontSize": -1392951304, + "ForeColor": "#ADFF2F", + "Tags": [ + "b316a4f4-208a-e75f-13f0-09a91a2b3506" + ] + } + ] + }, + "zpa": { + "Spans": [ + { + "Text": "Concrete", + "Ws": "zpa", + "Tags": [ + "10cb16c2-6f15-4101-8689-7c77e6576f52" + ] + }, + { + "Text": "Shoals", + "Ws": "cjy", + "Bold": "Invert", + "FontSize": -437265941, + "ForeColor": "#ADFF2F", + "Tags": [ + "53cd8e2b-15c6-0490-70d6-738a6708b9ca" + ] + } + ] + } + }, + "MorphType": "BoundStem", + "HomographNumber": 0, + "Senses": [], + "Note": { + "rkw": { + "Spans": [ + { + "Text": "XML", + "Ws": "vot", + "Bold": "On", + "FontSize": -1698959192, + "ForeColor": "#ADFF2F", + "Tags": [ + "9218c79b-f453-0ef3-de05-ea5eeba26367" + ] + }, + { + "Text": "invoice", + "Ws": "rkw", + "Tags": [ + "6ef3cf72-b5a5-488c-9381-fb7a7f6f961e" + ] + }, + { + "Text": "bypass", + "Ws": "rkw", + "Tags": [ + "e615bb12-61d9-452e-bac5-06deb6942851" + ] + } + ] + }, + "kee": { + "Spans": [ + { + "Text": "Money Market Account", + "Ws": "ekp", + "Bold": "On", + "FontSize": -315220510, + "ForeColor": "#A52A2A", + "Tags": [ + "424e0f12-78a7-37c7-8fa5-74dd81ccc8a7" + ] + }, + { + "Text": "Glens", + "Ws": "kee", + "Tags": [ + "a323544c-2b85-4fa7-b3c7-f5321ad75c49" + ] + }, + { + "Text": "Buckinghamshire", + "Ws": "kee", + "Tags": [ + "13a974bf-8b90-4f36-99c6-9f0771f53db0" + ] + }, + { + "Text": "SMTP", + "Ws": "cly", + "Bold": "Invert", + "FontSize": 872689318, + "ForeColor": "#0000FF", + "Tags": [ + "498aea00-217b-9a3e-7fd0-2748edadf3b3" + ] + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "292e9847-8c7c-56e1-87fb-41d200c789e1", + "Name": { + "hup": "THX", + "rsk": "Reduced", + "zmq": "hard drive", + "nnx": "cyan" + }, + "DeletedAt": null + } + ], + "PublishIn": [ + { + "Id": "bd874c92-e063-2a20-d263-bdc6897a1e85", + "DeletedAt": null, + "IsMain": false, + "Name": { + "zrg": "cross-platform", + "bno": "heuristic" + } + } + ] + }, + "Id": "8dbc0f41-998e-836a-97e1-f05d46d95c92", + "DeletedAt": null + }, + "Output": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "8dbc0f41-998e-836a-97e1-f05d46d95c92", + "DeletedAt": null, + "LexemeForm": { + "mqs": "maximized" + }, + "CitationForm": { + "nrz": "Portugal" + }, + "LiteralMeaning": { + "juy": { + "Spans": [ + { + "Text": "Kyat", + "Ws": "juy", + "Tags": [ + "bc47798c-6e35-430e-a94a-2d1aa82d9119" + ] + }, + { + "Text": "synthesize", + "Ws": "juy", + "Tags": [ + "75fc659a-ae47-45ec-87a8-2475d5667496" + ] + } + ] + }, + "rer": { + "Spans": [ + { + "Text": "Licensed", + "Ws": "rer", + "Tags": [ + "adf734b1-3abb-4644-a5b7-e712c29a59e6" + ] + }, + { + "Text": "architectures", + "Ws": "dos", + "Bold": "On", + "FontSize": -1392951304, + "ForeColor": "#ADFF2F", + "Tags": [ + "b316a4f4-208a-e75f-13f0-09a91a2b3506" + ] + } + ] + }, + "zpa": { + "Spans": [ + { + "Text": "Concrete", + "Ws": "zpa", + "Tags": [ + "10cb16c2-6f15-4101-8689-7c77e6576f52" + ] + }, + { + "Text": "Shoals", + "Ws": "cjy", + "Bold": "Invert", + "FontSize": -437265941, + "ForeColor": "#ADFF2F", + "Tags": [ + "53cd8e2b-15c6-0490-70d6-738a6708b9ca" + ] + } + ] + } + }, + "MorphType": "BoundStem", + "HomographNumber": 0, + "Senses": [], + "Note": { + "rkw": { + "Spans": [ + { + "Text": "XML", + "Ws": "vot", + "Bold": "On", + "FontSize": -1698959192, + "ForeColor": "#ADFF2F", + "Tags": [ + "9218c79b-f453-0ef3-de05-ea5eeba26367" + ] + }, + { + "Text": "invoice", + "Ws": "rkw", + "Tags": [ + "6ef3cf72-b5a5-488c-9381-fb7a7f6f961e" + ] + }, + { + "Text": "bypass", + "Ws": "rkw", + "Tags": [ + "e615bb12-61d9-452e-bac5-06deb6942851" + ] + } + ] + }, + "kee": { + "Spans": [ + { + "Text": "Money Market Account", + "Ws": "ekp", + "Bold": "On", + "FontSize": -315220510, + "ForeColor": "#A52A2A", + "Tags": [ + "424e0f12-78a7-37c7-8fa5-74dd81ccc8a7" + ] + }, + { + "Text": "Glens", + "Ws": "kee", + "Tags": [ + "a323544c-2b85-4fa7-b3c7-f5321ad75c49" + ] + }, + { + "Text": "Buckinghamshire", + "Ws": "kee", + "Tags": [ + "13a974bf-8b90-4f36-99c6-9f0771f53db0" + ] + }, + { + "Text": "SMTP", + "Ws": "cly", + "Bold": "Invert", + "FontSize": 872689318, + "ForeColor": "#0000FF", + "Tags": [ + "498aea00-217b-9a3e-7fd0-2748edadf3b3" + ] + } + ] + } + }, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [ + { + "Id": "292e9847-8c7c-56e1-87fb-41d200c789e1", + "Name": { + "hup": "THX", + "rsk": "Reduced", + "zmq": "hard drive", + "nnx": "cyan" + }, + "DeletedAt": null + } + ], + "VariantOf": [], + "Variants": [], + "PublishIn": [ + { + "Id": "bd874c92-e063-2a20-d263-bdc6897a1e85", + "DeletedAt": null, + "IsMain": false, + "Name": { + "zrg": "cross-platform", + "bno": "heuristic" + } + } + ] + }, + "Id": "8dbc0f41-998e-836a-97e1-f05d46d95c92", + "DeletedAt": null + } + }, + { + "Input": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "84bb5f48-b2a9-d0c8-85ee-aec9203830ee", + "DeletedAt": null, + "LexemeForm": { + "dkk": "Product" + }, + "CitationForm": {}, + "LiteralMeaning": {}, + "MorphType": "Infix", + "HomographNumber": 1102525176, + "Senses": [], + "Note": {}, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [], + "PublishIn": [ + { + "Id": "78c00e29-d69e-56ba-77f5-b5be25469c4f", + "DeletedAt": null, + "IsMain": true, + "Name": { + "mps": "Small Granite Salad" + } + } + ] + }, + "Id": "84bb5f48-b2a9-d0c8-85ee-aec9203830ee", + "DeletedAt": null + }, + "Output": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "84bb5f48-b2a9-d0c8-85ee-aec9203830ee", + "DeletedAt": null, + "LexemeForm": { + "dkk": "Product" + }, + "CitationForm": {}, + "LiteralMeaning": {}, + "MorphType": "Infix", + "HomographNumber": 1102525176, + "Senses": [], + "Note": {}, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], + "PublishIn": [ + { + "Id": "78c00e29-d69e-56ba-77f5-b5be25469c4f", + "DeletedAt": null, + "IsMain": true, + "Name": { + "mps": "Small Granite Salad" + } + } + ] + }, + "Id": "84bb5f48-b2a9-d0c8-85ee-aec9203830ee", + "DeletedAt": null + } + }, + { + "Input": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "249c38f3-fc0d-195f-7533-97e8c140d0d7", + "DeletedAt": null, + "LexemeForm": { + "kvj": "Florida" + }, + "CitationForm": null, + "LiteralMeaning": null, + "MorphType": "Prefix", + "HomographNumber": 4, + "Senses": [], + "Note": null, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [], + "PublishIn": [] + }, + "Id": "249c38f3-fc0d-195f-7533-97e8c140d0d7", + "DeletedAt": null + }, + "Output": { + "$type": "MiniLcmCrdtAdapter", + "Obj": { + "$type": "Entry", + "Id": "249c38f3-fc0d-195f-7533-97e8c140d0d7", + "DeletedAt": null, + "LexemeForm": { + "kvj": "Florida" + }, + "CitationForm": null, + "LiteralMeaning": null, + "MorphType": "Prefix", + "HomographNumber": 4, + "Senses": [], + "Note": null, + "Components": [], + "ComplexForms": [], + "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], + "PublishIn": [] + }, + "Id": "249c38f3-fc0d-195f-7533-97e8c140d0d7", + "DeletedAt": null + } } ] \ No newline at end of file diff --git a/backend/FwLite/LcmCrdt.Tests/Data/VerifyRegeneratedSnapshotsAfterMigrationFromScriptedDb.v1.verified.json b/backend/FwLite/LcmCrdt.Tests/Data/VerifyRegeneratedSnapshotsAfterMigrationFromScriptedDb.v1.verified.json index b087157ce9..e733d6c2ac 100644 --- a/backend/FwLite/LcmCrdt.Tests/Data/VerifyRegeneratedSnapshotsAfterMigrationFromScriptedDb.v1.verified.json +++ b/backend/FwLite/LcmCrdt.Tests/Data/VerifyRegeneratedSnapshotsAfterMigrationFromScriptedDb.v1.verified.json @@ -70,6 +70,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "Guid_7" diff --git a/backend/FwLite/LcmCrdt.Tests/Data/VerifyRegeneratedSnapshotsAfterMigrationFromScriptedDb.v2.verified.json b/backend/FwLite/LcmCrdt.Tests/Data/VerifyRegeneratedSnapshotsAfterMigrationFromScriptedDb.v2.verified.json index b10f437131..77a842a4ac 100644 --- a/backend/FwLite/LcmCrdt.Tests/Data/VerifyRegeneratedSnapshotsAfterMigrationFromScriptedDb.v2.verified.json +++ b/backend/FwLite/LcmCrdt.Tests/Data/VerifyRegeneratedSnapshotsAfterMigrationFromScriptedDb.v2.verified.json @@ -122,6 +122,8 @@ } } ], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "Guid_4" @@ -163,6 +165,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "Guid_3" @@ -204,6 +208,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "Guid_16" @@ -245,6 +251,8 @@ "Components": [], "ComplexForms": [], "ComplexFormTypes": [], + "VariantOf": [], + "Variants": [], "PublishIn": [] }, "Id": "Guid_19" diff --git a/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyChangeModels.verified.txt b/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyChangeModels.verified.txt index 4d9da1f85e..804840d6d1 100644 --- a/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyChangeModels.verified.txt +++ b/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyChangeModels.verified.txt @@ -40,6 +40,14 @@ DerivedType: JsonPatchChange, TypeDiscriminator: jsonPatch:ComplexFormType }, + { + DerivedType: JsonPatchChange, + TypeDiscriminator: jsonPatch:VariantType + }, + { + DerivedType: JsonPatchChange, + TypeDiscriminator: jsonPatch:Variant + }, { DerivedType: JsonPatchChange, TypeDiscriminator: jsonPatch:MorphType @@ -76,6 +84,14 @@ DerivedType: DeleteChange, TypeDiscriminator: delete:ComplexFormComponent }, + { + DerivedType: DeleteChange, + TypeDiscriminator: delete:VariantType + }, + { + DerivedType: DeleteChange, + TypeDiscriminator: delete:Variant + }, { DerivedType: DeleteChange, TypeDiscriminator: delete:Publication @@ -208,6 +224,26 @@ DerivedType: CreateComplexFormType, TypeDiscriminator: CreateComplexFormType }, + { + DerivedType: AddVariantChange, + TypeDiscriminator: AddVariantChange + }, + { + DerivedType: AddVariantTypeChange, + TypeDiscriminator: AddVariantTypeChange + }, + { + DerivedType: RemoveVariantTypeChange, + TypeDiscriminator: RemoveVariantTypeChange + }, + { + DerivedType: ReorderVariantTypeChange, + TypeDiscriminator: ReorderVariantTypeChange + }, + { + DerivedType: CreateVariantType, + TypeDiscriminator: CreateVariantType + }, { DerivedType: CreateCustomViewChange, TypeDiscriminator: CreateCustomViewChange diff --git a/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyDbModel.verified.txt b/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyDbModel.verified.txt index d17e1227f1..4a91e03eb4 100644 --- a/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyDbModel.verified.txt +++ b/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyDbModel.verified.txt @@ -205,6 +205,8 @@ ComplexForms (List) Collection ToDependent ComplexFormComponent Components (List) Collection ToDependent ComplexFormComponent Senses (List) Collection ToDependent Sense + VariantOf (List) Collection ToDependent Variant + Variants (List) Collection ToDependent Variant Keys: Id PK Foreign keys: @@ -417,6 +419,70 @@ Relational:TableName: UserComment Relational:ViewName: Relational:ViewSchema: + EntityType: Variant + Properties: + Id (_id, Guid) Required PK AfterSave:Throw ValueGenerated.OnAdd + Comment (RichMultiString) Required + Annotations: + Relational:ColumnType: jsonb + DeletedAt (DateTimeOffset?) + HideMinorEntry (bool) Required + MainEntryId (Guid) Required FK Index + MainHeadword (string) + MainSenseId (Guid?) FK Index + Annotations: + Relational:ColumnName: MainSenseId + SnapshotId (no field, Guid?) Shadow FK Index + Types (List) Required + Annotations: + Relational:ColumnType: jsonb + VariantEntryId (Guid) Required FK Index + VariantHeadword (string) + Keys: + Id PK + Foreign keys: + Variant {'MainEntryId'} -> Entry {'Id'} Required Cascade ToDependent: Variants + Variant {'MainSenseId'} -> Sense {'Id'} Cascade + Variant {'SnapshotId'} -> ObjectSnapshot {'Id'} Unique SetNull + Variant {'VariantEntryId'} -> Entry {'Id'} Required Cascade ToDependent: VariantOf + Indexes: + MainEntryId + MainSenseId + SnapshotId Unique + VariantEntryId, MainEntryId Unique + Annotations: + Relational:Filter: MainSenseId IS NULL + VariantEntryId, MainEntryId, MainSenseId Unique + Annotations: + Relational:Filter: MainSenseId IS NOT NULL + Annotations: + Relational:FunctionName: + Relational:Schema: + Relational:SqlQuery: + Relational:TableName: Variants + Relational:ViewName: + Relational:ViewSchema: + EntityType: VariantType + Properties: + Id (Guid) Required PK AfterSave:Throw ValueGenerated.OnAdd + DeletedAt (DateTimeOffset?) + Name (MultiString) Required + Annotations: + Relational:ColumnType: jsonb + SnapshotId (no field, Guid?) Shadow FK Index + Keys: + Id PK + Foreign keys: + VariantType {'SnapshotId'} -> ObjectSnapshot {'Id'} Unique SetNull + Indexes: + SnapshotId Unique + Annotations: + Relational:FunctionName: + Relational:Schema: + Relational:SqlQuery: + Relational:TableName: VariantType + Relational:ViewName: + Relational:ViewSchema: EntityType: WritingSystem Properties: Id (_id, Guid) Required PK AfterSave:Throw ValueGenerated.OnAdd diff --git a/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyIObjectWithIdModels.verified.txt b/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyIObjectWithIdModels.verified.txt index c94eb71fdf..b7979782fb 100644 --- a/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyIObjectWithIdModels.verified.txt +++ b/backend/FwLite/LcmCrdt.Tests/DataModelSnapshotTests.VerifyIObjectWithIdModels.verified.txt @@ -36,6 +36,14 @@ DerivedType: ComplexFormComponent, TypeDiscriminator: ComplexFormComponent }, + { + DerivedType: VariantType, + TypeDiscriminator: VariantType + }, + { + DerivedType: Variant, + TypeDiscriminator: Variant + }, { DerivedType: CustomView, TypeDiscriminator: CustomView diff --git a/backend/FwLite/LcmCrdt.Tests/MiniLcmTests/VariantTests.cs b/backend/FwLite/LcmCrdt.Tests/MiniLcmTests/VariantTests.cs new file mode 100644 index 0000000000..d6fdefe61f --- /dev/null +++ b/backend/FwLite/LcmCrdt.Tests/MiniLcmTests/VariantTests.cs @@ -0,0 +1,55 @@ +namespace LcmCrdt.Tests.MiniLcmTests; + +public class VariantTests : VariantTestsBase +{ + private readonly MiniLcmApiFixture _fixture = new(); + + protected override async Task NewApi() + { + await _fixture.InitializeAsync(); + return _fixture.Api; + } + + public override async Task DisposeAsync() + { + await base.DisposeAsync(); + await _fixture.DisposeAsync(); + } + + [Fact] + public async Task Create_AlwaysAssignsNewEntityId() + { + // The caller's entity ID is never used. This matches FwData behavior (which ignores + // the ID entirely) and prevents Harmony duplicate-ID pitfalls during sync. + var input = Variant.FromEntries( + (await Api.GetEntry(_variantEntryId))!, + (await Api.GetEntry(_mainEntryId))!); + var providedId = input.Id; + + var created = await Api.CreateVariant(input); + + created.MaybeId.Should().NotBeNull(); + created.Id.Should().NotBe(providedId); + } + + [Fact] + public async Task Create_ChangingProperty_ProducesNewEntityId() + { + // When the sync diff detects a property change (e.g. MainEntryId), it does + // remove + add. The "add" reuses the same input object with the old entity ID. + var newMainEntry = await Api.CreateEntry(new() + { + LexemeForm = { { "en", "New Main" } } + }); + + var input = Variant.FromEntries( + (await Api.GetEntry(_variantEntryId))!, + (await Api.GetEntry(_mainEntryId))!); + var first = await Api.CreateVariant(input); + + input.MainEntryId = newMainEntry.Id; + var second = await Api.CreateVariant(input); + + second.Id.Should().NotBe(first.Id); + } +} diff --git a/backend/FwLite/LcmCrdt.Tests/SnapshotAtCommitServiceTests.cs b/backend/FwLite/LcmCrdt.Tests/SnapshotAtCommitServiceTests.cs index 64ce9d5783..1622f1e89c 100644 --- a/backend/FwLite/LcmCrdt.Tests/SnapshotAtCommitServiceTests.cs +++ b/backend/FwLite/LcmCrdt.Tests/SnapshotAtCommitServiceTests.cs @@ -26,6 +26,7 @@ private void AssertSnapshotsAreEquivalentEqual(ProjectSnapshot expected, Project .WithoutStrictOrderingFor(x => x.SemanticDomains) .WithoutStrictOrderingFor(x => x.ComplexFormTypes) .WithoutStrictOrderingFor(x => x.MorphTypes) + .WithoutStrictOrderingFor(x => x.VariantTypes) ); } diff --git a/backend/FwLite/LcmCrdt/Changes/CreateVariantType.cs b/backend/FwLite/LcmCrdt/Changes/CreateVariantType.cs new file mode 100644 index 0000000000..cf39fc9d86 --- /dev/null +++ b/backend/FwLite/LcmCrdt/Changes/CreateVariantType.cs @@ -0,0 +1,21 @@ +using LcmCrdt.Objects; +using MiniLcm.Models; +using SIL.Harmony; +using SIL.Harmony.Changes; +using SIL.Harmony.Core; +using SIL.Harmony.Entities; + +namespace LcmCrdt.Changes; + +public class CreateVariantType(Guid entityId, MultiString name) : CreateChange(entityId), ISelfNamedType +{ + public MultiString Name { get; } = name; + public override ValueTask NewEntity(Commit commit, IChangeContext context) + { + return ValueTask.FromResult(new VariantType + { + Id = EntityId, + Name = Name + }); + } +} diff --git a/backend/FwLite/LcmCrdt/Changes/Entries/AddEntryComponentChange.cs b/backend/FwLite/LcmCrdt/Changes/Entries/AddEntryComponentChange.cs index 4c29b8060c..a7ab787dc9 100644 --- a/backend/FwLite/LcmCrdt/Changes/Entries/AddEntryComponentChange.cs +++ b/backend/FwLite/LcmCrdt/Changes/Entries/AddEntryComponentChange.cs @@ -68,32 +68,17 @@ public override async ValueTask NewEntity(Commit commit, I private static async ValueTask CreatesReferenceCycleOrDuplicate(ComplexFormComponent parent, IChangeContext context) { if (parent.ComplexFormEntryId == parent.ComponentEntryId) return true; - //used to avoid checking the same ComplexFormComponent multiple times - HashSet visited = [parent.Id]; - Queue queue = new Queue(); - queue.Enqueue(parent); - while (queue.Count > 0) + await foreach (var o in context.GetObjectsReferencing(parent.ComplexFormEntryId)) { - var current = queue.Dequeue(); - if (current.ComplexFormEntryId == parent.ComponentEntryId) return true; - await foreach (var o in context.GetObjectsReferencing(current.ComplexFormEntryId)) - { - if (o is not ComplexFormComponent cfc) continue; - if (cfc.DeletedAt is not null) continue; - if (visited.Contains(cfc.Id)) continue; - if (current == parent) - { - var duplicate = cfc.ComplexFormEntryId == parent.ComplexFormEntryId && - cfc.ComponentEntryId == parent.ComponentEntryId && - cfc.ComponentSenseId == parent.ComponentSenseId; - if (duplicate) return true; - } - - if (cfc.ComplexFormEntryId == parent.ComponentEntryId) return true; - queue.Enqueue(cfc); - visited.Add(cfc.Id); - } + if (o is not ComplexFormComponent cfc) continue; + if (cfc.DeletedAt is not null) continue; + if (cfc.Id == parent.Id) continue; + var duplicate = cfc.ComplexFormEntryId == parent.ComplexFormEntryId && + cfc.ComponentEntryId == parent.ComponentEntryId && + cfc.ComponentSenseId == parent.ComponentSenseId; + if (duplicate) return true; } - return false; + + return await ComponentGraph.CanReach(parent.ComponentEntryId, parent.ComplexFormEntryId, context); } } diff --git a/backend/FwLite/LcmCrdt/Changes/Entries/AddVariantChange.cs b/backend/FwLite/LcmCrdt/Changes/Entries/AddVariantChange.cs new file mode 100644 index 0000000000..22ce195c22 --- /dev/null +++ b/backend/FwLite/LcmCrdt/Changes/Entries/AddVariantChange.cs @@ -0,0 +1,106 @@ +using System.Text.Json.Serialization; +using SIL.Harmony; +using SIL.Harmony.Changes; +using SIL.Harmony.Core; +using SIL.Harmony.Entities; + +namespace LcmCrdt.Changes.Entries; + +public class AddVariantChange : CreateChange, ISelfNamedType +{ + public Guid VariantEntryId { get; } + public Guid MainEntryId { get; } + public Guid? MainSenseId { get; } + public List Types { get; } + public bool HideMinorEntry { get; } + public RichMultiString Comment { get; } + + [JsonConstructor] + public AddVariantChange(Guid entityId, + Guid variantEntryId, + Guid mainEntryId, + Guid? mainSenseId = null, + List? types = null, + bool hideMinorEntry = false, + RichMultiString? comment = null) : base(entityId) + { + VariantEntryId = variantEntryId; + MainEntryId = mainEntryId; + MainSenseId = mainSenseId; + Types = types ?? []; + HideMinorEntry = hideMinorEntry; + Comment = comment ?? new(); + } + + public AddVariantChange(Variant variant) : this(variant.MaybeId ?? Guid.NewGuid(), + variant.VariantEntryId, + variant.MainEntryId, + variant.MainSenseId, + [..variant.Types.Select(t => t.Copy())], + variant.HideMinorEntry, + variant.Comment.Copy()) + { + } + + public override async ValueTask NewEntity(Commit commit, IChangeContext context) + { + var variantEntry = await context.GetCurrent(VariantEntryId); + var mainEntry = await context.GetCurrent(MainEntryId); + Sense? mainSense = null; + if (MainSenseId is not null) + mainSense = await context.GetCurrent(MainSenseId.Value); + var shouldBeDeleted = (variantEntry is null or {DeletedAt: not null } || + mainEntry is null or { DeletedAt: not null } || + (MainSenseId.HasValue && mainSense?.DeletedAt is not null)); + var types = new List(Types.Count); + foreach (var type in Types) + { + if (await context.IsObjectDeleted(type.Id)) continue; + types.Add(type); + } + // inputs that never picked orders (e.g. a link created whole with its types) keep list order + if (types.Count > 0 && types.All(t => t.Order == 0)) + { + for (var i = 0; i < types.Count; i++) types[i].Order = i + 1; + } + types.Sort(VariantTypeRef.CompareRefs); + var variant = new Variant + { + Id = EntityId, + VariantEntryId = VariantEntryId, + VariantHeadword = variantEntry?.Headword(), + MainEntryId = MainEntryId, + MainHeadword = mainEntry?.Headword(), + MainSenseId = MainSenseId, + Types = types, + HideMinorEntry = HideMinorEntry, + Comment = Comment.Copy(), + DeletedAt = shouldBeDeleted + ? commit.DateTime + : (DateTime?)null, + }; + if (variant.DeletedAt is null && await CreatesReferenceCycleOrDuplicate(variant, context)) + { + variant.DeletedAt = commit.DateTime; + } + + return variant; + } + + private static async ValueTask CreatesReferenceCycleOrDuplicate(Variant parent, IChangeContext context) + { + if (parent.VariantEntryId == parent.MainEntryId) return true; + await foreach (var o in context.GetObjectsReferencing(parent.VariantEntryId)) + { + if (o is not Variant v) continue; + if (v.DeletedAt is not null) continue; + if (v.Id == parent.Id) continue; + var duplicate = v.VariantEntryId == parent.VariantEntryId && + v.MainEntryId == parent.MainEntryId && + v.MainSenseId == parent.MainSenseId; + if (duplicate) return true; + } + + return await ComponentGraph.CanReach(parent.MainEntryId, parent.VariantEntryId, context); + } +} diff --git a/backend/FwLite/LcmCrdt/Changes/Entries/AddVariantTypeChange.cs b/backend/FwLite/LcmCrdt/Changes/Entries/AddVariantTypeChange.cs new file mode 100644 index 0000000000..21fbe78d8b --- /dev/null +++ b/backend/FwLite/LcmCrdt/Changes/Entries/AddVariantTypeChange.cs @@ -0,0 +1,40 @@ +using System.Text.Json.Serialization; +using MiniLcm.SyncHelpers; +using SIL.Harmony.Changes; +using SIL.Harmony.Core; +using SIL.Harmony.Entities; + +namespace LcmCrdt.Changes.Entries; + +public class AddVariantTypeChange : EditChange, ISelfNamedType +{ + public AddVariantTypeChange(Guid entityId, VariantTypeRef variantTypeRef, BetweenPosition? between = null) + : base(entityId) + { + VariantTypeId = variantTypeRef.Id; + Order = variantTypeRef.Order; + Between = between; + } + + [JsonConstructor] + private AddVariantTypeChange(Guid entityId) : base(entityId) + { + } + + public Guid VariantTypeId { get; set; } + public double Order { get; set; } + public BetweenPosition? Between { get; set; } + + public override async ValueTask ApplyChange(Variant entity, IChangeContext context) + { + // Skip adding if this is a duplicate change + if (entity.Types.Any(t => t.Id == VariantTypeId)) return; + if (await context.IsObjectDeleted(VariantTypeId)) return; + // Order is resolved from Between against live state at apply time (the ctor/serialized Order is not + // authoritative), so concurrent adds converge. ReorderVariantTypeChange deliberately differs — it + // stores a fixed Order — because a reorder targets a specific destination, an add just needs a slot. + Order = OrderPicker.PickOrder(entity.Types, Between); + entity.Types.Add(new VariantTypeRef { Id = VariantTypeId, Order = Order }); + entity.Types.Sort(VariantTypeRef.CompareRefs); + } +} diff --git a/backend/FwLite/LcmCrdt/Changes/Entries/ComponentGraph.cs b/backend/FwLite/LcmCrdt/Changes/Entries/ComponentGraph.cs new file mode 100644 index 0000000000..368b3daa66 --- /dev/null +++ b/backend/FwLite/LcmCrdt/Changes/Entries/ComponentGraph.cs @@ -0,0 +1,49 @@ +using SIL.Harmony.Changes; +using SIL.Harmony.Core; + +namespace LcmCrdt.Changes.Entries; + +internal static class ComponentGraph +{ + /// + /// Mirrors LCM's acyclicity rule (LexEntryRef.ValidateAddObjectInternal → LexEntry.AllComponents): + /// walk everything depends on through BOTH link types + /// (variant → main, complex form → component); a proposed link is a cycle FLEx rejects + /// iff is reachable. AllComponents resolves a + /// sense-targeted component to its owning entry but does NOT recurse into it, so + /// sense-targeted links are compared against the target without being walked past. + /// + public static async ValueTask CanReach(Guid fromEntryId, Guid forbiddenEntryId, IChangeContext context) + { + HashSet visited = []; + Queue queue = new(); + if (fromEntryId == forbiddenEntryId) return true; + queue.Enqueue(fromEntryId); + while (queue.Count > 0) + { + var entryId = queue.Dequeue(); + if (!visited.Add(entryId)) continue; + await foreach (var o in context.GetObjectsReferencing(entryId)) + { + Guid targetEntryId; + bool targetIsSense; + switch (o) + { + case Variant v when v.DeletedAt is null && v.VariantEntryId == entryId: + targetEntryId = v.MainEntryId; + targetIsSense = v.MainSenseId is not null; + break; + case ComplexFormComponent cfc when cfc.DeletedAt is null && cfc.ComplexFormEntryId == entryId: + targetEntryId = cfc.ComponentEntryId; + targetIsSense = cfc.ComponentSenseId is not null; + break; + default: + continue; + } + if (targetEntryId == forbiddenEntryId) return true; + if (!targetIsSense) queue.Enqueue(targetEntryId); + } + } + return false; + } +} diff --git a/backend/FwLite/LcmCrdt/Changes/Entries/RemoveVariantTypeChange.cs b/backend/FwLite/LcmCrdt/Changes/Entries/RemoveVariantTypeChange.cs new file mode 100644 index 0000000000..27e3be012a --- /dev/null +++ b/backend/FwLite/LcmCrdt/Changes/Entries/RemoveVariantTypeChange.cs @@ -0,0 +1,15 @@ +using SIL.Harmony.Changes; +using SIL.Harmony.Core; +using SIL.Harmony.Entities; + +namespace LcmCrdt.Changes.Entries; + +public class RemoveVariantTypeChange(Guid entityId, Guid variantTypeId) : EditChange(entityId), ISelfNamedType +{ + public Guid VariantTypeId { get; } = variantTypeId; + public override ValueTask ApplyChange(Variant entity, IChangeContext context) + { + entity.Types.RemoveAll(t => t.Id == VariantTypeId); + return ValueTask.CompletedTask; + } +} diff --git a/backend/FwLite/LcmCrdt/Changes/Entries/ReorderVariantTypeChange.cs b/backend/FwLite/LcmCrdt/Changes/Entries/ReorderVariantTypeChange.cs new file mode 100644 index 0000000000..b595693915 --- /dev/null +++ b/backend/FwLite/LcmCrdt/Changes/Entries/ReorderVariantTypeChange.cs @@ -0,0 +1,22 @@ +using SIL.Harmony.Changes; +using SIL.Harmony.Core; +using SIL.Harmony.Entities; + +namespace LcmCrdt.Changes.Entries; + +public class ReorderVariantTypeChange(Guid variantTypeId, Guid entityId, double order) + : EditChange(entityId), ISelfNamedType +{ + public Guid VariantTypeId { get; } = variantTypeId; + public double Order { get; } = order; + + public override ValueTask ApplyChange(Variant entity, IChangeContext context) + { + var typeRef = entity.Types.FirstOrDefault(t => t.Id == VariantTypeId); + // Not found? The type may have been removed by another change, making the reorder a no-op + if (typeRef is null) return ValueTask.CompletedTask; + typeRef.Order = Order; + entity.Types.Sort(VariantTypeRef.CompareRefs); + return ValueTask.CompletedTask; + } +} diff --git a/backend/FwLite/LcmCrdt/CrdtMiniLcmApi.cs b/backend/FwLite/LcmCrdt/CrdtMiniLcmApi.cs index 72e3f85cc8..34c568114c 100644 --- a/backend/FwLite/LcmCrdt/CrdtMiniLcmApi.cs +++ b/backend/FwLite/LcmCrdt/CrdtMiniLcmApi.cs @@ -407,6 +407,145 @@ public async Task RemoveComplexFormType(Guid entryId, Guid complexFormTypeId) await AddChange(new RemoveComplexFormTypeChange(entryId, complexFormTypeId)); } + public async IAsyncEnumerable GetVariantTypes() + { + await using var repo = await repoFactory.CreateRepoAsync(); + await foreach (var variantType in repo.VariantTypes.AsAsyncEnumerable()) + { + yield return variantType; + } + } + + public async Task GetVariantType(Guid id) + { + await using var repo = await repoFactory.CreateRepoAsync(); + return await repo.VariantTypes.SingleOrDefaultAsync(v => v.Id == id); + } + + public async Task CreateVariantType(VariantType variantType) + { + await using var repo = await repoFactory.CreateRepoAsync(); + if (variantType.Id == default) variantType.Id = Guid.NewGuid(); + await AddChange(new CreateVariantType(variantType.Id, variantType.Name)); + return await repo.VariantTypes.SingleAsync(v => v.Id == variantType.Id); + } + + public async Task SubmitUpdateVariantType(Guid id, UpdateObjectInput update) + { + await AddChange(new JsonPatchChange(id, update.Patch)); + } + + public async Task UpdateVariantType(Guid id, UpdateObjectInput update) + { + await SubmitUpdateVariantType(id, update); + return await GetVariantType(id) ?? throw NotFoundException.ForType(id); + } + + public async Task UpdateVariantType(VariantType before, VariantType after, IMiniLcmApi? api = null) + { + await VariantTypeSync.Sync(before, after, api ?? this); + return await GetVariantType(after.Id) ?? throw NotFoundException.ForType(after.Id); + } + + public async Task DeleteVariantType(Guid id) + { + await AddChange(new DeleteChange(id)); + } + + public async Task SubmitCreateVariant(Variant variant) + { + await using var repo = await repoFactory.CreateRepoAsync(); + var existing = await repo.FindVariant(variant); + if (existing is not null) return; + // Always generate a new entity ID — the caller's ID is never used. + // This aligns with FwData (which ignores the ID entirely) and prevents + // Harmony duplicate-ID pitfalls during sync. + variant.Id = Guid.NewGuid(); + await AddChange(await CreateVariantChange(repo, variant)); + } + + private static async Task CreateVariantChange(MiniLcmRepository repo, Variant variant) + { + if (variant.MainSenseId is not null) + { + //a missing sense is tolerated (out-of-order sync; the change soft-deletes the link), + //but a sense that exists under a DIFFERENT entry is a bad request + var senseEntryId = await repo.Senses + .Where(s => s.Id == variant.MainSenseId.Value) + .Select(s => (Guid?)s.EntryId) + .FirstOrDefaultAsync(); + if (senseEntryId is not null && senseEntryId != variant.MainEntryId) + throw new InvalidOperationException($"Sense {variant.MainSenseId} does not belong to entry {variant.MainEntryId}, it belongs to {senseEntryId}"); + } + var typeIds = variant.Types.Select(t => t.Id).ToArray(); + var knownTypeIds = (await repo.VariantTypes.Where(t => typeIds.Contains(t.Id)).Select(t => t.Id).ToArrayAsync()).ToHashSet(); + // Drop type refs whose VariantType was concurrently deleted on the other replica (delete wins); + // this is the sync-reachable path (SubmitCreateVariant), and AddVariantChange.NewEntity applies + // the same tolerance at change-apply time. Throwing here would wedge the whole project sync. + if (variant.Types.Any(t => !knownTypeIds.Contains(t.Id))) + variant.Types = [.. variant.Types.Where(t => knownTypeIds.Contains(t.Id))]; + return new AddVariantChange(variant); + } + + public async Task CreateVariant(Variant variant) + { + await SubmitCreateVariant(variant); + await using var repo = await repoFactory.CreateRepoAsync(); + return await repo.FindVariant(variant) ?? throw NotFoundException.ForType(variant.VariantEntryId); + } + + public async Task UpdateVariant(Variant before, Variant after, IMiniLcmApi? api = null) + { + await VariantSync.Sync(before, after, api ?? this); + await using var repo = await repoFactory.CreateRepoAsync(); + return await repo.FindVariant(after) ?? throw NotFoundException.ForType(after.VariantEntryId); + } + + public async Task SubmitUpdateVariant(Variant variant, UpdateObjectInput update) + { + await using var repo = await repoFactory.CreateRepoAsync(); + // resolved by composite key; a link deleted on the other side stays deleted (delete wins) + var existing = await repo.FindVariant(variant); + if (existing is null) return; + await AddChange(new JsonPatchChange(existing.Id, update.Patch)); + } + + public async Task DeleteVariant(Variant variant) + { + await using var repo = await repoFactory.CreateRepoAsync(); + var existing = await repo.FindVariant(variant); + if (existing is null) return; + await AddChange(new DeleteChange(existing.Id)); + } + + public async Task AddVariantType(Variant variant, Guid variantTypeId, BetweenPosition? position = null) + { + await using var repo = await repoFactory.CreateRepoAsync(); + var existing = await repo.FindVariant(variant); + if (existing is null) return; + // type concurrently deleted on the other replica → drop the add (delete wins), matching Remove/MoveVariantType + var variantType = await repo.VariantTypes.SingleOrDefaultAsync(vt => vt.Id == variantTypeId); + if (variantType is null) return; + await AddChange(new AddVariantTypeChange(existing.Id, new VariantTypeRef { Id = variantType.Id }, position)); + } + + public async Task RemoveVariantType(Variant variant, Guid variantTypeId) + { + await using var repo = await repoFactory.CreateRepoAsync(); + var existing = await repo.FindVariant(variant); + if (existing is null) return; + await AddChange(new RemoveVariantTypeChange(existing.Id, variantTypeId)); + } + + public async Task MoveVariantType(Variant variant, Guid variantTypeId, BetweenPosition position) + { + await using var repo = await repoFactory.CreateRepoAsync(); + var existing = await repo.FindVariant(variant); + if (existing is null) return; + var order = OrderPicker.PickOrder(existing.Types, position); + await AddChange(new ReorderVariantTypeChange(variantTypeId, existing.Id, order)); + } + public async IAsyncEnumerable GetMorphTypes() { await using var repo = await repoFactory.CreateRepoAsync(); @@ -529,6 +668,18 @@ private IEnumerable CreateEntryChanges(Entry entry, if (!createdEntryIds.Contains(complexForm.ComplexFormEntryId)) continue; yield return new AddEntryComponentChange(complexForm); } + foreach (var variantOf in entry.VariantOf) + { + //only add variant links if the main entry was created already, otherwise it will be added when the main entry is created + if (!createdEntryIds.Contains(variantOf.MainEntryId)) continue; + yield return new AddVariantChange(variantOf); + } + foreach (var variant in entry.Variants) + { + //only add variant links if the variant entry was created already, otherwise it will be added when the variant entry is created + if (!createdEntryIds.Contains(variant.VariantEntryId)) continue; + yield return new AddVariantChange(variant); + } foreach (var addComplexFormTypeChange in entry.ComplexFormTypes.Select(c => new AddComplexFormTypeChange(entry.Id, c))) { yield return addComplexFormTypeChange; @@ -599,12 +750,18 @@ ..await entry.Senses.ToAsyncEnumerable() }) .ToArrayAsync(), ..await ToPublications(entry.PublishIn).ToArrayAsync(), - ..options.IncludeComplexFormsAndComponents ? + ..options.IncludeEntryReferences ? await ToComplexFormComponents(entry.Components).ToArrayAsync() : Enumerable.Empty(), - ..options.IncludeComplexFormsAndComponents ? + ..options.IncludeEntryReferences ? await ToComplexFormComponents(entry.ComplexForms).ToArrayAsync() : Enumerable.Empty(), + ..options.IncludeEntryReferences ? + await ToVariants(entry.VariantOf).ToArrayAsync() : + Enumerable.Empty(), + ..options.IncludeEntryReferences ? + await ToVariants(entry.Variants).ToArrayAsync() : + Enumerable.Empty(), ..await ToComplexFormTypes(entry.ComplexFormTypes).ToArrayAsync() ]); return await repo.GetEntry(entry.Id) ?? throw NotFoundException.ForType(entry.Id); @@ -652,6 +809,21 @@ async IAsyncEnumerable ToComplexFormComponents(IList ToVariants(IList variants) + { + foreach (var variant in variants) + { + if (variant.VariantEntryId == default) variant.VariantEntryId = entry.Id; + if (variant.MainEntryId == default) variant.MainEntryId = entry.Id; + if (variant.VariantEntryId == variant.MainEntryId) + { + throw new InvalidOperationException($"Variant {variant} has the same variant entry id as its main entry"); + } + if (variant.MaybeId is null) variant.Id = Guid.NewGuid(); + yield return await CreateVariantChange(repo, variant); + } + } + async IAsyncEnumerable ToComplexFormTypes(IList complexFormTypes) { foreach (var complexFormType in complexFormTypes) diff --git a/backend/FwLite/LcmCrdt/Data/EntryQueryHelpers.cs b/backend/FwLite/LcmCrdt/Data/EntryQueryHelpers.cs index b2af7868fa..f6d816f351 100644 --- a/backend/FwLite/LcmCrdt/Data/EntryQueryHelpers.cs +++ b/backend/FwLite/LcmCrdt/Data/EntryQueryHelpers.cs @@ -42,6 +42,9 @@ public static string Headword(this Entry e, WritingSystemId ws) public static Entry? QueryComponentEntry(ComplexFormComponent c) => throw new NotSupportedException(); public static Sense? QueryComponentSense(ComplexFormComponent c) => throw new NotSupportedException(); public static Entry? QueryComplexFormEntry(ComplexFormComponent c) => throw new NotSupportedException(); + public static Entry? QueryVariantEntry(Variant v) => throw new NotSupportedException(); + public static Entry? QueryMainEntry(Variant v) => throw new NotSupportedException(); + public static Sense? QueryMainSense(Variant v) => throw new NotSupportedException(); [Sql.Expression(""" (select WsId diff --git a/backend/FwLite/LcmCrdt/Data/MiniLcmRepository.cs b/backend/FwLite/LcmCrdt/Data/MiniLcmRepository.cs index afbfe4aa2c..f330f809e6 100644 --- a/backend/FwLite/LcmCrdt/Data/MiniLcmRepository.cs +++ b/backend/FwLite/LcmCrdt/Data/MiniLcmRepository.cs @@ -66,6 +66,8 @@ public void Dispose() public IQueryable Entries => dbContext.Entries.ToLinqToDB(); public IQueryable ComplexFormComponents => dbContext.ComplexFormComponents; public IQueryable ComplexFormTypes => dbContext.ComplexFormTypes; + public IQueryable Variants => dbContext.Variants; + public IQueryable VariantTypes => dbContext.VariantTypes; public IQueryable MorphTypes => dbContext.MorphTypes; public IQueryable Senses => dbContext.Senses; public IQueryable ExampleSentences => dbContext.ExampleSentences; @@ -123,6 +125,15 @@ public async Task FindComplexFormComponent(Guid objectId) throw NotFoundException.ForType(objectId); } + public async Task FindVariant(Variant variant) + { + return await AsyncExtensions.SingleOrDefaultAsync(Variants, + v => + v.VariantEntryId == variant.VariantEntryId + && v.MainEntryId == variant.MainEntryId + && v.MainSenseId == variant.MainSenseId); + } + public async Task CountEntries(string? query = null, FilterQueryOptions? options = null) { options ??= FilterQueryOptions.Default; @@ -143,16 +154,17 @@ public async IAsyncEnumerable GetEntries( .LoadWith(e => e.Senses).ThenLoad(s => s.PartOfSpeech) .LoadWith(e => e.ComplexForms) .LoadWith(e => e.Components) + .LoadWith(e => e.VariantOf) + .LoadWith(e => e.Variants) .AsQueryable(); queryable = options.ApplyPaging(queryable); - var complexFormComparer = cultureProvider.GetCompareInfo(await GetWritingSystem(default, WritingSystemType.Vernacular)) - .AsComplexFormComparer(); + var compareInfo = cultureProvider.GetCompareInfo(await GetWritingSystem(default, WritingSystemType.Vernacular)); var entries = AsyncExtensions.AsAsyncEnumerable(queryable); await EnsureConnectionOpen();//sometimes there can be a race condition where the collations arent setup await foreach (var entry in EfExtensions.SafeIterate(entries)) { - entry.Finalize(complexFormComparer); + entry.Finalize(compareInfo); yield return entry; } } @@ -250,13 +262,13 @@ private ValueTask> ApplySorting(IQueryable queryable, Q .LoadWith(e => e.Senses).ThenLoad(s => s.PartOfSpeech) .LoadWith(e => e.ComplexForms) .LoadWith(e => e.Components) + .LoadWith(e => e.VariantOf) + .LoadWith(e => e.Variants) .AsQueryable(), e => e.Id == id); if (entry is not null) { var sortWs = await GetWritingSystem(WritingSystemId.Default, WritingSystemType.Vernacular); - var complexFormComparer = cultureProvider.GetCompareInfo(sortWs) - .AsComplexFormComparer(); - entry.Finalize(complexFormComparer); + entry.Finalize(cultureProvider.GetCompareInfo(sortWs)); } return entry; diff --git a/backend/FwLite/LcmCrdt/LcmCrdtDbContext.cs b/backend/FwLite/LcmCrdt/LcmCrdtDbContext.cs index e1fcf6eac3..11bb6aba78 100644 --- a/backend/FwLite/LcmCrdt/LcmCrdtDbContext.cs +++ b/backend/FwLite/LcmCrdt/LcmCrdtDbContext.cs @@ -23,6 +23,8 @@ IOptions options public IQueryable Entries => Set().AsNoTracking(); public IQueryable ComplexFormComponents => Set().AsNoTracking(); public IQueryable ComplexFormTypes => Set().AsNoTracking(); + public IQueryable Variants => Set().AsNoTracking(); + public IQueryable VariantTypes => Set().AsNoTracking(); public IQueryable MorphTypes => Set().AsNoTracking(); public IQueryable Senses => Set().AsNoTracking(); public IQueryable ExampleSentences => Set().AsNoTracking(); diff --git a/backend/FwLite/LcmCrdt/LcmCrdtKernel.cs b/backend/FwLite/LcmCrdt/LcmCrdtKernel.cs index fafb129290..ae583e4077 100644 --- a/backend/FwLite/LcmCrdt/LcmCrdtKernel.cs +++ b/backend/FwLite/LcmCrdt/LcmCrdtKernel.cs @@ -149,6 +149,11 @@ public static void ConfigureDbOptions(IServiceProvider provider, DbContextOption .Entity().Association(c => EntryQueryHelpers.QueryComplexFormEntry(c), c => c.ComplexFormEntryId, e => e!.Id) .Entity().Property(c => c.ComponentHeadword).IsExpression(c => EntryQueryHelpers.QueryComponentEntry(c)!.QueryHeadwordWithTokens(EntryQueryHelpers.DefaultWritingSystem(WritingSystemType.Vernacular)), isColumn: true, alias: "componentHeadword") .Entity().Property(c => c.ComplexFormHeadword).IsExpression(c => EntryQueryHelpers.QueryComplexFormEntry(c)!.QueryHeadwordWithTokens(EntryQueryHelpers.DefaultWritingSystem(WritingSystemType.Vernacular)), isColumn: true, alias: "complexFormHeadword") + .Entity().Association(v => EntryQueryHelpers.QueryVariantEntry(v), v => v.VariantEntryId, e => e!.Id) + .Entity().Association(v => EntryQueryHelpers.QueryMainEntry(v), v => v.MainEntryId, e => e!.Id) + .Entity().Association(v => EntryQueryHelpers.QueryMainSense(v), v => v.MainSenseId, s => s!.Id) + .Entity().Property(v => v.VariantHeadword).IsExpression(v => EntryQueryHelpers.QueryVariantEntry(v)!.QueryHeadwordWithTokens(EntryQueryHelpers.DefaultWritingSystem(WritingSystemType.Vernacular)), isColumn: true, alias: "variantHeadword") + .Entity().Property(v => v.MainHeadword).IsExpression(v => EntryQueryHelpers.QueryMainEntry(v)!.QueryHeadwordWithTokens(EntryQueryHelpers.DefaultWritingSystem(WritingSystemType.Vernacular)), isColumn: true, alias: "mainHeadword") .Entity().Member(r => r.GetPlainText()).IsExpression(r => Json.GetPlainText(r)) .Entity().Member(g => g.ToString()).IsExpression(g => Json.ToString(g)) .Build(); @@ -203,6 +208,16 @@ public static void ConfigureCrdt(CrdtConfig config) .HasPrincipalKey(entry => entry.Id) .HasForeignKey(c => c.ComponentEntryId) .OnDelete(DeleteBehavior.Cascade); + builder.HasMany(e => e.VariantOf) + .WithOne() + .HasPrincipalKey(entry => entry.Id) + .HasForeignKey(v => v.VariantEntryId) + .OnDelete(DeleteBehavior.Cascade); + builder.HasMany(e => e.Variants) + .WithOne() + .HasPrincipalKey(entry => entry.Id) + .HasForeignKey(v => v.MainEntryId) + .OnDelete(DeleteBehavior.Cascade); builder .Property(e => e.ComplexFormTypes) .HasColumnType("jsonb") @@ -222,6 +237,10 @@ public static void ConfigureCrdt(CrdtConfig config) .WithOne() .HasForeignKey(c => c.ComponentSenseId) .OnDelete(DeleteBehavior.Cascade); + builder.HasMany() + .WithOne() + .HasForeignKey(v => v.MainSenseId) + .OnDelete(DeleteBehavior.Cascade); builder.HasOne() .WithMany(e => e.Senses) .HasForeignKey(sense => sense.EntryId); @@ -324,6 +343,32 @@ public static void ConfigureCrdt(CrdtConfig config) component.ComplexFormEntryId, component.ComponentEntryId }).IsUnique().HasFilter($"{componentSenseId} IS NULL"); + }) + .Add() + .Add(builder => + { + const string mainSenseId = "MainSenseId"; + builder.ToTable("Variants"); + builder.Property(v => v.MainSenseId).HasColumnName(mainSenseId); + builder + .Property(v => v.Types) + .HasColumnType("jsonb") + .HasConversion(list => JsonSerializer.Serialize(list, (JsonSerializerOptions?)null), + json => JsonSerializer.Deserialize>(json, + (JsonSerializerOptions?)null) ?? new()); + //these indexes are used to ensure that we don't create duplicate variant links + //we need the filter otherwise 2 links which are the same and have a null sense id can be created because 2 rows with the same null are not considered duplicates + builder.HasIndex(variant => new + { + variant.VariantEntryId, + variant.MainEntryId, + variant.MainSenseId + }).IsUnique().HasFilter($"{mainSenseId} IS NOT NULL"); + builder.HasIndex(variant => new + { + variant.VariantEntryId, + variant.MainEntryId + }).IsUnique().HasFilter($"{mainSenseId} IS NULL"); }); config.AddRemoteResourceEntity(); @@ -334,6 +379,8 @@ public static void ConfigureCrdt(CrdtConfig config) .Add>() .Add>() .Add>() + .Add>() + .Add>() .Add>() .Add>() .Add>() @@ -343,6 +390,8 @@ public static void ConfigureCrdt(CrdtConfig config) .Add>() .Add>() .Add>() + .Add>() + .Add>() .Add>() .Add() .Add() @@ -379,6 +428,11 @@ public static void ConfigureCrdt(CrdtConfig config) .Add() .Add() .Add() + .Add() + .Add() + .Add() + .Add() + .Add() .Add() .Add() .Add>() diff --git a/backend/FwLite/LcmCrdt/Migrations/20260703134525_AddVariants.Designer.cs b/backend/FwLite/LcmCrdt/Migrations/20260703134525_AddVariants.Designer.cs new file mode 100644 index 0000000000..81306c0d27 --- /dev/null +++ b/backend/FwLite/LcmCrdt/Migrations/20260703134525_AddVariants.Designer.cs @@ -0,0 +1,972 @@ +// +using System; +using System.Collections.Generic; +using LcmCrdt; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace LcmCrdt.Migrations +{ + [DbContext(typeof(LcmCrdtDbContext))] + [Migration("20260703134525_AddVariants")] + partial class AddVariants + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "10.0.8"); + + modelBuilder.Entity("LcmCrdt.FullTextSearch.EntrySearchRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CitationForm") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Definition") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Gloss") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Headword") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("LexemeForm") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("EntrySearchRecord", null, t => + { + t.ExcludeFromMigrations(); + }); + }); + + modelBuilder.Entity("LcmCrdt.ProjectData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ClientId") + .HasColumnType("TEXT"); + + b.Property("Code") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("FwProjectId") + .HasColumnType("TEXT"); + + b.Property("LastUserId") + .HasColumnType("TEXT"); + + b.Property("LastUserName") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("OriginDomain") + .HasColumnType("TEXT"); + + b.Property("Role") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue("Editor"); + + b.HasKey("Id"); + + b.ToTable("ProjectData"); + }); + + modelBuilder.Entity("MiniLcm.Models.ComplexFormComponent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ComplexFormEntryId") + .HasColumnType("TEXT"); + + b.Property("ComplexFormHeadword") + .HasColumnType("TEXT"); + + b.Property("ComponentEntryId") + .HasColumnType("TEXT"); + + b.Property("ComponentHeadword") + .HasColumnType("TEXT"); + + b.Property("ComponentSenseId") + .HasColumnType("TEXT") + .HasColumnName("ComponentSenseId"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("REAL"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ComponentEntryId"); + + b.HasIndex("ComponentSenseId"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.HasIndex("ComplexFormEntryId", "ComponentEntryId") + .IsUnique() + .HasFilter("ComponentSenseId IS NULL"); + + b.HasIndex("ComplexFormEntryId", "ComponentEntryId", "ComponentSenseId") + .IsUnique() + .HasFilter("ComponentSenseId IS NOT NULL"); + + b.ToTable("ComplexFormComponents", (string)null); + }); + + modelBuilder.Entity("MiniLcm.Models.ComplexFormType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("ComplexFormType"); + }); + + modelBuilder.Entity("MiniLcm.Models.CustomView", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Analysis") + .HasColumnType("jsonb"); + + b.Property("Base") + .HasColumnType("INTEGER"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("EntryFields") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("ExampleFields") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SenseFields") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.Property("Vernacular") + .HasColumnType("jsonb"); + + b.HasKey("Id"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("CustomView"); + }); + + modelBuilder.Entity("MiniLcm.Models.Entry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CitationForm") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("ComplexFormTypes") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("HomographNumber") + .HasColumnType("INTEGER"); + + b.Property("LexemeForm") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("LiteralMeaning") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("MorphType") + .HasColumnType("INTEGER"); + + b.Property("Note") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("PublishIn") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("Entry"); + }); + + modelBuilder.Entity("MiniLcm.Models.ExampleSentence", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("REAL"); + + b.Property("Reference") + .HasColumnType("jsonb"); + + b.Property("SenseId") + .HasColumnType("TEXT"); + + b.Property("Sentence") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.Property("Translations") + .IsRequired() + .HasColumnType("jsonb"); + + b.HasKey("Id"); + + b.HasIndex("SenseId"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("ExampleSentence"); + }); + + modelBuilder.Entity("MiniLcm.Models.MorphType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Abbreviation") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Kind") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Postfix") + .HasColumnType("TEXT"); + + b.Property("Prefix") + .HasColumnType("TEXT"); + + b.Property("SecondaryOrder") + .HasColumnType("INTEGER"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Kind") + .IsUnique(); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("MorphType"); + }); + + modelBuilder.Entity("MiniLcm.Models.PartOfSpeech", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Predefined") + .HasColumnType("INTEGER"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("PartOfSpeech"); + }); + + modelBuilder.Entity("MiniLcm.Models.Publication", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("IsMain") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("Publication"); + }); + + modelBuilder.Entity("MiniLcm.Models.SemanticDomain", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Code") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Predefined") + .HasColumnType("INTEGER"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("SemanticDomain"); + }); + + modelBuilder.Entity("MiniLcm.Models.Sense", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Definition") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("EntryId") + .HasColumnType("TEXT"); + + b.Property("Gloss") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Order") + .HasColumnType("REAL"); + + b.Property("PartOfSpeechId") + .HasColumnType("TEXT"); + + b.Property("Pictures") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("jsonb") + .HasDefaultValueSql("'[]'"); + + b.Property("SemanticDomains") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("EntryId"); + + b.HasIndex("PartOfSpeechId"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("Sense"); + }); + + modelBuilder.Entity("MiniLcm.Models.Variant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Comment") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("HideMinorEntry") + .HasColumnType("INTEGER"); + + b.Property("MainEntryId") + .HasColumnType("TEXT"); + + b.Property("MainHeadword") + .HasColumnType("TEXT"); + + b.Property("MainSenseId") + .HasColumnType("TEXT") + .HasColumnName("MainSenseId"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.Property("Types") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("VariantEntryId") + .HasColumnType("TEXT"); + + b.Property("VariantHeadword") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("MainEntryId"); + + b.HasIndex("MainSenseId"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.HasIndex("VariantEntryId", "MainEntryId") + .IsUnique() + .HasFilter("MainSenseId IS NULL"); + + b.HasIndex("VariantEntryId", "MainEntryId", "MainSenseId") + .IsUnique() + .HasFilter("MainSenseId IS NOT NULL"); + + b.ToTable("Variants", (string)null); + }); + + modelBuilder.Entity("MiniLcm.Models.VariantType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("VariantType"); + }); + + modelBuilder.Entity("MiniLcm.Models.WritingSystem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Abbreviation") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("Exemplars") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("Font") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("REAL"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("WsId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.HasIndex("WsId", "Type") + .IsUnique(); + + b.ToTable("WritingSystem"); + }); + + modelBuilder.Entity("SIL.Harmony.Commit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ClientId") + .HasColumnType("TEXT"); + + b.Property("Hash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Metadata") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("ParentHash") + .IsRequired() + .HasColumnType("TEXT"); + + b.ComplexProperty(typeof(Dictionary), "HybridDateTime", "SIL.Harmony.Commit.HybridDateTime#HybridDateTime", b1 => + { + b1.IsRequired(); + + b1.Property("Counter") + .HasColumnType("INTEGER") + .HasColumnName("Counter"); + + b1.Property("DateTime") + .HasColumnType("TEXT") + .HasColumnName("DateTime"); + }); + + b.HasKey("Id"); + + b.ToTable("Commits", (string)null); + + b.HasAnnotation("CustomIndex:CompositeIndexes", "[{\"paths\":[\"HybridDateTime.DateTime\",\"HybridDateTime.Counter\",\"Id\"],\"unique\":false,\"name\":\"IX_Commits_DateTime_Counter_Id\"}]"); + }); + + modelBuilder.Entity("SIL.Harmony.Core.ChangeEntity", b => + { + b.Property("CommitId") + .HasColumnType("TEXT"); + + b.Property("Index") + .HasColumnType("INTEGER"); + + b.Property("Change") + .HasColumnType("jsonb"); + + b.Property("EntityId") + .HasColumnType("TEXT"); + + b.HasKey("CommitId", "Index"); + + b.ToTable("ChangeEntities", (string)null); + }); + + modelBuilder.Entity("SIL.Harmony.Db.ObjectSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CommitId") + .HasColumnType("TEXT"); + + b.Property("Entity") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("EntityId") + .HasColumnType("TEXT"); + + b.Property("EntityIsDeleted") + .HasColumnType("INTEGER"); + + b.Property("IsRoot") + .HasColumnType("INTEGER"); + + b.PrimitiveCollection("References") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.HasIndex("CommitId", "EntityId") + .IsUnique(); + + b.ToTable("Snapshots", (string)null); + }); + + modelBuilder.Entity("SIL.Harmony.Resource.LocalResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("LocalPath") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("LocalResource"); + }); + + modelBuilder.Entity("SIL.Harmony.Resource.RemoteResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("RemoteId") + .HasColumnType("TEXT"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("RemoteResource"); + }); + + modelBuilder.Entity("MiniLcm.Models.ComplexFormComponent", b => + { + b.HasOne("MiniLcm.Models.Entry", null) + .WithMany("Components") + .HasForeignKey("ComplexFormEntryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MiniLcm.Models.Entry", null) + .WithMany("ComplexForms") + .HasForeignKey("ComponentEntryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MiniLcm.Models.Sense", null) + .WithMany() + .HasForeignKey("ComponentSenseId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.ComplexFormComponent", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("MiniLcm.Models.ComplexFormType", b => + { + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.ComplexFormType", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("MiniLcm.Models.CustomView", b => + { + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.CustomView", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("MiniLcm.Models.Entry", b => + { + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.Entry", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("MiniLcm.Models.ExampleSentence", b => + { + b.HasOne("MiniLcm.Models.Sense", null) + .WithMany("ExampleSentences") + .HasForeignKey("SenseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.ExampleSentence", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("MiniLcm.Models.MorphType", b => + { + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.MorphType", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("MiniLcm.Models.PartOfSpeech", b => + { + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.PartOfSpeech", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("MiniLcm.Models.Publication", b => + { + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.Publication", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("MiniLcm.Models.SemanticDomain", b => + { + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.SemanticDomain", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("MiniLcm.Models.Sense", b => + { + b.HasOne("MiniLcm.Models.Entry", null) + .WithMany("Senses") + .HasForeignKey("EntryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MiniLcm.Models.PartOfSpeech", "PartOfSpeech") + .WithMany() + .HasForeignKey("PartOfSpeechId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.Sense", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("PartOfSpeech"); + }); + + modelBuilder.Entity("MiniLcm.Models.Variant", b => + { + b.HasOne("MiniLcm.Models.Entry", null) + .WithMany("Variants") + .HasForeignKey("MainEntryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MiniLcm.Models.Sense", null) + .WithMany() + .HasForeignKey("MainSenseId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.Variant", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("MiniLcm.Models.Entry", null) + .WithMany("VariantOf") + .HasForeignKey("VariantEntryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("MiniLcm.Models.VariantType", b => + { + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.VariantType", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("MiniLcm.Models.WritingSystem", b => + { + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.WritingSystem", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("SIL.Harmony.Core.ChangeEntity", b => + { + b.HasOne("SIL.Harmony.Commit", null) + .WithMany("ChangeEntities") + .HasForeignKey("CommitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("SIL.Harmony.Db.ObjectSnapshot", b => + { + b.HasOne("SIL.Harmony.Commit", "Commit") + .WithMany("Snapshots") + .HasForeignKey("CommitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Commit"); + }); + + modelBuilder.Entity("SIL.Harmony.Resource.RemoteResource", b => + { + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("SIL.Harmony.Resource.RemoteResource", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + + modelBuilder.Entity("MiniLcm.Models.Entry", b => + { + b.Navigation("ComplexForms"); + + b.Navigation("Components"); + + b.Navigation("Senses"); + + b.Navigation("VariantOf"); + + b.Navigation("Variants"); + }); + + modelBuilder.Entity("MiniLcm.Models.Sense", b => + { + b.Navigation("ExampleSentences"); + }); + + modelBuilder.Entity("SIL.Harmony.Commit", b => + { + b.Navigation("ChangeEntities"); + + b.Navigation("Snapshots"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/backend/FwLite/LcmCrdt/Migrations/20260703134525_AddVariants.cs b/backend/FwLite/LcmCrdt/Migrations/20260703134525_AddVariants.cs new file mode 100644 index 0000000000..2e0dc6ac85 --- /dev/null +++ b/backend/FwLite/LcmCrdt/Migrations/20260703134525_AddVariants.cs @@ -0,0 +1,126 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LcmCrdt.Migrations +{ + /// + public partial class AddVariants : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Variants", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + DeletedAt = table.Column(type: "TEXT", nullable: true), + VariantEntryId = table.Column(type: "TEXT", nullable: false), + VariantHeadword = table.Column(type: "TEXT", nullable: true), + MainEntryId = table.Column(type: "TEXT", nullable: false), + MainSenseId = table.Column(type: "TEXT", nullable: true), + MainHeadword = table.Column(type: "TEXT", nullable: true), + Types = table.Column(type: "jsonb", nullable: false), + HideMinorEntry = table.Column(type: "INTEGER", nullable: false), + Comment = table.Column(type: "jsonb", nullable: false), + SnapshotId = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Variants", x => x.Id); + table.ForeignKey( + name: "FK_Variants_Entry_MainEntryId", + column: x => x.MainEntryId, + principalTable: "Entry", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Variants_Entry_VariantEntryId", + column: x => x.VariantEntryId, + principalTable: "Entry", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Variants_Sense_MainSenseId", + column: x => x.MainSenseId, + principalTable: "Sense", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Variants_Snapshots_SnapshotId", + column: x => x.SnapshotId, + principalTable: "Snapshots", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }); + + migrationBuilder.CreateTable( + name: "VariantType", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "jsonb", nullable: false), + DeletedAt = table.Column(type: "TEXT", nullable: true), + SnapshotId = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_VariantType", x => x.Id); + table.ForeignKey( + name: "FK_VariantType_Snapshots_SnapshotId", + column: x => x.SnapshotId, + principalTable: "Snapshots", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }); + + migrationBuilder.CreateIndex( + name: "IX_Variants_MainEntryId", + table: "Variants", + column: "MainEntryId"); + + migrationBuilder.CreateIndex( + name: "IX_Variants_MainSenseId", + table: "Variants", + column: "MainSenseId"); + + migrationBuilder.CreateIndex( + name: "IX_Variants_SnapshotId", + table: "Variants", + column: "SnapshotId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Variants_VariantEntryId_MainEntryId", + table: "Variants", + columns: new[] { "VariantEntryId", "MainEntryId" }, + unique: true, + filter: "MainSenseId IS NULL"); + + migrationBuilder.CreateIndex( + name: "IX_Variants_VariantEntryId_MainEntryId_MainSenseId", + table: "Variants", + columns: new[] { "VariantEntryId", "MainEntryId", "MainSenseId" }, + unique: true, + filter: "MainSenseId IS NOT NULL"); + + migrationBuilder.CreateIndex( + name: "IX_VariantType_SnapshotId", + table: "VariantType", + column: "SnapshotId", + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Variants"); + + migrationBuilder.DropTable( + name: "VariantType"); + } + } +} diff --git a/backend/FwLite/LcmCrdt/Migrations/LcmCrdtDbContextModelSnapshot.cs b/backend/FwLite/LcmCrdt/Migrations/LcmCrdtDbContextModelSnapshot.cs index ae72a45791..c29db93c62 100644 --- a/backend/FwLite/LcmCrdt/Migrations/LcmCrdtDbContextModelSnapshot.cs +++ b/backend/FwLite/LcmCrdt/Migrations/LcmCrdtDbContextModelSnapshot.cs @@ -594,6 +594,89 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("UserComment"); }); + modelBuilder.Entity("MiniLcm.Models.Variant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Comment") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("HideMinorEntry") + .HasColumnType("INTEGER"); + + b.Property("MainEntryId") + .HasColumnType("TEXT"); + + b.Property("MainHeadword") + .HasColumnType("TEXT"); + + b.Property("MainSenseId") + .HasColumnType("TEXT") + .HasColumnName("MainSenseId"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.Property("Types") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("VariantEntryId") + .HasColumnType("TEXT"); + + b.Property("VariantHeadword") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("MainEntryId"); + + b.HasIndex("MainSenseId"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.HasIndex("VariantEntryId", "MainEntryId") + .IsUnique() + .HasFilter("MainSenseId IS NULL"); + + b.HasIndex("VariantEntryId", "MainEntryId", "MainSenseId") + .IsUnique() + .HasFilter("MainSenseId IS NOT NULL"); + + b.ToTable("Variants", (string)null); + }); + + modelBuilder.Entity("MiniLcm.Models.VariantType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DeletedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("jsonb"); + + b.Property("SnapshotId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("SnapshotId") + .IsUnique(); + + b.ToTable("VariantType"); + }); + modelBuilder.Entity("MiniLcm.Models.WritingSystem", b => { b.Property("Id") @@ -919,6 +1002,39 @@ protected override void BuildModel(ModelBuilder modelBuilder) .OnDelete(DeleteBehavior.SetNull); }); + modelBuilder.Entity("MiniLcm.Models.Variant", b => + { + b.HasOne("MiniLcm.Models.Entry", null) + .WithMany("Variants") + .HasForeignKey("MainEntryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MiniLcm.Models.Sense", null) + .WithMany() + .HasForeignKey("MainSenseId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.Variant", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("MiniLcm.Models.Entry", null) + .WithMany("VariantOf") + .HasForeignKey("VariantEntryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("MiniLcm.Models.VariantType", b => + { + b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) + .WithOne() + .HasForeignKey("MiniLcm.Models.VariantType", "SnapshotId") + .OnDelete(DeleteBehavior.SetNull); + }); + modelBuilder.Entity("MiniLcm.Models.WritingSystem", b => { b.HasOne("SIL.Harmony.Db.ObjectSnapshot", null) @@ -967,6 +1083,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("Components"); b.Navigation("Senses"); + + b.Navigation("VariantOf"); + + b.Navigation("Variants"); }); modelBuilder.Entity("MiniLcm.Models.Sense", b => diff --git a/backend/FwLite/LcmCrdt/QueryHelpers.cs b/backend/FwLite/LcmCrdt/QueryHelpers.cs index 37e151c271..3bac06af0e 100644 --- a/backend/FwLite/LcmCrdt/QueryHelpers.cs +++ b/backend/FwLite/LcmCrdt/QueryHelpers.cs @@ -4,12 +4,13 @@ namespace LcmCrdt; public static class QueryHelpers { - public static void Finalize(this Entry entry, - IComparer complexFormComparer) + public static void Finalize(this Entry entry, CompareInfo compareInfo) { entry.Senses.ApplySortOrder(); entry.Components.ApplySortOrder(); - entry.ComplexForms.Sort(complexFormComparer); + entry.ComplexForms.Sort(compareInfo.AsComplexFormComparer()); + entry.VariantOf.Sort(Variant.VariantOfOrder); + entry.Variants.Sort(Variant.VariantsOrder); foreach (var sense in entry.Senses) { sense.Finalize(); @@ -55,4 +56,5 @@ public static IComparer AsComplexFormComparer(this Compare return a.ComplexFormEntryId.CompareTo(b.ComplexFormEntryId); }); } + } diff --git a/backend/FwLite/LcmCrdt/Templates/blank-project-template.json b/backend/FwLite/LcmCrdt/Templates/blank-project-template.json index 1958dfe164..6b08a17f7f 100644 --- a/backend/FwLite/LcmCrdt/Templates/blank-project-template.json +++ b/backend/FwLite/LcmCrdt/Templates/blank-project-template.json @@ -16739,8 +16739,8 @@ "WritingSystems": { "Analysis": [ { - "Id": "e15928c1-48ce-439c-bbf7-f23457718d72", - "MaybeId": "e15928c1-48ce-439c-bbf7-f23457718d72", + "Id": "53f7afa3-13c7-4c07-a9e4-038912170095", + "MaybeId": "53f7afa3-13c7-4c07-a9e4-038912170095", "WsId": "en", "IsAudio": false, "Name": "en", @@ -16780,5 +16780,56 @@ } ], "Vernacular": [] - } + }, + "VariantTypes": [ + { + "Id": "3942addb-99fd-43e9-ab7d-99025ceb0d4e", + "Name": { + "en": "Unspecified Variant" + }, + "DeletedAt": null + }, + { + "Id": "024b62c9-93b3-41a0-ab19-587a0030219a", + "Name": { + "en": "Dialectal Variant" + }, + "DeletedAt": null + }, + { + "Id": "4343b1ef-b54f-4fa4-9998-271319a6d74c", + "Name": { + "en": "Free Variant" + }, + "DeletedAt": null + }, + { + "Id": "01d4fbc1-3b0c-4f52-9163-7ab0d4f4711c", + "Name": { + "en": "Irregularly Inflected Form" + }, + "DeletedAt": null + }, + { + "Id": "a32f1d1c-4832-46a2-9732-c2276d6547e8", + "Name": { + "en": "Plural" + }, + "DeletedAt": null + }, + { + "Id": "837ebe72-8c1d-4864-95d9-fa313c499d78", + "Name": { + "en": "Past" + }, + "DeletedAt": null + }, + { + "Id": "0c4663b3-4d9a-47af-b9a1-c8565d8112ed", + "Name": { + "en": "Spelling Variant" + }, + "DeletedAt": null + } + ] } \ No newline at end of file diff --git a/backend/FwLite/MiniLcm.Tests/AutoFakerHelpers/EntryFakerHelper.cs b/backend/FwLite/MiniLcm.Tests/AutoFakerHelpers/EntryFakerHelper.cs index 71a884d72e..5e60026fee 100644 --- a/backend/FwLite/MiniLcm.Tests/AutoFakerHelpers/EntryFakerHelper.cs +++ b/backend/FwLite/MiniLcm.Tests/AutoFakerHelpers/EntryFakerHelper.cs @@ -10,11 +10,12 @@ public static async Task EntryReadyForCreation(this AutoFaker autoFaker, bool createComplexForms = true, bool createComplexFormTypes = true, bool createComponents = true, - bool createPublications = true) + bool createPublications = true, + bool createVariants = true) { var entry = autoFaker.Generate(); if (entryId.HasValue) entry.Id = entryId.Value; - await PrepareToCreateEntry(api, entry, createComplexForms, createComplexFormTypes, createComponents, createPublications); + await PrepareToCreateEntry(api, entry, createComplexForms, createComplexFormTypes, createComponents, createPublications, createVariants); return entry; } @@ -27,12 +28,23 @@ public static async Task PrepareToCreateEntry( bool createComplexForms = true, bool createComplexFormTypes = true, bool createComponents = true, - bool createPublications = true) + bool createPublications = true, + bool createVariants = true) { if (createComponents) await CreateComplexFormComponentEntry(entry, true, entry.Components, api); if (createComplexForms) await CreateComplexFormComponentEntry(entry, false, entry.ComplexForms, api); if (createComplexFormTypes) await CreateComplexFormTypes(entry.ComplexFormTypes, api); if (createPublications) await CreatePublications(entry.PublishIn, api); + if (createVariants) + { + await CreateVariantLinkEntry(entry, isVariantOf: true, entry.VariantOf, api); + await CreateVariantLinkEntry(entry, isVariantOf: false, entry.Variants, api); + } + else + { + entry.VariantOf.Clear(); + entry.Variants.Clear(); + } foreach (var sense in entry.Senses) { @@ -130,6 +142,52 @@ private static async Task CreateComplexFormComponentEntry(Entry entry, } } + private static async Task CreateVariantLinkEntry(Entry entry, + bool isVariantOf, + IList variants, + IMiniLcmApi api) + { + int i = 1; + foreach (var variant in variants) + { + //generated entries won't have the expected ids, so fix them up here + if (isVariantOf) + { + variant.VariantEntryId = entry.Id; + } + else + { + variant.MainEntryId = entry.Id; + } + //generated sense ids don't reference real senses; targeting the entry is enough here + variant.MainSenseId = null; + + foreach (var variantType in variant.Types) + { + if (await api.GetVariantType(variantType.Id) is null) + await api.CreateVariantType(new VariantType { Id = variantType.Id, Name = new() { { "en", $"generated type {variantType.Id}" } } }); + } + + var name = $"test {(isVariantOf ? "main" : "variant")} entry {i}"; + var createdEntry = await api.CreateEntry(new() + { + Id = isVariantOf ? variant.MainEntryId : variant.VariantEntryId, + LexemeForm = { { "en", name } }, + }); + if (isVariantOf) + { + variant.MainHeadword = createdEntry.Headword(); + variant.VariantHeadword = entry.Headword(); + } + else + { + variant.VariantHeadword = createdEntry.Headword(); + variant.MainHeadword = entry.Headword(); + } + i++; + } + } + private static async Task CreateComplexFormTypes(IList complexFormTypes, IMiniLcmApi api) { foreach (var complexFormType in complexFormTypes) diff --git a/backend/FwLite/MiniLcm.Tests/ComplexFormComponentTestsBase.cs b/backend/FwLite/MiniLcm.Tests/ComplexFormComponentTestsBase.cs index 1357a91aaa..bff25f9067 100644 --- a/backend/FwLite/MiniLcm.Tests/ComplexFormComponentTestsBase.cs +++ b/backend/FwLite/MiniLcm.Tests/ComplexFormComponentTestsBase.cs @@ -277,6 +277,22 @@ public async Task CreateComplexFormComponent_ThrowsWhenMakingA3LayerReferenceCyc await act.Should().ThrowAsync(); } + [Fact] + public async Task CreateComplexFormComponent_AllowsClosingALoopThroughASenseTargetedComponent() + { + // LCM's AllComponents resolves a sense-targeted component to its owning entry but does + // NOT recurse into it, so this graph is legal in FLEx and must stay legal here + var entry3 = await Api.CreateEntry(new() + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", "entry3" } } + }); + await Api.CreateComplexFormComponent(ComplexFormComponent.FromEntries(_complexFormEntry, _componentEntry, _componentSenseId1)); + await Api.CreateComplexFormComponent(ComplexFormComponent.FromEntries(_componentEntry, entry3)); + var act = async () => await Api.CreateComplexFormComponent(ComplexFormComponent.FromEntries(entry3, _complexFormEntry)); + await act.Should().NotThrowAsync(); + } + [Fact] public async Task CreateComplexFormComponent_WorksWhenAComponentWasDeletedWhichWouldCauseACycle() { diff --git a/backend/FwLite/MiniLcm.Tests/FluentAssertGlobalConfig.cs b/backend/FwLite/MiniLcm.Tests/FluentAssertGlobalConfig.cs index c8b247b304..884f18805c 100644 --- a/backend/FwLite/MiniLcm.Tests/FluentAssertGlobalConfig.cs +++ b/backend/FwLite/MiniLcm.Tests/FluentAssertGlobalConfig.cs @@ -14,8 +14,9 @@ public static void Initialize() //however that will result in very poor error messages, so we override it .ComparingByMembers() .ComparingByMembers() - .Excluding(m => (m.DeclaringType == typeof(ComplexFormComponent) || m.DeclaringType == typeof(WritingSystem)) - && (m.Name == nameof(ComplexFormComponent.Id) || m.Name == nameof(ComplexFormComponent.MaybeId))) + //Id/MaybeId are sync-irrelevant on every type that carries the unset-id pattern + .Excluding(m => (m.DeclaringType == typeof(ComplexFormComponent) || m.DeclaringType == typeof(Variant) || m.DeclaringType == typeof(WritingSystem)) + && (m.Name == "Id" || m.Name == "MaybeId")) //Shadow query-rewrite targets — domain state lives on the underlying collection. .Excluding(m => (m.DeclaringType == typeof(Entry) && m.Name == nameof(Entry.PublishInRows)) || (m.DeclaringType == typeof(Sense) && m.Name == nameof(Sense.SemanticDomainRows))) diff --git a/backend/FwLite/MiniLcm.Tests/Helpers/NfcTestData.cs b/backend/FwLite/MiniLcm.Tests/Helpers/NfcTestData.cs index bd727c2293..7f7b0ed727 100644 --- a/backend/FwLite/MiniLcm.Tests/Helpers/NfcTestData.cs +++ b/backend/FwLite/MiniLcm.Tests/Helpers/NfcTestData.cs @@ -224,4 +224,27 @@ public static Entry CreateNfcEntryWithComponents() ComplexForms = [CreateNfcComplexFormComponent()] }; } + + public static VariantType CreateNfcVariantType() + { + return new() + { + Id = Guid.NewGuid(), + Name = CreateNfcMultiString() + }; + } + + public static Variant CreateNfcVariant() + { + return new() + { + Id = Guid.NewGuid(), + VariantEntryId = Guid.NewGuid(), + VariantHeadword = Nfc, + MainEntryId = Guid.NewGuid(), + MainHeadword = Nfc, + Comment = CreateNfcRichMultiString(), + Types = [new VariantTypeRef { Id = Guid.NewGuid() }] + }; + } } diff --git a/backend/FwLite/MiniLcm.Tests/Validators/EntryValidatorTests.cs b/backend/FwLite/MiniLcm.Tests/Validators/EntryValidatorTests.cs index edbde97653..7d80083480 100644 --- a/backend/FwLite/MiniLcm.Tests/Validators/EntryValidatorTests.cs +++ b/backend/FwLite/MiniLcm.Tests/Validators/EntryValidatorTests.cs @@ -135,6 +135,38 @@ public void Fails_WhenComponentsContainEmptyGuid() _validator.TestValidate(entry).ShouldHaveValidationErrorFor("Components[0]"); } + [Fact] + public void Fails_WhenVariantOfContainsEmptyMainEntryGuid() + { + var entryId = Guid.NewGuid(); + var entry = new Entry() { Id = entryId, LexemeForm = new MultiString(){{"en", "lexeme"}}, VariantOf = [new Variant(){ VariantEntryId = entryId, MainEntryId = Guid.Empty }] }; + _validator.TestValidate(entry).ShouldHaveValidationErrorFor("VariantOf[0]"); + } + + [Fact] + public void Succeeds_WhenVariantOfContainsEmptyVariantEntryGuid() + { + var entryId = Guid.NewGuid(); + var entry = new Entry() { Id = entryId, LexemeForm = new MultiString(){{"en", "lexeme"}}, VariantOf = [new Variant(){ VariantEntryId = Guid.Empty, MainEntryId = Guid.NewGuid() }] }; + _validator.TestValidate(entry).ShouldNotHaveAnyValidationErrors(); + } + + [Fact] + public void Fails_WhenVariantsContainEmptyVariantEntryGuid() + { + var entryId = Guid.NewGuid(); + var entry = new Entry() { Id = entryId, LexemeForm = new MultiString(){{"en", "lexeme"}}, Variants = [new Variant(){ VariantEntryId = Guid.Empty, MainEntryId = entryId }] }; + _validator.TestValidate(entry).ShouldHaveValidationErrorFor("Variants[0]"); + } + + [Fact] + public void Succeeds_WhenVariantsContainEmptyMainEntryGuid() + { + var entryId = Guid.NewGuid(); + var entry = new Entry() { Id = entryId, LexemeForm = new MultiString(){{"en", "lexeme"}}, Variants = [new Variant(){ VariantEntryId = Guid.NewGuid(), MainEntryId = Guid.Empty }] }; + _validator.TestValidate(entry).ShouldNotHaveAnyValidationErrors(); + } + private void SetProperty(Entry entry, string propName, string content) { var propInfo = typeof(Entry).GetProperty(propName); diff --git a/backend/FwLite/MiniLcm.Tests/Validators/VariantTypeValidationTests.cs b/backend/FwLite/MiniLcm.Tests/Validators/VariantTypeValidationTests.cs new file mode 100644 index 0000000000..57ee87f7cc --- /dev/null +++ b/backend/FwLite/MiniLcm.Tests/Validators/VariantTypeValidationTests.cs @@ -0,0 +1,44 @@ +using FluentValidation.TestHelper; +using MiniLcm.Validators; + +namespace MiniLcm.Tests.Validators; + +public class VariantTypeValidationTests +{ + private readonly VariantTypeValidator _validator = new(); + + [Fact] + public void FailsForEmptyName() + { + var variantType = new VariantType() { Name = new MultiString() }; + _validator.TestValidate(variantType).ShouldHaveValidationErrorFor(c => c.Name); + } + + [Fact] + public void FailsForNameWithEmptyStringValue() + { + var variantType = new VariantType() { Name = new() { { "en", string.Empty } } }; + _validator.TestValidate(variantType).ShouldHaveValidationErrorFor(c => c.Name); + } + + [Fact] + public void FailsForNonNullDeletedAt() + { + var variantType = new VariantType() + { + Name = new() { { "en", "test" } }, DeletedAt = DateTimeOffset.UtcNow + }; + _validator.TestValidate(variantType).ShouldHaveValidationErrorFor(c => c.DeletedAt); + } + + [Fact] + public void Succeeds() + { + var variantType = new VariantType() + { + Name = new() { { "en", "test" } }, + DeletedAt = null + }; + _validator.TestValidate(variantType).ShouldNotHaveAnyValidationErrors(); + } +} diff --git a/backend/FwLite/MiniLcm.Tests/Validators/VariantUpdateValidationTests.cs b/backend/FwLite/MiniLcm.Tests/Validators/VariantUpdateValidationTests.cs new file mode 100644 index 0000000000..c3b84fdaf2 --- /dev/null +++ b/backend/FwLite/MiniLcm.Tests/Validators/VariantUpdateValidationTests.cs @@ -0,0 +1,64 @@ +using FluentValidation.TestHelper; +using MiniLcm.Validators; +using SystemTextJsonPatch; + +namespace MiniLcm.Tests.Validators; + +public class VariantUpdateValidationTests +{ + private readonly VariantUpdateValidator _validator = new(); + + private static UpdateObjectInput Patch(Action> build) + { + var document = new JsonPatchDocument(); + build(document); + return new UpdateObjectInput(document); + } + + [Fact] + public void AllowsHideMinorEntryAndComment() + { + var update = Patch(doc => + { + doc.Replace(v => v.HideMinorEntry, true); + doc.Replace(v => v.Comment, new RichMultiString { { "en", new RichString("note") } }); + }); + _validator.TestValidate(update).ShouldNotHaveAnyValidationErrors(); + } + + [Fact] + public void RejectsEmptyPatch() + { + _validator.TestValidate(Patch(_ => { })).IsValid.Should().BeFalse(); + } + + [Fact] + public void RejectsTypesReplacement() + { + var update = Patch(doc => doc.Replace(v => v.Types, [])); + _validator.TestValidate(update).IsValid.Should().BeFalse(); + } + + [Fact] + public void RejectsTypesPatchByIndex() + { + var update = Patch(doc => doc.Operations.Add( + new SystemTextJsonPatch.Operations.Operation("remove", "/Types/0", null))); + _validator.TestValidate(update).IsValid.Should().BeFalse(); + } + + [Theory] + [InlineData(nameof(Variant.VariantEntryId))] + [InlineData(nameof(Variant.MainEntryId))] + [InlineData(nameof(Variant.MainSenseId))] + [InlineData(nameof(Variant.VariantHeadword))] + [InlineData(nameof(Variant.MainHeadword))] + [InlineData(nameof(Variant.DeletedAt))] + [InlineData(nameof(Variant.Id))] + public void RejectsProtectedProperties(string property) + { + var update = Patch(doc => doc.Operations.Add( + new SystemTextJsonPatch.Operations.Operation("replace", $"/{property}", null, Guid.NewGuid()))); + _validator.TestValidate(update).IsValid.Should().BeFalse(); + } +} diff --git a/backend/FwLite/MiniLcm.Tests/Validators/VariantValidationTests.cs b/backend/FwLite/MiniLcm.Tests/Validators/VariantValidationTests.cs new file mode 100644 index 0000000000..48feeff462 --- /dev/null +++ b/backend/FwLite/MiniLcm.Tests/Validators/VariantValidationTests.cs @@ -0,0 +1,64 @@ +using FluentValidation.TestHelper; +using MiniLcm.Validators; + +namespace MiniLcm.Tests.Validators; + +public class VariantValidationTests +{ + private readonly VariantValidator _validator = new(); + + private static Variant NewVariant() + { + return new Variant + { + Id = Guid.NewGuid(), + VariantEntryId = Guid.NewGuid(), + MainEntryId = Guid.NewGuid(), + }; + } + + [Fact] + public void Succeeds() + { + _validator.TestValidate(NewVariant()).ShouldNotHaveAnyValidationErrors(); + } + + [Fact] + public void FailsForNonNullDeletedAt() + { + var variant = NewVariant() with { DeletedAt = DateTimeOffset.UtcNow }; + _validator.TestValidate(variant).ShouldHaveValidationErrorFor(v => v.DeletedAt); + } + + [Fact] + public void FailsForSelfReference() + { + var id = Guid.NewGuid(); + var variant = NewVariant() with { VariantEntryId = id, MainEntryId = id }; + _validator.TestValidate(variant).IsValid.Should().BeFalse(); + } + + [Fact] + public void SucceedsWhenVariantEntryIdIsEmpty() + { + // nested in an entry the variant-entry side may be inferred from the parent + var variant = NewVariant() with { VariantEntryId = Guid.Empty }; + _validator.TestValidate(variant).ShouldNotHaveAnyValidationErrors(); + } + + [Fact] + public void FailsForCommentWithEmptyStringValue() + { + var variant = NewVariant(); + variant.Comment = new() { { "en", new RichString(string.Empty) } }; + _validator.TestValidate(variant).ShouldHaveValidationErrorFor(v => v.Comment); + } + + [Fact] + public void FailsForTypeRefWithoutId() + { + var variant = NewVariant(); + variant.Types = [new VariantTypeRef { Id = Guid.Empty }]; + _validator.TestValidate(variant).IsValid.Should().BeFalse(); + } +} diff --git a/backend/FwLite/MiniLcm.Tests/VariantTestsBase.cs b/backend/FwLite/MiniLcm.Tests/VariantTestsBase.cs new file mode 100644 index 0000000000..435d3f91df --- /dev/null +++ b/backend/FwLite/MiniLcm.Tests/VariantTestsBase.cs @@ -0,0 +1,625 @@ +using MiniLcm.Models; +using MiniLcm.SyncHelpers; + +namespace MiniLcm.Tests; + +public abstract class VariantTestsBase : MiniLcmTestBase +{ + protected readonly Guid _mainEntryId = Guid.NewGuid(); + protected readonly Guid _variantEntryId = Guid.NewGuid(); + protected readonly Guid _mainSenseId1 = Guid.NewGuid(); + protected readonly Guid _mainSenseId2 = Guid.NewGuid(); + protected Entry _mainEntry = null!; + protected Entry _variantEntry = null!; + + public override async Task InitializeAsync() + { + await base.InitializeAsync(); + _mainEntry = await Api.CreateEntry(new() + { + Id = _mainEntryId, + LexemeForm = { { "en", "main entry" } }, + Senses = + [ + new Sense + { + Id = _mainSenseId1, + Gloss = { { "en", "main sense 1" } } + }, + new Sense + { + Id = _mainSenseId2, + Gloss = { { "en", "main sense 2" } } + } + ] + }); + // deliberately sense-less: FLEx's "Insert Variant" creates variant entries without senses + _variantEntry = await Api.CreateEntry(new() + { + Id = _variantEntryId, + LexemeForm = { { "en", "variant form" } } + }); + } + + private async Task CreateVariantType(string name = "test type") + { + return await Api.CreateVariantType(new VariantType { Id = Guid.NewGuid(), Name = new() { { "en", name } } }); + } + + [Fact] + public async Task CreateVariant_Works() + { + var variant = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + variant.VariantEntryId.Should().Be(_variantEntryId); + variant.MainEntryId.Should().Be(_mainEntryId); + variant.MainSenseId.Should().BeNull(); + variant.VariantHeadword.Should().Be("variant form"); + variant.MainHeadword.Should().Be("main entry"); + variant.Types.Should().BeEmpty(); + variant.HideMinorEntry.Should().BeFalse(); + variant.Comment.Should().BeEmpty(); + } + + [Fact] + public async Task CreateVariant_WithSense_Works() + { + var variant = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry, _mainSenseId1)); + variant.MainSenseId.Should().Be(_mainSenseId1); + + // a sense-targeted link still surfaces under the owning entry's Variants + var mainEntry = await Api.GetEntry(_mainEntryId); + mainEntry!.Variants.Should().ContainSingle(v => v.VariantEntryId == _variantEntryId && v.MainSenseId == _mainSenseId1); + } + + [Fact] + public async Task CreateVariant_WithTypesCommentAndHideMinorEntry_RoundTrips() + { + var type = await CreateVariantType(); + var input = Variant.FromEntries(_variantEntry, _mainEntry) with + { + Types = [type.ToRef()], + HideMinorEntry = true, + Comment = new() { { "en", new RichString("originally meant something else") } }, + }; + await Api.CreateVariant(input); + + var variantEntry = await Api.GetEntry(_variantEntryId); + var link = variantEntry!.VariantOf.Should().ContainSingle().Subject; + link.Types.Should().ContainSingle(t => t.Id == type.Id); + link.HideMinorEntry.Should().BeTrue(); + link.Comment["en"].GetPlainText().Should().Be("originally meant something else"); + + var mainEntry = await Api.GetEntry(_mainEntryId); + var backLink = mainEntry!.Variants.Should().ContainSingle().Subject; + backLink.Types.Should().ContainSingle(t => t.Id == type.Id); + backLink.HideMinorEntry.Should().BeTrue(); + backLink.Comment["en"].GetPlainText().Should().Be("originally meant something else"); + } + + [Fact] + public async Task VariantHeadwords_UpdateWhenReferencedEntriesChange() + { + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + + var beforeVariant = _variantEntry.Copy(); + _variantEntry.LexemeForm["en"] = "renamed variant"; + await Api.UpdateEntry(beforeVariant, _variantEntry); + + var mainEntry = (await Api.GetEntry(_mainEntryId))!; + var beforeMain = mainEntry.Copy(); + mainEntry.LexemeForm["en"] = "renamed main"; + await Api.UpdateEntry(beforeMain, mainEntry); + + var link = (await Api.GetEntry(_mainEntryId))!.Variants.Should().ContainSingle().Subject; + link.VariantHeadword.Should().Be("renamed variant"); + link.MainHeadword.Should().Be("renamed main"); + } + + [Fact] + public async Task DeleteVariant_Works() + { + var variant = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await Api.DeleteVariant(variant); + var entries = await Api.GetEntries().ToArrayAsync(); + var variantEntry = entries.Should().ContainSingle(e => e.Id == _variantEntryId).Subject; + var mainEntry = entries.Should().ContainSingle(e => e.Id == _mainEntryId).Subject; + variantEntry.VariantOf.Should().BeEmpty(); + mainEntry.Variants.Should().BeEmpty(); + } + + [Fact] + public async Task GetEntries_Works() + { + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + var entries = await Api.GetEntries().ToArrayAsync(); + var variantEntry = entries.Should().ContainSingle(e => e.Id == _variantEntryId).Subject; + var mainEntry = entries.Should().ContainSingle(e => e.Id == _mainEntryId).Subject; + variantEntry.VariantOf.Should().ContainSingle(v => v.MainEntryId == _mainEntryId); + mainEntry.Variants.Should().ContainSingle(v => v.VariantEntryId == _variantEntryId); + } + + [Fact] + public async Task VariantEntryWithoutSenses_RoundTrips() + { + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + var variantEntry = await Api.GetEntry(_variantEntryId); + variantEntry.Should().NotBeNull(); + variantEntry!.Senses.Should().BeEmpty(); + variantEntry.VariantOf.Should().ContainSingle(); + } + + [Fact] + public async Task CreateVariant_UsingTheSameLinkDoesNothing() + { + var variant1 = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + var variant2 = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + variant2.Should().BeEquivalentTo(variant1); + (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle(); + } + + [Fact] + public async Task CreateVariant_UsingTheSameLinkWithSenseDoesNothing() + { + var variant1 = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry, _mainSenseId1)); + var variant2 = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry, _mainSenseId1)); + variant2.Should().BeEquivalentTo(variant1); + (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle(); + } + + [Fact] + public async Task CreateVariant_ReplayingReturnedObject_IsIdempotent() + { + // Sync can be interrupted and replayed, so the exact same object (including its + // internal entity ID) may be passed to CreateVariant again. + var created = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + var again = await Api.CreateVariant(created); + again.Should().BeEquivalentTo(created); + } + + [Fact] + public async Task CreateVariant_CanTargetMultipleSensesOfSameEntry() + { + var variant1 = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry, _mainSenseId1)); + variant1.MainSenseId.Should().Be(_mainSenseId1); + var variant2 = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry, _mainSenseId2)); + variant2.MainSenseId.Should().Be(_mainSenseId2); + + // ensure our sync code can handle them too + _variantEntry = (await Api.GetEntry(_variantEntryId))!; + await Api.UpdateEntry(_variantEntry, _variantEntry); + _mainEntry = (await Api.GetEntry(_mainEntryId))!; + await Api.UpdateEntry(_mainEntry, _mainEntry); + } + + [Fact] + public async Task CreateVariant_ChangingPropertyAndCreatingAgain_CreatesBoth() + { + var newMainEntry = await Api.CreateEntry(new() + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", "new main" } } + }); + + var input = Variant.FromEntries(_variantEntry, _mainEntry); + var first = await Api.CreateVariant(input); + first.MainEntryId.Should().Be(_mainEntryId); + + // Mutate a property on the same object and create again. + // The sync diff does this when a property changes (remove + add). + input.MainEntryId = newMainEntry.Id; + var second = await Api.CreateVariant(input); + second.MainEntryId.Should().Be(newMainEntry.Id); + + var entry = await Api.GetEntry(_variantEntryId); + entry!.VariantOf.Should().HaveCount(2); + } + + [Fact] + public async Task CreateVariant_ThrowsOnSelfReference() + { + var act = async () => await Api.CreateVariant(Variant.FromEntries(_mainEntry, _mainEntry)); + await act.Should().ThrowAsync(); + } + + [Fact] + public async Task CreateVariant_ThrowsWhenSenseBelongsToADifferentEntry() + { + var otherEntry = await Api.CreateEntry(new() + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", "other entry" } } + }); + //_mainSenseId1 belongs to _mainEntry, not otherEntry + var act = async () => await Api.CreateVariant(Variant.FromEntries(_variantEntry, otherEntry, _mainSenseId1)); + await act.Should().ThrowAsync(); + } + + [Fact] + public async Task CreateVariant_AllowsChains() + { + // FLEx allows variant chains (a variant of a variant); we must too + var entry3 = await Api.CreateEntry(new() + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", "entry3" } } + }); + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await Api.CreateVariant(Variant.FromEntries(entry3, _variantEntry)); + var middle = await Api.GetEntry(_variantEntryId); + middle!.VariantOf.Should().ContainSingle(v => v.MainEntryId == _mainEntryId); + middle.Variants.Should().ContainSingle(v => v.VariantEntryId == entry3.Id); + } + + [Fact] + public async Task CreateVariant_ThrowsWhenMakingA2LayerReferenceCycle() + { + // LCM rejects circular component references (LexEntryRef.ValidateAddObjectInternal), + // so both implementations must too + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + var act = async () => await Api.CreateVariant(Variant.FromEntries(_mainEntry, _variantEntry)); + await act.Should().ThrowAsync(); + } + + [Fact] + public async Task CreateVariant_ThrowsWhenMakingA3LayerReferenceCycle() + { + var entry3 = await Api.CreateEntry(new() + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", "entry3" } } + }); + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await Api.CreateVariant(Variant.FromEntries(_mainEntry, entry3)); + var act = async () => await Api.CreateVariant(Variant.FromEntries(entry3, _variantEntry)); + await act.Should().ThrowAsync(); + } + + [Fact] + public async Task CreateVariant_ThrowsWhenClosingAMixedCycleThroughAComplexForm() + { + // LCM's cycle check spans the combined complex-form + variant component graph + await Api.CreateComplexFormComponent(ComplexFormComponent.FromEntries(_mainEntry, _variantEntry)); + var act = async () => await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await act.Should().ThrowAsync(); + } + + [Fact] + public async Task CreateVariant_AllowsClosingALoopThroughASenseTargetedLink() + { + // LCM's AllComponents resolves a sense-targeted component to its owning entry but does + // NOT recurse into it, so this graph is legal in FLEx and must stay legal here + var entry3 = await Api.CreateEntry(new() + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", "entry3" } } + }); + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry, _mainSenseId1)); + await Api.CreateVariant(Variant.FromEntries(_mainEntry, entry3)); + var act = async () => await Api.CreateVariant(Variant.FromEntries(entry3, _variantEntry)); + await act.Should().NotThrowAsync(); + var entry = await Api.GetEntry(_variantEntryId); + entry!.Variants.Should().ContainSingle(v => v.VariantEntryId == entry3.Id); + } + + [Fact] + public async Task CreateVariant_ThrowsWhenMakingA2LayerCycleThroughASenseTargetedLink() + { + // no recursion past a sense-targeted link, but its owning entry still counts directly + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry, _mainSenseId1)); + var act = async () => await Api.CreateVariant(Variant.FromEntries(_mainEntry, _variantEntry)); + await act.Should().ThrowAsync(); + } + + [Fact] + public async Task CreateVariant_ThrowsWhenTargetingASenseOfADependentEntry() + { + // targeting a sense doesn't exempt the first hop: LCM resolves the added sense to its + // owning entry and walks that entry's full component closure + var entry3 = await Api.CreateEntry(new() + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", "entry3" } } + }); + await Api.CreateVariant(Variant.FromEntries(_mainEntry, entry3)); + var act = async () => await Api.CreateVariant(Variant.FromEntries(entry3, _mainEntry, _mainSenseId1)); + await act.Should().ThrowAsync(); + } + + [Fact] + public async Task CreateComplexFormComponent_ThrowsWhenClosingAMixedCycleThroughAVariant() + { + var entry3 = await Api.CreateEntry(new() + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", "entry3" } } + }); + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await Api.CreateComplexFormComponent(ComplexFormComponent.FromEntries(_mainEntry, entry3)); + var act = async () => await Api.CreateComplexFormComponent(ComplexFormComponent.FromEntries(entry3, _variantEntry)); + await act.Should().ThrowAsync(); + } + + [Fact] + public async Task CreateLinks_MatchTheLcmCycleRuleOnRandomGraphs() + { + // differential check against a direct port of LCM's oracle (LexEntry.AllComponents): + // random variant/complex-form link-adds must be accepted/rejected exactly as LCM + // would, on both implementations. Fixed seed keeps it deterministic. + var random = new Random(20260704); + const int entryCount = 6; + var entries = new List(); + var senseIds = new Dictionary(); + for (var i = 0; i < entryCount; i++) + { + var senseId = Guid.NewGuid(); + var entry = await Api.CreateEntry(new() + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", $"graph entry {i}" } }, + Senses = [new Sense { Id = senseId, Gloss = { { "en", $"graph sense {i}" } } }] + }); + entries.Add(entry); + senseIds[entry.Id] = senseId; + } + + var links = new List<(Guid Owner, Guid TargetEntry, bool TargetIsSense)>(); + var attempted = new HashSet<(bool AsVariant, Guid Owner, Guid Target, Guid? Sense)>(); + int accepted = 0, rejected = 0; + for (var attempt = 0; attempt < 40; attempt++) + { + var owner = entries[random.Next(entryCount)]; + var target = entries[random.Next(entryCount)]; + var asVariant = random.Next(2) == 0; + Guid? targetSenseId = random.Next(3) == 0 ? senseIds[target.Id] : null; + //duplicate links have their own (non-cycle) rules; keep this test about cycles + if (!attempted.Add((asVariant, owner.Id, target.Id, targetSenseId))) continue; + + var act = asVariant + ? () => Api.CreateVariant(Variant.FromEntries(owner, target, targetSenseId)) + : (Func)(() => Api.CreateComplexFormComponent(ComplexFormComponent.FromEntries(owner, target, targetSenseId))); + if (OracleRejects(owner.Id, target.Id)) + { + await act.Should().ThrowAsync($"LCM rejects link {attempt} ({owner.Id} -> {target.Id}, sense: {targetSenseId is not null})"); + rejected++; + } + else + { + await act.Should().NotThrowAsync($"LCM accepts link {attempt} ({owner.Id} -> {target.Id}, sense: {targetSenseId is not null})"); + links.Add((owner.Id, target.Id, targetSenseId is not null)); + accepted++; + } + } + //seed sanity: both branches must genuinely be exercised + accepted.Should().BeGreaterThan(5); + rejected.Should().BeGreaterThan(5); + + bool OracleRejects(Guid ownerId, Guid targetEntryId) + { + //LexEntryRef.ValidateAddObjectInternal: reject iff owner ∈ AllComponents(target). + //AllComponents yields the entry itself, recurses into entry-targeted links, and + //yields (without recursing into) the owning entry of sense-targeted links + var all = new HashSet(); + var stack = new Stack(); + stack.Push(targetEntryId); + while (stack.Count > 0) + { + var current = stack.Pop(); + if (!all.Add(current)) continue; + foreach (var link in links.Where(l => l.Owner == current)) + { + if (link.TargetIsSense) all.Add(link.TargetEntry); + else stack.Push(link.TargetEntry); + } + } + return all.Contains(ownerId); + } + } + + [Fact] + public async Task CreateVariant_WorksWhenALinkWasDeletedWhichWouldCauseACycle() + { + var created = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await Api.DeleteVariant(created); + var act = async () => await Api.CreateVariant(Variant.FromEntries(_mainEntry, _variantEntry)); + await act.Should().NotThrowAsync("a link was deleted which was part of the cycle"); + } + + [Fact] + public async Task UpdateVariant_SyncsTypesAndScalars() + { + var typeA = await CreateVariantType("type a"); + var typeB = await CreateVariantType("type b"); + var created = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [typeA.ToRef()] }); + + var after = created.Copy(); + after.Types = [typeB.ToRef()]; + after.HideMinorEntry = true; + after.Comment = new() { { "en", new RichString("now hidden") } }; + await Api.UpdateVariant(created, after); + + var link = (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Should().ContainSingle(t => t.Id == typeB.Id); + link.HideMinorEntry.Should().BeTrue(); + link.Comment["en"].GetPlainText().Should().Be("now hidden"); + } + + [Fact] + public async Task AddVariantType_Works() + { + var type = await CreateVariantType(); + var variant = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await Api.AddVariantType(variant, type.Id); + var link = (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Should().ContainSingle(t => t.Id == type.Id); + } + + [Fact] + public async Task AddVariantType_IsIdempotent() + { + var type = await CreateVariantType(); + var variant = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await Api.AddVariantType(variant, type.Id); + await Api.AddVariantType(variant, type.Id); + var link = (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Should().ContainSingle(t => t.Id == type.Id); + } + + [Fact] + public async Task AddVariantType_ToleratesAConcurrentlyDeletedType() + { + // Sync (VariantSync.Add -> AddVariantType) can add a type that was concurrently deleted on + // the other replica. Drop it (delete wins) instead of wedging the whole sync — matching + // Remove/MoveVariantType and AddVariantChange.NewEntity, which already tolerate this. + var type = await CreateVariantType(); + var variant = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await Api.DeleteVariantType(type.Id); + + await Api.AddVariantType(variant, type.Id); + + var link = (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Should().NotContain(t => t.Id == type.Id); + } + + [Fact] + public async Task SubmitCreateVariant_DropsAConcurrentlyDeletedType() + { + // A whole link synced in (EntrySync -> SubmitCreateVariant) may carry a type that was + // concurrently deleted on this replica; drop the dangling type rather than wedging the sync. + var type = await CreateVariantType(); + await Api.DeleteVariantType(type.Id); + + await Api.SubmitCreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [type.ToRef()] }); + + var link = (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Should().BeEmpty(); + } + + [Fact] + public async Task RemoveVariantType_Works() + { + var type = await CreateVariantType(); + var variant = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [type.ToRef()] }); + await Api.RemoveVariantType(variant, type.Id); + var link = (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Should().BeEmpty(); + } + + [Fact] + public async Task RemoveVariantType_WorksWhenTypeIsNotOnLink() + { + var variant = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + await Api.RemoveVariantType(variant, Guid.NewGuid()); + } + + [Fact] + public async Task CreateVariant_PreservesTypesOrder() + { + var typeA = await CreateVariantType("type a"); + var typeB = await CreateVariantType("type b"); + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [typeB.ToRef(), typeA.ToRef()] }); + + var link = (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Select(t => t.Id).Should().Equal(typeB.Id, typeA.Id); + } + + [Fact] + public async Task MoveVariantType_MovesToTheRequestedPosition() + { + var typeA = await CreateVariantType("type a"); + var typeB = await CreateVariantType("type b"); + var typeC = await CreateVariantType("type c"); + var variant = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [typeA.ToRef(), typeB.ToRef(), typeC.ToRef()] }); + + await Api.MoveVariantType(variant, typeC.Id, new BetweenPosition(null, typeA.Id)); + + var link = (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Select(t => t.Id).Should().Equal(typeC.Id, typeA.Id, typeB.Id); + } + + [Fact] + public async Task MoveVariantType_UnknownTypeIsANoOp() + { + var typeA = await CreateVariantType("type a"); + var typeB = await CreateVariantType("type b"); + var variant = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [typeA.ToRef(), typeB.ToRef()] }); + + await Api.MoveVariantType(variant, Guid.NewGuid(), new BetweenPosition(null, typeA.Id)); + + var link = (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Select(t => t.Id).Should().Equal(typeA.Id, typeB.Id); + } + + [Fact] + public async Task UpdateVariant_ReordersTypes() + { + var typeA = await CreateVariantType("type a"); + var typeB = await CreateVariantType("type b"); + var created = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [typeA.ToRef(), typeB.ToRef()] }); + + var after = created.Copy(); + after.Types = [typeB.ToRef(), typeA.ToRef()]; + await Api.UpdateVariant(created, after); + + var link = (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Select(t => t.Id).Should().Equal(typeB.Id, typeA.Id); + } + + [Fact] + public async Task UpdateVariant_AddsTypeAtTheRequestedPosition() + { + var typeA = await CreateVariantType("type a"); + var typeB = await CreateVariantType("type b"); + var created = await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry) with { Types = [typeB.ToRef()] }); + + var after = created.Copy(); + after.Types = [typeA.ToRef(), typeB.ToRef()]; + await Api.UpdateVariant(created, after); + + var link = (await Api.GetEntry(_variantEntryId))!.VariantOf.Should().ContainSingle().Subject; + link.Types.Select(t => t.Id).Should().Equal(typeA.Id, typeB.Id); + } + + [Fact] + public async Task CreateVariantType_Works() + { + var variantType = new VariantType() { Id = Guid.NewGuid(), Name = new() { { "en", "test" } } }; + await Api.CreateVariantType(variantType); + var types = await Api.GetVariantTypes().ToArrayAsync(); + types.Should().ContainSingle(t => t.Id == variantType.Id); + } + + [Fact] + public async Task UpdateVariantType_Works() + { + var variantType = new VariantType() { Id = Guid.NewGuid(), Name = new() { { "en", "test" } } }; + await Api.CreateVariantType(variantType); + var updatedVariantType = await Api.UpdateVariantType(variantType.Id, new UpdateObjectInput().Set(c => c.Name["en"], "updated")); + updatedVariantType.Name["en"].Should().Be("updated"); + } + + [Fact] + public async Task UpdateVariantTypeSync_Works() + { + var variantType = new VariantType() { Id = Guid.NewGuid(), Name = new() { { "en", "test" } } }; + await Api.CreateVariantType(variantType); + var afterVariantType = variantType with { Name = new() { { "en", "updated" } } }; + var actualVariantType = await Api.UpdateVariantType(variantType, afterVariantType); + actualVariantType.Should().BeEquivalentTo(afterVariantType, options => options.Excluding(c => c.Id)); + } + + [Fact] + public async Task EntryCanBeBothVariantAndComponent() + { + var complexFormEntry = await Api.CreateEntry(new() + { + Id = Guid.NewGuid(), + LexemeForm = { { "en", "complex form" } } + }); + await Api.CreateComplexFormComponent(ComplexFormComponent.FromEntries(complexFormEntry, _variantEntry)); + await Api.CreateVariant(Variant.FromEntries(_variantEntry, _mainEntry)); + + var entry = await Api.GetEntry(_variantEntryId); + entry!.ComplexForms.Should().ContainSingle(c => c.ComplexFormEntryId == complexFormEntry.Id); + entry.VariantOf.Should().ContainSingle(v => v.MainEntryId == _mainEntryId); + } +} diff --git a/backend/FwLite/MiniLcm.Tests/WriteNormalizationTests.cs b/backend/FwLite/MiniLcm.Tests/WriteNormalizationTests.cs index 0b76444495..dc5cd8fe60 100644 --- a/backend/FwLite/MiniLcm.Tests/WriteNormalizationTests.cs +++ b/backend/FwLite/MiniLcm.Tests/WriteNormalizationTests.cs @@ -505,6 +505,69 @@ public async Task CreateComplexFormComponent_NormalizesToNfd() #endregion + #region Variant Tests + + // These cover the Submit* variant overrides. Each asserts two things: the payload is + // NFD-normalized, AND the call forwards to _api.Submit* rather than the returning + // Create/Update — proving the wrapper preserves the sync's delete-wins semantics + // instead of downgrading to a NotFound-throwing write (see AGENTS.md "Submit* write variants"). + + [Fact] + public async Task SubmitCreateVariant_NormalizesToNfd_AndKeepsSubmitSemantics() + { + var variant = NfcTestData.CreateNfcVariant(); + + Variant? captured = null; + Mock.Get(_mockApi) + .Setup(api => api.SubmitCreateVariant(It.IsAny())) + .Callback(v => captured = v) + .Returns(Task.CompletedTask); + + await _normalizingApi.SubmitCreateVariant(variant); + + AssertNormalizedToNfd(captured, variant); + Mock.Get(_mockApi).Verify(api => api.CreateVariant(It.IsAny()), Times.Never); + } + + [Fact] + public async Task SubmitUpdateVariant_JsonPatch_NormalizesToNfd() + { + var update = new UpdateObjectInput().Set(v => v.Comment, NfcTestData.CreateNfcRichMultiString()); + + UpdateObjectInput? captured = null; + Mock.Get(_mockApi) + .Setup(api => api.SubmitUpdateVariant(It.IsAny(), It.IsAny>())) + .Callback>((_, patch) => captured = patch) + .Returns(Task.CompletedTask); + + await _normalizingApi.SubmitUpdateVariant(NfcTestData.CreateNfcVariant(), update); + + captured.Should().NotBeNull(); + var byPath = captured.Patch.Operations.ToDictionary(o => o.Path!, o => o.Value); + AssertAllDecomposed(byPath["/Comment"].Should().BeOfType().Subject); + } + + [Fact] + public async Task SubmitUpdateVariantType_JsonPatch_NormalizesToNfd_AndKeepsSubmitSemantics() + { + var update = new UpdateObjectInput().Set(vt => vt.Name, NfcTestData.CreateNfcMultiString()); + + UpdateObjectInput? captured = null; + Mock.Get(_mockApi) + .Setup(api => api.SubmitUpdateVariantType(It.IsAny(), It.IsAny>())) + .Callback>((_, patch) => captured = patch) + .Returns(Task.CompletedTask); + + await _normalizingApi.SubmitUpdateVariantType(Guid.NewGuid(), update); + + captured.Should().NotBeNull(); + var byPath = captured.Patch.Operations.ToDictionary(o => o.Path!, o => o.Value); + AssertAllDecomposed(byPath["/Name"].Should().BeOfType().Subject); + Mock.Get(_mockApi).Verify(api => api.UpdateVariantType(It.IsAny(), It.IsAny>()), Times.Never); + } + + #endregion + #region Sense Tests [Fact] diff --git a/backend/FwLite/MiniLcm/CreateEntryOptions.cs b/backend/FwLite/MiniLcm/CreateEntryOptions.cs index 4816296074..995fb5f12e 100644 --- a/backend/FwLite/MiniLcm/CreateEntryOptions.cs +++ b/backend/FwLite/MiniLcm/CreateEntryOptions.cs @@ -2,9 +2,10 @@ namespace MiniLcm; public record CreateEntryOptions( /// - /// Can be excluded for the purpose of deferring referencing entities that might not exist yet. + /// Gates all cross-entry links (complex forms, components and variants). Can be excluded + /// for the purpose of deferring referenced entities that might not exist yet. /// - bool IncludeComplexFormsAndComponents = true, + bool IncludeEntryReferences = true, bool AutoAddMainPublication = false ) { @@ -14,6 +15,6 @@ public record CreateEntryOptions( /// For interactive entry creation: auto-add the project's main publication. public static readonly CreateEntryOptions WithMainPublication = new(AutoAddMainPublication: true); - /// Defer complex forms and components to a later sync pass (they may reference entries that don't exist yet). - public static readonly CreateEntryOptions WithoutComplexFormsAndComponents = new(IncludeComplexFormsAndComponents: false); + /// Defer cross-entry links (complex forms, components, variants) to a later sync pass (they may reference entries that don't exist yet). + public static readonly CreateEntryOptions WithoutEntryReferences = new(IncludeEntryReferences: false); } diff --git a/backend/FwLite/MiniLcm/IMiniLcmReadApi.cs b/backend/FwLite/MiniLcm/IMiniLcmReadApi.cs index 827482aa83..2918ccfd3a 100644 --- a/backend/FwLite/MiniLcm/IMiniLcmReadApi.cs +++ b/backend/FwLite/MiniLcm/IMiniLcmReadApi.cs @@ -15,8 +15,10 @@ public interface IMiniLcmReadApi IAsyncEnumerable GetPublications(); IAsyncEnumerable GetSemanticDomains(); IAsyncEnumerable GetComplexFormTypes(); + IAsyncEnumerable GetVariantTypes(); IAsyncEnumerable GetMorphTypes(); Task GetComplexFormType(Guid id); + Task GetVariantType(Guid id); Task GetMorphType(Guid id); Task GetMorphType(MorphTypeKind kind); Task CountEntries(string? query = null, FilterQueryOptions? options = null); diff --git a/backend/FwLite/MiniLcm/IMiniLcmWriteApi.cs b/backend/FwLite/MiniLcm/IMiniLcmWriteApi.cs index a09f955573..d33e494e0d 100644 --- a/backend/FwLite/MiniLcm/IMiniLcmWriteApi.cs +++ b/backend/FwLite/MiniLcm/IMiniLcmWriteApi.cs @@ -44,6 +44,13 @@ Task UpdateWritingSystem(WritingSystemId id, Task DeleteComplexFormType(Guid id); #endregion + #region VariantType + Task CreateVariantType(VariantType variantType); + Task UpdateVariantType(Guid id, UpdateObjectInput update); + Task UpdateVariantType(VariantType before, VariantType after, IMiniLcmApi? api = null); + Task DeleteVariantType(Guid id); + #endregion + #region MorphType Task CreateMorphType(MorphType morphType); Task UpdateMorphType(Guid id, UpdateObjectInput update); @@ -65,6 +72,15 @@ Task UpdateWritingSystem(WritingSystemId id, Task DeleteComplexFormComponent(ComplexFormComponent complexFormComponent); Task AddComplexFormType(Guid entryId, Guid complexFormTypeId); Task RemoveComplexFormType(Guid entryId, Guid complexFormTypeId); + // Variant links are unordered (no position/move) and resolved by their composite key + // (VariantEntryId, MainEntryId, MainSenseId) — see VARIANTS.md. A link's Types sequence + // IS ordered (FLEx lets users reorder it), hence the picture-style position/move pair. + Task CreateVariant(Variant variant); + Task UpdateVariant(Variant before, Variant after, IMiniLcmApi? api = null); + Task DeleteVariant(Variant variant); + Task AddVariantType(Variant variant, Guid variantTypeId, BetweenPosition? position = null); + Task RemoveVariantType(Variant variant, Guid variantTypeId); + Task MoveVariantType(Variant variant, Guid variantTypeId, BetweenPosition position); Task AddPublication(Guid entryId, Guid publicationId); Task RemovePublication(Guid entryId, Guid publicationId); #endregion @@ -139,13 +155,33 @@ Task UpdatePicture(Guid entryId, #endregion #region Submit (fire-and-forget write variants for sync) - // Result-less write variants the sync uses instead of the returning Update/Create methods above. The CRDT - // overrides them to submit the change without fetching the result, so applying to an object the other side - // deleted leaves it deleted (delete wins) rather than throwing. The defaults forward to the returning - // method (correct for FwData, which still surfaces a genuinely-missing object). + // Result-less write variants the sync's diff-apply uses instead of the returning Update/Create methods above. + // The CRDT overrides them to submit the change without fetching the result, so applying to an object the other + // side deleted leaves it deleted (delete wins) rather than throwing NotFoundException — which would otherwise + // wedge the whole project sync. The defaults forward to the returning method (correct for FwData, which still + // surfaces a genuinely-missing object). + // + // A Submit variant is only needed where the sync diff writes to a target that could have been concurrently + // deleted on the opposite replica: every id-targeted Update/Move, plus the child Creates run inside EntrySync + // (SubmitCreateSense/ExampleSentence/ComplexFormComponent/Variant) whose parent entry may be gone. It is NOT + // needed for a fresh top-level Create of a dependency type — that mints a new object, so there is no + // concurrent-delete race (hence there is no SubmitCreateVariantType/ComplexFormType/etc.). + // + // Wrapper authors: these have default bodies, so they are NOT compile-enforced like the other write methods. + // A wrapper that forwards to a Submit method (or is meant to preserve its semantics) MUST override it + // explicitly — see the "Submit* write variants" rule in backend/FwLite/AGENTS.md for why each wrapper's + // default behavior is wrong here. Task SubmitUpdateEntry(Guid id, UpdateObjectInput update) => UpdateEntry(id, update); Task SubmitCreateComplexFormComponent(ComplexFormComponent complexFormComponent, BetweenPosition? position = null) => CreateComplexFormComponent(complexFormComponent, position); Task SubmitMoveComplexFormComponent(ComplexFormComponent complexFormComponent, BetweenPosition between) => MoveComplexFormComponent(complexFormComponent, between); + Task SubmitCreateVariant(Variant variant) => CreateVariant(variant); + /// + /// Patches a variant link's own fields (HideMinorEntry, Comment) — the link is located by + /// its composite key, not its Id, since FwData links have no stable Id. Abstract (unlike + /// its Submit* siblings) because there is no id-based UpdateVariant(id, patch) twin to + /// forward to; the patch path only exists for sync. + /// + Task SubmitUpdateVariant(Variant variant, UpdateObjectInput update); Task SubmitCreateSense(Guid entryId, Sense sense, BetweenPosition? position = null) => CreateSense(entryId, sense, position); Task SubmitUpdateSense(Guid entryId, Guid senseId, UpdateObjectInput update) => UpdateSense(entryId, senseId, update); Task SubmitCreateExampleSentence(Guid entryId, Guid senseId, ExampleSentence exampleSentence, BetweenPosition? position = null) => CreateExampleSentence(entryId, senseId, exampleSentence, position); @@ -157,6 +193,7 @@ Task UpdatePicture(Guid entryId, Task SubmitUpdatePublication(Guid id, UpdateObjectInput update) => UpdatePublication(id, update); Task SubmitUpdateSemanticDomain(Guid id, UpdateObjectInput update) => UpdateSemanticDomain(id, update); Task SubmitUpdateComplexFormType(Guid id, UpdateObjectInput update) => UpdateComplexFormType(id, update); + Task SubmitUpdateVariantType(Guid id, UpdateObjectInput update) => UpdateVariantType(id, update); #endregion #region CustomView diff --git a/backend/FwLite/MiniLcm/Import/ProjectImporter.cs b/backend/FwLite/MiniLcm/Import/ProjectImporter.cs index 95cf713b52..4084505f17 100644 --- a/backend/FwLite/MiniLcm/Import/ProjectImporter.cs +++ b/backend/FwLite/MiniLcm/Import/ProjectImporter.cs @@ -6,9 +6,9 @@ namespace MiniLcm.Import; /// /// Populates from a in dependency order -/// (writing systems → parts of speech → publications → complex-form types → morph types → -/// semantic domains → entries). Both FwData→CRDT import and template-based project creation funnel -/// through here, so the ordering and the create-vs-update rules live in exactly one place. +/// (writing systems → parts of speech → publications → complex-form types → variant types → +/// morph types → semantic domains → entries). Both FwData→CRDT import and template-based project +/// creation funnel through here, so the ordering and the create-vs-update rules live in exactly one place. /// public class ProjectImporter(ILogger logger) { @@ -39,6 +39,13 @@ public async Task ImportProject(IMiniLcmApi importTo, ProjectSnapshot snapshot) logger.LogInformation("Imported complex form type {Id}", complexFormType.Id); } + logger.LogInformation("Importing {Count} variant types", snapshot.VariantTypes.Length); + foreach (var variantType in snapshot.VariantTypes) + { + await importTo.CreateVariantType(variantType); + logger.LogInformation("Imported variant type {Id}", variantType.Id); + } + // Reconcile against the destination's existing morph types: MorphTypeSync updates them in place // and creates any missing, but rejects removals — canonical morph types can't be deleted. logger.LogInformation("Importing/Syncing {Count} morph types", snapshot.MorphTypes.Length); diff --git a/backend/FwLite/MiniLcm/MiniLcmApiExtensions.cs b/backend/FwLite/MiniLcm/MiniLcmApiExtensions.cs index e6165321c4..02bc3fa560 100644 --- a/backend/FwLite/MiniLcm/MiniLcmApiExtensions.cs +++ b/backend/FwLite/MiniLcm/MiniLcmApiExtensions.cs @@ -18,6 +18,7 @@ await api.GetPublications().ToArrayAsync(), await api.GetSemanticDomains().ToArrayAsync(), await api.GetComplexFormTypes().ToArrayAsync(), await api.GetMorphTypes().ToArrayAsync(), + await api.GetVariantTypes().ToArrayAsync(), await api.GetWritingSystems()); } } diff --git a/backend/FwLite/MiniLcm/Models/Entry.cs b/backend/FwLite/MiniLcm/Models/Entry.cs index f4ce83daa6..a7654f6487 100644 --- a/backend/FwLite/MiniLcm/Models/Entry.cs +++ b/backend/FwLite/MiniLcm/Models/Entry.cs @@ -33,6 +33,16 @@ public record Entry : IObjectWithId public virtual List ComplexFormTypes { get; set; } = []; + /// + /// This entry is a variant of these entries/senses + /// + public virtual List VariantOf { get; set; } = []; + + /// + /// Entries which are variants of this entry (or one of its senses) + /// + public virtual List Variants { get; set; } = []; + public virtual List PublishIn { get; set; } = []; //Server-side query rewrite target — LcmCrdt rewrites this to Json.Query(PublishIn) so @@ -78,6 +88,14 @@ public Entry Copy() [ ..ComplexFormTypes.Select(cft => cft.Copy()) ], + VariantOf = + [ + ..VariantOf.Select(v => v.Copy()) + ], + Variants = + [ + ..Variants.Select(v => v.Copy()) + ], PublishIn = [ ..PublishIn.Select(p => p.Copy())] }; } @@ -91,17 +109,3 @@ public void RemoveReference(Guid id, DateTimeOffset time) { } } - -public class Variants -{ - public Guid Id { get; set; } - public IList VariantsOf { get; set; } = []; - public IList Types { get; set; } = []; -} - - -public class VariantType -{ - public required Guid Id { get; set; } - public required MultiString Name { get; set; } -} diff --git a/backend/FwLite/MiniLcm/Models/IObjectWithId.cs b/backend/FwLite/MiniLcm/Models/IObjectWithId.cs index 4fd7db364a..4582fe58e9 100644 --- a/backend/FwLite/MiniLcm/Models/IObjectWithId.cs +++ b/backend/FwLite/MiniLcm/Models/IObjectWithId.cs @@ -12,6 +12,8 @@ namespace MiniLcm.Models; [JsonDerivedType(typeof(SemanticDomain), nameof(SemanticDomain))] [JsonDerivedType(typeof(ComplexFormType), nameof(ComplexFormType))] [JsonDerivedType(typeof(ComplexFormComponent), nameof(ComplexFormComponent))] +[JsonDerivedType(typeof(VariantType), nameof(VariantType))] +[JsonDerivedType(typeof(Variant), nameof(Variant))] [JsonDerivedType(typeof(CustomView), nameof(CustomView))] [JsonDerivedType(typeof(CommentThread), nameof(CommentThread))] [JsonDerivedType(typeof(UserComment), nameof(UserComment))] diff --git a/backend/FwLite/MiniLcm/Models/Variant.cs b/backend/FwLite/MiniLcm/Models/Variant.cs new file mode 100644 index 0000000000..436ed3a21e --- /dev/null +++ b/backend/FwLite/MiniLcm/Models/Variant.cs @@ -0,0 +1,127 @@ +using System.Diagnostics; +using MiniLcm.Attributes; + +namespace MiniLcm.Models; + +/// +/// One variant relationship: a variant (minor) entry pointing at the main entry (or sense) +/// it is a variant of. Identified by the composite key (VariantEntryId, MainEntryId, +/// MainSenseId) — one link per (FieldWorks LexEntryRef with RefType = Variant, target) pair, +/// so the per-relationship fields (Types, HideMinorEntry, Comment) live here rather than on +/// the entry. FLEx can also share one ref between several targets (fields shared) or hold +/// duplicate refs for one target; both shapes collapse to this composite-key model on read, +/// and per-link edits split a shared ref first (see FwDataMiniLcmApi.FindVariantRefForUpdate). +/// Unlike there is no Order — variant *link* lists have +/// no user-meaningful order in FieldWorks. The sequence on a link IS +/// ordered (liblcm's VariantEntryTypes is a card="seq" reference sequence) and round-trips via +/// , like sense pictures. +/// +public record Variant : IObjectWithId +{ + public static Variant FromEntries(Entry variantEntry, + Entry mainEntry, + Guid? mainSenseId = null) + { + if (mainEntry.Id == default) throw new ArgumentException("mainEntry.Id is empty"); + if (variantEntry.Id == default) throw new ArgumentException("variantEntry.Id is empty"); + return new Variant + { + Id = Guid.NewGuid(), + VariantEntryId = variantEntry.Id, + VariantHeadword = variantEntry.Headword(), + MainEntryId = mainEntry.Id, + MainHeadword = mainEntry.Headword(), + MainSenseId = mainSenseId, + }; + } + + private Guid _id; + [MiniLcmInternal] + public Guid Id + { + get + { + Debug.Assert(_id != Guid.Empty, "Id is not set and should not be used"); + return _id; + } + set + { + _id = value; + } + } + + [MiniLcmInternal] + public Guid? MaybeId => _id == Guid.Empty ? null : _id; + + public DateTimeOffset? DeletedAt { get; set; } + public virtual required Guid VariantEntryId { get; set; } + public string? VariantHeadword { get; set; } + public virtual required Guid MainEntryId { get; set; } + public virtual Guid? MainSenseId { get; set; } = null; + public string? MainHeadword { get; set; } + public virtual List Types { get; set; } = []; + public virtual bool HideMinorEntry { get; set; } + public virtual RichMultiString Comment { get; set; } = new(); + + public Guid[] GetReferences() + { + Span senseId = (MainSenseId.HasValue ? [MainSenseId.Value] : []); + return + [ + VariantEntryId, + MainEntryId, + ..senseId, + ..Types.Select(t => t.Id) + ]; + } + + public void RemoveReference(Guid id, DateTimeOffset time) + { + if (MainEntryId == id || VariantEntryId == id || MainSenseId == id) + { + DeletedAt = time; + return; + } + Types.RemoveAll(t => t.Id == id); + } + + public Variant Copy() + { + return new Variant + { + Id = _id, + VariantEntryId = VariantEntryId, + VariantHeadword = VariantHeadword, + MainEntryId = MainEntryId, + MainHeadword = MainHeadword, + MainSenseId = MainSenseId, + Types = [..Types.Select(t => t.Copy())], + HideMinorEntry = HideMinorEntry, + Comment = Comment.Copy(), + DeletedAt = DeletedAt, + }; + } + + //variant lists have no user-meaningful order, so both IMiniLcmApi implementations sort them by + //their composite key — deterministic and culture-free, unlike headword sorting (which is why + //ComplexForms sort alphabetically: FieldWorks does; there's no such convention for variants) + public static readonly Comparer VariantOfOrder = Comparer.Create((a, b) => + { + var result = a.MainEntryId.CompareTo(b.MainEntryId); + if (result != 0) return result; + return (a.MainSenseId ?? Guid.Empty).CompareTo(b.MainSenseId ?? Guid.Empty); + }); + + public static readonly Comparer VariantsOrder = Comparer.Create((a, b) => + { + var result = a.VariantEntryId.CompareTo(b.VariantEntryId); + if (result != 0) return result; + return (a.MainSenseId ?? Guid.Empty).CompareTo(b.MainSenseId ?? Guid.Empty); + }); + + public override string ToString() + { + return + $"{nameof(DeletedAt)}: {DeletedAt}, {nameof(VariantEntryId)}: {VariantEntryId}, {nameof(VariantHeadword)}: {VariantHeadword}, {nameof(MainEntryId)}: {MainEntryId}, {nameof(MainSenseId)}: {MainSenseId}, {nameof(MainHeadword)}: {MainHeadword}, Types: [{string.Join(", ", Types.Select(t => t.Id))}]"; + } +} diff --git a/backend/FwLite/MiniLcm/Models/VariantType.cs b/backend/FwLite/MiniLcm/Models/VariantType.cs new file mode 100644 index 0000000000..6533e4a73c --- /dev/null +++ b/backend/FwLite/MiniLcm/Models/VariantType.cs @@ -0,0 +1,29 @@ +namespace MiniLcm.Models; + +public record VariantType : IObjectWithId +{ + public virtual Guid Id { get; set; } + public virtual required MultiString Name { get; set; } + + public DateTimeOffset? DeletedAt { get; set; } + + public Guid[] GetReferences() + { + return []; + } + + public void RemoveReference(Guid id, DateTimeOffset time) + { + } + + public VariantType Copy() + { + return new VariantType { Id = Id, Name = Name.Copy(), DeletedAt = DeletedAt }; + } + + /// A per-link reference to this type (see ). + public VariantTypeRef ToRef() + { + return new VariantTypeRef { Id = Id }; + } +} diff --git a/backend/FwLite/MiniLcm/Models/VariantTypeRef.cs b/backend/FwLite/MiniLcm/Models/VariantTypeRef.cs new file mode 100644 index 0000000000..4da13ad045 --- /dev/null +++ b/backend/FwLite/MiniLcm/Models/VariantTypeRef.cs @@ -0,0 +1,25 @@ +namespace MiniLcm.Models; + +/// +/// One variant type assigned to a variant link (). Id is the +/// 's id — names resolve via the canonical type list. Order makes the +/// per-link sequence round-trip (liblcm's VariantEntryTypes is an ordered card="seq" reference +/// sequence); it works like . +/// +public class VariantTypeRef : IOrderable +{ + public required virtual Guid Id { get; set; } + public double Order { get; set; } + + public VariantTypeRef Copy() + { + return new VariantTypeRef { Id = Id, Order = Order }; + } + + public static int CompareRefs(VariantTypeRef a, VariantTypeRef b) + { + return a.Order == b.Order ? + a.Id.CompareTo(b.Id) : + a.Order.CompareTo(b.Order); + } +} diff --git a/backend/FwLite/MiniLcm/Normalization/MiniLcmApiWriteNormalizationWrapper.cs b/backend/FwLite/MiniLcm/Normalization/MiniLcmApiWriteNormalizationWrapper.cs index a43847bb50..f8964987ac 100644 --- a/backend/FwLite/MiniLcm/Normalization/MiniLcmApiWriteNormalizationWrapper.cs +++ b/backend/FwLite/MiniLcm/Normalization/MiniLcmApiWriteNormalizationWrapper.cs @@ -207,6 +207,46 @@ private static ComplexFormType NormalizeComplexFormType(ComplexFormType cft) #endregion + #region VariantType + + public async Task CreateVariantType(VariantType variantType) + { + return await _api.CreateVariantType(NormalizeVariantType(variantType)); + } + + public Task UpdateVariantType(Guid id, UpdateObjectInput update) + { + return _api.UpdateVariantType(id, NormalizePatch(update)); + } + + // Overridden (rather than left to the interface default) so the sync's delete-wins semantics survive + // this wrapper — see the Submit* region in IMiniLcmWriteApi and the AGENTS.md "Submit* write variants" rule. + public Task SubmitUpdateVariantType(Guid id, UpdateObjectInput update) + { + return _api.SubmitUpdateVariantType(id, NormalizePatch(update)); + } + + + public async Task UpdateVariantType(VariantType before, VariantType after, IMiniLcmApi? api = null) + { + return await _api.UpdateVariantType(NormalizeVariantType(before), NormalizeVariantType(after), api); + } + + public Task DeleteVariantType(Guid id) + { + return _api.DeleteVariantType(id); + } + + private static VariantType NormalizeVariantType(VariantType vt) + { + return vt with + { + Name = StringNormalizer.Normalize(vt.Name) + }; + } + + #endregion + #region MorphType public async Task CreateMorphType(MorphType morphType) @@ -286,6 +326,47 @@ public Task RemoveComplexFormType(Guid entryId, Guid complexFormTypeId) return _api.RemoveComplexFormType(entryId, complexFormTypeId); } + public async Task CreateVariant(Variant variant) + { + return await _api.CreateVariant(NormalizeVariant(variant)); + } + + // See SubmitUpdateVariantType above: forward to _api.SubmitCreateVariant so delete-wins is preserved. + public Task SubmitCreateVariant(Variant variant) + { + return _api.SubmitCreateVariant(NormalizeVariant(variant)); + } + + public async Task UpdateVariant(Variant before, Variant after, IMiniLcmApi? api = null) + { + return await _api.UpdateVariant(NormalizeVariant(before), NormalizeVariant(after), api); + } + + public Task SubmitUpdateVariant(Variant variant, UpdateObjectInput update) + { + return _api.SubmitUpdateVariant(variant, NormalizePatch(update)); + } + + public Task DeleteVariant(Variant variant) + { + return _api.DeleteVariant(variant); + } + + public Task AddVariantType(Variant variant, Guid variantTypeId, BetweenPosition? position = null) + { + return _api.AddVariantType(variant, variantTypeId, position); + } + + public Task RemoveVariantType(Variant variant, Guid variantTypeId) + { + return _api.RemoveVariantType(variant, variantTypeId); + } + + public Task MoveVariantType(Variant variant, Guid variantTypeId, BetweenPosition position) + { + return _api.MoveVariantType(variant, variantTypeId, position); + } + public Task AddPublication(Guid entryId, Guid publicationId) { return _api.AddPublication(entryId, publicationId); @@ -306,7 +387,9 @@ private static Entry NormalizeEntry(Entry entry) Note = StringNormalizer.Normalize(entry.Note), Senses = [.. entry.Senses.Select(NormalizeSense)], Components = [.. entry.Components.Select(NormalizeComplexFormComponent)], - ComplexForms = [.. entry.ComplexForms.Select(NormalizeComplexFormComponent)] + ComplexForms = [.. entry.ComplexForms.Select(NormalizeComplexFormComponent)], + VariantOf = [.. entry.VariantOf.Select(NormalizeVariant)], + Variants = [.. entry.Variants.Select(NormalizeVariant)] }; } @@ -319,6 +402,18 @@ private static ComplexFormComponent NormalizeComplexFormComponent(ComplexFormCom }; } + private static Variant NormalizeVariant(Variant variant) + { + return variant with + { + VariantHeadword = StringNormalizer.Normalize(variant.VariantHeadword), + MainHeadword = StringNormalizer.Normalize(variant.MainHeadword), + Comment = StringNormalizer.Normalize(variant.Comment), + // type refs carry no strings to normalize; copy to keep before/after lists independent + Types = [.. variant.Types.Select(t => t.Copy())] + }; + } + #endregion #region Sense diff --git a/backend/FwLite/MiniLcm/ProjectSnapshot.cs b/backend/FwLite/MiniLcm/ProjectSnapshot.cs index f6c880fe76..85c962bea5 100644 --- a/backend/FwLite/MiniLcm/ProjectSnapshot.cs +++ b/backend/FwLite/MiniLcm/ProjectSnapshot.cs @@ -9,7 +9,13 @@ public record ProjectSnapshot( SemanticDomain[] SemanticDomains, ComplexFormType[] ComplexFormTypes, MorphType[] MorphTypes, + VariantType[] VariantTypes, WritingSystems WritingSystems) { - public static ProjectSnapshot Empty { get; } = new([], [], [], [], [], [], new WritingSystems()); + public static ProjectSnapshot Empty { get; } = new([], [], [], [], [], [], [], new WritingSystems()); + + //Snapshots and templates serialized before variant support have no VariantTypes property, so + //System.Text.Json passes null for the constructor parameter; this init coalesces it back to + //empty (covered by the legacy SnapshotDeserializationRegressionData test). + public VariantType[] VariantTypes { get; init; } = VariantTypes ?? []; } diff --git a/backend/FwLite/MiniLcm/SyncHelpers/BoolDiff.cs b/backend/FwLite/MiniLcm/SyncHelpers/BoolDiff.cs new file mode 100644 index 0000000000..76f985b10d --- /dev/null +++ b/backend/FwLite/MiniLcm/SyncHelpers/BoolDiff.cs @@ -0,0 +1,14 @@ +using SystemTextJsonPatch.Operations; + +namespace MiniLcm.SyncHelpers; + +public static class BoolDiff +{ + public static IEnumerable> GetBoolDiff(string path, + bool before, + bool after) where T : class + { + if (before == after) yield break; + yield return new Operation("replace", $"/{path}", null, after); + } +} diff --git a/backend/FwLite/MiniLcm/SyncHelpers/EntrySync.cs b/backend/FwLite/MiniLcm/SyncHelpers/EntrySync.cs index 353b905113..da92e63603 100644 --- a/backend/FwLite/MiniLcm/SyncHelpers/EntrySync.cs +++ b/backend/FwLite/MiniLcm/SyncHelpers/EntrySync.cs @@ -70,6 +70,8 @@ public static async Task SyncComplexFormsAndComponents(Entry beforeEntry, E var changes = 0; changes += await SyncComplexFormComponents(beforeEntry.Components, afterEntry.Components, api); changes += await SyncComplexForms(beforeEntry.ComplexForms, afterEntry.ComplexForms, api); + changes += await SyncVariants(beforeEntry.VariantOf, afterEntry.VariantOf, api); + changes += await SyncVariants(beforeEntry.Variants, afterEntry.Variants, api); return changes; } catch (Exception e) @@ -118,6 +120,15 @@ private static async Task SyncComplexForms(IList befo ); } + private static async Task SyncVariants(IList beforeVariants, IList afterVariants, IMiniLcmApi api) + { + return await DiffCollection.Diff( + beforeVariants, + afterVariants, + new VariantsDiffApi(api) + ); + } + private static async Task SensesSync(Guid entryId, IList beforeSenses, IList afterSenses, @@ -153,13 +164,13 @@ private class EntriesDiffApi(IMiniLcmApi api, Dictionary allBeforeS { // Api.CreateEntry() is optimized and assumes all senses are new rather than moved. // So, we use the "smarter" SensesSync for the senses, which can handle moved senses. - addedEntry = await api.CreateEntry(afterEntry with { Senses = [] }, CreateEntryOptions.WithoutComplexFormsAndComponents); + addedEntry = await api.CreateEntry(afterEntry with { Senses = [] }, CreateEntryOptions.WithoutEntryReferences); await SensesSync(addedEntry.Id, [], afterEntry.Senses, api, allBeforeSenses, allAfterSenses); addedEntry = addedEntry with { Senses = afterEntry.Senses }; } else { - addedEntry = await api.CreateEntry(afterEntry, CreateEntryOptions.WithoutComplexFormsAndComponents); + addedEntry = await api.CreateEntry(afterEntry, CreateEntryOptions.WithoutEntryReferences); } return (1, addedEntry); } @@ -286,6 +297,33 @@ public Task Replace(ComplexFormComponent beforeComponent, ComplexFormCompon } } + private class VariantsDiffApi(IMiniLcmApi api) : CollectionDiffApi + { + public override (Guid, Guid, Guid?) GetId(Variant variant) + { + //we can't use the ID as there's none defined by Fw so it won't work as a sync key + return (variant.VariantEntryId, variant.MainEntryId, variant.MainSenseId); + } + + public override async Task Add(Variant after) + { + await api.SubmitCreateVariant(after); + return 1; + } + + public override async Task Remove(Variant before) + { + await api.DeleteVariant(before); + return 1; + } + + public override Task Replace(Variant beforeVariant, Variant afterVariant) + { + //endpoints match (same composite key) — sync the link's own data (types, HideMinorEntry, Comment) + return VariantSync.Sync(beforeVariant, afterVariant, api); + } + } + private class SensesDiffApi(IMiniLcmApi api, Guid entryId, Dictionary? allBeforeSenses, Dictionary? allAfterSenses) : IOrderableCollectionDiffApi { public Guid GetId(Sense sense) diff --git a/backend/FwLite/MiniLcm/SyncHelpers/VariantSync.cs b/backend/FwLite/MiniLcm/SyncHelpers/VariantSync.cs new file mode 100644 index 0000000000..92bbf8177f --- /dev/null +++ b/backend/FwLite/MiniLcm/SyncHelpers/VariantSync.cs @@ -0,0 +1,66 @@ +using MiniLcm.Models; +using SystemTextJsonPatch; + +namespace MiniLcm.SyncHelpers; + +public static class VariantSync +{ + /// + /// Syncs one variant link's own data (types, HideMinorEntry, Comment). The link is + /// located by its composite key; changing endpoints is delete-and-recreate, handled by + /// the collection diff in . + /// + public static async Task Sync(Variant before, Variant after, IMiniLcmApi api) + { + var changes = 0; + var updateObjectInput = VariantDiffToUpdate(before, after); + if (updateObjectInput is not null) + { + await api.SubmitUpdateVariant(after, updateObjectInput); + changes++; + } + changes += await DiffCollection.DiffOrderable(before.Types, after.Types, new VariantTypesDiffApi(api, after)); + return changes; + } + + public static UpdateObjectInput? VariantDiffToUpdate(Variant before, Variant after) + { + JsonPatchDocument patchDocument = new(); + patchDocument.Operations.AddRange(BoolDiff.GetBoolDiff(nameof(Variant.HideMinorEntry), before.HideMinorEntry, after.HideMinorEntry)); + patchDocument.Operations.AddRange(MultiStringDiff.GetMultiStringDiff(nameof(Variant.Comment), before.Comment, after.Comment)); + if (patchDocument.Operations.Count == 0) return null; + return new UpdateObjectInput(patchDocument); + } + + private class VariantTypesDiffApi(IMiniLcmApi api, Variant variant) : IOrderableCollectionDiffApi + { + public Guid GetId(VariantTypeRef value) + { + return value.Id; + } + + public async Task Add(VariantTypeRef afterTypeRef, BetweenPosition between) + { + await api.AddVariantType(variant, afterTypeRef.Id, new BetweenPosition(between.Previous?.Id, between.Next?.Id)); + return 1; + } + + public async Task Move(VariantTypeRef typeRef, BetweenPosition between) + { + await api.MoveVariantType(variant, typeRef.Id, new BetweenPosition(between.Previous?.Id, between.Next?.Id)); + return 1; + } + + public async Task Remove(VariantTypeRef beforeTypeRef) + { + await api.RemoveVariantType(variant, beforeTypeRef.Id); + return 1; + } + + public Task Replace(VariantTypeRef before, VariantTypeRef after) + { + // the ref carries nothing but id + order; order differences are handled as moves + return Task.FromResult(0); + } + } +} diff --git a/backend/FwLite/MiniLcm/SyncHelpers/VariantTypeSync.cs b/backend/FwLite/MiniLcm/SyncHelpers/VariantTypeSync.cs new file mode 100644 index 0000000000..3ac8d7771e --- /dev/null +++ b/backend/FwLite/MiniLcm/SyncHelpers/VariantTypeSync.cs @@ -0,0 +1,56 @@ +using MiniLcm.Models; +using SystemTextJsonPatch; + +namespace MiniLcm.SyncHelpers; + +public static class VariantTypeSync +{ + public static async Task Sync(VariantType[] beforeVariantTypes, + VariantType[] afterVariantTypes, + IMiniLcmApi api) + { + return await DiffCollection.Diff( + beforeVariantTypes, + afterVariantTypes, + new VariantTypesDiffApi(api)); + } + + public static async Task Sync(VariantType before, + VariantType after, + IMiniLcmApi api) + { + var updateObjectInput = VariantTypeDiffToUpdate(before, after); + if (updateObjectInput is not null) await api.SubmitUpdateVariantType(after.Id, updateObjectInput); + return updateObjectInput is null ? 0 : 1; + } + + public static UpdateObjectInput? VariantTypeDiffToUpdate(VariantType before, VariantType after) + { + JsonPatchDocument patchDocument = new(); + patchDocument.Operations.AddRange(MultiStringDiff.GetMultiStringDiff(nameof(VariantType.Name), + before.Name, + after.Name)); + if (patchDocument.Operations.Count == 0) return null; + return new UpdateObjectInput(patchDocument); + } + + private class VariantTypesDiffApi(IMiniLcmApi api) : ObjectWithIdCollectionDiffApi + { + public override async Task Add(VariantType afterVariantType) + { + await api.CreateVariantType(afterVariantType); + return 1; + } + + public override async Task Remove(VariantType beforeVariantType) + { + await api.DeleteVariantType(beforeVariantType.Id); + return 1; + } + + public override Task Replace(VariantType beforeVariantType, VariantType afterVariantType) + { + return Sync(beforeVariantType, afterVariantType, api); + } + } +} diff --git a/backend/FwLite/MiniLcm/Validators/ComplexFormTypeValidator.cs b/backend/FwLite/MiniLcm/Validators/ComplexFormTypeValidator.cs index e4274afbb6..78b5de79ad 100644 --- a/backend/FwLite/MiniLcm/Validators/ComplexFormTypeValidator.cs +++ b/backend/FwLite/MiniLcm/Validators/ComplexFormTypeValidator.cs @@ -8,6 +8,6 @@ internal class ComplexFormTypeValidator : AbstractValidator public ComplexFormTypeValidator() { RuleFor(c => c.DeletedAt).Null(); - RuleFor(c => c.Name).Required(c => c.Id.ToString("D")); + RuleFor(c => c.Name).Required(c => c.Id.ToString("D")).NoEmptyValues(c => c.Id.ToString("D")); } } diff --git a/backend/FwLite/MiniLcm/Validators/EntryValidator.cs b/backend/FwLite/MiniLcm/Validators/EntryValidator.cs index 3874801821..33a40fc5d3 100644 --- a/backend/FwLite/MiniLcm/Validators/EntryValidator.cs +++ b/backend/FwLite/MiniLcm/Validators/EntryValidator.cs @@ -22,6 +22,14 @@ public EntryValidator() // RuleForEach(e => e.ComplexForms).SetValidator(entry => new ComplexFormComponentValidator(entry)); // TODO: Not implemented yet // TODO: ComplexFormComponentValidator(entry) might need to know the "direction" of the entry it's validating, i.e. one class for "I'm a component" and another for "I'm the complex entry" RuleForEach(e => e.ComplexFormTypes).SetValidator(new ComplexFormTypeValidator()); + RuleForEach(e => e.VariantOf).Must(NotBeEmptyMainEntryReference).WithMessage("Variant main-entry reference must not be empty."); + RuleForEach(e => e.VariantOf).Must(NotBeVariantOfSelfReference).WithMessage("Variant main-entry reference must not be the same as the entry."); + RuleForEach(e => e.VariantOf).Must(HaveCorrectVariantEntryReference).WithMessage("Variant entry reference must be correct."); + RuleForEach(e => e.Variants).Must(NotBeEmptyVariantEntryReference).WithMessage("Variant entry reference must not be empty."); + RuleForEach(e => e.Variants).Must(NotBeVariantSelfReference).WithMessage("Variant entry reference must not be the same as the entry."); + RuleForEach(e => e.Variants).Must(HaveCorrectMainEntryReference).WithMessage("Variant main-entry reference must be correct."); + RuleForEach(e => e.VariantOf).SetValidator(new VariantValidator()); + RuleForEach(e => e.Variants).SetValidator(new VariantValidator()); } private bool NotBeEmptyComponentReference(Entry entry, ComplexFormComponent component) @@ -51,6 +59,38 @@ private bool HaveCorrectComponentEntryReference(Entry entry, ComplexFormComponen return component.ComponentEntryId == entry.Id || component.ComponentEntryId == Guid.Empty; } + private bool NotBeEmptyMainEntryReference(Entry entry, Variant variant) + { + return variant.MainEntryId != Guid.Empty; + } + + private bool NotBeEmptyVariantEntryReference(Entry entry, Variant variant) + { + return variant.VariantEntryId != Guid.Empty; + } + + private bool NotBeVariantOfSelfReference(Entry entry, Variant variant) + { + return variant.MainEntryId != entry.Id; + } + + private bool HaveCorrectVariantEntryReference(Entry entry, Variant variant) + { + // Empty GUID is okay here because it can be guessed from the parent object + return variant.VariantEntryId == entry.Id || variant.VariantEntryId == Guid.Empty; + } + + private bool NotBeVariantSelfReference(Entry entry, Variant variant) + { + return variant.VariantEntryId != entry.Id || variant.VariantEntryId == Guid.Empty; + } + + private bool HaveCorrectMainEntryReference(Entry entry, Variant variant) + { + // Empty GUID is okay here because it can be guessed from the parent object + return variant.MainEntryId == entry.Id || variant.MainEntryId == Guid.Empty; + } + private string GetEntryIdentifier(Entry entry) { return $"{entry.Headword()} - {entry.Id}"; diff --git a/backend/FwLite/MiniLcm/Validators/JsonPatchValidator.cs b/backend/FwLite/MiniLcm/Validators/JsonPatchValidator.cs index aef0322f66..1fd8beec4c 100644 --- a/backend/FwLite/MiniLcm/Validators/JsonPatchValidator.cs +++ b/backend/FwLite/MiniLcm/Validators/JsonPatchValidator.cs @@ -20,6 +20,24 @@ string propertyName//todo handle this better }); } + /// + /// Unlike this also rejects operations on paths + /// under the property (e.g. "/Types/0"), for list properties that must not be patched by index. + /// + public static IRuleBuilderOptionsConditions, JsonPatchDocument> DoesNotChangePropertyOrChildren( + this IRuleBuilder, JsonPatchDocument> builder, + string propertyName + ) where T : class + { + return builder.Custom((document, context) => + { + if (document.Operations.Any(o => + string.Equals(o.Path, $"/{propertyName}", StringComparison.InvariantCultureIgnoreCase) + || (o.Path?.StartsWith($"/{propertyName}/", StringComparison.InvariantCultureIgnoreCase) ?? false))) + context.AddFailure(propertyName, "Not allowed to update " + propertyName); + }); + } + public static IRuleBuilderOptionsConditions, JsonPatchDocument> DoesNotChangePropertyTo( this IRuleBuilder, JsonPatchDocument> builder, string propertyName, diff --git a/backend/FwLite/MiniLcm/Validators/MiniLcmApiValidationWrapper.cs b/backend/FwLite/MiniLcm/Validators/MiniLcmApiValidationWrapper.cs index db2019ae15..98ffb92f57 100644 --- a/backend/FwLite/MiniLcm/Validators/MiniLcmApiValidationWrapper.cs +++ b/backend/FwLite/MiniLcm/Validators/MiniLcmApiValidationWrapper.cs @@ -129,6 +129,44 @@ public async Task UpdateComplexFormType(ComplexFormType before, return await _api.UpdateComplexFormType(before, after, api ?? this); } + public async Task CreateVariantType(VariantType variantType) + { + await validators.ValidateAndThrow(variantType); + return await _api.CreateVariantType(variantType); + } + + public async Task UpdateVariantType(VariantType before, VariantType after, IMiniLcmApi? api = null) + { + await validators.ValidateAndThrow(after); + return await _api.UpdateVariantType(before, after, api ?? this); + } + + public async Task CreateVariant(Variant variant) + { + await validators.ValidateAndThrow(variant); + return await _api.CreateVariant(variant); + } + + public async Task UpdateVariant(Variant before, Variant after, IMiniLcmApi? api = null) + { + await validators.ValidateAndThrow(after); + return await _api.UpdateVariant(before, after, api ?? this); + } + + // Submit* must be overridden explicitly: BeaKona's generated forwarders bypass the + // interface default bodies and go straight to _api, silently skipping validation (#2362) + public async Task SubmitCreateVariant(Variant variant) + { + await validators.ValidateAndThrow(variant); + await _api.SubmitCreateVariant(variant); + } + + public async Task SubmitUpdateVariant(Variant variant, UpdateObjectInput update) + { + await validators.ValidateAndThrow(update); + await _api.SubmitUpdateVariant(variant, update); + } + public async Task UpdateMorphType(Guid id, UpdateObjectInput update) { await validators.ValidateAndThrow(update); diff --git a/backend/FwLite/MiniLcm/Validators/MiniLcmValidators.cs b/backend/FwLite/MiniLcm/Validators/MiniLcmValidators.cs index 4d516f6583..7dce6846c7 100644 --- a/backend/FwLite/MiniLcm/Validators/MiniLcmValidators.cs +++ b/backend/FwLite/MiniLcm/Validators/MiniLcmValidators.cs @@ -8,6 +8,8 @@ namespace MiniLcm.Validators; public record MiniLcmValidators( IValidator ComplexFormTypeValidator, + IValidator VariantTypeValidator, + IValidator VariantValidator, IValidator MorphTypeValidator, IValidator EntryValidator, IValidator SenseValidator, @@ -18,13 +20,24 @@ public record MiniLcmValidators( IValidator PublicationValidator, IValidator> MorphTypeUpdateValidator, IValidator> WritingSystemUpdateValidator, - IValidator> PublicationUpdateValidator) + IValidator> PublicationUpdateValidator, + IValidator> VariantUpdateValidator) { public async Task ValidateAndThrow(ComplexFormType value) { await ComplexFormTypeValidator.ValidateAndThrowAsync(value); } + public async Task ValidateAndThrow(VariantType value) + { + await VariantTypeValidator.ValidateAndThrowAsync(value); + } + + public async Task ValidateAndThrow(Variant value) + { + await VariantValidator.ValidateAndThrowAsync(value); + } + public async Task ValidateAndThrow(MorphType value) { await MorphTypeValidator.ValidateAndThrowAsync(value); @@ -79,6 +92,11 @@ public async Task ValidateAndThrow(UpdateObjectInput update) { await PublicationUpdateValidator.ValidateAndThrowAsync(update); } + + public async Task ValidateAndThrow(UpdateObjectInput update) + { + await VariantUpdateValidator.ValidateAndThrowAsync(update); + } } public static class MiniLcmValidatorsExtensions @@ -88,6 +106,8 @@ public static IServiceCollection AddMiniLcmValidators(this IServiceCollection se services.AddTransient(); services.AddTransient(); services.AddTransient, ComplexFormTypeValidator>(); + services.AddTransient, VariantTypeValidator>(); + services.AddTransient, VariantValidator>(); services.AddTransient, MorphTypeValidator>(); services.AddTransient, EntryValidator>(); services.AddTransient, SenseValidator>(); @@ -99,6 +119,7 @@ public static IServiceCollection AddMiniLcmValidators(this IServiceCollection se services.AddTransient>, MorphTypeUpdateValidator>(); services.AddTransient>, WritingSystemUpdateValidator>(); services.AddTransient>, PublicationUpdateValidator>(); + services.AddTransient>, VariantUpdateValidator>(); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/backend/FwLite/MiniLcm/Validators/VariantTypeValidator.cs b/backend/FwLite/MiniLcm/Validators/VariantTypeValidator.cs new file mode 100644 index 0000000000..c58d342b5b --- /dev/null +++ b/backend/FwLite/MiniLcm/Validators/VariantTypeValidator.cs @@ -0,0 +1,13 @@ +using FluentValidation; +using MiniLcm.Models; + +namespace MiniLcm.Validators; + +internal class VariantTypeValidator : AbstractValidator +{ + public VariantTypeValidator() + { + RuleFor(c => c.DeletedAt).Null(); + RuleFor(c => c.Name).Required(c => c.Id.ToString("D")).NoEmptyValues(c => c.Id.ToString("D")); + } +} diff --git a/backend/FwLite/MiniLcm/Validators/VariantUpdateValidator.cs b/backend/FwLite/MiniLcm/Validators/VariantUpdateValidator.cs new file mode 100644 index 0000000000..727ff38699 --- /dev/null +++ b/backend/FwLite/MiniLcm/Validators/VariantUpdateValidator.cs @@ -0,0 +1,26 @@ +using FluentValidation; +using MiniLcm.Models; + +namespace MiniLcm.Validators; + +/// +/// Patches may only touch a link's own scalar data (HideMinorEntry, Comment). Types has +/// dedicated changes (Add/RemoveVariantType) so concurrent edits merge; patching it by index +/// would silently target whatever happens to sit at that position. Endpoints are +/// delete-and-recreate, and headwords are derived caches. +/// +public class VariantUpdateValidator : AbstractValidator> +{ + public VariantUpdateValidator() + { + RuleFor(u => u.Patch).DoesNotChangePropertyOrChildren(nameof(Variant.Types)); + RuleFor(u => u.Patch).DoesNotChangeProperty(nameof(Variant.VariantEntryId)); + RuleFor(u => u.Patch).DoesNotChangeProperty(nameof(Variant.MainEntryId)); + RuleFor(u => u.Patch).DoesNotChangeProperty(nameof(Variant.MainSenseId)); + RuleFor(u => u.Patch).DoesNotChangeProperty(nameof(Variant.VariantHeadword)); + RuleFor(u => u.Patch).DoesNotChangeProperty(nameof(Variant.MainHeadword)); + RuleFor(u => u.Patch).DoesNotChangeProperty(nameof(Variant.DeletedAt)); + RuleFor(u => u.Patch).DoesNotChangeProperty(nameof(Variant.Id)); + RuleFor(u => u.Patch.Operations).NotEmpty(); + } +} diff --git a/backend/FwLite/MiniLcm/Validators/VariantValidator.cs b/backend/FwLite/MiniLcm/Validators/VariantValidator.cs new file mode 100644 index 0000000000..969fe05754 --- /dev/null +++ b/backend/FwLite/MiniLcm/Validators/VariantValidator.cs @@ -0,0 +1,26 @@ +using FluentValidation; +using MiniLcm.Models; + +namespace MiniLcm.Validators; + +internal class VariantValidator : AbstractValidator +{ + public VariantValidator() + { + RuleFor(v => v.DeletedAt).Null(); + //one endpoint may be an empty guid when nested in an entry (inferred from the parent), + //so only reject self-reference when both are set + RuleFor(v => v) + .Must(v => v.VariantEntryId == Guid.Empty || v.VariantEntryId != v.MainEntryId) + .WithMessage(v => $"Variant {GetIdentifier(v)} must not be a variant of itself."); + RuleFor(v => v.Comment).NoEmptyValues(GetIdentifier).NoDefaultWritingSystems(GetIdentifier); + RuleForEach(v => v.Types) + .Must(t => t.Id != Guid.Empty) + .WithMessage(v => $"Variant {GetIdentifier(v)} has a type reference without an id."); + } + + private string GetIdentifier(Variant variant) + { + return $"{variant.VariantHeadword} -> {variant.MainHeadword} ({variant.VariantEntryId} -> {variant.MainEntryId})"; + } +} diff --git a/backend/FwLite/VARIANTS.md b/backend/FwLite/VARIANTS.md new file mode 100644 index 0000000000..2ed5fba1b1 --- /dev/null +++ b/backend/FwLite/VARIANTS.md @@ -0,0 +1,414 @@ +# Variants in FieldWorks Lite — design & work log + +Working document for adding variant support to FwLite (model → sync → UI). Written so any +dev/agent can pick up the work mid-stream. Update the **Status** section as steps land. + +## Status + +- [x] Exploration (complex-forms blueprint, liblcm variant model, viewer UI) +- [x] Design review with Tim (2026-07-03): per-link model confirmed, naming settled +- [x] Step 1+2 — model, changes, both APIs, sync orchestration + round-trip suite + (all backend suites green: MiniLcm.Tests, LcmCrdt.Tests, FwDataMiniLcmBridge.Tests, + FwLiteProjectSync.Tests incl. Sena3 live db regen; the WS-font failure on Windows is + the known local-only false-fail) +- [x] Step 3 — Viewer UI (fields, per-link type menu, demo seed, i18n, Playwright green) +- [x] Review iterations — see "Review & verification log" below; ALL automated review is + done and green +- [x] Human review round on the cumulative PR (#2410): all of hahn-kev's findings + implemented (see the review-response commits), incl. reworking variant type order to + per-item orders (pictures pattern) +- [ ] **Next: review the 3-PR stack, merging in order** — + 1. `feat/variants-model-sync` (this PR: model through sync; pay special attention to + `Match liblcm variant/component semantics` — it changes shipped + `AddEntryComponentChange` replay semantics, see decision 7 + rollout notes) + 2. `feat/variants-editor` (viewer editing UI, stacked) + 3. `feat/variants-visibility` (variant badges/preview + custom-view coverage, stacked) + +## Review & verification log + +The user-mandated workflow was: per step, polish → open a non-draft PR (so CodeRabbit +reviews) → handle all CodeRabbit feedback → make Devin + CI green → close the PR +(NOT merged) → next iteration opens a cumulative PR. PR closures are workflow, not +abandonment. + +- **Iteration 1 — backend, [#2408](https://github.com/sillsdev/languageforge-lexbox/pull/2408) + (now closed on purpose)**: /polish agent suite; CodeRabbit round (2 accepted: sense-ownership + guard on variant create + `NotBeEmptyVariantEntryReference`; 3 rejected with posted replies); + Devin clean; CI 27/27 at `55d4485cd`. [#2409](https://github.com/sillsdev/languageforge-lexbox/pull/2409) + (stacked UI draft) closed as superseded. +- **Iteration 2 — cumulative backend+UI, [#2410](https://github.com/sillsdev/languageforge-lexbox/pull/2410) + (now closed, base develop)**: scoped /polish clean; CodeRabbit round (doc fixes accepted, picker + cycle-guard suggestion rejected as complex-form-picker precedent); Devin clean ×3; CI green. +- **liblcm deep review (4 parallel agents, every claim cited against `D:\code\liblcm` + source)** → commit `0d03aed28`, the highest-risk commit in the stack. Found and fixed: + (a) CRDT rejected sense-targeted variant graphs FLEx accepts → sync would delete legal + links (decision 7's `AllComponents` no-recurse rule); (b) `AddEntryComponentChange` missed + mixed cycles liblcm rejects → mid-sync wedge; (c) per-link edits on FLEx shared + multi-target refs silently edited sibling links → split-before-mutate; plus read + hardening + `HideMinorEntry` bitfield guard. +- **Merge-hardening (`aff08b562`)**: targeted mutation testing (3/3 mutants killed; the + surviving would-be mutant exposed the missing `HideMinorEntry` bitfield test, now added); + `CreateLinks_MatchTheLcmCycleRuleOnRandomGraphs` — a seeded random-graph differential test + in `VariantTestsBase` asserting both implementations accept/reject exactly per an inline + port of LCM's `AllComponents` oracle (the FwData side runs real liblcm, so this is + empirical conformance, not source-reading); maintainer-simulation review → truthful PR + framing, rollout-note completeness, this log. +- **Verification commands used** (all green at `aff08b562`): FwData + CRDT variant/component + suites filtered, `FwLiteProjectSync.Tests --filter Sena3` (16/16), viewer + check/lint/vitest/Playwright. + +**Boundary change vs the original plan**: steps 1 and 2 merged — the moment the FwData +bridge reads variants, importing a variant-containing project crashes unless variant types +are imported before entries, so a "model-only" PR can't be green against real projects. +Final split: one backend PR (model through sync) + one UI PR stacked on it. + +### Step 2/3 decision addenda + +- **Deterministic variant-list order on both sides** (`Variant.VariantOfOrder`/`VariantsOrder`, + composite-key based, culture-free). ComplexForms sort alphabetically because FieldWorks + does; variants have no such convention, and guid order keeps snapshot comparisons and + sync stable across cultures. UI can sort for display later if wanted. +- **`CrdtMiniLcmApi.BulkCreateEntries`** (import fast path) emits `AddVariantChange` with the + same only-if-other-endpoint-already-created trick as components. +- **Sena3 verified live db/snapshot regenerated**: sena-3 really contains variants + (*inde*→*ande*, *yenda*→*enda*, custom bilingual "Pronunciation Variant" type), which now + round-trip — the diff was inspected and is purely additive. +- **Blank-project template regenerated**: new CRDT projects seed the 7 standard FLEx variant + types (well-known guids). +- **UI**: `Variant of` (picker: entries-and-senses) and `Variants` (picker: only-entries) + fields, both shown by default in both views; per-link variant types via a "Variant type" + checkbox submenu on each link badge; new links default to *Unspecified Variant* (FLEx + behavior); all edits flow through `updateEntry` (before/after diff → EntrySync), so the + in-memory demo works without dedicated endpoints. `useVariantTypes()` is **eager** — + the type list must be loaded before the first pick applies the default. +- **helpIds**: `Variant_of_field.htm` verified to exist (fetched); there's no dedicated + FLEx topic for the Variants back-reference field, so it reuses the same topic. + +## The LCM model (authority: liblcm) + +A variant relationship is a `LexEntryRef` **owned by the variant (minor) entry** +(`LexEntry.EntryRefsOS`), with: + +| LexEntryRef field | Variant usage | FLEx UI label | +|---|---|---| +| `RefType` | `LexEntryRefTags.krtVariant` (= 0; complex form = 1) | — | +| `ComponentLexemesRS` | The main entry **or sense** this is a variant of. Sequence — multiple targets allowed by the model; FLEx UI uses one per ref. | "Variant of" | +| `VariantEntryTypesRS` | Types from `LexDb.VariantEntryTypesOA` (per ref!) | "Variant Type" | +| `HideMinorEntry` | 0 = show as minor entry (default on create) | "Show Minor Entry" (inverted) | +| `Summary` | Per-ref note | "Comment" | +| `PrimaryLexemesRS` | **Unused** for variants (complex-forms only) | — | + +Key liblcm business rules (`SIL.LCModel/DomainImpl/OverridesLing_Lex.cs`): + +- `LexEntry.MakeVariantOf` creates the ref with `HideMinorEntry = 0` and defaults the type + to *Unspecified Variant* when none is given. +- A `LexEntryRef` is deleted when its `ComponentLexemesRS` becomes empty (merge/cleanup paths). +- An entry can own **multiple** variant refs (e.g. variant of two entries with different + types); back-refs (`VariantFormEntryBackRefs`, also on senses) are computed. +- Variant entries **may have senses** (no model restriction). An entry created *as* a variant + has none; an entry converted to a variant keeps its senses (FLEx course A7: *pagaye* vs + *placoter*). + +The variant-types list is **hierarchical**: *Irregularly Inflected Form* (a `LexEntryInflType`) +has child types *Plural* and *Past*. `LexEntryInflType` extends `LexEntryType` with +`GlossPrepend/GlossAppend/InflFeatsOA/SlotsRC` (not modeled in v1). Well-known GUIDs: +Unspecified `3942addb…`, Dialectal `024b62c9…`, Free `4343b1ef…`, Spelling `0c4663b3…`, +Irregularly Inflected Form `01d4fbc1…`, Plural `a32f1d1c…`, Past `837ebe72…`. + +## Design: one link = one LexEntryRef (per-link types) + +**FLEx compatibility is the top priority** (Tim, design review): we don't have to model every +field, but what we model must round-trip losslessly. Variant Type / Show Minor Entry / +Comment are **per relationship** in FLEx (they live on the `LexEntryRef`), so the MiniLcm +link carries them — unlike complex forms, which flatten types to entry level. + +```csharp +public record Variant : IObjectWithId +{ + Guid Id; // synthetic in CRDT; unset when read from FwData (sync keys on the composite below) + Guid VariantEntryId; // the variant (minor) entry — owns the LexEntryRef in FW + string? VariantHeadword; // derived cache, like ComplexFormComponent headwords + Guid MainEntryId; // the entry this is a variant of (LCM: ComponentLexemes) + Guid? MainSenseId; // …or a specific sense of it + string? MainHeadword; // derived cache + List Types; // LexEntryRef.VariantEntryTypesRS + bool HideMinorEntry; // LexEntryRef.HideMinorEntry != 0 (LCM polarity kept; UI shows "Show minor entry" inverted) + RichMultiString Comment; // LexEntryRef.Summary (FLEx UI labels it "Comment") + DateTimeOffset? DeletedAt; +} +``` + +- **`Entry.Variants: List`** — links where this entry (or one of its senses) is the + main. Matches the FLEx "Variants" section on a main entry. +- **`Entry.VariantOf: List`** — links where this entry is the variant. Matches the + FLEx "Variant of" field on a minor entry. +- **`VariantType`**: `Id`, `Name`, `DeletedAt` — same shape as `ComplexFormType`, a + first-class CRDT object with its own sync. +- Sync key: **composite `(VariantEntryId, MainEntryId, MainSenseId)`**, never `Id` + (FW-side links are keyed by the ref they live in; ids don't line up across sides — + same rule as `ComplexFormComponent`). + +### Decisions (and the reasoning) + +1. **Per-link model, not complex-form parity flattening** (Tim confirmed). One `Variant` = + one `LexEntryRef` with exactly one target. Reading a multi-target ref (model-legal, rare, + not creatable in FLEx UI) yields one link per target sharing the ref's types/fields; + writing back would split into per-link refs. Two refs to the *same* target collapse to + one link (composite-key dedupe, first ref wins) — documented edge, mirrors complex forms. +2. **Naming leans FLEx-user-facing, not LCM-internal** (Tim: "Component = the main entry" is + unintuitive, even though liblcm's `ComponentLexemesRS` is exactly that). Hence + `MainEntryId`/`MainSenseId`, record name `Variant`, entry fields `Variants`/`VariantOf`. + `Comment` (FLEx label) maps to LCM `Summary`; precedent: MiniLcm `Entry.Note` ↔ LCM + `LexEntry.Comment`. `HideMinorEntry` keeps LCM's name *and polarity* so bridge code never + flips signs; the UI can present "Show minor entry". +3. **`HideMinorEntry` + `Comment` are modeled and synced in v1, UI deferred** (Tim). Cheap on + the link entity, avoids a second migration + sync fanout later, and deleting/recreating a + link in FWL can never silently drop FLEx data. +4. **Variant types are read *flattened*** (`GetVariantTypes` must be changed — it exists today + reading only top-level `PossibilitiesOS`): the IIF subtypes (*Plural*, *Past*) are children + in the list and are what IIF-heavy projects assign. Creating a type missing on the other + side creates a **plain top-level `LexEntryType`** — standard types exist everywhere + (well-known GUIDs), so this is rare; hierarchy and `LexEntryInflType` payloads don't + round-trip in v1. +5. **Link edits are allowed** (unlike complex forms' "delete and recreate"): type add/remove + are dedicated CRDT changes on the link (`AddVariantTypeChange`/`RemoveVariantTypeChange`, + `EditChange`); `HideMinorEntry`/`Comment` sync via `JsonPatchChange`. + This is what makes concurrent type edits merge instead of last-writer-wins. +6. **No link ordering; type order is real.** Variant *link* lists have no user-meaningful + order in FLEx; both directions diff as sets — no `IOrderable`, no `SetOrderChange`, no Move + API for links. A link's `Types` sequence IS ordered (liblcm's `VariantEntryTypes` is a + `card="seq"` reference sequence), so it round-trips per-item like sense pictures: + `VariantTypeRef.Order` (fractional), `AddVariantType`/`MoveVariantType(…, BetweenPosition)`, + and `ReorderVariantTypeChange` (merges per type under concurrency). Reworked on review from + the earlier whole-list `SetVariantTypesOrderChange` design (197804694). +7. **Self-references, duplicates AND cycles are rejected; chains are allowed.** (This + decision reversed mid-implementation: `MakeVariantOf` has no cycle check, but the FwData + conformance tests proved liblcm rejects circular refs at a lower level — + `LexEntryRef.ValidateAddObjectInternal` → `LexEntry.AllComponents`, which walks the + **combined** complex-form + variant component graph. Allowing in the CRDT what FLEx + rejects would wedge sync, so `AddVariantChange` mirrors the combined-graph walk.) + The duplicate/cycle guard lives in `AddVariantChange` (soft-delete, sync-tolerant); + self-reference is additionally rejected by `VariantValidator` in the validation wrapper + (consistent across both implementations). Chains (a variant of a variant) remain legal, + as in FLEx. Two liblcm subtleties both change classes mirror exactly (shared walk in + `ComponentGraph`): `AllComponents` resolves a **sense-targeted** component to its owning + entry but does **not recurse** into it (so some loops through sense targets are legal in + FLEx and must stay legal here), while the *added* component's entry is always walked in + full. `AddEntryComponentChange` was aligned to the same combined walk — its old + complex-form-only walk accepted mixed cycles that liblcm rejects at sync time (a wedge), + and recursed past sense targets (over-rejecting vs FLEx). That loosening only affects + the rare pre-existing sense-cycle shape; pre-variants data is otherwise unaffected + (no `Variant` rows to walk). +8. **Deleted `VariantType` cleanup**: `Variant.GetReferences()` includes its `Types` ids, and + `RemoveReference` removes the type from the list (only endpoint ids soft-delete the link). + Better than the complex-forms quirk where deleted types linger in `Entry.ComplexFormTypes`. + Like `Entry.ComplexFormTypes`, `Variant.Types` stores denormalized copies (jsonb) that are + matched by id; a type *rename* updates only the canonical `VariantType` row (the embedded + `Name` copies go stale — the sync diff's `Replace` is deliberately a no-op, same as + `ComplexFormTypesDiffApi`). That never surfaces: the viewer and FwData writes resolve + names/refs via the canonical row, using the embedded copies only for their ids. +9. **Variant entries with no senses are first-class** and must be covered by tests both ways + (headline behavioral difference; FLEx "Insert Variant" creates sense-less entries). +10. **A variant can target a sense** (`MainSenseId`); on the main side such links still + surface under the owning entry's `Variants`. +11. **Minor-entry visibility in FWL UI** (step 3): users must be able to see at a glance that + an entry is a variant, not a first-class entry (badge / "Variant of X" in the editor; + list styling is a follow-up). +12. **FLEx ref shapes that don't fit the composite-key model** (one link per + (VariantEntryId, MainEntryId, MainSenseId)): + - *Shared refs* — one `LexEntryRef` with several targets shares Types/HideMinorEntry/ + Comment across them. Reads fan the ref out into one `Variant` per target; per-link + **edits split the target out into its own single-component ref first** + (`FindVariantRefForUpdate`, copying the shared fields) so the sibling links are never + silently edited. FLEx's own `FindMatchingVariantEntryRef` likewise refuses to reuse + multi-component refs. + - *Duplicate refs* — two refs from the same variant entry to the same target collapse to + one link on read (`DistinctBy` composite key); the extra ref stays in FwData untouched + (never entering the snapshot, it never diffs) and `DeleteVariant` removes the target + from all of them. + - `HideMinorEntry` is an LCM **int reserved as a per-publication bitfield**; we model the + current 0/non-0 semantics as a bool and only write when the bool flips, so a future + multi-bit value isn't collapsed to 1. + - Deleting *Irregularly Inflected Form* cascades to its owned children (Plural/Past) in + FwData but not in the flat CRDT type list; the next `VariantTypeSync` reconciles + (direction-dependent), so it self-heals without touching entry data. + +### FwData bridge mapping + +Read (`FwDataMiniLcmApi.FromLexEntry`): +- `VariantOf` ← each `entry.VariantEntryRefs` ref × each `ComponentLexemesRS` target + (`ILexEntry`/`ILexSense`), `DistinctBy` composite key; per-link `Types`/`HideMinorEntry`/ + `Comment` from the ref. +- `Variants` ← back-refs: `entry.VariantFormEntryBackRefs` + per-sense back-refs (verify + exact liblcm property names at impl time), mapped the same way. +- `GetVariantTypes()` ← `LexDb.VariantEntryTypesOA` **flattened** (decision 4). + +Write: +- `CreateVariant` → **new** `LexEntryRef` on the variant entry (`RefType = krtVariant`), + `HideMinorEntry`/`Summary`/types from the link, add the single target. Idempotent when the + composite already exists. +- `DeleteVariant` → find the ref holding the target; remove the target; delete the ref when + its components empty (liblcm's own cleanup semantics). +- `AddVariantType`/`RemoveVariantType` (link-locator + type id) → that ref's + `VariantEntryTypesRS`. +- `SubmitUpdateVariant` (scalars) → proxy over the ref (`UpdateComplexFormTypeProxy` pattern). +- Type CRUD → possibility list (create = plain top-level `LexEntryType`). + +### CRDT side + +- `Variant` table (`Variants`): FK cascades — Entry×2 (`VariantEntryId`, `MainEntryId`), + Sense (`MainSenseId`); filtered unique indexes on the composite (sense null / not null), + mirroring `ComplexFormComponents`; `Types` jsonb; `Comment` jsonb. +- `VariantType` snapshot table (mirror `ComplexFormType`). +- linq2db headword expressions for `VariantHeadword`/`MainHeadword` (mirror the + `ComplexFormComponent` `IsExpression` mappings in `ConfigureDbOptions`), plus `Finalize` + sorting for deterministic list order. +- EF migration `AddVariants`. +- Changes (register in `LcmCrdtKernel.ConfigureCrdt` **and** add instances to + `UseChangesTests.GetAllChanges()` — kernel comment mandates it): + `AddVariantChange` (create; carries types+scalars; dedupe/cycle/deleted-ref handling + mirroring `AddEntryComponentChange`), + `AddVariantTypeChange`/`RemoveVariantTypeChange`/`ReorderVariantTypeChange` (`EditChange`), + `CreateVariantType`, `JsonPatchChange`, `JsonPatchChange`, + `DeleteChange`, `DeleteChange`. + A `SetVariantChange` (mirror of `SetComplexFormComponentChange`) was considered and + dropped: that change turned out to be test/wire-legacy only for complex forms; variant + scalars go through `JsonPatchChange` and endpoint changes are delete+recreate. + +### API surface (both implementations + wrappers) + +Read: `GetVariantTypes()`, `GetVariantType(Guid)`. +Write: `CreateVariantType`, `UpdateVariantType` ×2, `DeleteVariantType`, +`CreateVariant(variant)`, `DeleteVariant(variant)`, `UpdateVariant(before, after)`, +`AddVariantType(variant, typeId)`, `RemoveVariantType(variant, typeId)` — link-locator +arguments resolve by composite key on both sides. +Submit (sync, result-less): `SubmitCreateVariant`, `SubmitUpdateVariant(variant, patch)`, +`SubmitUpdateVariantType`. + +Fanout sites that must stay in lockstep: +- `CrdtMiniLcmApi`, `FwDataMiniLcmApi` (manual implementations) +- `DryRunMiniLcmApi` (manual write methods; reads auto-forward) +- `MiniLcmApiWriteNormalizationWrapper` (manual write methods) +- `MiniLcmApiValidationWrapper` — **explicit** additions or the new writes silently skip + validation (BeaKona auto-forwards; the CreateEntry gap #2362 is the cautionary tale) +- `ResumableImportApi` — cache `CreateVariantType` like `CreateComplexFormType` (step 2) +- `MiniLcmApiNotifyWrapper` (FwLiteShared) — notify on variant writes for UI refresh +- `MiniLcmJsInvokable`, `InMemoryDemoApi`, generated TS types (step 3) + +### Sync design (step 2) + +- `VariantTypeSync` (mirror `ComplexFormTypeSync`); runs in `SyncInternal` next to + `ComplexFormTypeSync`, before entries. +- `VariantSync` (per-link): types diff via `Add/RemoveVariantType`; `HideMinorEntry`/`Comment` + via `SubmitUpdateVariant` patch. Used by EntrySync diff Replace and `UpdateVariant`. +- `VariantOf`/`Variants` link diffs join **phase 2** (`SyncComplexFormsAndComponents`, both + directions — a one-direction wiring won't reconcile deletes). Phase/option names stay + as-is in these PRs (`…ComplexFormsAndComponents` now covers variants too; renaming is a + separate no-behavior PR — reviewer advice, keeps the critical diff small). +- `CreateEntryOptions.IncludeEntryReferences` (renamed from `IncludeComplexFormsAndComponents` on review) gates variant links too (doc + comment updated; entry-to-entry refs need both endpoints to exist). +- `ProjectSnapshot` gains `VariantTypes` — update **`TakeProjectSnapshot()`** + (`MiniLcmApiExtensions`) and `ProjectSnapshot.Empty`, or it compiles-but-snapshots-empty + (landmine #1912-class). +- `ProjectImporter`/`MiniLcmImport`: explicit `VariantType` creation loop (same slot as + complex-form types, before entries) — import is a separate code path from sync. +- `ResumableImportApi`: cache `CreateVariantType`. +- Legacy snapshots need **no** MorphTypes-style patch: CRDT genuinely has no variants yet, so + the first sync after upgrade imports FwData variants into the CRDT (dedicated upgrade test: + snapshot without variants + FwData with variants → added to CRDT, nothing deleted from + FwData). +- **Verified files must be regenerated regardless of Sena3 content**: entry shape changes + break `ProjectSnapshotSerializationTests.LatestSena3SnapshotRoundTrips` (+ the dated + `Snapshots/` files) and possibly `LiveSena3Sync`'s `sena-3-live.verified.sqlite` / + `CrdtChanges == 0` assertion (Sena 3 contains variants → first sync after upgrade + produces changes). Regenerate + eyeball, don't hand-edit. +- `EntryFakerHelper`/AutoFaker: `CanSyncRandomEntries` will start generating variant links — + extend `PrepareToCreateEntry` to create referenced variant entries/types (mirror the + `createComponents` flag) and extend `SyncTests.SyncExclusions` for the derived + `VariantHeadword`/`MainHeadword` caches. + +### Rollout / compatibility notes + +- Same story as every previous model addition (MorphTypes, Publications): the lexbox server + stores change JSON opaquely, but **old FwLite clients cannot deserialize a new change + type** — they break only when someone actually uses variants in a synced project, and + auto-update closes the window. No extra gating exists or is added (precedent). +- FwHeadless consumes the same sync libraries; it must be deployed with/before a client + release that writes variant changes. +- **`AddEntryComponentChange` replay semantics changed** (decision 7): this affects every + project with complex forms, not just variant users, on ANY deploy of this code. During + version skew, a historical add shaped like a sense-targeted cycle projects as soft-deleted + on old clients and live on new ones; the shape is rare (the old guard had to have rejected + it, so the link was never visible) and auto-update converges the fleet, same as the + new-change-type story above. +- **Pre-existing FwLite-only (CRDT-only) projects have no variant types**: the 7 standard + types are seeded via the blank-project template (new projects) or FwData sync (FLEx-backed + projects) only. On older CRDT-only projects the viewer's type submenu hides itself and new + links are created untyped — usable but diverging from the FLEx "Unspecified Variant" + default. A one-time seeding path for existing projects is a follow-up. + +### Test plan + +Mirror the *named* complex-forms cases (test-auditor sweep), not just categories: + +- `MiniLcm.Tests/VariantTestsBase` (subclassed by LcmCrdt.Tests + FwDataMiniLcmBridge.Tests): + create/delete; headwords update when referenced entries change; replaying returned object + is idempotent; same-link-again does nothing (null and non-null sense); changing a property + and creating again creates both; multi-layer cycle guards (1/2/3 levels) + works when a + would-be-cycle member was deleted; **variant entry without senses; variant-of-a-sense; + entry that is both a variant and a component; per-link types round-trip; type add/remove; + HideMinorEntry/Comment round-trip**. +- `LcmCrdt.Tests/Changes/VariantTests` (mirror `ComplexFormTests`: add/remove type, add + link, delete link, duplicate links are soft-deleted) + `UseChangesTests.GetAllChanges()` + entries + `ChangeSerializationTests` generator branch + regression-data regen. +- Validator tests (self-reference, empty refs, wrong-direction ids, nested type validation). +- `FwLiteProjectSync.Tests`: EntrySync diff tests; round-trip create/edit/delete both + directions (two named delete-cascade tests: delete main entry vs delete variant entry); + link-target deleted between syncs (delete-vs-edit race); sense-targeted link when the + sense moves entries; new link referencing a new sense; sense-less variant round-trip; + legacy-snapshot upgrade; flattened-type read + create-missing-type-lands-top-level + (FwData bridge); Sena3 + verified files regen. +- Playwright (step 3): add/remove a variant link + type via the demo project. +- Hardening additions (post-review, all in the shared bases unless noted): sense-targeted + cycle trio (loop-through-sense-link allowed / 2-layer sense cycle rejected / sense-of-a- + dependent-entry rejected); mixed cycle closed by a complex-form add rejected + (`VariantTestsBase`) and its pure-CFC sense-loop mirror (`ComplexFormComponentTestsBase`); + `VariantTestsSharedRef` (FwData-only: real 2-component ref — reads fan out, per-link type + edits split instead of touching the sibling); `UpdateVariant_PreservesAMultiBitHideMinorEntry` + (FwData-only); `CreateLinks_MatchTheLcmCycleRuleOnRandomGraphs` (seeded differential test + against the LCM `AllComponents` oracle, both implementations). + +## Stacked PR plan + +1. **`feat/variants-model`** — models, validators, API surface, CRDT entities + changes + + migration, FwData bridge read/write, SyncHelpers (`VariantTypeSync`, `VariantSync`, + EntrySync diffs — they also power `UpdateEntry(before, after)`), conformance tests. + Green standalone; project-sync orchestration doesn't move variants yet. +2. **`feat/variants-sync`** — `CrdtFwdataProjectSyncService` + `ProjectSnapshot.VariantTypes` + + `TakeProjectSnapshot`, `ProjectImporter`/`MiniLcmImport`/`ResumableImportApi`, + round-trip + upgrade tests, verified-file regens (incl. Sena3). +3. **`feat/variants-ui`** — `MiniLcmJsInvokable` + `MiniLcmApiNotifyWrapper` hooks, + regenerated dotnet-types, entity-config + view-data fields (`variantOf`, `variants` — + decide `show` defaults: mirror complexForms=true; variant-type picker inside the link + rows), `VariantOf.svelte`/`Variants.svelte` (reuse `EntryOrSensePicker` + + `EntryOrSenseItemList`, **both non-orderable**, `pt()` dual labels for FW-Classic view, + disable self/duplicates but allow cross-type overlap with components), demo data seeded + with a variant pair + real (not stub) `InMemoryDemoApi` support for the paths the UI + uses, i18n extraction **with context comments**, Playwright test. The variant *badge* + for minor entries (decision 11) did NOT ship in this step — see follow-ups; in-editor + visibility is currently the always-shown "Variant of" field. + +## Open questions / follow-ups (not blockers) + +- Dictionary preview (`DictionaryEntry.svelte`) shows neither complex forms nor variants; + "variant of X" there is a follow-up. +- `LexEntryInflType` extras (GlossPrepend/Append, InflFeats, Slots), type hierarchy + round-trip — future work. +- Minor-entry badge in the editor (decision 11) and entry-list styling of minor entries — + follow-up; today only the "Variant of" field signals variant status. +- Seed the 7 standard variant types into pre-existing CRDT-only projects (see rollout + notes) — follow-up. +- FLEx "Insert Variant" convenience (create variant entry + link in one step) in the + new-entry dialog — follow-up UX; v1 links existing entries. +- `HideMinorEntry` is modeled as bool; LCM docs hint the int may become per-publication bit + flags someday — revisit if FLEx ever uses values other than 0/1. diff --git a/frontend/viewer/src/lib/create-entry-options.ts b/frontend/viewer/src/lib/create-entry-options.ts index 12e50d5c15..37c5a18c1c 100644 --- a/frontend/viewer/src/lib/create-entry-options.ts +++ b/frontend/viewer/src/lib/create-entry-options.ts @@ -2,6 +2,6 @@ import type {ICreateEntryOptions} from '$lib/dotnet-types'; // Mirrors the C# CreateEntryOptions presets (MiniLcm/CreateEntryOptions.cs). export const createEntryOptions: Record<'asIs' | 'withMainPublication', ICreateEntryOptions> = { - asIs: {includeComplexFormsAndComponents: true, autoAddMainPublication: false}, - withMainPublication: {includeComplexFormsAndComponents: true, autoAddMainPublication: true}, + asIs: {includeEntryReferences: true, autoAddMainPublication: false}, + withMainPublication: {includeEntryReferences: true, autoAddMainPublication: true}, }; diff --git a/frontend/viewer/src/lib/dotnet-types/generated-types/FwLiteShared/Services/IMiniLcmJsInvokable.ts b/frontend/viewer/src/lib/dotnet-types/generated-types/FwLiteShared/Services/IMiniLcmJsInvokable.ts index 805d4a62fb..4fa31d292f 100644 --- a/frontend/viewer/src/lib/dotnet-types/generated-types/FwLiteShared/Services/IMiniLcmJsInvokable.ts +++ b/frontend/viewer/src/lib/dotnet-types/generated-types/FwLiteShared/Services/IMiniLcmJsInvokable.ts @@ -23,6 +23,8 @@ import type {IUserComment} from '../../MiniLcm/Models/IUserComment'; import type {ThreadStatus} from '../../MiniLcm/Models/ThreadStatus'; import type {ICreateEntryOptions} from '../../MiniLcm/ICreateEntryOptions'; import type {IComplexFormComponent} from '../../MiniLcm/Models/IComplexFormComponent'; +import type {IVariantType} from '../../MiniLcm/Models/IVariantType'; +import type {IVariant} from '../../MiniLcm/Models/IVariant'; import type {ISense} from '../../MiniLcm/Models/ISense'; import type {IExampleSentence} from '../../MiniLcm/Models/IExampleSentence'; import type {IReadFileResponseJs} from './IReadFileResponseJs'; @@ -87,6 +89,12 @@ export interface IMiniLcmJsInvokable deleteComplexFormComponent(complexFormComponent: IComplexFormComponent) : Promise; addComplexFormType(entryId: string, complexFormTypeId: string) : Promise; removeComplexFormType(entryId: string, complexFormTypeId: string) : Promise; + getVariantTypes() : Promise; + getVariantType(id: string) : Promise; + createVariant(variant: IVariant) : Promise; + deleteVariant(variant: IVariant) : Promise; + addVariantType(variant: IVariant, variantTypeId: string) : Promise; + removeVariantType(variant: IVariant, variantTypeId: string) : Promise; createSense(entryId: string, sense: ISense) : Promise; updateSense(entryId: string, before: ISense, after: ISense) : Promise; deleteSense(entryId: string, senseId: string) : Promise; diff --git a/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/ICreateEntryOptions.ts b/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/ICreateEntryOptions.ts index eb0cd5e689..e489e6b657 100644 --- a/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/ICreateEntryOptions.ts +++ b/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/ICreateEntryOptions.ts @@ -5,7 +5,7 @@ export interface ICreateEntryOptions { - includeComplexFormsAndComponents: boolean; + includeEntryReferences: boolean; autoAddMainPublication: boolean; } /* eslint-enable */ diff --git a/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IEntry.ts b/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IEntry.ts index eaf8d5ecb1..fa1724839d 100644 --- a/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IEntry.ts +++ b/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IEntry.ts @@ -10,6 +10,7 @@ import type {MorphTypeKind} from './MorphTypeKind'; import type {ISense} from './ISense'; import type {IComplexFormComponent} from './IComplexFormComponent'; import type {IComplexFormType} from './IComplexFormType'; +import type {IVariant} from './IVariant'; import type {IPublication} from './IPublication'; export interface IEntry extends IObjectWithId @@ -26,6 +27,8 @@ export interface IEntry extends IObjectWithId components: IComplexFormComponent[]; complexForms: IComplexFormComponent[]; complexFormTypes: IComplexFormType[]; + variantOf: IVariant[]; + variants: IVariant[]; publishIn: IPublication[]; } /* eslint-enable */ diff --git a/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IVariant.ts b/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IVariant.ts new file mode 100644 index 0000000000..0773cdc2b3 --- /dev/null +++ b/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IVariant.ts @@ -0,0 +1,22 @@ +/* eslint-disable */ +// This code was generated by a Reinforced.Typings tool. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. + +import type {IObjectWithId} from './IObjectWithId'; +import type {IVariantTypeRef} from './IVariantTypeRef'; +import type {IRichMultiString} from '$lib/dotnet-types/i-multi-string'; + +export interface IVariant extends IObjectWithId +{ + deletedAt?: string; + variantEntryId: string; + variantHeadword?: string; + mainEntryId: string; + mainSenseId?: string; + mainHeadword?: string; + types: IVariantTypeRef[]; + hideMinorEntry: boolean; + comment: IRichMultiString; +} +/* eslint-enable */ diff --git a/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IVariantType.ts b/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IVariantType.ts new file mode 100644 index 0000000000..9eafe80d30 --- /dev/null +++ b/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IVariantType.ts @@ -0,0 +1,15 @@ +/* eslint-disable */ +// This code was generated by a Reinforced.Typings tool. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. + +import type {IObjectWithId} from './IObjectWithId'; +import type {IMultiString} from '$lib/dotnet-types/i-multi-string'; + +export interface IVariantType extends IObjectWithId +{ + id: string; + name: IMultiString; + deletedAt?: string; +} +/* eslint-enable */ diff --git a/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IVariantTypeRef.ts b/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IVariantTypeRef.ts new file mode 100644 index 0000000000..a17cae208f --- /dev/null +++ b/frontend/viewer/src/lib/dotnet-types/generated-types/MiniLcm/Models/IVariantTypeRef.ts @@ -0,0 +1,11 @@ +/* eslint-disable */ +// This code was generated by a Reinforced.Typings tool. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. + +export interface IVariantTypeRef +{ + id: string; + order: number; +} +/* eslint-enable */ diff --git a/frontend/viewer/src/lib/dotnet-types/index.ts b/frontend/viewer/src/lib/dotnet-types/index.ts index 82ad4deef2..02df5e1b06 100644 --- a/frontend/viewer/src/lib/dotnet-types/index.ts +++ b/frontend/viewer/src/lib/dotnet-types/index.ts @@ -10,6 +10,8 @@ export * from './generated-types/FwLiteShared/Services/IMiniLcmFeatures'; export * from './generated-types/FwLiteShared/Services/IMiniLcmJsInvokable'; export * from './generated-types/MiniLcm/Models/IComplexFormComponent'; export * from './generated-types/MiniLcm/Models/IComplexFormType'; +export * from './generated-types/MiniLcm/Models/IVariant'; +export * from './generated-types/MiniLcm/Models/IVariantType'; export * from './generated-types/MiniLcm/Models/IEntry'; export * from './generated-types/MiniLcm/Models/IExampleSentence'; export * from './generated-types/MiniLcm/Models/ITranslation'; diff --git a/frontend/viewer/src/lib/utils.ts b/frontend/viewer/src/lib/utils.ts index 55ccdacd9f..9e2c201945 100644 --- a/frontend/viewer/src/lib/utils.ts +++ b/frontend/viewer/src/lib/utils.ts @@ -44,6 +44,8 @@ export function defaultEntry(): IEntry { complexForms: [], complexFormTypes: [], components: [], + variantOf: [], + variants: [], publishIn: [], morphType: MorphTypeKind.Stem, homographNumber: 0, diff --git a/frontend/viewer/src/project/data/index.ts b/frontend/viewer/src/project/data/index.ts index e5735f3fa7..b8843ee062 100644 --- a/frontend/viewer/src/project/data/index.ts +++ b/frontend/viewer/src/project/data/index.ts @@ -3,5 +3,6 @@ export * from './custom-view-service.svelte'; export * from './publications.svelte'; export * from './parts-of-speech.svelte'; export * from './complex-form-types'; +export * from './variant-types'; export * from './project-stats'; export * from './semantic-domains'; diff --git a/frontend/viewer/src/project/data/variant-types.ts b/frontend/viewer/src/project/data/variant-types.ts new file mode 100644 index 0000000000..3e8d88b11c --- /dev/null +++ b/frontend/viewer/src/project/data/variant-types.ts @@ -0,0 +1,10 @@ +import {useProjectContext} from '$project/project-context.svelte'; + +const variantTypesSymbol = Symbol.for('fw-lite-variant-types'); +export function useVariantTypes() { + const projectContext = useProjectContext(); + return projectContext.getOrAddAsync(variantTypesSymbol, [], api => api.getVariantTypes()); +} + +/** Unspecified Variant — the type FLEx assigns when none is chosen (well-known guid) */ +export const UNSPECIFIED_VARIANT_TYPE_ID = '3942addb-99fd-43e9-ab7d-99025ceb0d4e'; diff --git a/frontend/viewer/src/project/demo/demo-entry-data.ts b/frontend/viewer/src/project/demo/demo-entry-data.ts index 787da7cb05..fe950b5c99 100644 --- a/frontend/viewer/src/project/demo/demo-entry-data.ts +++ b/frontend/viewer/src/project/demo/demo-entry-data.ts @@ -1,4 +1,4 @@ -import {type IEntry, type IMorphType, type IWritingSystems, MorphTypeKind, WritingSystemType} from '$lib/dotnet-types'; +import {type IEntry, type IMorphType, type IVariant, type IVariantType, type IWritingSystems, MorphTypeKind, WritingSystemType} from '$lib/dotnet-types'; export const projectName = 'Sena 3'; @@ -207,7 +207,7 @@ export const _entries: IEntry[] = [ 'exampleSentences': [] } ], 'note': {}, - complexForms: [], complexFormTypes: [], components: [], publishIn: [], + complexForms: [], complexFormTypes: [], components: [], variantOf: [], variants: [], publishIn: [], homographNumber: 0, }, { @@ -277,6 +277,8 @@ export const _entries: IEntry[] = [ complexForms: [], complexFormTypes: [], components: [], + variantOf: [], + variants: [], publishIn: [], homographNumber: 0, }, @@ -321,7 +323,7 @@ export const allWsEntry: IEntry = { }], }], note: {}, - complexForms: [], complexFormTypes: [], components: [], publishIn: [], + complexForms: [], complexFormTypes: [], components: [], variantOf: [], variants: [], publishIn: [], homographNumber: 0, }; @@ -334,4 +336,33 @@ export const entries: IEntry[] = JSON.parse( // Keep the array the same length and don't shift entries down, // so that tests keep passing +// entries in the JSON blob predate variants +for (const entry of entries) { + entry.variantOf ??= []; + entry.variants ??= []; +} + entries.splice(0, 1, allWsEntry); + +// FLEx standard variant types (well-known guids) +export const variantTypes: IVariantType[] = [ + {id: '3942addb-99fd-43e9-ab7d-99025ceb0d4e', name: {en: 'Unspecified Variant'}}, + {id: '024b62c9-93b3-41a0-ab19-587a0030219a', name: {en: 'Dialectal Variant'}}, + {id: '0c4663b3-4d9a-47af-b9a1-c8565d8112ed', name: {en: 'Spelling Variant'}}, +]; + +// seed a variant pair so the demo project shows the feature +const demoVariantEntry = entries[2]; +const demoMainEntry = entries[3]; +const demoVariant: IVariant = { + id: 'b6d5be87-9958-0d55-8788-79e04c8cc001', + variantEntryId: demoVariantEntry.id, + variantHeadword: Object.values(demoVariantEntry.citationForm)[0] ?? Object.values(demoVariantEntry.lexemeForm)[0], + mainEntryId: demoMainEntry.id, + mainHeadword: Object.values(demoMainEntry.citationForm)[0] ?? Object.values(demoMainEntry.lexemeForm)[0], + types: [{id: variantTypes[0].id, order: 1}], + hideMinorEntry: false, + comment: {}, +}; +demoVariantEntry.variantOf = [demoVariant]; +demoMainEntry.variants = [demoVariant]; diff --git a/frontend/viewer/src/project/demo/in-memory-demo-api.ts b/frontend/viewer/src/project/demo/in-memory-demo-api.ts index c78c1631ec..c8fdf0bf40 100644 --- a/frontend/viewer/src/project/demo/in-memory-demo-api.ts +++ b/frontend/viewer/src/project/demo/in-memory-demo-api.ts @@ -3,6 +3,8 @@ import { DotnetService, type IComplexFormComponent, + type IVariant, + type IVariantType, type IComplexFormType, type ICreateEntryOptions, type IEntry, @@ -26,7 +28,7 @@ import { ViewBase, MorphTypeKind, } from '$lib/dotnet-types'; -import {entries, morphTypes, partsOfSpeech, projectName, writingSystems} from './demo-entry-data'; +import {entries, morphTypes, partsOfSpeech, projectName, variantTypes, writingSystems} from './demo-entry-data'; import {WritingSystemService} from '../data/writing-system-service.svelte'; import {FwLitePlatform} from '$lib/dotnet-types/generated-types/FwLiteShared/FwLitePlatform'; @@ -602,6 +604,30 @@ export class InMemoryDemoApi implements IMiniLcmJsInvokable { return Promise.resolve(); } + getVariantTypes(): Promise { + return Promise.resolve(variantTypes); + } + + getVariantType(_id: string): Promise { + return Promise.resolve(variantTypes.find(vt => vt.id === _id) ?? null); + } + + createVariant(_variant: IVariant): Promise { + throw new Error('Method not implemented.'); + } + + deleteVariant(_variant: IVariant): Promise { + throw new Error('Method not implemented.'); + } + + addVariantType(_variant: IVariant, _variantTypeId: string): Promise { + throw new Error('Method not implemented.'); + } + + removeVariantType(_variant: IVariant, _variantTypeId: string): Promise { + throw new Error('Method not implemented.'); + } + createComplexFormComponent(_complexFormComponent: IComplexFormComponent): Promise { throw new Error('Method not implemented.'); } diff --git a/frontend/viewer/src/stories/editor/entity-primitives/entry-editor-primitive.stories.svelte b/frontend/viewer/src/stories/editor/entity-primitives/entry-editor-primitive.stories.svelte index fda6e8d5fd..695c8f09c7 100644 --- a/frontend/viewer/src/stories/editor/entity-primitives/entry-editor-primitive.stories.svelte +++ b/frontend/viewer/src/stories/editor/entity-primitives/entry-editor-primitive.stories.svelte @@ -40,6 +40,8 @@ complexForms: [], complexFormTypes: [], components: [], + variantOf: [], + variants: [], publishIn: [], senses: [], morphType: MorphTypeKind.Stem, diff --git a/frontend/viewer/tests/entry-api-helper.ts b/frontend/viewer/tests/entry-api-helper.ts index 485cfe1164..cbdbc8233e 100644 --- a/frontend/viewer/tests/entry-api-helper.ts +++ b/frontend/viewer/tests/entry-api-helper.ts @@ -79,10 +79,12 @@ export class EntryApiHelper { components: [], complexForms: [], complexFormTypes: [], + variantOf: [], + variants: [], publishIn: [], homographNumber: 0, }; - const created = await api.createEntry(newEntry, {includeComplexFormsAndComponents: true, autoAddMainPublication: false}); + const created = await api.createEntry(newEntry, {includeEntryReferences: true, autoAddMainPublication: false}); return {id: created.id, headword: newHeadword}; }, {idx: targetIndex, order: DEFAULT_ORDER, morphType: MorphTypeKind.Unknown}); } @@ -101,10 +103,12 @@ export class EntryApiHelper { components: [], complexForms: [], complexFormTypes: [], + variantOf: [], + variants: [], publishIn: [], homographNumber: 0, }; - const created = await api.createEntry(newEntry, {includeComplexFormsAndComponents: true, autoAddMainPublication: false}); + const created = await api.createEntry(newEntry, {includeEntryReferences: true, autoAddMainPublication: false}); return {id: created.id, headword: hw}; }, {hw: headword, morphType: MorphTypeKind.Unknown}); }