semantifold 0.10.0 → 0.12.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 (56) hide show
  1. package/README.md +2 -2
  2. package/build/src/backends/c.d.ts +2 -1
  3. package/build/src/backends/c.d.ts.map +1 -1
  4. package/build/src/backends/c.js +26 -5
  5. package/build/src/backends/cpp.js +3 -1
  6. package/build/src/backends/kotlin.d.ts +1 -1
  7. package/build/src/backends/kotlin.js +2 -2
  8. package/build/src/backends/ordered-expressions.d.ts +19 -7
  9. package/build/src/backends/ordered-expressions.d.ts.map +1 -1
  10. package/build/src/backends/ordered-expressions.js +46 -11
  11. package/build/src/backends/shared.d.ts.map +1 -1
  12. package/build/src/backends/shared.js +30 -2
  13. package/build/src/frontends/c.d.ts +34 -1
  14. package/build/src/frontends/c.d.ts.map +1 -1
  15. package/build/src/frontends/c.js +128 -21
  16. package/build/src/frontends/java.d.ts.map +1 -1
  17. package/build/src/frontends/java.js +23 -1
  18. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  19. package/build/src/frontends/javascript-typescript.js +45 -4
  20. package/build/src/frontends/php.d.ts.map +1 -1
  21. package/build/src/frontends/php.js +54 -3
  22. package/build/src/frontends/ruby.d.ts.map +1 -1
  23. package/build/src/frontends/ruby.js +55 -5
  24. package/build/src/language-registry.d.ts.map +1 -1
  25. package/build/src/language-registry.js +33 -6
  26. package/build/src/semantic/effects.js +3 -1
  27. package/build/src/semantic/provenance.d.ts.map +1 -1
  28. package/build/src/semantic/provenance.js +11 -1
  29. package/build/src/semantic/types.d.ts +52 -2
  30. package/build/src/semantic/types.d.ts.map +1 -1
  31. package/build/src/semantic/types.js +14 -2
  32. package/build/src/semantic/validate.js +19 -2
  33. package/build/src/toolchains.js +3 -3
  34. package/docs/adr-expression-breadth.md +186 -0
  35. package/docs/c.md +1 -1
  36. package/docs/kotlin.md +2 -2
  37. package/docs/language-support.md +14 -5
  38. package/docs/parser-qualification.md +1 -1
  39. package/docs/testing.md +5 -4
  40. package/package.json +1 -1
  41. package/src/backends/c.js +23 -4
  42. package/src/backends/cpp.js +1 -0
  43. package/src/backends/kotlin.js +1 -1
  44. package/src/backends/ordered-expressions.js +46 -10
  45. package/src/backends/shared.js +31 -1
  46. package/src/frontends/c.js +135 -19
  47. package/src/frontends/java.js +24 -0
  48. package/src/frontends/javascript-typescript.js +49 -2
  49. package/src/frontends/php.js +61 -2
  50. package/src/frontends/ruby.js +62 -2
  51. package/src/language-registry.js +32 -5
  52. package/src/semantic/effects.js +1 -0
  53. package/src/semantic/provenance.js +8 -0
  54. package/src/semantic/types.js +14 -1
  55. package/src/semantic/validate.js +27 -1
  56. package/src/toolchains.js +2 -2
@@ -13,7 +13,7 @@ export const kotlinArtifactMetadata = Object.freeze({
13
13
  toolchain: "kotlinc",
14
14
  version: "2.4.20"
15
15
  }),
16
- run: Object.freeze({ arguments: Object.freeze(["-jar", "Program.jar"]), toolchain: "java25", version: "25.0.4+7" })
16
+ run: Object.freeze({ arguments: Object.freeze(["-jar", "Program.jar"]), toolchain: "java25", version: "25.0.4.1" })
17
17
  });
