@angular/compiler 17.0.0-next.8 → 17.0.0-rc.1
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.
- package/esm2022/src/ml_parser/ast.mjs +3 -2
- package/esm2022/src/ml_parser/html_tags.mjs +4 -4
- package/esm2022/src/ml_parser/html_whitespaces.mjs +2 -2
- package/esm2022/src/ml_parser/icu_ast_expander.mjs +2 -2
- package/esm2022/src/ml_parser/lexer.mjs +2 -13
- package/esm2022/src/ml_parser/parser.mjs +3 -3
- package/esm2022/src/render3/partial/class_metadata.mjs +1 -1
- package/esm2022/src/render3/partial/directive.mjs +1 -1
- package/esm2022/src/render3/partial/factory.mjs +1 -1
- package/esm2022/src/render3/partial/injectable.mjs +1 -1
- package/esm2022/src/render3/partial/injector.mjs +1 -1
- package/esm2022/src/render3/partial/ng_module.mjs +1 -1
- package/esm2022/src/render3/partial/pipe.mjs +1 -1
- package/esm2022/src/render3/r3_ast.mjs +3 -2
- package/esm2022/src/render3/r3_control_flow.mjs +2 -2
- package/esm2022/src/render3/r3_template_transform.mjs +2 -2
- package/esm2022/src/shadow_css.mjs +10 -5
- package/esm2022/src/template/pipeline/ir/src/enums.mjs +81 -26
- package/esm2022/src/template/pipeline/ir/src/expression.mjs +65 -3
- package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +41 -6
- package/esm2022/src/template/pipeline/ir/src/ops/shared.mjs +3 -2
- package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +25 -3
- package/esm2022/src/template/pipeline/ir/src/variable.mjs +1 -1
- package/esm2022/src/template/pipeline/src/compilation.mjs +6 -1
- package/esm2022/src/template/pipeline/src/emit.mjs +17 -6
- package/esm2022/src/template/pipeline/src/ingest.mjs +92 -11
- package/esm2022/src/template/pipeline/src/instruction.mjs +28 -7
- package/esm2022/src/template/pipeline/src/phases/attribute_extraction.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/binding_specialization.mjs +1 -1
- package/esm2022/src/template/pipeline/src/phases/collapse_singleton_interpolations.mjs +31 -0
- package/esm2022/src/template/pipeline/src/phases/conditionals.mjs +4 -1
- package/esm2022/src/template/pipeline/src/phases/generate_variables.mjs +11 -6
- package/esm2022/src/template/pipeline/src/phases/i18n_const_collection.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/i18n_message_extraction.mjs +14 -4
- package/esm2022/src/template/pipeline/src/phases/i18n_text_extraction.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/icu_extraction.mjs +53 -0
- package/esm2022/src/template/pipeline/src/phases/local_refs.mjs +1 -2
- package/esm2022/src/template/pipeline/src/phases/namespace.mjs +2 -2
- package/esm2022/src/template/pipeline/src/phases/naming.mjs +23 -4
- package/esm2022/src/template/pipeline/src/phases/ng_container.mjs +1 -6
- package/esm2022/src/template/pipeline/src/phases/ordering.mjs +40 -31
- package/esm2022/src/template/pipeline/src/phases/phase_remove_content_selectors.mjs +8 -8
- package/esm2022/src/template/pipeline/src/phases/pipe_creation.mjs +15 -3
- package/esm2022/src/template/pipeline/src/phases/pure_function_extraction.mjs +2 -1
- package/esm2022/src/template/pipeline/src/phases/reify.mjs +33 -2
- package/esm2022/src/template/pipeline/src/phases/repeater_derived_vars.mjs +40 -0
- package/esm2022/src/template/pipeline/src/phases/resolve_contexts.mjs +5 -1
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_placeholders.mjs +134 -36
- package/esm2022/src/template/pipeline/src/phases/resolve_names.mjs +2 -1
- package/esm2022/src/template/pipeline/src/phases/resolve_sanitizers.mjs +5 -6
- package/esm2022/src/template/pipeline/src/phases/save_restore_view.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/slot_allocation.mjs +3 -3
- package/esm2022/src/template/pipeline/src/phases/track_fn_generation.mjs +49 -0
- package/esm2022/src/template/pipeline/src/phases/track_fn_optimization.mjs +75 -0
- package/esm2022/src/template/pipeline/src/phases/track_variables.mjs +31 -0
- package/esm2022/src/template/pipeline/src/phases/var_counting.mjs +36 -3
- package/esm2022/src/template/pipeline/src/phases/variable_optimization.mjs +43 -3
- package/esm2022/src/template/pipeline/src/phases/wrap_icus.mjs +34 -0
- package/esm2022/src/template/pipeline/src/util/elements.mjs +6 -6
- package/esm2022/src/version.mjs +1 -1
- package/fesm2022/compiler.mjs +1106 -370
- package/fesm2022/compiler.mjs.map +1 -1
- package/index.d.ts +5 -3
- package/package.json +2 -2
- package/esm2022/src/template/pipeline/src/phases/align_pipe_variadic_var_offset.mjs +0 -42
- package/esm2022/src/template/pipeline/src/phases/propagate_i18n_placeholders.mjs +0 -39
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v17.0.0-
|
|
2
|
+
* @license Angular v17.0.0-rc.1
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -442,9 +442,10 @@ export declare class Block implements BaseNode {
|
|
|
442
442
|
parameters: BlockParameter[];
|
|
443
443
|
children: Node_2[];
|
|
444
444
|
sourceSpan: ParseSourceSpan;
|
|
445
|
+
nameSpan: ParseSourceSpan;
|
|
445
446
|
startSourceSpan: ParseSourceSpan;
|
|
446
447
|
endSourceSpan: ParseSourceSpan | null;
|
|
447
|
-
constructor(name: string, parameters: BlockParameter[], children: Node_2[], sourceSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan?: ParseSourceSpan | null);
|
|
448
|
+
constructor(name: string, parameters: BlockParameter[], children: Node_2[], sourceSpan: ParseSourceSpan, nameSpan: ParseSourceSpan, startSourceSpan: ParseSourceSpan, endSourceSpan?: ParseSourceSpan | null);
|
|
448
449
|
visit(visitor: Visitor, context: any): any;
|
|
449
450
|
}
|
|
450
451
|
|
|
@@ -5112,7 +5113,8 @@ export declare class TmplAstTimerDeferredTrigger extends TmplAstDeferredTrigger
|
|
|
5112
5113
|
export declare class TmplAstUnknownBlock implements TmplAstNode {
|
|
5113
5114
|
name: string;
|
|
5114
5115
|
sourceSpan: ParseSourceSpan;
|
|
5115
|
-
|
|
5116
|
+
nameSpan: ParseSourceSpan;
|
|
5117
|
+
constructor(name: string, sourceSpan: ParseSourceSpan, nameSpan: ParseSourceSpan);
|
|
5116
5118
|
visit<Result>(visitor: Visitor_3<Result>): Result;
|
|
5117
5119
|
}
|
|
5118
5120
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular/compiler",
|
|
3
|
-
"version": "17.0.0-
|
|
3
|
+
"version": "17.0.0-rc.1",
|
|
4
4
|
"description": "Angular - the compiler library",
|
|
5
5
|
"author": "angular",
|
|
6
6
|
"license": "MIT",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"tslib": "^2.3.0"
|
|
12
12
|
},
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"@angular/core": "17.0.0-
|
|
14
|
+
"@angular/core": "17.0.0-rc.1"
|
|
15
15
|
},
|
|
16
16
|
"peerDependenciesMeta": {
|
|
17
17
|
"@angular/core": {
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import * as ir from '../../ir';
|
|
9
|
-
import { varsUsedByIrExpression } from './var_counting';
|
|
10
|
-
export function phaseAlignPipeVariadicVarOffset(job) {
|
|
11
|
-
for (const unit of job.units) {
|
|
12
|
-
for (const op of unit.update) {
|
|
13
|
-
ir.visitExpressionsInOp(op, expr => {
|
|
14
|
-
if (!(expr instanceof ir.PipeBindingVariadicExpr)) {
|
|
15
|
-
return expr;
|
|
16
|
-
}
|
|
17
|
-
if (!(expr.args instanceof ir.PureFunctionExpr)) {
|
|
18
|
-
return expr;
|
|
19
|
-
}
|
|
20
|
-
if (expr.varOffset === null || expr.args.varOffset === null) {
|
|
21
|
-
throw new Error(`Must run after variable counting`);
|
|
22
|
-
}
|
|
23
|
-
// The structure of this variadic pipe expression is:
|
|
24
|
-
// PipeBindingVariadic(#, Y, PureFunction(X, ...ARGS))
|
|
25
|
-
// Where X and Y are the slot offsets for the variables used by these operations, and Y > X.
|
|
26
|
-
// In `TemplateDefinitionBuilder` the PipeBindingVariadic variable slots are allocated
|
|
27
|
-
// before the PureFunction slots, which is unusually out-of-order.
|
|
28
|
-
//
|
|
29
|
-
// To maintain identical output for the tests in question, we adjust the variable offsets of
|
|
30
|
-
// these two calls to emulate TDB's behavior. This is not perfect, because the ARGS of the
|
|
31
|
-
// PureFunction call may also allocate slots which by TDB's ordering would come after X, and
|
|
32
|
-
// we don't account for that. Still, this should be enough to pass the existing pipe tests.
|
|
33
|
-
// Put the PipeBindingVariadic vars where the PureFunction vars were previously allocated.
|
|
34
|
-
expr.varOffset = expr.args.varOffset;
|
|
35
|
-
// Put the PureFunction vars following the PipeBindingVariadic vars.
|
|
36
|
-
expr.args.varOffset = expr.varOffset + varsUsedByIrExpression(expr);
|
|
37
|
-
return undefined;
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZ25fcGlwZV92YXJpYWRpY192YXJfb2Zmc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3RlbXBsYXRlL3BpcGVsaW5lL3NyYy9waGFzZXMvYWxpZ25fcGlwZV92YXJpYWRpY192YXJfb2Zmc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRy9CLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE1BQU0sVUFBVSwrQkFBK0IsQ0FBQyxHQUFtQjtJQUNqRSxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7UUFDNUIsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzVCLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBRTtvQkFDakQsT0FBTyxJQUFJLENBQUM7aUJBQ2I7Z0JBRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtvQkFDL0MsT0FBTyxJQUFJLENBQUM7aUJBQ2I7Z0JBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7b0JBQzNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztpQkFDckQ7Z0JBRUQscURBQXFEO2dCQUNyRCxzREFBc0Q7Z0JBQ3RELDRGQUE0RjtnQkFFNUYsc0ZBQXNGO2dCQUN0RixrRUFBa0U7Z0JBQ2xFLEVBQUU7Z0JBQ0YsNEZBQTRGO2dCQUM1RiwwRkFBMEY7Z0JBQzFGLDRGQUE0RjtnQkFDNUYsMkZBQTJGO2dCQUUzRiwwRkFBMEY7Z0JBQzFGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBRXJDLG9FQUFvRTtnQkFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEUsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7U0FDSjtLQUNGO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBpciBmcm9tICcuLi8uLi9pcic7XG5cbmltcG9ydCB0eXBlIHtDb21waWxhdGlvbkpvYn0gZnJvbSAnLi4vY29tcGlsYXRpb24nO1xuaW1wb3J0IHt2YXJzVXNlZEJ5SXJFeHByZXNzaW9ufSBmcm9tICcuL3Zhcl9jb3VudGluZyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwaGFzZUFsaWduUGlwZVZhcmlhZGljVmFyT2Zmc2V0KGpvYjogQ29tcGlsYXRpb25Kb2IpOiB2b2lkIHtcbiAgZm9yIChjb25zdCB1bml0IG9mIGpvYi51bml0cykge1xuICAgIGZvciAoY29uc3Qgb3Agb2YgdW5pdC51cGRhdGUpIHtcbiAgICAgIGlyLnZpc2l0RXhwcmVzc2lvbnNJbk9wKG9wLCBleHByID0+IHtcbiAgICAgICAgaWYgKCEoZXhwciBpbnN0YW5jZW9mIGlyLlBpcGVCaW5kaW5nVmFyaWFkaWNFeHByKSkge1xuICAgICAgICAgIHJldHVybiBleHByO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoZXhwci5hcmdzIGluc3RhbmNlb2YgaXIuUHVyZUZ1bmN0aW9uRXhwcikpIHtcbiAgICAgICAgICByZXR1cm4gZXhwcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleHByLnZhck9mZnNldCA9PT0gbnVsbCB8fCBleHByLmFyZ3MudmFyT2Zmc2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNdXN0IHJ1biBhZnRlciB2YXJpYWJsZSBjb3VudGluZ2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIHZhcmlhZGljIHBpcGUgZXhwcmVzc2lvbiBpczpcbiAgICAgICAgLy8gUGlwZUJpbmRpbmdWYXJpYWRpYygjLCBZLCBQdXJlRnVuY3Rpb24oWCwgLi4uQVJHUykpXG4gICAgICAgIC8vIFdoZXJlIFggYW5kIFkgYXJlIHRoZSBzbG90IG9mZnNldHMgZm9yIHRoZSB2YXJpYWJsZXMgdXNlZCBieSB0aGVzZSBvcGVyYXRpb25zLCBhbmQgWSA+IFguXG5cbiAgICAgICAgLy8gSW4gYFRlbXBsYXRlRGVmaW5pdGlvbkJ1aWxkZXJgIHRoZSBQaXBlQmluZGluZ1ZhcmlhZGljIHZhcmlhYmxlIHNsb3RzIGFyZSBhbGxvY2F0ZWRcbiAgICAgICAgLy8gYmVmb3JlIHRoZSBQdXJlRnVuY3Rpb24gc2xvdHMsIHdoaWNoIGlzIHVudXN1YWxseSBvdXQtb2Ytb3JkZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRvIG1haW50YWluIGlkZW50aWNhbCBvdXRwdXQgZm9yIHRoZSB0ZXN0cyBpbiBxdWVzdGlvbiwgd2UgYWRqdXN0IHRoZSB2YXJpYWJsZSBvZmZzZXRzIG9mXG4gICAgICAgIC8vIHRoZXNlIHR3byBjYWxscyB0byBlbXVsYXRlIFREQidzIGJlaGF2aW9yLiBUaGlzIGlzIG5vdCBwZXJmZWN0LCBiZWNhdXNlIHRoZSBBUkdTIG9mIHRoZVxuICAgICAgICAvLyBQdXJlRnVuY3Rpb24gY2FsbCBtYXkgYWxzbyBhbGxvY2F0ZSBzbG90cyB3aGljaCBieSBUREIncyBvcmRlcmluZyB3b3VsZCBjb21lIGFmdGVyIFgsIGFuZFxuICAgICAgICAvLyB3ZSBkb24ndCBhY2NvdW50IGZvciB0aGF0LiBTdGlsbCwgdGhpcyBzaG91bGQgYmUgZW5vdWdoIHRvIHBhc3MgdGhlIGV4aXN0aW5nIHBpcGUgdGVzdHMuXG5cbiAgICAgICAgLy8gUHV0IHRoZSBQaXBlQmluZGluZ1ZhcmlhZGljIHZhcnMgd2hlcmUgdGhlIFB1cmVGdW5jdGlvbiB2YXJzIHdlcmUgcHJldmlvdXNseSBhbGxvY2F0ZWQuXG4gICAgICAgIGV4cHIudmFyT2Zmc2V0ID0gZXhwci5hcmdzLnZhck9mZnNldDtcblxuICAgICAgICAvLyBQdXQgdGhlIFB1cmVGdW5jdGlvbiB2YXJzIGZvbGxvd2luZyB0aGUgUGlwZUJpbmRpbmdWYXJpYWRpYyB2YXJzLlxuICAgICAgICBleHByLmFyZ3MudmFyT2Zmc2V0ID0gZXhwci52YXJPZmZzZXQgKyB2YXJzVXNlZEJ5SXJFeHByZXNzaW9uKGV4cHIpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import * as ir from '../../ir';
|
|
9
|
-
export function phasePropagateI18nPlaceholders(job) {
|
|
10
|
-
// Get all of the i18n ops.
|
|
11
|
-
const i18nOps = new Map();
|
|
12
|
-
for (const unit of job.units) {
|
|
13
|
-
for (const op of unit.create) {
|
|
14
|
-
if (op.kind === ir.OpKind.I18nStart) {
|
|
15
|
-
i18nOps.set(op.xref, op);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
// Propagate i18n params from sub-templates up to the root i18n op.
|
|
20
|
-
for (const op of i18nOps.values()) {
|
|
21
|
-
if (op.xref !== op.root) {
|
|
22
|
-
const rootOp = i18nOps.get(op.root);
|
|
23
|
-
for (const [placeholder, value] of op.params) {
|
|
24
|
-
rootOp.params.set(placeholder, value);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
// Validate the root i18n ops have all placeholders filled in.
|
|
29
|
-
for (const op of i18nOps.values()) {
|
|
30
|
-
if (op.xref === op.root) {
|
|
31
|
-
for (const placeholder in op.message.placeholders) {
|
|
32
|
-
if (!op.params.has(placeholder)) {
|
|
33
|
-
throw Error(`Failed to resolve i18n placeholder: ${placeholder}`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGFnYXRlX2kxOG5fcGxhY2Vob2xkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3RlbXBsYXRlL3BpcGVsaW5lL3NyYy9waGFzZXMvcHJvcGFnYXRlX2kxOG5fcGxhY2Vob2xkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRy9CLE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxHQUFtQjtJQUNoRSwyQkFBMkI7SUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTZCLENBQUM7SUFDckQsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFO1FBQzVCLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM1QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7Z0JBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzthQUMxQjtTQUNGO0tBQ0Y7SUFFRCxtRUFBbUU7SUFDbkUsS0FBSyxNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDakMsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUU7WUFDdkIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFFLENBQUM7WUFDckMsS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7Z0JBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN2QztTQUNGO0tBQ0Y7SUFFRCw4REFBOEQ7SUFDOUQsS0FBSyxNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDakMsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUU7WUFDdkIsS0FBSyxNQUFNLFdBQVcsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtnQkFDakQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUMvQixNQUFNLEtBQUssQ0FBQyx1Q0FBdUMsV0FBVyxFQUFFLENBQUMsQ0FBQztpQkFDbkU7YUFDRjtTQUNGO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIGlyIGZyb20gJy4uLy4uL2lyJztcbmltcG9ydCB7Q29tcGlsYXRpb25Kb2J9IGZyb20gJy4uL2NvbXBpbGF0aW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIHBoYXNlUHJvcGFnYXRlSTE4blBsYWNlaG9sZGVycyhqb2I6IENvbXBpbGF0aW9uSm9iKSB7XG4gIC8vIEdldCBhbGwgb2YgdGhlIGkxOG4gb3BzLlxuICBjb25zdCBpMThuT3BzID0gbmV3IE1hcDxpci5YcmVmSWQsIGlyLkkxOG5TdGFydE9wPigpO1xuICBmb3IgKGNvbnN0IHVuaXQgb2Ygam9iLnVuaXRzKSB7XG4gICAgZm9yIChjb25zdCBvcCBvZiB1bml0LmNyZWF0ZSkge1xuICAgICAgaWYgKG9wLmtpbmQgPT09IGlyLk9wS2luZC5JMThuU3RhcnQpIHtcbiAgICAgICAgaTE4bk9wcy5zZXQob3AueHJlZiwgb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFByb3BhZ2F0ZSBpMThuIHBhcmFtcyBmcm9tIHN1Yi10ZW1wbGF0ZXMgdXAgdG8gdGhlIHJvb3QgaTE4biBvcC5cbiAgZm9yIChjb25zdCBvcCBvZiBpMThuT3BzLnZhbHVlcygpKSB7XG4gICAgaWYgKG9wLnhyZWYgIT09IG9wLnJvb3QpIHtcbiAgICAgIGNvbnN0IHJvb3RPcCA9IGkxOG5PcHMuZ2V0KG9wLnJvb3QpITtcbiAgICAgIGZvciAoY29uc3QgW3BsYWNlaG9sZGVyLCB2YWx1ZV0gb2Ygb3AucGFyYW1zKSB7XG4gICAgICAgIHJvb3RPcC5wYXJhbXMuc2V0KHBsYWNlaG9sZGVyLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgdGhlIHJvb3QgaTE4biBvcHMgaGF2ZSBhbGwgcGxhY2Vob2xkZXJzIGZpbGxlZCBpbi5cbiAgZm9yIChjb25zdCBvcCBvZiBpMThuT3BzLnZhbHVlcygpKSB7XG4gICAgaWYgKG9wLnhyZWYgPT09IG9wLnJvb3QpIHtcbiAgICAgIGZvciAoY29uc3QgcGxhY2Vob2xkZXIgaW4gb3AubWVzc2FnZS5wbGFjZWhvbGRlcnMpIHtcbiAgICAgICAgaWYgKCFvcC5wYXJhbXMuaGFzKHBsYWNlaG9sZGVyKSkge1xuICAgICAgICAgIHRocm93IEVycm9yKGBGYWlsZWQgdG8gcmVzb2x2ZSBpMThuIHBsYWNlaG9sZGVyOiAke3BsYWNlaG9sZGVyfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|