From 069074ac5e63408476567b47296e95137a75804e Mon Sep 17 00:00:00 2001 From: benStre Date: Fri, 8 Dec 2023 01:11:51 +0100 Subject: [PATCH] support for local pointer transforms, cookie fixes, datex_wasm update --- compiler/compiler.ts | 180 +++++++++++++++++++--------- docs/manual/10 The DATEX API.md | 10 ++ init.ts | 7 ++ runtime/constants.ts | 3 +- runtime/pointers.ts | 66 ++++++---- runtime/runtime.ts | 32 +++-- utils/cookies.ts | 3 +- utils/message_logger.ts | 1 + wasm/adapter/pkg/datex_wasm_bg.wasm | Bin 811880 -> 812279 bytes 9 files changed, 210 insertions(+), 92 deletions(-) diff --git a/compiler/compiler.ts b/compiler/compiler.ts index 8a853478..3c94e22d 100644 --- a/compiler/compiler.ts +++ b/compiler/compiler.ts @@ -27,7 +27,7 @@ import { BinaryCode } from "./binary_codes.ts"; import { Scope } from "../types/scope.ts"; import { ProtocolDataType } from "./protocol_types.ts"; import { Quantity } from "../types/quantity.ts"; -import { EXTENDED_OBJECTS, INHERITED_PROPERTIES, VOID, SLOT_WRITE, SLOT_READ, SLOT_EXEC, NOT_EXISTING, SLOT_GET, SLOT_SET, DX_IGNORE } from "../runtime/constants.ts"; +import { EXTENDED_OBJECTS, INHERITED_PROPERTIES, VOID, SLOT_WRITE, SLOT_READ, SLOT_EXEC, NOT_EXISTING, SLOT_GET, SLOT_SET, DX_IGNORE, DX_BOUND_LOCAL_SLOT } from "../runtime/constants.ts"; import { arrayBufferToBase64, base64ToArrayBuffer, buffer2hex, hex2buffer } from "../utils/utils.ts"; import { RuntimePerformance } from "../runtime/performance_measure.ts"; import { Conjunction, Disjunction, Logical, Negation } from "../types/logic.ts"; @@ -1448,6 +1448,7 @@ export class Compiler { let index:number let insert_new = false; + if (!SCOPE.extract_var_indices) throw new CompilerError("Cannot extract variable in non child scope block") if (!SCOPE.extract_var_scope) throw new CompilerError("Cannot extract variable in non child scope block") @@ -1756,7 +1757,7 @@ export class Compiler { const return_data:{datex:string} = {datex: SCOPE.datex}; - const compiled = await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE}, false, true, extract_pointers, undefined, Infinity, brackets?1:2, SCOPE.current_data_index); + const compiled = await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, true, extract_pointers, undefined, Infinity, brackets?1:2, SCOPE.current_data_index); SCOPE.datex = return_data.datex; // update position in current datex script // insert scope block @@ -2076,7 +2077,7 @@ export class Compiler { addInitBlock: async (SCOPE:compiler_scope, brackets = false) => { const return_data:{datex:string} = {datex: SCOPE.datex}; - const compiled = await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true}, false, false, false, undefined, Infinity, brackets?1:2, SCOPE.current_data_index); + const compiled = await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, false, false, undefined, Infinity, brackets?1:2, SCOPE.current_data_index); SCOPE.datex = return_data.datex; // update position in current datex script // remove redundant ";" @@ -2088,9 +2089,8 @@ export class Compiler { addInitBlockForValue: (SCOPE:compiler_scope|extract_var_scope, value:any) => { - //const compiled = this.compile("?", [value], {parent_scope:SCOPE, abs_offset, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true, collapse_first_inserted:true}, false, false, false, undefined, Infinity); // sync - - const compiled = this.compileValue(value, {parent_scope: SCOPE, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true, collapse_first_inserted:true}, false); + //const compiled = this.compile("?", [value], {parent_scope:SCOPE, abs_offset, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true, collapse_first_inserted:true}, false, false, false, undefined, Infinity); // sync + const compiled = this.compileValue(value, {parent_scope: SCOPE, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true, collapse_first_inserted:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false); // insert scope block Compiler.builder.insertInitBlock(SCOPE, compiled); @@ -2149,7 +2149,7 @@ export class Compiler { }, // just $aabbcc = - addPointerNormal: (SCOPE:compiler_scope|extract_var_scope, id:string|Uint8Array, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?:BinaryCode, init_brackets = false, value:any = NOT_EXISTING):Promise|void => { + addPointerNormal: (SCOPE:compiler_scope|extract_var_scope, id:string|Uint8Array, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?:BinaryCode, init_brackets = false, value:any = NOT_EXISTING, transform_scope?: Scope):Promise|void => { Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE); Compiler.builder.valueIndex(SCOPE); @@ -2165,6 +2165,25 @@ export class Compiler { if (!SCOPE.datex) throw new CompilerError("cannot insert init block in scope, missing datex source code"); return Compiler.builder.addInitBlock(SCOPE, init_brackets) // async } + else if (transform_scope) { + const temp_scope = { + b_index: 0, + buffer: new ArrayBuffer(400), + inner_scope: {}, + dynamic_indices: [], + inserted_values: new Map(), + preemptive_pointers: new Map(), + assignment_end_indices: new Set(), + options: SCOPE.options + } + temp_scope.uint8 = new Uint8Array(temp_scope.buffer); + temp_scope.data_view = new DataView(temp_scope.buffer); + Compiler.builder.insert_transform_scope(temp_scope, transform_scope); + const compiled = temp_scope.uint8.slice(0,temp_scope.b_index) + + Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+compiled.byteLength+1, SCOPE); + Compiler.builder.insertInitBlock(SCOPE, compiled.buffer); + } else return Compiler.builder.addInitBlockForValue(SCOPE, value) // sync } }, @@ -2187,12 +2206,13 @@ export class Compiler { // TODO: enable const defer = false // alreadyInitializing && ancestorScopes.has(parentScope.preemptive_pointers.get(normalized_id)!); // defer if already loading pointer in direct ancestor + // preemptive value already exists and was not yet initialized in scope if (ptr?.value_initialized && !alreadyInitializing) { parentScope.preemptive_pointers.set(normalized_id, SCOPE); Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE); SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START; - Compiler.builder.addPointerNormal(SCOPE, id, ACTION_TYPE.INIT, undefined, true, ptr.val); // sync + Compiler.builder.addPointerNormal(SCOPE, id, ACTION_TYPE.INIT, undefined, true, ptr.val, (ptr.force_local_transform && ptr.transform_scope) ? ptr.transform_scope : undefined); // sync Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE); SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE; Compiler.builder.addPointerNormal(SCOPE, id, ACTION_TYPE.GET); // sync @@ -2409,7 +2429,7 @@ export class Compiler { // adds __123.xy = _456 - if has recursive assignments Compiler.builder.insertByteAtIndex(BinaryCode.SUBSCOPE_START, root_start_index, SCOPE) // add ( - for (let assignment of unassigned_children) { + for (const assignment of unassigned_children) { Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE); SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE; Compiler.builder.insertVariable(SCOPE, assignment[0], ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR); // parent @@ -2631,6 +2651,28 @@ export class Compiler { // }, + insert_transform_scope: (SCOPE: compiler_scope|extract_var_scope, transform_scope: Scope) => { + const compiled = transform_scope.compiled; + + Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE); + + SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TRANSFORM; + + for (const v of transform_scope.internal_vars) { + Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE); + SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START; + Compiler.builder.insert(v, SCOPE); + SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END; + } + + Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT+compiled.byteLength, SCOPE); + SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK; + SCOPE.data_view.setUint32(SCOPE.b_index, compiled.byteLength, true); + SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT + SCOPE.uint8.set(new Uint8Array(compiled), SCOPE.b_index) + SCOPE.b_index += compiled.byteLength; + }, + // insert any value besides Maybes @@ -2642,6 +2684,38 @@ export class Compiler { } catch {} + const receiver = Compiler.builder.getScopeReceiver(SCOPE); + // bound local slot? (eg. #env) - only when sending to remote + const toRemote = receiver && receiver!==Runtime.endpoint && receiver !== LOCAL_ENDPOINT; + + if (toRemote && value?.[DX_BOUND_LOCAL_SLOT]) { + const v_name = value[DX_BOUND_LOCAL_SLOT]; + if (typeof v_name !== "string") throw new Error("Invalid DX_BOUND_LOCAL_SLOT, must be of type string"); + const mapped = Compiler.builder.mapInternalVarNameToByteCode(v_name, ACTION_TYPE.GET, SCOPE); + if (typeof mapped == "number") { + Compiler.builder.insertVariable(SCOPE, undefined, ACTION_TYPE.GET, undefined, mapped); + } + else { + throw new Error("Invalid DX_BOUND_LOCAL_SLOT: " + v_name); + } + return; + } + // bound pointer property (eg. #env->LANG) - only when sending to remote + if (toRemote && value instanceof PointerProperty && value.pointer.val?.[DX_BOUND_LOCAL_SLOT]) { + const v_name = value.pointer.val?.[DX_BOUND_LOCAL_SLOT]; + if (typeof v_name !== "string") throw new Error("Invalid DX_BOUND_LOCAL_SLOT, must be of type string"); + const mapped = Compiler.builder.mapInternalVarNameToByteCode(v_name, ACTION_TYPE.GET, SCOPE); + if (typeof mapped == "number") { + Compiler.builder.insertVariable(SCOPE, undefined, ACTION_TYPE.GET, undefined, mapped); + SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CHILD_GET_REF + Compiler.builder.insert(value.key, SCOPE); + } + else { + throw new Error("Invalid DX_BOUND_LOCAL_SLOT: " + v_name); + } + return; + } + // handle and ReadableStream, if streaming (<<) if ((value instanceof Stream || value instanceof ReadableStream) && SCOPE.uint8[SCOPE.b_index-1] == BinaryCode.STREAM) return Compiler.builder.handleStream(value, SCOPE); @@ -2698,33 +2772,17 @@ export class Compiler { const option_collapse = SCOPE.options.collapse_pointers && !(SCOPE.options.keep_external_pointers && value instanceof Pointer && !value.is_origin); const no_proxify = value instanceof Ref && (((value instanceof Pointer && value.is_anonymous) || option_collapse) || skip_first_collapse); + // proxify pointer exceptions: if (no_proxify) { - + // handle pointers with transform (always ...) + // only if not ignore_first_collapse or, if ignore_first_collapse and keep_first_transform is enabled - if (!SCOPE.options.no_create_pointers && value instanceof Pointer && value.transform_scope && (!skip_first_collapse || SCOPE.options.keep_first_transform)) { + if (!SCOPE.options.no_create_pointers && value instanceof Pointer && value.transform_scope && (value.force_local_transform || !skip_first_collapse || SCOPE.options.keep_first_transform)) { SCOPE.options._first_insert_done = true; // set to true before next insert - const compiled = value.transform_scope.compiled; - - Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE); - - SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TRANSFORM; - - for (const v of value.transform_scope.internal_vars) { - Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE); - SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START; - Compiler.builder.insert(v, SCOPE); - SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END; - } - - Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT+compiled.byteLength, SCOPE); - SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK; - SCOPE.data_view.setUint32(SCOPE.b_index, compiled.byteLength, true); - SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT - SCOPE.uint8.set(new Uint8Array(compiled), SCOPE.b_index) - SCOPE.b_index += compiled.byteLength; + Compiler.builder.insert_transform_scope(SCOPE, value.transform_scope); return; } @@ -2931,8 +2989,31 @@ export class Compiler { Compiler.builder.insert(ext, SCOPE, is_root, parents, unassigned_children); // shallow clone parents set } } - } + }, + mapInternalVarNameToByteCode: (v_name: string, action_type: ACTION_TYPE, SCOPE: compiler_scope) => { + if (v_name == "result") return BinaryCode.VAR_RESULT + else if (v_name == "sub_result") return BinaryCode.VAR_SUB_RESULT + else if (v_name == "_origin") return BinaryCode._VAR_ORIGIN + else if (v_name == "it") return BinaryCode.VAR_IT + else if (v_name == "void") return BinaryCode.VAR_VOID + + else if (v_name == "origin") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #origin", SCOPE.stack); return BinaryCode.VAR_ORIGIN} + else if (v_name == "endpoint") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #endpoint", SCOPE.stack); return BinaryCode.VAR_ENDPOINT} + else if (v_name == "location") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #location", SCOPE.stack); return BinaryCode.VAR_LOCATION} + else if (v_name == "env") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #env", SCOPE.stack); return BinaryCode.VAR_ENV} + // else if (v_name == "timestamp") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #timestamp", SCOPE.stack); base_type = BinaryCode.VAR_TIMESTAMP; v_name = undefined} + // else if (v_name == "encrypted") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #encrypted", SCOPE.stack); base_type = BinaryCode.VAR_ENCRYPTED; v_name = undefined} + // else if (v_name == "signed") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #signed", SCOPE.stack); base_type = BinaryCode.VAR_SIGNED; v_name = undefined} + else if (v_name == "meta") { if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #meta", SCOPE.stack); return BinaryCode.VAR_META} + else if (v_name == "public") { if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #public", SCOPE.stack); return BinaryCode.VAR_PUBLIC} + else if (v_name == "this") { if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #this", SCOPE.stack); return BinaryCode.VAR_THIS} + else if (v_name == "remote") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #remote", SCOPE.stack); return BinaryCode.VAR_REMOTE} + else if (v_name == "entrypoint") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #entrypoint", SCOPE.stack); return BinaryCode.VAR_ENTRYPOINT} + else if (v_name == "std") { if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #std", SCOPE.stack); return BinaryCode.VAR_STD} + + return v_name; + } } @@ -4294,7 +4375,7 @@ export class Compiler { // veryyy inefficient way of doing things TODO let return_data:{datex:string} = {datex: SCOPE.datex}; // ignore result - very bad - await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, pseudo_parent:true}, false, false, false, undefined, Infinity, 42 /*illegal*/, SCOPE.current_data_index); + await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, pseudo_parent:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, false, false, undefined, Infinity, 42 /*illegal*/, SCOPE.current_data_index); params[param_name][2] = SCOPE.datex.replace(return_data.datex, ""); if (return_data.datex[0] == ")") { SCOPE.datex = return_data.datex; @@ -4309,7 +4390,7 @@ export class Compiler { // veryyy inefficient way of doing things TODO let return_data:{datex:string} = {datex: SCOPE.datex}; // ignore result - very bad - await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, pseudo_parent:true}, false, false, false, undefined, Infinity, 2, SCOPE.current_data_index); + await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, pseudo_parent:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, false, false, undefined, Infinity, 2, SCOPE.current_data_index); params[param_name][3] = SCOPE.datex.replace(return_data.datex, ""); if (return_data.datex[0] == ")") { SCOPE.datex = return_data.datex; @@ -4365,7 +4446,7 @@ export class Compiler { // TODO: optimize this, no full compilation required const brackets = true; const return_data:{datex:string} = {datex: SCOPE.datex}; - await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE}, false, true, false, undefined, Infinity, brackets?1:2, SCOPE.current_data_index); + await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, true, false, undefined, Infinity, brackets?1:2, SCOPE.current_data_index); SCOPE.datex = return_data.datex; // update position in current datex script } @@ -4491,7 +4572,7 @@ export class Compiler { // INTERNAL_VAR or ROOT_VARIABLE or LABELED_POINTER else if ((m = SCOPE.datex.match(Regex.INTERNAL_VAR)) || (m = SCOPE.datex.match(Regex.ROOT_VARIABLE)) || (m = SCOPE.datex.match(Regex.LABELED_POINTER))) { - let v_name:string|number = m[2]; // get var name + let v_name:string|number|undefined = m[2]; // get var name const is_internal = m[1] == "#"; // is internal variable (#)? const is_label = m[1] == "$"; const is_hex = v_name.match(Regex.HEX_VARIABLE) && (is_internal || is_label); @@ -4507,8 +4588,7 @@ export class Compiler { if (is_property) SCOPE.datex = SCOPE.datex.substring(m[1].length + m[2].length + m[3].length); // pop datex (not "=" or "+=") else SCOPE.datex = SCOPE.datex.substring(m[0].length); // pop datex (also "=" or "+=") - - let [action_type, action_specifier] = is_property ? [ACTION_TYPE.GET] : Compiler.builder.getAssignAction(m[3]); + const [action_type, action_specifier] = is_property ? [ACTION_TYPE.GET] : Compiler.builder.getAssignAction(m[3]); if (is_hex) v_name = parseInt(v_name.replace(/[-_]/g,''),16) || 0; @@ -4520,26 +4600,11 @@ export class Compiler { // default internal variable shorthands if (is_internal) { - if (v_name == "result") {base_type = BinaryCode.VAR_RESULT; v_name = undefined} - else if (v_name == "sub_result") {base_type = BinaryCode.VAR_SUB_RESULT; v_name = undefined} - else if (v_name == "_origin") {base_type = BinaryCode._VAR_ORIGIN; v_name = undefined} - else if (v_name == "it") {base_type = BinaryCode.VAR_IT; v_name = undefined} - else if (v_name == "void") {base_type = BinaryCode.VAR_VOID; v_name = undefined} - - else if (v_name == "origin") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #origin", SCOPE.stack); base_type = BinaryCode.VAR_ORIGIN; v_name = undefined} - else if (v_name == "endpoint") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #endpoint", SCOPE.stack); base_type = BinaryCode.VAR_ENDPOINT; v_name = undefined} - else if (v_name == "location") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #location", SCOPE.stack); base_type = BinaryCode.VAR_LOCATION; v_name = undefined} - else if (v_name == "env") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #env", SCOPE.stack); base_type = BinaryCode.VAR_ENV; v_name = undefined} - // else if (v_name == "timestamp") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #timestamp", SCOPE.stack); base_type = BinaryCode.VAR_TIMESTAMP; v_name = undefined} - // else if (v_name == "encrypted") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #encrypted", SCOPE.stack); base_type = BinaryCode.VAR_ENCRYPTED; v_name = undefined} - // else if (v_name == "signed") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #signed", SCOPE.stack); base_type = BinaryCode.VAR_SIGNED; v_name = undefined} - else if (v_name == "meta") { if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #meta", SCOPE.stack); base_type = BinaryCode.VAR_META; v_name = undefined} - else if (v_name == "public") { if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #public", SCOPE.stack); base_type = BinaryCode.VAR_PUBLIC; v_name = undefined} - else if (v_name == "this") { if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #this", SCOPE.stack); base_type = BinaryCode.VAR_THIS; v_name = undefined} - else if (v_name == "remote") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #remote", SCOPE.stack); base_type = BinaryCode.VAR_REMOTE; v_name = undefined} - else if (v_name == "entrypoint") {if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #entrypoint", SCOPE.stack); base_type = BinaryCode.VAR_ENTRYPOINT; v_name = undefined} - else if (v_name == "std") { if (action_type != ACTION_TYPE.GET) throw new CompilerError("Invalid action on internal variable #std", SCOPE.stack); base_type = BinaryCode.VAR_STD; v_name = undefined} - + const mapped = typeof v_name == "string" ? Compiler.builder.mapInternalVarNameToByteCode(v_name, action_type, SCOPE) : undefined; + if (typeof mapped == "number") { + base_type = mapped; + v_name = undefined; + } // resolve internal var proxy name else if (typeof v_name == "string") { v_name = Compiler.builder.resolveInternalProxyName(SCOPE, v_name); @@ -5635,7 +5700,6 @@ export class Compiler { SCOPE.extract_var_indices.set(BinaryCode.LABEL, new Map()); SCOPE.extract_var_indices.set(BinaryCode.POINTER, new Map()); SCOPE.extract_var_indices.set(BinaryCode.INTERNAL_VAR, new Map()); // for parent internal var references - } SCOPE.inner_scope = SCOPE.subscopes[0]; diff --git a/docs/manual/10 The DATEX API.md b/docs/manual/10 The DATEX API.md index cca0ef85..5ea8b5a4 100644 --- a/docs/manual/10 The DATEX API.md +++ b/docs/manual/10 The DATEX API.md @@ -47,3 +47,13 @@ Inside function bodies, the [`datex.meta` object](https://github.com/unyt-org/da type:ProtocolDataType } ``` + +Example: + +```ts +@endpoint class MyInterface { + @property myMethod(a: number) { + console.log("myMethod called by endpoint " + datex.meta.sender) + } +} +``` \ No newline at end of file diff --git a/init.ts b/init.ts index cc9d945c..44a4a255 100644 --- a/init.ts +++ b/init.ts @@ -8,6 +8,9 @@ import { IndexedDBStorageLocation } from "./runtime/storage-locations/indexed-db import { LocalStorageLocation } from "./runtime/storage-locations/local-storage.ts"; import { DenoKVStorageLocation } from "./runtime/storage-locations/deno-kv.ts"; import { loadEternalValues } from "./utils/eternals.ts"; +import { DX_BOUND_LOCAL_SLOT } from "./runtime/constants.ts"; +import { verboseArg } from "./utils/logger.ts"; +import { MessageLogger } from "./utils/message_logger.ts"; /** @@ -67,6 +70,7 @@ export async function init() { // set Runtime ENV (not persistent if globalThis.NO_INIT) Runtime.ENV = globalThis.NO_INIT ? getDefaultEnv() : await Storage.loadOrCreate("Datex.Runtime.ENV", getDefaultEnv); + Runtime.ENV[DX_BOUND_LOCAL_SLOT] = "env" // workaround, should never happen if (!Runtime.ENV) { @@ -133,4 +137,7 @@ export async function init() { // @ts-ignore NO_INIT if (!globalThis.NO_INIT) await loadEternalValues(); + + // enables message logger when running with -v + if (verboseArg) MessageLogger.enable() } diff --git a/runtime/constants.ts b/runtime/constants.ts index d6738ee5..ff49c3be 100644 --- a/runtime/constants.ts +++ b/runtime/constants.ts @@ -24,9 +24,8 @@ export const DX_IGNORE: unique symbol = Symbol("DX_IGNORE"); // ignore in DX (wh export const DX_PREEMPTIVE: unique symbol = Symbol("DX_PREEMPTIVE"); // used to override the default loading behaviour for a pointer (fetching by id). Can be an arbitrary DATEX Script that can be resolved with datex.get. Currently only used by the interface generator for JS modules. export const DX_REACTIVE_METHODS: unique symbol = Symbol("DX_REACTIVE_METHODS"); // object containing reactive methods for this obj, used e.g. for x.$.map, x.$.filter, ... - export const INIT_PROPS: unique symbol = Symbol("INIT_PROPS"); // key for init props function passed to constructor to initialize properties of pointer immediately - +export const DX_BOUND_LOCAL_SLOT: unique symbol = Symbol("DX_BOUND_SLOT"); // local slot (e.g. #env) to which this value always gets serialized, instead of the value/pointer // ------------------------------------- export const DX_SLOTS: unique symbol = Symbol("DX_SLOTS"); diff --git a/runtime/pointers.ts b/runtime/pointers.ts index d369cc9d..14f6e23f 100644 --- a/runtime/pointers.ts +++ b/runtime/pointers.ts @@ -1505,8 +1505,10 @@ export class Pointer extends Ref { // create a new pointer with a transform value - static createTransform(observe_values:V, transform:TransformFunction, persistent_datex_transform?:string) { - return Pointer.create(undefined, NOT_EXISTING).handleTransform(observe_values, transform, persistent_datex_transform); + static createTransform(observe_values:V, transform:TransformFunction, persistent_datex_transform?:string, force_transform = false) { + const ptr = Pointer.create(undefined, NOT_EXISTING).handleTransform(observe_values, transform, persistent_datex_transform); + ptr.force_local_transform = force_transform; + return ptr; } /** @@ -1978,6 +1980,12 @@ export class Pointer extends Ref { */ public async subscribeForPointerUpdates(override_endpoint?:Endpoint, get_value = !this.#loaded, keep_pointer_origin = false):Promise { + + // never subscribe if pointer is bound to a transform function + if (this.transform_scope) { + return this; + } + if (this.#subscribed) { // logger.debug("already subscribed to " + this.idString()); return this; @@ -2437,8 +2445,8 @@ export class Pointer extends Ref { } // propagate updates via datex - if (this.origin && !this.is_origin) { - if (!this.#exclude_origin_from_updates) this.handleDatexUpdate(null, '#0=?;? = #0', [this.current_val, this], this.origin, true) + if (this.send_updates_to_origin) { + this.handleDatexUpdate(null, '#0=?;? = #0', [this.current_val, this], this.origin, true) } if (this.update_endpoints.size) { logger.debug("forwarding update to subscribers", this.update_endpoints); @@ -2463,6 +2471,9 @@ export class Pointer extends Ref { #transform_scope?:Scope; get transform_scope() {return this.#transform_scope} + #force_transform = false; // if true, the pointer transform function is always sent via DATEX + set force_local_transform(force_transform: boolean) {this.#force_transform = force_transform} + get force_local_transform() {return this.#force_transform} /** * transform observed values to update pointer value (using a transform function or DATEX transform scope) @@ -2707,7 +2718,12 @@ export class Pointer extends Ref { // TODO: JUST A WORKAROUND - if transform is a JS function, a DATEX Script can be provided to be stored as a transform method async setDatexTransform(datex_transform:string) { // TODO: fix and reenable - // this.#transform_scope = (await Runtime.executeDatexLocally(datex_transform)).transform_scope; + try { + this.#transform_scope = (await Runtime.executeDatexLocally(datex_transform)).transform_scope; + } + catch (e) { + console.log("transform error", e); + } } #registeredForGC = false; @@ -2910,7 +2926,13 @@ export class Pointer extends Ref { // updates are from datex (external) and should not be distributed again or local update -> should be distributed to subscribers #update_endpoints: Disjunction; // endpoint to update - #exclude_origin_from_updates:boolean; + get send_updates_to_origin() { + // assumes origin is not current endpoint + // don't send if exclude_origin_from_updates set or has a local transform_scope + return this.origin && !this.is_origin && !(this.#exclude_origin_from_updates || this.transform_scope) + } + + #exclude_origin_from_updates?:boolean; public excludeEndpointFromUpdates(endpoint:Endpoint) { // TODO origin equals id also for remote endpoints! if (this.origin.equals(endpoint)) this.#exclude_origin_from_updates = true; @@ -3399,8 +3421,8 @@ export class Pointer extends Ref { // get current value value = value ?? this.getProperty(key); - if (this.origin && !this.is_origin) { - if (!this.#exclude_origin_from_updates) this.handleDatexUpdate(key, Runtime.PRECOMPILED_DXB.SET_PROPERTY, [this, key, value], this.origin) + if (this.send_updates_to_origin) { + this.handleDatexUpdate(key, Runtime.PRECOMPILED_DXB.SET_PROPERTY, [this, key, value], this.origin) } if (this.update_endpoints.size) { this.handleDatexUpdate(key, Runtime.PRECOMPILED_DXB.SET_PROPERTY, [this, key, value], this.update_endpoints) @@ -3451,8 +3473,8 @@ export class Pointer extends Ref { // propagate updates via datex - if (this.origin && !this.is_origin) { - if (!this.#exclude_origin_from_updates) this.handleDatexUpdate(null, '? += ?', [this, value], this.origin) + if (this.send_updates_to_origin) { + this.handleDatexUpdate(null, '? += ?', [this, value], this.origin) } if (this.update_endpoints.size) { this.handleDatexUpdate(null, '? += ?', [this, value], this.update_endpoints) @@ -3482,9 +3504,9 @@ export class Pointer extends Ref { this.streaming.push(true); // also stream for all future subscribers - if (this.origin && !this.is_origin) { + if (this.send_updates_to_origin) { logger.info("streaming to parent " + this.origin); - if (!this.#exclude_origin_from_updates) this.handleDatexUpdate(null, '? << ?'/*DatexRuntime.PRECOMPILED_DXB.STREAM*/, [this, obj], this.origin) + this.handleDatexUpdate(null, '? << ?'/*DatexRuntime.PRECOMPILED_DXB.STREAM*/, [this, obj], this.origin) } if (this.update_endpoints.size) { logger.info("streaming to subscribers " + this.update_endpoints); @@ -3516,8 +3538,8 @@ export class Pointer extends Ref { // propagate updates via datex? - if (this.origin && !this.is_origin) { - if (!this.#exclude_origin_from_updates) this.handleDatexUpdate(null, Runtime.PRECOMPILED_DXB.CLEAR_WILDCARD, [this], this.origin) + if (this.send_updates_to_origin) { + this.handleDatexUpdate(null, Runtime.PRECOMPILED_DXB.CLEAR_WILDCARD, [this], this.origin) } if (this.update_endpoints.size) { this.handleDatexUpdate(null, Runtime.PRECOMPILED_DXB.CLEAR_WILDCARD, [this], this.update_endpoints) @@ -3572,11 +3594,9 @@ export class Pointer extends Ref { const ret = Array.prototype.splice.call(this.shadow_object, start_index, deleteCount, ...replace); // propagate updates via datex? - if (this.origin && !this.is_origin) { - if (!this.#exclude_origin_from_updates) { - if (!replace?.length) this.handleDatexUpdate(null, '#0 = ?0; #1 = count #0;#0.(?1..?2) = void;#0.(?1..#1) = #0.(?3..#1);', [this, start, end, start+size], this.origin) // no insert - else this.handleDatexUpdate(null, '#0=?0;#0.(?4..?1) = void; #0.(?2..((count #0) + ?3)) = #0.(?4..(count #0));#0.(?4..?5) = ?6;', [this, end, start-size+replace_length, replace_length, start, start+replace_length, replace], this.origin) // insert - } + if (this.send_updates_to_origin) { + if (!replace?.length) this.handleDatexUpdate(null, '#0 = ?0; #1 = count #0;#0.(?1..?2) = void;#0.(?1..#1) = #0.(?3..#1);', [this, start, end, start+size], this.origin) // no insert + else this.handleDatexUpdate(null, '#0=?0;#0.(?4..?1) = void; #0.(?2..((count #0) + ?3)) = #0.(?4..(count #0));#0.(?4..?5) = ?6;', [this, end, start-size+replace_length, replace_length, start, start+replace_length, replace], this.origin) // insert } if (this.update_endpoints.size) { if (!replace?.length) this.handleDatexUpdate(null, '#0 = ?0; #1 = count #0;#0.(?1..?2) = void;#0.(?1..#1) = #0.(?3..#1);', [this, start, end, start+size], this.update_endpoints) // no insert @@ -3638,8 +3658,8 @@ export class Pointer extends Ref { if ((res == INVALID || res == NOT_EXISTING) && this.shadow_object instanceof Array) key = BigInt(key); // change to for DATEX if - if (this.origin && !this.is_origin) { - if (!this.#exclude_origin_from_updates) this.handleDatexUpdate(null, '?.? = void', [this, key], this.origin) + if (this.send_updates_to_origin) { + this.handleDatexUpdate(null, '?.? = void', [this, key], this.origin) } if (this.update_endpoints.size) { this.handleDatexUpdate(null, '?.? = void', [this, key], this.update_endpoints) @@ -3677,8 +3697,8 @@ export class Pointer extends Ref { // propagate updates via datex - if (this.origin && !this.is_origin) { - if (!this.#exclude_origin_from_updates) this.handleDatexUpdate(null, '? -= ?', [this, value], this.origin) + if (this.send_updates_to_origin) { + this.handleDatexUpdate(null, '? -= ?', [this, value], this.origin) } if (this.update_endpoints.size) { logger.debug("forwarding delete to subscribers " + this.update_endpoints); diff --git a/runtime/runtime.ts b/runtime/runtime.ts index bd89ad6e..aaeeced7 100644 --- a/runtime/runtime.ts +++ b/runtime/runtime.ts @@ -275,7 +275,7 @@ export class Runtime { always ( if (local_map.(lang)) (local_map.(lang)) else ( - 'Could not translate to (lang)' + local_map.'en' default '?' /* val text = local_map.'en'; val language = lang; @@ -283,7 +283,7 @@ export class Runtime { */ ) ) - ` // used for persistent DATEX storage + `, true // used for persistent DATEX storage ); } @@ -308,7 +308,7 @@ export class Runtime { always ( if (local_map.(lang)) (local_map.(lang).(key)) else ( - 'Could not translate to (lang)' + local_map.'en' default '?' /* val text = local_map.'en'.(key); val language = lang; @@ -316,6 +316,7 @@ export class Runtime { */ ) )` : '' // used for persistent DATEX storage + , true ); // add to saved string if(!saved_strings) this.#saved_local_strings.set(local_map, saved_strings = new Map()); @@ -3048,7 +3049,7 @@ export class Runtime { // resolve if (p[1]?.resolve) { p[1].resolve(ptr) - Pointer.loading_pointers.delete(ptr.id); // TODO: only workaround, automaticall handle delete, but leads to promise rejection errors + Pointer.loading_pointers.delete(ptr.id); // TODO: only workaround, automatically handle delete, but leads to promise rejection errors } } else await Runtime.runtime_actions.handleAssignAction(SCOPE, p[1], null, null, el, p[0]); // other action on pointer @@ -5795,10 +5796,25 @@ export class Runtime { // TRANSFORM (always) if (INNER_SCOPE.scope_block_for == BinaryCode.TRANSFORM) { INNER_SCOPE.scope_block_for = null; - await this.runtime_actions.insertToScope( - SCOPE, - Ref.collapseValue(await Pointer.createTransformAsync(INNER_SCOPE.scope_block_vars, code_block)) - ) + const waiting = [...SCOPE.inner_scope.waiting_ptrs??[]].at(-1); + // assign always() to init ($xxx := always(...)) + if (waiting && typeof waiting[1] == "object") { // is init + const ptr = waiting[0] + ptr.handleTransformAsync(INNER_SCOPE.scope_block_vars, code_block); + // resolve + if (waiting[1]?.resolve) { + waiting[1].resolve(ptr) + Pointer.loading_pointers.delete(ptr.id); // TODO: only workaround, automatically handle delete, but leads to promise rejection errors + } + SCOPE.inner_scope.waiting_ptrs!.delete(waiting) + } + else { + await this.runtime_actions.insertToScope( + SCOPE, + Ref.collapseValue(await Pointer.createTransformAsync(INNER_SCOPE.scope_block_vars, code_block)) + ) + } + } // ASSERT diff --git a/utils/cookies.ts b/utils/cookies.ts index 0ad12fd9..e763db4d 100644 --- a/utils/cookies.ts +++ b/utils/cookies.ts @@ -4,6 +4,7 @@ import { client_type } from "./constants.ts"; const port = globalThis.location?.port; +const isSafari = (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)); export function deleteCookie(name: string) { @@ -28,7 +29,7 @@ export function setCookie(name: string, value: string, expDays?: number) { expiryDate.setTime(expiryDate.getTime() + (expDays * 24 * 60 * 60 * 1000)); } const expires = expDays == 0 ? "" : "expires=" + expiryDate.toUTCString() + ";"; - document.cookie = name + "=" + value + "; " + expires + " path=/;" + document.cookie = name + "=" + value + "; " + expires + " path=/; SameSite=None;" + (isSafari ? "" :" Secure;") } export function getCookie(name: string) { diff --git a/utils/message_logger.ts b/utils/message_logger.ts index ec689e43..358a2575 100644 --- a/utils/message_logger.ts +++ b/utils/message_logger.ts @@ -6,6 +6,7 @@ import { Logger } from "./logger.ts"; // WASM import {decompile as wasm_decompile} from "../wasm/adapter/pkg/datex_wasm.js"; +import { console } from "./ansi_compat.ts"; export class MessageLogger { diff --git a/wasm/adapter/pkg/datex_wasm_bg.wasm b/wasm/adapter/pkg/datex_wasm_bg.wasm index 4abb7e129c73ba9a07d369c23b0477e929dc4788..a4bf688cea79b41388eb9b8dc495c6b6375bc95f 100644 GIT binary patch delta 95989 zcmcG%dq7lG_dh)QTnC2BaFvVb45FfVH}BVDTA7uamYH_3tC5wKPxW*WOiD~tY^aS! zN=b%_MS>nGGAuMSN=!5?G%_kGDl958s^4dwIcFHr=lMSGA1^g?_Gj(2?|ZGi_S*Z5 zO$P@5esFN{a6uGQxnz{E%`R+fDQOJM3}dYxmfWQzqw8Z1)>^`nW0{)y!akdp{X&Vm z&qCRVj*W6fx>POa`F%ELwQO?$30lVUC1nHVhnwm9X{CWmWgZe%dt7}YOU_Qa=D(+1 zHq)2(=UdCXyj?u~w1AQi?wX>YDq)L%XJ(EiA@|QCjxSbqDOvu|O(?VEi&gJ?DRCw5 zts4z~BQol_MJ%mxqgBlym!#GDQ0O^L2sN5ua%vU1sJYXnXbnoLmbU?*l+xueP%8rTzpOa_AIq4$&^L%!N=Xh=wi}2jK;R%+;-P>3~pwQn|#WZ$z z$b3)e#_66LHr~M^J(U}KJK{8(Tfs*X(mc#@y~p|db)JIflf`+`V$b2{Q*IU}x*yHhjp?@tyx%?(yRjdvs9aj9`4%m@ebHMaL#|_r@gk>WQX^ z+Um5_5OLtRLE}98@*+KpUkLLo&WmFA7-(Z&FSZDwi#!#1QJ%mT67lR6sK4#*quJeZ z&_Xkbi{0s2|H8aDhgQLYW;$F#vQQ)@iu5dCi2>7t7kQLTvlWN-5eu3D&UnwGnKg&^bGE|AAU&!Wxi+0~xEH+PGsfwK)4+EBzKHbQI>T_IC~ zZ}tqye@Y6O9(;?ZJim`U`^5@Fe2{gQ?nZuv%v-bJ0_Kcc)?~M;ea75k&<(`H9G)>R zCUl$c&>|3Lb4Lch_FX@fY^ zp(Xec(+%Pbht|!HxZEI4cWB-Hh${@@RcQ{*2Pw;%CIgLs8QOY|c?We}%1 zv>txMl?L&0hnD0=%ruBo9a_)xh?hG0XubTXs|?ml9a``6h*QkLdSy!jyTlBi+>+p_ z+!AyCF!x1r8s<-I80N{I!3BfZbWh~VZqJH>foz7Sq@ZV5>#7QyJ6PMvf+k?Zv@*%F zU{|E)wU?tk3kniF!(JYU6t};6p$!Q3BJlR zXlqZmSoi{wWr}pHNLD&V1&! zW4<^&A8cKQ8GQLG)7e?@4&^w`#|$5ex**vB%|9F?4>jlTPo1&u(V@gB!+66;@W zLCGjB+8t-M#n1=To?&LX-!UATEog|RWqTwm_0(^>MbVL!CVD1szk$8!Szi?4*}Z+b zvX_XmCve9N%6k-4JooIlfgSXGu;Uh1;~7wNi}DGPRnK!pH?UJiGIi&4cG?J~BJ{Np z`f%qA_MK0nXoGwGvqJ}l0EZwB`|N)x?RzUCy-hT#>fbL zge=9~ho(-Z;zq$NNTTctJvZ-)l8$+^>v!9ye*8rye;%dyKWbo$-sap0^0M(wwC6ipAQ9%LT zidCBhRZ&47Fb5vZF8U=_=*d1IA{txG*kLc81=9_AnG9$_cC*r z{A)L3PzMj~sb@~lY~5`SL8lOd=W)Gnj}R2VE)8Z5WFF#hMZ27?uqBD0J+K6Hmwdk~ z#B)gR#=<<`>i4oh&vj*s!yLnfJOQ1RJcezgXQbyuS$`H$qP{Vo!N9rg&C5{U&NoNl z`h-Jb(%?iFIFnJHmi2;X;oAvadeVT_Lz04|FsD1zO@AT5ZcpCZ$*~v-=I)C4jffAl z2e@2GF8l?$Jg#?63+b7jeS7DN&Y*4tVYgQ7o$1-I&&k{dZt`K5XZyZnR`2;}f3)Y@ zeUl<-Ezz1_o))gGu(?=&+fwH(o+St4SvSwTcS~7JiSxZljCJ)m-y2i1wo+v*-ZSXH z1{P<0$CeyA(1(S_P#(FJwP<>#s17UclDfJ|V z1sTYdGjt!6fas>pL%NkBlTrj_cBIJlZ2Yiy;D7Dr_7C%g%uLUwkA|Rcj(k*rsy%o( zInlpGQ-Y0_+2gSNxRykvE2dSXr{eHXjA`rPrySl2)G1nKrKkBwk8^8KTJxyGTLUl@ z7z~|8I`v2|hqu+>$T2tu{I_P;DSplV52eO`JoNu4b=AjzMulttuq7JSFo6kJk_1Sj zE8Mf;Xo@jU;yn#V<%9~FAdChdoo>?_p9Hi464>VvYDY(g#Jl8pcOa>X`&}}r3U`=i zM(uS|E)<~&?r>PR0{T(2LAza$hZ#IjLN<4}=g5JmAvT5@ijs^v_P1?77KY*<2z`Sf zbh@Du5EP7HKB%6Hj$NOCrRP7F;@NSmYxj-Rx+qiX4Aou?im}~9;enp7kL_Y1o(;zn z!b7yBscySh_E?bWa0Pm*j(?>zQwBeJN+#107giy#H(UO~@!kt0@_MdV?%veP43yn?%LSThi^vcVyOHa_X0U%%1)O z_>#54lJH+2H29uA`#wE)&tfwbJoT*#yG*#X`8%ubB9^D3?>msJzWe*0mt^r6M$M z=4%Ht7r!Keg|Jrrng}+c8>{4N2D5>zn!i1m^^W`v{t}H`C2h&6T01!pvhwt{!R&xt zX(~p&n)p8&E7BK_VIMO;$^iYraje}(nKuPINfX&Ii=rdddLMZ1V)l*?fcKyUxRLPq zrR;V&)+nxr*1QWHL7ofEB((6^SF*$iLbMnv*t-ht0y?RXuey?5WcRV{zmlD?s@O1> z#p=hdVw*&ZLe1cBT*G?s%Vx3p=TrYZo2~6kebXXPb{yGx^qzCrZowq$AU6kwHrHB% zOk09_-hT;ug5PjE3yjV>X2y^$QgjsEnWAMM=a1jc`mhQ<=wTM6m*38=#~kBb?q=Pb zc@{sUMA5R2=~M1zC*%tikR@at<8Lit&sh1~dOy2Qa<%)aqPk)K*@A73AlU(H6H-DM z@}D1M+)TnZKg6=V;qjwnwl4gtJYt6n0+Q)zhzCWP3x*v z;Ncy-8X_cUEj~i}T7x4G4=+a%5r%7xK0+%IMrcLrOb*mIS!>qoA7_^_d-I#1LMQO` ztJxTSXBzv9HNSFuIt!VWmF7oKf?(|0nJJPvk(8ZQ>KPWk^SRb!B!Fkv}Rts zmPN<-QbK^kycs%-*i&oSEPFdDqQ#+Jqt>y2AR*&hKKXf;GA`@eqc-QCG;M3XI!fc* zKm=nRn}ix4!3B$<#cVdBqMk*Ix1#st}JV zxQp0W(dzp=>IZLu-o7vL5zM|X_Yus#ul5nlzOT0kX5Z_tv2W}N%|tczv0uk}yIFs$ zjGbW4j!wfaTuWcC7re>BSx0Z}eT(f@S-HOSJvKVXUQ>s8m87-uJ%?GXE8_%EKdl%K zqXFo5o6+xD^Jj=@)wkEMjSg0$PpM}^7%SutpJcZJ)}Lfgi>z3`^9wI|<7u`VaK@MH z1|d58ZzN6Da{sY16_9PA{@z!tI4I5R>59%ho!^;I+?i0*nb6Xi(9oHX{e7qL%%9wu zQqh@E+?mkOnNY)r|H3{DFk6!TJr8PScd%;xfmRkMux7sOH};Z{x0)yZ&W;2A@jJUX zv}2GADd5xE*tJT*YRo2y|GS;J^{O^DhJjl;%Pwc7`t-9HTEM&iVTpWNJ4;5VFKuVP zQU0J^Eo5f#cm82jtnk@Pp(|^7_GKZF6+K%eEb|j0W{H?;2+@s9=+Bz!`fI2h+q?RQ9FXpQ>2C(Phgp%)sx6&p8~XfhB!k-ogdfq zpX1<=(*Fq-MzF~9lVzRemxl^32|4@ukD5!gIEn24_nRMW4g;N^GOmL}S$r__#~x-nAd@1kb8Wb%nozEo8k zoD|Cg;ZcBp1ZD03m&1>Xe;FwZcKRyelBP-%wE~_LB}^V<^$}X`lI}+TIW@cUsQ}`j zC~}p1%R#TX5#qT~LJx;gFq&$E`EejhNOl!dO&r+WB?f8~26t+r!B9%Ml=6^hA;wYU zjX~aJd~meT9p=}}Xkj2slI77tx5R2Sjo_FIpI8W#bM2 zfprnqyD48{M<<{KRDTykTb%y{B&t-&0$$QZm_56S@=s4sr+VQaCe*1T2hiYFa64Tg z7+I~t3rBz<#O1_8tE9YxD3@{y1yYC-x$G3G;PYaH8_lUM{D%R==EIumU&IK{1ex7{ z35V`WixsX@NkC}iPQ?nnoJMQB^+q|Ud}N%^BdUPP^o|h~OiWr4zamZ;fL?qwPKfPe zW~&h=dJtXaES1T3V@w4jLmD@X;oEV-75{sk2geJ;2i8!^f4WoA|Gh^Fs42Pp?|9)p zS2cwz@MUxrfie@+5~$+oU4_VqdJ5N=5%fgFK13*WMg;$;t8gDn=Ytc3ST*wiqSFuX znF&HfL^c7UQ1*EQvibT1BrKqCuD&Tj=*iMD-Unzix#+32m>`Q{((y&<>FHz3A&_at z(9_43M)hoIS<3fh`GfWmVl5c2r4zw8{1miGmde+QLXr6`LEN3OPtkTn$#&!Ural!Pn#ipE(FzpjPw=)>r(OS*(W?HRz72*@LqNl9{rVW^HCD2SOG22Hl?Z|W= z!Lst7uMIUzH8%nc`mOg1q6h)K^Ite_Y3KF_g)6${?Z?0vh9ntd&6O4k1j^d4-~XU6 zk$IC$^JtFjid6NBz5Eoi~PI>kE8x$AX>_?T+ zeLp^WJ}d9?m@tZAtNobpG-D0C{&8V29wEz&$3*Yre($4TnQ$Z9z{NBnExc+I?NYD9 zSVPs$#-oVmqzMc8uqT9z`Gj;K7MaXVM{EOsK3$l?^7t3&!Z_zXB*UhlSPe3qM{n~1 z%Z2E$_4%OMiE1a8M`k|1W;teT1Ak<>@F~Dx2d|sG8=qs8zvmtI_ZB2-R|gDXw0kQ9y%!*#_YQ zyO4c~N4+FWX8HQ{F9}(!=b?uEHZ8gz_+*G*Ex+t#;Y!xRpL2lUls1AO&%q1y5Y z7=#{0!rvAlt*`j5{_RfTTDeanNxNutb`yfsb3UWhOEx+pvtD0VBJ5F|nb165u@G@b zBDYZ=@TTxSV~za9av_ojmJ83ZMjheh%-Oob6knGD){G)PWUp}GJgRPgM|eVwZJ>Qs zl9utQxdqZPKLH^HHp!L)!aTc)Ds|<3;gqkX?bX75{@NkoMXO<#-XZSi@zug-me&Iu z`ASIPvqoO!&l#EXlp0}(UVl_zirtFQzd9lG6BAl8t=8FH0b2She^kr|oD}|Kb-eE> zp>IIbQ_z3OTJ}o)hEsxDNa;ukx1nE329$5*quKCZp}ws_ND@NJ-nMcNa5-Qj)t|=F zQ>M3{7G?@?d|maG5bw+=w|Eq|WOK^-$~@Ukleo-e_*E@|!zt z--%X5B6oEDAf42))h#i7hX9;4)H@j~Xmxshoue~rbf+Rt672tcVDx$czuqo( zji~>G_Fpj&kmsPm$T8T=SJ}nB;k95J4trOity)*m^Z95%=Knz9rRfK05XTtqb4I3R*IWN!RW8PNKHZmsF z`H_rcSOot|idKG2;DuV#%vWBJUclb~{rpPj)$-=R3$~_~cXM1QBCD3qK*aeS*~phW zMAzi=8dr9-bK`LE^4u*J# z1&d?P@2i}T`OU!>YIzM`50yXVyq4!4>D+STko&(3YxWWT8;Ur;?93xPIpjhS=|}kW zh&aEq+Vs^S;u8|oa!7=j7+UZP)PiZt$WR>x!I8?kTpr2veirOGp(y$0Rt$&~z%U?M~<;nb~yM$#D-Piy zHzHg^VHbDIwdfziqD9~U3<^MV>&eAF^=HHLHlGI4!8 zZHnMEv(bsJM6M>BT#|#!slBEzNfVa{Lhh?PbcN{V@)P1fjMA_tL`^8z>7{LW0;5yO z-+4m33Q8|zg*Yz0r3eNaoeQ``m+bt7y#7Tmp*ATn&hJL6@x+#|-)uHaa$s z=}nL-WB>OILLih`1Q&B26trHK1}o4$RZV>ATCqF-c&!+3Kjh_X;lHjGe~xS=?<;zKORwD~Eb>Xl{dMZXd84*QO0#M^0D!g9p@LU`#;)Wxt|vWk#R zvR28Po)ddu5f9>MK_ef}MJ=>-+di9H#W5AmesK+eujOJMq#z|%9A-DumGXtT5V=ae zIaiznSHkIBaVGS^MH|Fxn2=GZuihxSnR5IX4qiUxyPg;OBK^td#WhMTk&g4ldEzHS za%vE^HbLbd1LQ(>y z;*OEmafNy3^+3Yb%HA!;^fUZp29?|-mg~eNcpZ*#o4|Q`|8M~_7Vfp$-Qp}?aRc^< zT?ddi4DPW@gJHapn}z(RMEeG&7upd@o|*^VUDr#StuO<9fKD z2Qth6Ax)SlP&dHu(d!NIVfa1t{5QlU%x=0iDtYW%;`U2T4?~O3(UHChl}^$M@VKC( zqnbP;ZmrZ8FJg06i+vRYxKSTnE>r zNvPsKAA*vuNIT&usZ=NM};Ww{iBXJXcBF}$JkY~X$T#Sn>cghTR zGy@o8f%xE}TM%QxxEDZ|E+ZnNK#A@W!&q#b5sR<*t_j_`yWEKu?vd29SMTILeN+1N z=j_^`=xGB64jMdUsLf%FT0Sn4#auLT*o5KZtptqW&i!aMX6!hqKNce4p2|d0gk*;s zo@i`8XfGjZ#r&^t#i?l%$<6WPR!EiM3&GW5o0dV4krM?ne#2paB{kpxe?oCYit_XxtrDB7q8?)AcPM$m{IM(_h4 zyolg_f<`@t5`34SNLdXb__mLEFu^h(97M2~Ak`x+XdvP3gpIrg5PZps4(d;E6G5X| z{RnRK!4!he`Cwmy9)dt@qVd$UTzzyuRM>B|}y8U5!xuIAdbBNS`2 z36~pf+DATU_ztTH8f`F~hKGC*_p)r-0fNTtQ3zK0VzK<%(zFU+G;OTNhi%h7A)3+s zpuwj|&?ucQmw8$0eJsY^tP?&Kx^(7c`NGEn8f4GMLiZKTf)ac@#(g?pNu)9+-p!M~ z5VN3iU;jcp!E*TO)8cP)>O8cqigC$gd(B{4ADAL;Vd<>KDzEkJXE)u7F9lS@CWK z&k32Y&;ha$m6OlM|1M4uHstdse;3CJ&l%5w`p>_MAxwBSpTF>j*n{`{1J}2+O_2JB zIM@We+Y!`@vfNY~j-M_rBnjUWvYA{$nk zb{%7e1Em`n*125{X)o3}{r({7c1LL2uhuFlx$IclzV0H8 zp#8JnJytrwLOXAW)p%(Q#Xc7={VKxH%<3*ZK?Y~2TS{hw3r}K240Gm2LbdhDs>1D~%5;43X9sTS?mtme4EJwIpAJb2| z2wnFoU(#P{r01Lg(jt29A0REI=a_*~l09#$F+i32odcywYIIpErs5#22@mgUdNT5C z6;oU9cO(UdtAf$yOr7Pgu{B@+Xidj>< zR)1|3r{A1Q1iD=ZZ$&E)yH<)yJCCWzpQ#kUtHa0_(s8fV z&{O8idJfmQ`i*9M2j{uzunQe+8>D4yKsBRLk3rEml0-G}LMaL|E}$9;QGe@N=`lIL zv@x?z@`>{$4?3iFJ_M~z|7*T7Oi< zmdfr7I^&YH%+8K2+3S7EJ;fJgNLiMbs&dbhQiNdD4|i6vbvC?IrM%ZlX&?KEH?5Qg z_x))rc0v7YHtn6XEAWO1_6tODF_)4o1cga-*9bSmamM$PesQMsGfS-X>X=|zqmY(H zdZNzMJ2EXBb$rg#QcuN*t>sTVEv@ap{%>f$3c4|4o(gm|9q4!g`7C*{VqB7U9hI6R-{K|F^PQg6?i$`Zky(2OyuF*K?qBJSEc&E?ElHlk` zZ$S6PYIzNM#v181Hq+;@%N8w<9Xxv8sVCCrGn@8j73ipXI%32dKj3R17ULYPo$MFm z_GA%d+zUIoQR}3YLiUUN-E~rL%*pT8Nv8x_Bn~|z1+kP;pNExBkvbL>Ts+tOv!csJXotk3}aQi z`bFtLcx^UKa%2tnXZm`C%k+Ymr0ZFDfd?Q45m+NDiK$$77D!`7SBJz1og@af4FrTQ zdPOP=Z+VHjgxp2uaZwZBd_qp(W41}5{FXxL#^mfRhN>}6T#M;MI|pW-ceoWOE_|?b zD717GN=g4MKU{n1oK;2vU$9MziKs=yIkl+X!t+naDbdi_+Igv3`G?!2cvh%?yG_av zoEdPqc|G|If}PXOA1{(VfeYZ8osvMOhS$9&ZH{PLS!)|;vn48HY~*Ia3HMn&uvnTW z+MBkaO+B<0eou+ivxg~|B!cHlrlA|__--&-lG#uq&4F4SSt{Lx$Lq;zG=H^J8aBg} zJZubczW$$ukNgsJ;~AH)O<~4hLZchVD=eW z-#-US9r%)GWROb6r8G*ImBBadmbzSbULoZ^E-BT^S_z7w70#*PdD%BD_shPJ2k()l z#QL07aINEZohB~PM8k8%@7^PI_|ZPtBPIL%Xo7K*@xS`f5_BoXxI*SagS;*@pC64~ z$dBe#s^pXNbCdB0b!nz$k@1goscTS2ec`S9O_zF`*UY?LFRw)i`F06Q69u~4$b47h z^eJUhSJoxhkWj5H$6AKyGC=0D{NXpGJB8e5^)KF#MvAeO+ptpfx7jqfTSUD3gH0aP z8r@|`-z!D&OW&44;ryKQw$ulYs-)<@}6rvz~TPY86nWrPWddi}ZPF=`7sz)auWFDB1vqh?!%Hhylgj}2ijb!cbcm(TxTDa5}gG)77i6RM(~9RTgaa}EH%R_eV|5K z2&=TdMtWFCNQVo~sxg#=55b(r2rfA)MMEI#8>ARL|EM%LASLf9tjH4bb8cd^VU=KD zCfV@nZXQ&FHq?mHD#4^R>FxEGY?Ne^1vz+(N=-=qnQo#An9 zQVBbwf7B)w1qiuCI=qi8u>a-)jB$u_Guf5NsrZ8JTMU}>b-~#nxoyU)X%vG|DB#>{CkF?ERqvd{wYK!AqKOeu^d@7a}i+r71$& z+dbCAtwl)dj-6&sh`a*ZC0&no%J+yt^;P=}!NM-4o<9>I9}2N3__={#&{8AiZt&l( zij-#r;Q48Sd;*6z2asD2E$@B3+%4ZB;TWk$FPZMQ&+H}76zry%+N5t!mSdO&>-0l? zpvp)nfdyPOXY2Wu2ow||Ho(oO$Ak3>4SzT zoW6x$aWyrl}CnoBG9L+{DBbNKpg7@nf{c-pPZQY>c8cS#Id>LZZI!Th*}4tcP2A^ zaWD-#kXG|c1)2M8{L{zewJ9C@+jDoq7x3okp2y{{1!%KJ(&c2_?%I+r&t{>ebk=89 zf#GCQc|!gzw3ya6-zrw2J66blGWH8spOoEr^m$UAi^qy5G3LMU9Zw>=X1(@F`8!g6 zgEHk9{>e)DI%q(Ie-I$T-B!!@3OJ$UYu7-U&hTMt<$DobuvWf_rI-h;BK4bb&f16# zjn^16j-D^lT4{%qpyhm_56H&b!`3#^Z|x}HPpp?`c<23Ryl%ZblAYjT&&WeD-_-*7 zM!w}4IgY)f?|nvoiuM9ia!_(Re>n%)wdmjE$X^KEY5PJqyChmgyJF5|8QUD}2Fa9c z(7)mGM8@j$`xT(wzliO$Eh z@Km?xq913P==~2bweZ>b@?gAGqp!@DUt>_DBVLjpVeBN|wMFj3_EF^{_)l9fNsSi# z3zdJoK(^DO^VC-PB9&f?K{oont#WTc$ja2eD}-Kl<$Ubj0f=5xK-4mh62XpD4c(h{ zluzFw592p%mp}fWSnq}E+q*-KNy~1)G$;2;P^y-Tu=6vK-f$M62BcJa@r7w^pM!;b zE?`MFS>RnK7G|r$1wYSAI^YOk(D#USHnLHYcR%4kwKGED?7%|5FBJ)XWe<5Hi=FrS7&h>A| z$y2TUgD>N{C%oGLrm18Mz|#5>4u$(z5Dq3x--fY+@_QqL?5{HZ!5f(OHM;bse2G1@ zysbmGNVsM-_g(pWA#*doKaV4qnn;PYKMPrnTs=yf5Pz zwVsz$$%%LzuaYl@;)pv4jqwTpqPNnO9mI7arHj7hpd7+tTlPXgM`(rbm}{|C2b&A_ zK!bkhkQ^^L{rwBHUFW}k1f!#s|NF3d_iaR_vrpmDHboBe{dDt9Dd$@zfceRRE9UXjQ{kRu>!=@%a<@%jyIjeB8XchC!x<<`THm3 zfrB&tz>F~7-cN@3kt{RuzKF|r5rWlJOxq>4pPmAny4jq zv}(Ls>-gS7=2F)~G_b2Xns$DB^iv$wShz z@lGjbDBdGLJ)s|5Htkt|5_1dQpODz-PZbQt&Hf}2xL*B+knsucdIoGQ`lK`RJ5qW20_ey4P8GqqV`LeVEGCnZm#=|QE z_0Z(bCne)oPh1@N4?p;=`mNfL;h=+v~&#-YO9%agYel$RN-d>2!8n*ehe91uNboZh^NDbQ@r*K~@tp~>F?nE&O+T4ZH>ln<|`v)n5 z9F?arXs^=?QphMmV$g?Duvy9gpVh+0QQ-q739) z1}h^&bImAY4(09P-wjr-2q}2)KnH&zpFBjlGo;w0LE++XPJd&Fa*tw9{}AoK4NHB% zDCJtR%V0l51>m9&yr(f*rM_jf5+Zi=31-6(G4n_TKQdm45OBpmcD%CN)QBRE`FPxT zWfXT!P#*0})PIbqzh^JkQ)}5TB+-Rpa z6tEe>G4*6+EYa5ln56VN9yM91vN&q>uO=%Q5+pHos`78xLyc3FU#(-!M!ZVuT`^66 zQ7ixXa)qDMt|(qUP3glv<6lox1_gga7n*6I$INKrJ+4s3`mG8of zU&6RVK_1ah`S}P}@oiTt{ROyq>#kNVPs%&|t}(z4s2D>_1TDfX#C(&An-L5beJ`1% z+&-&@w1a7~)RMG!?2If0T}mwG&Zxp<>0}gfVlg*H1^n+>O7x&rM3S|&^f1k(rk_Xw z8ETzrD=0#7o~8HGQJpqEdA71`L=k?Z1>FE8P)tA9V*K1h8U0ENop6Dg^)K)zk@`Mw5>pI4?wK3?q9U%g4W z0xvW0KNl#y*&*KJ7G+e#fda&e&U6-Ri}Q-iLH)j4ly(+wT2ID`Zx~PI`s24Lcd&qu zw-_@zy?{60uH<(>{n&h)6o1yJ1ui) zGEEk&!02&`z=C4$yv+Vg5vIv%tnSDZW8}XQH+xwWqu_eJaiMaZCA-E!rXjoKx^$Pa z5Wg3r-;=8BlyF-k{yyc6%QI-_OI;5Sn+<2~n3!q!QByR+yeR z3Rt7x&s28Wtz9t>ep*?lJDyh7h@pqR#Hg5l7OXjjA0zlZeLjFm%(j&aYXfK+F`#}v9uH<)T zE2EX#wFs;KQ;K>c1^QxZw$kVS%DzDlTCZfEzj*Pto>4Y*ScCIDxaoDOG~OTZpWYlAL^36D@F(Xd6r6n`qMTo~MTtXS4Bn!|vrqK9wkVMj z{D8||QEst}&33)%70hwmkl@#EQ{t4`l8iqkC?(J; z>5F~^6oOvLCl@J?hMzY{8}uVZXjeeiQB)1@Ox5bGI~6#ftV>P&?^l(9KBNzOP3g|! zz9%K&(h9MA@Y)JrKMlelEq67)w^(TxaCEllb!9acoVM2$yx3bpvJ*h+)zG%v2nL$k z7E7@&)~i{)p3F?5nxmBcC7-xknTj>->D`9g3#L~De{;7|H6{OblpLbv(1S#_s2G7} z`l7Vxx*7^UPtim`*BFFXEdsixrkGFHmEQcvJxbRp)urIHYp)v*Bq*mqEq&3#jr9!j`JB&KUV-5WR!Bp`Jfb20Nkc8=kyYaSQ29{IfD;j!@C$ z#du!}xF28fhO&TV^RM1eCJI?wdG9xs<4}ozzX{W@jwipR3=;A_=hwfbxFNBRy`}tN zFN156cANb1a%G&;xN?e3E`B12th^$As9d=i8HBv8Ob(|@#>OQYuM3?HU2l6^nU5K@ z?``EpcH8G?pde{R!2n@e9U;|1htG+tIw!82P>{vBlTfII@(AHK8N7LBp3x7yqh#Y^ zA)oWEGCLxFow+BrYLvT9-}|m|KPl6}mC#PDd_ko$NyuHr?>(Tz^NLDkmQb*b|G8fo zAe3(7W&0IPXecx=T-5r0@Zz+UqT$u;djK%+B}&>Vw(qLoBM&R1qZ(nTd8djQ!W=2) zrSB_y2jqT>D3NB78A4R;pIA1Z5NwXSyqhT3-H8G=QTQP_KAH084S z&s8wCTKU|A${KY4HwTrZ$X4i9?6lzV$F#&3Hv6r-`yu7}@b;GxV;BN01sKhqFcDWD zQf_q=?b=5-5>THa{>LF@ZhScrj0&0|6qXJNKn3~XgGv|Sqg}k|pwc6%28^A`YS_hH zhm>f&_5(#>QCSD9oXik%D&jv?E4rf|@5*^gt>>?QsLXXV`v}c?)JJeTpkc!gD`R8o zal^>lb~A)ba#z&a_?g2nU9^mU_=|^?F^*PAi8eSA-K+;>@Ji|4gh@FwQ`DoQx7Ls!wdMwl+`ZaPqMO>Tl){ztWqN)}`Nf|otAvcR`bVEAJ=pL}(u6@B3Y13h936@V zpQ}SjW%Ax9lu^S!q_m;`U)3#t?u2qR8vgAGW&8;5F_KnF3$xjV23nt6=!*<*6yHYS zZ2B_WkaL>f_^Gl9-SyX}%A^Sm@HA=kMf*#y+YLqpHj;H;qTRTv+lVoufA>YJqn#x= z8njx3j2FMK4O;e@(v7he{e^mEA`^>FSMc?p!=WLbQdZ$ee9bB48X<2N&;DFV;x~Q{ z(SGO@44mR-zV?(d8?w9ZbLGnZmDbrD>f34_yjiO?9aPm*JdFu@uaO5dC_@MNC#m*N z;%x$@+DWO*9cih)s6oLC0_}L~M482lzfc1CEvJ>C{D&_fOUOm6l?j^`^(-dIHhJ^;`rnikvNQMorflo|KlQ??qx_3s zmA(TaO{39!SbI*_rC&hKzW!bL4a?QZHf2I=`jZ&GSS=gYpJ^!&0l!!M%CJ8a7Fvy4 zOWq3$5;SHxpL|wHbLBqiUC3#}fNd)jra^#4qzRGrl>X&eC0$n2|HcHXmigd7HGY)u zq?+_lP=|U!0z(s>A-dVcZ3sKhm==Zbm~8m3p3ifrBVpp?IMml=Y-=wGQws$6=f00nr}l2d;tj=x ze)|T`u6Q+O7F z7j<@zbo{In)Nq&rO-zSgmi!xxUis%?F={!hx^ zg1Rxbcxwf`dS0g#ir7z3L0zl)&~EB1DC?Eo)IKb-oTfsEc8DJ4;!wjYyQ_VNdbO)% z&9!`iDh6BVdqU*yF|5Z1LilMfJ3rE0O-T8KpwG0dA>=bH-#;g=g5Tv*-94hQR=~A~|xUzS;)m@R9XHb8N=CO&Rx@y$ls21Q zSzXBklhl5WI#@(r4^*?RC8^z6WJxDMBe~*Bd#X1@rPB^n)}Ew?sk^e?)0=v#SJRRA znBM9m!RaN$;+3Hm{%&t|cKA_xEv}n)Zk5r+wN{>-tY$(D;ZFJ}tSsLrtAj9ey7p18 z3CZzO26@Fit&jQ|zqzj}+s%z{Js;Co?HSyR>%Z{M80&96zo##zc{^X%S4}~7Z}nBb z^JebW-%n8`A>lbv2fpdDl8|qk(55%_S0flZMF#*8JanMCO~@64®)Zj-dEHt>v@vyi|QnfyNoccI^aE5<8 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