18
18
  /**
19
19
  * Emits one deterministic Kotlin/JVM program through the source-aware writer.
@@ -135,4 +135,4 @@ function emitKotlinStatement(writer, statement, indent, path, printTarget) {
135
135
  function identity(name) {
136
136
  return name;
137
137
  }
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia290bGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL2tvdGxpbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUMxQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUVqRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xELFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3RCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTO1lBQ3pHLGtCQUFrQixFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDekQsU0FBUyxFQUFFLElBQUk7UUFDZixlQUFlLEVBQUUsS0FBSztRQUN0QixNQUFNLEVBQUUsYUFBYTtRQUNyQixTQUFTLEVBQUUsU0FBUztRQUNwQixPQUFPLEVBQUUsUUFBUTtLQUNsQixDQUFDO0lBQ0YsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDO0NBQ2xILENBQUMsQ0FBQTtBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNO0lBQzNDLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLHlDQUF5QyxF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Q0FBQyxXQUFXLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQTtRQUN4RyxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQzdGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSwyQkFBMkIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBQzNHLENBQUM7SUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDM0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxJQUFJO0lBQ3BCLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2VtaXRFeHByZXNzaW9ufSBmcm9tIFwiLi9zaGFyZWQuanNcIlxuaW1wb3J0IHtlbWl0U2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5pbXBvcnQge2tvdGxpblJ1bnRpbWV9IGZyb20gXCIuL2tvdGxpbi1ydW50aW1lLmpzXCJcblxuZXhwb3J0IGNvbnN0IGtvdGxpbkFydGlmYWN0TWV0YWRhdGEgPSBPYmplY3QuZnJlZXplKHtcbiAgY29tcGlsZXI6IE9iamVjdC5mcmVlemUoe1xuICAgIGFwaVZlcnNpb246IFwiMi40XCIsXG4gICAgYXJndW1lbnRzOiBPYmplY3QuZnJlZXplKFtcIi1sYW5ndWFnZS12ZXJzaW9uXCIsIFwiMi40XCIsIFwiLWFwaS12ZXJzaW9uXCIsIFwiMi40XCIsIFwiLWp2bS10YXJnZXRcIiwgXCIyNVwiLCBcIi1XZXJyb3JcIixcbiAgICAgIFwiLWluY2x1ZGUtcnVudGltZVwiLCBcIlByb2dyYW0ua3RcIiwgXCItZFwiLCBcIlByb2dyYW0uamFyXCJdKSxcbiAgICBqdm1UYXJnZXQ6IFwiMjVcIixcbiAgICBsYW5ndWFnZVZlcnNpb246IFwiMi40XCIsXG4gICAgb3V0cHV0OiBcIlByb2dyYW0uamFyXCIsXG4gICAgdG9vbGNoYWluOiBcImtvdGxpbmNcIixcbiAgICB2ZXJzaW9uOiBcIjIuNC4yMFwiXG4gIH0pLFxuICBydW46IE9iamVjdC5mcmVlemUoe2FyZ3VtZW50czogT2JqZWN0LmZyZWV6ZShbXCItamFyXCIsIFwiUHJvZ3JhbS5qYXJcIl0pLCB0b29sY2hhaW46IFwiamF2YTI1XCIsIHZlcnNpb246IFwiMjUuMC40KzdcIn0pXG59KVxuXG4vKipcbiAqIEVtaXRzIG9uZSBkZXRlcm1pbmlzdGljIEtvdGxpbi9KVk0gcHJvZ3JhbSB0aHJvdWdoIHRoZSBzb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVLb3RsaW4obW9kdWxlLCB3cml0ZXIpIHtcbiAgd3JpdGVyLnN5bnRoZXRpYyhrb3RsaW5SdW50aW1lLCBcIkNoZWNrZWQgS290bGluL0pWTSBzYWZlLWludGVnZXIgc3VwcG9ydFwiLCBbbW9kdWxlXSwgW1wiXCJdKVxuXG4gIG1vZHVsZS5mdW5jdGlvbnMuZm9yRWFjaCgoZGVjbGFyYXRpb24sIGZ1bmN0aW9uSW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gYC9mdW5jdGlvbnMvJHtmdW5jdGlvbkluZGV4fWBcblxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJkZWNsYXJhdGlvbiBzZXBhcmF0b3JcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJmdW5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJkZWNsYXJhdGlvbiBzcGFjaW5nXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGRlY2xhcmF0aW9uLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIoXCIsIFwiZnVuY3Rpb24gcGFyYW1ldGVyIHNjYWZmb2xkXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlciwgcGFyYW1ldGVySW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YFxuXG4gICAgICBpZiAocGFyYW1ldGVySW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcInBhcmFtZXRlciBzZXBhcmF0b3JcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQocGFyYW1ldGVyLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIsIHBhdGg6IHBhcmFtZXRlclBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCI6IFwiLCBcInBhcmFtZXRlciBhbm5vdGF0aW9uIHNjYWZmb2xkXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwia290bGluXCIsIHBhcmFtZXRlci50eXBlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHBhcmFtZXRlci50eXBlLFxuICAgICAgICBwYXRoOiBgJHtwYXJhbWV0ZXJQYXRofS90eXBlYCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIik6IFwiLCBcImZ1bmN0aW9uIHJldHVybiBzY2FmZm9sZFwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U2NhbGFyVHlwZShcImtvdGxpblwiLCBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLnJldHVyblR5cGUsXG4gICAgICBwYXRoOiBgJHtwYXRofS9yZXR1cm5UeXBlYCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIge1xcblwiLCBcIktvdGxpbiBmdW5jdGlvbiBib2R5IHNjYWZmb2xkXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICBlbWl0S290bGluQmxvY2sod3JpdGVyLCBkZWNsYXJhdGlvbi5ib2R5LCBcIiAgXCIsIGAke3BhdGh9L2JvZHlgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJ9XFxuXCIsIFwiS290bGluIGZ1bmN0aW9uIGJvZHkgc2NhZmZvbGRcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICB9KVxuXG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5mdW4gbWFpbigpIHtcXG5cIiwgXCJLb3RsaW4gZ2VuZXJhdGVkIG1haW4gc2NhZmZvbGRcIiwgW21vZHVsZS5lbnRyeVBvaW50XSwgW1wiL2VudHJ5UG9pbnRcIl0pXG4gIGVtaXRLb3RsaW5CbG9jayh3cml0ZXIsIG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIFwiICBcIiwgXCIvZW50cnlQb2ludC9ib2R5XCIpXG4gIHdyaXRlci5zeW50aGV0aWMoXCJ9XFxuXCIsIFwiS290bGluIGdlbmVyYXRlZCBtYWluIHNjYWZmb2xkXCIsIFttb2R1bGUuZW50cnlQb2ludF0sIFtcIi9lbnRyeVBvaW50XCJdKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBLb3RsaW4gc3RhdGVtZW50IGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFNlbWFudGljIGJsb2NrIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ByaW50VGFyZ2V0XSAtIFRhcmdldC1vd25lZCBwcmludCBmdW5jdGlvbiBzcGVsbGluZy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEtvdGxpbkJsb2NrKHdyaXRlciwgYmxvY2ssIGluZGVudCwgcGF0aCwgcHJpbnRUYXJnZXQgPSBcInByaW50bG5cIikge1xuICBibG9jay5zdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCwgaW5kZXgpID0+XG4gICAgZW1pdEtvdGxpblN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBgJHtwYXRofS9zdGF0ZW1lbnRzLyR7aW5kZXh9YCwgcHJpbnRUYXJnZXQpKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBLb3RsaW4gc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gc3RhdGVtZW50IC0gU2VtYW50aWMgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFNlbWFudGljIHN0YXRlbWVudCBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IHByaW50VGFyZ2V0IC0gVGFyZ2V0LW93bmVkIHByaW50IGZ1bmN0aW9uIHNwZWxsaW5nLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRLb3RsaW5TdGF0ZW1lbnQod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aCwgcHJpbnRUYXJnZXQpIHtcbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChzdGF0ZW1lbnQubXV0YWJsZSA/IFwidmFyXCIgOiBcInZhbFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJkZWNsYXJhdGlvbiBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChzdGF0ZW1lbnQubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCI6IFwiLCBcImxvY2FsIGFubm90YXRpb24gc2NhZmZvbGRcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwia290bGluXCIsIHN0YXRlbWVudC50eXBlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudC50eXBlLFxuICAgICAgcGF0aDogYCR7cGF0aH0vdHlwZWAsIHJvbGU6IFwidHlwZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCI9XCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5pbml0aWFsaXplciwgYCR7cGF0aH0vaW5pdGlhbGl6ZXJgLCBcImtvdGxpblwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoc3RhdGVtZW50LnRhcmdldC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LnRhcmdldCwgcGF0aDogYCR7cGF0aH0vdGFyZ2V0YCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIj1cIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBcImtvdGxpblwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIktvdGxpbiBUYXNrIDAwNSBleHByZXNzaW9uIHN0YXRlbWVudCByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgIGlmICghc3RhdGVtZW50LmV4cHJlc3Npb24pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJLb3RsaW4gYmFyZSByZXR1cm4gcmVhY2hlZCBlbWlzc2lvbi5cIilcbiAgICB3cml0ZXIubWFwcGVkKFwicmV0dXJuXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInJldHVybiBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwia290bGluXCIsIGlkZW50aXR5KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5zeW50aGV0aWMoYCR7cHJpbnRUYXJnZXR9KGAsIFwiS290bGluIHByaW50IHBsdW1iaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwia290bGluXCIsIGlkZW50aXR5KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIpXFxuXCIsIFwiS290bGluIHByaW50bG4gcGx1bWJpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgIT0gXCJJZlN0YXRlbWVudFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgS290bGluIHN0YXRlbWVudCByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICB3cml0ZXIubWFwcGVkKFwiaWZcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIChcIiwgXCJLb3RsaW4gY29uZGl0aW9uYWwgc2NhZmZvbGRcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuY29uZGl0aW9uLCBgJHtwYXRofS9jb25kaXRpb25gLCBcImtvdGxpblwiLCBpZGVudGl0eSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIikge1xcblwiLCBcIktvdGxpbiBjb25kaXRpb25hbCBzY2FmZm9sZFwiLCBbc3RhdGVtZW50LmNvbnNlcXVlbnRdLCBbYCR7cGF0aH0vY29uc2VxdWVudGBdKVxuICBlbWl0S290bGluQmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuY29uc2VxdWVudCwgYCR7aW5kZW50fSAgYCwgYCR7cGF0aH0vY29uc2VxdWVudGAsIHByaW50VGFyZ2V0KVxuICB3cml0ZXIuc3ludGhldGljKGAke2luZGVudH19YCwgXCJLb3RsaW4gY29uZGl0aW9uYWwgc2NhZmZvbGRcIiwgW3N0YXRlbWVudC5jb25zZXF1ZW50XSwgW2Ake3BhdGh9L2NvbnNlcXVlbnRgXSlcbiAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHtcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIGVsc2Uge1xcblwiLCBcIktvdGxpbiBhbHRlcm5hdGUgc2NhZmZvbGRcIiwgW3N0YXRlbWVudC5hbHRlcm5hdGVdLCBbYCR7cGF0aH0vYWx0ZXJuYXRlYF0pXG4gICAgZW1pdEtvdGxpbkJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmFsdGVybmF0ZSwgYCR7aW5kZW50fSAgYCwgYCR7cGF0aH0vYWx0ZXJuYXRlYCwgcHJpbnRUYXJnZXQpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRlbnR9fWAsIFwiS290bGluIGFsdGVybmF0ZSBzY2FmZm9sZFwiLCBbc3RhdGVtZW50LmFsdGVybmF0ZV0sIFtgJHtwYXRofS9hbHRlcm5hdGVgXSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIFByZXNlcnZlcyBhbiBlbWl0dGVkIEtvdGxpbiBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBJZGVudGlmaWVyIHNwZWxsaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gVW5jaGFuZ2VkIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiBpZGVudGl0eShuYW1lKSB7XG4gIHJldHVybiBuYW1lXG59XG4iXX0=
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia290bGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL2tvdGxpbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUMxQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUVqRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xELFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3RCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTO1lBQ3pHLGtCQUFrQixFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDekQsU0FBUyxFQUFFLElBQUk7UUFDZixlQUFlLEVBQUUsS0FBSztRQUN0QixNQUFNLEVBQUUsYUFBYTtRQUNyQixTQUFTLEVBQUUsU0FBUztRQUNwQixPQUFPLEVBQUUsUUFBUTtLQUNsQixDQUFDO0lBQ0YsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDO0NBQ2xILENBQUMsQ0FBQTtBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNO0lBQzNDLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLHlDQUF5QyxF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Q0FBQyxXQUFXLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQTtRQUN4RyxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQzdGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSwyQkFBMkIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBQzNHLENBQUM7SUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDM0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxJQUFJO0lBQ3BCLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2VtaXRFeHByZXNzaW9ufSBmcm9tIFwiLi9zaGFyZWQuanNcIlxuaW1wb3J0IHtlbWl0U2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5pbXBvcnQge2tvdGxpblJ1bnRpbWV9IGZyb20gXCIuL2tvdGxpbi1ydW50aW1lLmpzXCJcblxuZXhwb3J0IGNvbnN0IGtvdGxpbkFydGlmYWN0TWV0YWRhdGEgPSBPYmplY3QuZnJlZXplKHtcbiAgY29tcGlsZXI6IE9iamVjdC5mcmVlemUoe1xuICAgIGFwaVZlcnNpb246IFwiMi40XCIsXG4gICAgYXJndW1lbnRzOiBPYmplY3QuZnJlZXplKFtcIi1sYW5ndWFnZS12ZXJzaW9uXCIsIFwiMi40XCIsIFwiLWFwaS12ZXJzaW9uXCIsIFwiMi40XCIsIFwiLWp2bS10YXJnZXRcIiwgXCIyNVwiLCBcIi1XZXJyb3JcIixcbiAgICAgIFwiLWluY2x1ZGUtcnVudGltZVwiLCBcIlByb2dyYW0ua3RcIiwgXCItZFwiLCBcIlByb2dyYW0uamFyXCJdKSxcbiAgICBqdm1UYXJnZXQ6IFwiMjVcIixcbiAgICBsYW5ndWFnZVZlcnNpb246IFwiMi40XCIsXG4gICAgb3V0cHV0OiBcIlByb2dyYW0uamFyXCIsXG4gICAgdG9vbGNoYWluOiBcImtvdGxpbmNcIixcbiAgICB2ZXJzaW9uOiBcIjIuNC4yMFwiXG4gIH0pLFxuICBydW46IE9iamVjdC5mcmVlemUoe2FyZ3VtZW50czogT2JqZWN0LmZyZWV6ZShbXCItamFyXCIsIFwiUHJvZ3JhbS5qYXJcIl0pLCB0b29sY2hhaW46IFwiamF2YTI1XCIsIHZlcnNpb246IFwiMjUuMC40LjFcIn0pXG59KVxuXG4vKipcbiAqIEVtaXRzIG9uZSBkZXRlcm1pbmlzdGljIEtvdGxpbi9KVk0gcHJvZ3JhbSB0aHJvdWdoIHRoZSBzb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVLb3RsaW4obW9kdWxlLCB3cml0ZXIpIHtcbiAgd3JpdGVyLnN5bnRoZXRpYyhrb3RsaW5SdW50aW1lLCBcIkNoZWNrZWQgS290bGluL0pWTSBzYWZlLWludGVnZXIgc3VwcG9ydFwiLCBbbW9kdWxlXSwgW1wiXCJdKVxuXG4gIG1vZHVsZS5mdW5jdGlvbnMuZm9yRWFjaCgoZGVjbGFyYXRpb24sIGZ1bmN0aW9uSW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gYC9mdW5jdGlvbnMvJHtmdW5jdGlvbkluZGV4fWBcblxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJkZWNsYXJhdGlvbiBzZXBhcmF0b3JcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJmdW5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJkZWNsYXJhdGlvbiBzcGFjaW5nXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGRlY2xhcmF0aW9uLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIoXCIsIFwiZnVuY3Rpb24gcGFyYW1ldGVyIHNjYWZmb2xkXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlciwgcGFyYW1ldGVySW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YFxuXG4gICAgICBpZiAocGFyYW1ldGVySW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcInBhcmFtZXRlciBzZXBhcmF0b3JcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQocGFyYW1ldGVyLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIsIHBhdGg6IHBhcmFtZXRlclBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCI6IFwiLCBcInBhcmFtZXRlciBhbm5vdGF0aW9uIHNjYWZmb2xkXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwia290bGluXCIsIHBhcmFtZXRlci50eXBlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHBhcmFtZXRlci50eXBlLFxuICAgICAgICBwYXRoOiBgJHtwYXJhbWV0ZXJQYXRofS90eXBlYCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIik6IFwiLCBcImZ1bmN0aW9uIHJldHVybiBzY2FmZm9sZFwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U2NhbGFyVHlwZShcImtvdGxpblwiLCBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLnJldHVyblR5cGUsXG4gICAgICBwYXRoOiBgJHtwYXRofS9yZXR1cm5UeXBlYCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIge1xcblwiLCBcIktvdGxpbiBmdW5jdGlvbiBib2R5IHNjYWZmb2xkXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICBlbWl0S290bGluQmxvY2sod3JpdGVyLCBkZWNsYXJhdGlvbi5ib2R5LCBcIiAgXCIsIGAke3BhdGh9L2JvZHlgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJ9XFxuXCIsIFwiS290bGluIGZ1bmN0aW9uIGJvZHkgc2NhZmZvbGRcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICB9KVxuXG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5mdW4gbWFpbigpIHtcXG5cIiwgXCJLb3RsaW4gZ2VuZXJhdGVkIG1haW4gc2NhZmZvbGRcIiwgW21vZHVsZS5lbnRyeVBvaW50XSwgW1wiL2VudHJ5UG9pbnRcIl0pXG4gIGVtaXRLb3RsaW5CbG9jayh3cml0ZXIsIG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIFwiICBcIiwgXCIvZW50cnlQb2ludC9ib2R5XCIpXG4gIHdyaXRlci5zeW50aGV0aWMoXCJ9XFxuXCIsIFwiS290bGluIGdlbmVyYXRlZCBtYWluIHNjYWZmb2xkXCIsIFttb2R1bGUuZW50cnlQb2ludF0sIFtcIi9lbnRyeVBvaW50XCJdKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBLb3RsaW4gc3RhdGVtZW50IGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFNlbWFudGljIGJsb2NrIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ByaW50VGFyZ2V0XSAtIFRhcmdldC1vd25lZCBwcmludCBmdW5jdGlvbiBzcGVsbGluZy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEtvdGxpbkJsb2NrKHdyaXRlciwgYmxvY2ssIGluZGVudCwgcGF0aCwgcHJpbnRUYXJnZXQgPSBcInByaW50bG5cIikge1xuICBibG9jay5zdGF0ZW1lbnRzLmZvckVhY2goKHN0YXRlbWVudCwgaW5kZXgpID0+XG4gICAgZW1pdEtvdGxpblN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBgJHtwYXRofS9zdGF0ZW1lbnRzLyR7aW5kZXh9YCwgcHJpbnRUYXJnZXQpKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBLb3RsaW4gc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gc3RhdGVtZW50IC0gU2VtYW50aWMgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFNlbWFudGljIHN0YXRlbWVudCBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IHByaW50VGFyZ2V0IC0gVGFyZ2V0LW93bmVkIHByaW50IGZ1bmN0aW9uIHNwZWxsaW5nLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRLb3RsaW5TdGF0ZW1lbnQod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aCwgcHJpbnRUYXJnZXQpIHtcbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChzdGF0ZW1lbnQubXV0YWJsZSA/IFwidmFyXCIgOiBcInZhbFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJkZWNsYXJhdGlvbiBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChzdGF0ZW1lbnQubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCI6IFwiLCBcImxvY2FsIGFubm90YXRpb24gc2NhZmZvbGRcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwia290bGluXCIsIHN0YXRlbWVudC50eXBlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudC50eXBlLFxuICAgICAgcGF0aDogYCR7cGF0aH0vdHlwZWAsIHJvbGU6IFwidHlwZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCI9XCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5pbml0aWFsaXplciwgYCR7cGF0aH0vaW5pdGlhbGl6ZXJgLCBcImtvdGxpblwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoc3RhdGVtZW50LnRhcmdldC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LnRhcmdldCwgcGF0aDogYCR7cGF0aH0vdGFyZ2V0YCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIj1cIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBcImtvdGxpblwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIktvdGxpbiBUYXNrIDAwNSBleHByZXNzaW9uIHN0YXRlbWVudCByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgIGlmICghc3RhdGVtZW50LmV4cHJlc3Npb24pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJLb3RsaW4gYmFyZSByZXR1cm4gcmVhY2hlZCBlbWlzc2lvbi5cIilcbiAgICB3cml0ZXIubWFwcGVkKFwicmV0dXJuXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInJldHVybiBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwia290bGluXCIsIGlkZW50aXR5KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5zeW50aGV0aWMoYCR7cHJpbnRUYXJnZXR9KGAsIFwiS290bGluIHByaW50IHBsdW1iaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwia290bGluXCIsIGlkZW50aXR5KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIpXFxuXCIsIFwiS290bGluIHByaW50bG4gcGx1bWJpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgIT0gXCJJZlN0YXRlbWVudFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgS290bGluIHN0YXRlbWVudCByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICB3cml0ZXIubWFwcGVkKFwiaWZcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIChcIiwgXCJLb3RsaW4gY29uZGl0aW9uYWwgc2NhZmZvbGRcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuY29uZGl0aW9uLCBgJHtwYXRofS9jb25kaXRpb25gLCBcImtvdGxpblwiLCBpZGVudGl0eSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIikge1xcblwiLCBcIktvdGxpbiBjb25kaXRpb25hbCBzY2FmZm9sZFwiLCBbc3RhdGVtZW50LmNvbnNlcXVlbnRdLCBbYCR7cGF0aH0vY29uc2VxdWVudGBdKVxuICBlbWl0S290bGluQmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuY29uc2VxdWVudCwgYCR7aW5kZW50fSAgYCwgYCR7cGF0aH0vY29uc2VxdWVudGAsIHByaW50VGFyZ2V0KVxuICB3cml0ZXIuc3ludGhldGljKGAke2luZGVudH19YCwgXCJLb3RsaW4gY29uZGl0aW9uYWwgc2NhZmZvbGRcIiwgW3N0YXRlbWVudC5jb25zZXF1ZW50XSwgW2Ake3BhdGh9L2NvbnNlcXVlbnRgXSlcbiAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHtcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIGVsc2Uge1xcblwiLCBcIktvdGxpbiBhbHRlcm5hdGUgc2NhZmZvbGRcIiwgW3N0YXRlbWVudC5hbHRlcm5hdGVdLCBbYCR7cGF0aH0vYWx0ZXJuYXRlYF0pXG4gICAgZW1pdEtvdGxpbkJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmFsdGVybmF0ZSwgYCR7aW5kZW50fSAgYCwgYCR7cGF0aH0vYWx0ZXJuYXRlYCwgcHJpbnRUYXJnZXQpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRlbnR9fWAsIFwiS290bGluIGFsdGVybmF0ZSBzY2FmZm9sZFwiLCBbc3RhdGVtZW50LmFsdGVybmF0ZV0sIFtgJHtwYXRofS9hbHRlcm5hdGVgXSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIFByZXNlcnZlcyBhbiBlbWl0dGVkIEtvdGxpbiBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBJZGVudGlmaWVyIHNwZWxsaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gVW5jaGFuZ2VkIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiBpZGVudGl0eShuYW1lKSB7XG4gIHJldHVybiBuYW1lXG59XG4iXX0=
@@ -1,9 +1,10 @@
1
1
  export type Expression = import("../semantic/types.js").Expression;
2
2
  export type Scalar = import("../semantic/types.js").SemanticTypeName;
3
+ export type PlannedType = Scalar | "void";
3
4
  export type PlannedValue = {
4
5
  expression: Expression;
5
6
  path: string;
6
- type: Scalar;
7
+ type: PlannedType;
7
8
  name?: string;
8
9
  };
9
10
  export type PlannedStep = {
@@ -14,13 +15,14 @@ export type PlannedStep = {
14
15
  export type Signature = Array<string | number | boolean | Signature>;
15
16
  /** @typedef {import("../semantic/types.js").Expression} Expression */
