binary-decision-diagram 3.2.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +211 -31
  3. package/dist/cjs/src/abstract-node.js +7 -4
  4. package/dist/cjs/src/abstract-node.js.map +1 -1
  5. package/dist/cjs/src/branches.d.ts +4 -1
  6. package/dist/cjs/src/branches.js +10 -9
  7. package/dist/cjs/src/branches.js.map +1 -1
  8. package/dist/cjs/src/create-bdd-from-truth-table.js +1 -2
  9. package/dist/cjs/src/create-bdd-from-truth-table.js.map +1 -1
  10. package/dist/cjs/src/ensure-correct-bdd.js +2 -3
  11. package/dist/cjs/src/ensure-correct-bdd.js.map +1 -1
  12. package/dist/cjs/src/fill-truth-table.js +1 -2
  13. package/dist/cjs/src/fill-truth-table.js.map +1 -1
  14. package/dist/cjs/src/find-similar-node.js +1 -2
  15. package/dist/cjs/src/find-similar-node.js.map +1 -1
  16. package/dist/cjs/src/index.d.ts +2 -1
  17. package/dist/cjs/src/index.es5.js +17 -7
  18. package/dist/cjs/src/index.es5.js.map +1 -1
  19. package/dist/cjs/src/index.js +2 -1
  20. package/dist/cjs/src/index.js.map +1 -1
  21. package/dist/cjs/src/internal-node.js +6 -3
  22. package/dist/cjs/src/internal-node.js.map +1 -1
  23. package/dist/cjs/src/optimize-brute-force.js +10 -12
  24. package/dist/cjs/src/optimize-brute-force.js.map +1 -1
  25. package/dist/cjs/src/ordering/build-bdd.d.ts +13 -0
  26. package/dist/cjs/src/ordering/build-bdd.js +64 -0
  27. package/dist/cjs/src/ordering/build-bdd.js.map +1 -0
  28. package/dist/cjs/src/ordering/dense-truth-table.d.ts +42 -0
  29. package/dist/cjs/src/ordering/dense-truth-table.js +125 -0
  30. package/dist/cjs/src/ordering/dense-truth-table.js.map +1 -0
  31. package/dist/cjs/src/ordering/exact-cost-ordering.d.ts +91 -0
  32. package/dist/cjs/src/ordering/exact-cost-ordering.js +351 -0
  33. package/dist/cjs/src/ordering/exact-cost-ordering.js.map +1 -0
  34. package/dist/cjs/src/ordering/exact-ordering.d.ts +89 -0
  35. package/dist/cjs/src/ordering/exact-ordering.js +260 -0
  36. package/dist/cjs/src/ordering/exact-ordering.js.map +1 -0
  37. package/dist/cjs/src/ordering/index.d.ts +22 -0
  38. package/dist/cjs/src/ordering/index.js +38 -0
  39. package/dist/cjs/src/ordering/index.js.map +1 -0
  40. package/dist/cjs/src/ordering/int-pair-map.d.ts +20 -0
  41. package/dist/cjs/src/ordering/int-pair-map.js +85 -0
  42. package/dist/cjs/src/ordering/int-pair-map.js.map +1 -0
  43. package/dist/cjs/src/ordering/local-search.d.ts +114 -0
  44. package/dist/cjs/src/ordering/local-search.js +317 -0
  45. package/dist/cjs/src/ordering/local-search.js.map +1 -0
  46. package/dist/cjs/src/ordering/optimize-ordering.d.ts +153 -0
  47. package/dist/cjs/src/ordering/optimize-ordering.js +406 -0
  48. package/dist/cjs/src/ordering/optimize-ordering.js.map +1 -0
  49. package/dist/cjs/src/ordering/ordering-evaluator.d.ts +198 -0
  50. package/dist/cjs/src/ordering/ordering-evaluator.js +384 -0
  51. package/dist/cjs/src/ordering/ordering-evaluator.js.map +1 -0
  52. package/dist/cjs/src/ordering/shared-diagram.d.ts +85 -0
  53. package/dist/cjs/src/ordering/shared-diagram.js +295 -0
  54. package/dist/cjs/src/ordering/shared-diagram.js.map +1 -0
  55. package/dist/cjs/src/packed/index.d.ts +2 -0
  56. package/dist/cjs/src/{minimal-string → packed}/index.js +2 -5
  57. package/dist/cjs/src/packed/index.js.map +1 -0
  58. package/dist/cjs/src/packed/packed-bdd-base64-string.d.ts +3 -0
  59. package/dist/cjs/src/packed/packed-bdd-base64-string.js +46 -0
  60. package/dist/cjs/src/packed/packed-bdd-base64-string.js.map +1 -0
  61. package/dist/cjs/src/packed/packed-bdd.d.ts +13 -0
  62. package/dist/cjs/src/packed/packed-bdd.js +70 -0
  63. package/dist/cjs/src/packed/packed-bdd.js.map +1 -0
  64. package/dist/cjs/src/root-node.d.ts +1 -2
  65. package/dist/cjs/src/root-node.js +4 -9
  66. package/dist/cjs/src/root-node.js.map +1 -1
  67. package/dist/cjs/src/types.d.ts +0 -12
  68. package/dist/cjs/src/util.js +29 -21
  69. package/dist/cjs/src/util.js.map +1 -1
  70. package/dist/esm/src/abstract-node.js +7 -4
  71. package/dist/esm/src/abstract-node.js.map +1 -1
  72. package/dist/esm/src/branches.d.ts +4 -1
  73. package/dist/esm/src/branches.js +8 -7
  74. package/dist/esm/src/branches.js.map +1 -1
  75. package/dist/esm/src/create-bdd-from-truth-table.js.map +1 -1
  76. package/dist/esm/src/index.d.ts +2 -1
  77. package/dist/esm/src/index.js +2 -1
  78. package/dist/esm/src/index.js.map +1 -1
  79. package/dist/esm/src/internal-node.js +7 -4
  80. package/dist/esm/src/internal-node.js.map +1 -1
  81. package/dist/esm/src/optimize-brute-force.js +5 -7
  82. package/dist/esm/src/optimize-brute-force.js.map +1 -1
  83. package/dist/esm/src/ordering/build-bdd.d.ts +13 -0
  84. package/dist/esm/src/ordering/build-bdd.js +61 -0
  85. package/dist/esm/src/ordering/build-bdd.js.map +1 -0
  86. package/dist/esm/src/ordering/dense-truth-table.d.ts +42 -0
  87. package/dist/esm/src/ordering/dense-truth-table.js +117 -0
  88. package/dist/esm/src/ordering/dense-truth-table.js.map +1 -0
  89. package/dist/esm/src/ordering/exact-cost-ordering.d.ts +91 -0
  90. package/dist/esm/src/ordering/exact-cost-ordering.js +347 -0
  91. package/dist/esm/src/ordering/exact-cost-ordering.js.map +1 -0
  92. package/dist/esm/src/ordering/exact-ordering.d.ts +89 -0
  93. package/dist/esm/src/ordering/exact-ordering.js +256 -0
  94. package/dist/esm/src/ordering/exact-ordering.js.map +1 -0
  95. package/dist/esm/src/ordering/index.d.ts +22 -0
  96. package/dist/esm/src/ordering/index.js +17 -0
  97. package/dist/esm/src/ordering/index.js.map +1 -0
  98. package/dist/esm/src/ordering/int-pair-map.d.ts +20 -0
  99. package/dist/esm/src/ordering/int-pair-map.js +81 -0
  100. package/dist/esm/src/ordering/int-pair-map.js.map +1 -0
  101. package/dist/esm/src/ordering/local-search.d.ts +114 -0
  102. package/dist/esm/src/ordering/local-search.js +308 -0
  103. package/dist/esm/src/ordering/local-search.js.map +1 -0
  104. package/dist/esm/src/ordering/optimize-ordering.d.ts +153 -0
  105. package/dist/esm/src/ordering/optimize-ordering.js +399 -0
  106. package/dist/esm/src/ordering/optimize-ordering.js.map +1 -0
  107. package/dist/esm/src/ordering/ordering-evaluator.d.ts +198 -0
  108. package/dist/esm/src/ordering/ordering-evaluator.js +377 -0
  109. package/dist/esm/src/ordering/ordering-evaluator.js.map +1 -0
  110. package/dist/esm/src/ordering/shared-diagram.d.ts +85 -0
  111. package/dist/esm/src/ordering/shared-diagram.js +289 -0
  112. package/dist/esm/src/ordering/shared-diagram.js.map +1 -0
  113. package/dist/esm/src/packed/index.d.ts +2 -0
  114. package/dist/esm/src/packed/index.js +3 -0
  115. package/dist/esm/src/packed/index.js.map +1 -0
  116. package/dist/esm/src/packed/packed-bdd-base64-string.d.ts +3 -0
  117. package/dist/esm/src/packed/packed-bdd-base64-string.js +42 -0
  118. package/dist/esm/src/packed/packed-bdd-base64-string.js.map +1 -0
  119. package/dist/esm/src/packed/packed-bdd.d.ts +13 -0
  120. package/dist/esm/src/packed/packed-bdd.js +66 -0
  121. package/dist/esm/src/packed/packed-bdd.js.map +1 -0
  122. package/dist/esm/src/root-node.d.ts +1 -2
  123. package/dist/esm/src/root-node.js +5 -10
  124. package/dist/esm/src/root-node.js.map +1 -1
  125. package/dist/esm/src/types.d.ts +0 -12
  126. package/dist/esm/src/util.js +14 -5
  127. package/dist/esm/src/util.js.map +1 -1
  128. package/docs/variable-ordering.md +306 -0
  129. package/package.json +15 -12
  130. package/src/abstract-node.ts +7 -5
  131. package/src/branches.ts +9 -7
  132. package/src/create-bdd-from-truth-table.ts +1 -1
  133. package/src/index.ts +2 -1
  134. package/src/internal-node.ts +7 -4
  135. package/src/optimize-brute-force.ts +5 -7
  136. package/src/ordering/build-bdd.ts +70 -0
  137. package/src/ordering/dense-truth-table.ts +161 -0
  138. package/src/ordering/exact-cost-ordering.ts +425 -0
  139. package/src/ordering/exact-ordering.ts +317 -0
  140. package/src/ordering/index.ts +57 -0
  141. package/src/ordering/int-pair-map.ts +85 -0
  142. package/src/ordering/local-search.ts +369 -0
  143. package/src/ordering/optimize-ordering.ts +570 -0
  144. package/src/ordering/ordering-evaluator.ts +479 -0
  145. package/src/ordering/shared-diagram.ts +310 -0
  146. package/src/packed/index.ts +2 -0
  147. package/src/packed/packed-bdd-base64-string.ts +47 -0
  148. package/src/packed/packed-bdd.ts +98 -0
  149. package/src/root-node.ts +8 -17
  150. package/src/types.ts +0 -18
  151. package/src/util.ts +15 -6
  152. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
  153. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js +0 -60
  154. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
  155. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
  156. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js +0 -24
  157. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
  158. package/dist/cjs/src/minimal-string/index.d.ts +0 -5
  159. package/dist/cjs/src/minimal-string/index.js.map +0 -1
  160. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
  161. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js +0 -58
  162. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
  163. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
  164. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js +0 -21
  165. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
  166. package/dist/cjs/src/minimal-string/string-format.d.ts +0 -9
  167. package/dist/cjs/src/minimal-string/string-format.js +0 -61
  168. package/dist/cjs/src/minimal-string/string-format.js.map +0 -1
  169. package/dist/esm/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
  170. package/dist/esm/src/minimal-string/bdd-to-minimal-string.js +0 -55
  171. package/dist/esm/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
  172. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
  173. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js +0 -19
  174. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
  175. package/dist/esm/src/minimal-string/index.d.ts +0 -5
  176. package/dist/esm/src/minimal-string/index.js +0 -6
  177. package/dist/esm/src/minimal-string/index.js.map +0 -1
  178. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
  179. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js +0 -54
  180. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
  181. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
  182. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js +0 -17
  183. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
  184. package/dist/esm/src/minimal-string/string-format.d.ts +0 -9
  185. package/dist/esm/src/minimal-string/string-format.js +0 -54
  186. package/dist/esm/src/minimal-string/string-format.js.map +0 -1
  187. package/src/minimal-string/bdd-to-minimal-string.ts +0 -72
  188. package/src/minimal-string/bdd-to-simple-bdd.ts +0 -31
  189. package/src/minimal-string/index.ts +0 -5
  190. package/src/minimal-string/minimal-string-to-simple-bdd.ts +0 -67
  191. package/src/minimal-string/resolve-with-simple-bdd.ts +0 -25
  192. package/src/minimal-string/string-format.ts +0 -67
