@magic-xpa/gui 4.800.0-dev480.21 → 4.800.0-dev480.210
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/bundles/magic-xpa-gui.umd.js +1050 -7528
- package/bundles/magic-xpa-gui.umd.js.map +1 -1
- package/bundles/magic-xpa-gui.umd.min.js +1 -1
- package/bundles/magic-xpa-gui.umd.min.js.map +1 -1
- package/esm2015/index.js +1 -1
- package/esm2015/magic-xpa-gui.js +1 -4
- package/esm2015/src/Commands.js +11 -114
- package/esm2015/src/Events.js +1 -517
- package/esm2015/src/EventsProcessor.js +1 -51
- package/esm2015/src/FocusManager.js +1 -13
- package/esm2015/src/GuiConstants.js +2 -11
- package/esm2015/src/GuiEnums.js +126 -130
- package/esm2015/src/GuiEnvironment.js +1 -1
- package/esm2015/src/IFlowMonitorQueue.js +1 -1
- package/esm2015/src/Manager.js +10 -148
- package/esm2015/src/UIBridge.js +1 -6
- package/esm2015/src/env/IEnvironment.js +1 -1
- package/esm2015/src/gui/ControlBase.js +1 -1
- package/esm2015/src/gui/GuiMgControl.js +1 -94
- package/esm2015/src/gui/GuiMgForm.js +1 -1
- package/esm2015/src/gui/KeyboardItem.js +5 -46
- package/esm2015/src/gui/LastFocusedVal.js +1 -5
- package/esm2015/src/gui/MgValue.js +1 -1
- package/esm2015/src/gui/PropParentInterface.js +1 -1
- package/esm2015/src/gui/low/DialogHandler.js +1 -10
- package/esm2015/src/gui/low/GuiCommand.js +1 -12
- package/esm2015/src/gui/low/GuiCommandQueue.js +1 -66
- package/esm2015/src/gui/low/GuiInteractive.js +8 -465
- package/esm2015/src/gui/low/Style.js +1 -9
- package/esm2015/src/management/RuntimeContextBase.js +11 -14
- package/esm2015/src/management/data/BlobType.js +0 -0
- package/esm2015/src/management/data/DcValues.js +8 -67
- package/esm2015/src/management/data/DcValuesBuilderBase.js +2 -37
- package/esm2015/src/management/data/FieldDef.js +1 -95
- package/esm2015/src/management/data/FieldsTable.js +2 -28
- package/esm2015/src/management/data/GuiDataViewBase.js +33 -72
- package/esm2015/src/management/data/GuiFieldBase.js +4 -39
- package/esm2015/src/management/data/IRecord.js +1 -1
- package/esm2015/src/management/data/IReferencedObject.js +1 -8
- package/esm2015/src/management/data/NUM_TYPE.js +14 -485
- package/esm2015/src/management/data/ObjectReferenceBase.js +1 -3
- package/esm2015/src/management/data/ObjectReferencesCollection.js +1 -2
- package/esm2015/src/management/data/RecordUtils.js +6 -112
- package/esm2015/src/management/data/VectorType.js +17 -252
- package/esm2015/src/management/data/VectorTypeBase.js +1 -35
- package/esm2015/src/management/events/IActionManager.js +1 -1
- package/esm2015/src/management/events/IGuiEventsManager.js +1 -1
- package/esm2015/src/management/exp/ExpressionInterface.js +5 -3
- package/esm2015/src/management/exp/GuiExpressionEvaluator.js +38 -155
- package/esm2015/src/management/gui/ControlTable.js +18 -72
- package/esm2015/src/management/gui/DisplayConvertor.js +43 -493
- package/esm2015/src/management/gui/FieldValidator.js +58 -339
- package/esm2015/src/management/gui/GuiControlPropertyAdapter.js +1 -1
- package/esm2015/src/management/gui/GuiFormPropertyAdapter.js +1 -8
- package/esm2015/src/management/gui/HebrewDate.js +3 -140
- package/esm2015/src/management/gui/Helps.js +2 -48
- package/esm2015/src/management/gui/MgControlBase.js +143 -876
- package/esm2015/src/management/gui/MgFormBase.js +68 -407
- package/esm2015/src/management/gui/PIC.js +58 -285
- package/esm2015/src/management/gui/PropDefaults.js +13 -48
- package/esm2015/src/management/gui/PropInterface.js +2 -4
- package/esm2015/src/management/gui/PropTable.js +72 -183
- package/esm2015/src/management/gui/Property.js +35 -372
- package/esm2015/src/management/gui/ValidationDetails.js +10 -52
- package/esm2015/src/management/gui/ValidationDetailsBase.js +12 -45
- package/esm2015/src/management/gui/WrongFormatException.js +1 -15
- package/esm2015/src/management/tasks/GuiDataCollection.js +1 -1
- package/esm2015/src/management/tasks/GuiTaskBase.js +38 -383
- package/esm2015/src/management/tasks/IMGDataTable.js +1 -1
- package/esm2015/src/management/tasks/ITask.js +1 -1
- package/esm2015/src/management/tasks/MgTimer.js +1 -16
- package/esm2015/src/management/tasks/TaskDefinitionId.js +8 -18
- package/esm2015/src/management/tasks/TaskDefinitionIdTableSaxHandler.js +1 -13
- package/esm2015/src/util/AuthenticationDialogHandler.js +1 -4
- package/esm2015/src/util/MemoryUtil.js +1 -41
- package/esm2015/src/util/ObjectReference.js +1 -8
- package/esm2015/src/util/ProcessLauncher.js +3 -21
- package/esm2015/src/util/UsernamePasswordCredentials.js +1 -9
- package/fesm2015/magic-xpa-gui.js +857 -7052
- package/fesm2015/magic-xpa-gui.js.map +1 -1
- package/magic-xpa-gui.d.ts +0 -3
- package/package.json +2 -2
- package/src/Commands.d.ts +2 -0
- package/src/Events.d.ts +0 -2
- package/src/GuiEnums.d.ts +125 -128
- package/src/env/IEnvironment.d.ts +3 -0
- package/src/gui/PropParentInterface.d.ts +1 -1
- package/src/gui/low/GuiInteractive.d.ts +3 -1
- package/src/gui/low/Style.d.ts +0 -3
- package/src/management/RuntimeContextBase.d.ts +2 -0
- package/src/management/data/GuiDataViewBase.d.ts +4 -4
- package/src/management/data/IRecord.d.ts +1 -1
- package/src/management/exp/ExpressionInterface.d.ts +4 -0
- package/src/management/exp/GuiExpressionEvaluator.d.ts +4 -6
- package/src/management/gui/ControlTable.d.ts +1 -1
- package/src/management/gui/DisplayConvertor.d.ts +1 -1
- package/src/management/gui/GuiControlPropertyAdapter.d.ts +1 -1
- package/src/management/gui/MgControlBase.d.ts +7 -7
- package/src/management/gui/MgFormBase.d.ts +6 -6
- package/src/management/gui/PIC.d.ts +1 -0
- package/src/management/gui/PropInterface.d.ts +2 -4
- package/src/management/gui/PropTable.d.ts +4 -5
- package/src/management/gui/Property.d.ts +1 -1
- package/src/management/tasks/GuiTaskBase.d.ts +8 -14
- package/src/management/tasks/TaskDefinitionId.d.ts +1 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { GuiMgControl } from "../../gui/GuiMgControl";
|
|
2
2
|
export class GuiControlPropertyAdapter extends GuiMgControl {
|
|
3
3
|
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFHcEQsTUFBTSxPQUFnQix5QkFBMEIsU0FBUSxZQUFZO0NBbUVuRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3RvcmFnZUF0dHJpYnV0ZX0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtQSUN9IGZyb20gXCIuL1BJQ1wiO1xyXG5pbXBvcnQge0d1aUZpZWxkQmFzZX0gZnJvbSBcIi4uL2RhdGEvR3VpRmllbGRCYXNlXCI7XHJcbmltcG9ydCB7Q29tbWFuZFR5cGV9IGZyb20gXCIuLi8uLi9HdWlFbnVtc1wiO1xyXG5pbXBvcnQge0d1aU1nQ29udHJvbH0gZnJvbSBcIi4uLy4uL2d1aS9HdWlNZ0NvbnRyb2xcIjtcclxuaW1wb3J0IHtHdWlGb3JtUHJvcGVydHlBZGFwdGVyfSBmcm9tIFwiLi9HdWlGb3JtUHJvcGVydHlBZGFwdGVyXCI7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciBleHRlbmRzIEd1aU1nQ29udHJvbCB7XHJcbiAgRGF0YVR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGU7XHJcbiAgSW5Db250cm9sOiBib29sZWFuO1xyXG5cclxuXHJcbiAgYWJzdHJhY3Qgc2V0UGljU3RyKGZvcm1hdDogc3RyaW5nLCBleHBJZDogbnVtYmVyKTogdm9pZDtcclxuXHJcbiAgYWJzdHJhY3Qgc2V0UmFuZ2UobmV3UmFuZ2U6IHN0cmluZyk6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IHNldFZhbEV4cChleHBJZDogbnVtYmVyKTogdm9pZDtcclxuXHJcbiAgYWJzdHJhY3Qgc2V0RmllbGQoZmllbGRPckZpZWxkU3RySUQ6IGFueSk6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IGhhc0NvbnRhaW5lcigpOiBib29sZWFuO1xyXG5cclxuICBhYnN0cmFjdCBnZXRGb3JtKCk6IEd1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXI7XHJcblxyXG4gIGFic3RyYWN0IGdldExheWVyKCk6IG51bWJlcjtcclxuXHJcbiAgYWJzdHJhY3QgY29tcHV0ZVBJQyhwaWNFeHBSZXN1bHQ6IHN0cmluZyk6IFBJQztcclxuXHJcbiAgYWJzdHJhY3Qgc2V0SW1hZ2VMaXN0KHVybDogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgYWJzdHJhY3Qgc2V0SW1hZ2VXaXRoRmlsZU5hbWUoZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IGlzRGVzY2VuZGVudE9mQ29udHJvbChjb250cm9sOiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyKTogYm9vbGVhbjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0TGlua2VkUGFyZW50KGNoZWNrU3ViZm9ybUZhdGhlcjogYm9vbGVhbik6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI7XHJcblxyXG4gIGFic3RyYWN0IFNldEVuYWJsZWQodmFsOiBib29sZWFuKTogdm9pZDtcclxuXHJcbiAgYWJzdHJhY3QgYXN5bmMgdXBkYXRlUHJvcGVydHlMb2dpY05lc3RpbmcocHJvcElkOiBudW1iZXIsIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgdmFsOiBib29sZWFuLCB1cGRhdGVUaGlzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgYWJzdHJhY3QgSXNEYXRlVGltZVBpY3R1cmUoKTogYm9vbGVhbjtcclxuXHJcbiAgYWJzdHJhY3QgR2V0Q3VyclJlYWRPbmx5KCk6IGJvb2xlYW47XHJcblxyXG4gIGFic3RyYWN0IFNldEN1cnJSZWFkT25seShuZXdWYWw6IGJvb2xlYW4pOiB2b2lkO1xyXG5cclxuXHJcbiAgYWJzdHJhY3QgZ2V0RGlzcGxheUxpbmUodXNlTGluZUZvckl0ZW1zOiBib29sZWFuKTogbnVtYmVyO1xyXG5cclxuICBhYnN0cmFjdCBhc3luYyByZWZyZXNoQW5kU2V0SXRlbXNMaXN0KGxpbmU6IG51bWJlciwgZXhlY0NvbXB1dGVDaG9pY2U6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICBhYnN0cmFjdCBhc3luYyByZWZyZXNoVGFiRm9yTGF5ZXJMaXN0KGxpbmU6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIGFic3RyYWN0IGdldFBJQygpOiBQSUM7XHJcblxyXG4gIGFic3RyYWN0IHJlc2V0UHJldlZhbCgpOiB2b2lkO1xyXG5cclxuICBhYnN0cmFjdCBnZXRGaWVsZCgpOiBHdWlGaWVsZEJhc2U7XHJcblxyXG4gIGFic3RyYWN0IGV4cHJlc3Npb25TZXRBc0RhdGEoKTogYm9vbGVhbjtcclxuXHJcbiAgYWJzdHJhY3QgY2xlYXJSYW5nZShsaW5lOiBudW1iZXIpOiB2b2lkO1xyXG5cclxuICBhYnN0cmFjdCBhc3luYyBDb21wdXRlQW5kUmVmcmVzaERpc3BsYXlWYWx1ZShmb3JjZVJlZnJlc2g6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICBhYnN0cmFjdCBhc3luYyByZWZyZXNoRGlzcFJhbmdlKGV4ZWNDb21wdXRlQ2hvaWNlOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmdbXT47XHJcblxyXG4gIGFic3RyYWN0IGlzUHJvcGVydHlSZXBlYXRhYmxlKHByb3BJZDogbnVtYmVyKTogYm9vbGVhbjtcclxuXHJcbiAgYWJzdHJhY3QgaXNWaXNpYmxlKCk6IGJvb2xlYW47XHJcblxyXG4gIGFic3RyYWN0IGdldFByb3AocHJvcElkOiBudW1iZXIpOiBhbnkgO1xyXG5cclxuICBhYnN0cmFjdCBhc3luYyBpc1BhcmthYmxlKGNoZWNrRW5hYmxlZEFuZFZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+O1xyXG59XHJcbiJdfQ==
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
import { GuiMgForm } from "../../gui/GuiMgForm";
|
|
2
2
|
import { XMLConstants } from "@magic-xpa/utils";
|
|
3
3
|
export class GuiFormPropertyAdapter extends GuiMgForm {
|
|
4
|
-
/// <summary>
|
|
5
|
-
///
|
|
6
|
-
/// </summary>
|
|
7
|
-
/// <param name="propId"></param>
|
|
8
4
|
static IsFormTag(tagName) {
|
|
9
5
|
return tagName === XMLConstants.MG_TAG_FORM || tagName === XMLConstants.MG_TAG_FORM_PROPERTIES;
|
|
10
6
|
}
|
|
11
|
-
/// <summary>
|
|
12
|
-
/// return a property of the form by its Id
|
|
13
|
-
/// </summary>
|
|
14
7
|
static IsEndFormTag(tagName) {
|
|
15
8
|
return tagName === ("/" + XMLConstants.MG_TAG_FORM) || tagName === ("/" + XMLConstants.MG_TAG_FORM_PROPERTIES);
|
|
16
9
|
}
|
|
17
10
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpRm9ybVByb3BlcnR5QWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvR3VpRm9ybVByb3BlcnR5QWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHaEQsT0FBTyxFQUFpQixZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRCxNQUFNLE9BQWdCLHNCQUF1QixTQUFRLFNBQVM7SUFNNUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFlO1FBQzlCLE9BQU8sT0FBTyxLQUFLLFlBQVksQ0FBQyxXQUFXLElBQUksT0FBTyxLQUFLLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQztJQUNqRyxDQUFDO0lBS0QsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFlO1FBQ2pDLE9BQU8sT0FBTyxLQUFLLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDakgsQ0FBQztDQXNCRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEd1aU1nRm9ybSB9IGZyb20gXCIuLi8uLi9ndWkvR3VpTWdGb3JtXCI7XHJcbmltcG9ydCB7IEd1aVRhc2tCYXNlIH0gZnJvbSBcIi4uL3Rhc2tzL0d1aVRhc2tCYXNlXCI7XHJcbmltcG9ydCB7IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgfSBmcm9tIFwiLi9HdWlDb250cm9sUHJvcGVydHlBZGFwdGVyXCI7XHJcbmltcG9ydCB7IE1nQ29udHJvbFR5cGUsIFhNTENvbnN0YW50cyB9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR3VpRm9ybVByb3BlcnR5QWRhcHRlciBleHRlbmRzIEd1aU1nRm9ybSB7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInByb3BJZFwiPjwvcGFyYW0+XHJcbiAgc3RhdGljIElzRm9ybVRhZyh0YWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0YWdOYW1lID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk0gfHwgdGFnTmFtZSA9PT0gWE1MQ29uc3RhbnRzLk1HX1RBR19GT1JNX1BST1BFUlRJRVM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiBhIHByb3BlcnR5IG9mIHRoZSBmb3JtIGJ5IGl0cyBJZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIElzRW5kRm9ybVRhZyh0YWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0YWdOYW1lID09PSAoXCIvXCIgKyBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk0pIHx8IHRhZ05hbWUgPT09IChcIi9cIiArIFhNTENvbnN0YW50cy5NR19UQUdfRk9STV9QUk9QRVJUSUVTKTtcclxuICB9XHJcblxyXG5cclxuICBhYnN0cmFjdCBnZXRUYXNrKCk6IEd1aVRhc2tCYXNlO1xyXG5cclxuICBhYnN0cmFjdCBpc1JlZnJlc2hSZXBlYXRhYmxlQWxsb3dlZCgpOiBib29sZWFuO1xyXG5cclxuICBhYnN0cmFjdCBpc1N1YkZvcm0oKTogYm9vbGVhbjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0U3ViRm9ybUN0cmwoKTogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0Q3RybEJ5TmFtZShjdHJsTmFtZTogc3RyaW5nLCBjdHJsVHlwZTogTWdDb250cm9sVHlwZSk6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI7XHJcblxyXG4gIGFic3RyYWN0IGdldFRhYmxlSXRlbXNDb3VudCgpOiBudW1iZXI7XHJcblxyXG5cclxuICBhYnN0cmFjdCBmaWxsTmFtZShmb3JtVGFnOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICBhYnN0cmFjdCBjaGVja0FuZENyZWF0ZVJvdyhpZHg6IG51bWJlcik6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IHNldCBEaXNwbGF5TGluZSh2YWx1ZTogbnVtYmVyKTtcclxuXHJcbn1cclxuIl19
|
|
@@ -3,22 +3,10 @@ import { MsgInterface } from '@magic-xpa/utils';
|
|
|
3
3
|
import { StringBuilder } from '@magic-xpa/mscorelib';
|
|
4
4
|
import { MemoryUtil } from '../../util/MemoryUtil';
|
|
5
5
|
export class HebrewDate {
|
|
6
|
-
/// <summary>
|
|
7
|
-
/// calculate if year is leap
|
|
8
|
-
/// </summary>
|
|
9
|
-
/// <param name="year"></param>
|
|
10
|
-
/// <returns></returns>
|
|
11
6
|
static dateheb_year_is_leap(year) {
|
|
12
7
|
year = year % HebrewDate.YEARS_PER_CYCLE;
|
|
13
8
|
return (HebrewDate.DATEHEB_months_n[(year + 1)] - HebrewDate.DATEHEB_months_n[year] === 13);
|
|
14
9
|
}
|
|
15
|
-
/// <summary>
|
|
16
|
-
/// calculate days in month
|
|
17
|
-
/// </summary>
|
|
18
|
-
/// <param name="month"></param>
|
|
19
|
-
/// <param name="leap"></param>
|
|
20
|
-
/// <param name="days_in_year"></param>
|
|
21
|
-
/// <returns></returns>
|
|
22
10
|
static dateheb_days_in_month(month, leap, days_in_year) {
|
|
23
11
|
let days_in_month = leap ? HebrewDate.DATEHEB_leap_days_in_month[month - 1] : HebrewDate.DATEHEB_norm_days_in_month[month - 1];
|
|
24
12
|
if (leap)
|
|
@@ -35,50 +23,24 @@ export class HebrewDate {
|
|
|
35
23
|
}
|
|
36
24
|
return days_in_month;
|
|
37
25
|
}
|
|
38
|
-
/// <summary>
|
|
39
|
-
/// calculate days from creation till start of the year
|
|
40
|
-
/// </summary>
|
|
41
|
-
/// <param name="year"></param>
|
|
42
|
-
/// <returns></returns>
|
|
43
26
|
static dateheb_year_start(year) {
|
|
44
|
-
/*---------------------------*/
|
|
45
|
-
/* calculate "molad" of year */
|
|
46
|
-
/*---------------------------*/
|
|
47
27
|
year = year - 1;
|
|
48
28
|
let cycle = Math.floor(year / HebrewDate.YEARS_PER_CYCLE);
|
|
49
29
|
year = year % HebrewDate.YEARS_PER_CYCLE;
|
|
50
|
-
/*---------------------------------------*/
|
|
51
|
-
/* How many months passed since creation */
|
|
52
|
-
/*---------------------------------------*/
|
|
53
30
|
let months = cycle * HebrewDate.MONTHS_PER_CYCLE + HebrewDate.DATEHEB_months_n[year];
|
|
54
|
-
/*-------------------------------------*/
|
|
55
|
-
/* How many days passed since creation */
|
|
56
|
-
/*-------------------------------------*/
|
|
57
31
|
let days = months * HebrewDate.MONTH_DAYS;
|
|
58
|
-
/*--------------------------------------------*/
|
|
59
|
-
/* How many extra parts passed since creation */
|
|
60
|
-
/*--------------------------------------------*/
|
|
61
32
|
let parts = months * HebrewDate.MONTH_EXTRA_PARTS + HebrewDate.CREATION_PARTS;
|
|
62
33
|
days = days + Math.floor(parts / HebrewDate.PARTS_PER_DAY);
|
|
63
34
|
parts = parts % HebrewDate.PARTS_PER_DAY;
|
|
64
|
-
/*---------------------------*/
|
|
65
|
-
/* Reminder > 3/4 of a day ? */
|
|
66
|
-
/*---------------------------*/
|
|
67
35
|
if (parts >= Math.floor(HebrewDate.PARTS_PER_DAY * 3 / 4)) {
|
|
68
36
|
parts = 0;
|
|
69
37
|
days = days + 1;
|
|
70
38
|
}
|
|
71
|
-
/*--------------------------------------------------*/
|
|
72
|
-
/* verify day-of-week not Sunday, Wednesday, Friday */
|
|
73
|
-
/*--------------------------------------------------*/
|
|
74
39
|
let dow = (days - 1 + HebrewDate.CREATION_DOW) % 7 + 1;
|
|
75
40
|
if ((dow === 1) || (dow === 4) || (dow === 6)) {
|
|
76
41
|
parts = 0;
|
|
77
42
|
days = days + 1;
|
|
78
43
|
}
|
|
79
|
-
/*-------------------------------*/
|
|
80
|
-
/* verify if year too long/long */
|
|
81
|
-
/*-------------------------------*/
|
|
82
44
|
if (!HebrewDate.dateheb_year_is_leap(year)) {
|
|
83
45
|
if (dow === 3 && parts >= (9 * HebrewDate.PARTS_PER_HOUR + 204))
|
|
84
46
|
days = days + 2;
|
|
@@ -89,30 +51,12 @@ export class HebrewDate {
|
|
|
89
51
|
}
|
|
90
52
|
return days;
|
|
91
53
|
}
|
|
92
|
-
/// <summary>
|
|
93
|
-
/// Convert a Magic internal Date to a Hebrew date (year, month, day)
|
|
94
|
-
/// Note that ADAR_B is represented by month = 13
|
|
95
|
-
/// </summary>
|
|
96
|
-
/// <param name="date"></param>
|
|
97
|
-
/// <param name="hday"></param>
|
|
98
|
-
/// <param name="hmonth"></param>
|
|
99
|
-
/// <param name="hyear"></param>
|
|
100
|
-
/// <returns>TRUE if leap year</returns>
|
|
101
54
|
static dateheb_4_d(date, day, month, year) {
|
|
102
|
-
/*--------------------*/
|
|
103
|
-
/* Days from creation */
|
|
104
|
-
/*--------------------*/
|
|
105
55
|
date = date + HebrewDate.DAYS_TIL_JESUS;
|
|
106
|
-
/*--------------------------------*/
|
|
107
|
-
/* Guess a year (<= correct year) */
|
|
108
|
-
/*--------------------------------*/
|
|
109
56
|
let cycle = Math.floor(date / (HebrewDate.DAYS_PER_CYCLE + 1));
|
|
110
57
|
let days = date % (HebrewDate.DAYS_PER_CYCLE + 1);
|
|
111
58
|
year.value = cycle * HebrewDate.YEARS_PER_CYCLE;
|
|
112
59
|
year.value = year.value + Math.floor(days / (HebrewDate.DAYS_PER_LEAP_YEAR + 1));
|
|
113
|
-
/*----------------------------*/
|
|
114
|
-
/* Advance year until correct */
|
|
115
|
-
/*----------------------------*/
|
|
116
60
|
let next_year_start;
|
|
117
61
|
while (true) {
|
|
118
62
|
next_year_start = HebrewDate.dateheb_year_start(year.value + 1);
|
|
@@ -124,9 +68,6 @@ export class HebrewDate {
|
|
|
124
68
|
day.value = date - curr_year_start;
|
|
125
69
|
let days_in_year = next_year_start - curr_year_start;
|
|
126
70
|
let leap = days_in_year > 355;
|
|
127
|
-
/*------------*/
|
|
128
|
-
/* Find Month */
|
|
129
|
-
/*------------*/
|
|
130
71
|
let i;
|
|
131
72
|
for (i = 1; i < 13; i = i + 1) {
|
|
132
73
|
let days_in_month = HebrewDate.dateheb_days_in_month(i, leap, days_in_year);
|
|
@@ -142,15 +83,6 @@ export class HebrewDate {
|
|
|
142
83
|
month.value = i - 1;
|
|
143
84
|
return leap;
|
|
144
85
|
}
|
|
145
|
-
/// <summary>
|
|
146
|
-
/// Compute a Hebrew letter to add to string, representing a numeric value
|
|
147
|
-
/// </summary>
|
|
148
|
-
/// <param name="val"></param>
|
|
149
|
-
/// <param name="str"></param>
|
|
150
|
-
/// <param name="strPos"></param>
|
|
151
|
-
/// <param name="use_ending"></param>
|
|
152
|
-
/// <param name="quote"></param>
|
|
153
|
-
/// <returns></returns>
|
|
154
86
|
static dateheb_i_2_h(val, str, strPos, use_ending, quote) {
|
|
155
87
|
let let_idx = 0;
|
|
156
88
|
let len = 0;
|
|
@@ -173,7 +105,6 @@ export class HebrewDate {
|
|
|
173
105
|
str[strPos - 1] = str[strPos - 1] + '\u0001';
|
|
174
106
|
}
|
|
175
107
|
}
|
|
176
|
-
// Final letters: only from 'מ'.
|
|
177
108
|
if (let_idx > 10 && use_ending) {
|
|
178
109
|
if (HebrewDate.DATEHEB_letters[let_idx - 1] === HebrewDate.DATEHEB_letters[let_idx - 2]) {
|
|
179
110
|
str[strPos - 1] = String.fromCharCode(str[strPos - 1].charCodeAt(0) - 1);
|
|
@@ -191,16 +122,6 @@ export class HebrewDate {
|
|
|
191
122
|
}
|
|
192
123
|
return len;
|
|
193
124
|
}
|
|
194
|
-
/// <summary>
|
|
195
|
-
/// Convert Hebrew year/day to a string
|
|
196
|
-
/// </summary>
|
|
197
|
-
/// <param name="outStr"></param>
|
|
198
|
-
/// <param name="len"></param>
|
|
199
|
-
/// <param name="full_len"></param>
|
|
200
|
-
/// <param name="hyear"></param>
|
|
201
|
-
/// <param name="trim"></param>
|
|
202
|
-
/// <param name="use_ending"></param>
|
|
203
|
-
/// <returns>length</returns>
|
|
204
125
|
static dateheb_2_str(outStr, strPos, len, out_len, full_len, hyear, trim, use_ending) {
|
|
205
126
|
let quote = len > full_len && outStr[strPos + full_len] === outStr[strPos];
|
|
206
127
|
if (quote)
|
|
@@ -217,19 +138,14 @@ export class HebrewDate {
|
|
|
217
138
|
heb_len = full_len;
|
|
218
139
|
}
|
|
219
140
|
else {
|
|
220
|
-
// Do not over the string length. It may be when YYYY in the end. (DDD MMMMM YYYY)
|
|
221
141
|
if (rem_len > outStr.length - strPos - heb_len)
|
|
222
142
|
rem_len = outStr.length - strPos - heb_len;
|
|
223
|
-
MemoryUtil.char_memset(outStr, strPos + heb_len, ' ',
|
|
143
|
+
MemoryUtil.char_memset(outStr, strPos + heb_len, ' ', rem_len);
|
|
224
144
|
heb_len = full_len;
|
|
225
145
|
}
|
|
226
146
|
}
|
|
227
147
|
return heb_len;
|
|
228
148
|
}
|
|
229
|
-
/// <summary>
|
|
230
|
-
/// Cut the month string from 'const' into separate values
|
|
231
|
-
/// </summary>
|
|
232
|
-
/// <returns></returns>
|
|
233
149
|
static GetLocalMonths() {
|
|
234
150
|
let monthLen = HebrewDate.MONTH_LEN;
|
|
235
151
|
if (HebrewDate._localMonths[0] === null) {
|
|
@@ -242,10 +158,6 @@ export class HebrewDate {
|
|
|
242
158
|
}
|
|
243
159
|
return HebrewDate._localMonths;
|
|
244
160
|
}
|
|
245
|
-
/// <summary>
|
|
246
|
-
/// Cut the day of week string from 'const' into separate values
|
|
247
|
-
/// </summary>
|
|
248
|
-
/// <returns></returns>
|
|
249
161
|
static GetLocalDows() {
|
|
250
162
|
let dowLen = HebrewDate.DOW_LEN;
|
|
251
163
|
if (HebrewDate._localDows[0] === null) {
|
|
@@ -258,13 +170,6 @@ export class HebrewDate {
|
|
|
258
170
|
}
|
|
259
171
|
return HebrewDate._localDows;
|
|
260
172
|
}
|
|
261
|
-
/// <summary>
|
|
262
|
-
/// Convert a hebrew string -> integer
|
|
263
|
-
/// </summary>
|
|
264
|
-
/// <param name="str"></param>
|
|
265
|
-
/// <param name="len"></param>
|
|
266
|
-
/// <param name="pos"></param>
|
|
267
|
-
/// <returns>converted to integer</returns>
|
|
268
173
|
static dateheb_h_2_i(str, len, pos) {
|
|
269
174
|
let val;
|
|
270
175
|
let has_1_to_9 = false;
|
|
@@ -307,29 +212,18 @@ export class HebrewDate {
|
|
|
307
212
|
}
|
|
308
213
|
return val;
|
|
309
214
|
}
|
|
310
|
-
/// <summary>
|
|
311
|
-
/// Check whether the character is a Hebrew letter
|
|
312
|
-
/// </summary>
|
|
313
|
-
/// <param name="letter"></param>
|
|
314
|
-
/// <returns></returns>
|
|
315
215
|
static isHebrewLetter(letter) {
|
|
316
216
|
if (letter >= HebrewDate.ALEF && letter <= HebrewDate.TAV)
|
|
317
217
|
return true;
|
|
318
218
|
else
|
|
319
219
|
return false;
|
|
320
220
|
}
|
|
321
|
-
/// <summary>Add found in newvalue numbers(2 or 3 letters) to buffer and return
|
|
322
|
-
/// last found number index
|
|
323
|
-
/// </summary>
|
|
324
|
-
/// <param name="currValue">in newvalue</param>
|
|
325
|
-
/// <param name="buffer"></param>
|
|
326
|
-
/// <returns> currValue in newvalue</returns>
|
|
327
221
|
static add2Date(newValue, currValue, letters, buffer) {
|
|
328
222
|
let start = currValue;
|
|
329
223
|
let i;
|
|
330
224
|
let currAdd = new StringBuilder(newValue.length);
|
|
331
225
|
while (start < newValue.length && !HebrewDate.isHebrewLetter(newValue.charAt(start)))
|
|
332
|
-
start = start + 1;
|
|
226
|
+
start = start + 1;
|
|
333
227
|
for (i = start; i < start + letters && i < newValue.length; i++) {
|
|
334
228
|
if (HebrewDate.isHebrewLetter(newValue.charAt(i)) || newValue.charAt(i) === ' ' || newValue.charAt(i) === '"' || newValue.charAt(i) === '\'')
|
|
335
229
|
buffer.Append(newValue.charAt(i));
|
|
@@ -338,30 +232,14 @@ export class HebrewDate {
|
|
|
338
232
|
}
|
|
339
233
|
return i;
|
|
340
234
|
}
|
|
341
|
-
/// <summary>
|
|
342
|
-
/// Convert a Hebrew date (year, month, day) to Magic internal date
|
|
343
|
-
/// </summary>
|
|
344
|
-
/// <param name="year"></param>
|
|
345
|
-
/// <param name="month"></param>
|
|
346
|
-
/// <param name="day"></param>
|
|
347
|
-
/// <returns></returns>
|
|
348
235
|
static dateheb_2_d(year, month, day) {
|
|
349
236
|
if (day === 0 && month === 0 && year === 0)
|
|
350
237
|
return 0;
|
|
351
238
|
if (day === 0 || month === 0 || year === 0)
|
|
352
239
|
return 1000000000;
|
|
353
|
-
/*--------------------------------------------------------*/
|
|
354
|
-
/* How many days from creation, to begining of the year ? */
|
|
355
|
-
/*--------------------------------------------------------*/
|
|
356
240
|
let days_from_creation = HebrewDate.dateheb_year_start(year);
|
|
357
|
-
/*------------------------*/
|
|
358
|
-
/* How days in the year ? */
|
|
359
|
-
/*------------------------*/
|
|
360
241
|
let days_in_year = HebrewDate.dateheb_year_start(year + 1) - days_from_creation;
|
|
361
242
|
let leap = days_in_year > 355;
|
|
362
|
-
/*-----------------*/
|
|
363
|
-
/* Add month + day */
|
|
364
|
-
/*-----------------*/
|
|
365
243
|
if (leap && month > HebrewDate.ADAR)
|
|
366
244
|
if (month === HebrewDate.ADAR_B)
|
|
367
245
|
month = HebrewDate.ADAR + 1;
|
|
@@ -372,9 +250,6 @@ export class HebrewDate {
|
|
|
372
250
|
for (let i = 1; i < month; i = i + 1)
|
|
373
251
|
days_from_creation = days_from_creation + HebrewDate.dateheb_days_in_month(i, leap, days_in_year);
|
|
374
252
|
days_from_creation = days_from_creation + day;
|
|
375
|
-
/*-------------------------------*/
|
|
376
|
-
/* Convert to Christian calender */
|
|
377
|
-
/*-------------------------------*/
|
|
378
253
|
return Math.max(days_from_creation - HebrewDate.DAYS_TIL_JESUS, 0);
|
|
379
254
|
}
|
|
380
255
|
}
|
|
@@ -403,28 +278,16 @@ HebrewDate.HESHVAN = 2;
|
|
|
403
278
|
HebrewDate.KISLEV = 3;
|
|
404
279
|
HebrewDate.ADAR = 6;
|
|
405
280
|
HebrewDate.ADAR_B = 13;
|
|
406
|
-
/*-----------------------------------------------------*/
|
|
407
|
-
/* Hebrew numeric representation of each Hebrew letter */
|
|
408
|
-
/* --------------------------------------------------- */
|
|
409
281
|
HebrewDate.DATEHEB_letters = [
|
|
410
282
|
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 20, 30, 40, 40, 50, 50, 60, 70,
|
|
411
283
|
80, 80, 90, 90, 100, 200, 300, 400
|
|
412
284
|
];
|
|
413
285
|
HebrewDate.ALEF = 'א';
|
|
414
286
|
HebrewDate.TAV = 'ת';
|
|
415
|
-
/* ------------------------------------------------ */
|
|
416
|
-
/* N of Months from beginning of 19 years cycle, to */
|
|
417
|
-
/* the beginning of a year (in the range 0 - 18) */
|
|
418
|
-
/* ------------------------------------------------ */
|
|
419
287
|
HebrewDate.DATEHEB_months_n = [
|
|
420
288
|
0, 12, 24, 37, 49, 61, 74, 86, 99, 111, 123, 136, 148, 160, 173, 185, 197, 210, 222,
|
|
421
289
|
235
|
|
422
290
|
];
|
|
423
|
-
/* ------------------------------------------------------------------ */
|
|
424
|
-
/* N of days from the beginning of a year to the beginning of a month */
|
|
425
|
-
/* Tishrei, Heshvan, Kislev, Tevet, Shvat, Adar, */
|
|
426
|
-
/* Nisan, Iyar, Sivan, Tamuz, Av, Elul */
|
|
427
|
-
/* ------------------------------------------------------------------ */
|
|
428
291
|
HebrewDate.DATEHEB_norm_days_in_month = [
|
|
429
292
|
30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 0
|
|
430
293
|
];
|
|
@@ -435,4 +298,4 @@ HebrewDate.MONTH_LEN = 5;
|
|
|
435
298
|
HebrewDate._localMonths = new Array(15);
|
|
436
299
|
HebrewDate.DOW_LEN = 5;
|
|
437
300
|
HebrewDate._localDows = new Array(8);
|
|
438
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVicmV3RGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvSGVicmV3RGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQVksYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE1BQU0sT0FBTyxVQUFVO0lBaUVyQixhQUFhO0lBQ2IsNkJBQTZCO0lBQzdCLGNBQWM7SUFDZCwrQkFBK0I7SUFDL0IsdUJBQXVCO0lBQ2YsTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQVk7UUFDOUMsSUFBSSxHQUFHLElBQUksR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELGFBQWE7SUFDYiwyQkFBMkI7SUFDM0IsY0FBYztJQUNkLGdDQUFnQztJQUNoQywrQkFBK0I7SUFDL0IsdUNBQXVDO0lBQ3ZDLHVCQUF1QjtJQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsSUFBYSxFQUFFLFlBQW9CO1FBQ3JGLElBQUksYUFBYSxHQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztR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RSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Q0FDbEQsQ0FBQztBQUNhLHFDQUEwQixHQUFhO0lBQ3BELEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7Q0FDbkQsQ0FBQztBQUVhLG9CQUFTLEdBQVcsQ0FBQyxDQUFDO0FBQ3RCLHVCQUFZLEdBQWEsSUFBSSxLQUFLLENBQVMsRUFBRSxDQUFDLENBQUM7QUFDL0Msa0JBQU8sR0FBVyxDQUFDLENBQUM7QUFDcEIscUJBQVUsR0FBYSxJQUFJLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50cyB9IGZyb20gJy4uLy4uL0V2ZW50cyc7XHJcbmltcG9ydCB7IE1zZ0ludGVyZmFjZSB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBSZWZQYXJhbSwgU3RyaW5nQnVpbGRlciB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgTWVtb3J5VXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvTWVtb3J5VXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSGVicmV3RGF0ZSB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEFSVFNfUEVSX0hPVVI6IG51bWJlciA9IDEwODA7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgSE9VUlNfUEVSX0RBWTogbnVtYmVyID0gMjQ7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEFSVFNfUEVSX0RBWTogbnVtYmVyID0gKEhlYnJld0RhdGUuSE9VUlNfUEVSX0RBWSAqIEhlYnJld0RhdGUuUEFSVFNfUEVSX0hPVVIpO1xyXG4gIHByaXZhdGUgc3RhdGljIE1PTlRIX0RBWVM6IG51bWJlciA9IDI5O1xyXG4gIHByaXZhdGUgc3RhdGljIE1PTlRIX0VYVFJBX1BBUlRTOiBudW1iZXIgPSAoMTIgKiBIZWJyZXdEYXRlLlBBUlRTX1BFUl9IT1VSICsgNzkzKTtcclxuICBwcml2YXRlIHN0YXRpYyBQQVJUU19QRVJfTU9OVEg6IG51bWJlciA9IChIZWJyZXdEYXRlLk1PTlRIX0RBWVMgKiBIZWJyZXdEYXRlLlBBUlRTX1BFUl9EQVkgKyBIZWJyZXdEYXRlLk1PTlRIX0VYVFJBX1BBUlRTKTtcclxuICBwcml2YXRlIHN0YXRpYyBNT05USFNfUEVSX05PUk1fWUVBUjogbnVtYmVyID0gMTI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTU9OVEhTX1BFUl9MRUFQX1lFQVI6IG51bWJlciA9IDEzO1xyXG4gIHByaXZhdGUgc3RhdGljIE5PUk1fWUVBUlNfUEVSX0NZQ0xFOiBudW1iZXIgPSAxMjtcclxuICBwcml2YXRlIHN0YXRpYyBMRUFQX1lFQVJTX1BFUl9DWUNMRTogbnVtYmVyID0gNztcclxuICBwcml2YXRlIHN0YXRpYyBZRUFSU19QRVJfQ1lDTEU6IG51bWJlciA9IChIZWJyZXdEYXRlLk5PUk1fWUVBUlNfUEVSX0NZQ0xFICsgSGVicmV3RGF0ZS5MRUFQX1lFQVJTX1BFUl9DWUNMRSk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTU9OVEhTX1BFUl9DWUNMRTogbnVtYmVyID0gKEhlYnJld0RhdGUuTk9STV9ZRUFSU19QRVJfQ1lDTEUgKiBIZWJyZXdEYXRlLk1PTlRIU19QRVJfTk9STV9ZRUFSICsgSGVicmV3RGF0ZS5MRUFQX1lFQVJTX1BFUl9DWUNMRSAqIEhlYnJld0RhdGUuTU9OVEhTX1BFUl9MRUFQX1lFQVIpO1xyXG4gIHByaXZhdGUgc3RhdGljIFBBUlRTX1BFUl9OT1JNX1lFQVI6IG51bWJlciA9IChIZWJyZXdEYXRlLk1PTlRIU19QRVJfTk9STV9ZRUFSICogSGVicmV3RGF0ZS5QQVJUU19QRVJfTU9OVEgpO1xyXG4gIHByaXZhdGUgc3RhdGljIERBWVNfUEVSX05PUk1fWUVBUjogbnVtYmVyID0gTWF0aC5mbG9vcihIZWJyZXdEYXRlLlBBUlRTX1BFUl9OT1JNX1lFQVIgLyBIZWJyZXdEYXRlLlBBUlRTX1BFUl9EQVkpO1xyXG4gIHByaXZhdGUgc3RhdGljIFBBUlRTX1BFUl9MRUFQX1lFQVI6IG51bWJlciA9IChIZWJyZXdEYXRlLk1PTlRIU19QRVJfTEVBUF9ZRUFSICogSGVicmV3RGF0ZS5QQVJUU19QRVJfTU9OVEgpO1xyXG4gIHByaXZhdGUgc3RhdGljIERBWVNfUEVSX0xFQVBfWUVBUjogbnVtYmVyID0gTWF0aC5mbG9vcihIZWJyZXdEYXRlLlBBUlRTX1BFUl9MRUFQX1lFQVIgLyBIZWJyZXdEYXRlLlBBUlRTX1BFUl9EQVkpO1xyXG4gIHByaXZhdGUgc3RhdGljIFBBUlRTX1BFUl9DWUNMRTogbnVtYmVyID0gKEhlYnJld0RhdGUuTU9OVEhTX1BFUl9DWUNMRSAqIEhlYnJld0RhdGUuUEFSVFNfUEVSX01PTlRIKTtcclxuICBwcml2YXRlIHN0YXRpYyBEQVlTX1BFUl9DWUNMRTogbnVtYmVyID0gTWF0aC5mbG9vcihIZWJyZXdEYXRlLlBBUlRTX1BFUl9DWUNMRSAvIEhlYnJld0RhdGUuUEFSVFNfUEVSX0RBWSk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQ1JFQVRJT05fRE9XOiBudW1iZXIgPSAyO1xyXG4gIHByaXZhdGUgc3RhdGljIENSRUFUSU9OX1BBUlRTOiBudW1iZXIgPSAoNSAqIEhlYnJld0RhdGUuUEFSVFNfUEVSX0hPVVIgKyAyMDQpO1xyXG4gIHByaXZhdGUgc3RhdGljIERBWVNfVElMX0pFU1VTOiBudW1iZXIgPSAxMzczNDI4O1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBIRVNIVkFOOiBudW1iZXIgPSAyO1xyXG4gIHByaXZhdGUgc3RhdGljIEtJU0xFVjogbnVtYmVyID0gMztcclxuICBwcml2YXRlIHN0YXRpYyBBREFSOiBudW1iZXIgPSA2O1xyXG4gIHByaXZhdGUgc3RhdGljIEFEQVJfQjogbnVtYmVyID0gMTM7XHJcblxyXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gIC8qIEhlYnJldyBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggSGVicmV3IGxldHRlciAqL1xyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIHByaXZhdGUgc3RhdGljIERBVEVIRUJfbGV0dGVyczogbnVtYmVyW10gPSBbXHJcbiAgICAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMjAsIDIwLCAzMCwgNDAsIDQwLCA1MCwgNTAsIDYwLCA3MCxcclxuICAgIDgwLCA4MCwgOTAsIDkwLCAxMDAsIDIwMCwgMzAwLCA0MDBcclxuICBdO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBBTEVGOiBzdHJpbmcgPSAn15AnO1xyXG4gIHByaXZhdGUgc3RhdGljIFRBVjogc3RyaW5nID0gJ9eqJztcclxuXHJcbiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgLyogTiBvZiBNb250aHMgZnJvbSBiZWdpbm5pbmcgb2YgMTkgeWVhcnMgY3ljbGUsIHRvICovXHJcbiAgLyogdGhlIGJlZ2lubmluZyBvZiBhIHllYXIgKGluIHRoZSByYW5nZSAwIC0gMTgpICAgICovXHJcbiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgREFURUhFQl9tb250aHNfbjogbnVtYmVyW10gPSBbXHJcbiAgICAwLCAxMiwgMjQsIDM3LCA0OSwgNjEsIDc0LCA4NiwgOTksIDExMSwgMTIzLCAxMzYsIDE0OCwgMTYwLCAxNzMsIDE4NSwgMTk3LCAyMTAsIDIyMixcclxuICAgIDIzNVxyXG4gIF07XHJcblxyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIC8qIE4gb2YgZGF5cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYSB5ZWFyIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBtb250aCAqL1xyXG4gIC8qIFRpc2hyZWksIEhlc2h2YW4sIEtpc2xldiwgVGV2ZXQsIFNodmF0LCBBZGFyLCAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gIC8qIE5pc2FuLCAgIEl5YXIsICAgIFNpdmFuLCAgVGFtdXosIEF2LCAgICBFbHVsICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIHByaXZhdGUgc3RhdGljIERBVEVIRUJfbm9ybV9kYXlzX2luX21vbnRoOiBudW1iZXJbXSA9IFtcclxuICAgIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDBcclxuICBdO1xyXG4gIHByaXZhdGUgc3RhdGljIERBVEVIRUJfbGVhcF9kYXlzX2luX21vbnRoOiBudW1iZXJbXSA9IFtcclxuICAgIDMwLCAyOSwgMzAsIDI5LCAzMCwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOSwgMzAsIDI5XHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgTU9OVEhfTEVOOiBudW1iZXIgPSA1O1xyXG4gIHByaXZhdGUgc3RhdGljIF9sb2NhbE1vbnRoczogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPigxNSk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRE9XX0xFTjogbnVtYmVyID0gNTtcclxuICBwcml2YXRlIHN0YXRpYyBfbG9jYWxEb3dzOiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KDgpO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNhbGN1bGF0ZSBpZiB5ZWFyIGlzIGxlYXBcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInllYXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZGF0ZWhlYl95ZWFyX2lzX2xlYXAoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB5ZWFyID0geWVhciAlIEhlYnJld0RhdGUuWUVBUlNfUEVSX0NZQ0xFO1xyXG4gICAgcmV0dXJuIChIZWJyZXdEYXRlLkRBVEVIRUJfbW9udGhzX25bKHllYXIgKyAxKV0gLSBIZWJyZXdEYXRlLkRBVEVIRUJfbW9udGhzX25beWVhcl0gPT09IDEzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY2FsY3VsYXRlIGRheXMgaW4gbW9udGhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1vbnRoXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZWFwXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXlzX2luX3llYXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZGF0ZWhlYl9kYXlzX2luX21vbnRoKG1vbnRoOiBudW1iZXIsIGxlYXA6IGJvb2xlYW4sIGRheXNfaW5feWVhcjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBkYXlzX2luX21vbnRoOiBudW1iZXIgPSBsZWFwID8gSGVicmV3RGF0ZS5EQVRFSEVCX2xlYXBfZGF5c19pbl9tb250aFttb250aCAtIDFdIDogSGVicmV3RGF0ZS5EQVRFSEVCX25vcm1fZGF5c19pbl9tb250aFttb250aCAtIDFdO1xyXG5cclxuICAgIGlmIChsZWFwKVxyXG4gICAgICBkYXlzX2luX3llYXIgPSBkYXlzX2luX3llYXIgLSAzMDtcclxuXHJcbiAgICBzd2l0Y2ggKGRheXNfaW5feWVhcikge1xyXG4gICAgICBjYXNlIDM1MzpcclxuICAgICAgICBpZiAobW9udGggPT09IEhlYnJld0RhdGUuS0lTTEVWKVxyXG4gICAgICAgICAgZGF5c19pbl9tb250aCA9IDI5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM1NTpcclxuICAgICAgICBpZiAobW9udGggPT09IEhlYnJld0RhdGUuSEVTSFZBTilcclxuICAgICAgICAgIGRheXNfaW5fbW9udGggPSAzMDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBkYXlzX2luX21vbnRoO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjYWxjdWxhdGUgZGF5cyBmcm9tIGNyZWF0aW9uIHRpbGwgc3RhcnQgb2YgdGhlIHllYXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInllYXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZGF0ZWhlYl95ZWFyX3N0YXJ0KHllYXI6IG51bWJlcik6IG51bWJlciB7XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogY2FsY3VsYXRlIFwibW9sYWRcIiBvZiB5ZWFyICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICB5ZWFyID0geWVhciAtIDE7XHJcbiAgICBsZXQgY3ljbGU6IG51bWJlciA9IE1hdGguZmxvb3IoeWVhciAvIEhlYnJld0RhdGUuWUVBUlNfUEVSX0NZQ0xFKTtcclxuICAgIHllYXIgPSB5ZWFyICUgSGVicmV3RGF0ZS5ZRUFSU19QRVJfQ1lDTEU7XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogSG93IG1hbnkgbW9udGhzIHBhc3NlZCBzaW5jZSBjcmVhdGlvbiAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgbGV0IG1vbnRoczogbnVtYmVyID0gY3ljbGUgKiBIZWJyZXdEYXRlLk1PTlRIU19QRVJfQ1lDTEUgKyBIZWJyZXdEYXRlLkRBVEVIRUJfbW9udGhzX25beWVhcl07XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIEhvdyBtYW55IGRheXMgcGFzc2VkIHNpbmNlIGNyZWF0aW9uICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgbGV0IGRheXM6IG51bWJlciA9IG1vbnRocyAqIEhlYnJld0RhdGUuTU9OVEhfREFZUztcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIEhvdyBtYW55IGV4dHJhIHBhcnRzIHBhc3NlZCBzaW5jZSBjcmVhdGlvbiAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBsZXQgcGFydHM6IG51bWJlciA9IG1vbnRocyAqIEhlYnJld0RhdGUuTU9OVEhfRVhUUkFfUEFSVFMgKyBIZWJyZXdEYXRlLkNSRUFUSU9OX1BBUlRTO1xyXG5cclxuICAgIGRheXMgPSBkYXlzICsgTWF0aC5mbG9vcihwYXJ0cyAvIEhlYnJld0RhdGUuUEFSVFNfUEVSX0RBWSk7XHJcbiAgICBwYXJ0cyA9IHBhcnRzICUgSGVicmV3RGF0ZS5QQVJUU19QRVJfREFZO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIFJlbWluZGVyID4gMy80IG9mIGEgZGF5ID8gKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGlmICg8bnVtYmVyPnBhcnRzID49IE1hdGguZmxvb3IoSGVicmV3RGF0ZS5QQVJUU19QRVJfREFZICogMyAvIDQpKSB7XHJcbiAgICAgIHBhcnRzID0gMDtcclxuICAgICAgZGF5cyA9IGRheXMgKyAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogdmVyaWZ5IGRheS1vZi13ZWVrIG5vdCBTdW5kYXksIFdlZG5lc2RheSwgRnJpZGF5ICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGxldCBkb3c6IG51bWJlciA9IChkYXlzIC0gMSArIEhlYnJld0RhdGUuQ1JFQVRJT05fRE9XKSAlIDcgKyAxO1xyXG4gICAgaWYgKChkb3cgPT09IDEpIHx8IChkb3cgPT09IDQpIHx8IChkb3cgPT09IDYpKSB7XHJcbiAgICAgIHBhcnRzID0gMDtcclxuICAgICAgZGF5cyA9IGRheXMgKyAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiB2ZXJpZnkgaWYgeWVhciB0b28gbG9uZy9sb25nICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgaWYgKCFIZWJyZXdEYXRlLmRhdGVoZWJfeWVhcl9pc19sZWFwKDxudW1iZXI+eWVhcikpIHtcclxuICAgICAgaWYgKGRvdyA9PT0gMyAmJiA8bnVtYmVyPnBhcnRzID49ICg5ICogSGVicmV3RGF0ZS5QQVJUU19QRVJfSE9VUiArIDIwNCkpXHJcbiAgICAgICAgZGF5cyA9IGRheXMgKyAyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChIZWJyZXdEYXRlLmRhdGVoZWJfeWVhcl9pc19sZWFwKDxudW1iZXI+eWVhciArIEhlYnJld0RhdGUuWUVBUlNfUEVSX0NZQ0xFIC0gMSkpIHtcclxuICAgICAgaWYgKGRvdyA9PT0gMiAmJiA8bnVtYmVyPnBhcnRzID49ICgxNSAqIEhlYnJld0RhdGUuUEFSVFNfUEVSX0hPVVIgKyA1ODkpKVxyXG4gICAgICAgIGRheXMgPSBkYXlzICsgMTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF5cztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ29udmVydCBhIE1hZ2ljIGludGVybmFsIERhdGUgdG8gYSBIZWJyZXcgZGF0ZSAoeWVhciwgbW9udGgsIGRheSlcclxuICAvLy8gTm90ZSB0aGF0IEFEQVJfQiBpcyByZXByZXNlbnRlZCBieSBtb250aCA9IDEzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXRlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJoZGF5XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJobW9udGhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImh5ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+VFJVRSBpZiBsZWFwIHllYXI8L3JldHVybnM+XHJcbiAgc3RhdGljIGRhdGVoZWJfNF9kKGRhdGU6IG51bWJlciwgZGF5OiBSZWZQYXJhbTxudW1iZXI+LCBtb250aDogUmVmUGFyYW08bnVtYmVyPiwgeWVhcjogUmVmUGFyYW08bnVtYmVyPik6IGJvb2xlYW4ge1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBEYXlzIGZyb20gY3JlYXRpb24gKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgZGF0ZSA9IGRhdGUgKyBIZWJyZXdEYXRlLkRBWVNfVElMX0pFU1VTO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogR3Vlc3MgYSB5ZWFyICg8PSBjb3JyZWN0IHllYXIpICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGxldCBjeWNsZTogbnVtYmVyID0gTWF0aC5mbG9vcihkYXRlIC8gKEhlYnJld0RhdGUuREFZU19QRVJfQ1lDTEUgKyAxKSk7XHJcbiAgICBsZXQgZGF5czogbnVtYmVyID0gZGF0ZSAlIChIZWJyZXdEYXRlLkRBWVNfUEVSX0NZQ0xFICsgMSk7XHJcbiAgICB5ZWFyLnZhbHVlID0gY3ljbGUgKiBIZWJyZXdEYXRlLllFQVJTX1BFUl9DWUNMRTtcclxuICAgIHllYXIudmFsdWUgPSB5ZWFyLnZhbHVlICsgTWF0aC5mbG9vcihkYXlzIC8gKEhlYnJld0RhdGUuREFZU19QRVJfTEVBUF9ZRUFSICsgMSkpO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBBZHZhbmNlIHllYXIgdW50aWwgY29ycmVjdCAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGxldCBuZXh0X3llYXJfc3RhcnQ6IG51bWJlcjtcclxuICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgIG5leHRfeWVhcl9zdGFydCA9IEhlYnJld0RhdGUuZGF0ZWhlYl95ZWFyX3N0YXJ0KHllYXIudmFsdWUgKyAxKTtcclxuICAgICAgaWYgKG5leHRfeWVhcl9zdGFydCA+PSBkYXRlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB5ZWFyLnZhbHVlID0geWVhci52YWx1ZSArIDE7XHJcbiAgICB9XHJcbiAgICBsZXQgY3Vycl95ZWFyX3N0YXJ0OiBudW1iZXIgPSBIZWJyZXdEYXRlLmRhdGVoZWJfeWVhcl9zdGFydCh5ZWFyLnZhbHVlKTtcclxuICAgIGRheS52YWx1ZSA9IGRhdGUgLSBjdXJyX3llYXJfc3RhcnQ7XHJcbiAgICBsZXQgZGF5c19pbl95ZWFyOiBudW1iZXIgPSBuZXh0X3llYXJfc3RhcnQgLSBjdXJyX3llYXJfc3RhcnQ7XHJcbiAgICBsZXQgbGVhcDogYm9vbGVhbiA9IGRheXNfaW5feWVhciA+IDM1NTtcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBGaW5kIE1vbnRoICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLSovXHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgZm9yIChpID0gMTsgaSA8IDEzOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IGRheXNfaW5fbW9udGg6IG51bWJlciA9IEhlYnJld0RhdGUuZGF0ZWhlYl9kYXlzX2luX21vbnRoKGksIGxlYXAsIGRheXNfaW5feWVhcik7XHJcbiAgICAgIGlmIChkYXkudmFsdWUgPD0gZGF5c19pbl9tb250aClcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGF5LnZhbHVlID0gZGF5LnZhbHVlIC0gZGF5c19pbl9tb250aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWxlYXAgfHwgaSA8PSBIZWJyZXdEYXRlLkFEQVIpXHJcbiAgICAgIG1vbnRoLnZhbHVlID0gaTtcclxuICAgIGVsc2UgaWYgKGkgPT09IEhlYnJld0RhdGUuQURBUiArIDEpXHJcbiAgICAgIG1vbnRoLnZhbHVlID0gSGVicmV3RGF0ZS5BREFSX0I7XHJcbiAgICBlbHNlXHJcbiAgICAgIG1vbnRoLnZhbHVlID0gaSAtIDE7XHJcblxyXG4gICAgcmV0dXJuIGxlYXA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENvbXB1dGUgYSBIZWJyZXcgbGV0dGVyIHRvIGFkZCB0byBzdHJpbmcsIHJlcHJlc2VudGluZyBhIG51bWVyaWMgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJQb3NcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInVzZV9lbmRpbmdcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInF1b3RlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBkYXRlaGViX2lfMl9oKHZhbDogbnVtYmVyLCBzdHI6IHN0cmluZ1tdLCBzdHJQb3M6IG51bWJlciwgdXNlX2VuZGluZzogYm9vbGVhbiwgcXVvdGU6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgbGV0IGxldF9pZHg6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHdoaWxlICh2YWwgPiAwKSB7XHJcbiAgICAgIGZvciAobGV0X2lkeCA9IEhlYnJld0RhdGUuREFURUhFQl9sZXR0ZXJzLmxlbmd0aDsgbGV0X2lkeCA+IDA7IGxldF9pZHggPSBsZXRfaWR4IC0gMSkge1xyXG4gICAgICAgIGxldCBsZXR0ZXI6IG51bWJlciA9IEhlYnJld0RhdGUuREFURUhFQl9sZXR0ZXJzW2xldF9pZHggLSAxXTtcclxuICAgICAgICBpZiAodmFsID49IGxldHRlcikge1xyXG4gICAgICAgICAgdmFsID0gdmFsIC0gbGV0dGVyO1xyXG4gICAgICAgICAgc3RyW3N0clBvcysrXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoSGVicmV3RGF0ZS5BTEVGLmNoYXJDb2RlQXQoMCkgKyBsZXRfaWR4IC0gMSk7XHJcbiAgICAgICAgICBsZW4gPSBsZW4gKyAxO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgaWYgKGxlbiA+PSAyKSB7XHJcbiAgICAgICAgaWYgKHN0cltzdHJQb3MgLSAyXSA9PT0gJ9eZJylcclxuICAgICAgICAgIGlmIChzdHJbc3RyUG9zIC0gMV0gPT09ICfXlCcgfHwgc3RyW3N0clBvcyAtIDFdID09PSAn15UnKSB7XHJcbiAgICAgICAgICAgIHN0cltzdHJQb3MgLSAyXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoc3RyW3N0clBvcyAtIDJdLmNoYXJDb2RlQXQoMCkgLSAxKTtcclxuICAgICAgICAgICAgc3RyW3N0clBvcyAtIDFdID0gc3RyW3N0clBvcyAtIDFdICsgJ1xcdTAwMDEnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGaW5hbCBsZXR0ZXJzOiBvbmx5IGZyb20gJ9eeJy5cclxuICAgICAgaWYgKGxldF9pZHggPiAxMCAmJiB1c2VfZW5kaW5nKSB7XHJcbiAgICAgICAgaWYgKEhlYnJld0RhdGUuREFURUhFQl9sZXR0ZXJzW2xldF9pZHggLSAxXSA9PT0gSGVicmV3RGF0ZS5EQVRFSEVCX2xldHRlcnNbbGV0X2lkeCAtIDJdKSB7XHJcbiAgICAgICAgICBzdHJbc3RyUG9zIC0gMV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHN0cltzdHJQb3MgLSAxXS5jaGFyQ29kZUF0KDApIC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocXVvdGUpIHtcclxuICAgICAgICBpZiAobGVuID09PSAxKVxyXG4gICAgICAgICAgc3RyW3N0clBvc10gPSAnXFwnJztcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHN0cltzdHJQb3NdID0gc3RyW3N0clBvcyAtIDFdO1xyXG4gICAgICAgICAgc3RyW3N0clBvcyAtIDFdID0gJ1wiJztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGVuID0gbGVuICsgMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ29udmVydCBIZWJyZXcgeWVhci9kYXkgdG8gYSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm91dFN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGVuXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmdWxsX2xlblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaHllYXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRyaW1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInVzZV9lbmRpbmdcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5sZW5ndGg8L3JldHVybnM+XHJcbiAgc3RhdGljIGRhdGVoZWJfMl9zdHIob3V0U3RyOiBzdHJpbmdbXSwgc3RyUG9zOiBudW1iZXIsIGxlbjogbnVtYmVyLCBvdXRfbGVuOiBSZWZQYXJhbTxudW1iZXI+LCBmdWxsX2xlbjogbnVtYmVyLCBoeWVhcjogbnVtYmVyLCB0cmltOiBib29sZWFuLCB1c2VfZW5kaW5nOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGxldCBxdW90ZTogYm9vbGVhbiA9IGxlbiA+IGZ1bGxfbGVuICYmIG91dFN0cltzdHJQb3MgKyBmdWxsX2xlbl0gPT09IG91dFN0cltzdHJQb3NdO1xyXG4gICAgaWYgKHF1b3RlKVxyXG4gICAgICBmdWxsX2xlbiA9IGZ1bGxfbGVuICsgMTtcclxuICAgIGxldCBoZWJfbGVuOiBudW1iZXIgPSBIZWJyZXdEYXRlLmRhdGVoZWJfaV8yX2goaHllYXIgJSAxMDAwLCBvdXRTdHIsIHN0clBvcywgdXNlX2VuZGluZywgcXVvdGUpO1xyXG5cclxuICAgIGxldCByZW1fbGVuOiBudW1iZXIgPSBmdWxsX2xlbiAtIGhlYl9sZW47XHJcbiAgICBpZiAocmVtX2xlbiA+IDApIHtcclxuICAgICAgaWYgKHRyaW0pIHtcclxuICAgICAgICBvdXRfbGVuLnZhbHVlID0gb3V0X2xlbi52YWx1ZSAtIHJlbV9sZW47XHJcbiAgICAgICAgbGV0IHRtcF9vdXRfbGVuOiBudW1iZXIgPSBsZW4gLSBmdWxsX2xlbjtcclxuICAgICAgICBpZiAodG1wX291dF9sZW4gPiAwKVxyXG4gICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbWNweShvdXRTdHIsIHN0clBvcyArIGhlYl9sZW4sIG91dFN0ciwgc3RyUG9zICsgZnVsbF9sZW4sIHRtcF9vdXRfbGVuKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBoZWJfbGVuID0gZnVsbF9sZW47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgLy8gRG8gbm90IG92ZXIgdGhlIHN0cmluZyBsZW5ndGguIEl0IG1heSBiZSB3aGVuIFlZWVkgaW4gdGhlIGVuZC4gKERERCBNTU1NTSBZWVlZKVxyXG4gICAgICAgIGlmIChyZW1fbGVuID4gb3V0U3RyLmxlbmd0aCAtIHN0clBvcyAtIGhlYl9sZW4pXHJcbiAgICAgICAgICByZW1fbGVuID0gb3V0U3RyLmxlbmd0aCAtIHN0clBvcyAtIGhlYl9sZW47XHJcbiAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChvdXRTdHIsIHN0clBvcyArIGhlYl9sZW4sICcgJywgLyonICcqL3JlbV9sZW4pO1xyXG4gICAgICAgIGhlYl9sZW4gPSBmdWxsX2xlbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhlYl9sZW47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEN1dCB0aGUgbW9udGggc3RyaW5nIGZyb20gJ2NvbnN0JyBpbnRvIHNlcGFyYXRlIHZhbHVlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0TG9jYWxNb250aHMoKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IG1vbnRoTGVuOiBudW1iZXIgPSBIZWJyZXdEYXRlLk1PTlRIX0xFTjtcclxuXHJcbiAgICBpZiAoSGVicmV3RGF0ZS5fbG9jYWxNb250aHNbMF0gPT09IG51bGwpIHtcclxuICAgICAgbGV0IG1vbnRoU3RyOiBzdHJpbmcgPSBFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhNc2dJbnRlcmZhY2UuREFURUhFQl9NT05USF9TVFIpO1xyXG4gICAgICBpZiAobW9udGhTdHIgIT09IG51bGwpIHtcclxuICAgICAgICBIZWJyZXdEYXRlLl9sb2NhbE1vbnRoc1swXSA9IFwiICAgICAgIFwiO1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDE7IGkgPCBIZWJyZXdEYXRlLl9sb2NhbE1vbnRocy5sZW5ndGg7IGkgPSBpICsgMSlcclxuICAgICAgICAgIEhlYnJld0RhdGUuX2xvY2FsTW9udGhzW2ldID0gbW9udGhTdHIuc3Vic3RyKChpIC0gMSkgKiBtb250aExlbiwgaSAqIG1vbnRoTGVuIC0gKGkgLSAxKSAqIG1vbnRoTGVuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIEhlYnJld0RhdGUuX2xvY2FsTW9udGhzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDdXQgdGhlIGRheSBvZiB3ZWVrIHN0cmluZyBmcm9tICdjb25zdCcgaW50byBzZXBhcmF0ZSB2YWx1ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIEdldExvY2FsRG93cygpOiBzdHJpbmdbXSB7XHJcbiAgICBsZXQgZG93TGVuOiBudW1iZXIgPSBIZWJyZXdEYXRlLkRPV19MRU47XHJcblxyXG4gICAgaWYgKEhlYnJld0RhdGUuX2xvY2FsRG93c1swXSA9PT0gbnVsbCkge1xyXG4gICAgICBsZXQgZG93c1N0cjogc3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLkRBVEVIRUJfRE9XX1NUUik7XHJcbiAgICAgIGlmIChkb3dzU3RyICE9PSBudWxsKSB7XHJcbiAgICAgICAgSGVicmV3RGF0ZS5fbG9jYWxEb3dzWzBdID0gXCIgICAgIFwiO1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDE7IGkgPCBIZWJyZXdEYXRlLl9sb2NhbERvd3MubGVuZ3RoOyBpID0gaSArIDEpXHJcbiAgICAgICAgICBIZWJyZXdEYXRlLl9sb2NhbERvd3NbaV0gPSBkb3dzU3RyLnN1YnN0cigoaSAtIDEpICogZG93TGVuLCBpICogZG93TGVuIC0gKGkgLSAxKSAqIGRvd0xlbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBIZWJyZXdEYXRlLl9sb2NhbERvd3M7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENvbnZlcnQgYSBoZWJyZXcgc3RyaW5nIC0+IGludGVnZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGVuXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwb3NcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5jb252ZXJ0ZWQgdG8gaW50ZWdlcjwvcmV0dXJucz5cclxuICBzdGF0aWMgZGF0ZWhlYl9oXzJfaShzdHI6IHN0cmluZ1tdLCBsZW46IG51bWJlciwgcG9zOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHZhbDogbnVtYmVyO1xyXG4gICAgbGV0IGhhc18xX3RvXzk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBoYXNfMTBfdG9fOTA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBoYXNfMTAwX3RvXzMwMDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGNudF80MDA6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbGFzdF92YWw6IG51bWJlciA9IDEwMDA7XHJcbiAgICBsZXQgbGV0X3ZhbDogbnVtYmVyO1xyXG5cclxuICAgIGZvciAodmFsID0gMDsgbGVuID4gMCAmJiBwb3MgPCBzdHIubGVuZ3RoOyBwb3MrKywgbGVuLS0pXHJcbiAgICAgIGlmIChzdHJbcG9zXSA+PSBIZWJyZXdEYXRlLkFMRUYgJiYgc3RyW3Bvc10gPD0gSGVicmV3RGF0ZS5UQVYpIHtcclxuICAgICAgICBsZXRfdmFsID0gSGVicmV3RGF0ZS5EQVRFSEVCX2xldHRlcnNbPG51bWJlcj4oc3RyW3Bvc10uY2hhckNvZGVBdCgwKSAtIEhlYnJld0RhdGUuQUxFRi5jaGFyQ29kZUF0KDApKV07XHJcbiAgICAgICAgaWYgKGxldF92YWwgPiBsYXN0X3ZhbClcclxuICAgICAgICAgIHJldHVybiAwO1xyXG5cclxuICAgICAgICBpZiAobGV0X3ZhbCA9PT0gNDAwKSB7XHJcbiAgICAgICAgICBpZiAoY250XzQwMCA9PT0gMilcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICBjbnRfNDAwID0gY250XzQwMCArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGxldF92YWwgPj0gMTAwKSB7XHJcbiAgICAgICAgICBpZiAoaGFzXzEwMF90b18zMDApXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgaGFzXzEwMF90b18zMDAgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGV0X3ZhbCA+PSAxMCkge1xyXG4gICAgICAgICAgaWYgKGhhc18xMF90b185MClcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICBoYXNfMTBfdG9fOTAgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChoYXNfMV90b185KSB7XHJcbiAgICAgICAgICAgIGlmIChoYXNfMTBfdG9fOTAgfHwgbGFzdF92YWwgIT09IDkpXHJcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIGlmIChsZXRfdmFsICE9PSA2ICYmIGxldF92YWwgIT09IDcpXHJcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBoYXNfMV90b185ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsID0gdmFsICsgbGV0X3ZhbDtcclxuICAgICAgICBsYXN0X3ZhbCA9IGxldF92YWw7XHJcbiAgICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYSBIZWJyZXcgbGV0dGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZXR0ZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIGlzSGVicmV3TGV0dGVyKGxldHRlcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAobGV0dGVyID49IEhlYnJld0RhdGUuQUxFRiAmJiBsZXR0ZXIgPD0gSGVicmV3RGF0ZS5UQVYpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+QWRkIGZvdW5kIGluIG5ld3ZhbHVlIG51bWJlcnMoMiBvciAzIGxldHRlcnMpIHRvIGJ1ZmZlciBhbmQgcmV0dXJuXHJcbiAgLy8vIGxhc3QgZm91bmQgbnVtYmVyIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdXJyVmFsdWVcIj5pbiBuZXd2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiYnVmZmVyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGN1cnJWYWx1ZSBpbiBuZXd2YWx1ZTwvcmV0dXJucz5cclxuICBzdGF0aWMgYWRkMkRhdGUobmV3VmFsdWU6IHN0cmluZywgY3VyclZhbHVlOiBudW1iZXIsIGxldHRlcnM6IG51bWJlciwgYnVmZmVyOiBTdHJpbmdCdWlsZGVyKTogbnVtYmVyIHtcclxuICAgIGxldCBzdGFydDogbnVtYmVyID0gY3VyclZhbHVlO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBjdXJyQWRkOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIobmV3VmFsdWUubGVuZ3RoKTtcclxuXHJcbiAgICB3aGlsZSAoc3RhcnQgPCBuZXdWYWx1ZS5sZW5ndGggJiYgIUhlYnJld0RhdGUuaXNIZWJyZXdMZXR0ZXIobmV3VmFsdWUuY2hhckF0KHN0YXJ0KSkpXHJcbiAgICAgIHN0YXJ0ID0gc3RhcnQgKyAxOyAvLyBmaW5kIGZpcnN0IGhlYnJldyBsZXR0ZXJcclxuXHJcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgbGV0dGVycyAmJiBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKEhlYnJld0RhdGUuaXNIZWJyZXdMZXR0ZXIobmV3VmFsdWUuY2hhckF0KGkpKSB8fCBuZXdWYWx1ZS5jaGFyQXQoaSkgPT09ICcgJyB8fCBuZXdWYWx1ZS5jaGFyQXQoaSkgPT09ICdcIicgfHwgbmV3VmFsdWUuY2hhckF0KGkpID09PSAnXFwnJylcclxuICAgICAgICBidWZmZXIuQXBwZW5kKG5ld1ZhbHVlLmNoYXJBdChpKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ29udmVydCBhIEhlYnJldyBkYXRlICh5ZWFyLCBtb250aCwgZGF5KSB0byBNYWdpYyBpbnRlcm5hbCBkYXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ5ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtb250aFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGF5XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBkYXRlaGViXzJfZCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRheTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHJcbiAgICBpZiAoZGF5ID09PSAwICYmIG1vbnRoID09PSAwICYmIHllYXIgPT09IDApXHJcbiAgICAgIHJldHVybiAwO1xyXG5cclxuICAgIGlmIChkYXkgPT09IDAgfHwgbW9udGggPT09IDAgfHwgeWVhciA9PT0gMClcclxuICAgICAgcmV0dXJuIDEwMDAwMDAwMDA7XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBIb3cgbWFueSBkYXlzIGZyb20gY3JlYXRpb24sIHRvIGJlZ2luaW5nIG9mIHRoZSB5ZWFyID8gKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgbGV0IGRheXNfZnJvbV9jcmVhdGlvbjogbnVtYmVyID0gSGVicmV3RGF0ZS5kYXRlaGViX3llYXJfc3RhcnQoeWVhcik7XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogSG93IGRheXMgaW4gdGhlIHllYXIgPyAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgbGV0IGRheXNfaW5feWVhcjogbnVtYmVyID0gSGVicmV3RGF0ZS5kYXRlaGViX3llYXJfc3RhcnQoeWVhciArIDEpIC0gZGF5c19mcm9tX2NyZWF0aW9uO1xyXG4gICAgbGV0IGxlYXA6IGJvb2xlYW4gPSBkYXlzX2luX3llYXIgPiAzNTU7XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBBZGQgbW9udGggKyBkYXkgKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgaWYgKGxlYXAgJiYgbW9udGggPiBIZWJyZXdEYXRlLkFEQVIpXHJcbiAgICAgIGlmIChtb250aCA9PT0gSGVicmV3RGF0ZS5BREFSX0IpXHJcbiAgICAgICAgbW9udGggPSBIZWJyZXdEYXRlLkFEQVIgKyAxO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgbW9udGggPSBtb250aCArIDE7XHJcblxyXG4gICAgaWYgKGRheSA+IEhlYnJld0RhdGUuZGF0ZWhlYl9kYXlzX2luX21vbnRoKG1vbnRoLCBsZWFwLCBkYXlzX2luX3llYXIpKVxyXG4gICAgICByZXR1cm4gMTAwMDAwMDAwMDtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAxOyBpIDwgbW9udGg7IGkgPSBpICsgMSlcclxuICAgICAgZGF5c19mcm9tX2NyZWF0aW9uID0gZGF5c19mcm9tX2NyZWF0aW9uICsgSGVicmV3RGF0ZS5kYXRlaGViX2RheXNfaW5fbW9udGgoaSwgbGVhcCwgZGF5c19pbl95ZWFyKTtcclxuICAgIGRheXNfZnJvbV9jcmVhdGlvbiA9IGRheXNfZnJvbV9jcmVhdGlvbiArIGRheTtcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogQ29udmVydCB0byBDaHJpc3RpYW4gY2FsZW5kZXIgKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICByZXR1cm4gTWF0aC5tYXgoZGF5c19mcm9tX2NyZWF0aW9uIC0gSGVicmV3RGF0ZS5EQVlTX1RJTF9KRVNVUywgMCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVicmV3RGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvSGVicmV3RGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQVksYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE1BQU0sT0FBTyxVQUFVO0lBc0ViLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFZO1FBQzlDLElBQUksR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUN6QyxPQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFTTyxNQUFNLENBQUMscUJBQXFCLENBQUMsS0FBYSxFQUFFLElBQWEsRUFBRSxZQUFvQjtRQUNyRixJQUFJLGFBQWEsR0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFdkksSUFBSSxJQUFJO1lBQ04sWUFBWSxHQUFHLFlBQVksR0FBRyxFQUFFLENBQUM7UUFFbkMsUUFBUSxZQUFZLEVBQUU7WUFDcEIsS0FBSyxHQUFHO2dCQUNOLElBQUksS0FBSyxLQUFLLFVBQVUsQ0FBQyxNQUFNO29CQUM3QixhQUFhLEdBQUcs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Q0FBMEIsR0FBYTtJQUNwRCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0NBQ2xELENBQUM7QUFDYSxxQ0FBMEIsR0FBYTtJQUNwRCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0NBQ25ELENBQUM7QUFFYSxvQkFBUyxHQUFXLENBQUMsQ0FBQztBQUN0Qix1QkFBWSxHQUFhLElBQUksS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLGtCQUFPLEdBQVcsQ0FBQyxDQUFDO0FBQ3BCLHFCQUFVLEdBQWEsSUFBSSxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudHMgfSBmcm9tICcuLi8uLi9FdmVudHMnO1xyXG5pbXBvcnQgeyBNc2dJbnRlcmZhY2UgfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHsgUmVmUGFyYW0sIFN0cmluZ0J1aWxkZXIgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IE1lbW9yeVV0aWwgfSBmcm9tICcuLi8uLi91dGlsL01lbW9yeVV0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEhlYnJld0RhdGUge1xyXG4gIHByaXZhdGUgc3RhdGljIFBBUlRTX1BFUl9IT1VSOiBudW1iZXIgPSAxMDgwO1xyXG4gIHByaXZhdGUgc3RhdGljIEhPVVJTX1BFUl9EQVk6IG51bWJlciA9IDI0O1xyXG4gIHByaXZhdGUgc3RhdGljIFBBUlRTX1BFUl9EQVk6IG51bWJlciA9IChIZWJyZXdEYXRlLkhPVVJTX1BFUl9EQVkgKiBIZWJyZXdEYXRlLlBBUlRTX1BFUl9IT1VSKTtcclxuICBwcml2YXRlIHN0YXRpYyBNT05USF9EQVlTOiBudW1iZXIgPSAyOTtcclxuICBwcml2YXRlIHN0YXRpYyBNT05USF9FWFRSQV9QQVJUUzogbnVtYmVyID0gKDEyICogSGVicmV3RGF0ZS5QQVJUU19QRVJfSE9VUiArIDc5Myk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEFSVFNfUEVSX01PTlRIOiBudW1iZXIgPSAoSGVicmV3RGF0ZS5NT05USF9EQVlTICogSGVicmV3RGF0ZS5QQVJUU19QRVJfREFZICsgSGVicmV3RGF0ZS5NT05USF9FWFRSQV9QQVJUUyk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTU9OVEhTX1BFUl9OT1JNX1lFQVI6IG51bWJlciA9IDEyO1xyXG4gIHByaXZhdGUgc3RhdGljIE1PTlRIU19QRVJfTEVBUF9ZRUFSOiBudW1iZXIgPSAxMztcclxuICBwcml2YXRlIHN0YXRpYyBOT1JNX1lFQVJTX1BFUl9DWUNMRTogbnVtYmVyID0gMTI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTEVBUF9ZRUFSU19QRVJfQ1lDTEU6IG51bWJlciA9IDc7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgWUVBUlNfUEVSX0NZQ0xFOiBudW1iZXIgPSAoSGVicmV3RGF0ZS5OT1JNX1lFQVJTX1BFUl9DWUNMRSArIEhlYnJld0RhdGUuTEVBUF9ZRUFSU19QRVJfQ1lDTEUpO1xyXG4gIHByaXZhdGUgc3RhdGljIE1PTlRIU19QRVJfQ1lDTEU6IG51bWJlciA9IChIZWJyZXdEYXRlLk5PUk1fWUVBUlNfUEVSX0NZQ0xFICogSGVicmV3RGF0ZS5NT05USFNfUEVSX05PUk1fWUVBUiArIEhlYnJld0RhdGUuTEVBUF9ZRUFSU19QRVJfQ1lDTEUgKiBIZWJyZXdEYXRlLk1PTlRIU19QRVJfTEVBUF9ZRUFSKTtcclxuICBwcml2YXRlIHN0YXRpYyBQQVJUU19QRVJfTk9STV9ZRUFSOiBudW1iZXIgPSAoSGVicmV3RGF0ZS5NT05USFNfUEVSX05PUk1fWUVBUiAqIEhlYnJld0RhdGUuUEFSVFNfUEVSX01PTlRIKTtcclxuICBwcml2YXRlIHN0YXRpYyBEQVlTX1BFUl9OT1JNX1lFQVI6IG51bWJlciA9IE1hdGguZmxvb3IoSGVicmV3RGF0ZS5QQVJUU19QRVJfTk9STV9ZRUFSIC8gSGVicmV3RGF0ZS5QQVJUU19QRVJfREFZKTtcclxuICBwcml2YXRlIHN0YXRpYyBQQVJUU19QRVJfTEVBUF9ZRUFSOiBudW1iZXIgPSAoSGVicmV3RGF0ZS5NT05USFNfUEVSX0xFQVBfWUVBUiAqIEhlYnJld0RhdGUuUEFSVFNfUEVSX01PTlRIKTtcclxuICBwcml2YXRlIHN0YXRpYyBEQVlTX1BFUl9MRUFQX1lFQVI6IG51bWJlciA9IE1hdGguZmxvb3IoSGVicmV3RGF0ZS5QQVJUU19QRVJfTEVBUF9ZRUFSIC8gSGVicmV3RGF0ZS5QQVJUU19QRVJfREFZKTtcclxuICBwcml2YXRlIHN0YXRpYyBQQVJUU19QRVJfQ1lDTEU6IG51bWJlciA9IChIZWJyZXdEYXRlLk1PTlRIU19QRVJfQ1lDTEUgKiBIZWJyZXdEYXRlLlBBUlRTX1BFUl9NT05USCk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgREFZU19QRVJfQ1lDTEU6IG51bWJlciA9IE1hdGguZmxvb3IoSGVicmV3RGF0ZS5QQVJUU19QRVJfQ1lDTEUgLyBIZWJyZXdEYXRlLlBBUlRTX1BFUl9EQVkpO1xyXG4gIHByaXZhdGUgc3RhdGljIENSRUFUSU9OX0RPVzogbnVtYmVyID0gMjtcclxuICBwcml2YXRlIHN0YXRpYyBDUkVBVElPTl9QQVJUUzogbnVtYmVyID0gKDUgKiBIZWJyZXdEYXRlLlBBUlRTX1BFUl9IT1VSICsgMjA0KTtcclxuICBwcml2YXRlIHN0YXRpYyBEQVlTX1RJTF9KRVNVUzogbnVtYmVyID0gMTM3MzQyODtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgSEVTSFZBTjogbnVtYmVyID0gMjtcclxuICBwcml2YXRlIHN0YXRpYyBLSVNMRVY6IG51bWJlciA9IDM7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQURBUjogbnVtYmVyID0gNjtcclxuICBwcml2YXRlIHN0YXRpYyBBREFSX0I6IG51bWJlciA9IDEzO1xyXG5cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAvKiBIZWJyZXcgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBlYWNoIEhlYnJldyBsZXR0ZXIgKi9cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBwcml2YXRlIHN0YXRpYyBEQVRFSEVCX2xldHRlcnM6IG51bWJlcltdID0gW1xyXG4gICAgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDIwLCAyMCwgMzAsIDQwLCA0MCwgNTAsIDUwLCA2MCwgNzAsXHJcbiAgICA4MCwgODAsIDkwLCA5MCwgMTAwLCAyMDAsIDMwMCwgNDAwXHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUxFRjogc3RyaW5nID0gJ9eQJztcclxuICBwcml2YXRlIHN0YXRpYyBUQVY6IHN0cmluZyA9ICfXqic7XHJcblxyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIC8qIE4gb2YgTW9udGhzIGZyb20gYmVnaW5uaW5nIG9mIDE5IHllYXJzIGN5Y2xlLCB0byAqL1xyXG4gIC8qIHRoZSBiZWdpbm5pbmcgb2YgYSB5ZWFyIChpbiB0aGUgcmFuZ2UgMCAtIDE4KSAgICAqL1xyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIHByaXZhdGUgc3RhdGljIERBVEVIRUJfbW9udGhzX246IG51bWJlcltdID0gW1xyXG4gICAgMCwgMTIsIDI0LCAzNywgNDksIDYxLCA3NCwgODYsIDk5LCAxMTEsIDEyMywgMTM2LCAxNDgsIDE2MCwgMTczLCAxODUsIDE5NywgMjEwLCAyMjIsXHJcbiAgICAyMzVcclxuICBdO1xyXG5cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICAvKiBOIG9mIGRheXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgeWVhciB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbW9udGggKi9cclxuICAvKiBUaXNocmVpLCBIZXNodmFuLCBLaXNsZXYsIFRldmV0LCBTaHZhdCwgQWRhciwgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAvKiBOaXNhbiwgICBJeWFyLCAgICBTaXZhbiwgIFRhbXV6LCBBdiwgICAgRWx1bCAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBwcml2YXRlIHN0YXRpYyBEQVRFSEVCX25vcm1fZGF5c19pbl9tb250aDogbnVtYmVyW10gPSBbXHJcbiAgICAzMCwgMjksIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOSwgMzAsIDI5LCAwXHJcbiAgXTtcclxuICBwcml2YXRlIHN0YXRpYyBEQVRFSEVCX2xlYXBfZGF5c19pbl9tb250aDogbnVtYmVyW10gPSBbXHJcbiAgICAzMCwgMjksIDMwLCAyOSwgMzAsIDMwLCAyOSwgMzAsIDI5LCAzMCwgMjksIDMwLCAyOVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIE1PTlRIX0xFTjogbnVtYmVyID0gNTtcclxuICBwcml2YXRlIHN0YXRpYyBfbG9jYWxNb250aHM6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oMTUpO1xyXG4gIHByaXZhdGUgc3RhdGljIERPV19MRU46IG51bWJlciA9IDU7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvY2FsRG93czogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPig4KTtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjYWxjdWxhdGUgaWYgeWVhciBpcyBsZWFwXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ5ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGRhdGVoZWJfeWVhcl9pc19sZWFwKHllYXI6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgeWVhciA9IHllYXIgJSBIZWJyZXdEYXRlLllFQVJTX1BFUl9DWUNMRTtcclxuICAgIHJldHVybiAoSGVicmV3RGF0ZS5EQVRFSEVCX21vbnRoc19uWyh5ZWFyICsgMSldIC0gSGVicmV3RGF0ZS5EQVRFSEVCX21vbnRoc19uW3llYXJdID09PSAxMyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNhbGN1bGF0ZSBkYXlzIGluIG1vbnRoXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtb250aFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGVhcFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGF5c19pbl95ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGRhdGVoZWJfZGF5c19pbl9tb250aChtb250aDogbnVtYmVyLCBsZWFwOiBib29sZWFuLCBkYXlzX2luX3llYXI6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgZGF5c19pbl9tb250aDogbnVtYmVyID0gbGVhcCA/IEhlYnJld0RhdGUuREFURUhFQl9sZWFwX2RheXNfaW5fbW9udGhbbW9udGggLSAxXSA6IEhlYnJld0RhdGUuREFURUhFQl9ub3JtX2RheXNfaW5fbW9udGhbbW9udGggLSAxXTtcclxuXHJcbiAgICBpZiAobGVhcClcclxuICAgICAgZGF5c19pbl95ZWFyID0gZGF5c19pbl95ZWFyIC0gMzA7XHJcblxyXG4gICAgc3dpdGNoIChkYXlzX2luX3llYXIpIHtcclxuICAgICAgY2FzZSAzNTM6XHJcbiAgICAgICAgaWYgKG1vbnRoID09PSBIZWJyZXdEYXRlLktJU0xFVilcclxuICAgICAgICAgIGRheXNfaW5fbW9udGggPSAyOTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzNTU6XHJcbiAgICAgICAgaWYgKG1vbnRoID09PSBIZWJyZXdEYXRlLkhFU0hWQU4pXHJcbiAgICAgICAgICBkYXlzX2luX21vbnRoID0gMzA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF5c19pbl9tb250aDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY2FsY3VsYXRlIGRheXMgZnJvbSBjcmVhdGlvbiB0aWxsIHN0YXJ0IG9mIHRoZSB5ZWFyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ5ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGRhdGVoZWJfeWVhcl9zdGFydCh5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIGNhbGN1bGF0ZSBcIm1vbGFkXCIgb2YgeWVhciAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgeWVhciA9IHllYXIgLSAxO1xyXG4gICAgbGV0IGN5Y2xlOiBudW1iZXIgPSBNYXRoLmZsb29yKHllYXIgLyBIZWJyZXdEYXRlLllFQVJTX1BFUl9DWUNMRSk7XHJcbiAgICB5ZWFyID0geWVhciAlIEhlYnJld0RhdGUuWUVBUlNfUEVSX0NZQ0xFO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIEhvdyBtYW55IG1vbnRocyBwYXNzZWQgc2luY2UgY3JlYXRpb24gKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGxldCBtb250aHM6IG51bWJlciA9IGN5Y2xlICogSGVicmV3RGF0ZS5NT05USFNfUEVSX0NZQ0xFICsgSGVicmV3RGF0ZS5EQVRFSEVCX21vbnRoc19uW3llYXJdO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBIb3cgbWFueSBkYXlzIHBhc3NlZCBzaW5jZSBjcmVhdGlvbiAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGxldCBkYXlzOiBudW1iZXIgPSBtb250aHMgKiBIZWJyZXdEYXRlLk1PTlRIX0RBWVM7XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBIb3cgbWFueSBleHRyYSBwYXJ0cyBwYXNzZWQgc2luY2UgY3JlYXRpb24gKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgbGV0IHBhcnRzOiBudW1iZXIgPSBtb250aHMgKiBIZWJyZXdEYXRlLk1PTlRIX0VYVFJBX1BBUlRTICsgSGVicmV3RGF0ZS5DUkVBVElPTl9QQVJUUztcclxuXHJcbiAgICBkYXlzID0gZGF5cyArIE1hdGguZmxvb3IocGFydHMgLyBIZWJyZXdEYXRlLlBBUlRTX1BFUl9EQVkpO1xyXG4gICAgcGFydHMgPSBwYXJ0cyAlIEhlYnJld0RhdGUuUEFSVFNfUEVSX0RBWTtcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAvKiBSZW1pbmRlciA+IDMvNCBvZiBhIGRheSA/ICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBpZiAoPG51bWJlcj5wYXJ0cyA+PSBNYXRoLmZsb29yKEhlYnJld0RhdGUuUEFSVFNfUEVSX0RBWSAqIDMgLyA0KSkge1xyXG4gICAgICBwYXJ0cyA9IDA7XHJcbiAgICAgIGRheXMgPSBkYXlzICsgMTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIHZlcmlmeSBkYXktb2Ytd2VlayBub3QgU3VuZGF5LCBXZWRuZXNkYXksIEZyaWRheSAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBsZXQgZG93OiBudW1iZXIgPSAoZGF5cyAtIDEgKyBIZWJyZXdEYXRlLkNSRUFUSU9OX0RPVykgJSA3ICsgMTtcclxuICAgIGlmICgoZG93ID09PSAxKSB8fCAoZG93ID09PSA0KSB8fCAoZG93ID09PSA2KSkge1xyXG4gICAgICBwYXJ0cyA9IDA7XHJcbiAgICAgIGRheXMgPSBkYXlzICsgMTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogdmVyaWZ5IGlmIHllYXIgdG9vIGxvbmcvbG9uZyAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGlmICghSGVicmV3RGF0ZS5kYXRlaGViX3llYXJfaXNfbGVhcCg8bnVtYmVyPnllYXIpKSB7XHJcbiAgICAgIGlmIChkb3cgPT09IDMgJiYgPG51bWJlcj5wYXJ0cyA+PSAoOSAqIEhlYnJld0RhdGUuUEFSVFNfUEVSX0hPVVIgKyAyMDQpKVxyXG4gICAgICAgIGRheXMgPSBkYXlzICsgMjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoSGVicmV3RGF0ZS5kYXRlaGViX3llYXJfaXNfbGVhcCg8bnVtYmVyPnllYXIgKyBIZWJyZXdEYXRlLllFQVJTX1BFUl9DWUNMRSAtIDEpKSB7XHJcbiAgICAgIGlmIChkb3cgPT09IDIgJiYgPG51bWJlcj5wYXJ0cyA+PSAoMTUgKiBIZWJyZXdEYXRlLlBBUlRTX1BFUl9IT1VSICsgNTg5KSlcclxuICAgICAgICBkYXlzID0gZGF5cyArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRheXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENvbnZlcnQgYSBNYWdpYyBpbnRlcm5hbCBEYXRlIHRvIGEgSGVicmV3IGRhdGUgKHllYXIsIG1vbnRoLCBkYXkpXHJcbiAgLy8vIE5vdGUgdGhhdCBBREFSX0IgaXMgcmVwcmVzZW50ZWQgYnkgbW9udGggPSAxM1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGF0ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaGRheVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaG1vbnRoXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJoeWVhclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlRSVUUgaWYgbGVhcCB5ZWFyPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBkYXRlaGViXzRfZChkYXRlOiBudW1iZXIsIGRheTogUmVmUGFyYW08bnVtYmVyPiwgbW9udGg6IFJlZlBhcmFtPG51bWJlcj4sIHllYXI6IFJlZlBhcmFtPG51bWJlcj4pOiBib29sZWFuIHtcclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogRGF5cyBmcm9tIGNyZWF0aW9uICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGRhdGUgPSBkYXRlICsgSGVicmV3RGF0ZS5EQVlTX1RJTF9KRVNVUztcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIEd1ZXNzIGEgeWVhciAoPD0gY29ycmVjdCB5ZWFyKSAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBsZXQgY3ljbGU6IG51bWJlciA9IE1hdGguZmxvb3IoZGF0ZSAvIChIZWJyZXdEYXRlLkRBWVNfUEVSX0NZQ0xFICsgMSkpO1xyXG4gICAgbGV0IGRheXM6IG51bWJlciA9IGRhdGUgJSAoSGVicmV3RGF0ZS5EQVlTX1BFUl9DWUNMRSArIDEpO1xyXG4gICAgeWVhci52YWx1ZSA9IGN5Y2xlICogSGVicmV3RGF0ZS5ZRUFSU19QRVJfQ1lDTEU7XHJcbiAgICB5ZWFyLnZhbHVlID0geWVhci52YWx1ZSArIE1hdGguZmxvb3IoZGF5cyAvIChIZWJyZXdEYXRlLkRBWVNfUEVSX0xFQVBfWUVBUiArIDEpKTtcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogQWR2YW5jZSB5ZWFyIHVudGlsIGNvcnJlY3QgKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBsZXQgbmV4dF95ZWFyX3N0YXJ0OiBudW1iZXI7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICBuZXh0X3llYXJfc3RhcnQgPSBIZWJyZXdEYXRlLmRhdGVoZWJfeWVhcl9zdGFydCh5ZWFyLnZhbHVlICsgMSk7XHJcbiAgICAgIGlmIChuZXh0X3llYXJfc3RhcnQgPj0gZGF0ZSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgeWVhci52YWx1ZSA9IHllYXIudmFsdWUgKyAxO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1cnJfeWVhcl9zdGFydDogbnVtYmVyID0gSGVicmV3RGF0ZS5kYXRlaGViX3llYXJfc3RhcnQoeWVhci52YWx1ZSk7XHJcbiAgICBkYXkudmFsdWUgPSBkYXRlIC0gY3Vycl95ZWFyX3N0YXJ0O1xyXG4gICAgbGV0IGRheXNfaW5feWVhcjogbnVtYmVyID0gbmV4dF95ZWFyX3N0YXJ0IC0gY3Vycl95ZWFyX3N0YXJ0O1xyXG4gICAgbGV0IGxlYXA6IGJvb2xlYW4gPSBkYXlzX2luX3llYXIgPiAzNTU7XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogRmluZCBNb250aCAqL1xyXG4gICAgLyotLS0tLS0tLS0tLS0qL1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGZvciAoaSA9IDE7IGkgPCAxMzsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBkYXlzX2luX21vbnRoOiBudW1iZXIgPSBIZWJyZXdEYXRlLmRhdGVoZWJfZGF5c19pbl9tb250aChpLCBsZWFwLCBkYXlzX2luX3llYXIpO1xyXG4gICAgICBpZiAoZGF5LnZhbHVlIDw9IGRheXNfaW5fbW9udGgpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRheS52YWx1ZSA9IGRheS52YWx1ZSAtIGRheXNfaW5fbW9udGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFsZWFwIHx8IGkgPD0gSGVicmV3RGF0ZS5BREFSKVxyXG4gICAgICBtb250aC52YWx1ZSA9IGk7XHJcbiAgICBlbHNlIGlmIChpID09PSBIZWJyZXdEYXRlLkFEQVIgKyAxKVxyXG4gICAgICBtb250aC52YWx1ZSA9IEhlYnJld0RhdGUuQURBUl9CO1xyXG4gICAgZWxzZVxyXG4gICAgICBtb250aC52YWx1ZSA9IGkgLSAxO1xyXG5cclxuICAgIHJldHVybiBsZWFwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDb21wdXRlIGEgSGVicmV3IGxldHRlciB0byBhZGQgdG8gc3RyaW5nLCByZXByZXNlbnRpbmcgYSBudW1lcmljIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyUG9zXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ1c2VfZW5kaW5nXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJxdW90ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgZGF0ZWhlYl9pXzJfaCh2YWw6IG51bWJlciwgc3RyOiBzdHJpbmdbXSwgc3RyUG9zOiBudW1iZXIsIHVzZV9lbmRpbmc6IGJvb2xlYW4sIHF1b3RlOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGxldCBsZXRfaWR4OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gMDtcclxuXHJcbiAgICB3aGlsZSAodmFsID4gMCkge1xyXG4gICAgICBmb3IgKGxldF9pZHggPSBIZWJyZXdEYXRlLkRBVEVIRUJfbGV0dGVycy5sZW5ndGg7IGxldF9pZHggPiAwOyBsZXRfaWR4ID0gbGV0X2lkeCAtIDEpIHtcclxuICAgICAgICBsZXQgbGV0dGVyOiBudW1iZXIgPSBIZWJyZXdEYXRlLkRBVEVIRUJfbGV0dGVyc1tsZXRfaWR4IC0gMV07XHJcbiAgICAgICAgaWYgKHZhbCA+PSBsZXR0ZXIpIHtcclxuICAgICAgICAgIHZhbCA9IHZhbCAtIGxldHRlcjtcclxuICAgICAgICAgIHN0cltzdHJQb3MrK10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKEhlYnJld0RhdGUuQUxFRi5jaGFyQ29kZUF0KDApICsgbGV0X2lkeCAtIDEpO1xyXG4gICAgICAgICAgbGVuID0gbGVuICsgMTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgIGlmIChsZW4gPj0gMikge1xyXG4gICAgICAgIGlmIChzdHJbc3RyUG9zIC0gMl0gPT09ICfXmScpXHJcbiAgICAgICAgICBpZiAoc3RyW3N0clBvcyAtIDFdID09PSAn15QnIHx8IHN0cltzdHJQb3MgLSAxXSA9PT0gJ9eVJykge1xyXG4gICAgICAgICAgICBzdHJbc3RyUG9zIC0gMl0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHN0cltzdHJQb3MgLSAyXS5jaGFyQ29kZUF0KDApIC0gMSk7XHJcbiAgICAgICAgICAgIHN0cltzdHJQb3MgLSAxXSA9IHN0cltzdHJQb3MgLSAxXSArICdcXHUwMDAxJztcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRmluYWwgbGV0dGVyczogb25seSBmcm9tICfXnicuXHJcbiAgICAgIGlmIChsZXRfaWR4ID4gMTAgJiYgdXNlX2VuZGluZykge1xyXG4gICAgICAgIGlmIChIZWJyZXdEYXRlLkRBVEVIRUJfbGV0dGVyc1tsZXRfaWR4IC0gMV0gPT09IEhlYnJld0RhdGUuREFURUhFQl9sZXR0ZXJzW2xldF9pZHggLSAyXSkge1xyXG4gICAgICAgICAgc3RyW3N0clBvcyAtIDFdID0gU3RyaW5nLmZyb21DaGFyQ29kZShzdHJbc3RyUG9zIC0gMV0uY2hhckNvZGVBdCgwKSAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHF1b3RlKSB7XHJcbiAgICAgICAgaWYgKGxlbiA9PT0gMSlcclxuICAgICAgICAgIHN0cltzdHJQb3NdID0gJ1xcJyc7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBzdHJbc3RyUG9zXSA9IHN0cltzdHJQb3MgLSAxXTtcclxuICAgICAgICAgIHN0cltzdHJQb3MgLSAxXSA9ICdcIic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbiA9IGxlbiArIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsZW47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENvbnZlcnQgSGVicmV3IHllYXIvZGF5IHRvIGEgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvdXRTdHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxlblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZnVsbF9sZW5cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImh5ZWFyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0cmltXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ1c2VfZW5kaW5nXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+bGVuZ3RoPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBkYXRlaGViXzJfc3RyKG91dFN0cjogc3RyaW5nW10sIHN0clBvczogbnVtYmVyLCBsZW46IG51bWJlciwgb3V0X2xlbjogUmVmUGFyYW08bnVtYmVyPiwgZnVsbF9sZW46IG51bWJlciwgaHllYXI6IG51bWJlciwgdHJpbTogYm9vbGVhbiwgdXNlX2VuZGluZzogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgcXVvdGU6IGJvb2xlYW4gPSBsZW4gPiBmdWxsX2xlbiAmJiBvdXRTdHJbc3RyUG9zICsgZnVsbF9sZW5dID09PSBvdXRTdHJbc3RyUG9zXTtcclxuICAgIGlmIChxdW90ZSlcclxuICAgICAgZnVsbF9sZW4gPSBmdWxsX2xlbiArIDE7XHJcbiAgICBsZXQgaGViX2xlbjogbnVtYmVyID0gSGVicmV3RGF0ZS5kYXRlaGViX2lfMl9oKGh5ZWFyICUgMTAwMCwgb3V0U3RyLCBzdHJQb3MsIHVzZV9lbmRpbmcsIHF1b3RlKTtcclxuXHJcbiAgICBsZXQgcmVtX2xlbjogbnVtYmVyID0gZnVsbF9sZW4gLSBoZWJfbGVuO1xyXG4gICAgaWYgKHJlbV9sZW4gPiAwKSB7XHJcbiAgICAgIGlmICh0cmltKSB7XHJcbiAgICAgICAgb3V0X2xlbi52YWx1ZSA9IG91dF9sZW4udmFsdWUgLSByZW1fbGVuO1xyXG4gICAgICAgIGxldCB0bXBfb3V0X2xlbjogbnVtYmVyID0gbGVuIC0gZnVsbF9sZW47XHJcbiAgICAgICAgaWYgKHRtcF9vdXRfbGVuID4gMClcclxuICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1jcHkob3V0U3RyLCBzdHJQb3MgKyBoZWJfbGVuLCBvdXRTdHIsIHN0clBvcyArIGZ1bGxfbGVuLCB0bXBfb3V0X2xlbik7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaGViX2xlbiA9IGZ1bGxfbGVuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIERvIG5vdCBvdmVyIHRoZSBzdHJpbmcgbGVuZ3RoLiBJdCBtYXkgYmUgd2hlbiBZWVlZIGluIHRoZSBlbmQuIChEREQgTU1NTU0gWVlZWSlcclxuICAgICAgICBpZiAocmVtX2xlbiA+IG91dFN0ci5sZW5ndGggLSBzdHJQb3MgLSBoZWJfbGVuKVxyXG4gICAgICAgICAgcmVtX2xlbiA9IG91dFN0ci5sZW5ndGggLSBzdHJQb3MgLSBoZWJfbGVuO1xyXG4gICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0U3RyLCBzdHJQb3MgKyBoZWJfbGVuLCAnICcsIC8qJyAnKi9yZW1fbGVuKTtcclxuICAgICAgICBoZWJfbGVuID0gZnVsbF9sZW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoZWJfbGVuO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDdXQgdGhlIG1vbnRoIHN0cmluZyBmcm9tICdjb25zdCcgaW50byBzZXBhcmF0ZSB2YWx1ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIEdldExvY2FsTW9udGhzKCk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBtb250aExlbjogbnVtYmVyID0gSGVicmV3RGF0ZS5NT05USF9MRU47XHJcblxyXG4gICAgaWYgKEhlYnJld0RhdGUuX2xvY2FsTW9udGhzWzBdID09PSBudWxsKSB7XHJcbiAgICAgIGxldCBtb250aFN0cjogc3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLkRBVEVIRUJfTU9OVEhfU1RSKTtcclxuICAgICAgaWYgKG1vbnRoU3RyICE9PSBudWxsKSB7XHJcbiAgICAgICAgSGVicmV3RGF0ZS5fbG9jYWxNb250aHNbMF0gPSBcIiAgICAgICBcIjtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAxOyBpIDwgSGVicmV3RGF0ZS5fbG9jYWxNb250aHMubGVuZ3RoOyBpID0gaSArIDEpXHJcbiAgICAgICAgICBIZWJyZXdEYXRlLl9sb2NhbE1vbnRoc1tpXSA9IG1vbnRoU3RyLnN1YnN0cigoaSAtIDEpICogbW9udGhMZW4sIGkgKiBtb250aExlbiAtIChpIC0gMSkgKiBtb250aExlbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBIZWJyZXdEYXRlLl9sb2NhbE1vbnRocztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ3V0IHRoZSBkYXkgb2Ygd2VlayBzdHJpbmcgZnJvbSAnY29uc3QnIGludG8gc2VwYXJhdGUgdmFsdWVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRMb2NhbERvd3MoKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGRvd0xlbjogbnVtYmVyID0gSGVicmV3RGF0ZS5ET1dfTEVOO1xyXG5cclxuICAgIGlmIChIZWJyZXdEYXRlLl9sb2NhbERvd3NbMF0gPT09IG51bGwpIHtcclxuICAgICAgbGV0IGRvd3NTdHI6IHN0cmluZyA9IEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKE1zZ0ludGVyZmFjZS5EQVRFSEVCX0RPV19TVFIpO1xyXG4gICAgICBpZiAoZG93c1N0ciAhPT0gbnVsbCkge1xyXG4gICAgICAgIEhlYnJld0RhdGUuX2xvY2FsRG93c1swXSA9IFwiICAgICBcIjtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAxOyBpIDwgSGVicmV3RGF0ZS5fbG9jYWxEb3dzLmxlbmd0aDsgaSA9IGkgKyAxKVxyXG4gICAgICAgICAgSGVicmV3RGF0ZS5fbG9jYWxEb3dzW2ldID0gZG93c1N0ci5zdWJzdHIoKGkgLSAxKSAqIGRvd0xlbiwgaSAqIGRvd0xlbiAtIChpIC0gMSkgKiBkb3dMZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSGVicmV3RGF0ZS5fbG9jYWxEb3dzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDb252ZXJ0IGEgaGVicmV3IHN0cmluZyAtPiBpbnRlZ2VyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxlblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicG9zXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+Y29udmVydGVkIHRvIGludGVnZXI8L3JldHVybnM+XHJcbiAgc3RhdGljIGRhdGVoZWJfaF8yX2koc3RyOiBzdHJpbmdbXSwgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCB2YWw6IG51bWJlcjtcclxuICAgIGxldCBoYXNfMV90b185OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzXzEwX3RvXzkwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzXzEwMF90b18zMDA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjbnRfNDAwOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGxhc3RfdmFsOiBudW1iZXIgPSAxMDAwO1xyXG4gICAgbGV0IGxldF92YWw6IG51bWJlcjtcclxuXHJcbiAgICBmb3IgKHZhbCA9IDA7IGxlbiA+IDAgJiYgcG9zIDwgc3RyLmxlbmd0aDsgcG9zKyssIGxlbi0tKVxyXG4gICAgICBpZiAoc3RyW3Bvc10gPj0gSGVicmV3RGF0ZS5BTEVGICYmIHN0cltwb3NdIDw9IEhlYnJld0RhdGUuVEFWKSB7XHJcbiAgICAgICAgbGV0X3ZhbCA9IEhlYnJld0RhdGUuREFURUhFQl9sZXR0ZXJzWzxudW1iZXI+KHN0cltwb3NdLmNoYXJDb2RlQXQoMCkgLSBIZWJyZXdEYXRlLkFMRUYuY2hhckNvZGVBdCgwKSldO1xyXG4gICAgICAgIGlmIChsZXRfdmFsID4gbGFzdF92YWwpXHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuXHJcbiAgICAgICAgaWYgKGxldF92YWwgPT09IDQwMCkge1xyXG4gICAgICAgICAgaWYgKGNudF80MDAgPT09IDIpXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgY250XzQwMCA9IGNudF80MDAgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsZXRfdmFsID49IDEwMCkge1xyXG4gICAgICAgICAgaWYgKGhhc18xMDBfdG9fMzAwKVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgIGhhc18xMDBfdG9fMzAwID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGxldF92YWwgPj0gMTApIHtcclxuICAgICAgICAgIGlmIChoYXNfMTBfdG9fOTApXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgaGFzXzEwX3RvXzkwID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoaGFzXzFfdG9fOSkge1xyXG4gICAgICAgICAgICBpZiAoaGFzXzEwX3RvXzkwIHx8IGxhc3RfdmFsICE9PSA5KVxyXG4gICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICBpZiAobGV0X3ZhbCAhPT0gNiAmJiBsZXRfdmFsICE9PSA3KVxyXG4gICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaGFzXzFfdG9fOSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhbCA9IHZhbCArIGxldF92YWw7XHJcbiAgICAgICAgbGFzdF92YWwgPSBsZXRfdmFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGEgSGVicmV3IGxldHRlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGV0dGVyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBpc0hlYnJld0xldHRlcihsZXR0ZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGxldHRlciA+PSBIZWJyZXdEYXRlLkFMRUYgJiYgbGV0dGVyIDw9IEhlYnJld0RhdGUuVEFWKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkFkZCBmb3VuZCBpbiBuZXd2YWx1ZSBudW1iZXJzKDIgb3IgMyBsZXR0ZXJzKSB0byBidWZmZXIgYW5kIHJldHVyblxyXG4gIC8vLyBsYXN0IGZvdW5kIG51bWJlciBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3VyclZhbHVlXCI+aW4gbmV3dmFsdWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImJ1ZmZlclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBjdXJyVmFsdWUgaW4gbmV3dmFsdWU8L3JldHVybnM+XHJcbiAgc3RhdGljIGFkZDJEYXRlKG5ld1ZhbHVlOiBzdHJpbmcsIGN1cnJWYWx1ZTogbnVtYmVyLCBsZXR0ZXJzOiBudW1iZXIsIGJ1ZmZlcjogU3RyaW5nQnVpbGRlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhcnQ6IG51bWJlciA9IGN1cnJWYWx1ZTtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgY3VyckFkZDogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKG5ld1ZhbHVlLmxlbmd0aCk7XHJcblxyXG4gICAgd2hpbGUgKHN0YXJ0IDwgbmV3VmFsdWUubGVuZ3RoICYmICFIZWJyZXdEYXRlLmlzSGVicmV3TGV0dGVyKG5ld1ZhbHVlLmNoYXJBdChzdGFydCkpKVxyXG4gICAgICBzdGFydCA9IHN0YXJ0ICsgMTsgLy8gZmluZCBmaXJzdCBoZWJyZXcgbGV0dGVyXHJcblxyXG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCArIGxldHRlcnMgJiYgaSA8IG5ld1ZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChIZWJyZXdEYXRlLmlzSGVicmV3TGV0dGVyKG5ld1ZhbHVlLmNoYXJBdChpKSkgfHwgbmV3VmFsdWUuY2hhckF0KGkpID09PSAnICcgfHwgbmV3VmFsdWUuY2hhckF0KGkpID09PSAnXCInIHx8IG5ld1ZhbHVlLmNoYXJBdChpKSA9PT0gJ1xcJycpXHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChuZXdWYWx1ZS5jaGFyQXQoaSkpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENvbnZlcnQgYSBIZWJyZXcgZGF0ZSAoeWVhciwgbW9udGgsIGRheSkgdG8gTWFnaWMgaW50ZXJuYWwgZGF0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwieWVhclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibW9udGhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRheVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgZGF0ZWhlYl8yX2QoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlcik6IG51bWJlciB7XHJcblxyXG4gICAgaWYgKGRheSA9PT0gMCAmJiBtb250aCA9PT0gMCAmJiB5ZWFyID09PSAwKVxyXG4gICAgICByZXR1cm4gMDtcclxuXHJcbiAgICBpZiAoZGF5ID09PSAwIHx8IG1vbnRoID09PSAwIHx8IHllYXIgPT09IDApXHJcbiAgICAgIHJldHVybiAxMDAwMDAwMDAwO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogSG93IG1hbnkgZGF5cyBmcm9tIGNyZWF0aW9uLCB0byBiZWdpbmluZyBvZiB0aGUgeWVhciA/ICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGxldCBkYXlzX2Zyb21fY3JlYXRpb246IG51bWJlciA9IEhlYnJld0RhdGUuZGF0ZWhlYl95ZWFyX3N0YXJ0KHllYXIpO1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIEhvdyBkYXlzIGluIHRoZSB5ZWFyID8gKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGxldCBkYXlzX2luX3llYXI6IG51bWJlciA9IEhlYnJld0RhdGUuZGF0ZWhlYl95ZWFyX3N0YXJ0KHllYXIgKyAxKSAtIGRheXNfZnJvbV9jcmVhdGlvbjtcclxuICAgIGxldCBsZWFwOiBib29sZWFuID0gZGF5c19pbl95ZWFyID4gMzU1O1xyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogQWRkIG1vbnRoICsgZGF5ICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIGlmIChsZWFwICYmIG1vbnRoID4gSGVicmV3RGF0ZS5BREFSKVxyXG4gICAgICBpZiAobW9udGggPT09IEhlYnJld0RhdGUuQURBUl9CKVxyXG4gICAgICAgIG1vbnRoID0gSGVicmV3RGF0ZS5BREFSICsgMTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIG1vbnRoID0gbW9udGggKyAxO1xyXG5cclxuICAgIGlmIChkYXkgPiBIZWJyZXdEYXRlLmRhdGVoZWJfZGF5c19pbl9tb250aChtb250aCwgbGVhcCwgZGF5c19pbl95ZWFyKSlcclxuICAgICAgcmV0dXJuIDEwMDAwMDAwMDA7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMTsgaSA8IG1vbnRoOyBpID0gaSArIDEpXHJcbiAgICAgIGRheXNfZnJvbV9jcmVhdGlvbiA9IGRheXNfZnJvbV9jcmVhdGlvbiArIEhlYnJld0RhdGUuZGF0ZWhlYl9kYXlzX2luX21vbnRoKGksIGxlYXAsIGRheXNfaW5feWVhcik7XHJcbiAgICBkYXlzX2Zyb21fY3JlYXRpb24gPSBkYXlzX2Zyb21fY3JlYXRpb24gKyBkYXk7XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgIC8qIENvbnZlcnQgdG8gQ2hyaXN0aWFuIGNhbGVuZGVyICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KGRheXNfZnJvbV9jcmVhdGlvbiAtIEhlYnJld0RhdGUuREFZU19USUxfSkVTVVMsIDApO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|