16
17
  /** @typedef {import("../semantic/types.js").SemanticTypeName} Scalar */
17
- /** @typedef {{expression: Expression, path: string, type: Scalar, name?: string}} PlannedValue */
18
+ /** @typedef {Scalar | "void"} PlannedType */
19
+ /** @typedef {{expression: Expression, path: string, type: PlannedType, name?: string}} PlannedValue */
18
20
  /** @typedef {{result: PlannedValue, operands: PlannedValue[], rightSteps?: PlannedStep[]}} PlannedStep */
19
21
  /** @typedef {Array<string | number | boolean | Signature>} Signature */
20
22
  /** Private occurrence-based native expression sequencer; it never rewrites the IR. */
21
23
  export declare class OrderedExpressionPlanner {
22
24
  language: "c" | "cpp";
23
- functions: Map<string, import("../semantic/types.js").SemanticTypeName>;
25
+ functions: Map<string, PlannedType>;
24
26
  nextTemporary: number;
25
27
  /**
26
28
  * Indexes already validated callable return types.
@@ -32,9 +34,9 @@ export declare class OrderedExpressionPlanner {
32
34
  * Resolves an expression type from the validated lexical environment.
33
35
  * @param {Expression} expression - Semantic expression.
34
36
  * @param {Map<string, Scalar>} bindings - Lexical scalar types.
35
- * @returns {Scalar} Exact semantic result type.
37
+ * @returns {PlannedType} Exact semantic result type.
36
38
  */
37
- type(expression: Expression, bindings: Map<string, Scalar>): Scalar;
39
+ type(expression: Expression, bindings: Map<string, Scalar>): PlannedType;
38
40
  /**
39
41
  * Plans one expression in semantic order, keeping the short-circuit RHS conditional.
40
42
  * @param {Expression} expression - Original occurrence.
@@ -44,6 +46,15 @@ export declare class OrderedExpressionPlanner {
44
46
  * @returns {PlannedValue} Pure final value.
45
47
  */
46
48
  plan(expression: Expression, path: string, bindings: Map<string, Scalar>, steps: PlannedStep[]): PlannedValue;
49
+ /**
50
+ * Plans the arguments of one terminal void call without inventing a void temporary.
51
+ * @param {Expression} expression - Terminal expression occurrence.
52
+ * @param {string} path - Occurrence path.
53
+ * @param {Map<string, Scalar>} bindings - Visible scalar bindings.
54
+ * @param {PlannedStep[]} steps - Ordered enclosing prelude.
55
+ * @returns {PlannedStep} Terminal direct-call step.
56
+ */
57
+ terminal(expression: Expression, path: string, bindings: Map<string, Scalar>, steps: PlannedStep[]): PlannedStep;
47
58
  /**
48
59
  * Allocates one bounded deterministic occurrence name.
49
60
  * @param {Expression} expression - Related expression.
@@ -61,9 +72,10 @@ export declare function statementSignature(statement: import("../semantic/types.
61
72
  export type StatementPlan = {
62
73
  id: string;
63
74
  steps: PlannedStep[];
64
- value: PlannedValue;
75
+ value?: PlannedValue;
76
+ terminal?: PlannedStep;
65
77
  };
66
- /** @typedef {{id: string, steps: PlannedStep[], value: PlannedValue}} StatementPlan */
78
+ /** @typedef {{id: string, steps: PlannedStep[], value?: PlannedValue, terminal?: PlannedStep}} StatementPlan */
67
79
  /**
68
80
  * Plans every occurrence before constructing a writer or exposing either artifact.
69
81
  * @param {import("../semantic/types.js").SemanticModule} module - Validated module.
@@ -1 +1 @@
1
- {"version":3,"file":"ordered-expressions.d.ts","sourceRoot":"","sources":["../../../src/backends/ordered-expressions.js"],"names":[],"mappings":"AAKI,YAAqD,UAAU,GAArD,OAAO,sBAAsB,EAAE,UAAU,CAAY;AAC/D,YAA2D,MAAM,GAAvD,OAAO,sBAAsB,EAAE,gBAAgB,CAAQ;AACjE,YAA+E,YAAY,GAAjF;IAAC,UAAU,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,CAAc;AAC3F,YAAwF,WAAW,GAAzF;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAA;CAAC,CAAa;AACnG,YAAwD,SAAS,GAAvD,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAW;AAJrE,sEAAsE;AACtE,wEAAwE;AACxE,kGAAkG;AAClG,0GAA0G;AAC1G,wEAAwE;AAExE,sFAAsF;AACtF,qBAAa,wBAAwB;IAO5B,QAAQ;IACR,SAAS;IAIT,aAAa;IAXpB;;;;OAIG;IACH,YAAY,MAAM,EAHP,OAAO,sBAAsB,EAAE,cAGxB,EAAE,QAAQ,AAFzB,CACF,EADU,GAAG,GAAG,KAEiB,EAOjC;IAED;;;;;OAKG;IACH,IAAI,CAAC,UAAU,EAJJ,UAII,EAAE,QAAQ,EAHd,GAAG,CAAC,MAAM,EAAE,MAAM,CAGJ,GAFZ,MAAM,CAclB;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,UAAU,EANJ,UAMI,EAAE,IAAI,EALV,MAKU,EAAE,QAAQ,EAJpB,GAAG,CAAC,MAAM,EAAE,MAAM,CAIE,EAAE,KAAK,EAH3B,WAAW,EAGgB,GAFzB,YAAY,CA6BxB;IAED;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAHR,UAGQ,GAFN,MAAM,CAKlB;CACF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAHjC,OAAO,sBAAsB,EAAE,SAGE,GAF/B,MAAM,CAclB;AAiBG,YAAmE,aAAa,GAAtE;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAC,CAAe;AAApF,uFAAuF;AACvF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAJ5B,OAAO,sBAAsB,EAAE,cAIH,EAAE,QAAQ,AAH9C,CACA,EADQ,GAAG,GAAG,KAGsC,GAF1C,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CA4CtC"}
1
+ {"version":3,"file":"ordered-expressions.d.ts","sourceRoot":"","sources":["../../../src/backends/ordered-expressions.js"],"names":[],"mappings":"AAKI,YAAqD,UAAU,GAArD,OAAO,sBAAsB,EAAE,UAAU,CAAY;AAC/D,YAA2D,MAAM,GAAvD,OAAO,sBAAsB,EAAE,gBAAgB,CAAQ;AACjE,YAA2B,WAAW,GAA5B,MAAM,GAAG,MAAM,CAAa;AACtC,YAAoF,YAAY,GAAtF;IAAC,UAAU,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,CAAc;AAChG,YAAwF,WAAW,GAAzF;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAA;CAAC,CAAa;AACnG,YAAwD,SAAS,GAAvD,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAW;AALrE,sEAAsE;AACtE,wEAAwE;AACxE,6CAA6C;AAC7C,uGAAuG;AACvG,0GAA0G;AAC1G,wEAAwE;AAExE,sFAAsF;AACtF,qBAAa,wBAAwB;IAO5B,QAAQ;IACR,SAAS;IAIT,aAAa;IAXpB;;;;OAIG;IACH,YAAY,MAAM,EAHP,OAAO,sBAAsB,EAAE,cAGxB,EAAE,QAAQ,AAFzB,CACF,EADU,GAAG,GAAG,KAEiB,EAOjC;IAED;;;;;OAKG;IACH,IAAI,CAAC,UAAU,EAJJ,UAII,EAAE,QAAQ,EAHd,GAAG,CAAC,MAAM,EAAE,MAAM,CAGJ,GAFZ,WAAW,CAcvB;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,UAAU,EANJ,UAMI,EAAE,IAAI,EALV,MAKU,EAAE,QAAQ,EAJpB,GAAG,CAAC,MAAM,EAAE,MAAM,CAIE,EAAE,KAAK,EAH3B,WAAW,EAGgB,GAFzB,YAAY,CA8BxB;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,EANR,UAMQ,EAAE,IAAI,EALd,MAKc,EAAE,QAAQ,EAJxB,GAAG,CAAC,MAAM,EAAE,MAAM,CAIM,EAAE,KAAK,EAH/B,WAAW,EAGoB,GAF7B,WAAW,CAUvB;IAED;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAHR,UAGQ,GAFN,MAAM,CAKlB;CACF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAHjC,OAAO,sBAAsB,EAAE,SAGE,GAF/B,MAAM,CAclB;AAiBG,YAA4F,aAAa,GAA/F;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,WAAW,CAAA;CAAC,CAAe;AAA7G,gHAAgH;AAChH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAJ5B,OAAO,sBAAsB,EAAE,cAIH,EAAE,QAAQ,AAH9C,CACA,EADQ,GAAG,GAAG,KAGsC,GAF1C,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CA6CtC"}
@@ -3,7 +3,8 @@ import { createHash } from "node:crypto";
3
3
  import { unsupportedCapability } from "../diagnostic.js";
4
4
  /** @typedef {import("../semantic/types.js").Expression} Expression */
5
5
  /** @typedef {import("../semantic/types.js").SemanticTypeName} Scalar */
6
- /** @typedef {{expression: Expression, path: string, type: Scalar, name?: string}} PlannedValue */
6
+ /** @typedef {Scalar | "void"} PlannedType */
7
+ /** @typedef {{expression: Expression, path: string, type: PlannedType, name?: string}} PlannedValue */
7
8
  /** @typedef {{result: PlannedValue, operands: PlannedValue[], rightSteps?: PlannedStep[]}} PlannedStep */
8
9
  /** @typedef {Array<string | number | boolean | Signature>} Signature */
9
10
  /** Private occurrence-based native expression sequencer; it never rewrites the IR. */
@@ -17,7 +18,7 @@ export class OrderedExpressionPlanner {
17
18
  this.language = language;
18
19
  this.functions = new Map(module.functions.map((declaration) => [
19
20
  declaration.name,
20
- scalarName(declaration.returnType, language, declaration.location)
21
+ returnName(declaration.returnType, language, declaration.location)
21
22
  ]));
22
23
  this.nextTemporary = 1;
23
24
  }
@@ -25,7 +26,7 @@ export class OrderedExpressionPlanner {
25
26
  * Resolves an expression type from the validated lexical environment.
26
27
  * @param {Expression} expression - Semantic expression.
27
28
  * @param {Map<string, Scalar>} bindings - Lexical scalar types.
28
- * @returns {Scalar} Exact semantic result type.
29
+ * @returns {PlannedType} Exact semantic result type.
29
30
  */
30
31
  type(expression, bindings) {
31
32
  if (expression.kind == "IntegerLiteral")
@@ -76,10 +77,28 @@ export class OrderedExpressionPlanner {
76
77
  }
77
78
  operands.push(this.plan(expression.right, `${path}/right`, bindings, steps));
78
79
  }
80
+ if (result.type == "void")
81
+ throw new Error("Void call reached native value planning.");
79
82
  const planned = { ...result, name: this.allocate(expression) };
80
83
  steps.push({ operands, result: planned });
81
84
  return planned;
82
85
  }
86
+ /**
87
+ * Plans the arguments of one terminal void call without inventing a void temporary.
88
+ * @param {Expression} expression - Terminal expression occurrence.
89
+ * @param {string} path - Occurrence path.
90
+ * @param {Map<string, Scalar>} bindings - Visible scalar bindings.
91
+ * @param {PlannedStep[]} steps - Ordered enclosing prelude.
92
+ * @returns {PlannedStep} Terminal direct-call step.
93
+ */
94
+ terminal(expression, path, bindings, steps) {
95
+ if (expression.kind != "CallExpression" || this.type(expression, bindings) != "void") {
96
+ throw new Error("Non-void expression reached native terminal-call planning.");
97
+ }
98
+ const result = { expression, path, type: /** @type {const} */ ("void") };
99
+ const operands = expression.arguments.map((argument, index) => this.plan(argument, `${path}/arguments/${index}`, bindings, steps));
100
+ return { operands, result };
101
+ }
83
102
  /**
84
103
  * Allocates one bounded deterministic occurrence name.
85
104
  * @param {Expression} expression - Related expression.
@@ -105,9 +124,9 @@ export function statementSignature(statement) {
105
124
  statement.kind == "LocalDeclaration" ? statement.initializer :
106
125
  statement.kind == "AssignmentStatement" || statement.kind == "ExpressionStatement" || statement.kind == "PrintStatement" ? statement.expression :
107
126
  statement.kind == "ReturnStatement" ? statement.expression : undefined;
108
- if (!expression)
127
+ if (!expression && statement.kind != "ReturnStatement")
109
128
  throw new TypeError("Bare return reached native statement signature planning.");
110
- return createHash("sha256").update(JSON.stringify([consumer, expressionSignature(expression)])).digest("hex");
129
+ return createHash("sha256").update(JSON.stringify([consumer, expression ? expressionSignature(expression) : null])).digest("hex");
111
130
  }
112
131
  /**
113
132
  * Serializes only the closed semantic expression fields.
@@ -127,7 +146,7 @@ function expressionSignature(expression) {
127
146
  return [expression.kind];
128
147
  return [expression.kind, expression.operation, expression.type, expressionSignature(expression.left), expressionSignature(expression.right)];
129
148
  }
130
- /** @typedef {{id: string, steps: PlannedStep[], value: PlannedValue}} StatementPlan */
149
+ /** @typedef {{id: string, steps: PlannedStep[], value?: PlannedValue, terminal?: PlannedStep}} StatementPlan */
131
150
  /**
132
151
  * Plans every occurrence before constructing a writer or exposing either artifact.
133
152
  * @param {import("../semantic/types.js").SemanticModule} module - Validated module.
@@ -156,12 +175,15 @@ export function planNativeModule(module, language = "c") {
156
175
  statement.kind == "ReturnStatement" ? statement.expression : undefined;
157
176
  /** @type {PlannedStep[]} */
158
177
  const steps = [];
159
- if (!expression)
160
- throw new TypeError("Bare return reached native expression planning.");
161
- const value = planner.plan(expression, `${statementPath}/${field}`, bindings, steps);
178
+ /** @type {StatementPlan} */
179
+ const plan = { id: String(plans.size + 1).padStart(6, "0"), steps };
162
180
  if (plans.size >= 999999)
163
181
  unsupportedCapability(language, "ordered statement limit", statement.location);
164
- plans.set(statementPath, { id: String(plans.size + 1).padStart(6, "0"), steps, value });
182
+ if (statement.kind == "ExpressionStatement")
183
+ plan.terminal = planner.terminal(statement.expression, `${statementPath}/${field}`, bindings, steps);
184
+ else if (expression)
185
+ plan.value = planner.plan(expression, `${statementPath}/${field}`, bindings, steps);
186
+ plans.set(statementPath, plan);
165
187
  if (statement.kind == "LocalDeclaration")
166
188
  bindings.set(statement.name, scalarName(statement.type, language, statement.location));
167
189
  if (statement.kind == "IfStatement") {
@@ -188,4 +210,17 @@ function scalarName(type, language, location) {
188
210
  }
189
211
  return type.name;
190
212
  }
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJlZC1leHByZXNzaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9vcmRlcmVkLWV4cHJlc3Npb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3RDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRXRELHNFQUFzRTtBQUN0RSx3RUFBd0U7QUFDeEUsa0dBQWtHO0FBQ2xHLDBHQUEwRztBQUMxRyx3RUFBd0U7QUFFeEUsc0ZBQXNGO0FBQ3RGLE1BQU0sT0FBTyx3QkFBd0I7SUFDbkM7Ozs7T0FJRztJQUNILFlBQVksTUFBTSxFQUFFLFFBQVEsR0FBRyxHQUFHO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQzdELFdBQVcsQ0FBQyxJQUFJO1lBQ2hCLFVBQVUsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDO1NBQ25FLENBQUMsQ0FBQyxDQUFBO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUE7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRO1FBQ3ZCLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0I7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUN6RCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksZ0JBQWdCO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFDekQsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGVBQWU7WUFBRSxPQUFPLFFBQVEsQ0FBQTtRQUN2RCxJQUFJ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T0FBTyxFQUNqRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xJLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDNUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRO0lBQzFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxlQUFlLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN4RCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSx3REFBd0QsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUM1RyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHt1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBFeHByZXNzaW9uICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljVHlwZU5hbWV9IFNjYWxhciAqL1xuLyoqIEB0eXBlZGVmIHt7ZXhwcmVzc2lvbjogRXhwcmVzc2lvbiwgcGF0aDogc3RyaW5nLCB0eXBlOiBTY2FsYXIsIG5hbWU/OiBzdHJpbmd9fSBQbGFubmVkVmFsdWUgKi9cbi8qKiBAdHlwZWRlZiB7e3Jlc3VsdDogUGxhbm5lZFZhbHVlLCBvcGVyYW5kczogUGxhbm5lZFZhbHVlW10sIHJpZ2h0U3RlcHM/OiBQbGFubmVkU3RlcFtdfX0gUGxhbm5lZFN0ZXAgKi9cbi8qKiBAdHlwZWRlZiB7QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IFNpZ25hdHVyZT59IFNpZ25hdHVyZSAqL1xuXG4vKiogUHJpdmF0ZSBvY2N1cnJlbmNlLWJhc2VkIG5hdGl2ZSBleHByZXNzaW9uIHNlcXVlbmNlcjsgaXQgbmV2ZXIgcmV3cml0ZXMgdGhlIElSLiAqL1xuZXhwb3J0IGNsYXNzIE9yZGVyZWRFeHByZXNzaW9uUGxhbm5lciB7XG4gIC8qKlxuICAgKiBJbmRleGVzIGFscmVhZHkgdmFsaWRhdGVkIGNhbGxhYmxlIHJldHVybiB0eXBlcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIG1vZHVsZS5cbiAgICogQHBhcmFtIHtcImNcIiB8IFwiY3BwXCJ9IFtsYW5ndWFnZV0gLSBPd25pbmcgYmFja2VuZCBkaWFnbm9zdGljIGxhbmd1YWdlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobW9kdWxlLCBsYW5ndWFnZSA9IFwiY1wiKSB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlXG4gICAgdGhpcy5mdW5jdGlvbnMgPSBuZXcgTWFwKG1vZHVsZS5mdW5jdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gW1xuICAgICAgZGVjbGFyYXRpb24ubmFtZSxcbiAgICAgIHNjYWxhck5hbWUoZGVjbGFyYXRpb24ucmV0dXJuVHlwZSwgbGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIF0pKVxuICAgIHRoaXMubmV4dFRlbXBvcmFyeSA9IDFcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBleHByZXNzaW9uIHR5cGUgZnJvbSB0aGUgdmFsaWRhdGVkIGxleGljYWwgZW52aXJvbm1lbnQuXG4gICAqIEBwYXJhbSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFNlbWFudGljIGV4cHJlc3Npb24uXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgU2NhbGFyPn0gYmluZGluZ3MgLSBMZXhpY2FsIHNjYWxhciB0eXBlcy5cbiAgICogQHJldHVybnMge1NjYWxhcn0gRXhhY3Qgc2VtYW50aWMgcmVzdWx0IHR5cGUuXG4gICAqL1xuICB0eXBlKGV4cHJlc3Npb24sIGJpbmRpbmdzKSB7XG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHJldHVybiBcImludGVnZXJcIlxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSByZXR1cm4gXCJib29sZWFuXCJcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSByZXR1cm4gXCJzdHJpbmdcIlxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uLnR5cGVcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kICE9IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBleHByZXNzaW9uLmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KHRoaXMubGFuZ3VhZ2UsIFwiY29sbGVjdGlvbiBleHByZXNzaW9uIHJlYWNoZWQgbmF0aXZlIHNjYWxhciBwbGFubmluZ1wiLCBleHByZXNzaW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCB0eXBlID0gZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIiA/IHRoaXMuZnVuY3Rpb25zLmdldChleHByZXNzaW9uLmNhbGxlZSkgOiBiaW5kaW5ncy5nZXQoZXhwcmVzc2lvbi5uYW1lKVxuXG4gICAgaWYgKCF0eXBlKSByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KHRoaXMubGFuZ3VhZ2UsIFwidW5yZXNvbHZlZCBleHByZXNzaW9uIHR5cGVcIiwgZXhwcmVzc2lvbi5sb2NhdGlvbilcbiAgICByZXR1cm4gdHlwZVxuICB9XG5cbiAgLyoqXG4gICAqIFBsYW5zIG9uZSBleHByZXNzaW9uIGluIHNlbWFudGljIG9yZGVyLCBrZWVwaW5nIHRoZSBzaG9ydC1jaXJjdWl0IFJIUyBjb25kaXRpb25hbC5cbiAgICogQHBhcmFtIHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gT3JpZ2luYWwgb2NjdXJyZW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBPY2N1cnJlbmNlIHBhdGguXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgU2NhbGFyPn0gYmluZGluZ3MgLSBMZXhpY2FsIHR5cGVzLlxuICAgKiBAcGFyYW0ge1BsYW5uZWRTdGVwW119IHN0ZXBzIC0gRW5jbG9zaW5nIG9yZGVyZWQgcHJlbHVkZS5cbiAgICogQHJldHVybnMge1BsYW5uZWRWYWx1ZX0gUHVyZSBmaW5hbCB2YWx1ZS5cbiAgICovXG4gIHBsYW4oZXhwcmVzc2lvbiwgcGF0aCwgYmluZGluZ3MsIHN0ZXBzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge2V4cHJlc3Npb24sIHBhdGgsIHR5cGU6IHRoaXMudHlwZShleHByZXNzaW9uLCBiaW5kaW5ncyl9XG5cbiAgICBpZiAoIVtcIkNhbGxFeHByZXNzaW9uXCIsIFwiVW5hcnlFeHByZXNzaW9uXCIsIFwiQmluYXJ5RXhwcmVzc2lvblwiXS5pbmNsdWRlcyhleHByZXNzaW9uLmtpbmQpKSByZXR1cm4gcmVzdWx0XG4gICAgY29uc3Qgb3BlcmFuZHMgPSBbXVxuICAgIC8qKiBAdHlwZSB7UGxhbm5lZFN0ZXBbXSB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgcmlnaHRTdGVwc1xuXG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBhcmd1bWVudF0gb2YgZXhwcmVzc2lvbi5hcmd1bWVudHMuZW50cmllcygpKSBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgYmluZGluZ3MsIHN0ZXBzKSlcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBiaW5kaW5ncywgc3RlcHMpKVxuICAgIGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgb3BlcmFuZHMucHVzaCh0aGlzLnBsYW4oZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgYmluZGluZ3MsIHN0ZXBzKSlcbiAgICAgIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkJvb2xlYW5BbmRcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkJvb2xlYW5PclwiKSB7XG4gICAgICAgIGNvbnN0IHBsYW5uZWQgPSB7Li4ucmVzdWx0LCBuYW1lOiB0aGlzLmFsbG9jYXRlKGV4cHJlc3Npb24pfVxuXG4gICAgICAgIHJpZ2h0U3RlcHMgPSBbXVxuICAgICAgICBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGJpbmRpbmdzLCByaWdodFN0ZXBzKSlcbiAgICAgICAgc3RlcHMucHVzaCh7b3BlcmFuZHMsIHJlc3VsdDogcGxhbm5lZCwgcmlnaHRTdGVwc30pXG4gICAgICAgIHJldHVybiBwbGFubmVkXG4gICAgICB9XG4gICAgICBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGJpbmRpbmdzLCBzdGVwcykpXG4gICAgfVxuICAgIGNvbnN0IHBsYW5uZWQgPSB7Li4ucmVzdWx0LCBuYW1lOiB0aGlzLmFsbG9jYXRlKGV4cHJlc3Npb24pfVxuXG4gICAgc3RlcHMucHVzaCh7b3BlcmFuZHMsIHJlc3VsdDogcGxhbm5lZH0pXG4gICAgcmV0dXJuIHBsYW5uZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvY2F0ZXMgb25lIGJvdW5kZWQgZGV0ZXJtaW5pc3RpYyBvY2N1cnJlbmNlIG5hbWUuXG4gICAqIEBwYXJhbSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFJlbGF0ZWQgZXhwcmVzc2lvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmVzZXJ2ZWQgdGVtcG9yYXJ5IG5hbWUuXG4gICAqL1xuICBhbGxvY2F0ZShleHByZXNzaW9uKSB7XG4gICAgaWYgKHRoaXMubmV4dFRlbXBvcmFyeSA+IDk5OTk5OSkgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eSh0aGlzLmxhbmd1YWdlLCBcIm9yZGVyZWQtZXhwcmVzc2lvbiBvY2N1cnJlbmNlIGxpbWl0XCIsIGV4cHJlc3Npb24ubG9jYXRpb24pXG4gICAgcmV0dXJuIGBzZW1hbnRpZm9sZF9vcmRlcmVkXyR7U3RyaW5nKHRoaXMubmV4dFRlbXBvcmFyeSsrKS5wYWRTdGFydCg2LCBcIjBcIil9YFxuICB9XG59XG5cbi8qKlxuICogQmluZHMgYSByZWdpb24gbWFya2VyIHRvIGl0cyBzZW1hbnRpYyBjb25zdW1lciBhbmQgZXhwcmVzc2lvbiwgaW5kZXBlbmRlbnRseSBvZiBsb2NhdGlvbnMuXG4gKiBUaGUgZGlnZXN0IGRldGVjdHMgZWRpdHM7IHN0cnVjdHVyYWwgQ1NUIHZhbGlkYXRpb24gcmVtYWlucyBtYW5kYXRvcnkgYW5kIGF1dGhvcml0YXRpdmUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gc3RhdGVtZW50IC0gUmVjb25zdHJ1Y3RlZCBvciBvcmlnaW5hbCBzdGF0ZW1lbnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTdGFibGUgU0hBLTI1NiBwcm9maWxlIHNpZ25hdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFNpZ25hdHVyZShzdGF0ZW1lbnQpIHtcbiAgY29uc3QgY29uc3VtZXIgPSBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IFtzdGF0ZW1lbnQua2luZCwgc3RhdGVtZW50Lm5hbWUsXG4gICAgc2NhbGFyTmFtZShzdGF0ZW1lbnQudHlwZSwgXCJjXCIsIHN0YXRlbWVudC5sb2NhdGlvbiksIHN0YXRlbWVudC5tdXRhYmxlXSA6XG4gICAgc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgPyBbc3RhdGVtZW50LmtpbmQsIHN0YXRlbWVudC50YXJnZXQubmFtZV0gOiBbc3RhdGVtZW50LmtpbmRdXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuY29uZGl0aW9uIDpcbiAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IHN0YXRlbWVudC5pbml0aWFsaXplciA6XG4gICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6IHVuZGVmaW5lZFxuXG4gIGlmICghZXhwcmVzc2lvbikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJhcmUgcmV0dXJuIHJlYWNoZWQgbmF0aXZlIHN0YXRlbWVudCBzaWduYXR1cmUgcGxhbm5pbmcuXCIpXG5cbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKEpTT04uc3RyaW5naWZ5KFtjb25zdW1lciwgZXhwcmVzc2lvblNpZ25hdHVyZShleHByZXNzaW9uKV0pKS5kaWdlc3QoXCJoZXhcIilcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIG9ubHkgdGhlIGNsb3NlZCBzZW1hbnRpYyBleHByZXNzaW9uIGZpZWxkcy5cbiAqIEBwYXJhbSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gb2NjdXJyZW5jZS5cbiAqIEByZXR1cm5zIHtTaWduYXR1cmV9IFNpZ25hdHVyZSBkYXRhLlxuICovXG5mdW5jdGlvbiBleHByZXNzaW9uU2lnbmF0dXJlKGV4cHJlc3Npb24pIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5raW5kLCBleHByZXNzaW9uLm5hbWVdXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIkJvb2xlYW5MaXRlcmFsXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSByZXR1cm4gW2V4cHJlc3Npb24ua2luZCwgZXhwcmVzc2lvbi52YWx1ZV1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5raW5kLCBleHByZXNzaW9uLmNhbGxlZSwgLi4uZXhwcmVzc2lvbi5hcmd1bWVudHMubWFwKGV4cHJlc3Npb25TaWduYXR1cmUpXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5raW5kLCBleHByZXNzaW9uLm9wZXJhdGlvbiwgZXhwcmVzc2lvbi50eXBlLCBleHByZXNzaW9uU2lnbmF0dXJlKGV4cHJlc3Npb24ub3BlcmFuZCldXG4gIGlmIChleHByZXNzaW9uLmtpbmQgIT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBbZXhwcmVzc2lvbi5raW5kXVxuXG4gIHJldHVybiBbZXhwcmVzc2lvbi5raW5kLCBleHByZXNzaW9uLm9wZXJhdGlvbiwgZXhwcmVzc2lvbi50eXBlLCBleHByZXNzaW9uU2lnbmF0dXJlKGV4cHJlc3Npb24ubGVmdCksIGV4cHJlc3Npb25TaWduYXR1cmUoZXhwcmVzc2lvbi5yaWdodCldXG59XG5cbi8qKiBAdHlwZWRlZiB7e2lkOiBzdHJpbmcsIHN0ZXBzOiBQbGFubmVkU3RlcFtdLCB2YWx1ZTogUGxhbm5lZFZhbHVlfX0gU3RhdGVtZW50UGxhbiAqL1xuLyoqXG4gKiBQbGFucyBldmVyeSBvY2N1cnJlbmNlIGJlZm9yZSBjb25zdHJ1Y3RpbmcgYSB3cml0ZXIgb3IgZXhwb3NpbmcgZWl0aGVyIGFydGlmYWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIG1vZHVsZS5cbiAqIEBwYXJhbSB7XCJjXCIgfCBcImNwcFwifSBbbGFuZ3VhZ2VdIC0gTmF0aXZlIGRpYWdub3N0aWMgb3duZXIuXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgU3RhdGVtZW50UGxhbj59IFBsYW5zIGluZGV4ZWQgYnkgc2VtYW50aWMgb2NjdXJyZW5jZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhbk5hdGl2ZU1vZHVsZShtb2R1bGUsIGxhbmd1YWdlID0gXCJjXCIpIHtcbiAgY29uc3QgcGxhbm5lciA9IG5ldyBPcmRlcmVkRXhwcmVzc2lvblBsYW5uZXIobW9kdWxlLCBsYW5ndWFnZSlcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBTdGF0ZW1lbnRQbGFuPn0gKi9cbiAgY29uc3QgcGxhbnMgPSBuZXcgTWFwKClcblxuICAvKipcbiAgICogUGxhbnMgb25lIGxleGljYWwgYmxvY2sgd2l0aCBpbmRlcGVuZGVudCBicmFuY2ggZW52aXJvbm1lbnRzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIE9jY3VycmVuY2UgcGF0aC5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lPn0gaW5oZXJpdGVkIC0gVmlzaWJsZSB0eXBlcy5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChibG9jaywgcGF0aCwgaW5oZXJpdGVkKSB7XG4gICAgY29uc3QgYmluZGluZ3MgPSBuZXcgTWFwKGluaGVyaXRlZClcblxuICAgIGJsb2NrLnN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50UGF0aCA9IGAke3BhdGh9L3N0YXRlbWVudHMvJHtpbmRleH1gXG4gICAgICBjb25zdCBmaWVsZCA9IHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIiA/IFwiY29uZGl0aW9uXCIgOiBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IFwiaW5pdGlhbGl6ZXJcIiA6IFwiZXhwcmVzc2lvblwiXG4gICAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiID8gc3RhdGVtZW50LmluaXRpYWxpemVyIDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOiB1bmRlZmluZWRcbiAgICAgIC8qKiBAdHlwZSB7UGxhbm5lZFN0ZXBbXX0gKi9cbiAgICAgIGNvbnN0IHN0ZXBzID0gW11cblxuICAgICAgaWYgKCFleHByZXNzaW9uKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmFyZSByZXR1cm4gcmVhY2hlZCBuYXRpdmUgZXhwcmVzc2lvbiBwbGFubmluZy5cIilcbiAgICAgIGNvbnN0IHZhbHVlID0gcGxhbm5lci5wbGFuKGV4cHJlc3Npb24sIGAke3N0YXRlbWVudFBhdGh9LyR7ZmllbGR9YCwgYmluZGluZ3MsIHN0ZXBzKVxuXG4gICAgICBpZiAocGxhbnMuc2l6ZSA+PSA5OTk5OTkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJvcmRlcmVkIHN0YXRlbWVudCBsaW1pdFwiLCBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgICBwbGFucy5zZXQoc3RhdGVtZW50UGF0aCwge2lkOiBTdHJpbmcocGxhbnMuc2l6ZSArIDEpLnBhZFN0YXJ0KDYsIFwiMFwiKSwgc3RlcHMsIHZhbHVlfSlcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikgYmluZGluZ3Muc2V0KHN0YXRlbWVudC5uYW1lLCBzY2FsYXJOYW1lKHN0YXRlbWVudC50eXBlLCBsYW5ndWFnZSwgc3RhdGVtZW50LmxvY2F0aW9uKSlcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgICAgdmlzaXQoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGAke3N0YXRlbWVudFBhdGh9L2NvbnNlcXVlbnRgLCBiaW5kaW5ncylcbiAgICAgICAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHZpc2l0KHN0YXRlbWVudC5hbHRlcm5hdGUsIGAke3N0YXRlbWVudFBhdGh9L2FsdGVybmF0ZWAsIGJpbmRpbmdzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBtb2R1bGUuZnVuY3Rpb25zLmZvckVhY2goKGRlY2xhcmF0aW9uLCBpbmRleCkgPT4gdmlzaXQoZGVjbGFyYXRpb24uYm9keSwgYC9mdW5jdGlvbnMvJHtpbmRleH0vYm9keWAsXG4gICAgbmV3IE1hcChkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHNjYWxhck5hbWUocGFyYW1ldGVyLnR5cGUsIGxhbmd1YWdlLCBwYXJhbWV0ZXIubG9jYXRpb24pXSkpKSlcbiAgdmlzaXQobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgXCIvZW50cnlQb2ludC9ib2R5XCIsIG5ldyBNYXAoKSlcbiAgcmV0dXJuIHBsYW5zXG59XG5cbi8qKlxuICogTmFycm93cyBhIHR5cGUgYWZ0ZXIgbm9uLWNvaG9ydCBjb2xsZWN0aW9uIHJlamVjdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHR5cGUgLSBTZW1hbnRpYyB0eXBlLlxuICogQHBhcmFtIHtcImNcIiB8IFwiY3BwXCJ9IGxhbmd1YWdlIC0gRGlhZ25vc3RpYyBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gT3duaW5nIGxvY2F0aW9uLlxuICogQHJldHVybnMge1NjYWxhcn0gU2NhbGFyIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHNjYWxhck5hbWUodHlwZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uKSB7XG4gIGlmICh0eXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIgfHwgdHlwZS5uYW1lID09IFwidm9pZFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjb2xsZWN0aW9uIG9yIHZvaWQgdHlwZSByZWFjaGVkIG5hdGl2ZSBzY2FsYXIgcGxhbm5pbmdcIiwgbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4gdHlwZS5uYW1lXG59XG4iXX0=
213
+ /**
214
+ * Narrows a validated function return, admitting the non-value `void` result.
215
+ * @param {import("../semantic/types.js").SemanticFunctionReturnType} type - Semantic type.
216
+ * @param {"c" | "cpp"} language - Diagnostic language.
217
+ * @param {import("../semantic/types.js").SourceLocation} location - Owning location.
218
+ * @returns {PlannedType} Scalar or void name.
219
+ */
220
+ function returnName(type, language, location) {
221
+ if (type.kind != "TypeReference") {
222
+ return unsupportedCapability(language, "collection type reached native scalar planning", location);
223
+ }
224
+ return type.name;
225
+ }
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJlZC1leHByZXNzaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9vcmRlcmVkLWV4cHJlc3Npb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3RDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRXRELHNFQUFzRTtBQUN0RSx3RUFBd0U7QUFDeEUsNkNBQTZDO0FBQzdDLHVHQUF1RztBQUN2RywwR0FBMEc7QUFDMUcsd0VBQXdFO0FBRXhFLHNGQUFzRjtBQUN0RixNQUFNLE9BQU8sd0JBQXdCO0lBQ25DOzs7O09BSUc7SUFDSCxZQUFZLE1BQU0sRUFBRSxRQUFRLEdBQUcsR0FBRztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUM3RCxXQUFXLENBQUMsSUFBSTtZQUNoQixVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQztTQUNuRSxDQUFDLENBQUMsQ0FBQTtRQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUTtRQUN2QixJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksZ0JBQWdCO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFDekQsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQjtZQUFFLE9BQU8sU0FBUyxDQUFBO1FBQ3pELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxlQUFlO1lBQUUsT0FBTyxRQUFRLENB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QUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEksS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUM1RCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVE7SUFDMUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLGVBQWUsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3hELE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLHdEQUF3RCxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzVHLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUE7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUTtJQUMxQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksZUFBZSxFQUFFLENBQUM7UUFDakMsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsZ0RBQWdELEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDcEcsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQTtBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7Y3JlYXRlSGFzaH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCJcbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gRXhwcmVzc2lvbiAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lfSBTY2FsYXIgKi9cbi8qKiBAdHlwZWRlZiB7U2NhbGFyIHwgXCJ2b2lkXCJ9IFBsYW5uZWRUeXBlICovXG4vKiogQHR5cGVkZWYge3tleHByZXNzaW9uOiBFeHByZXNzaW9uLCBwYXRoOiBzdHJpbmcsIHR5cGU6IFBsYW5uZWRUeXBlLCBuYW1lPzogc3RyaW5nfX0gUGxhbm5lZFZhbHVlICovXG4vKiogQHR5cGVkZWYge3tyZXN1bHQ6IFBsYW5uZWRWYWx1ZSwgb3BlcmFuZHM6IFBsYW5uZWRWYWx1ZVtdLCByaWdodFN0ZXBzPzogUGxhbm5lZFN0ZXBbXX19IFBsYW5uZWRTdGVwICovXG4vKiogQHR5cGVkZWYge0FycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBTaWduYXR1cmU+fSBTaWduYXR1cmUgKi9cblxuLyoqIFByaXZhdGUgb2NjdXJyZW5jZS1iYXNlZCBuYXRpdmUgZXhwcmVzc2lvbiBzZXF1ZW5jZXI7IGl0IG5ldmVyIHJld3JpdGVzIHRoZSBJUi4gKi9cbmV4cG9ydCBjbGFzcyBPcmRlcmVkRXhwcmVzc2lvblBsYW5uZXIge1xuICAvKipcbiAgICogSW5kZXhlcyBhbHJlYWR5IHZhbGlkYXRlZCBjYWxsYWJsZSByZXR1cm4gdHlwZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBtb2R1bGUuXG4gICAqIEBwYXJhbSB7XCJjXCIgfCBcImNwcFwifSBbbGFuZ3VhZ2VdIC0gT3duaW5nIGJhY2tlbmQgZGlhZ25vc3RpYyBsYW5ndWFnZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1vZHVsZSwgbGFuZ3VhZ2UgPSBcImNcIikge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVxuICAgIHRoaXMuZnVuY3Rpb25zID0gbmV3IE1hcChtb2R1bGUuZnVuY3Rpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IFtcbiAgICAgIGRlY2xhcmF0aW9uLm5hbWUsXG4gICAgICByZXR1cm5OYW1lKGRlY2xhcmF0aW9uLnJldHVyblR5cGUsIGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICBdKSlcbiAgICB0aGlzLm5leHRUZW1wb3JhcnkgPSAxXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW4gZXhwcmVzc2lvbiB0eXBlIGZyb20gdGhlIHZhbGlkYXRlZCBsZXhpY2FsIGVudmlyb25tZW50LlxuICAgKiBAcGFyYW0ge0V4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIFNjYWxhcj59IGJpbmRpbmdzIC0gTGV4aWNhbCBzY2FsYXIgdHlwZXMuXG4gICAqIEByZXR1cm5zIHtQbGFubmVkVHlwZX0gRXhhY3Qgc2VtYW50aWMgcmVzdWx0IHR5cGUuXG4gICAqL1xuICB0eXBlKGV4cHJlc3Npb24sIGJpbmRpbmdzKSB7XG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHJldHVybiBcImludGVnZXJcIlxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSByZXR1cm4gXCJib29sZWFuXCJcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSByZXR1cm4gXCJzdHJpbmdcIlxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uLnR5cGVcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kICE9IFwiQ2FsbEV4cHJlc3Npb25cIiAmJiBleHByZXNzaW9uLmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KHRoaXMubGFuZ3VhZ2UsIFwiY29sbGVjdGlvbiBleHByZXNzaW9uIHJlYWNoZWQgbmF0aXZlIHNjYWxhciBwbGFubmluZ1wiLCBleHByZXNzaW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCB0eXBlID0gZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIiA/IHRoaXMuZnVuY3Rpb25zLmdldChleHByZXNzaW9uLmNhbGxlZSkgOiBiaW5kaW5ncy5nZXQoZXhwcmVzc2lvbi5uYW1lKVxuXG4gICAgaWYgKCF0eXBlKSByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KHRoaXMubGFuZ3VhZ2UsIFwidW5yZXNvbHZlZCBleHByZXNzaW9uIHR5cGVcIiwgZXhwcmVzc2lvbi5sb2NhdGlvbilcbiAgICByZXR1cm4gdHlwZVxuICB9XG5cbiAgLyoqXG4gICAqIFBsYW5zIG9uZSBleHByZXNzaW9uIGluIHNlbWFudGljIG9yZGVyLCBrZWVwaW5nIHRoZSBzaG9ydC1jaXJjdWl0IFJIUyBjb25kaXRpb25hbC5cbiAgICogQHBhcmFtIHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gT3JpZ2luYWwgb2NjdXJyZW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBPY2N1cnJlbmNlIHBhdGguXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgU2NhbGFyPn0gYmluZGluZ3MgLSBMZXhpY2FsIHR5cGVzLlxuICAgKiBAcGFyYW0ge1BsYW5uZWRTdGVwW119IHN0ZXBzIC0gRW5jbG9zaW5nIG9yZGVyZWQgcHJlbHVkZS5cbiAgICogQHJldHVybnMge1BsYW5uZWRWYWx1ZX0gUHVyZSBmaW5hbCB2YWx1ZS5cbiAgICovXG4gIHBsYW4oZXhwcmVzc2lvbiwgcGF0aCwgYmluZGluZ3MsIHN0ZXBzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge2V4cHJlc3Npb24sIHBhdGgsIHR5cGU6IHRoaXMudHlwZShleHByZXNzaW9uLCBiaW5kaW5ncyl9XG5cbiAgICBpZiAoIVtcIkNhbGxFeHByZXNzaW9uXCIsIFwiVW5hcnlFeHByZXNzaW9uXCIsIFwiQmluYXJ5RXhwcmVzc2lvblwiXS5pbmNsdWRlcyhleHByZXNzaW9uLmtpbmQpKSByZXR1cm4gcmVzdWx0XG4gICAgY29uc3Qgb3BlcmFuZHMgPSBbXVxuICAgIC8qKiBAdHlwZSB7UGxhbm5lZFN0ZXBbXSB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgcmlnaHRTdGVwc1xuXG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBhcmd1bWVudF0gb2YgZXhwcmVzc2lvbi5hcmd1bWVudHMuZW50cmllcygpKSBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgYmluZGluZ3MsIHN0ZXBzKSlcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBiaW5kaW5ncywgc3RlcHMpKVxuICAgIGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgb3BlcmFuZHMucHVzaCh0aGlzLnBsYW4oZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgYmluZGluZ3MsIHN0ZXBzKSlcbiAgICAgIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkJvb2xlYW5BbmRcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkJvb2xlYW5PclwiKSB7XG4gICAgICAgIGNvbnN0IHBsYW5uZWQgPSB7Li4ucmVzdWx0LCBuYW1lOiB0aGlzLmFsbG9jYXRlKGV4cHJlc3Npb24pfVxuXG4gICAgICAgIHJpZ2h0U3RlcHMgPSBbXVxuICAgICAgICBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGJpbmRpbmdzLCByaWdodFN0ZXBzKSlcbiAgICAgICAgc3RlcHMucHVzaCh7b3BlcmFuZHMsIHJlc3VsdDogcGxhbm5lZCwgcmlnaHRTdGVwc30pXG4gICAgICAgIHJldHVybiBwbGFubmVkXG4gICAgICB9XG4gICAgICBvcGVyYW5kcy5wdXNoKHRoaXMucGxhbihleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGJpbmRpbmdzLCBzdGVwcykpXG4gICAgfVxuICAgIGlmIChyZXN1bHQudHlwZSA9PSBcInZvaWRcIikgdGhyb3cgbmV3IEVycm9yKFwiVm9pZCBjYWxsIHJlYWNoZWQgbmF0aXZlIHZhbHVlIHBsYW5uaW5nLlwiKVxuICAgIGNvbnN0IHBsYW5uZWQgPSB7Li4ucmVzdWx0LCBuYW1lOiB0aGlzLmFsbG9jYXRlKGV4cHJlc3Npb24pfVxuXG4gICAgc3RlcHMucHVzaCh7b3BlcmFuZHMsIHJlc3VsdDogcGxhbm5lZH0pXG4gICAgcmV0dXJuIHBsYW5uZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBQbGFucyB0aGUgYXJndW1lbnRzIG9mIG9uZSB0ZXJtaW5hbCB2b2lkIGNhbGwgd2l0aG91dCBpbnZlbnRpbmcgYSB2b2lkIHRlbXBvcmFyeS5cbiAgICogQHBhcmFtIHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gVGVybWluYWwgZXhwcmVzc2lvbiBvY2N1cnJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIE9jY3VycmVuY2UgcGF0aC5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBTY2FsYXI+fSBiaW5kaW5ncyAtIFZpc2libGUgc2NhbGFyIGJpbmRpbmdzLlxuICAgKiBAcGFyYW0ge1BsYW5uZWRTdGVwW119IHN0ZXBzIC0gT3JkZXJlZCBlbmNsb3NpbmcgcHJlbHVkZS5cbiAgICogQHJldHVybnMge1BsYW5uZWRTdGVwfSBUZXJtaW5hbCBkaXJlY3QtY2FsbCBzdGVwLlxuICAgKi9cbiAgdGVybWluYWwoZXhwcmVzc2lvbiwgcGF0aCwgYmluZGluZ3MsIHN0ZXBzKSB7XG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCAhPSBcIkNhbGxFeHByZXNzaW9uXCIgfHwgdGhpcy50eXBlKGV4cHJlc3Npb24sIGJpbmRpbmdzKSAhPSBcInZvaWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm9uLXZvaWQgZXhwcmVzc2lvbiByZWFjaGVkIG5hdGl2ZSB0ZXJtaW5hbC1jYWxsIHBsYW5uaW5nLlwiKVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7ZXhwcmVzc2lvbiwgcGF0aCwgdHlwZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwidm9pZFwiKX1cbiAgICBjb25zdCBvcGVyYW5kcyA9IGV4cHJlc3Npb24uYXJndW1lbnRzLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PiB0aGlzLnBsYW4oYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGJpbmRpbmdzLCBzdGVwcykpXG5cbiAgICByZXR1cm4ge29wZXJhbmRzLCByZXN1bHR9XG4gIH1cblxuICAvKipcbiAgICogQWxsb2NhdGVzIG9uZSBib3VuZGVkIGRldGVybWluaXN0aWMgb2NjdXJyZW5jZSBuYW1lLlxuICAgKiBAcGFyYW0ge0V4cHJlc3Npb259IGV4cHJlc3Npb24gLSBSZWxhdGVkIGV4cHJlc3Npb24uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJlc2VydmVkIHRlbXBvcmFyeSBuYW1lLlxuICAgKi9cbiAgYWxsb2NhdGUoZXhwcmVzc2lvbikge1xuICAgIGlmICh0aGlzLm5leHRUZW1wb3JhcnkgPiA5OTk5OTkpIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkodGhpcy5sYW5ndWFnZSwgXCJvcmRlcmVkLWV4cHJlc3Npb24gb2NjdXJyZW5jZSBsaW1pdFwiLCBleHByZXNzaW9uLmxvY2F0aW9uKVxuICAgIHJldHVybiBgc2VtYW50aWZvbGRfb3JkZXJlZF8ke1N0cmluZyh0aGlzLm5leHRUZW1wb3JhcnkrKykucGFkU3RhcnQoNiwgXCIwXCIpfWBcbiAgfVxufVxuXG4vKipcbiAqIEJpbmRzIGEgcmVnaW9uIG1hcmtlciB0byBpdHMgc2VtYW50aWMgY29uc3VtZXIgYW5kIGV4cHJlc3Npb24sIGluZGVwZW5kZW50bHkgb2YgbG9jYXRpb25zLlxuICogVGhlIGRpZ2VzdCBkZXRlY3RzIGVkaXRzOyBzdHJ1Y3R1cmFsIENTVCB2YWxpZGF0aW9uIHJlbWFpbnMgbWFuZGF0b3J5IGFuZCBhdXRob3JpdGF0aXZlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IHN0YXRlbWVudCAtIFJlY29uc3RydWN0ZWQgb3Igb3JpZ2luYWwgc3RhdGVtZW50LlxuICogQHJldHVybnMge3N0cmluZ30gU3RhYmxlIFNIQS0yNTYgcHJvZmlsZSBzaWduYXR1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTaWduYXR1cmUoc3RhdGVtZW50KSB7XG4gIGNvbnN0IGNvbnN1bWVyID0gc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgPyBbc3RhdGVtZW50LmtpbmQsIHN0YXRlbWVudC5uYW1lLFxuICAgIHNjYWxhck5hbWUoc3RhdGVtZW50LnR5cGUsIFwiY1wiLCBzdGF0ZW1lbnQubG9jYXRpb24pLCBzdGF0ZW1lbnQubXV0YWJsZV0gOlxuICAgIHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiID8gW3N0YXRlbWVudC5raW5kLCBzdGF0ZW1lbnQudGFyZ2V0Lm5hbWVdIDogW3N0YXRlbWVudC5raW5kXVxuICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgPyBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIgOlxuICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOiB1bmRlZmluZWRcblxuICBpZiAoIWV4cHJlc3Npb24gJiYgc3RhdGVtZW50LmtpbmQgIT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJhcmUgcmV0dXJuIHJlYWNoZWQgbmF0aXZlIHN0YXRlbWVudCBzaWduYXR1cmUgcGxhbm5pbmcuXCIpXG5cbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKEpTT04uc3RyaW5naWZ5KFtjb25zdW1lciwgZXhwcmVzc2lvbiA/IGV4cHJlc3Npb25TaWduYXR1cmUoZXhwcmVzc2lvbikgOiBudWxsXSkpLmRpZ2VzdChcImhleFwiKVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgb25seSB0aGUgY2xvc2VkIHNlbWFudGljIGV4cHJlc3Npb24gZmllbGRzLlxuICogQHBhcmFtIHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gRXhwcmVzc2lvbiBvY2N1cnJlbmNlLlxuICogQHJldHVybnMge1NpZ25hdHVyZX0gU2lnbmF0dXJlIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25TaWduYXR1cmUoZXhwcmVzc2lvbikge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikgcmV0dXJuIFtleHByZXNzaW9uLmtpbmQsIGV4cHJlc3Npb24ubmFtZV1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiQm9vbGVhbkxpdGVyYWxcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHJldHVybiBbZXhwcmVzc2lvbi5raW5kLCBleHByZXNzaW9uLnZhbHVlXVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikgcmV0dXJuIFtleHByZXNzaW9uLmtpbmQsIGV4cHJlc3Npb24uY2FsbGVlLCAuLi5leHByZXNzaW9uLmFyZ3VtZW50cy5tYXAoZXhwcmVzc2lvblNpZ25hdHVyZSldXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikgcmV0dXJuIFtleHByZXNzaW9uLmtpbmQsIGV4cHJlc3Npb24ub3BlcmF0aW9uLCBleHByZXNzaW9uLnR5cGUsIGV4cHJlc3Npb25TaWduYXR1cmUoZXhwcmVzc2lvbi5vcGVyYW5kKV1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCAhPSBcIkJpbmFyeUV4cHJlc3Npb25cIikgcmV0dXJuIFtleHByZXNzaW9uLmtpbmRdXG5cbiAgcmV0dXJuIFtleHByZXNzaW9uLmtpbmQsIGV4cHJlc3Npb24ub3BlcmF0aW9uLCBleHByZXNzaW9uLnR5cGUsIGV4cHJlc3Npb25TaWduYXR1cmUoZXhwcmVzc2lvbi5sZWZ0KSwgZXhwcmVzc2lvblNpZ25hdHVyZShleHByZXNzaW9uLnJpZ2h0KV1cbn1cblxuLyoqIEB0eXBlZGVmIHt7aWQ6IHN0cmluZywgc3RlcHM6IFBsYW5uZWRTdGVwW10sIHZhbHVlPzogUGxhbm5lZFZhbHVlLCB0ZXJtaW5hbD86IFBsYW5uZWRTdGVwfX0gU3RhdGVtZW50UGxhbiAqL1xuLyoqXG4gKiBQbGFucyBldmVyeSBvY2N1cnJlbmNlIGJlZm9yZSBjb25zdHJ1Y3RpbmcgYSB3cml0ZXIgb3IgZXhwb3NpbmcgZWl0aGVyIGFydGlmYWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIG1vZHVsZS5cbiAqIEBwYXJhbSB7XCJjXCIgfCBcImNwcFwifSBbbGFuZ3VhZ2VdIC0gTmF0aXZlIGRpYWdub3N0aWMgb3duZXIuXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgU3RhdGVtZW50UGxhbj59IFBsYW5zIGluZGV4ZWQgYnkgc2VtYW50aWMgb2NjdXJyZW5jZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhbk5hdGl2ZU1vZHVsZShtb2R1bGUsIGxhbmd1YWdlID0gXCJjXCIpIHtcbiAgY29uc3QgcGxhbm5lciA9IG5ldyBPcmRlcmVkRXhwcmVzc2lvblBsYW5uZXIobW9kdWxlLCBsYW5ndWFnZSlcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBTdGF0ZW1lbnRQbGFuPn0gKi9cbiAgY29uc3QgcGxhbnMgPSBuZXcgTWFwKClcblxuICAvKipcbiAgICogUGxhbnMgb25lIGxleGljYWwgYmxvY2sgd2l0aCBpbmRlcGVuZGVudCBicmFuY2ggZW52aXJvbm1lbnRzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIE9jY3VycmVuY2UgcGF0aC5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lPn0gaW5oZXJpdGVkIC0gVmlzaWJsZSB0eXBlcy5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChibG9jaywgcGF0aCwgaW5oZXJpdGVkKSB7XG4gICAgY29uc3QgYmluZGluZ3MgPSBuZXcgTWFwKGluaGVyaXRlZClcblxuICAgIGJsb2NrLnN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50UGF0aCA9IGAke3BhdGh9L3N0YXRlbWVudHMvJHtpbmRleH1gXG4gICAgICBjb25zdCBmaWVsZCA9IHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIiA/IFwiY29uZGl0aW9uXCIgOiBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IFwiaW5pdGlhbGl6ZXJcIiA6IFwiZXhwcmVzc2lvblwiXG4gICAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiID8gc3RhdGVtZW50LmluaXRpYWxpemVyIDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOiB1bmRlZmluZWRcbiAgICAgIC8qKiBAdHlwZSB7UGxhbm5lZFN0ZXBbXX0gKi9cbiAgICAgIGNvbnN0IHN0ZXBzID0gW11cbiAgICAgIC8qKiBAdHlwZSB7U3RhdGVtZW50UGxhbn0gKi9cbiAgICAgIGNvbnN0IHBsYW4gPSB7aWQ6IFN0cmluZyhwbGFucy5zaXplICsgMSkucGFkU3RhcnQoNiwgXCIwXCIpLCBzdGVwc31cblxuICAgICAgaWYgKHBsYW5zLnNpemUgPj0gOTk5OTk5KSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwib3JkZXJlZCBzdGF0ZW1lbnQgbGltaXRcIiwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSBwbGFuLnRlcm1pbmFsID0gcGxhbm5lci50ZXJtaW5hbChzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7c3RhdGVtZW50UGF0aH0vJHtmaWVsZH1gLCBiaW5kaW5ncywgc3RlcHMpXG4gICAgICBlbHNlIGlmIChleHByZXNzaW9uKSBwbGFuLnZhbHVlID0gcGxhbm5lci5wbGFuKGV4cHJlc3Npb24sIGAke3N0YXRlbWVudFBhdGh9LyR7ZmllbGR9YCwgYmluZGluZ3MsIHN0ZXBzKVxuICAgICAgcGxhbnMuc2V0KHN0YXRlbWVudFBhdGgsIHBsYW4pXG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIGJpbmRpbmdzLnNldChzdGF0ZW1lbnQubmFtZSwgc2NhbGFyTmFtZShzdGF0ZW1lbnQudHlwZSwgbGFuZ3VhZ2UsIHN0YXRlbWVudC5sb2NhdGlvbikpXG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0KHN0YXRlbWVudC5jb25zZXF1ZW50LCBgJHtzdGF0ZW1lbnRQYXRofS9jb25zZXF1ZW50YCwgYmluZGluZ3MpXG4gICAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB2aXNpdChzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBgJHtzdGF0ZW1lbnRQYXRofS9hbHRlcm5hdGVgLCBiaW5kaW5ncylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgbW9kdWxlLmZ1bmN0aW9ucy5mb3JFYWNoKChkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHZpc2l0KGRlY2xhcmF0aW9uLmJvZHksIGAvZnVuY3Rpb25zLyR7aW5kZXh9L2JvZHlgLFxuICAgIG5ldyBNYXAoZGVjbGFyYXRpb24ucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gW3BhcmFtZXRlci5uYW1lLCBzY2FsYXJOYW1lKHBhcmFtZXRlci50eXBlLCBsYW5ndWFnZSwgcGFyYW1ldGVyLmxvY2F0aW9uKV0pKSkpXG4gIHZpc2l0KG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIFwiL2VudHJ5UG9pbnQvYm9keVwiLCBuZXcgTWFwKCkpXG4gIHJldHVybiBwbGFuc1xufVxuXG4vKipcbiAqIE5hcnJvd3MgYSB0eXBlIGFmdGVyIG5vbi1jb2hvcnQgY29sbGVjdGlvbiByZWplY3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSB0eXBlIC0gU2VtYW50aWMgdHlwZS5cbiAqIEBwYXJhbSB7XCJjXCIgfCBcImNwcFwifSBsYW5ndWFnZSAtIERpYWdub3N0aWMgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIE93bmluZyBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtTY2FsYXJ9IFNjYWxhciBuYW1lLlxuICovXG5mdW5jdGlvbiBzY2FsYXJOYW1lKHR5cGUsIGxhbmd1YWdlLCBsb2NhdGlvbikge1xuICBpZiAodHlwZS5raW5kICE9IFwiVHlwZVJlZmVyZW5jZVwiIHx8IHR5cGUubmFtZSA9PSBcInZvaWRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY29sbGVjdGlvbiBvciB2b2lkIHR5cGUgcmVhY2hlZCBuYXRpdmUgc2NhbGFyIHBsYW5uaW5nXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgcmV0dXJuIHR5cGUubmFtZVxufVxuXG4vKipcbiAqIE5hcnJvd3MgYSB2YWxpZGF0ZWQgZnVuY3Rpb24gcmV0dXJuLCBhZG1pdHRpbmcgdGhlIG5vbi12YWx1ZSBgdm9pZGAgcmVzdWx0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gdHlwZSAtIFNlbWFudGljIHR5cGUuXG4gKiBAcGFyYW0ge1wiY1wiIHwgXCJjcHBcIn0gbGFuZ3VhZ2UgLSBEaWFnbm9zdGljIGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBPd25pbmcgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7UGxhbm5lZFR5cGV9IFNjYWxhciBvciB2b2lkIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHJldHVybk5hbWUodHlwZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uKSB7XG4gIGlmICh0eXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImNvbGxlY3Rpb24gdHlwZSByZWFjaGVkIG5hdGl2ZSBzY2FsYXIgcGxhbm5pbmdcIiwgbG9jYXRpb24pXG4gIH1cblxuICByZXR1cm4gdHlwZS5uYW1lXG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/backends/shared.js"],"names":[],"mappings":"AAqDA;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EALjC,OAAO,sBAAsB,EAAE,cAKE,EAAE,QAAQ,EAJ3C,OAAO,sBAAsB,EAAE,eAIY,EAAE,OAAO,AAH5D,CACA,EADQ;IAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;IAAC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;IAAC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;IAAC,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;CAG/W,GAFvD,IAAI,CA4GhB;AAiyDD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAPpB,OAAO,aAAa,EAAE,YAOF,EAAE,IAAI,EAN1B,OAAO,sBAAsB,EAAE,0BAML,EAAE,IAAI,EALhC,MAKgC,EAAE,QAAQ,EAJ1C,OAAO,sBAAsB,EAAE,mBAIW,EAAE,SAAS,AAH7D,CACA,EADQ,OAG6D,GAF3D,IAAI,CA4EhB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAP1B,OAAO,aAAa,EAAE,YAOI,EAAE,UAAU,EANtC,OAAO,sBAAsB,EAAE,UAMO,EAAE,IAAI,EAL5C,MAK4C,EAAE,QAAQ,EAJtD,OAAO,sBAAsB,EAAE,mBAIuB,EAAE,cAAc,EAHtE,CAAC,IAAI,EAAE,MAAM,KAAK,MAGoD,GAFpE,IAAI,CAqZhB;AAkED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAJ9B,OAAO,aAAa,EAAE,YAIQ,EAAE,UAAU,EAH1C,OAAO,sBAAsB,EAAE,UAGW,GAFxC,MAAM,CAiClB;AAWD;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAH1C,OAAO,sBAAsB,EAAE,cAGW,GAFxC,OAAO,CAKnB"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/backends/shared.js"],"names":[],"mappings":"AAsDA;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EALjC,OAAO,sBAAsB,EAAE,cAKE,EAAE,QAAQ,EAJ3C,OAAO,sBAAsB,EAAE,eAIY,EAAE,OAAO,AAH5D,CACA,EADQ;IAAC,sBAAsB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;IAAC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;IAAC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;IAAC,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;CAG/W,GAFvD,IAAI,CA4GhB;AAmzDD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAPpB,OAAO,aAAa,EAAE,YAOF,EAAE,IAAI,EAN1B,OAAO,sBAAsB,EAAE,0BAML,EAAE,IAAI,EALhC,MAKgC,EAAE,QAAQ,EAJ1C,OAAO,sBAAsB,EAAE,mBAIW,EAAE,SAAS,AAH7D,CACA,EADQ,OAG6D,GAF3D,IAAI,CA4EhB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAP1B,OAAO,aAAa,EAAE,YAOI,EAAE,UAAU,EANtC,OAAO,sBAAsB,EAAE,UAMO,EAAE,IAAI,EAL5C,MAK4C,EAAE,QAAQ,EAJtD,OAAO,sBAAsB,EAAE,mBAIuB,EAAE,cAAc,EAHtE,CAAC,IAAI,EAAE,MAAM,KAAK,MAGoD,GAFpE,IAAI,CAgahB;AAkED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAJ9B,OAAO,aAAa,EAAE,YAIQ,EAAE,UAAU,EAH1C,OAAO,sBAAsB,EAAE,UAGW,GAFxC,MAAM,CAiClB;AAWD;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAH1C,OAAO,sBAAsB,EAAE,cAGW,GAFxC,OAAO,CAKnB"}