package/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ - FIX `decimalToPaddedBinary()` cut off all bits above 32, so `decimalToPaddedBinary(2 ** 32, 33)` returned only zeros.
6
+ - FIX `getNextStateSet()` returned wrong state sets for keys with more than 32 characters and lost precision for keys with more than 53 characters.
package/README.md CHANGED
@@ -1,22 +1,90 @@
1
- # binary decision diagram
1
+ # Binary Decision Diagram (BDD) library for JavaScript and TypeScript
2
2
 
3
- A library to **create**, **minimize** and **optimize** binary decision diagrams in JavaScript.
3
+ [![npm version](https://img.shields.io/npm/v/binary-decision-diagram.svg)](https://www.npmjs.com/package/binary-decision-diagram)
4
+ [![npm downloads](https://img.shields.io/npm/dm/binary-decision-diagram.svg)](https://www.npmjs.com/package/binary-decision-diagram)
5
+ [![license](https://img.shields.io/npm/l/binary-decision-diagram.svg)](./LICENSE)
4
6
 
7
+ **binary-decision-diagram** is a JavaScript and TypeScript library to **create**, **minimize** and **optimize** binary decision diagrams (BDDs).
8
+ Build a reduced ordered binary decision diagram (ROBDD) or multi-terminal BDD (MTBDD) from a truth table,
9
+ find a good variable ordering, serialize it to a tiny string and resolve values with it in the browser or in Node.js.
5
10
 
11
+ ## Table of contents
6
12
 
7
- A binary decision diagram is a data structure that represents a set of boolean function in an efficient way. To learn more about it, follow these links:
13
+ - [What is a binary decision diagram?](#what-is-a-binary-decision-diagram)
14
+ - [Features](#features)
15
+ - [Installation](#installation)
16
+ - [Quick start](#quick-start)
17
+ - [API](#api)
18
+ - [Use cases](#use-cases)
19
+ - [Further reading](#further-reading)
8
20
 
9
- - [Introduction on BDDs](https://web.archive.org/web/20110304135553/http://configit.com/fileadmin/Configit/Documents/bdd-eap.pdf)
10
- - [Presentation on BDDs](https://de.slideshare.net/RajeshYadav49/reduced-ordered-binary-decision-diagram-devi)
11
- - [Implementation of ROBDD](https://pdfs.semanticscholar.org/788d/ed39ca36300753bcb20c43762972b00f9b80.pdf)
21
+ ## What is a binary decision diagram?
22
+
23
+ A binary decision diagram (BDD) is a data structure that represents boolean functions in a compact way.
24
+ It is a directed acyclic graph where every internal node tests one boolean variable and every leaf holds a result value.
25
+ By merging identical subgraphs and removing redundant tests (the *reduction* and *elimination* rules),
26
+ a decision tree with `2^n` leaves often shrinks to a few nodes. This is called a reduced ordered binary decision diagram (ROBDD).
27
+
28
+ The size of a BDD depends heavily on the **variable ordering**, the order in which the boolean functions are tested.
29
+ Finding a good ordering is the main way to make a BDD small, and this library ships a fast deterministic optimizer for it.
30
+
31
+ This library builds multi-terminal BDDs: the leaves can hold any number, not only `true` and `false`.
32
+ That makes it a good fit to compile large truth tables or decision tables into small, fast lookup structures.
12
33
 
34
+ ## Features
13
35
 
14
- ### Installation
36
+ - Create a BDD from a truth table (`Map<string, number>`)
37
+ - Minimize it with the reduction and elimination rules (ROBDD)
38
+ - Multi-terminal leaves: map every input combination to a number, not only to a boolean
39
+ - Deterministic variable ordering optimization, with proven optimal results for small tables
40
+ - Optimize for the expected runtime cost of the boolean functions, not only for the node count
41
+ - Don't-care values to remove rows that can never occur
42
+ - Pack a BDD into a typed array, ship it as a short base64 string and resolve it without parsing, ideal for small client-side bundles
43
+ - Written in TypeScript, ships ESM and CommonJS builds with type definitions
44
+
45
+ ## Installation
15
46
 
16
47
  ```bash
17
48
  npm install binary-decision-diagram --save
18
49
  ```
19
50
 
51
+ ## Quick start
52
+
53
+ ```typescript
54
+ import {
55
+ createBddFromTruthTable,
56
+ bddToPackedBdd,
57
+ packedBddToBase64String,
58
+ packedBddFromBase64String,
59
+ resolveWithPackedBdd,
60
+ type ResolverFunctions
61
+ } from 'binary-decision-diagram';
62
+
63
+ // every key is one combination of the boolean functions, the value is the result
64
+ const truthTable = new Map<string, number>();
65
+ truthTable.set('00', 1);
66
+ truthTable.set('01', 3);
67
+ truthTable.set('10', 2);
68
+ truthTable.set('11', 1);
69
+
70
+ const bdd = createBddFromTruthTable(truthTable);
71
+ bdd.minimize();
72
+
73
+ // one boolean function per character of the truth table keys
74
+ const resolvers: ResolverFunctions<{ a: boolean; b: boolean }> = {
75
+ 0: (input) => input.a,
76
+ 1: (input) => input.b
77
+ };
78
+ bdd.resolve(resolvers, { a: true, b: false }); // 2
79
+
80
+ // store the BDD as a small string and resolve it without creating the nodes again
81
+ const packedBddString = packedBddToBase64String(bddToPackedBdd(bdd));
82
+ const packedBdd = packedBddFromBase64String(packedBddString);
83
+ resolveWithPackedBdd(packedBdd, resolvers, { a: true, b: false }); // 2
84
+ ```
85
+
86
+ ## API
87
+
20
88
  ### createBddFromTruthTable()
21
89
 
22
90
  Creates a BDD from a truth table.
@@ -24,10 +92,10 @@ The Truth-Table is a `Map<string, number>` where the string is a truth-set like
24
92
 
25
93
  ```typescript
26
94
  const truthTable = new Map();
27
- truthTable.add('00', 1);
28
- truthTable.add('01', 3);
29
- truthTable.add('10', 2);
30
- truthTable.add('11', 1);
95
+ truthTable.set('00', 1);
96
+ truthTable.set('01', 3);
97
+ truthTable.set('10', 2);
98
+ truthTable.set('11', 1);
31
99
 
32
100
  const bdd = createBddFromTruthTable(
33
101
  truthTable
@@ -83,38 +151,138 @@ const bddValue = bdd.resolve(
83
151
  ); // returns a value from the truth table
84
152
  ```
85
153
 
86
- ### bddToMinimalString()
154
+ ### Packed BDD (for production)
155
+
156
+ The recommended way to ship an optimized BDD to production is the **packed base64 string**.
157
+
158
+ `bddToPackedBdd()` stores the whole BDD in a single typed array (`Uint8Array`, `Uint16Array` or `Uint32Array`, the narrowest that fits).
159
+ Each non-leaf node takes three entries `[level, ref0, ref1]`, so a BDD with less than ~250 nodes only needs 3 bytes per node.
160
+ `resolveWithPackedBdd()` walks directly over that array: no JavaScript objects have to be created on startup
161
+ and resolving is fast.
162
+ `packedBddToBase64String()` turns the typed array into a short base64 string that you can put into your source code.
163
+ It only contains ASCII characters, so it never has to be escaped by bundlers or minifiers.
164
+ The leaf values must be non-negative integers.
165
+
166
+ **1. At build time**, create the BDD, pack it and write the string into a source file:
167
+
168
+ ```typescript
169
+ import * as fs from 'fs';
170
+ import { bddToPackedBdd, packedBddToBase64String } from 'binary-decision-diagram';
171
+
172
+ const packedBddString = packedBddToBase64String(bddToPackedBdd(bdd));
173
+ fs.writeFileSync(
174
+ 'src/bdd.generated.ts',
175
+ `export const PACKED_BDD_STRING = '${packedBddString}';\n`
176
+ );
177
+ ```
87
178
 
88
- Returns a string-representation of the BDD which can be used in the client side to have a small javascript-bundle.
89
- BDDs can be very big so an effective storage format was needed.
179
+ **2. At runtime**, decode the string once with `packedBddFromBase64String()` and resolve with `resolveWithPackedBdd()`.
180
+ Decoding uses the native `Uint8Array.fromBase64()` (or `atob()` where it does not exist yet) and takes a few microseconds.
181
+ Do it lazily so it only runs when the BDD is used the first time:
90
182
 
91
183
  ```typescript
92
- const minimalString = bddToMinimalString(bdd)
184
+ import {
185
+ packedBddFromBase64String,
186
+ resolveWithPackedBdd,
187
+ PackedBdd,
188
+ ResolverFunctions
189
+ } from 'binary-decision-diagram';
190
+ import { PACKED_BDD_STRING } from './bdd.generated';
191
+
192
+ let packedBdd: PackedBdd | undefined;
193
+ export function resolveInput(resolvers: ResolverFunctions, input: any): number {
194
+ if (!packedBdd) {
195
+ packedBdd = packedBddFromBase64String(PACKED_BDD_STRING);
196
+ }
197
+ return resolveWithPackedBdd(packedBdd, resolvers, input);
198
+ }
93
199
  ```
94
200
 
95
- ### minimalStringToSimpleBdd()
201
+ **Migrating from version 3**: the minimal string and the `SimpleBdd` were removed.
202
+ Replace `bddToMinimalString()` with `packedBddToBase64String(bddToPackedBdd(bdd))`,
203
+ `minimalStringToSimpleBdd()` with `packedBddFromBase64String()`,
204
+ `resolveWithSimpleBdd()` with `resolveWithPackedBdd()`
205
+ and `bdd.toSimpleBdd()` with `bddToPackedBdd(bdd)`.
206
+ An old minimal string cannot be read anymore, create the BDD again (for example with `createBddWithOrdering()`) and pack it.
207
+
208
+ ### optimizeOrdering()
209
+
210
+ Deterministically finds a variable ordering (the order in which the boolean functions are tested) that gives a small BDD and returns the minimized BDD for it.
211
+ Unlike `optimizeBruteForce()` it does not shuffle randomly: the same truth table always gives the same result,
212
+ it needs seconds instead of hours, and for small enough tables it proves that no better ordering exists.
213
+ How it works is described in [docs/variable-ordering.md](./docs/variable-ordering.md).
96
214
 
97
- Parses the minimal string into an `SimpleBdd`. The `SimpleBdd` very small and only can resolve stuff.
215
+ The truth table must contain all `2^n` rows (`n` = length of the keys, at most 30).
216
+ Fill the rows that can never occur with a don't-care value first.
217
+ Time and memory grow with `2^n`: tables with 17 or 18 boolean functions take a few seconds
218
+ (up to about 10 seconds with `functionCosts`), 21 functions take about half a minute and 0.5 GB.
219
+ The computation runs synchronously and blocks the event loop while it runs.
98
220
 
99
221
  ```typescript
100
- const simpleBdd = minimalStringToSimpleBdd(str);
222
+ const dontCareValue = 42; // value of the rows that can never occur at runtime
223
+ const truthTable: TruthTable = new Map();
224
+ truthTable.set('00000', 1);
225
+ // ... the known rows
226
+ fillTruthTable(truthTable, 5, dontCareValue);
227
+
228
+ const result = await optimizeOrdering({
229
+ truthTable,
230
+ // (optional) the don't-care rows are resolved like removeIrrelevantLeafNodes() does it:
231
+ // a branch that only leads to don't-care rows is replaced by its sibling
232
+ dontCareValue,
233
+ // (optional) orderings to start from, for example the result of a previous run
234
+ initialOrderings: [[3, 0, 1, 2, 4]],
235
+ // (optional) 'auto' (default) runs the exact search when there are at most 20 boolean functions
236
+ // and the BDD found by the local search has at most 5000 nodes, true always runs it, false never
237
+ exact: 'auto',
238
+ // (optional) called whenever a better ordering was found
239
+ onImprovement: ({ nodeCount, phase }) => console.log(phase + ': ' + nodeCount + ' nodes')
240
+ });
241
+
242
+ result.bdd; // the minimized BDD, ready for bddToPackedBdd()
243
+ result.ordering; // ordering[level] = index of the boolean function tested on that level
244
+ result.nodeCount; // result.bdd.countNodes()
245
+ result.optimal; // true when it is proven that no ordering gives fewer nodes for result.truthTable
246
+ result.truthTable; // the truth table with the don't-care rows resolved, same keys as the input, in row order
101
247
  ```
102
248
 
103
- ### resolveWithMinimalBdd()
249
+ With don't-care rows, `optimal` refers to the way the don't-care rows were resolved in `result.truthTable`.
250
+ Which values the don't-care rows get is decided by a heuristic, so another ordering can occasionally reach a smaller BDD
251
+ by resolving them differently. For the same reason, rebuild the BDD from `result.truthTable`,
252
+ not from the input table: `createBddWithOrdering(result.truthTable, result.ordering)`.
104
253
 
105
- Resolves a value with the `SimpleBdd` and the `ResolverFunctions`.
254
+ When the boolean functions have different runtime costs, pass them and the optimizer
255
+ minimizes the expected cost of one `resolve()` call (the costs of the functions that are
256
+ actually called on the way from the root to the leaf, averaged over the rows) instead of the amount of nodes.
257
+ Expensive functions then end up on the levels where they are needed least often.
106
258
 
107
259
  ```typescript
108
- resolveWithSimpleBdd(
109
- simpleBdd,
110
- resolvers,
111
- key
112
- );
260
+ const result = await optimizeOrdering({
261
+ truthTable,
262
+ dontCareValue,
263
+ // cost of calling each boolean function, one entry per character of the truth table keys
264
+ functionCosts: [1, 1, 50, 1, 20],
265
+ // (optional) how often a row occurs at runtime, default: every row that is not a don't-care row equally often
266
+ rowWeight: (key, value) => key.startsWith('1') ? 10 : 1
267
+ });
268
+
269
+ result.expectedCost; // expected cost of one resolve() call
270
+ result.optimal; // true when it is proven that no ordering has a lower expected cost for result.truthTable
113
271
  ```
114
272
 
273
+ Among orderings with the same expected cost, fewer nodes are preferred, but this tie-break is not part of the proof.
274
+
275
+ Coming from `optimizeBruteForce()`: instead of `afterBddCreation: bdd => bdd.removeIrrelevantLeafNodes(x)`,
276
+ pass `dontCareValue: x`. The optimizer can only make use of the don't-care rows when it knows about them.
277
+
278
+ Use `findOrdering()` with the same options when you only need the ordering and not the BDD,
279
+ and `createBddWithOrdering(truthTable, ordering, dontCareValue)` to build the minimized BDD for a known ordering
280
+ without going through the full decision tree.
281
+
115
282
  ### optimizeBruteForce()
116
283
 
117
- Optimizes the sorting of the boolean functions to get an optimal BDD. Returns a promise with the best found BDD.
284
+ Optimizes the sorting of the boolean functions by shuffling randomly. Prefer `optimizeOrdering()`, which is deterministic and much faster.
285
+ Returns a promise with the best found BDD.
118
286
 
119
287
  ```typescript
120
288
  const optimizedResult = await optimizeBruteForce({
@@ -122,16 +290,28 @@ const optimizedResult = await optimizeBruteForce({
122
290
  iterations: 10000,
123
291
  // hook that runs whenever a bdd is created (optional)
124
292
  afterBddCreation: (bdd: RootNode) => {
125
- bdd.removeIrrelevantLeafNodes(unknownValueActionId);
293
+ bdd.removeIrrelevantLeafNodes(dontCareValue);
126
294
  },
127
295
  // hook that is triggered whenever a better bdd was found (optional)
128
296
  onBetterBdd: (res: OptimisationResult) => {
129
- const bddMinimalString = bddToMinimalString(res.bdd);
130
- console.log('new string: ' + bddMinimalString);
131
- console.log('value mapping:');
132
- console.dir(res.mapping);
297
+ const packedBddString = packedBddToBase64String(bddToPackedBdd(res.bdd));
298
+ console.log('new string: ' + packedBddString);
133
299
  },
134
300
  // (optional) start with this BDD to optimize. If not set, will create an own one.
135
301
  initialBdd: myBdd
136
302
  });
137
303
  ```
304
+
305
+ ## Use cases
306
+
307
+ - **Compiling decision tables**: turn a large truth table of business rules or query conditions into a small BDD that needs only a few boolean checks per lookup.
308
+ - **Small client-side bundles**: precompute and optimize the BDD at build time, ship it as a packed base64 string and resolve it with `resolveWithPackedBdd()`.
309
+ - **Event reduction in databases**: [event-reduce](https://github.com/pubkey/event-reduce) uses this library to decide how a query result changes on a write event, which powers the realtime queries of the [RxDB JavaScript Database](https://rxdb.info/).
310
+
311
+ ## Further reading
312
+
313
+ - [How the variable ordering optimizer works](./docs/variable-ordering.md)
314
+ - [Introduction on BDDs](https://web.archive.org/web/20110304135553/http://configit.com/fileadmin/Configit/Documents/bdd-eap.pdf)
315
+ - [Presentation on BDDs](https://de.slideshare.net/RajeshYadav49/reduced-ordered-binary-decision-diagram-devi)
316
+ - [Implementation of ROBDD](https://pdfs.semanticscholar.org/788d/ed39ca36300753bcb20c43762972b00f9b80.pdf)
317
+ - [Binary decision diagram on Wikipedia](https://en.wikipedia.org/wiki/Binary_decision_diagram)
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbstractNode = void 0;
4
4
  const util_js_1 = require("./util.js");
5
+ const branches_js_1 = require("./branches.js");
5
6
  const find_similar_node_js_1 = require("./find-similar-node.js");
6
7
  class AbstractNode {
7
8
  level;
@@ -144,10 +145,12 @@ class AbstractNode {
144
145
  const ownParents = this.parents.getAll();
145
146
  const parentsWithStrictEqualBranches = [];
146
147
  ownParents.forEach((parent) => {
147
- // console.log('ownParent: ' + parent.id);
148
- const branchKey = parent.branches.getKeyOfNode(this);
149
- // console.log('branchKey: ' + branchKey);
150
- parent.branches.setBranch(branchKey, other);
148
+ // a parent (the root node) can have this node in both branches
149
+ branches_js_1.BRANCH_KEYS.forEach(branchKey => {
150
+ if (parent.branches.getBranch(branchKey) === this) {
151
+ parent.branches.setBranch(branchKey, other);
152
+ }
153
+ });
151
154
  if (parent.branches.areBranchesStrictEqual()) {
152
155
  parentsWithStrictEqualBranches.push(parent);
153
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-node.js","sourceRoot":"","sources":["../../../src/abstract-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abstract-node.js","sourceRoot":"","sources":["../../../src/abstract-node.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,15 @@
1
1
  import type { BooleanString, NonRootNode, NonLeafNode } from './types.js';
2
2
  import { AbstractNode } from './abstract-node.js';
3
+ export declare const BRANCH_KEYS: BooleanString[];
3
4
  /**
4
5
  * represents the branches of a single node
5
6
  */
6
7
  export declare class Branches {
7
8
  private node;
8
9
  deleted: boolean;
9
- private branches;
10
+ data: {
11
+ [k in BooleanString]: NonRootNode;
12
+ };
10
13
  constructor(node: NonLeafNode);
11
14
  setBranch(which: BooleanString, branchNode: NonRootNode): void;
12
15
  getKeyOfNode(node: NonRootNode): BooleanString;
@@ -1,23 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureNodesNotStrictEqual = exports.Branches = void 0;
3
+ exports.Branches = exports.BRANCH_KEYS = void 0;
4
+ exports.ensureNodesNotStrictEqual = ensureNodesNotStrictEqual;
5
+ exports.BRANCH_KEYS = ['0', '1'];
4
6
  /**
5
7
  * represents the branches of a single node
6
8
  */
7
9
  class Branches {
8
10
  node;
9
11
  deleted = false;
10
- branches = {};
12
+ data = {};
11
13
  constructor(node) {
12
14
  this.node = node;
13
15
  }
14
16
  setBranch(which, branchNode) {
15
- const previous = this.branches[which];
17
+ const previous = this.data[which];
16
18
  if (previous === branchNode) {
17
19
  return;
18
20
  }
19
21
  // set new branch
20
- this.branches[which] = branchNode;
22
+ this.data[which] = branchNode;
21
23
  branchNode.parents.add(this.node);
22
24
  }
23
25
  getKeyOfNode(node) {
@@ -32,7 +34,7 @@ class Branches {
32
34
  }
33
35
  }
34
36
  getBranch(which) {
35
- return this.branches[which];
37
+ return this.data[which];
36
38
  }
37
39
  getBothBranches() {
38
40
  return [
@@ -59,11 +61,11 @@ class Branches {
59
61
  }
60
62
  }
61
63
  areBranchesStrictEqual() {
62
- return this.branches['0'] === this.branches['1'];
64
+ return this.data['0'] === this.data['1'];
63
65
  }
64
66
  hasEqualBranches() {
65
- return JSON.stringify(this.branches['0']) ===
66
- JSON.stringify(this.branches['1']);
67
+ return JSON.stringify(this.data['0']) ===
68
+ JSON.stringify(this.data['1']);
67
69
  }
68
70
  }
69
71
  exports.Branches = Branches;
@@ -72,5 +74,4 @@ function ensureNodesNotStrictEqual(node1, node2) {
72
74
  throw new Error('cannot have two strict equal branches');
73
75
  }
74
76
  }
75
- exports.ensureNodesNotStrictEqual = ensureNodesNotStrictEqual;
76
77
  //# sourceMappingURL=branches.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"branches.js","sourceRoot":"","sources":["../../../src/branches.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,QAAQ;IAOL;IANL,OAAO,GAAY,KAAK,CAAC;IACxB,QAAQ,GAEZ,EAAS,CAAC;IAEd,YACY,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;IACzB,CAAC;IAEE,SAAS,CAAC,KAAoB,EAAE,UAAuB;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;QAClC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,YAAY,CAAC,IAAiB;QACjC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,GAAG,CAAC;QACf,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAEM,SAAS,CAAC,KAAoB;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEM,eAAe;QAClB,OAAO;YACH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;SACtB,CAAC;IACN,CAAC;IAEM,eAAe,CAAC,IAAkB;QACrC,IACI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAC9B,CAAC;YACC,OAAO,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEM,iBAAiB,CAAC,EAAU;QAC/B,IACI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAC/B,CAAC;YACC,OAAO,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEM,sBAAsB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAEM,gBAAgB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;CACJ;AAxED,4BAwEC;AAED,SAAgB,yBAAyB,CACrC,KAAkB,EAClB,KAAkB;IAElB,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;AACL,CAAC;AAPD,8DAOC"}
1
+ {"version":3,"file":"branches.js","sourceRoot":"","sources":["../../../src/branches.ts"],"names":[],"mappings":";;;AAkFA,8DAOC;AAtFY,QAAA,WAAW,GAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAa,QAAQ;IAOL;IANL,OAAO,GAAY,KAAK,CAAC;IACzB,IAAI,GAEP,EAAS,CAAC;IAEd,YACY,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;IACzB,CAAC;IAEE,SAAS,CAAC,KAAoB,EAAE,UAAuB;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;QAC9B,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,YAAY,CAAC,IAAiB;QACjC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,GAAG,CAAC;QACf,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAEM,SAAS,CAAC,KAAoB;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAEM,eAAe;QAClB,OAAO;YACH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;SACtB,CAAC;IACN,CAAC;IAEM,eAAe,CAAC,IAAkB;QACrC,IACI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAC9B,CAAC;YACC,OAAO,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEM,iBAAiB,CAAC,EAAU;QAC/B,IACI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAC/B,CAAC;YACC,OAAO,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEM,sBAAsB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAEM,gBAAgB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;CACJ;AAxED,4BAwEC;AAED,SAAgB,yBAAyB,CACrC,KAAkB,EAClB,KAAkB;IAElB,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;AACL,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createBddFromTruthTable = void 0;
3
+ exports.createBddFromTruthTable = createBddFromTruthTable;
4
4
  const root_node_js_1 = require("./root-node.js");
5
5
  const util_js_1 = require("./util.js");
6
6
  const internal_node_js_1 = require("./internal-node.js");
@@ -34,5 +34,4 @@ function createBddFromTruthTable(truthTable) {
34
34
  }
35
35
  return root;
36
36
  }
37
- exports.createBddFromTruthTable = createBddFromTruthTable;
38
37
  //# sourceMappingURL=create-bdd-from-truth-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-bdd-from-truth-table.js","sourceRoot":"","sources":["../../../src/create-bdd-from-truth-table.ts"],"names":[],"mappings":";;;AAAA,iDAA0C;AAC1C,uCAAqC;AACrC,yDAAkD;AAClD,iDAA0C;AAG1C,SAAgB,uBAAuB,CACnC,UAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,uBAAQ,EAAE,CAAC;IAE5B,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;IAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC;IAGD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;QACzC,IAAI,QAAQ,GAAgB,IAAI,CAAC;QAEjC,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,KAAK,GAAkB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAkB,CAAC;YAEjE,sDAAsD;YACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CACvB,KAAK,EACL,IAAI,+BAAY,CACZ,KAAK,EACL,IAAI,EACJ,QAAQ,CACX,CACJ,CAAC;YACN,CAAC;YACD,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAgB,CAAC;QACjE,CAAC;QAED,yBAAyB;QACzB,MAAM,SAAS,GAAG,IAAA,kBAAQ,EAAC,QAAQ,CAAkB,CAAC;QACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACvE,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CACvB,SAAS,EACT,IAAI,uBAAQ,CACR,QAAQ,CAAC,MAAM,EACf,IAAI,EACJ,KAAK,EACL,QAAQ,CACX,CACJ,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AApDD,0DAoDC"}
1
+ {"version":3,"file":"create-bdd-from-truth-table.js","sourceRoot":"","sources":["../../../src/create-bdd-from-truth-table.ts"],"names":[],"mappings":";;AAMA,0DAoDC;AA1DD,iDAA0C;AAC1C,uCAAqC;AACrC,yDAAkD;AAClD,iDAA0C;AAG1C,SAAgB,uBAAuB,CACnC,UAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,uBAAQ,EAAE,CAAC;IAE5B,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC;IAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC;IAGD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;QACzC,IAAI,QAAQ,GAAgB,IAAI,CAAC;QAEjC,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,KAAK,GAAkB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAkB,CAAC;YAEjE,sDAAsD;YACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CACvB,KAAK,EACL,IAAI,+BAAY,CACZ,KAAK,EACL,IAAI,EACJ,QAAQ,CACX,CACJ,CAAC;YACN,CAAC;YACD,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAgB,CAAC;QACjE,CAAC;QAED,yBAAyB;QACzB,MAAM,SAAS,GAAG,IAAA,kBAAQ,EAAC,QAAQ,CAAkB,CAAC;QACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACvE,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CACvB,SAAS,EACT,IAAI,uBAAQ,CACR,QAAQ,CAAC,MAAM,EACf,IAAI,EACJ,KAAK,EACL,QAAQ,CACX,CACJ,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getNodesRecursive = exports.ensureCorrectBdd = void 0;
3
+ exports.ensureCorrectBdd = ensureCorrectBdd;
4
+ exports.getNodesRecursive = getNodesRecursive;
4
5
  /**
5
6
  * run some tests on the bdd
6
7
  * to ensure everything is correct
@@ -84,7 +85,6 @@ function ensureCorrectBdd(bdd) {
84
85
  'bdd includes a deleted node');
85
86
  }
86
87
  }
87
- exports.ensureCorrectBdd = ensureCorrectBdd;
88
88
  function getNodesRecursive(node, set = new Set()) {
89
89
  set.add(node);
90
90
  if (!node.isLeafNode()) {
@@ -98,5 +98,4 @@ function getNodesRecursive(node, set = new Set()) {
98
98
  }
99
99
  return set;
100
100
  }
101
- exports.getNodesRecursive = getNodesRecursive;
102
101
  //# sourceMappingURL=ensure-correct-bdd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-correct-bdd.js","sourceRoot":"","sources":["../../../src/ensure-correct-bdd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ensure-correct-bdd.js","sourceRoot":"","sources":["../../../src/ensure-correct-bdd.ts"],"names":[],"mappings":";;AASA,4CA8GC;AAED,8CAkBC;AAtID;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,GAAa;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAGpD,IAAI,QAAQ,GAAmB,EAAE,CAAC;IAClC,MAAM,SAAS,GAA8B,IAAI,GAAG,EAAE,CAAC;IACvD,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC5B,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9C,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACtB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAGH,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAE9C,IAAI,QAAQ,CAAC,MAAM,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;QAE1C,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3E,MAAM,oBAAoB,GAAa,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAEjG,+EAA+E;QAC/E,+FAA+F;QAE/F,IAAI,cAAc,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACvC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;oBACrB,OAAQ,CAAkB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBACnE,CAAC;gBACD,OAAO,KAAK,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,gBAAgB,EAAE,GAAG,EAAE,CAAC;QAC5B,CAAC;QAED,MAAM,IAAI,KAAK,CACX,qBAAqB;YACrB,kDAAkD;YAClD,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG;YACpC,kBAAkB,GAAG,cAAc,CAAC,IAAI,GAAG,GAAG;YAC9C,wBAAwB,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CACnE,CAAC;IACN,CAAC;IAED,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QACD,MAAM,OAAO,GAAG,IAAmB,CAAC;QAEpC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACX,qBAAqB;gBACrB,6BAA6B,CAChC,CAAC;QACN,CAAC;QAED,iCAAiC;QACjC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACX,qBAAqB;gBACrB,qBAAqB,GAAG,OAAO,CAAC,EAAE,CACrC,CAAC;QACN,CAAC;QAED,IAAI,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAiB,OAAc,CAAC;YAClD,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;YAE7D,0CAA0C;YAC1C,IAAI,YAAY,CAAC,QAAQ,CAAC,sBAAsB,EAAE,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CACX,qBAAqB;oBACrB,+BAA+B;oBAC/B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACzC,CAAC;YACN,CAAC;YAED,6CAA6C;YAC7C,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CACX,qBAAqB;wBACrB,qCAAqC,CACxC,CAAC;gBACN,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAED,8CAA8C;QAC9C,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CACX,qBAAqB;oBACrB,2CAA2C,CAC9C,CAAC;YACN,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAGH,IAAI,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACX,qBAAqB;YACrB,6BAA6B,CAChC,CAAC;IACN,CAAC;AACL,CAAC;AAED,SAAgB,iBAAiB,CAC7B,IAAkB,EAClB,MAAyB,IAAI,GAAG,EAAE;IAElC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,IAAmB,CAAC;QAEpC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAChD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAChD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fillTruthTable = void 0;
3
+ exports.fillTruthTable = fillTruthTable;
4
4
  const util_js_1 = require("./util.js");
5
5
  /**
6
6
  * fills each missing row of a table
@@ -22,5 +22,4 @@ function fillTruthTable(truthTable, inputLength, value) {
22
22
  }
23
23
  }
24
24
  }
25
- exports.fillTruthTable = fillTruthTable;
26
25
  //# sourceMappingURL=fill-truth-table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fill-truth-table.js","sourceRoot":"","sources":["../../../src/fill-truth-table.ts"],"names":[],"mappings":";;;AAAA,uCAImB;AAGnB;;;GAGG;AACH,SAAgB,cAAc,CAC1B,UAAsB,EACtB,WAAmB,EACnB,KAAa;IAEb,MAAM,QAAQ,GAAG,IAAA,6BAAmB,EAAC,WAAW,CAAC,CAAC;IAClD,IAAI,YAAY,GAAG,IAAA,6BAAmB,EAAC,WAAW,CAAC,CAAC;IACpD,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,CAAC,IAAI,EAAE,CAAC;QACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,UAAU,CAAC,GAAG,CACV,YAAY,EACZ,KAAK,CACR,CAAC;QACN,CAAC;QACD,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,YAAY,GAAG,IAAA,yBAAe,EAC1B,YAAY,CACf,CAAC;QACN,CAAC;IACL,CAAC;AACL,CAAC;AAvBD,wCAuBC"}
1
+ {"version":3,"file":"fill-truth-table.js","sourceRoot":"","sources":["../../../src/fill-truth-table.ts"],"names":[],"mappings":";;AAWA,wCAuBC;AAlCD,uCAImB;AAGnB;;;GAGG;AACH,SAAgB,cAAc,CAC1B,UAAsB,EACtB,WAAmB,EACnB,KAAa;IAEb,MAAM,QAAQ,GAAG,IAAA,6BAAmB,EAAC,WAAW,CAAC,CAAC;IAClD,IAAI,YAAY,GAAG,IAAA,6BAAmB,EAAC,WAAW,CAAC,CAAC;IACpD,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,CAAC,IAAI,EAAE,CAAC;QACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,UAAU,CAAC,GAAG,CACV,YAAY,EACZ,KAAK,CACR,CAAC;QACN,CAAC;QACD,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,YAAY,GAAG,IAAA,yBAAe,EAC1B,YAAY,CACf,CAAC;QACN,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findSimilarNode = void 0;
3
+ exports.findSimilarNode = findSimilarNode;
4
4
  /**
5
5
  * find an simliar node in a list of nodes
6
6
  * which is not exactly the same node
@@ -18,5 +18,4 @@ function findSimilarNode(own, others) {
18
18
  }
19
19
  return null;
20
20
  }
21
- exports.findSimilarNode = findSimilarNode;
22
21
  //# sourceMappingURL=find-similar-node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-similar-node.js","sourceRoot":"","sources":["../../../src/find-similar-node.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,SAAgB,eAAe,CAC3B,GAAM,EACN,MAAW;IAEX,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IACI,GAAG,KAAK,KAAK;YACb,CAAC,KAAK,CAAC,OAAO;YACd,GAAG,CAAC,kBAAkB,CAClB,KAAY,EACZ,SAAS,CACZ,EACH,CAAC;YACC,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAnBD,0CAmBC"}
1
+ {"version":3,"file":"find-similar-node.js","sourceRoot":"","sources":["../../../src/find-similar-node.ts"],"names":[],"mappings":";;AAOA,0CAmBC;AAxBD;;;;GAIG;AACH,SAAgB,eAAe,CAC3B,GAAM,EACN,MAAW;IAEX,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IACI,GAAG,KAAK,KAAK;YACb,CAAC,KAAK,CAAC,OAAO;YACd,GAAG,CAAC,kBAAkB,CAClB,KAAY,EACZ,SAAS,CACZ,EACH,CAAC;YACC,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -1,4 +1,3 @@
1
- export * from './minimal-string/index.js';
2
1
  export * from './abstract-node.js';
3
2
  export * from './branches.js';
4
3
  export * from './create-bdd-from-truth-table.js';
@@ -8,6 +7,8 @@ export * from './find-similar-node.js';
8
7
  export * from './internal-node.js';
9
8
  export * from './leaf-node.js';
10
9
  export * from './optimize-brute-force.js';
10
+ export * from './packed/index.js';
11
+ export * from './ordering/index.js';
11
12
  export * from './parents.js';
12
13
  export * from './root-node.js';
13
14
  export * from './util.js';
@@ -23,13 +23,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
23
23
  }) : function(o, v) {
24
24
  o["default"] = v;
25
25
  });
26
- var __importStar = (this && this.__importStar) || function (mod) {
27
- if (mod && mod.__esModule) return mod;
28
- var result = {};
29
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
30
- __setModuleDefault(result, mod);
31
- return result;
32
- };
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
33
43
  Object.defineProperty(exports, "__esModule", { value: true });
34
44
  const pkg = __importStar(require("./index.js"));
35
45
  module.exports = pkg;
@@ -1 +1 @@
1
- {"version":3,"file":"index.es5.js","sourceRoot":"","sources":["../../../src/index.es5.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,gDAAkC;AAElC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"index.es5.js","sourceRoot":"","sources":["../../../src/index.es5.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,gDAAkC;AAElC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC"}
@@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./minimal-string/index.js"), exports);
18
17
  __exportStar(require("./abstract-node.js"), exports);
19
18
  __exportStar(require("./branches.js"), exports);
20
19
  __exportStar(require("./create-bdd-from-truth-table.js"), exports);
@@ -24,6 +23,8 @@ __exportStar(require("./find-similar-node.js"), exports);
24
23
  __exportStar(require("./internal-node.js"), exports);
25
24
  __exportStar(require("./leaf-node.js"), exports);
26
25
  __exportStar(require("./optimize-brute-force.js"), exports);
26
+ __exportStar(require("./packed/index.js"), exports);
27
+ __exportStar(require("./ordering/index.js"), exports);
27
28
  __exportStar(require("./parents.js"), exports);
28
29
  __exportStar(require("./root-node.js"), exports);
29
30
  __exportStar(require("./util.js"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,qDAAmC;AACnC,gDAA8B;AAC9B,mEAAiD;AACjD,0DAAwC;AACxC,wDAAsC;AACtC,yDAAuC;AACvC,qDAAmC;AACnC,iDAA+B;AAC/B,4DAA0C;AAC1C,+CAA6B;AAC7B,iDAA+B;AAC/B,4CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,gDAA8B;AAC9B,mEAAiD;AACjD,0DAAwC;AACxC,wDAAsC;AACtC,yDAAuC;AACvC,qDAAmC;AACnC,iDAA+B;AAC/B,4DAA0C;AAC1C,oDAAkC;AAClC,sDAAoC;AACpC,+CAA6B;AAC7B,iDAA+B;AAC/B,4CAA0B"}