->DataElement(Edit::UIHandlers::CheckBox,&Descriptor::m_grabAllMemory,"Allocate all memory at startup","Allocate all system memory at startup if enabled, or allocate as needed if disabled")
->DataElement(Edit::UIHandlers::CheckBox,&Descriptor::m_allocationRecords,"Record allocations","Collect information on each allocation made for debugging purposes (ignored in Release builds)")
->DataElement(Edit::UIHandlers::CheckBox,&Descriptor::m_allocationRecordsSaveNames,"Record allocations with name saving","Saves names/filenames information on each allocation made, useful for tracking down leaks in dynamic modules (ignored in Release builds)")
->DataElement(Edit::UIHandlers::CheckBox,&Descriptor::m_allocationRecordsAttemptDecodeImmediately,"Record allocations and attempt immediate decode","Decode callstacks for each allocation when they occur, used for tracking allocations that fail decoding. Very expensive. (ignored in Release builds)")
->DataElement(Edit::UIHandlers::ComboBox,&Descriptor::m_recordingMode,"Stack recording mode","Stack record mode. (Ignored in final builds)")
->DataElement(Edit::UIHandlers::SpinBox,&Descriptor::m_stackRecordLevels,"Stack entries to record","Number of stack levels to record for each allocation (ignored in Release builds)")
->Attribute(Edit::Attributes::Step,1)
->Attribute(Edit::Attributes::Max,1024)
->Attribute(Edit::Attributes::Step,1)
->Attribute(Edit::Attributes::Max,1024)
->DataElement(Edit::UIHandlers::CheckBox,&Descriptor::m_autoIntegrityCheck,"Validate allocations","Check allocations for integrity on each allocation/free (ignored in Release builds)")
->DataElement(Edit::UIHandlers::CheckBox,&Descriptor::m_markUnallocatedMemory,"Mark freed memory","Set memory to 0xcd when a block is freed for debugging (ignored in Release builds)")
->DataElement(Edit::UIHandlers::CheckBox,&Descriptor::m_doNotUsePools,"Don't pool allocations","Pipe pool allocations in system/tree heap (ignored in Release builds)")
->DataElement(Edit::UIHandlers::SpinBox,&Descriptor::m_pageSize,"Page size","Memory page size in bytes (must be OS page size aligned)")
->Attribute(Edit::Attributes::Step,1024)
->Attribute(Edit::Attributes::Step,1024)
->DataElement(Edit::UIHandlers::SpinBox,&Descriptor::m_poolPageSize,"Pool page size","Memory pool page size in bytes (must be a multiple of page size)")
->DataElement(Edit::UIHandlers::SpinBox,&Descriptor::m_memoryBlockAlignment,"Block alignment","Memory block alignment in bytes (must be multiple of the page size)")
->DataElement(Edit::UIHandlers::SpinBox,&Descriptor::m_memoryBlocksByteSize,"Block size","Memory block size in bytes (must be multiple of the page size)")
->DataElement(Edit::UIHandlers::SpinBox,&Descriptor::m_reservedOS,"OS reserved memory","System memory reserved for OS (used only when 'Allocate all memory at startup' is true)")
->DataElement(Edit::UIHandlers::SpinBox,&Descriptor::m_reservedDebug,"Memory reserved for debugger","System memory reserved for Debug allocator, like memory tracking (used only when 'Allocate all memory at startup' is true)")
->DataElement(Edit::UIHandlers::CheckBox,&Descriptor::m_enableDrilling,"Enable Driller","Enable Drilling support for the application (ignored in Release builds)")
// generate crypto-rand user identifier, send to both server and client so they can negotiate the autonomous entity to assume predictive control over after migration
//const uint64_t randomUserIdentifier = 0;
//
//// Tell the server a new client is about to join
// Generate crypto-rand user identifier, send to both server and client so they can negotiate the autonomous entity to assume predictive control over after migration