Commit 78a72d4
Release 14.0 (#53)
* Updates the versions to 14.0-SNAPSHOT
* Adds the notes for version 14.0
* Removes the auto-generation of setters
* Removes deprecated methods
* Removes deprecated methods (2)
* Updates the code to use the .getInSeconds() method (2)
* Updates the code to use the .getInSeconds() method (3)
* Updates the code to use the .getInSeconds() method (4)
* Updates the code to use the .getInSeconds() method (5)
* Small optimization
* Adds the MPS spec update
* Adds entry for v12.3
* Adds better protection when encoding undefined Enumerations
* Updates the indentation
* M&C testbed. (#49)
* Packet Service implementation
* Alert Service implementation
* Action Service implementation
* Adds hook to generate .docx files from cli
* Updates the .docx file generated tables
* Better printing of Time and FineTime
* Deprecated old method
* Adds a catch to handle better the exceptions
* Adds getTypeShortForm method
* Fix PUB-SUB broker dropping subscriptions on partial deregister
The broker's subscriberSet (a TreeSet<String> keyed by consumer URI)
treated all subscriptions from the same consumer as a single entry.
When a consumer held two concurrent subscriptions (e.g. monitorEvents
and monitorExecution) and deregistered one, removeSubscriber() evicted
the consumer's URI entirely. Subsequent NOTIFY messages for the still-
active subscription found no binding via hasSubscriber() and triggered
handleConsumerCommunicationError(), silently purging the remaining
subscription from the broker table.
Fix: key each entry in the set as subscriptionId + uriTo so every
subscription occupies its own slot. addSubscriber/removeSubscriber now
take both the URI and the subscription ID; MALReceiver extracts the
subscription ID from the register/deregister message body. hasSubscriber
scans for any entry ending with the given URI.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Carry field comments into OperationField runtime metadata
Add a comment field to OperationField (with a backward-compatible 4-arg
constructor and getComment() accessor) and have the Java generator emit
each field's XML comment into the generated ServiceInfo. The comment was
already parsed into the generator model (FieldInfo.getFieldComment) but
was only used for Javadoc and dropped from the runtime metadata.
This makes operation field descriptions available at runtime as compiled
constants, with no XML parsing at startup. It lays the groundwork for
better MCP integration/support and other metadata-driven tooling (e.g. a
CLI) that can render service operations and their fields with their
descriptions directly from <Service>Info.OPERATIONS.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Carry operation comments into MALOperation runtime metadata
Add a comment field to MALOperation (with a getComment() accessor) and
thread it through the six interaction-pattern subclasses via backward-
compatible constructor overloads that take a trailing comment argument;
the existing constructors delegate with a null comment. The Java
generator now emits each operation's XML comment as the final argument
of the generated MAL*Operation in ServiceInfo.
Together with the earlier field-level change, both operation and field
descriptions are now available at runtime as compiled constants via
<Service>Info.OPERATIONS, with no XML parsing at startup. This furthers
the groundwork for better MCP integration/support and other metadata-
driven tooling (e.g. a CLI) that renders services, operations and their
fields with descriptions directly from the runtime metadata.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Introduce MethodBuilder fluent API for the stub generator
Replace the positional addMethodOpenStatement overloads (up to 15 boolean/
string args) with a fluent MethodBuilder, accessed via ClassWriter.method(name).
The builder accumulates a language-neutral method description and delegates to
the writer's canonical addMethodOpenStatement/addMethodOpenStatementOverride on
open().
- Add MethodBuilder with addArgument/addArguments, addThrows (single- and
two-arg, coupling the throws clause with its @throws comment), and modifier
flags (asStatic/asFinal/asVirtual/asConst/asOverride/deprecated/returnActual).
- Add ClassWriter.type(name) / type(area, service, name) and a returns(String)
overload so simple return types read as returns("int") instead of a verbose
createCompositeElementsDetails(...) construction.
- Migrate all call sites across GeneratorLangs, GeneratorJava, GeneratorGwt,
JavaConsumer, JavaCompositeClass, JavaEnumerations, JavaLists and
JavaServiceInfo; remove now-dead joined-throws/native-type locals and the
StubUtils.concatenateArguments/Arrays.asList wrappers feeding args.
- Delete the 5 now-unreachable addMethodOpenStatement convenience overloads from
ClassWriter and JavaClassWriter, keeping only the 15-arg master and the
override variant the builder calls.
Generated output is byte-identical except two intentional fixes to pre-existing
inconsistencies: the handle* methods' throws clause is reordered to match its
javadoc, and registerWithDefaultKeys drops a stray @throws IllegalArgumentException
that was never in its throws clause.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Add ClassWriter.field() helper and sweep verbose native-type construction
Introduce a field(typeName, fieldName, comment) default on ClassWriter that
builds a simple non-list field by reusing type(...) and the CompositeField copy
constructor. Replaces the verbose createCompositeElementsDetails(file, ...,
createTypeReference(null, null, name, false), ...) pattern at native-typed class
variable and argument sites.
- Class variables: _SERVICE_NUMBER, _OP_NUMBER, _OBJECT_NUMBER (JavaServiceInfo),
_AREA_NUMBER (JavaHelpers), and the enum *_VALUE literal (JavaEnumerations).
- Arguments: list initial-capacity constructor (JavaLists), enum value
constructor (JavaEnumerations), and errorNumber/extraInfo in generateMOError
(JavaServiceInfo), dropping the ref1/ref2 temporaries.
Output is byte-identical: addClassVariable and processArgs render only the field
name, comment and createLocalType (type-name based), never canBeNull/isStructure/
isActual, so the dropped flags cannot affect output for native types. The helper
is intentionally scoped to native/literal types; MAL structure types keep the
explicit path where isStructure matters.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Additional improvements in the cleanup of the code
* Re-enable PublishRegisterTestProcedure with an isolated domain
This procedure was disabled because it passed on FitNesse 20220319 but
failed on later versions. The cause was the FitNesse SuiteContentsFinder
change (20220319 -> 20220815) switching to alphabetical page ordering, so
HeaderTestProcedure now runs before PublishRegisterTestProcedure and seeds
shared pub-sub state on the same domain/session. The procedure's expected
publish-register transaction id then no longer matched the (spec-correct)
id reused by the provider's publisher for PUBLISH / PUBLISH ERROR.
Give the procedure its own domain so its publisher, broker registration and
cached transaction id cannot collide with any other pub-sub procedure,
making it independent of suite execution order. Verified green across
JDK 11/17/21 and FitNesse 20220319/20220815/20250223 (old FitNesse still
cannot run on JDK >= 18 due to the unrelated Security Manager removal).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Add GitHub workflow to generate DOCX from XML service specifications
Mirrors the NMF generate-docs workflow: builds mo-navigator then runs
AppGenerateDocx against both xml-ccsds-mo-prototypes and xml-ccsds-mo-standards,
uploading the results as timestamped artifacts on every push.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fix ESA logo and Maven Central badge in README
- ESA logo: replace broken Wikimedia hotlink with esa.int's own GIF
- Maven Central: replace defunct maven-badges.herokuapp.com with shields.io
pointing to central.sonatype.com for int.esa.ccsds.mo:parent
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Allow Enumeration types as PUB-SUB subscription keys
When an XML subscription key has an Enumeration type, the generator
previously tried to emit AttributeType.<ENUMNAME>, which does not exist.
Enumerations are wire-encoded as UShort ordinals, so map them to
AttributeType.USHORT instead. Extracted subscriptionKeyAttributeTypeName()
to keep the generation loop readable.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Complete removal of setters
* Move attribute2double/string/javaType2Attribute to Attribute interface
All three conversions now live directly on the Attribute interface:
- attribute2double: new static + default instance methods
- attribute2string: body was a duplicate; HelperAttributes now delegates
- javaType2Attribute: same delegation pattern, now @deprecated in HelperAttributes
Callers with Attribute-typed variables updated to use instance methods.
Includes minor fix: local variable renamed from newSPF to newSFP in TypeId.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Revert UC1_Ex3_Test to static Attribute.attribute2JavaType() call
The instance form att.getValue().attribute2JavaType() fails on CI when
testbeds are compiled against a cached artifact that predates the default
method addition. Static call works against both old and new API versions.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Revert testbed instance method calls to static Attribute form
The testbed CI workflow compiles against the published Maven Central
snapshot of api-area001-v003-mal, which predates the new default instance
methods. Revert attribute2JavaType()/attribute2string() calls in testbed
files back to the static Attribute.method(arg) form which works against
both old and new API versions.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fix ESA logo in README by bundling SVG in repo
The external ESA logo URLs no longer serve the image directly.
Store the current ESA logo SVG (sourced from esa.int) in docs/,
with fill color changed from white to ESA deep blue (#003247)
so it renders correctly on GitHub's white background.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Add typed Subscription Key accessors for PUB-SUB consumers
Generate a typed <Op>SubscriptionKeys class per PUB-SUB operation and
pass it to the <op>NotifyReceived callback, so consumers read keys by
name (keys.getParameterId()) instead of positionally
(updateHeader.getKeyValues().get(1)). Resolution is by name, which makes
it correct under broker key trimming (CCSDS 521.0-B-3, section 3.6.6.5);
a getByName() escape hatch covers custom keys, and the UpdateHeader is
never modified.
Key points:
- Generator (JavaConsumer): emit the per-op keys class (typed getters +
getByName), and the 4-argument notifyReceived dispatch that builds it.
- MAL API: notifyReceived now carries the subscription's selectedKeys
(single 4-argument form on MALInteractionListener/Adapter).
- mal-impl: InteractionPubSubMap retains selectedKeys per subscription;
MALReceiver supplies them at notify dispatch.
- Fix Uinteger -> UInteger typo in the area004-v002 MC service XML so the
parameterVersion key resolves to a proper UInteger getter.
- Migrate testbed and tooling consumers to the typed accessors and keep
null-prone Attribute conversions on the null-safe static form.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Rename auto-placeholder argument names in PUB-SUB testbed overrides
Replace the generated _Type<N> placeholder parameter names in the
pub-sub / COM-event NotifyReceived (and related) overrides with the
names declared by the overridden method, for readability and
consistency:
- _Identifier0 -> subscriptionId, _UpdateHeaderList1 -> updateHeader/header,
_ObjectDetailsList2 -> objectDetails, _ElementList3 -> element/output2
- MonitorActivityScenario: StringList strings -> out1 / out2
- MalSppPubsubTest: TestUpdate output1, Element output2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Align COM event NotifyReceived override params with the overridden method
Rename the pre-existing parameter names in the monitorEventNotifyReceived
overrides to match the generated EventAdapter signature:
header -> updateHeader, objectDetails -> eventLinks, element -> eventBody
(MonitorEventAdapter, TestEventAdapter, ActivityRelayNode), updating body
usages and javadoc accordingly.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Removes unused dependencies
* Surface MO exceptions directly on provider Handler interfaces
Patch the generator so each op's dedicated MO exceptions (e.g.
InvalidException, UnknownException) are declared on the Handler
interface method, and the skeleton dispatch catches MOErrorException
and re-wraps it into MALInteractionException — eliminating the
double-wrapping pattern in provider implementations.
Migrate all service provider impls in services-impl to throw the
typed exceptions directly instead of wrapping them, and update
throws clauses to match the newly generated Handler interfaces.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Return Enumeration type from subscription key getters instead of UShort
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Replace redundant AtomicLong with plain long in TransactionIdCounter
The counter is only ever accessed inside the static synchronized
nextTransactionId() method, so the class monitor already guarantees
mutual exclusion and memory visibility. The AtomicLong was therefore
redundant overhead; a plain long is faster on the uncontended path and
equivalent under contention.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Update RELEASE_NOTES.md for version 14.0
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Fix Javadoc generation failures in maven-plugin and MC v002
Migrate StubGenerator Mojo from legacy javadoc tags (@goal/@phase/
@parameter/@required) to @Mojo/@parameter annotations. The generated
plugin descriptor for the bound "generate" goal is unchanged (same
parameters, required flags, defaults), and the duplicate unused
"generate-apis" goal is removed.
Fix broken {@link} references and an unescaped ampersand ("M&C") in the
MC v002 backend interfaces that were breaking Javadoc generation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Fix genuine Javadoc warnings in hand-written code (Group D)
Add missing class descriptions, getter descriptions, and method
@param/@return/@throws tags; remove an empty <p> tag. Clears all 58
hand-written Javadoc warnings that were not in the bulk "no comment"
or "default constructor" categories, without changing any code logic.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Emit @OverRide on generated consumer adapter dispatcher methods
The consumer *Adapter dispatcher methods (submitAckReceived,
requestResponseReceived, notifyReceived, etc.) override MALInteractionAdapter
but were generated without @OverRide. Route them through asOverride() and
make the override writer path preserve the final modifier. Overriding
methods inherit their documentation, so no Javadoc is emitted for them.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Emit @OverRide on generated provider skeleton methods
The provider InheritanceSkeleton/DelegationSkeleton methods that implement
an interface (setSkeleton, malInitialize, malFinalize, handleSend/Submit/
Request/Invoke/Progress, and create*Publisher) override their declaring
interfaces but were generated without @OverRide. Route them through
asOverride(). getConnection is left untouched as it is skeleton-specific
and not declared in any interface.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Generate @PARAM and @throws descriptions in the stub output
The generated @PARAM tags were emitted with an empty description when the
XML field/argument comment was blank, and @throws tags were always blank
because error references rarely carry their own comment.
Fill the @PARAM description from the field comment, falling back to
"The <name> field." when absent, and resolve each @throws to the comment
of its referenced error definition (with a generic fallback). Clears the
193 @PARAM and 21 @throws "no description" Javadoc warnings in the
generated APIs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Add comments to generated ServiceInfo and Enumeration constructors
The generated ServiceInfo no-arg constructor was emitted with an empty
Javadoc block, and the Enumeration value constructor had a @PARAM but no
main description when the enumeration carried no comment. Give both a
meaningful description, clearing the corresponding "empty comment" and
"no main description" Javadoc warnings in the generated APIs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Add fallback comments for generated composite fields and classes
Generated composite fields and the composite class itself were emitted
without a Javadoc comment when the XML carried no comment, producing
"no comment" warnings. Fall back to "The <name> field." and
"The <name> structure." respectively when the XML comment is absent,
while still using the XML comment when present.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Make generated Helper classes non-instantiable
Generated *Helper utility classes (static-only) relied on the implicit
public constructor, flagged by doclint as an undocumented default
constructor. Emit an explicit private constructor (placed after the
fields) with a brief in-body note instead of a Javadoc comment, since a
private member does not belong in the published API docs.
Also stop addMultilineComment from emitting empty "/** */" blocks when
the comment has no actual content.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Add InterfaceMethodBuilder for fluent interface method declarations
Introduce a standalone InterfaceMethodBuilder, obtained via
InterfaceWriter.interfaceMethod(name), that accumulates an interface
method declaration fluently and emits it on declare(), replacing the
positional addInterfaceMethodDeclaration calls in GeneratorLangs and
GeneratorGwt. Throws are added incrementally (getOperationErrorsThrows
becomes addOperationErrorsThrows feeding the builder).
Also drop the unused "scope" parameter from addInterfaceMethodDeclaration
(interface methods are implicitly public and it was never written).
The generated interface output is unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Code cleanup
* Remove dead asVirtual and returnActual flags from the method builder
isVirtual and isReturnActual were threaded through MethodBuilder and
addMethodOpenStatement but never used by the Java writer (Java has no
"virtual" keyword, and the return type is always rendered as-is). Drop
the asVirtual()/returnActual() builder methods, their fields, the unused
addMethodOpenStatement parameters, and the now-redundant calls at every
call site. The generated output is unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Remove dead const flags from the method builder
isConst and isReturnConst were threaded through MethodBuilder and
addMethodOpenStatement but never used by the Java writer (Java has no
const concept). Drop the asConst()/returnConst() builder methods, their
fields, the unused addMethodOpenStatement parameters, and the calls in
addGetter. The generated output is unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Decouple type information from GeneratorBase via composition
GeneratorBase no longer implements TypeInformation. The type model is
now split into two composable pieces in generator-interfaces:
- MOTypeRegistry: language-neutral type data, population
(loadTypesFrom*/register*) and classification/lookups
(isEnum/isAbstract/isComposite/getAttributeDetails/...).
- MOTypeInformation implements TypeInformation: composes the registry
for classification and adds the config-driven name rendering
(createElementType/convertToNamespace/getAreaPackage) plus the
ObjectRef helpers.
GeneratorBase holds the shared registry and a composed
MOTypeInformation; the generators and the eight Java helper classes use
that object directly (injected via constructor, no getter on the
generator). Generated stub API and DOCX output are unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Add ServiceInfo.getOperations() to list a service's operations
Exposes the operations held in operationsByNumber so callers can iterate
all operations of a service (e.g. when walking a MALArea's services),
complementing the existing getOperationByNumber() lookup.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Code cleanup
* Code cleanup
* Code cleanup (2)
* Bump version to 14.0 for release
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: lacourte <lacourte@users.noreply.github.com>
Co-authored-by: agmo <agmo@terma.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>1 parent 7038997 commit 78a72d4
277 files changed
Lines changed: 22731 additions & 2514 deletions
File tree
- .github/workflows
- api-generator
- api-generator-maven-plugin
- src/main/java/esa/mo/tools/stubgen
- generator-docs
- src/main/java/esa/mo/tools/stubgen
- docx
- generator-interfaces
- src/main/java/esa/mo/tools/stubgen
- specification
- writers
- generator-java
- src/main/java/esa/mo/tools/stubgen
- java
- apis
- api-area001-v003-mal
- src
- main/java/org/ccsds/moims/mo/mal
- consumer
- helpertools
- connections
- helpers
- structures
- transport
- test/java/org/ccsds/moims/mo/mal/helpertools/helpers
- api-area002-v001-com
- src/main/java/org/ccsds/moims/mo/com
- api-area003-v001-common
- api-area004-v001-mc
- api-area004-v002-mc
- src/main/java/org/ccsds/moims/mo/mc
- backends
- api-area005-v001-mps
- api-area009-v001-mpd
- docs
- encodings
- encoding-binary
- encoding-string
- encoding-xml
- src/main/java/esa/mo/mal/encoder/xml
- mal-impl
- src/main/java/esa/mo/mal/impl
- broker
- interactionpatterns
- parent
- services-impl
- services-area003-v001-common
- src/main/java/esa/mo/common/impl/provider
- services-area004-v002-mc
- src/main/java/esa/mo/services/mc
- provider
- util
- services-area009-v001-mpd
- src/main/java/esa/mo/services/mpd
- provider
- util
- testbeds
- test-apis
- test-api-com
- test-api-mal
- test-api-mc
- testbed-com-framework
- src/main/java/org/ccsds/moims/mo/com/test
- activity
- archive
- event
- util
- testbed-com-provider-esa
- src/main/java/esa/mo/com/test
- activity
- archive
- testbed-com
- testbed-encoders
- testbed-malspp-framework
- src/main/java/org/ccsds/moims/mo/malspp/test/patterns/pubsub
- testbed-malspp
- testbed-mal
- src/main
- fitnesse/FitNesseRoot/MalTests/TestDocument
- java/org/ccsds/moims/mo/mal/test
- patterns
- pubsub
- transport
- util
- resources/deployment/cnes-rmi
- testbed-mc
- src
- main/java/org/ccsds/mo/mc/testbed
- backends
- test/java/org/ccsds/mo/mc/testbed
- testbed-mpd
- src/test/java/org/ccsds/mo/mpd/testbed
- testbed-pom
- testbed-util-spp
- testbed-util
- src/main/java/org/ccsds/moims/mo/testbed
- transport
- util
- xml-tests
- src/main/resources
- tooling
- basic-demo
- src/main/java/esa/mo/mal/demo
- consumer
- provider
- simple-mo-consumer
- src/main/java/esa/mo/consumer
- simple-mo-provider
- src/main/java/esa/mo/provider
- transport-bridge
- transports
- transport-file
- transport-generic
- src/main/java/esa/mo/mal/transport/gen
- sending
- transport-http
- src
- main/java/esa/mo/mal/transport/http
- sending
- test/java/esa/mo/mal/transport/http/test
- transport-rmi
- transport-spp
- src/main/java/esa/mo/mal
- encoder/spp
- transport/spp
- transport-tcpip
- src/main/java/esa/mo/mal/transport/tcpip
- transport-zmtp
- src
- main/java/esa/mo/mal/transport/zmtp
- test/java/esa/mo/mal/encoder/zmtp/header
- xml-service-specifications
- xml-ccsds-mo-prototypes
- src/main/resources/xml
- xml-ccsds-mo-standards
- src/main/resources/xml
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | | - | |
| 2 | + | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
99 | 99 | | |
100 | 100 | | |
101 | 101 | | |
102 | | - | |
| 102 | + | |
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
7 | 20 | | |
8 | 21 | | |
9 | 22 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
| 22 | + | |
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
| 27 | + | |
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| |||
Lines changed: 12 additions & 30 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| 44 | + | |
44 | 45 | | |
45 | 46 | | |
46 | 47 | | |
| |||
49 | 50 | | |
50 | 51 | | |
51 | 52 | | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | 53 | | |
57 | | - | |
| 54 | + | |
58 | 55 | | |
59 | 56 | | |
60 | 57 | | |
61 | 58 | | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | 59 | | |
| 60 | + | |
66 | 61 | | |
67 | 62 | | |
68 | 63 | | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | 64 | | |
| 65 | + | |
73 | 66 | | |
74 | 67 | | |
75 | 68 | | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | 69 | | |
| 70 | + | |
80 | 71 | | |
81 | 72 | | |
82 | 73 | | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | 74 | | |
| 75 | + | |
88 | 76 | | |
89 | 77 | | |
90 | 78 | | |
91 | | - | |
92 | | - | |
93 | 79 | | |
| 80 | + | |
94 | 81 | | |
95 | 82 | | |
96 | 83 | | |
97 | | - | |
98 | | - | |
99 | 84 | | |
| 85 | + | |
100 | 86 | | |
101 | 87 | | |
102 | 88 | | |
103 | | - | |
104 | | - | |
105 | 89 | | |
| 90 | + | |
106 | 91 | | |
107 | 92 | | |
108 | 93 | | |
109 | | - | |
110 | | - | |
111 | 94 | | |
| 95 | + | |
112 | 96 | | |
113 | 97 | | |
114 | 98 | | |
115 | | - | |
116 | | - | |
117 | 99 | | |
| 100 | + | |
118 | 101 | | |
119 | 102 | | |
120 | 103 | | |
121 | 104 | | |
122 | | - | |
123 | | - | |
124 | 105 | | |
| 106 | + | |
125 | 107 | | |
126 | 108 | | |
127 | 109 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
| 22 | + | |
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
| 27 | + | |
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
68 | | - | |
69 | | - | |
| 68 | + | |
| 69 | + | |
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
| |||
Lines changed: 14 additions & 14 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
58 | | - | |
| 58 | + | |
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| |||
433 | 433 | | |
434 | 434 | | |
435 | 435 | | |
436 | | - | |
437 | | - | |
| 436 | + | |
| 437 | + | |
438 | 438 | | |
439 | | - | |
440 | | - | |
| 439 | + | |
| 440 | + | |
441 | 441 | | |
442 | 442 | | |
443 | 443 | | |
444 | 444 | | |
445 | 445 | | |
446 | 446 | | |
447 | | - | |
448 | | - | |
| 447 | + | |
| 448 | + | |
449 | 449 | | |
450 | 450 | | |
451 | 451 | | |
| |||
504 | 504 | | |
505 | 505 | | |
506 | 506 | | |
507 | | - | |
508 | | - | |
| 507 | + | |
| 508 | + | |
509 | 509 | | |
510 | | - | |
511 | | - | |
| 510 | + | |
| 511 | + | |
512 | 512 | | |
513 | 513 | | |
514 | 514 | | |
515 | 515 | | |
516 | | - | |
517 | | - | |
| 516 | + | |
| 517 | + | |
518 | 518 | | |
519 | 519 | | |
520 | 520 | | |
| |||
880 | 880 | | |
881 | 881 | | |
882 | 882 | | |
883 | | - | |
| 883 | + | |
884 | 884 | | |
885 | 885 | | |
886 | 886 | | |
| |||
0 commit comments