@dcl/sdk 7.0.0-2965783764.commit-18f9e1c → 7.0.0-2966684214.commit-a567432
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/dist/ecs7/index.js
CHANGED
@@ -4093,7 +4093,7 @@
|
|
4093
4093
|
/**
|
4094
4094
|
* @internal
|
4095
4095
|
*/
|
4096
|
-
const COMPONENT_ID$
|
4096
|
+
const COMPONENT_ID$q = 1042;
|
4097
4097
|
/**
|
4098
4098
|
* @internal
|
4099
4099
|
*/
|
@@ -4172,7 +4172,7 @@
|
|
4172
4172
|
/**
|
4173
4173
|
* @internal
|
4174
4174
|
*/
|
4175
|
-
const COMPONENT_ID$
|
4175
|
+
const COMPONENT_ID$p = 1020;
|
4176
4176
|
/**
|
4177
4177
|
* @internal
|
4178
4178
|
*/
|
@@ -4241,7 +4241,7 @@
|
|
4241
4241
|
/**
|
4242
4242
|
* @internal
|
4243
4243
|
*/
|
4244
|
-
const COMPONENT_ID$
|
4244
|
+
const COMPONENT_ID$o = 1073;
|
4245
4245
|
/**
|
4246
4246
|
* @internal
|
4247
4247
|
*/
|
@@ -4369,7 +4369,7 @@
|
|
4369
4369
|
/**
|
4370
4370
|
* @internal
|
4371
4371
|
*/
|
4372
|
-
const COMPONENT_ID$
|
4372
|
+
const COMPONENT_ID$n = 1070;
|
4373
4373
|
/**
|
4374
4374
|
* @internal
|
4375
4375
|
*/
|
@@ -5903,7 +5903,7 @@
|
|
5903
5903
|
/**
|
5904
5904
|
* @internal
|
5905
5905
|
*/
|
5906
|
-
const COMPONENT_ID$
|
5906
|
+
const COMPONENT_ID$m = 1080;
|
5907
5907
|
/**
|
5908
5908
|
* @internal
|
5909
5909
|
*/
|
@@ -5970,7 +5970,7 @@
|
|
5970
5970
|
/**
|
5971
5971
|
* @internal
|
5972
5972
|
*/
|
5973
|
-
const COMPONENT_ID$
|
5973
|
+
const COMPONENT_ID$l = 1090;
|
5974
5974
|
/**
|
5975
5975
|
* @internal
|
5976
5976
|
*/
|
@@ -6053,7 +6053,7 @@
|
|
6053
6053
|
/**
|
6054
6054
|
* @internal
|
6055
6055
|
*/
|
6056
|
-
const COMPONENT_ID$
|
6056
|
+
const COMPONENT_ID$k = 1013;
|
6057
6057
|
/**
|
6058
6058
|
* @internal
|
6059
6059
|
*/
|
@@ -6107,7 +6107,7 @@
|
|
6107
6107
|
/**
|
6108
6108
|
* @internal
|
6109
6109
|
*/
|
6110
|
-
const COMPONENT_ID$
|
6110
|
+
const COMPONENT_ID$j = 1072;
|
6111
6111
|
/**
|
6112
6112
|
* @internal
|
6113
6113
|
*/
|
@@ -6167,7 +6167,7 @@
|
|
6167
6167
|
/**
|
6168
6168
|
* @internal
|
6169
6169
|
*/
|
6170
|
-
const COMPONENT_ID$
|
6170
|
+
const COMPONENT_ID$i = 1071;
|
6171
6171
|
/**
|
6172
6172
|
* @internal
|
6173
6173
|
*/
|
@@ -6252,7 +6252,7 @@
|
|
6252
6252
|
/**
|
6253
6253
|
* @internal
|
6254
6254
|
*/
|
6255
|
-
const COMPONENT_ID$
|
6255
|
+
const COMPONENT_ID$h = 1016;
|
6256
6256
|
/**
|
6257
6257
|
* @internal
|
6258
6258
|
*/
|
@@ -6325,7 +6325,7 @@
|
|
6325
6325
|
/**
|
6326
6326
|
* @internal
|
6327
6327
|
*/
|
6328
|
-
const COMPONENT_ID$
|
6328
|
+
const COMPONENT_ID$g = 1041;
|
6329
6329
|
/**
|
6330
6330
|
* @internal
|
6331
6331
|
*/
|
@@ -6554,7 +6554,7 @@
|
|
6554
6554
|
/**
|
6555
6555
|
* @internal
|
6556
6556
|
*/
|
6557
|
-
const COMPONENT_ID$
|
6557
|
+
const COMPONENT_ID$f = 1017;
|
6558
6558
|
/**
|
6559
6559
|
* @internal
|
6560
6560
|
*/
|
@@ -6573,6 +6573,204 @@
|
|
6573
6573
|
}
|
6574
6574
|
};
|
6575
6575
|
|
6576
|
+
/* eslint-disable */
|
6577
|
+
var ColliderLayer;
|
6578
|
+
(function (ColliderLayer) {
|
6579
|
+
ColliderLayer[ColliderLayer["None"] = 0] = "None";
|
6580
|
+
ColliderLayer[ColliderLayer["Pointer"] = 1] = "Pointer";
|
6581
|
+
ColliderLayer[ColliderLayer["Physics"] = 2] = "Physics";
|
6582
|
+
ColliderLayer[ColliderLayer["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
|
6583
|
+
})(ColliderLayer || (ColliderLayer = {}));
|
6584
|
+
function createBasePBMeshCollider() {
|
6585
|
+
return { collisionMask: undefined, box: undefined, sphere: undefined, cylinder: undefined, plane: undefined };
|
6586
|
+
}
|
6587
|
+
/**
|
6588
|
+
* @internal
|
6589
|
+
*/
|
6590
|
+
const PBMeshCollider = {
|
6591
|
+
encode(message, writer = minimalExports.Writer.create()) {
|
6592
|
+
if (message.collisionMask !== undefined) {
|
6593
|
+
writer.uint32(8).int32(message.collisionMask);
|
6594
|
+
}
|
6595
|
+
if (message.box !== undefined) {
|
6596
|
+
PBMeshCollider_BoxMesh.encode(message.box, writer.uint32(18).fork()).ldelim();
|
6597
|
+
}
|
6598
|
+
if (message.sphere !== undefined) {
|
6599
|
+
PBMeshCollider_SphereMesh.encode(message.sphere, writer.uint32(26).fork()).ldelim();
|
6600
|
+
}
|
6601
|
+
if (message.cylinder !== undefined) {
|
6602
|
+
PBMeshCollider_CylinderMesh.encode(message.cylinder, writer.uint32(34).fork()).ldelim();
|
6603
|
+
}
|
6604
|
+
if (message.plane !== undefined) {
|
6605
|
+
PBMeshCollider_PlaneMesh.encode(message.plane, writer.uint32(42).fork()).ldelim();
|
6606
|
+
}
|
6607
|
+
return writer;
|
6608
|
+
},
|
6609
|
+
decode(input, length) {
|
6610
|
+
const reader = input instanceof minimalExports.Reader ? input : new minimalExports.Reader(input);
|
6611
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
6612
|
+
const message = createBasePBMeshCollider();
|
6613
|
+
while (reader.pos < end) {
|
6614
|
+
const tag = reader.uint32();
|
6615
|
+
switch (tag >>> 3) {
|
6616
|
+
case 1:
|
6617
|
+
message.collisionMask = reader.int32();
|
6618
|
+
break;
|
6619
|
+
case 2:
|
6620
|
+
message.box = PBMeshCollider_BoxMesh.decode(reader, reader.uint32());
|
6621
|
+
break;
|
6622
|
+
case 3:
|
6623
|
+
message.sphere = PBMeshCollider_SphereMesh.decode(reader, reader.uint32());
|
6624
|
+
break;
|
6625
|
+
case 4:
|
6626
|
+
message.cylinder = PBMeshCollider_CylinderMesh.decode(reader, reader.uint32());
|
6627
|
+
break;
|
6628
|
+
case 5:
|
6629
|
+
message.plane = PBMeshCollider_PlaneMesh.decode(reader, reader.uint32());
|
6630
|
+
break;
|
6631
|
+
default:
|
6632
|
+
reader.skipType(tag & 7);
|
6633
|
+
break;
|
6634
|
+
}
|
6635
|
+
}
|
6636
|
+
return message;
|
6637
|
+
}
|
6638
|
+
};
|
6639
|
+
function createBasePBMeshCollider_BoxMesh() {
|
6640
|
+
return {};
|
6641
|
+
}
|
6642
|
+
/**
|
6643
|
+
* @internal
|
6644
|
+
*/
|
6645
|
+
const PBMeshCollider_BoxMesh = {
|
6646
|
+
encode(_, writer = minimalExports.Writer.create()) {
|
6647
|
+
return writer;
|
6648
|
+
},
|
6649
|
+
decode(input, length) {
|
6650
|
+
const reader = input instanceof minimalExports.Reader ? input : new minimalExports.Reader(input);
|
6651
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
6652
|
+
const message = createBasePBMeshCollider_BoxMesh();
|
6653
|
+
while (reader.pos < end) {
|
6654
|
+
const tag = reader.uint32();
|
6655
|
+
switch (tag >>> 3) {
|
6656
|
+
default:
|
6657
|
+
reader.skipType(tag & 7);
|
6658
|
+
break;
|
6659
|
+
}
|
6660
|
+
}
|
6661
|
+
return message;
|
6662
|
+
}
|
6663
|
+
};
|
6664
|
+
function createBasePBMeshCollider_CylinderMesh() {
|
6665
|
+
return { radiusTop: undefined, radiusBottom: undefined };
|
6666
|
+
}
|
6667
|
+
/**
|
6668
|
+
* @internal
|
6669
|
+
*/
|
6670
|
+
const PBMeshCollider_CylinderMesh = {
|
6671
|
+
encode(message, writer = minimalExports.Writer.create()) {
|
6672
|
+
if (message.radiusTop !== undefined) {
|
6673
|
+
writer.uint32(13).float(message.radiusTop);
|
6674
|
+
}
|
6675
|
+
if (message.radiusBottom !== undefined) {
|
6676
|
+
writer.uint32(21).float(message.radiusBottom);
|
6677
|
+
}
|
6678
|
+
return writer;
|
6679
|
+
},
|
6680
|
+
decode(input, length) {
|
6681
|
+
const reader = input instanceof minimalExports.Reader ? input : new minimalExports.Reader(input);
|
6682
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
6683
|
+
const message = createBasePBMeshCollider_CylinderMesh();
|
6684
|
+
while (reader.pos < end) {
|
6685
|
+
const tag = reader.uint32();
|
6686
|
+
switch (tag >>> 3) {
|
6687
|
+
case 1:
|
6688
|
+
message.radiusTop = reader.float();
|
6689
|
+
break;
|
6690
|
+
case 2:
|
6691
|
+
message.radiusBottom = reader.float();
|
6692
|
+
break;
|
6693
|
+
default:
|
6694
|
+
reader.skipType(tag & 7);
|
6695
|
+
break;
|
6696
|
+
}
|
6697
|
+
}
|
6698
|
+
return message;
|
6699
|
+
}
|
6700
|
+
};
|
6701
|
+
function createBasePBMeshCollider_PlaneMesh() {
|
6702
|
+
return {};
|
6703
|
+
}
|
6704
|
+
/**
|
6705
|
+
* @internal
|
6706
|
+
*/
|
6707
|
+
const PBMeshCollider_PlaneMesh = {
|
6708
|
+
encode(_, writer = minimalExports.Writer.create()) {
|
6709
|
+
return writer;
|
6710
|
+
},
|
6711
|
+
decode(input, length) {
|
6712
|
+
const reader = input instanceof minimalExports.Reader ? input : new minimalExports.Reader(input);
|
6713
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
6714
|
+
const message = createBasePBMeshCollider_PlaneMesh();
|
6715
|
+
while (reader.pos < end) {
|
6716
|
+
const tag = reader.uint32();
|
6717
|
+
switch (tag >>> 3) {
|
6718
|
+
default:
|
6719
|
+
reader.skipType(tag & 7);
|
6720
|
+
break;
|
6721
|
+
}
|
6722
|
+
}
|
6723
|
+
return message;
|
6724
|
+
}
|
6725
|
+
};
|
6726
|
+
function createBasePBMeshCollider_SphereMesh() {
|
6727
|
+
return {};
|
6728
|
+
}
|
6729
|
+
/**
|
6730
|
+
* @internal
|
6731
|
+
*/
|
6732
|
+
const PBMeshCollider_SphereMesh = {
|
6733
|
+
encode(_, writer = minimalExports.Writer.create()) {
|
6734
|
+
return writer;
|
6735
|
+
},
|
6736
|
+
decode(input, length) {
|
6737
|
+
const reader = input instanceof minimalExports.Reader ? input : new minimalExports.Reader(input);
|
6738
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
6739
|
+
const message = createBasePBMeshCollider_SphereMesh();
|
6740
|
+
while (reader.pos < end) {
|
6741
|
+
const tag = reader.uint32();
|
6742
|
+
switch (tag >>> 3) {
|
6743
|
+
default:
|
6744
|
+
reader.skipType(tag & 7);
|
6745
|
+
break;
|
6746
|
+
}
|
6747
|
+
}
|
6748
|
+
return message;
|
6749
|
+
}
|
6750
|
+
};
|
6751
|
+
|
6752
|
+
/**
|
6753
|
+
* @internal
|
6754
|
+
*/
|
6755
|
+
const COMPONENT_ID$e = 1019;
|
6756
|
+
/**
|
6757
|
+
* @internal
|
6758
|
+
*/
|
6759
|
+
const MeshColliderSchema = {
|
6760
|
+
serialize(value, builder) {
|
6761
|
+
const writer = PBMeshCollider.encode(value);
|
6762
|
+
const buffer = new Uint8Array(writer.finish(), 0, writer.len);
|
6763
|
+
builder.writeBuffer(buffer, false);
|
6764
|
+
},
|
6765
|
+
deserialize(reader) {
|
6766
|
+
return PBMeshCollider.decode(reader.buffer(), reader.remainingBytes());
|
6767
|
+
},
|
6768
|
+
create() {
|
6769
|
+
// TODO: this is a hack.
|
6770
|
+
return PBMeshCollider.decode(new Uint8Array());
|
6771
|
+
}
|
6772
|
+
};
|
6773
|
+
|
6576
6774
|
/* eslint-disable */
|
6577
6775
|
function createBasePBMeshRenderer() {
|
6578
6776
|
return { box: undefined, sphere: undefined, cylinder: undefined, plane: undefined };
|
@@ -7784,18 +7982,19 @@
|
|
7784
7982
|
|
7785
7983
|
function defineLibraryComponents({ defineComponentFromSchema }) {
|
7786
7984
|
return {
|
7787
|
-
Animator: defineComponentFromSchema(AnimatorSchema, COMPONENT_ID$
|
7788
|
-
AudioSource: defineComponentFromSchema(AudioSourceSchema, COMPONENT_ID$
|
7789
|
-
AvatarAttach: defineComponentFromSchema(AvatarAttachSchema, COMPONENT_ID$
|
7790
|
-
AvatarModifierArea: defineComponentFromSchema(AvatarModifierAreaSchema, COMPONENT_ID$
|
7791
|
-
AvatarShape: defineComponentFromSchema(AvatarShapeSchema, COMPONENT_ID$
|
7792
|
-
Billboard: defineComponentFromSchema(BillboardSchema, COMPONENT_ID$
|
7793
|
-
BoxShape: defineComponentFromSchema(BoxShapeSchema, COMPONENT_ID$
|
7794
|
-
CameraMode: defineComponentFromSchema(CameraModeSchema, COMPONENT_ID$
|
7795
|
-
CameraModeArea: defineComponentFromSchema(CameraModeAreaSchema, COMPONENT_ID$
|
7796
|
-
CylinderShape: defineComponentFromSchema(CylinderShapeSchema, COMPONENT_ID$
|
7797
|
-
GLTFShape: defineComponentFromSchema(GLTFShapeSchema, COMPONENT_ID$
|
7798
|
-
Material: defineComponentFromSchema(MaterialSchema, COMPONENT_ID$
|
7985
|
+
Animator: defineComponentFromSchema(AnimatorSchema, COMPONENT_ID$q),
|
7986
|
+
AudioSource: defineComponentFromSchema(AudioSourceSchema, COMPONENT_ID$p),
|
7987
|
+
AvatarAttach: defineComponentFromSchema(AvatarAttachSchema, COMPONENT_ID$o),
|
7988
|
+
AvatarModifierArea: defineComponentFromSchema(AvatarModifierAreaSchema, COMPONENT_ID$n),
|
7989
|
+
AvatarShape: defineComponentFromSchema(AvatarShapeSchema, COMPONENT_ID$m),
|
7990
|
+
Billboard: defineComponentFromSchema(BillboardSchema, COMPONENT_ID$l),
|
7991
|
+
BoxShape: defineComponentFromSchema(BoxShapeSchema, COMPONENT_ID$k),
|
7992
|
+
CameraMode: defineComponentFromSchema(CameraModeSchema, COMPONENT_ID$j),
|
7993
|
+
CameraModeArea: defineComponentFromSchema(CameraModeAreaSchema, COMPONENT_ID$i),
|
7994
|
+
CylinderShape: defineComponentFromSchema(CylinderShapeSchema, COMPONENT_ID$h),
|
7995
|
+
GLTFShape: defineComponentFromSchema(GLTFShapeSchema, COMPONENT_ID$g),
|
7996
|
+
Material: defineComponentFromSchema(MaterialSchema, COMPONENT_ID$f),
|
7997
|
+
MeshCollider: defineComponentFromSchema(MeshColliderSchema, COMPONENT_ID$e),
|
7799
7998
|
MeshRenderer: defineComponentFromSchema(MeshRendererSchema, COMPONENT_ID$d),
|
7800
7999
|
NFTShape: defineComponentFromSchema(NFTShapeSchema, COMPONENT_ID$c),
|
7801
8000
|
OnPointerDown: defineComponentFromSchema(OnPointerDownSchema, COMPONENT_ID$b),
|
@@ -9278,6 +9477,7 @@
|
|
9278
9477
|
ECSComponentIDs[ECSComponentIDs["CylinderShape"] = 1016] = "CylinderShape";
|
9279
9478
|
ECSComponentIDs[ECSComponentIDs["GLTFShape"] = 1041] = "GLTFShape";
|
9280
9479
|
ECSComponentIDs[ECSComponentIDs["Material"] = 1017] = "Material";
|
9480
|
+
ECSComponentIDs[ECSComponentIDs["MeshCollider"] = 1019] = "MeshCollider";
|
9281
9481
|
ECSComponentIDs[ECSComponentIDs["MeshRenderer"] = 1018] = "MeshRenderer";
|
9282
9482
|
ECSComponentIDs[ECSComponentIDs["NFTShape"] = 1040] = "NFTShape";
|
9283
9483
|
ECSComponentIDs[ECSComponentIDs["OnPointerDown"] = 1060] = "OnPointerDown";
|
@@ -9398,6 +9598,8 @@
|
|
9398
9598
|
/** @public */
|
9399
9599
|
const Material = engine.baseComponents.Material;
|
9400
9600
|
/** @public */
|
9601
|
+
const MeshCollider = engine.baseComponents.MeshCollider;
|
9602
|
+
/** @public */
|
9401
9603
|
const MeshRenderer = engine.baseComponents.MeshRenderer;
|
9402
9604
|
/** @public */
|
9403
9605
|
const NFTShape = engine.baseComponents.NFTShape;
|
@@ -9452,6 +9654,8 @@
|
|
9452
9654
|
/** @public */
|
9453
9655
|
Components.Material = engine.baseComponents.Material;
|
9454
9656
|
/** @public */
|
9657
|
+
Components.MeshCollider = engine.baseComponents.MeshCollider;
|
9658
|
+
/** @public */
|
9455
9659
|
Components.MeshRenderer = engine.baseComponents.MeshRenderer;
|
9456
9660
|
/** @public */
|
9457
9661
|
Components.NFTShape = engine.baseComponents.NFTShape;
|
@@ -9492,6 +9696,7 @@
|
|
9492
9696
|
exports.Epsilon = distExports$1.Epsilon;
|
9493
9697
|
exports.GLTFShape = GLTFShape;
|
9494
9698
|
exports.Material = Material;
|
9699
|
+
exports.MeshCollider = MeshCollider;
|
9495
9700
|
exports.MeshRenderer = MeshRenderer;
|
9496
9701
|
exports.NFTShape = NFTShape;
|
9497
9702
|
exports.OnPointerDown = OnPointerDown;
|
@@ -9520,4 +9725,4 @@
|
|
9520
9725
|
Object.defineProperty(exports, '__esModule', { value: true });
|
9521
9726
|
|
9522
9727
|
})(this.self = this.self || {});
|
9523
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvVmVjdG9yMy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvU2NhbGFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvZWNzLW1hdGgvZGlzdC90eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvUXVhdGVybmlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvYXNwcm9taXNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2Jhc2U2NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9ldmVudGVtaXR0ZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvZmxvYXQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvaW5xdWlyZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy91dGY4L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL3Bvb2wvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvdXRpbC9sb25nYml0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy91dGlsL21pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvd3JpdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3dyaXRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcmVhZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3JlYWRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjL3NlcnZpY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3Jvb3RzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL2luZGV4LW1pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9taW5pbWFsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0FuaW1hdG9yLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BbmltYXRvci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQXVkaW9Tb3VyY2UuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F1ZGlvU291cmNlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9BdmF0YXJBdHRhY2guZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F2YXRhckF0dGFjaC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvY29tbW9uL1ZlY3RvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhck1vZGlmaWVyQXJlYS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQXZhdGFyTW9kaWZpZXJBcmVhLmdlbi50cyIsIi4uL25vZGVfbW9kdWxlcy9sb25nL3NyYy9sb25nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL2NvbW1vbi9Db2xvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BdmF0YXJTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQmlsbGJvYXJkLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9CaWxsYm9hcmQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0JveFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9Cb3hTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZUFyZWEuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0NhbWVyYU1vZGVBcmVhLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9HTFRGU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0dMVEZTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTWF0ZXJpYWwuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01hdGVyaWFsLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9NZXNoUmVuZGVyZXIuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01lc2hSZW5kZXJlci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTkZUU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL05GVFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9PblBvaW50ZXJEb3duLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9PblBvaW50ZXJEb3duLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9PblBvaW50ZXJEb3duUmVzdWx0Lmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9PblBvaW50ZXJEb3duUmVzdWx0Lmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9PblBvaW50ZXJVcC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyVXAuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL09uUG9pbnRlclVwUmVzdWx0Lmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9PblBvaW50ZXJVcFJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvUGxhbmVTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvUGxhbmVTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvUG9pbnRlckxvY2suZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1BvaW50ZXJMb2NrLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9TcGhlcmVTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvU3BoZXJlU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1RleHRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvVGV4dFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9VaVRleHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1VpVGV4dC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvaW5kZXguZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvbGVnYWN5L1RyYW5zZm9ybS50cyIsIi4uL3NyYy9jb21wb25lbnRzL2luZGV4LnRzIiwiLi4vc3JjL3NjaGVtYXMvQXJyYXkudHMiLCIuLi9zcmMvc2NoZW1hcy9iYXNpYy9Cb29sZWFuLnRzIiwiLi4vc3JjL3NjaGVtYXMvYmFzaWMvRW51bS50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL0Zsb2F0LnRzIiwiLi4vc3JjL3NjaGVtYXMvYmFzaWMvSW50ZWdlci50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL1N0cmluZy50cyIsIi4uL3NyYy9zY2hlbWFzL01hcC50cyIsIi4uL3NyYy9zY2hlbWFzL09wdGlvbmFsLnRzIiwiLi4vc3JjL3NjaGVtYXMvaW5kZXgudHMiLCIuLi9ub2RlX21vZHVsZXMvQGRjbC9jcmR0L2Rpc3QvdHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQGRjbC9jcmR0L2Rpc3QvaW5kZXguanMiLCIuLi9zcmMvc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyL2luZGV4LnRzIiwiLi4vc3JjL3NlcmlhbGl6YXRpb24vd2lyZU1lc3NhZ2UudHMiLCIuLi9zcmMvc2VyaWFsaXphdGlvbi9jcmR0L2NvbXBvbmVudE9wZXJhdGlvbi50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvaW5kZXgudHMiLCIuLi9zcmMvZW5naW5lL3JlYWRvbmx5LnRzIiwiLi4vc3JjL2VuZ2luZS9jb21wb25lbnQudHMiLCIuLi9zcmMvZW5naW5lL2VudGl0eS11dGlscy50cyIsIi4uL3NyYy9lbmdpbmUvZW50aXR5LnRzIiwiLi4vc3JjL2VuZ2luZS9zeXN0ZW1zLnRzIiwiLi4vc3JjL2VuZ2luZS9pbmRleC50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9pZHMuZ2VuLnRzIiwiLi4vc3JjL3N5c3RlbXMvY3JkdC90cmFuc3BvcnRzL3JlbmRlcmVyVHJhbnNwb3J0LnRzIiwiLi4vc3JjL3N5c3RlbXMvY3JkdC90cmFuc3BvcnRzL25ldHdvcmtUcmFuc3BvcnQudHMiLCIuLi9zcmMvcnVudGltZS9pbml0aWFsaXphdGlvbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9nbG9iYWwuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL2dsb2JhbC5uYW1lc3BhY2UuZ2VuLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5WZWN0b3IzID0gdm9pZCAwO1xuLyoqXG4gKiBAcHVibGljXG4gKi9cbnZhciBWZWN0b3IzO1xuKGZ1bmN0aW9uIChWZWN0b3IzKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBWZWN0b3IzIG9iamVjdCBmcm9tIHRoZSBnaXZlbiB4LCB5LCB6IChmbG9hdHMpIGNvb3JkaW5hdGVzLlxuICAgICAqIEBwYXJhbSB4IC0gZGVmaW5lcyB0aGUgZmlyc3QgY29vcmRpbmF0ZXMgKG9uIFggYXhpcylcbiAgICAgKiBAcGFyYW0geSAtIGRlZmluZXMgdGhlIHNlY29uZCBjb29yZGluYXRlcyAob24gWSBheGlzKVxuICAgICAqIEBwYXJhbSB6IC0gZGVmaW5lcyB0aGUgdGhpcmQgY29vcmRpbmF0ZXMgKG9uIFogYXhpcylcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUoXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgZmlyc3QgY29vcmRpbmF0ZXMgKG9uIFggYXhpcylcbiAgICAgKi9cbiAgICB4ID0gMCwgXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgc2Vjb25kIGNvb3JkaW5hdGVzIChvbiBZIGF4aXMpXG4gICAgICovXG4gICAgeSA9IDAsIFxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHRoaXJkIGNvb3JkaW5hdGVzIChvbiBaIGF4aXMpXG4gICAgICovXG4gICAgeiA9IDApIHtcbiAgICAgICAgcmV0dXJuIHsgeCwgeSwgeiB9O1xuICAgIH1cbiAgICBWZWN0b3IzLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgYXMgdGhlIHJlc3VsdCBvZiB0aGUgYWRkaXRpb24gb2YgdGhlIHR3byBnaXZlbiB2ZWN0b3JzLlxuICAgICAqIEBwYXJhbSB2ZWN0b3IxIC0gdGhlIGZpcnN0IHZlY3RvclxuICAgICAqIEBwYXJhbSB2ZWN0b3IyIC0gdGhlIHNlY29uZCB2ZWN0b3JcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFkZCh2ZWN0b3IxLCB2ZWN0b3IyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiB2ZWN0b3IxLnggKyB2ZWN0b3IyLngsXG4gICAgICAgICAgICB5OiB2ZWN0b3IxLnkgKyB2ZWN0b3IyLnksXG4gICAgICAgICAgICB6OiB2ZWN0b3IxLnogKyB2ZWN0b3IyLnpcbiAgICAgICAgfTtcbiAgICB9XG4gICAgVmVjdG9yMy5hZGQgPSBhZGQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSByZXN1bHQgb2YgdGhlIHN1YnN0cmFjdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHZlY3RvcnMuXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdWJ0cmFjdChtaW51ZW5kLCBzdWJ0cmFoZW5kKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBtaW51ZW5kLnggLSBzdWJ0cmFoZW5kLngsXG4gICAgICAgICAgICB5OiBtaW51ZW5kLnkgLSBzdWJ0cmFoZW5kLnksXG4gICAgICAgICAgICB6OiBtaW51ZW5kLnogLSBzdWJ0cmFoZW5kLnpcbiAgICAgICAgfTtcbiAgICB9XG4gICAgVmVjdG9yMy5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgcmVzdWx0IG9mIHRoZSBzdWJzdHJhY3Rpb24gb2YgdGhlIHR3byBnaXZlbiB2ZWN0b3JzLlxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3VidHJhY3RUb1JlZihtaW51ZW5kLCBzdWJ0cmFoZW5kLCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSBtaW51ZW5kLnggLSBzdWJ0cmFoZW5kLng7XG4gICAgICAgIHJlc3VsdC55ID0gbWludWVuZC55IC0gc3VidHJhaGVuZC55O1xuICAgICAgICByZXN1bHQueiA9IG1pbnVlbmQueiAtIHN1YnRyYWhlbmQuejtcbiAgICB9XG4gICAgVmVjdG9yMy5zdWJ0cmFjdFRvUmVmID0gc3VidHJhY3RUb1JlZjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgd2l0aCB0aGUgb3RoZXIgc2lnblxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gb3Bwb3NpdGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHsgeDogLXZhbHVlLngsIHk6IC12YWx1ZS55LCB6OiAtdmFsdWUueiB9O1xuICAgIH1cbiAgICBWZWN0b3IzLm9wcG9zaXRlID0gb3Bwb3NpdGU7XG4gICAgLyoqXG4gICAgICogQ29weSBzb3VyY2UgaW50byBkZXN0XG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgZGVzdCkge1xuICAgICAgICBkZXN0LnggPSBzb3VyY2UueDtcbiAgICAgICAgZGVzdC55ID0gc291cmNlLnk7XG4gICAgICAgIGRlc3QueiA9IHNvdXJjZS56O1xuICAgIH1cbiAgICBWZWN0b3IzLmNvcHkgPSBjb3B5O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyB3aXRoIHRoZSBzYW1lIHZhbHVlXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZShzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHNvdXJjZSk7XG4gICAgfVxuICAgIFZlY3RvcjMuY2xvbmUgPSBjbG9uZTtcbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBWZWN0b3IzXG4gICAgICogQHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgVmVjdG8zXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVuZ3RoKHZlY3Rvcikge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHZlY3Rvci54ICogdmVjdG9yLnggKyB2ZWN0b3IueSAqIHZlY3Rvci55ICsgdmVjdG9yLnogKiB2ZWN0b3Iueik7XG4gICAgfVxuICAgIFZlY3RvcjMubGVuZ3RoID0gbGVuZ3RoO1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIHRoZSBWZWN0b3IzXG4gICAgICogQHJldHVybnMgc3F1YXJlZCBsZW5ndGggb2YgdGhlIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGhTcXVhcmVkKHZlY3Rvcikge1xuICAgICAgICByZXR1cm4gdmVjdG9yLnggKiB2ZWN0b3IueCArIHZlY3Rvci55ICogdmVjdG9yLnkgKyB2ZWN0b3IueiAqIHZlY3Rvci56O1xuICAgIH1cbiAgICBWZWN0b3IzLmxlbmd0aFNxdWFyZWQgPSBsZW5ndGhTcXVhcmVkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgd2l0aCB0aGUgY3VycmVudCBWZWN0b3IzIGNvb3JkaW5hdGVzIG11bHRpcGxpZWQgYnkgdGhlIGZsb2F0IFwic2NhbGVcIlxuICAgICAqIEBwYXJhbSBzY2FsZSAtIGRlZmluZXMgdGhlIG11bHRpcGxpZXIgZmFjdG9yXG4gICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNjYWxlVG9SZWYodmVjdG9yLCBzY2FsZSwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gdmVjdG9yLnggKiBzY2FsZTtcbiAgICAgICAgcmVzdWx0LnkgPSB2ZWN0b3IueSAqIHNjYWxlO1xuICAgICAgICByZXN1bHQueiA9IHZlY3Rvci56ICogc2NhbGU7XG4gICAgfVxuICAgIFZlY3RvcjMuc2NhbGVUb1JlZiA9IHNjYWxlVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgbXVsdGlwbGllZCBieSB0aGUgZmxvYXQgXCJzY2FsZVwiXG4gICAgICogQHBhcmFtIHNjYWxlIC0gZGVmaW5lcyB0aGUgbXVsdGlwbGllciBmYWN0b3JcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2NhbGUodmVjdG9yLCBzY2FsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKHZlY3Rvci54ICogc2NhbGUsIHZlY3Rvci55ICogc2NhbGUsIHZlY3Rvci56ICogc2NhbGUpO1xuICAgIH1cbiAgICBWZWN0b3IzLnNjYWxlID0gc2NhbGU7XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMgd2l0aCB0aGUgZ2l2ZW4gaW5wdXQgbGVuZ3RoLlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBhbiBpbiBwbGFjZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIGxlbiAtIHRoZSBsZW5ndGggb2YgdGhlIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUZyb21MZW5ndGgodmVjdG9yLCBsZW4pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlKDAsIDAsIDApO1xuICAgICAgICBub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWYodmVjdG9yLCBsZW4sIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIFZlY3RvcjMubm9ybWFsaXplRnJvbUxlbmd0aCA9IG5vcm1hbGl6ZUZyb21MZW5ndGg7XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMgd2l0aCB0aGUgZ2l2ZW4gaW5wdXQgbGVuZ3RoLlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBhbiBpbiBwbGFjZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIGxlbiAtIHRoZSBsZW5ndGggb2YgdGhlIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZih2ZWN0b3IsIGxlbiwgcmVzdWx0KSB7XG4gICAgICAgIGlmIChsZW4gPT09IDAgfHwgbGVuID09PSAxLjApIHtcbiAgICAgICAgICAgIGNvcHkodmVjdG9yLCByZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNjYWxlVG9SZWYodmVjdG9yLCAxLjAgLyBsZW4sIHJlc3VsdCk7XG4gICAgfVxuICAgIFZlY3RvcjMubm9ybWFsaXplRnJvbUxlbmd0aFRvUmVmID0gbm9ybWFsaXplRnJvbUxlbmd0aFRvUmVmO1xuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSB0aGUgY3VycmVudCBWZWN0b3IzLlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBhbiBpbiBwbGFjZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplKHZlY3Rvcikge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplRnJvbUxlbmd0aCh2ZWN0b3IsIGxlbmd0aCh2ZWN0b3IpKTtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMuXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemVUb1JlZih2ZWN0b3IsIHJlc3VsdCkge1xuICAgICAgICBub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWYodmVjdG9yLCBsZW5ndGgodmVjdG9yKSwgcmVzdWx0KTtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemVUb1JlZiA9IG5vcm1hbGl6ZVRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IChmbG9hdCkgYmV0d2VlbiB0aGUgdmVjdG9ycyBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIHRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMgdGhlIGRvdCBwcm9kdWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gZG90KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0Lno7XG4gICAgfVxuICAgIFZlY3RvcjMuZG90ID0gZG90O1xuICAgIC8qKlxuICAgICAqIFJvdGF0ZXMgY3VycmVudCBWZWN0b3IzIGJhc2VkIG9uIHRoZSBnaXZlbiBxdWF0ZXJuaW9uLCBidXQgYXBwbGllcyB0aGUgcm90YXRpb24gdG8gdGFyZ2V0IFZlY3RvcjMuXG4gICAgICogQHBhcmFtIHEgLSBkZWZpbmVzIHRoZSBRdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBWZWN0b3IzXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0ZSh2ZWN0b3IsIHEpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB6IH0gPSB2ZWN0b3I7XG4gICAgICAgIGNvbnN0IHsgeDogcXgsIHk6IHF5LCB6OiBxeiwgdzogcXcgfSA9IHE7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBxdWF0ICogdmVjdG9yXG4gICAgICAgIGNvbnN0IGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5O1xuICAgICAgICBjb25zdCBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogejtcbiAgICAgICAgY29uc3QgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XG4gICAgICAgIGNvbnN0IGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcbiAgICAgICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeSxcbiAgICAgICAgICAgIHk6IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXosXG4gICAgICAgICAgICB6OiBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4XG4gICAgICAgIH07XG4gICAgfVxuICAgIFZlY3RvcjMucm90YXRlID0gcm90YXRlO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBsb2NhdGVkIGZvciBcImFtb3VudFwiIChmbG9hdCkgb24gdGhlIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIHZlY3RvcnMgXCJzdGFydFwiIGFuZCBcImVuZFwiXG4gICAgICogQHBhcmFtIHN0YXJ0IC0gZGVmaW5lcyB0aGUgc3RhcnQgdmFsdWVcbiAgICAgKiBAcGFyYW0gZW5kIC0gZGVmaW5lcyB0aGUgZW5kIHZhbHVlXG4gICAgICogQHBhcmFtIGFtb3VudCAtIG1heCBkZWZpbmVzIGFtb3VudCBiZXR3ZWVuIGJvdGggKGJldHdlZW4gMCBhbmQgMSlcbiAgICAgKiBAcmV0dXJucyB0aGUgbmV3IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZXJwKHN0YXJ0LCBlbmQsIGFtb3VudCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGUoMCwgMCwgMCk7XG4gICAgICAgIGxlcnBUb1JlZihzdGFydCwgZW5kLCBhbW91bnQsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIFZlY3RvcjMubGVycCA9IGxlcnA7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZ2l2ZW4gdmVjdG9yIFwicmVzdWx0XCIgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBmcm9tIHRoZSB2ZWN0b3IgXCJzdGFydFwiIGZvciBcImFtb3VudFwiIHRvIHRoZSB2ZWN0b3IgXCJlbmRcIlxuICAgICAqIEBwYXJhbSBzdGFydCAtIGRlZmluZXMgdGhlIHN0YXJ0IHZhbHVlXG4gICAgICogQHBhcmFtIGVuZCAtIGRlZmluZXMgdGhlIGVuZCB2YWx1ZVxuICAgICAqIEBwYXJhbSBhbW91bnQgLSBtYXggZGVmaW5lcyBhbW91bnQgYmV0d2VlbiBib3RoIChiZXR3ZWVuIDAgYW5kIDEpXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlcnBUb1JlZihzdGFydCwgZW5kLCBhbW91bnQsIHJlc3VsdCkge1xuICAgICAgICByZXN1bHQueCA9IHN0YXJ0LnggKyAoZW5kLnggLSBzdGFydC54KSAqIGFtb3VudDtcbiAgICAgICAgcmVzdWx0LnkgPSBzdGFydC55ICsgKGVuZC55IC0gc3RhcnQueSkgKiBhbW91bnQ7XG4gICAgICAgIHJlc3VsdC56ID0gc3RhcnQueiArIChlbmQueiAtIHN0YXJ0LnopICogYW1vdW50O1xuICAgIH1cbiAgICBWZWN0b3IzLmxlcnBUb1JlZiA9IGxlcnBUb1JlZjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgYXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdGhlIHZlY3RvcnMgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIFRoZSBjcm9zcyBwcm9kdWN0IGlzIHRoZW4gb3J0aG9nb25hbCB0byBib3RoIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyb3NzKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFZlY3RvcjMuWmVybygpO1xuICAgICAgICBWZWN0b3IzLmNyb3NzVG9SZWYobGVmdCwgcmlnaHQsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIFZlY3RvcjMuY3Jvc3MgPSBjcm9zcztcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgXCJyZXN1bHRcIiB3aXRoIHRoZSBjcm9zcyBwcm9kdWN0IG9mIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBUaGUgY3Jvc3MgcHJvZHVjdCBpcyB0aGVuIG9ydGhvZ29uYWwgdG8gYm90aCBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIHRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIFZlY3RvcjMgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyb3NzVG9SZWYobGVmdCwgcmlnaHQsIHJlc3VsdCkge1xuICAgICAgICByZXN1bHQueCA9IGxlZnQueSAqIHJpZ2h0LnogLSBsZWZ0LnogKiByaWdodC55O1xuICAgICAgICByZXN1bHQueSA9IGxlZnQueiAqIHJpZ2h0LnggLSBsZWZ0LnggKiByaWdodC56O1xuICAgICAgICByZXN1bHQueiA9IGxlZnQueCAqIHJpZ2h0LnkgLSBsZWZ0LnkgKiByaWdodC54O1xuICAgIH1cbiAgICBWZWN0b3IzLmNyb3NzVG9SZWYgPSBjcm9zc1RvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDAuMCwgMC4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgZW1wdHkgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFplcm8oKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMC4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuWmVybyA9IFplcm87XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMS4wLCAxLjAsIDEuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyB1bml0IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBPbmUoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMS4wLCAxLjAsIDEuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuT25lID0gT25lO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG9sZW5ndGhTcXVhcmVkICgwLjAsIDEuMCwgMC4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IHVwIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBVcCgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDEuMCwgMC4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5VcCA9IFVwO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDAuMCwgLTEuMCwgMC4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IGRvd24gVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIERvd24oKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMC4wLCAtMS4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLkRvd24gPSBEb3duO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDAuMCwgMC4wLCAxLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgZm9yd2FyZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gRm9yd2FyZCgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMS4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5Gb3J3YXJkID0gRm9yd2FyZDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgwLjAsIDAuMCwgLTEuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBmb3J3YXJkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBCYWNrd2FyZCgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgLTEuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuQmFja3dhcmQgPSBCYWNrd2FyZDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgxLjAsIDAuMCwgMC4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IHJpZ2h0IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBSaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgxLjAsIDAuMCwgMC4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5SaWdodCA9IFJpZ2h0O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKC0xLjAsIDAuMCwgMC4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IGxlZnQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIExlZnQoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoLTEuMCwgMC4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLkxlZnQgPSBMZWZ0O1xufSkoVmVjdG9yMyA9IGV4cG9ydHMuVmVjdG9yMyB8fCAoZXhwb3J0cy5WZWN0b3IzID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZlY3RvcjMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlNjYWxhciA9IHZvaWQgMDtcbi8qKlxuICogVHdvIHBpIGNvbnN0YW50cyBjb252ZW5pZW50IGZvciBjb21wdXRhdGlvbi5cbiAqL1xuY29uc3QgVHdvUGkgPSBNYXRoLlBJICogMjtcbi8qKlxuICogQm9vbGVhbiA6IHRydWUgaWYgdGhlIGFic29sdXRlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiIGlzIGxvd2VyIHRoYW4gZXBzaWxvbiAoZGVmYXVsdCA9IDEuNDAxMjk4RS00NSlcbiAqIEBwYXJhbSBhIC0gbnVtYmVyXG4gKiBAcGFyYW0gYiAtIG51bWJlclxuICogQHBhcmFtIGVwc2lsb24gLSAoZGVmYXVsdCA9IDEuNDAxMjk4RS00NSlcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGFic29sdXRlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGFuZCBiIGlzIGxvd2VyIHRoYW4gZXBzaWxvbiAoZGVmYXVsdCA9IDEuNDAxMjk4RS00NSlcbiAqL1xuZnVuY3Rpb24gd2l0aGluRXBzaWxvbihhLCBiLCBlcHNpbG9uID0gMS40MDEyOThlLTQ1KSB7XG4gICAgY29uc3QgbnVtID0gYSAtIGI7XG4gICAgcmV0dXJuIC1lcHNpbG9uIDw9IG51bSAmJiBudW0gPD0gZXBzaWxvbjtcbn1cbi8qKlxuICogUmV0dXJucyBhIHN0cmluZyA6IHRoZSB1cHBlciBjYXNlIHRyYW5zbGF0aW9uIG9mIHRoZSBudW1iZXIgaSB0byBoZXhhZGVjaW1hbC5cbiAqIEBwYXJhbSBpIC0gbnVtYmVyXG4gKiBAcmV0dXJucyB0aGUgdXBwZXIgY2FzZSB0cmFuc2xhdGlvbiBvZiB0aGUgbnVtYmVyIGkgdG8gaGV4YWRlY2ltYWwuXG4gKi9cbmZ1bmN0aW9uIHRvSGV4KGkpIHtcbiAgICBjb25zdCBzdHIgPSBpLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaSA8PSAxNSkge1xuICAgICAgICByZXR1cm4gKCcwJyArIHN0cikudG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ci50b1VwcGVyQ2FzZSgpO1xufVxuLyoqXG4gKiBSZXR1cm5zIC0xIGlmIHZhbHVlIGlzIG5lZ2F0aXZlIGFuZCArMSBpcyB2YWx1ZSBpcyBwb3NpdGl2ZS5cbiAqIEBwYXJhbSBfdmFsdWUgLSB0aGUgdmFsdWVcbiAqIEByZXR1cm5zIHRoZSB2YWx1ZSBpdHNlbGYgaWYgaXQncyBlcXVhbCB0byB6ZXJvLlxuICovXG5mdW5jdGlvbiBzaWduKHZhbHVlKSB7XG4gICAgY29uc3QgX3ZhbHVlID0gK3ZhbHVlOyAvLyBjb252ZXJ0IHRvIGEgbnVtYmVyXG4gICAgaWYgKF92YWx1ZSA9PT0gMCB8fCBpc05hTihfdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBfdmFsdWUgPiAwID8gMSA6IC0xO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBpdHNlbGYgaWYgaXQncyBiZXR3ZWVuIG1pbiBhbmQgbWF4LlxuICogUmV0dXJucyBtaW4gaWYgdGhlIHZhbHVlIGlzIGxvd2VyIHRoYW4gbWluLlxuICogUmV0dXJucyBtYXggaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBtYXguXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gY2xtYXBcbiAqIEBwYXJhbSBtaW4gLSB0aGUgbWluIHZhbHVlIHRvIGNsYW1wIHRvIChkZWZhdWx0OiAwKVxuICogQHBhcmFtIG1heCAtIHRoZSBtYXggdmFsdWUgdG8gY2xhbXAgdG8gKGRlZmF1bHQ6IDEpXG4gKiBAcmV0dXJucyB0aGUgY2xhbXBlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBjbGFtcCh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xuICAgIHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdmFsdWUpKTtcbn1cbi8qKlxuICogdGhlIGxvZzIgb2YgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gY29tcHV0ZSBsb2cyIG9mXG4gKiBAcmV0dXJucyB0aGUgbG9nMiBvZiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbG9nMih2YWx1ZSkge1xuICAgIHJldHVybiBNYXRoLmxvZyh2YWx1ZSkgKiBNYXRoLkxPRzJFO1xufVxuLyoqXG4gKiBMb29wcyB0aGUgdmFsdWUsIHNvIHRoYXQgaXQgaXMgbmV2ZXIgbGFyZ2VyIHRoYW4gbGVuZ3RoIGFuZCBuZXZlciBzbWFsbGVyIHRoYW4gMC5cbiAqXG4gKiBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIG1vZHVsbyBvcGVyYXRvciBidXQgaXQgd29ya3Mgd2l0aCBmbG9hdGluZyBwb2ludCBudW1iZXJzLlxuICogRm9yIGV4YW1wbGUsIHVzaW5nIDMuMCBmb3IgdCBhbmQgMi41IGZvciBsZW5ndGgsIHRoZSByZXN1bHQgd291bGQgYmUgMC41LlxuICogV2l0aCB0ID0gNSBhbmQgbGVuZ3RoID0gMi41LCB0aGUgcmVzdWx0IHdvdWxkIGJlIDAuMC5cbiAqIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlIGJlaGF2aW91ciBpcyBub3QgZGVmaW5lZCBmb3IgbmVnYXRpdmUgbnVtYmVycyBhcyBpdCBpcyBmb3IgdGhlIG1vZHVsbyBvcGVyYXRvclxuICogQHBhcmFtIHZhbHVlIC0gdGhlIHZhbHVlXG4gKiBAcGFyYW0gbGVuZ3RoIC0gdGhlIGxlbmd0aFxuICogQHJldHVybnMgdGhlIGxvb3BlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiByZXBlYXQodmFsdWUsIGxlbmd0aCkge1xuICAgIHJldHVybiB2YWx1ZSAtIE1hdGguZmxvb3IodmFsdWUgLyBsZW5ndGgpICogbGVuZ3RoO1xufVxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIHZhbHVlIGJldHdlZW4gMC4wIGFuZCAxLjAgdXNpbmcgbWluIGFuZCBtYXggdmFsdWVzXG4gKiBAcGFyYW0gdmFsdWUgLSB2YWx1ZSB0byBub3JtYWxpemVcbiAqIEBwYXJhbSBtaW4gLSBtYXggdG8gbm9ybWFsaXplIGJldHdlZW5cbiAqIEBwYXJhbSBtYXggLSBtaW4gdG8gbm9ybWFsaXplIGJldHdlZW5cbiAqIEByZXR1cm5zIHRoZSBub3JtYWxpemVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZSh2YWx1ZSwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pO1xufVxuLyoqXG4gKiBEZW5vcm1hbGl6ZSB0aGUgdmFsdWUgZnJvbSAwLjAgYW5kIDEuMCB1c2luZyBtaW4gYW5kIG1heCB2YWx1ZXNcbiAqIEBwYXJhbSBub3JtYWxpemVkIC0gdmFsdWUgdG8gZGVub3JtYWxpemVcbiAqIEBwYXJhbSBtaW4gLSBtYXggdG8gZGVub3JtYWxpemUgYmV0d2VlblxuICogQHBhcmFtIG1heCAtIG1pbiB0byBkZW5vcm1hbGl6ZSBiZXR3ZWVuXG4gKiBAcmV0dXJucyB0aGUgZGVub3JtYWxpemVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGRlbm9ybWFsaXplKG5vcm1hbGl6ZWQsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQgKiAobWF4IC0gbWluKSArIG1pbjtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgc2hvcnRlc3QgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBnaXZlbiBhbmdsZXMgZ2l2ZW4gaW4gZGVncmVlcy5cbiAqIEBwYXJhbSBjdXJyZW50IC0gY3VycmVudCBhbmdsZSBpbiBkZWdyZWVzXG4gKiBAcGFyYW0gdGFyZ2V0IC0gdGFyZ2V0IGFuZ2xlIGluIGRlZ3JlZXNcbiAqIEByZXR1cm5zIHRoZSBkZWx0YVxuICovXG5mdW5jdGlvbiBkZWx0YUFuZ2xlKGN1cnJlbnQsIHRhcmdldCkge1xuICAgIGxldCBudW0gPSByZXBlYXQodGFyZ2V0IC0gY3VycmVudCwgMzYwLjApO1xuICAgIGlmIChudW0gPiAxODAuMCkge1xuICAgICAgICBudW0gLT0gMzYwLjA7XG4gICAgfVxuICAgIHJldHVybiBudW07XG59XG4vKipcbiAqIFBpbmdQb25ncyB0aGUgdmFsdWUgdCwgc28gdGhhdCBpdCBpcyBuZXZlciBsYXJnZXIgdGhhbiBsZW5ndGggYW5kIG5ldmVyIHNtYWxsZXIgdGhhbiAwLlxuICogQHBhcmFtIHR4IC0gdmFsdWVcbiAqIEBwYXJhbSBsZW5ndGggLSBsZW5ndGhcbiAqIEByZXR1cm5zIFRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIG1vdmUgYmFjayBhbmQgZm9ydGggYmV0d2VlbiAwIGFuZCBsZW5ndGhcbiAqL1xuZnVuY3Rpb24gcGluZ1BvbmcodHgsIGxlbmd0aCkge1xuICAgIGNvbnN0IHQgPSByZXBlYXQodHgsIGxlbmd0aCAqIDIuMCk7XG4gICAgcmV0dXJuIGxlbmd0aCAtIE1hdGguYWJzKHQgLSBsZW5ndGgpO1xufVxuLyoqXG4gKiBJbnRlcnBvbGF0ZXMgYmV0d2VlbiBtaW4gYW5kIG1heCB3aXRoIHNtb290aGluZyBhdCB0aGUgbGltaXRzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaW50ZXJwb2xhdGVzIGJldHdlZW4gbWluIGFuZCBtYXggaW4gYSBzaW1pbGFyIHdheSB0byBMZXJwLiBIb3dldmVyLCB0aGUgaW50ZXJwb2xhdGlvbiB3aWxsIGdyYWR1YWxseSBzcGVlZCB1cFxuICogZnJvbSB0aGUgc3RhcnQgYW5kIHNsb3cgZG93biB0b3dhcmQgdGhlIGVuZC4gVGhpcyBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIG5hdHVyYWwtbG9va2luZyBhbmltYXRpb24sIGZhZGluZyBhbmQgb3RoZXIgdHJhbnNpdGlvbnMuXG4gKiBAcGFyYW0gZnJvbSAtIGZyb21cbiAqIEBwYXJhbSB0byAtIHRvXG4gKiBAcGFyYW0gdHggLSB2YWx1ZVxuICogQHJldHVybnMgdGhlIHNtb290aCBzdGVwcGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHNtb290aFN0ZXAoZnJvbSwgdG8sIHR4KSB7XG4gICAgbGV0IHQgPSBjbGFtcCh0eCk7XG4gICAgdCA9IC0yLjAgKiB0ICogdCAqIHQgKyAzLjAgKiB0ICogdDtcbiAgICByZXR1cm4gdG8gKiB0ICsgZnJvbSAqICgxLjAgLSB0KTtcbn1cbi8qKlxuICogTW92ZXMgYSB2YWx1ZSBjdXJyZW50IHRvd2FyZHMgdGFyZ2V0LlxuICpcbiAqIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgTWF0aGYuTGVycCBidXQgaW5zdGVhZCB0aGUgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhhdCB0aGUgc3BlZWQgbmV2ZXIgZXhjZWVkcyBtYXhEZWx0YS5cbiAqIE5lZ2F0aXZlIHZhbHVlcyBvZiBtYXhEZWx0YSBwdXNoZXMgdGhlIHZhbHVlIGF3YXkgZnJvbSB0YXJnZXQuXG4gKiBAcGFyYW0gY3VycmVudCAtIGN1cnJlbnQgdmFsdWVcbiAqIEBwYXJhbSB0YXJnZXQgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSBtYXhEZWx0YSAtIG1heCBkaXN0YW5jZSB0byBtb3ZlXG4gKiBAcmV0dXJucyByZXN1bHRpbmcgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbW92ZVRvd2FyZHMoY3VycmVudCwgdGFyZ2V0LCBtYXhEZWx0YSkge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGlmIChNYXRoLmFicyh0YXJnZXQgLSBjdXJyZW50KSA8PSBtYXhEZWx0YSkge1xuICAgICAgICByZXN1bHQgPSB0YXJnZXQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBjdXJyZW50ICsgc2lnbih0YXJnZXQgLSBjdXJyZW50KSAqIG1heERlbHRhO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBTYW1lIGFzIE1vdmVUb3dhcmRzIGJ1dCBtYWtlcyBzdXJlIHRoZSB2YWx1ZXMgaW50ZXJwb2xhdGUgY29ycmVjdGx5IHdoZW4gdGhleSB3cmFwIGFyb3VuZCAzNjAgZGVncmVlcy5cbiAqXG4gKiBWYXJpYWJsZXMgY3VycmVudCBhbmQgdGFyZ2V0IGFyZSBhc3N1bWVkIHRvIGJlIGluIGRlZ3JlZXMuIEZvciBvcHRpbWl6YXRpb24gcmVhc29ucywgbmVnYXRpdmUgdmFsdWVzIG9mIG1heERlbHRhXG4gKiAgYXJlIG5vdCBzdXBwb3J0ZWQgYW5kIG1heSBjYXVzZSBvc2NpbGxhdGlvbi4gVG8gcHVzaCBjdXJyZW50IGF3YXkgZnJvbSBhIHRhcmdldCBhbmdsZSwgYWRkIDE4MCB0byB0aGF0IGFuZ2xlIGluc3RlYWQuXG4gKiBAcGFyYW0gY3VycmVudCAtIGN1cnJlbnQgdmFsdWVcbiAqIEBwYXJhbSB0YXJnZXQgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSBtYXhEZWx0YSAtIG1heCBkaXN0YW5jZSB0byBtb3ZlXG4gKiBAcmV0dXJucyByZXN1bHRpbmcgYW5nbGVcbiAqL1xuZnVuY3Rpb24gbW92ZVRvd2FyZHNBbmdsZShjdXJyZW50LCB0YXJnZXQsIG1heERlbHRhKSB7XG4gICAgY29uc3QgbnVtID0gZGVsdGFBbmdsZShjdXJyZW50LCB0YXJnZXQpO1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGlmICgtbWF4RGVsdGEgPCBudW0gJiYgbnVtIDwgbWF4RGVsdGEpIHtcbiAgICAgICAgcmVzdWx0ID0gdGFyZ2V0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gbW92ZVRvd2FyZHMoY3VycmVudCwgY3VycmVudCArIG51bSwgbWF4RGVsdGEpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHNjYWxhciB3aXRoIHZhbHVlcyBsaW5lYXJseSBpbnRlcnBvbGF0ZWQgb2YgXCJhbW91bnRcIiBiZXR3ZWVuIHRoZSBzdGFydCBzY2FsYXIgYW5kIHRoZSBlbmQgc2NhbGFyXG4gKiBAcGFyYW0gc3RhcnQgLSBzdGFydCB2YWx1ZVxuICogQHBhcmFtIGVuZCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIGFtb3VudCAtIGFtb3VudCB0byBsZXJwIGJldHdlZW5cbiAqIEByZXR1cm5zIHRoZSBsZXJwZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbGVycChzdGFydCwgZW5kLCBhbW91bnQpIHtcbiAgICByZXR1cm4gc3RhcnQgKyAoZW5kIC0gc3RhcnQpICogYW1vdW50O1xufVxuLyoqXG4gKiBTYW1lIGFzIExlcnAgYnV0IG1ha2VzIHN1cmUgdGhlIHZhbHVlcyBpbnRlcnBvbGF0ZSBjb3JyZWN0bHkgd2hlbiB0aGV5IHdyYXAgYXJvdW5kIDM2MCBkZWdyZWVzLlxuICogVGhlIHBhcmFtZXRlciB0IGlzIGNsYW1wZWQgdG8gdGhlIHJhbmdlIFswLCAxXS4gVmFyaWFibGVzIGEgYW5kIGIgYXJlIGFzc3VtZWQgdG8gYmUgaW4gZGVncmVlcy5cbiAqIEBwYXJhbSBzdGFydCAtIHN0YXJ0IHZhbHVlXG4gKiBAcGFyYW0gZW5kIC0gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gYW1vdW50IC0gYW1vdW50IHRvIGxlcnAgYmV0d2VlblxuICogQHJldHVybnMgdGhlIGxlcnBlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBsZXJwQW5nbGUoc3RhcnQsIGVuZCwgYW1vdW50KSB7XG4gICAgbGV0IG51bSA9IHJlcGVhdChlbmQgLSBzdGFydCwgMzYwLjApO1xuICAgIGlmIChudW0gPiAxODAuMCkge1xuICAgICAgICBudW0gLT0gMzYwLjA7XG4gICAgfVxuICAgIHJldHVybiBzdGFydCArIG51bSAqIGNsYW1wKGFtb3VudCk7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxpbmVhciBwYXJhbWV0ZXIgdCB0aGF0IHByb2R1Y2VzIHRoZSBpbnRlcnBvbGFudCB2YWx1ZSB3aXRoaW4gdGhlIHJhbmdlIFthLCBiXS5cbiAqIEBwYXJhbSBhIC0gc3RhcnQgdmFsdWVcbiAqIEBwYXJhbSBiIC0gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gdmFsdWUgLSB2YWx1ZSBiZXR3ZWVuIGEgYW5kIGJcbiAqIEByZXR1cm5zIHRoZSBpbnZlcnNlTGVycCB2YWx1ZVxuICovXG5mdW5jdGlvbiBpbnZlcnNlTGVycChhLCBiLCB2YWx1ZSkge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgIHJlc3VsdCA9IGNsYW1wKCh2YWx1ZSAtIGEpIC8gKGIgLSBhKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSAwLjA7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJldHVybnMgYSBuZXcgc2NhbGFyIGxvY2F0ZWQgZm9yIFwiYW1vdW50XCIgKGZsb2F0KSBvbiB0aGUgSGVybWl0ZSBzcGxpbmUgZGVmaW5lZCBieSB0aGUgc2NhbGFycyBcInZhbHVlMVwiLCBcInZhbHVlM1wiLCBcInRhbmdlbnQxXCIsIFwidGFuZ2VudDJcIi5cbiAqIHtAbGluayBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL0hlcm1pdGVQb2x5bm9taWFsLmh0bWx9XG4gKiBAcGFyYW0gdmFsdWUxIC0gc3BsaW5lIHZhbHVlXG4gKiBAcGFyYW0gdGFuZ2VudDEgLSBzcGxpbmUgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZTIgLSBzcGxpbmUgdmFsdWVcbiAqIEBwYXJhbSB0YW5nZW50MiAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIGFtb3VudCAtIGlucHV0IHZhbHVlXG4gKiBAcmV0dXJucyBoZXJtaXRlIHJlc3VsdFxuICovXG5mdW5jdGlvbiBoZXJtaXRlKHZhbHVlMSwgdGFuZ2VudDEsIHZhbHVlMiwgdGFuZ2VudDIsIGFtb3VudCkge1xuICAgIGNvbnN0IHNxdWFyZWQgPSBhbW91bnQgKiBhbW91bnQ7XG4gICAgY29uc3QgY3ViZWQgPSBhbW91bnQgKiBzcXVhcmVkO1xuICAgIGNvbnN0IHBhcnQxID0gMi4wICogY3ViZWQgLSAzLjAgKiBzcXVhcmVkICsgMS4wO1xuICAgIGNvbnN0IHBhcnQyID0gLTIuMCAqIGN1YmVkICsgMy4wICogc3F1YXJlZDtcbiAgICBjb25zdCBwYXJ0MyA9IGN1YmVkIC0gMi4wICogc3F1YXJlZCArIGFtb3VudDtcbiAgICBjb25zdCBwYXJ0NCA9IGN1YmVkIC0gc3F1YXJlZDtcbiAgICByZXR1cm4gdmFsdWUxICogcGFydDEgKyB2YWx1ZTIgKiBwYXJ0MiArIHRhbmdlbnQxICogcGFydDMgKyB0YW5nZW50MiAqIHBhcnQ0O1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIGZsb2F0IG51bWJlciBiZXR3ZWVuIGFuZCBtaW4gYW5kIG1heCB2YWx1ZXNcbiAqIEBwYXJhbSBtaW4gLSBtaW4gdmFsdWUgb2YgcmFuZG9tXG4gKiBAcGFyYW0gbWF4IC0gbWF4IHZhbHVlIG9mIHJhbmRvbVxuICogQHJldHVybnMgcmFuZG9tIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbVJhbmdlKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1pbiA9PT0gbWF4KSB7XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBwZXJjZW50YWdlIG9mIGEgbnVtYmVyIGluIGEgZ2l2ZW4gcmFuZ2UuXG4gKlxuICogUmFuZ2VUb1BlcmNlbnQoNDAsMjAsNjApIHdpbGwgcmV0dXJuIDAuNSAoNTAlKVxuICogUmFuZ2VUb1BlcmNlbnQoMzQsMCwxMDApIHdpbGwgcmV0dXJuIDAuMzQgKDM0JSlcbiAqIEBwYXJhbSBudW0gLSB0byBjb252ZXJ0IHRvIHBlcmNlbnRhZ2VcbiAqIEBwYXJhbSBtaW4gLSBtaW4gcmFuZ2VcbiAqIEBwYXJhbSBtYXggLSBtYXggcmFuZ2VcbiAqIEByZXR1cm5zIHRoZSBwZXJjZW50YWdlXG4gKi9cbmZ1bmN0aW9uIHJhbmdlVG9QZXJjZW50KG51bSwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gKG51bSAtIG1pbikgLyAobWF4IC0gbWluKTtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIG51bWJlciB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwZXJjZW50YWdlIGluIGEgZ2l2ZW4gcmFuZ2UuXG4gKlxuICogUGVyY2VudFRvUmFuZ2UoMC4zNCwwLDEwMCkgd2lsbCByZXR1cm4gMzQuXG4gKiBAcGFyYW0gcGVyY2VudCAtIHRvIGNvbnZlcnQgdG8gbnVtYmVyXG4gKiBAcGFyYW0gbWluIC0gbWluIHJhbmdlXG4gKiBAcGFyYW0gbWF4IC0gbWF4IHJhbmdlXG4gKiBAcmV0dXJucyB0aGUgbnVtYmVyXG4gKi9cbmZ1bmN0aW9uIHBlcmNlbnRUb1JhbmdlKHBlcmNlbnQsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIChtYXggLSBtaW4pICogcGVyY2VudCArIG1pbjtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgYW5nbGUgY29udmVydGVkIHRvIGVxdWl2YWxlbnQgdmFsdWUgYmV0d2VlbiAtTWF0aC5QSSBhbmQgTWF0aC5QSSByYWRpYW5zLlxuICogQHBhcmFtIGFuZ2xlIC0gVGhlIGFuZ2xlIHRvIG5vcm1hbGl6ZSBpbiByYWRpYW4uXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIGFuZ2xlLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSYWRpYW5zKGFuZ2xlKSB7XG4gICAgLy8gTW9yZSBwcmVjaXNlIGJ1dCBzbG93ZXIgdmVyc2lvbiBrZXB0IGZvciByZWZlcmVuY2UuXG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29tbWVudGVkLW91dC1jb2RlXG4gICAgLypcbiAgICAgIC8vIGFuZ2xlID0gYW5nbGUgJSBUb29scy5Ud29QaTtcbiAgICAgIC8vIGFuZ2xlID0gKGFuZ2xlICsgVG9vbHMuVHdvUGkpICUgVG9vbHMuVHdvUGk7XG4gIFxuICAgICAgLy9pZiAoYW5nbGUgPiBNYXRoLlBJKSB7XG4gICAgICAvL1x0YW5nbGUgLT0gVG9vbHMuVHdvUGk7XG4gICAgICAvL31cbiAgICAgICAgKi9cbiAgICByZXR1cm4gYW5nbGUgLSBUd29QaSAqIE1hdGguZmxvb3IoKGFuZ2xlICsgTWF0aC5QSSkgLyBUd29QaSk7XG59XG4vKipcbiAqIFNjYWxhciBjb21wdXRhdGlvbiBsaWJyYXJ5XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuU2NhbGFyID0ge1xuICAgIHdpdGhpbkVwc2lsb24sXG4gICAgdG9IZXgsXG4gICAgc2lnbixcbiAgICBjbGFtcCxcbiAgICBsb2cyLFxuICAgIHJlcGVhdCxcbiAgICBub3JtYWxpemUsXG4gICAgZGVub3JtYWxpemUsXG4gICAgZGVsdGFBbmdsZSxcbiAgICBwaW5nUG9uZyxcbiAgICBzbW9vdGhTdGVwLFxuICAgIG1vdmVUb3dhcmRzLFxuICAgIG1vdmVUb3dhcmRzQW5nbGUsXG4gICAgbGVycCxcbiAgICBsZXJwQW5nbGUsXG4gICAgaW52ZXJzZUxlcnAsXG4gICAgaGVybWl0ZSxcbiAgICByYW5kb21SYW5nZSxcbiAgICByYW5nZVRvUGVyY2VudCxcbiAgICBwZXJjZW50VG9SYW5nZSxcbiAgICBub3JtYWxpemVSYWRpYW5zLFxuICAgIFR3b1BpXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2NhbGFyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SQUQyREVHID0gZXhwb3J0cy5ERUcyUkFEID0gZXhwb3J0cy5FcHNpbG9uID0gZXhwb3J0cy5Ub0xpbmVhclNwYWNlID0gZXhwb3J0cy5Ub0dhbW1hU3BhY2UgPSBleHBvcnRzLlNwYWNlID0gZXhwb3J0cy5PcmllbnRhdGlvbiA9IHZvaWQgMDtcbi8qKlxuICogRGVmaW5lcyBwb3RlbnRpYWwgb3JpZW50YXRpb24gZm9yIGJhY2sgZmFjZSBjdWxsaW5nXG4gKiBAcHVibGljXG4gKi9cbnZhciBPcmllbnRhdGlvbjtcbihmdW5jdGlvbiAoT3JpZW50YXRpb24pIHtcbiAgICAvKipcbiAgICAgKiBDbG9ja3dpc2VcbiAgICAgKi9cbiAgICBPcmllbnRhdGlvbltPcmllbnRhdGlvbltcIkNXXCJdID0gMF0gPSBcIkNXXCI7XG4gICAgLyoqIENvdW50ZXIgY2xvY2t3aXNlICovXG4gICAgT3JpZW50YXRpb25bT3JpZW50YXRpb25bXCJDQ1dcIl0gPSAxXSA9IFwiQ0NXXCI7XG59KShPcmllbnRhdGlvbiA9IGV4cG9ydHMuT3JpZW50YXRpb24gfHwgKGV4cG9ydHMuT3JpZW50YXRpb24gPSB7fSkpO1xuLyoqXG4gKiBEZWZpbmVzIHN1cHBvcnRlZCBzcGFjZXNcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFNwYWNlO1xuKGZ1bmN0aW9uIChTcGFjZSkge1xuICAgIC8qKiBMb2NhbCAob2JqZWN0KSBzcGFjZSAqL1xuICAgIFNwYWNlW1NwYWNlW1wiTE9DQUxcIl0gPSAwXSA9IFwiTE9DQUxcIjtcbiAgICAvKiogV29ybGQgc3BhY2UgKi9cbiAgICBTcGFjZVtTcGFjZVtcIldPUkxEXCJdID0gMV0gPSBcIldPUkxEXCI7XG4gICAgLyoqIEJvbmUgc3BhY2UgKi9cbiAgICBTcGFjZVtTcGFjZVtcIkJPTkVcIl0gPSAyXSA9IFwiQk9ORVwiO1xufSkoU3BhY2UgPSBleHBvcnRzLlNwYWNlIHx8IChleHBvcnRzLlNwYWNlID0ge30pKTtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCB0byBjb252ZXJ0IGEgdmFsdWUgdG8gZ2FtbWEgc3BhY2VcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5Ub0dhbW1hU3BhY2UgPSAxIC8gMi4yO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgYSB2YWx1ZSB0byBsaW5lYXIgc3BhY2VcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5Ub0xpbmVhclNwYWNlID0gMi4yO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGRlZmluZSB0aGUgbWluaW1hbCBudW1iZXIgdmFsdWUgaW4gQmFieWxvbi5qc1xuICogQHB1YmxpY1xuICovXG5leHBvcnRzLkVwc2lsb24gPSAwLjAwMDAwMTtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCB0byBjb252ZXJ0IGZyb20gRXVsZXIgZGVncmVlcyB0byByYWRpYW5zXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuREVHMlJBRCA9IE1hdGguUEkgLyAxODA7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gY29udmVydCBmcm9tIHJhZGlhbnMgdG8gRXVsZXIgZGVncmVlc1xuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlJBRDJERUcgPSAzNjAgLyAoTWF0aC5QSSAqIDIpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlF1YXRlcm5pb24gPSB2b2lkIDA7XG5jb25zdCBWZWN0b3IzXzEgPSByZXF1aXJlKFwiLi9WZWN0b3IzXCIpO1xuY29uc3QgU2NhbGFyXzEgPSByZXF1aXJlKFwiLi9TY2FsYXJcIik7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFF1YXRlcm5pb247XG4oZnVuY3Rpb24gKFF1YXRlcm5pb24pIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFF1YXRlcm5pb24gZnJvbSB0aGUgZ2l2ZW4gZmxvYXRzXG4gICAgICogQHBhcmFtIHggLSBkZWZpbmVzIHRoZSBmaXJzdCBjb21wb25lbnQgKDAgYnkgZGVmYXVsdClcbiAgICAgKiBAcGFyYW0geSAtIGRlZmluZXMgdGhlIHNlY29uZCBjb21wb25lbnQgKDAgYnkgZGVmYXVsdClcbiAgICAgKiBAcGFyYW0geiAtIGRlZmluZXMgdGhlIHRoaXJkIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KVxuICAgICAqIEBwYXJhbSB3IC0gZGVmaW5lcyB0aGUgZm91cnRoIGNvbXBvbmVudCAoMS4wIGJ5IGRlZmF1bHQpXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKFxuICAgIC8qKiBkZWZpbmVzIHRoZSBmaXJzdCBjb21wb25lbnQgKDAgYnkgZGVmYXVsdCkgKi9cbiAgICB4ID0gMC4wLCBcbiAgICAvKiogZGVmaW5lcyB0aGUgc2Vjb25kIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KSAqL1xuICAgIHkgPSAwLjAsIFxuICAgIC8qKiBkZWZpbmVzIHRoZSB0aGlyZCBjb21wb25lbnQgKDAgYnkgZGVmYXVsdCkgKi9cbiAgICB6ID0gMC4wLCBcbiAgICAvKiogZGVmaW5lcyB0aGUgZm91cnRoIGNvbXBvbmVudCAoMS4wIGJ5IGRlZmF1bHQpICovXG4gICAgdyA9IDEuMCkge1xuICAgICAgICByZXR1cm4geyB4LCB5LCB6LCB3IH07XG4gICAgfVxuICAgIFF1YXRlcm5pb24uY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgUXVhdGVybmlvbiBhcyB0aGUgcmVzdWx0IG9mIHRoZSBhZGRpdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHF1YXRlcm5pb25zLlxuICAgICAqIEBwYXJhbSBxMSAtIHRoZSBmaXJzdCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHEyIC0gdGhlIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkKHExLCBxMikge1xuICAgICAgICByZXR1cm4geyB4OiBxMS54ICsgcTIueCwgeTogcTEueSArIHEyLnksIHo6IHExLnogKyBxMi56LCB3OiBxMS53ICsgcTIudyB9O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmFkZCA9IGFkZDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHJvdGF0aW9uIGZyb20gdGhlIGdpdmVuIEV1bGVyIGZsb2F0IGFuZ2xlcyAoeSwgeCwgeikgYW5kIHN0b3JlcyBpdCBpbiB0aGUgdGFyZ2V0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0geWF3IC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFkgYXhpc1xuICAgICAqIEBwYXJhbSBwaXRjaCAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBYIGF4aXNcbiAgICAgKiBAcGFyYW0gcm9sbCAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBaIGF4aXNcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByb3RhdGlvbllhd1BpdGNoUm9sbCh5YXcsIHBpdGNoLCByb2xsKSB7XG4gICAgICAgIC8vIEltcGxlbWVudGVkIHVuaXR5LWJhc2VkIGNhbGN1bGF0aW9ucyBmcm9tOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTYwNTU4MTNcbiAgICAgICAgY29uc3QgaGFsZlBpdGNoID0gcGl0Y2ggKiAwLjU7XG4gICAgICAgIGNvbnN0IGhhbGZZYXcgPSB5YXcgKiAwLjU7XG4gICAgICAgIGNvbnN0IGhhbGZSb2xsID0gcm9sbCAqIDAuNTtcbiAgICAgICAgY29uc3QgYzEgPSBNYXRoLmNvcyhoYWxmUGl0Y2gpO1xuICAgICAgICBjb25zdCBjMiA9IE1hdGguY29zKGhhbGZZYXcpO1xuICAgICAgICBjb25zdCBjMyA9IE1hdGguY29zKGhhbGZSb2xsKTtcbiAgICAgICAgY29uc3QgczEgPSBNYXRoLnNpbihoYWxmUGl0Y2gpO1xuICAgICAgICBjb25zdCBzMiA9IE1hdGguc2luKGhhbGZZYXcpO1xuICAgICAgICBjb25zdCBzMyA9IE1hdGguc2luKGhhbGZSb2xsKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZShjMiAqIHMxICogYzMgKyBzMiAqIGMxICogczMsIHMyICogYzEgKiBjMyAtIGMyICogczEgKiBzMywgYzIgKiBjMSAqIHMzIC0gczIgKiBzMSAqIGMzLCBjMiAqIGMxICogYzMgKyBzMiAqIHMxICogczMpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLnJvdGF0aW9uWWF3UGl0Y2hSb2xsID0gcm90YXRpb25ZYXdQaXRjaFJvbGw7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHJvdGF0aW9uIHRoYXQgcm90YXRlcyB6IGRlZ3JlZXMgYXJvdW5kIHRoZSB6IGF4aXMsIHggZGVncmVlcyBhcm91bmQgdGhlIHggYXhpcywgYW5kIHkgZGVncmVlcyBhcm91bmQgdGhlIHkgYXhpcy5cbiAgICAgKiBAcGFyYW0geCAtIHRoZSByb3RhdGlvbiBvbiB0aGUgeCBheGlzIGluIGV1bGVyIGRlZ3JlZXNcbiAgICAgKiBAcGFyYW0geSAtIHRoZSByb3RhdGlvbiBvbiB0aGUgeSBheGlzIGluIGV1bGVyIGRlZ3JlZXNcbiAgICAgKiBAcGFyYW0geiAtIHRoZSByb3RhdGlvbiBvbiB0aGUgeiBheGlzIGluIGV1bGVyIGRlZ3JlZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldWxlcih4LCB5LCB6KSB7XG4gICAgICAgIHJldHVybiByb3RhdGlvbllhd1BpdGNoUm9sbCh5ICogdHlwZXNfMS5ERUcyUkFELCB4ICogdHlwZXNfMS5ERUcyUkFELCB6ICogdHlwZXNfMS5ERUcyUkFEKTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5ldWxlciA9IGV1bGVyO1xuICAgIC8qKlxuICAgICAqIEdldHMgbGVuZ3RoIG9mIGN1cnJlbnQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSBxdWF0ZXJuaW9uIGxlbmd0aCAoZmxvYXQpXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVuZ3RoKHEpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChsZW5ndGhTcXVhcmVkKHEpKTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5sZW5ndGggPSBsZW5ndGg7XG4gICAgLyoqXG4gICAgICogR2V0cyBsZW5ndGggb2YgY3VycmVudCBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgdGhlIHF1YXRlcm5pb24gbGVuZ3RoIChmbG9hdClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGhTcXVhcmVkKHEpIHtcbiAgICAgICAgcmV0dXJuIHEueCAqIHEueCArIHEueSAqIHEueSArIHEueiAqIHEueiArIHEudyAqIHEudztcbiAgICB9XG4gICAgUXVhdGVybmlvbi5sZW5ndGhTcXVhcmVkID0gbGVuZ3RoU3F1YXJlZDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCAoZmxvYXQpIGJldHdlZW4gdGhlIHF1YXRlcm5pb25zIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB0aGUgZG90IHByb2R1Y3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb3QobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIChsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0LnogKyBsZWZ0LncgKiByaWdodC53KTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5kb3QgPSBkb3Q7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYW5nbGUgaW4gZGVncmVlcyBiZXR3ZWVuIHR3byByb3RhdGlvbnMgYSBhbmQgYi5cbiAgICAgKiBAcGFyYW0gcXVhdDEgLSBkZWZpbmVzIHRoZSBmaXJzdCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHF1YXQyIC0gZGVmaW5lcyB0aGUgc2Vjb25kIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhbmdsZShxdWF0MSwgcXVhdDIpIHtcbiAgICAgICAgY29uc3QgZG90VmFsID0gZG90KHF1YXQxLCBxdWF0Mik7XG4gICAgICAgIHJldHVybiBNYXRoLmFjb3MoTWF0aC5taW4oTWF0aC5hYnMoZG90VmFsKSwgMSkpICogMiAqIHR5cGVzXzEuUkFEMkRFRztcbiAgICB9XG4gICAgUXVhdGVybmlvbi5hbmdsZSA9IGFuZ2xlO1xuICAgIC8qKlxuICAgICAqIFRoZSBmcm9tIHF1YXRlcm5pb24gaXMgcm90YXRlZCB0b3dhcmRzIHRvIGJ5IGFuIGFuZ3VsYXIgc3RlcCBvZiBtYXhEZWdyZWVzRGVsdGEuXG4gICAgICogQHBhcmFtIGZyb20gLSBkZWZpbmVzIHRoZSBmaXJzdCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHRvIC0gZGVmaW5lcyB0aGUgc2Vjb25kIHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gbWF4RGVncmVlc0RlbHRhIC0gdGhlIGludGVydmFsIHN0ZXBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByb3RhdGVUb3dhcmRzKGZyb20sIHRvLCBtYXhEZWdyZWVzRGVsdGEpIHtcbiAgICAgICAgY29uc3QgbnVtID0gYW5nbGUoZnJvbSwgdG8pO1xuICAgICAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdG87XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKDEsIG1heERlZ3JlZXNEZWx0YSAvIG51bSk7XG4gICAgICAgIHJldHVybiBzbGVycChmcm9tLCB0bywgdCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ucm90YXRlVG93YXJkcyA9IHJvdGF0ZVRvd2FyZHM7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHJvdGF0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBmb3J3YXJkIGFuZCB1cHdhcmRzIGRpcmVjdGlvbnMuXG4gICAgICogQHBhcmFtIGZvcndhcmQgLSB0aGUgZGlyZWN0aW9uIHRvIGxvb2sgaW5cbiAgICAgKiBAcGFyYW0gdXAgLSB0aGUgdmVjdG9yIHRoYXQgZGVmaW5lcyBpbiB3aGljaCBkaXJlY3Rpb24gdXAgaXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsb29rUm90YXRpb24oZm9yd2FyZCwgdXAgPSB7IHg6IDAuMCwgeTogMS4wLCB6OiAwLjAgfSkge1xuICAgICAgICBjb25zdCBmb3J3YXJkTmV3ID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKGZvcndhcmQpO1xuICAgICAgICBjb25zdCByaWdodCA9IFZlY3RvcjNfMS5WZWN0b3IzLm5vcm1hbGl6ZShWZWN0b3IzXzEuVmVjdG9yMy5jcm9zcyh1cCwgZm9yd2FyZE5ldykpO1xuICAgICAgICBjb25zdCB1cE5ldyA9IFZlY3RvcjNfMS5WZWN0b3IzLmNyb3NzKGZvcndhcmROZXcsIHJpZ2h0KTtcbiAgICAgICAgY29uc3QgbTAwID0gcmlnaHQueDtcbiAgICAgICAgY29uc3QgbTAxID0gcmlnaHQueTtcbiAgICAgICAgY29uc3QgbTAyID0gcmlnaHQuejtcbiAgICAgICAgY29uc3QgbTEwID0gdXBOZXcueDtcbiAgICAgICAgY29uc3QgbTExID0gdXBOZXcueTtcbiAgICAgICAgY29uc3QgbTEyID0gdXBOZXcuejtcbiAgICAgICAgY29uc3QgbTIwID0gZm9yd2FyZE5ldy54O1xuICAgICAgICBjb25zdCBtMjEgPSBmb3J3YXJkTmV3Lnk7XG4gICAgICAgIGNvbnN0IG0yMiA9IGZvcndhcmROZXcuejtcbiAgICAgICAgY29uc3QgbnVtOCA9IG0wMCArIG0xMSArIG0yMjtcbiAgICAgICAgY29uc3QgcXVhdGVybmlvbiA9IGNyZWF0ZSgpO1xuICAgICAgICBpZiAobnVtOCA+IDApIHtcbiAgICAgICAgICAgIGxldCBudW0gPSBNYXRoLnNxcnQobnVtOCArIDEpO1xuICAgICAgICAgICAgcXVhdGVybmlvbi53ID0gbnVtICogMC41O1xuICAgICAgICAgICAgbnVtID0gMC41IC8gbnVtO1xuICAgICAgICAgICAgcXVhdGVybmlvbi54ID0gKG0xMiAtIG0yMSkgKiBudW07XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnkgPSAobTIwIC0gbTAyKSAqIG51bTtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueiA9IChtMDEgLSBtMTApICogbnVtO1xuICAgICAgICAgICAgcmV0dXJuIHF1YXRlcm5pb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG0wMCA+PSBtMTEgJiYgbTAwID49IG0yMikge1xuICAgICAgICAgICAgY29uc3QgbnVtNyA9IE1hdGguc3FydCgxICsgbTAwIC0gbTExIC0gbTIyKTtcbiAgICAgICAgICAgIGNvbnN0IG51bTQgPSAwLjUgLyBudW03O1xuICAgICAgICAgICAgcXVhdGVybmlvbi54ID0gMC41ICogbnVtNztcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueSA9IChtMDEgKyBtMTApICogbnVtNDtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueiA9IChtMDIgKyBtMjApICogbnVtNDtcbiAgICAgICAgICAgIHF1YXRlcm5pb24udyA9IChtMTIgLSBtMjEpICogbnVtNDtcbiAgICAgICAgICAgIHJldHVybiBxdWF0ZXJuaW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtMTEgPiBtMjIpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bTYgPSBNYXRoLnNxcnQoMSArIG0xMSAtIG0wMCAtIG0yMik7XG4gICAgICAgICAgICBjb25zdCBudW0zID0gMC41IC8gbnVtNjtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueCA9IChtMTAgKyBtMDEpICogbnVtMztcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueSA9IDAuNSAqIG51bTY7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnogPSAobTIxICsgbTEyKSAqIG51bTM7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLncgPSAobTIwIC0gbTAyKSAqIG51bTM7XG4gICAgICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBudW01ID0gTWF0aC5zcXJ0KDEgKyBtMjIgLSBtMDAgLSBtMTEpO1xuICAgICAgICBjb25zdCBudW0yID0gMC41IC8gbnVtNTtcbiAgICAgICAgcXVhdGVybmlvbi54ID0gKG0yMCArIG0wMikgKiBudW0yO1xuICAgICAgICBxdWF0ZXJuaW9uLnkgPSAobTIxICsgbTEyKSAqIG51bTI7XG4gICAgICAgIHF1YXRlcm5pb24ueiA9IDAuNSAqIG51bTU7XG4gICAgICAgIHF1YXRlcm5pb24udyA9IChtMDEgLSBtMTApICogbnVtMjtcbiAgICAgICAgcmV0dXJuIHF1YXRlcm5pb247XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubG9va1JvdGF0aW9uID0gbG9va1JvdGF0aW9uO1xuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSBpbiBwbGFjZSB0aGUgY3VycmVudCBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplKHEpIHtcbiAgICAgICAgY29uc3QgcUxlbmd0aCA9IDEuMCAvIGxlbmd0aChxKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZShxLnggKiBxTGVuZ3RoLCBxLnkgKiBxTGVuZ3RoLCBxLnogKiBxTGVuZ3RoLCBxLncgKiBxTGVuZ3RoKTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5ub3JtYWxpemUgPSBub3JtYWxpemU7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHJvdGF0aW9uIHdoaWNoIHJvdGF0ZXMgZnJvbSBmcm9tRGlyZWN0aW9uIHRvIHRvRGlyZWN0aW9uLlxuICAgICAqIEBwYXJhbSBmcm9tIC0gZGVmaW5lcyB0aGUgZmlyc3QgZGlyZWN0aW9uIFZlY3RvclxuICAgICAqIEBwYXJhbSB0byAtIGRlZmluZXMgdGhlIHRhcmdldCBkaXJlY3Rpb24gVmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gZnJvbVRvUm90YXRpb24oZnJvbSwgdG8sIHVwID0gVmVjdG9yM18xLlZlY3RvcjMuVXAoKSkge1xuICAgICAgICAvLyBVbml0eS1iYXNlZCBjYWxjdWxhdGlvbnMgaW1wbGVtZW50ZWQgZnJvbSBodHRwczovL2ZvcnVtLnVuaXR5LmNvbS90aHJlYWRzL3F1YXRlcm5pb24tbG9va3JvdGF0aW9uLWFyb3VuZC1hbi1heGlzLjYwODQ3MC8jcG9zdC00MDY5ODg4XG4gICAgICAgIGNvbnN0IHYwID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKGZyb20pO1xuICAgICAgICBjb25zdCB2MSA9IFZlY3RvcjNfMS5WZWN0b3IzLm5vcm1hbGl6ZSh0byk7XG4gICAgICAgIGNvbnN0IGEgPSBWZWN0b3IzXzEuVmVjdG9yMy5jcm9zcyh2MCwgdjEpO1xuICAgICAgICBjb25zdCB3ID0gTWF0aC5zcXJ0KFZlY3RvcjNfMS5WZWN0b3IzLmxlbmd0aFNxdWFyZWQodjApICogVmVjdG9yM18xLlZlY3RvcjMubGVuZ3RoU3F1YXJlZCh2MSkpICtcbiAgICAgICAgICAgIFZlY3RvcjNfMS5WZWN0b3IzLmRvdCh2MCwgdjEpO1xuICAgICAgICBpZiAoVmVjdG9yM18xLlZlY3RvcjMubGVuZ3RoU3F1YXJlZChhKSA8IDAuMDAwMSkge1xuICAgICAgICAgICAgLy8gdGhlIHZlY3RvcnMgYXJlIHBhcmFsbGVsLCBjaGVjayB3IHRvIGZpbmQgZGlyZWN0aW9uXG4gICAgICAgICAgICAvLyBpZiB3IGlzIDAgdGhlbiB2YWx1ZXMgYXJlIG9wcG9zaXRlLCBhbmQgd2Ugc291bGQgcm90YXRlIDE4MCBkZWdyZWVzIGFyb3VuZCB0aGUgc3VwcGxpZWQgYXhpc1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSB2ZWN0b3JzIGluIHRoZSBzYW1lIGRpcmVjdGlvbiBhbmQgbm8gcm90YXRpb24gc2hvdWxkIG9jY3VyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnModykgPCAwLjAwMDFcbiAgICAgICAgICAgICAgICA/IG5vcm1hbGl6ZShjcmVhdGUodXAueCwgdXAueSwgdXAueiwgMCkpXG4gICAgICAgICAgICAgICAgOiBJZGVudGl0eSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShjcmVhdGUoYS54LCBhLnksIGEueiwgdykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFF1YXRlcm5pb24uZnJvbVRvUm90YXRpb24gPSBmcm9tVG9Sb3RhdGlvbjtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlkZW50aXR5IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyAtIHRoZSBpZGVudGl0eSBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gSWRlbnRpdHkoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMC4wLCAwLjAsIDAuMCwgMS4wKTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5JZGVudGl0eSA9IElkZW50aXR5O1xuICAgIC8qKlxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgZXVsZXIgYW5nbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJvdGF0aW9uLlxuICAgICAqIEltcGxlbWVudGVkIHVuaXR5LWJhc2VkIGNhbGN1bGF0aW9ucyBmcm9tOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTYwNTU4MTNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldWxlckFuZ2xlcyhxKSB7XG4gICAgICAgIGNvbnN0IG91dCA9IFZlY3RvcjNfMS5WZWN0b3IzLmNyZWF0ZSgpO1xuICAgICAgICAvLyBpZiB0aGUgaW5wdXQgcXVhdGVybmlvbiBpcyBub3JtYWxpemVkLCB0aGlzIGlzIGV4YWN0bHkgb25lLiBPdGhlcndpc2UsIHRoaXMgYWN0cyBhcyBhIGNvcnJlY3Rpb24gZmFjdG9yIGZvciB0aGUgcXVhdGVybmlvbidzIG5vdC1ub3JtYWxpemVkbmVzc1xuICAgICAgICBjb25zdCB1bml0ID0gcS54ICogcS54ICsgcS55ICogcS55ICsgcS56ICogcS56ICsgcS53ICogcS53O1xuICAgICAgICAvLyBxIHdpbGwgaGF2ZSBhIG1hZ25pdHVkZSBvZiAwLjUgb3IgZ3JlYXRlciBpZiBhbmQgb25seSBpZiBxIGlzIGEgc2luZ3VsYXJpdHkgY2FzZVxuICAgICAgICBjb25zdCB0ZXN0ID0gcS54ICogcS53IC0gcS55ICogcS56O1xuICAgICAgICBpZiAodGVzdCA+IDAuNDk5NSAqIHVuaXQpIHtcbiAgICAgICAgICAgIC8vIHNpbmd1bGFyaXR5IGF0IG5vcnRoIHBvbGVcbiAgICAgICAgICAgIG91dC54ID0gTWF0aC5QSSAvIDI7XG4gICAgICAgICAgICBvdXQueSA9IDIgKiBNYXRoLmF0YW4yKHEueSwgcS54KTtcbiAgICAgICAgICAgIG91dC56ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0ZXN0IDwgLTAuNDk5NSAqIHVuaXQpIHtcbiAgICAgICAgICAgIC8vIHNpbmd1bGFyaXR5IGF0IHNvdXRoIHBvbGVcbiAgICAgICAgICAgIG91dC54ID0gLU1hdGguUEkgLyAyO1xuICAgICAgICAgICAgb3V0LnkgPSAtMiAqIE1hdGguYXRhbjIocS55LCBxLngpO1xuICAgICAgICAgICAgb3V0LnogPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gbm8gc2luZ3VsYXJpdHkgLSBxIGlzIHRoZSBtYWpvcml0eSBvZiBjYXNlc1xuICAgICAgICAgICAgb3V0LnggPSBNYXRoLmFzaW4oMiAqIChxLncgKiBxLnggLSBxLnkgKiBxLnopKTtcbiAgICAgICAgICAgIG91dC55ID0gTWF0aC5hdGFuMigyICogcS53ICogcS55ICsgMiAqIHEueiAqIHEueCwgMSAtIDIgKiAocS54ICogcS54ICsgcS55ICogcS55KSk7XG4gICAgICAgICAgICBvdXQueiA9IE1hdGguYXRhbjIoMiAqIHEudyAqIHEueiArIDIgKiBxLnggKiBxLnksIDEgLSAyICogKHEueiAqIHEueiArIHEueCAqIHEueCkpO1xuICAgICAgICB9XG4gICAgICAgIG91dC54ICo9IHR5cGVzXzEuUkFEMkRFRztcbiAgICAgICAgb3V0LnkgKj0gdHlwZXNfMS5SQUQyREVHO1xuICAgICAgICBvdXQueiAqPSB0eXBlc18xLlJBRDJERUc7XG4gICAgICAgIC8vIGVuc3VyZSB0aGUgZGVncmVlIHZhbHVlcyBhcmUgYmV0d2VlbiAwIGFuZCAzNjBcbiAgICAgICAgb3V0LnggPSBTY2FsYXJfMS5TY2FsYXIucmVwZWF0KG91dC54LCAzNjApO1xuICAgICAgICBvdXQueSA9IFNjYWxhcl8xLlNjYWxhci5yZXBlYXQob3V0LnksIDM2MCk7XG4gICAgICAgIG91dC56ID0gU2NhbGFyXzEuU2NhbGFyLnJlcGVhdChvdXQueiwgMzYwKTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5ldWxlckFuZ2xlcyA9IGV1bGVyQW5nbGVzO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcm90YXRpb24gZnJvbSB0aGUgZ2l2ZW4gRXVsZXIgZmxvYXQgYW5nbGVzICh5LCB4LCB6KSBhbmQgc3RvcmVzIGl0IGluIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSB5YXcgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWSBheGlzXG4gICAgICogQHBhcmFtIHBpdGNoIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFggYXhpc1xuICAgICAqIEBwYXJhbSByb2xsIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFogYXhpc1xuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYoeWF3LCBwaXRjaCwgcm9sbCwgcmVzdWx0KSB7XG4gICAgICAgIC8vIEltcGxlbWVudGVkIHVuaXR5LWJhc2VkIGNhbGN1bGF0aW9ucyBmcm9tOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTYwNTU4MTNcbiAgICAgICAgY29uc3QgaGFsZlBpdGNoID0gcGl0Y2ggKiAwLjU7XG4gICAgICAgIGNvbnN0IGhhbGZZYXcgPSB5YXcgKiAwLjU7XG4gICAgICAgIGNvbnN0IGhhbGZSb2xsID0gcm9sbCAqIDAuNTtcbiAgICAgICAgY29uc3QgYzEgPSBNYXRoLmNvcyhoYWxmUGl0Y2gpO1xuICAgICAgICBjb25zdCBjMiA9IE1hdGguY29zKGhhbGZZYXcpO1xuICAgICAgICBjb25zdCBjMyA9IE1hdGguY29zKGhhbGZSb2xsKTtcbiAgICAgICAgY29uc3QgczEgPSBNYXRoLnNpbihoYWxmUGl0Y2gpO1xuICAgICAgICBjb25zdCBzMiA9IE1hdGguc2luKGhhbGZZYXcpO1xuICAgICAgICBjb25zdCBzMyA9IE1hdGguc2luKGhhbGZSb2xsKTtcbiAgICAgICAgcmVzdWx0LnggPSBjMiAqIHMxICogYzMgKyBzMiAqIGMxICogczM7XG4gICAgICAgIHJlc3VsdC55ID0gczIgKiBjMSAqIGMzIC0gYzIgKiBzMSAqIHMzO1xuICAgICAgICByZXN1bHQueiA9IGMyICogYzEgKiBzMyAtIHMyICogczEgKiBjMztcbiAgICAgICAgcmVzdWx0LncgPSBjMiAqIGMxICogYzMgKyBzMiAqIHMxICogczM7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ucm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZiA9IHJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWY7XG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgZ2l2ZW4gcXVhdGVybmlvbiB3aXRoIHRoZSBnaXZlbiByb3RhdGlvbiBtYXRyaXggdmFsdWVzXG4gICAgICogQHBhcmFtIG1hdHJpeCAtIGRlZmluZXMgdGhlIHNvdXJjZSBtYXRyaXhcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tUm90YXRpb25NYXRyaXhUb1JlZihtYXRyaXgsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gbWF0cml4Ll9tO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpvbmUtdmFyaWFibGUtcGVyLWRlY2xhcmF0aW9uXG4gICAgICAgIGNvbnN0IG0xMSA9IGRhdGFbMF0sIG0xMiA9IGRhdGFbNF0sIG0xMyA9IGRhdGFbOF07XG4gICAgICAgIGNvbnN0IG0yMSA9IGRhdGFbMV0sIG0yMiA9IGRhdGFbNV0sIG0yMyA9IGRhdGFbOV07XG4gICAgICAgIGNvbnN0IG0zMSA9IGRhdGFbMl0sIG0zMiA9IGRhdGFbNl0sIG0zMyA9IGRhdGFbMTBdO1xuICAgICAgICAvLyB0c2xpbnQ6ZW5hYmxlOm9uZS12YXJpYWJsZS1wZXItZGVjbGFyYXRpb25cbiAgICAgICAgY29uc3QgdHJhY2UgPSBtMTEgKyBtMjIgKyBtMzM7XG4gICAgICAgIGxldCBzO1xuICAgICAgICBpZiAodHJhY2UgPiAwKSB7XG4gICAgICAgICAgICBzID0gMC41IC8gTWF0aC5zcXJ0KHRyYWNlICsgMS4wKTtcbiAgICAgICAgICAgIHJlc3VsdC53ID0gMC4yNSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueCA9IChtMzIgLSBtMjMpICogcztcbiAgICAgICAgICAgIHJlc3VsdC55ID0gKG0xMyAtIG0zMSkgKiBzO1xuICAgICAgICAgICAgcmVzdWx0LnogPSAobTIxIC0gbTEyKSAqIHM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobTExID4gbTIyICYmIG0xMSA+IG0zMykge1xuICAgICAgICAgICAgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMTEgLSBtMjIgLSBtMzMpO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAobTMyIC0gbTIzKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueCA9IDAuMjUgKiBzO1xuICAgICAgICAgICAgcmVzdWx0LnkgPSAobTEyICsgbTIxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IChtMTMgKyBtMzEpIC8gcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtMjIgPiBtMzMpIHtcbiAgICAgICAgICAgIHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTIyIC0gbTExIC0gbTMzKTtcbiAgICAgICAgICAgIHJlc3VsdC53ID0gKG0xMyAtIG0zMSkgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnggPSAobTEyICsgbTIxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IDAuMjUgKiBzO1xuICAgICAgICAgICAgcmVzdWx0LnogPSAobTIzICsgbTMyKSAvIHM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0zMyAtIG0xMSAtIG0yMik7XG4gICAgICAgICAgICByZXN1bHQudyA9IChtMjEgLSBtMTIpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gKG0xMyArIG0zMSkgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnkgPSAobTIzICsgbTMyKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IDAuMjUgKiBzO1xuICAgICAgICB9XG4gICAgfVxuICAgIFF1YXRlcm5pb24uZnJvbVJvdGF0aW9uTWF0cml4VG9SZWYgPSBmcm9tUm90YXRpb25NYXRyaXhUb1JlZjtcbiAgICAvKipcbiAgICAgKiBJbnRlcnBvbGF0ZXMgYmV0d2VlbiB0d28gcXVhdGVybmlvbnNcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgZmlyc3QgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgc2Vjb25kIHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNlXG4gICAgICogQHJldHVybnMgdGhlIG5ldyBpbnRlcnBvbGF0ZWQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsZXJwKGxlZnQsIHJpZ2h0LCBhbW91bnQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gUXVhdGVybmlvbi5JZGVudGl0eSgpO1xuICAgICAgICBRdWF0ZXJuaW9uLnNsZXJwVG9SZWYobGVmdCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5zbGVycCA9IHNsZXJwO1xuICAgIC8qKlxuICAgICAqIEludGVycG9sYXRlcyBiZXR3ZWVuIHR3byBxdWF0ZXJuaW9ucyBhbmQgc3RvcmVzIGl0IGludG8gYSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyBmaXJzdCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBhbW91bnQgLSBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2VcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzbGVycFRvUmVmKGxlZnQsIHJpZ2h0LCBhbW91bnQsIHJlc3VsdCkge1xuICAgICAgICBsZXQgbnVtMjtcbiAgICAgICAgbGV0IG51bTM7XG4gICAgICAgIGxldCBudW00ID0gbGVmdC54ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0LnkgKyBsZWZ0LnogKiByaWdodC56ICsgbGVmdC53ICogcmlnaHQudztcbiAgICAgICAgbGV0IGZsYWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKG51bTQgPCAwKSB7XG4gICAgICAgICAgICBmbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIG51bTQgPSAtbnVtNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobnVtNCA+IDAuOTk5OTk5KSB7XG4gICAgICAgICAgICBudW0zID0gMSAtIGFtb3VudDtcbiAgICAgICAgICAgIG51bTIgPSBmbGFnID8gLWFtb3VudCA6IGFtb3VudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG51bTUgPSBNYXRoLmFjb3MobnVtNCk7XG4gICAgICAgICAgICBjb25zdCBudW02ID0gMS4wIC8gTWF0aC5zaW4obnVtNSk7XG4gICAgICAgICAgICBudW0zID0gTWF0aC5zaW4oKDEuMCAtIGFtb3VudCkgKiBudW01KSAqIG51bTY7XG4gICAgICAgICAgICBudW0yID0gZmxhZ1xuICAgICAgICAgICAgICAgID8gLU1hdGguc2luKGFtb3VudCAqIG51bTUpICogbnVtNlxuICAgICAgICAgICAgICAgIDogTWF0aC5zaW4oYW1vdW50ICogbnVtNSkgKiBudW02O1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC54ID0gbnVtMyAqIGxlZnQueCArIG51bTIgKiByaWdodC54O1xuICAgICAgICByZXN1bHQueSA9IG51bTMgKiBsZWZ0LnkgKyBudW0yICogcmlnaHQueTtcbiAgICAgICAgcmVzdWx0LnogPSBudW0zICogbGVmdC56ICsgbnVtMiAqIHJpZ2h0Lno7XG4gICAgICAgIHJlc3VsdC53ID0gbnVtMyAqIGxlZnQudyArIG51bTIgKiByaWdodC53O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLnNsZXJwVG9SZWYgPSBzbGVycFRvUmVmO1xuICAgIC8qKlxuICAgICAqIE11bHRpcGxpZXMgdHdvIHF1YXRlcm5pb25zXG4gICAgICogQHBhcmFtIHNlbGYgLSBkZWZpbmVzIHRoZSBmaXJzdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHExIC0gZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBxdWF0ZXJuaW9uIHNldCBhcyB0aGUgbXVsdGlwbGljYXRpb24gcmVzdWx0IG9mIHRoZSBzZWxmIG9uZSB3aXRoIHRoZSBnaXZlbiBvbmUgXCJxMVwiXG4gICAgICovXG4gICAgZnVuY3Rpb24gbXVsdGlwbHkoc2VsZiwgcTEpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlKDAsIDAsIDAsIDEuMCk7XG4gICAgICAgIG11bHRpcGx5VG9SZWYoc2VsZiwgcTEsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubXVsdGlwbHkgPSBtdWx0aXBseTtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBnaXZlbiBcInJlc3VsdFwiIGFzIHRoZSB0aGUgbXVsdGlwbGljYXRpb24gcmVzdWx0IG9mIHRoZSBzZWxmIG9uZSB3aXRoIHRoZSBnaXZlbiBvbmUgXCJxMVwiXG4gICAgICogQHBhcmFtIHNlbGYgLSBkZWZpbmVzIHRoZSBmaXJzdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHExIC0gZGVmaW5lcyB0aGUgc2Vjb25kIG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gbXVsdGlwbHlUb1JlZihzZWxmLCBxMSwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gc2VsZi54ICogcTEudyArIHNlbGYueSAqIHExLnogLSBzZWxmLnogKiBxMS55ICsgc2VsZi53ICogcTEueDtcbiAgICAgICAgcmVzdWx0LnkgPSAtc2VsZi54ICogcTEueiArIHNlbGYueSAqIHExLncgKyBzZWxmLnogKiBxMS54ICsgc2VsZi53ICogcTEueTtcbiAgICAgICAgcmVzdWx0LnogPSBzZWxmLnggKiBxMS55IC0gc2VsZi55ICogcTEueCArIHNlbGYueiAqIHExLncgKyBzZWxmLncgKiBxMS56O1xuICAgICAgICByZXN1bHQudyA9IC1zZWxmLnggKiBxMS54IC0gc2VsZi55ICogcTEueSAtIHNlbGYueiAqIHExLnogKyBzZWxmLncgKiBxMS53O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLm11bHRpcGx5VG9SZWYgPSBtdWx0aXBseVRvUmVmO1xuICAgIGZ1bmN0aW9uIGFuZ2xlQXhpcyhkZWdyZXNzLCBheGlzKSB7XG4gICAgICAgIGlmIChWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKGF4aXMpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUXVhdGVybmlvbi5JZGVudGl0eSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IElkZW50aXR5KCk7XG4gICAgICAgIGxldCByYWRpYW5zID0gZGVncmVzcyAqIHR5cGVzXzEuREVHMlJBRDtcbiAgICAgICAgcmFkaWFucyAqPSAwLjU7XG4gICAgICAgIGNvbnN0IGEyID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKGF4aXMpO1xuICAgICAgICBWZWN0b3IzXzEuVmVjdG9yMy5zY2FsZVRvUmVmKGEyLCBNYXRoLnNpbihyYWRpYW5zKSwgYTIpO1xuICAgICAgICByZXN1bHQueCA9IGEyLng7XG4gICAgICAgIHJlc3VsdC55ID0gYTIueTtcbiAgICAgICAgcmVzdWx0LnogPSBhMi56O1xuICAgICAgICByZXN1bHQudyA9IE1hdGguY29zKHJhZGlhbnMpO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplKHJlc3VsdCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uYW5nbGVBeGlzID0gYW5nbGVBeGlzO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB6ZXJvIGZpbGxlZCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gWmVybygpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLlplcm8gPSBaZXJvO1xufSkoUXVhdGVybmlvbiA9IGV4cG9ydHMuUXVhdGVybmlvbiB8fCAoZXhwb3J0cy5RdWF0ZXJuaW9uID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVF1YXRlcm5pb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9RdWF0ZXJuaW9uXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9WZWN0b3IzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90eXBlc1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vaW5kZXhcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gYXNQcm9taXNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGxiYWNrIGFzIHVzZWQgYnkge0BsaW5rIHV0aWwuYXNQcm9taXNlfS5cclxuICogQHR5cGVkZWYgYXNQcm9taXNlQ2FsbGJhY2tcclxuICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gKiBAcGFyYW0ge0Vycm9yfG51bGx9IGVycm9yIEVycm9yLCBpZiBhbnlcclxuICogQHBhcmFtIHsuLi4qfSBwYXJhbXMgQWRkaXRpb25hbCBhcmd1bWVudHNcclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cclxuICovXHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIHByb21pc2UgZnJvbSBhIG5vZGUtc3R5bGUgY2FsbGJhY2sgZnVuY3Rpb24uXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBwYXJhbSB7YXNQcm9taXNlQ2FsbGJhY2t9IGZuIEZ1bmN0aW9uIHRvIGNhbGxcclxuICogQHBhcmFtIHsqfSBjdHggRnVuY3Rpb24gY29udGV4dFxyXG4gKiBAcGFyYW0gey4uLip9IHBhcmFtcyBGdW5jdGlvbiBhcmd1bWVudHNcclxuICogQHJldHVybnMge1Byb21pc2U8Kj59IFByb21pc2lmaWVkIGZ1bmN0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBhc1Byb21pc2UoZm4sIGN0eC8qLCB2YXJhcmdzICovKSB7XHJcbiAgICB2YXIgcGFyYW1zICA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSksXHJcbiAgICAgICAgb2Zmc2V0ICA9IDAsXHJcbiAgICAgICAgaW5kZXggICA9IDIsXHJcbiAgICAgICAgcGVuZGluZyA9IHRydWU7XHJcbiAgICB3aGlsZSAoaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoKVxyXG4gICAgICAgIHBhcmFtc1tvZmZzZXQrK10gPSBhcmd1bWVudHNbaW5kZXgrK107XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZXhlY3V0b3IocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgcGFyYW1zW29mZnNldF0gPSBmdW5jdGlvbiBjYWxsYmFjayhlcnIvKiwgdmFyYXJncyAqLykge1xyXG4gICAgICAgICAgICBpZiAocGVuZGluZykge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycilcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBwYXJhbXMubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbb2Zmc2V0KytdID0gYXJndW1lbnRzW29mZnNldF07XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZS5hcHBseShudWxsLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmbi5hcHBseShjdHggfHwgbnVsbCwgcGFyYW1zKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgaWYgKHBlbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4vKipcclxuICogQSBtaW5pbWFsIGJhc2U2NCBpbXBsZW1lbnRhdGlvbiBmb3IgbnVtYmVyIGFycmF5cy5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQG5hbWVzcGFjZVxyXG4gKi9cclxudmFyIGJhc2U2NCA9IGV4cG9ydHM7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYnl0ZSBsZW5ndGggb2YgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgQmFzZTY0IGVuY29kZWQgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEJ5dGUgbGVuZ3RoXHJcbiAqL1xyXG5iYXNlNjQubGVuZ3RoID0gZnVuY3Rpb24gbGVuZ3RoKHN0cmluZykge1xyXG4gICAgdmFyIHAgPSBzdHJpbmcubGVuZ3RoO1xyXG4gICAgaWYgKCFwKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgdmFyIG4gPSAwO1xyXG4gICAgd2hpbGUgKC0tcCAlIDQgPiAxICYmIHN0cmluZy5jaGFyQXQocCkgPT09IFwiPVwiKVxyXG4gICAgICAgICsrbjtcclxuICAgIHJldHVybiBNYXRoLmNlaWwoc3RyaW5nLmxlbmd0aCAqIDMpIC8gNCAtIG47XHJcbn07XHJcblxyXG4vLyBCYXNlNjQgZW5jb2RpbmcgdGFibGVcclxudmFyIGI2NCA9IG5ldyBBcnJheSg2NCk7XHJcblxyXG4vLyBCYXNlNjQgZGVjb2RpbmcgdGFibGVcclxudmFyIHM2NCA9IG5ldyBBcnJheSgxMjMpO1xyXG5cclxuLy8gNjUuLjkwLCA5Ny4uMTIyLCA0OC4uNTcsIDQzLCA0N1xyXG5mb3IgKHZhciBpID0gMDsgaSA8IDY0OylcclxuICAgIHM2NFtiNjRbaV0gPSBpIDwgMjYgPyBpICsgNjUgOiBpIDwgNTIgPyBpICsgNzEgOiBpIDwgNjIgPyBpIC0gNCA6IGkgLSA1OSB8IDQzXSA9IGkrKztcclxuXHJcbi8qKlxyXG4gKiBFbmNvZGVzIGEgYnVmZmVyIHRvIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBTb3VyY2UgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBTb3VyY2Ugc3RhcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBTb3VyY2UgZW5kXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NCBlbmNvZGVkIHN0cmluZ1xyXG4gKi9cclxuYmFzZTY0LmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShidWZmZXIsIHN0YXJ0LCBlbmQpIHtcclxuICAgIHZhciBwYXJ0cyA9IG51bGwsXHJcbiAgICAgICAgY2h1bmsgPSBbXTtcclxuICAgIHZhciBpID0gMCwgLy8gb3V0cHV0IGluZGV4XHJcbiAgICAgICAgaiA9IDAsIC8vIGdvdG8gaW5kZXhcclxuICAgICAgICB0OyAgICAgLy8gdGVtcG9yYXJ5XHJcbiAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcclxuICAgICAgICB2YXIgYiA9IGJ1ZmZlcltzdGFydCsrXTtcclxuICAgICAgICBzd2l0Y2ggKGopIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFtiID4+IDJdO1xyXG4gICAgICAgICAgICAgICAgdCA9IChiICYgMykgPDwgNDtcclxuICAgICAgICAgICAgICAgIGogPSAxO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGNodW5rW2krK10gPSBiNjRbdCB8IGIgPj4gNF07XHJcbiAgICAgICAgICAgICAgICB0ID0gKGIgJiAxNSkgPDwgMjtcclxuICAgICAgICAgICAgICAgIGogPSAyO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGNodW5rW2krK10gPSBiNjRbdCB8IGIgPj4gNl07XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W2IgJiA2M107XHJcbiAgICAgICAgICAgICAgICBqID0gMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaSA+IDgxOTEpIHtcclxuICAgICAgICAgICAgKHBhcnRzIHx8IChwYXJ0cyA9IFtdKSkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmspKTtcclxuICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGopIHtcclxuICAgICAgICBjaHVua1tpKytdID0gYjY0W3RdO1xyXG4gICAgICAgIGNodW5rW2krK10gPSA2MTtcclxuICAgICAgICBpZiAoaiA9PT0gMSlcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IDYxO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcnRzKSB7XHJcbiAgICAgICAgaWYgKGkpXHJcbiAgICAgICAgICAgIHBhcnRzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKTtcclxufTtcclxuXHJcbnZhciBpbnZhbGlkRW5jb2RpbmcgPSBcImludmFsaWQgZW5jb2RpbmdcIjtcclxuXHJcbi8qKlxyXG4gKiBEZWNvZGVzIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIHRvIGEgYnVmZmVyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFNvdXJjZSBzdHJpbmdcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgRGVzdGluYXRpb24gYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgRGVzdGluYXRpb24gb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IE51bWJlciBvZiBieXRlcyB3cml0dGVuXHJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBlbmNvZGluZyBpcyBpbnZhbGlkXHJcbiAqL1xyXG5iYXNlNjQuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKHN0cmluZywgYnVmZmVyLCBvZmZzZXQpIHtcclxuICAgIHZhciBzdGFydCA9IG9mZnNldDtcclxuICAgIHZhciBqID0gMCwgLy8gZ290byBpbmRleFxyXG4gICAgICAgIHQ7ICAgICAvLyB0ZW1wb3JhcnlcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDspIHtcclxuICAgICAgICB2YXIgYyA9IHN0cmluZy5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgaWYgKGMgPT09IDYxICYmIGogPiAxKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBpZiAoKGMgPSBzNjRbY10pID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKGludmFsaWRFbmNvZGluZyk7XHJcbiAgICAgICAgc3dpdGNoIChqKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIHQgPSBjO1xyXG4gICAgICAgICAgICAgICAgaiA9IDE7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IHQgPDwgMiB8IChjICYgNDgpID4+IDQ7XHJcbiAgICAgICAgICAgICAgICB0ID0gYztcclxuICAgICAgICAgICAgICAgIGogPSAyO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSAodCAmIDE1KSA8PCA0IHwgKGMgJiA2MCkgPj4gMjtcclxuICAgICAgICAgICAgICAgIHQgPSBjO1xyXG4gICAgICAgICAgICAgICAgaiA9IDM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9ICh0ICYgMykgPDwgNiB8IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChqID09PSAxKVxyXG4gICAgICAgIHRocm93IEVycm9yKGludmFsaWRFbmNvZGluZyk7XHJcbiAgICByZXR1cm4gb2Zmc2V0IC0gc3RhcnQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCBzdHJpbmcgYXBwZWFycyB0byBiZSBiYXNlNjQgZW5jb2RlZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTdHJpbmcgdG8gdGVzdFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHByb2JhYmx5IGJhc2U2NCBlbmNvZGVkLCBvdGhlcndpc2UgZmFsc2VcclxuICovXHJcbmJhc2U2NC50ZXN0ID0gZnVuY3Rpb24gdGVzdChzdHJpbmcpIHtcclxuICAgIHJldHVybiAvXig/OltBLVphLXowLTkrL117NH0pKig/OltBLVphLXowLTkrL117Mn09PXxbQS1aYS16MC05Ky9dezN9PSk/JC8udGVzdChzdHJpbmcpO1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XHJcblxyXG4vKipcclxuICogQ29uc3RydWN0cyBhIG5ldyBldmVudCBlbWl0dGVyIGluc3RhbmNlLlxyXG4gKiBAY2xhc3NkZXNjIEEgbWluaW1hbCBldmVudCBlbWl0dGVyLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAY29uc3RydWN0b3JcclxuICovXHJcbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxyXG4gICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLCo+fVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgdGhpcy5fbGlzdGVuZXJzID0ge307XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldnQgRXZlbnQgbmFtZVxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiBMaXN0ZW5lclxyXG4gKiBAcGFyYW0geyp9IFtjdHhdIExpc3RlbmVyIGNvbnRleHRcclxuICogQHJldHVybnMge3V0aWwuRXZlbnRFbWl0dGVyfSBgdGhpc2BcclxuICovXHJcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbihldnQsIGZuLCBjdHgpIHtcclxuICAgICh0aGlzLl9saXN0ZW5lcnNbZXZ0XSB8fCAodGhpcy5fbGlzdGVuZXJzW2V2dF0gPSBbXSkpLnB1c2goe1xyXG4gICAgICAgIGZuICA6IGZuLFxyXG4gICAgICAgIGN0eCA6IGN0eCB8fCB0aGlzXHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgb3IgYW55IG1hdGNoaW5nIGxpc3RlbmVycyBpZiBhcmd1bWVudHMgYXJlIG9taXR0ZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZXZ0XSBFdmVudCBuYW1lLiBSZW1vdmVzIGFsbCBsaXN0ZW5lcnMgaWYgb21pdHRlZC5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2ZuXSBMaXN0ZW5lciB0byByZW1vdmUuIFJlbW92ZXMgYWxsIGxpc3RlbmVycyBvZiBgZXZ0YCBpZiBvbWl0dGVkLlxyXG4gKiBAcmV0dXJucyB7dXRpbC5FdmVudEVtaXR0ZXJ9IGB0aGlzYFxyXG4gKi9cclxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiBvZmYoZXZ0LCBmbikge1xyXG4gICAgaWYgKGV2dCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGZuID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyc1tldnRdID0gW107XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnNbZXZ0XTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOylcclxuICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0uZm4gPT09IGZuKVxyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgKytpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEVtaXRzIGFuIGV2ZW50IGJ5IGNhbGxpbmcgaXRzIGxpc3RlbmVycyB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZ0IEV2ZW50IG5hbWVcclxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7dXRpbC5FdmVudEVtaXR0ZXJ9IGB0aGlzYFxyXG4gKi9cclxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldnQpIHtcclxuICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnNbZXZ0XTtcclxuICAgIGlmIChsaXN0ZW5lcnMpIHtcclxuICAgICAgICB2YXIgYXJncyA9IFtdLFxyXG4gICAgICAgICAgICBpID0gMTtcclxuICAgICAgICBmb3IgKDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7KVxyXG4gICAgICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOylcclxuICAgICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmFwcGx5KGxpc3RlbmVyc1tpKytdLmN0eCwgYXJncyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoZmFjdG9yeSk7XHJcblxyXG4vKipcclxuICogUmVhZHMgLyB3cml0ZXMgZmxvYXRzIC8gZG91YmxlcyBmcm9tIC8gdG8gYnVmZmVycy5cclxuICogQG5hbWUgdXRpbC5mbG9hdFxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDMyIGJpdCBmbG9hdCB0byBhIGJ1ZmZlciB1c2luZyBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQud3JpdGVGbG9hdExFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFRhcmdldCBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBUYXJnZXQgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBXcml0ZXMgYSAzMiBiaXQgZmxvYXQgdG8gYSBidWZmZXIgdXNpbmcgYmlnIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRmxvYXRCRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBUYXJnZXQgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgVGFyZ2V0IGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cclxuICovXHJcblxyXG4vKipcclxuICogUmVhZHMgYSAzMiBiaXQgZmxvYXQgZnJvbSBhIGJ1ZmZlciB1c2luZyBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQucmVhZEZsb2F0TEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgMzIgYml0IGZsb2F0IGZyb20gYSBidWZmZXIgdXNpbmcgYmlnIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LnJlYWRGbG9hdEJFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBTb3VyY2UgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgU291cmNlIGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBXcml0ZXMgYSA2NCBiaXQgZG91YmxlIHRvIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC53cml0ZURvdWJsZUxFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFRhcmdldCBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBUYXJnZXQgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBXcml0ZXMgYSA2NCBiaXQgZG91YmxlIHRvIGEgYnVmZmVyIHVzaW5nIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC53cml0ZURvdWJsZUJFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFRhcmdldCBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBUYXJnZXQgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBhIDY0IGJpdCBkb3VibGUgZnJvbSBhIGJ1ZmZlciB1c2luZyBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQucmVhZERvdWJsZUxFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBTb3VyY2UgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgU291cmNlIGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBhIDY0IGJpdCBkb3VibGUgZnJvbSBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQucmVhZERvdWJsZUJFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBTb3VyY2UgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgU291cmNlIGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxyXG4gKi9cclxuXHJcbi8vIEZhY3RvcnkgZnVuY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIG5vZGUtYmFzZWQgdGVzdGluZyBpbiBtb2RpZmllZCBnbG9iYWwgZW52aXJvbm1lbnRzXHJcbmZ1bmN0aW9uIGZhY3RvcnkoZXhwb3J0cykge1xyXG5cclxuICAgIC8vIGZsb2F0OiB0eXBlZCBhcnJheVxyXG4gICAgaWYgKHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09IFwidW5kZWZpbmVkXCIpIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGYzMiA9IG5ldyBGbG9hdDMyQXJyYXkoWyAtMCBdKSxcclxuICAgICAgICAgICAgZjhiID0gbmV3IFVpbnQ4QXJyYXkoZjMyLmJ1ZmZlciksXHJcbiAgICAgICAgICAgIGxlICA9IGY4YlszXSA9PT0gMTI4O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZUZsb2F0X2YzMl9jcHkodmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmMzJbMF0gPSB2YWw7XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgICAgXSA9IGY4YlswXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDFdID0gZjhiWzFdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMl0gPSBmOGJbMl07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAzXSA9IGY4YlszXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRmxvYXRfZjMyX3Jldih2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGYzMlswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzNdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMl07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsxXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRMRSA9IGxlID8gd3JpdGVGbG9hdF9mMzJfY3B5IDogd3JpdGVGbG9hdF9mMzJfcmV2O1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZUZsb2F0QkUgPSBsZSA/IHdyaXRlRmxvYXRfZjMyX3JldiA6IHdyaXRlRmxvYXRfZjMyX2NweTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZEZsb2F0X2YzMl9jcHkoYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjhiWzBdID0gYnVmW3BvcyAgICBdO1xyXG4gICAgICAgICAgICBmOGJbMV0gPSBidWZbcG9zICsgMV07XHJcbiAgICAgICAgICAgIGY4YlsyXSA9IGJ1Zltwb3MgKyAyXTtcclxuICAgICAgICAgICAgZjhiWzNdID0gYnVmW3BvcyArIDNdO1xyXG4gICAgICAgICAgICByZXR1cm4gZjMyWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZEZsb2F0X2YzMl9yZXYoYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjhiWzNdID0gYnVmW3BvcyAgICBdO1xyXG4gICAgICAgICAgICBmOGJbMl0gPSBidWZbcG9zICsgMV07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAyXTtcclxuICAgICAgICAgICAgZjhiWzBdID0gYnVmW3BvcyArIDNdO1xyXG4gICAgICAgICAgICByZXR1cm4gZjMyWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLnJlYWRGbG9hdExFID0gbGUgPyByZWFkRmxvYXRfZjMyX2NweSA6IHJlYWRGbG9hdF9mMzJfcmV2O1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRmxvYXRCRSA9IGxlID8gcmVhZEZsb2F0X2YzMl9yZXYgOiByZWFkRmxvYXRfZjMyX2NweTtcclxuXHJcbiAgICAvLyBmbG9hdDogaWVlZTc1NFxyXG4gICAgfSkoKTsgZWxzZSAoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRmxvYXRfaWVlZTc1NCh3cml0ZVVpbnQsIHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgdmFyIHNpZ24gPSB2YWwgPCAwID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGlmIChzaWduKVxyXG4gICAgICAgICAgICAgICAgdmFsID0gLXZhbDtcclxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgxIC8gdmFsID4gMCA/IC8qIHBvc2l0aXZlICovIDAgOiAvKiBuZWdhdGl2ZSAwICovIDIxNDc0ODM2NDgsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXNOYU4odmFsKSlcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgyMTQzMjg5MzQ0LCBidWYsIHBvcyk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA+IDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpIC8vICstSW5maW5pdHlcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IDIxMzkwOTUwNDApID4+PiAwLCBidWYsIHBvcyk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA8IDEuMTc1NDk0MzUwODIyMjg3NWUtMzgpIC8vIGRlbm9ybWFsXHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBNYXRoLnJvdW5kKHZhbCAvIDEuNDAxMjk4NDY0MzI0ODE3ZS00NSkpID4+PiAwLCBidWYsIHBvcyk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGV4cG9uZW50ID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWwpIC8gTWF0aC5MTjIpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gTWF0aC5yb3VuZCh2YWwgKiBNYXRoLnBvdygyLCAtZXhwb25lbnQpICogODM4ODYwOCkgJiA4Mzg4NjA3O1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgZXhwb25lbnQgKyAxMjcgPDwgMjMgfCBtYW50aXNzYSkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZUZsb2F0TEUgPSB3cml0ZUZsb2F0X2llZWU3NTQuYmluZChudWxsLCB3cml0ZVVpbnRMRSk7XHJcbiAgICAgICAgZXhwb3J0cy53cml0ZUZsb2F0QkUgPSB3cml0ZUZsb2F0X2llZWU3NTQuYmluZChudWxsLCB3cml0ZVVpbnRCRSk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRGbG9hdF9pZWVlNzU0KHJlYWRVaW50LCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgdWludCA9IHJlYWRVaW50KGJ1ZiwgcG9zKSxcclxuICAgICAgICAgICAgICAgIHNpZ24gPSAodWludCA+PiAzMSkgKiAyICsgMSxcclxuICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gdWludCA+Pj4gMjMgJiAyNTUsXHJcbiAgICAgICAgICAgICAgICBtYW50aXNzYSA9IHVpbnQgJiA4Mzg4NjA3O1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwb25lbnQgPT09IDI1NVxyXG4gICAgICAgICAgICAgICAgPyBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgPyBOYU5cclxuICAgICAgICAgICAgICAgIDogc2lnbiAqIEluZmluaXR5XHJcbiAgICAgICAgICAgICAgICA6IGV4cG9uZW50ID09PSAwIC8vIGRlbm9ybWFsXHJcbiAgICAgICAgICAgICAgICA/IHNpZ24gKiAxLjQwMTI5ODQ2NDMyNDgxN2UtNDUgKiBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogTWF0aC5wb3coMiwgZXhwb25lbnQgLSAxNTApICogKG1hbnRpc3NhICsgODM4ODYwOCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBleHBvcnRzLnJlYWRGbG9hdExFID0gcmVhZEZsb2F0X2llZWU3NTQuYmluZChudWxsLCByZWFkVWludExFKTtcclxuICAgICAgICBleHBvcnRzLnJlYWRGbG9hdEJFID0gcmVhZEZsb2F0X2llZWU3NTQuYmluZChudWxsLCByZWFkVWludEJFKTtcclxuXHJcbiAgICB9KSgpO1xyXG5cclxuICAgIC8vIGRvdWJsZTogdHlwZWQgYXJyYXlcclxuICAgIGlmICh0eXBlb2YgRmxvYXQ2NEFycmF5ICE9PSBcInVuZGVmaW5lZFwiKSAoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBmNjQgPSBuZXcgRmxvYXQ2NEFycmF5KFstMF0pLFxyXG4gICAgICAgICAgICBmOGIgPSBuZXcgVWludDhBcnJheShmNjQuYnVmZmVyKSxcclxuICAgICAgICAgICAgbGUgID0gZjhiWzddID09PSAxMjg7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRG91YmxlX2Y2NF9jcHkodmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmNjRbMF0gPSB2YWw7XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgICAgXSA9IGY4YlswXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDFdID0gZjhiWzFdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMl0gPSBmOGJbMl07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAzXSA9IGY4YlszXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDRdID0gZjhiWzRdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNV0gPSBmOGJbNV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA2XSA9IGY4Yls2XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDddID0gZjhiWzddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfZjY0X3Jldih2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY2NFswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzddO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbNl07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4Yls1XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzRdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNF0gPSBmOGJbM107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA1XSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDZdID0gZjhiWzFdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgN10gPSBmOGJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVMRSA9IGxlID8gd3JpdGVEb3VibGVfZjY0X2NweSA6IHdyaXRlRG91YmxlX2Y2NF9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLndyaXRlRG91YmxlQkUgPSBsZSA/IHdyaXRlRG91YmxlX2Y2NF9yZXYgOiB3cml0ZURvdWJsZV9mNjRfY3B5O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRG91YmxlX2Y2NF9jcHkoYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjhiWzBdID0gYnVmW3BvcyAgICBdO1xyXG4gICAgICAgICAgICBmOGJbMV0gPSBidWZbcG9zICsgMV07XHJcbiAgICAgICAgICAgIGY4YlsyXSA9IGJ1Zltwb3MgKyAyXTtcclxuICAgICAgICAgICAgZjhiWzNdID0gYnVmW3BvcyArIDNdO1xyXG4gICAgICAgICAgICBmOGJbNF0gPSBidWZbcG9zICsgNF07XHJcbiAgICAgICAgICAgIGY4Yls1XSA9IGJ1Zltwb3MgKyA1XTtcclxuICAgICAgICAgICAgZjhiWzZdID0gYnVmW3BvcyArIDZdO1xyXG4gICAgICAgICAgICBmOGJbN10gPSBidWZbcG9zICsgN107XHJcbiAgICAgICAgICAgIHJldHVybiBmNjRbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRG91YmxlX2Y2NF9yZXYoYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjhiWzddID0gYnVmW3BvcyAgICBdO1xyXG4gICAgICAgICAgICBmOGJbNl0gPSBidWZbcG9zICsgMV07XHJcbiAgICAgICAgICAgIGY4Yls1XSA9IGJ1Zltwb3MgKyAyXTtcclxuICAgICAgICAgICAgZjhiWzRdID0gYnVmW3BvcyArIDNdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgNF07XHJcbiAgICAgICAgICAgIGY4YlsyXSA9IGJ1Zltwb3MgKyA1XTtcclxuICAgICAgICAgICAgZjhiWzFdID0gYnVmW3BvcyArIDZdO1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICsgN107XHJcbiAgICAgICAgICAgIHJldHVybiBmNjRbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZERvdWJsZUxFID0gbGUgPyByZWFkRG91YmxlX2Y2NF9jcHkgOiByZWFkRG91YmxlX2Y2NF9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLnJlYWREb3VibGVCRSA9IGxlID8gcmVhZERvdWJsZV9mNjRfcmV2IDogcmVhZERvdWJsZV9mNjRfY3B5O1xyXG5cclxuICAgIC8vIGRvdWJsZTogaWVlZTc1NFxyXG4gICAgfSkoKTsgZWxzZSAoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRG91YmxlX2llZWU3NTQod3JpdGVVaW50LCBvZmYwLCBvZmYxLCB2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIHZhciBzaWduID0gdmFsIDwgMCA/IDEgOiAwO1xyXG4gICAgICAgICAgICBpZiAoc2lnbilcclxuICAgICAgICAgICAgICAgIHZhbCA9IC12YWw7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgwLCBidWYsIHBvcyArIG9mZjApO1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDEgLyB2YWwgPiAwID8gLyogcG9zaXRpdmUgKi8gMCA6IC8qIG5lZ2F0aXZlIDAgKi8gMjE0NzQ4MzY0OCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc05hTih2YWwpKSB7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgyMTQ2OTU5MzYwLCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbCA+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KSB7IC8vICstSW5maW5pdHlcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgwLCBidWYsIHBvcyArIG9mZjApO1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgMjE0NjQzNTA3MikgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFudGlzc2E7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsIDwgMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDgpIHsgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgICAgICBtYW50aXNzYSA9IHZhbCAvIDVlLTMyNDtcclxuICAgICAgICAgICAgICAgICAgICB3cml0ZVVpbnQobWFudGlzc2EgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgbWFudGlzc2EgLyA0Mjk0OTY3Mjk2KSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cG9uZW50ID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWwpIC8gTWF0aC5MTjIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBvbmVudCA9PT0gMTAyNClcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgPSAxMDIzO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdmFsICogTWF0aC5wb3coMiwgLWV4cG9uZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB3cml0ZVVpbnQobWFudGlzc2EgKiA0NTAzNTk5NjI3MzcwNDk2ID4+PiAwLCBidWYsIHBvcyArIG9mZjApO1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IGV4cG9uZW50ICsgMTAyMyA8PCAyMCB8IG1hbnRpc3NhICogMTA0ODU3NiAmIDEwNDg1NzUpID4+PiAwLCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBleHBvcnRzLndyaXRlRG91YmxlTEUgPSB3cml0ZURvdWJsZV9pZWVlNzU0LmJpbmQobnVsbCwgd3JpdGVVaW50TEUsIDAsIDQpO1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVCRSA9IHdyaXRlRG91YmxlX2llZWU3NTQuYmluZChudWxsLCB3cml0ZVVpbnRCRSwgNCwgMCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfaWVlZTc1NChyZWFkVWludCwgb2ZmMCwgb2ZmMSwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgdmFyIGxvID0gcmVhZFVpbnQoYnVmLCBwb3MgKyBvZmYwKSxcclxuICAgICAgICAgICAgICAgIGhpID0gcmVhZFVpbnQoYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgdmFyIHNpZ24gPSAoaGkgPj4gMzEpICogMiArIDEsXHJcbiAgICAgICAgICAgICAgICBleHBvbmVudCA9IGhpID4+PiAyMCAmIDIwNDcsXHJcbiAgICAgICAgICAgICAgICBtYW50aXNzYSA9IDQyOTQ5NjcyOTYgKiAoaGkgJiAxMDQ4NTc1KSArIGxvO1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwb25lbnQgPT09IDIwNDdcclxuICAgICAgICAgICAgICAgID8gbWFudGlzc2FcclxuICAgICAgICAgICAgICAgID8gTmFOXHJcbiAgICAgICAgICAgICAgICA6IHNpZ24gKiBJbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgOiBleHBvbmVudCA9PT0gMCAvLyBkZW5vcm1hbFxyXG4gICAgICAgICAgICAgICAgPyBzaWduICogNWUtMzI0ICogbWFudGlzc2FcclxuICAgICAgICAgICAgICAgIDogc2lnbiAqIE1hdGgucG93KDIsIGV4cG9uZW50IC0gMTA3NSkgKiAobWFudGlzc2EgKyA0NTAzNTk5NjI3MzcwNDk2KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMucmVhZERvdWJsZUxFID0gcmVhZERvdWJsZV9pZWVlNzU0LmJpbmQobnVsbCwgcmVhZFVpbnRMRSwgMCwgNCk7XHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlQkUgPSByZWFkRG91YmxlX2llZWU3NTQuYmluZChudWxsLCByZWFkVWludEJFLCA0LCAwKTtcclxuXHJcbiAgICB9KSgpO1xyXG5cclxuICAgIHJldHVybiBleHBvcnRzO1xyXG59XHJcblxyXG4vLyB1aW50IGhlbHBlcnNcclxuXHJcbmZ1bmN0aW9uIHdyaXRlVWludExFKHZhbCwgYnVmLCBwb3MpIHtcclxuICAgIGJ1Zltwb3MgICAgXSA9ICB2YWwgICAgICAgICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDFdID0gIHZhbCA+Pj4gOCAgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiAxNiAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAzXSA9ICB2YWwgPj4+IDI0O1xyXG59XHJcblxyXG5mdW5jdGlvbiB3cml0ZVVpbnRCRSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICBidWZbcG9zICAgIF0gPSAgdmFsID4+PiAyNDtcclxuICAgIGJ1Zltwb3MgKyAxXSA9ICB2YWwgPj4+IDE2ICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDJdID0gIHZhbCA+Pj4gOCAgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgM10gPSAgdmFsICAgICAgICAmIDI1NTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZFVpbnRMRShidWYsIHBvcykge1xyXG4gICAgcmV0dXJuIChidWZbcG9zICAgIF1cclxuICAgICAgICAgIHwgYnVmW3BvcyArIDFdIDw8IDhcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDJdIDw8IDE2XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAzXSA8PCAyNCkgPj4+IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlYWRVaW50QkUoYnVmLCBwb3MpIHtcclxuICAgIHJldHVybiAoYnVmW3BvcyAgICBdIDw8IDI0XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAxXSA8PCAxNlxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMl0gPDwgOFxyXG4gICAgICAgICAgfCBidWZbcG9zICsgM10pID4+PiAwO1xyXG59XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5tb2R1bGUuZXhwb3J0cyA9IGlucXVpcmU7XHJcblxyXG4vKipcclxuICogUmVxdWlyZXMgYSBtb2R1bGUgb25seSBpZiBhdmFpbGFibGUuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVOYW1lIE1vZHVsZSB0byByZXF1aXJlXHJcbiAqIEByZXR1cm5zIHs/T2JqZWN0fSBSZXF1aXJlZCBtb2R1bGUgaWYgYXZhaWxhYmxlIGFuZCBub3QgZW1wdHksIG90aGVyd2lzZSBgbnVsbGBcclxuICovXHJcbmZ1bmN0aW9uIGlucXVpcmUobW9kdWxlTmFtZSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB2YXIgbW9kID0gZXZhbChcInF1aXJlXCIucmVwbGFjZSgvXi8sXCJyZVwiKSkobW9kdWxlTmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxyXG4gICAgICAgIGlmIChtb2QgJiYgKG1vZC5sZW5ndGggfHwgT2JqZWN0LmtleXMobW9kKS5sZW5ndGgpKVxyXG4gICAgICAgICAgICByZXR1cm4gbW9kO1xyXG4gICAgfSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4vKipcclxuICogQSBtaW5pbWFsIFVURjggaW1wbGVtZW50YXRpb24gZm9yIG51bWJlciBhcnJheXMuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcbnZhciB1dGY4ID0gZXhwb3J0cztcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBVVEY4IGJ5dGUgbGVuZ3RoIG9mIGEgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZ1xyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBCeXRlIGxlbmd0aFxyXG4gKi9cclxudXRmOC5sZW5ndGggPSBmdW5jdGlvbiB1dGY4X2xlbmd0aChzdHJpbmcpIHtcclxuICAgIHZhciBsZW4gPSAwLFxyXG4gICAgICAgIGMgPSAwO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgaWYgKGMgPCAxMjgpXHJcbiAgICAgICAgICAgIGxlbiArPSAxO1xyXG4gICAgICAgIGVsc2UgaWYgKGMgPCAyMDQ4KVxyXG4gICAgICAgICAgICBsZW4gKz0gMjtcclxuICAgICAgICBlbHNlIGlmICgoYyAmIDB4RkMwMCkgPT09IDB4RDgwMCAmJiAoc3RyaW5nLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwKSB7XHJcbiAgICAgICAgICAgICsraTtcclxuICAgICAgICAgICAgbGVuICs9IDQ7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIGxlbiArPSAzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBVVEY4IGJ5dGVzIGFzIGEgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBTb3VyY2UgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBTb3VyY2Ugc3RhcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBTb3VyY2UgZW5kXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyByZWFkXHJcbiAqL1xyXG51dGY4LnJlYWQgPSBmdW5jdGlvbiB1dGY4X3JlYWQoYnVmZmVyLCBzdGFydCwgZW5kKSB7XHJcbiAgICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XHJcbiAgICBpZiAobGVuIDwgMSlcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIHZhciBwYXJ0cyA9IG51bGwsXHJcbiAgICAgICAgY2h1bmsgPSBbXSxcclxuICAgICAgICBpID0gMCwgLy8gY2hhciBvZmZzZXRcclxuICAgICAgICB0OyAgICAgLy8gdGVtcG9yYXJ5XHJcbiAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcclxuICAgICAgICB0ID0gYnVmZmVyW3N0YXJ0KytdO1xyXG4gICAgICAgIGlmICh0IDwgMTI4KVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gdDtcclxuICAgICAgICBlbHNlIGlmICh0ID4gMTkxICYmIHQgPCAyMjQpXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAodCAmIDMxKSA8PCA2IHwgYnVmZmVyW3N0YXJ0KytdICYgNjM7XHJcbiAgICAgICAgZWxzZSBpZiAodCA+IDIzOSAmJiB0IDwgMzY1KSB7XHJcbiAgICAgICAgICAgIHQgPSAoKHQgJiA3KSA8PCAxOCB8IChidWZmZXJbc3RhcnQrK10gJiA2MykgPDwgMTIgfCAoYnVmZmVyW3N0YXJ0KytdICYgNjMpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MykgLSAweDEwMDAwO1xyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gMHhEODAwICsgKHQgPj4gMTApO1xyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gMHhEQzAwICsgKHQgJiAxMDIzKTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMTUpIDw8IDEyIHwgKGJ1ZmZlcltzdGFydCsrXSAmIDYzKSA8PCA2IHwgYnVmZmVyW3N0YXJ0KytdICYgNjM7XHJcbiAgICAgICAgaWYgKGkgPiA4MTkxKSB7XHJcbiAgICAgICAgICAgIChwYXJ0cyB8fCAocGFydHMgPSBbXSkpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rKSk7XHJcbiAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwYXJ0cykge1xyXG4gICAgICAgIGlmIChpKVxyXG4gICAgICAgICAgICBwYXJ0cy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuay5zbGljZSgwLCBpKSkpO1xyXG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuay5zbGljZSgwLCBpKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgc3RyaW5nIGFzIFVURjggYnl0ZXMuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU291cmNlIHN0cmluZ1xyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBEZXN0aW5hdGlvbiBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBEZXN0aW5hdGlvbiBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gQnl0ZXMgd3JpdHRlblxyXG4gKi9cclxudXRmOC53cml0ZSA9IGZ1bmN0aW9uIHV0Zjhfd3JpdGUoc3RyaW5nLCBidWZmZXIsIG9mZnNldCkge1xyXG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0LFxyXG4gICAgICAgIGMxLCAvLyBjaGFyYWN0ZXIgMVxyXG4gICAgICAgIGMyOyAvLyBjaGFyYWN0ZXIgMlxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBjMSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIGlmIChjMSA8IDEyOCkge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjMSA8IDIwNDgpIHtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDYgICAgICAgfCAxOTI7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSAgICAgICAmIDYzIHwgMTI4O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKGMxICYgMHhGQzAwKSA9PT0gMHhEODAwICYmICgoYzIgPSBzdHJpbmcuY2hhckNvZGVBdChpICsgMSkpICYgMHhGQzAwKSA9PT0gMHhEQzAwKSB7XHJcbiAgICAgICAgICAgIGMxID0gMHgxMDAwMCArICgoYzEgJiAweDAzRkYpIDw8IDEwKSArIChjMiAmIDB4MDNGRik7XHJcbiAgICAgICAgICAgICsraTtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDE4ICAgICAgfCAyNDA7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiAxMiAmIDYzIHwgMTI4O1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gNiAgJiA2MyB8IDEyODtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxICAgICAgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDEyICAgICAgfCAyMjQ7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiA2ICAmIDYzIHwgMTI4O1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgICAgICAgJiA2MyB8IDEyODtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2Zmc2V0IC0gc3RhcnQ7XHJcbn07XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5tb2R1bGUuZXhwb3J0cyA9IHBvb2w7XHJcblxyXG4vKipcclxuICogQW4gYWxsb2NhdG9yIGFzIHVzZWQgYnkge0BsaW5rIHV0aWwucG9vbH0uXHJcbiAqIEB0eXBlZGVmIFBvb2xBbGxvY2F0b3JcclxuICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBCdWZmZXIgc2l6ZVxyXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gQnVmZmVyXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgc2xpY2VyIGFzIHVzZWQgYnkge0BsaW5rIHV0aWwucG9vbH0uXHJcbiAqIEB0eXBlZGVmIFBvb2xTbGljZXJcclxuICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgU3RhcnQgb2Zmc2V0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgRW5kIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gQnVmZmVyIHNsaWNlXHJcbiAqIEB0aGlzIHtVaW50OEFycmF5fVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIGdlbmVyYWwgcHVycG9zZSBidWZmZXIgcG9vbC5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7UG9vbEFsbG9jYXRvcn0gYWxsb2MgQWxsb2NhdG9yXHJcbiAqIEBwYXJhbSB7UG9vbFNsaWNlcn0gc2xpY2UgU2xpY2VyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT04MTkyXSBTbGFiIHNpemVcclxuICogQHJldHVybnMge1Bvb2xBbGxvY2F0b3J9IFBvb2xlZCBhbGxvY2F0b3JcclxuICovXHJcbmZ1bmN0aW9uIHBvb2woYWxsb2MsIHNsaWNlLCBzaXplKSB7XHJcbiAgICB2YXIgU0laRSAgID0gc2l6ZSB8fCA4MTkyO1xyXG4gICAgdmFyIE1BWCAgICA9IFNJWkUgPj4+IDE7XHJcbiAgICB2YXIgc2xhYiAgID0gbnVsbDtcclxuICAgIHZhciBvZmZzZXQgPSBTSVpFO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBvb2xfYWxsb2Moc2l6ZSkge1xyXG4gICAgICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gTUFYKVxyXG4gICAgICAgICAgICByZXR1cm4gYWxsb2Moc2l6ZSk7XHJcbiAgICAgICAgaWYgKG9mZnNldCArIHNpemUgPiBTSVpFKSB7XHJcbiAgICAgICAgICAgIHNsYWIgPSBhbGxvYyhTSVpFKTtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGJ1ZiA9IHNsaWNlLmNhbGwoc2xhYiwgb2Zmc2V0LCBvZmZzZXQgKz0gc2l6ZSk7XHJcbiAgICAgICAgaWYgKG9mZnNldCAmIDcpIC8vIGFsaWduIHRvIDMyIGJpdFxyXG4gICAgICAgICAgICBvZmZzZXQgPSAob2Zmc2V0IHwgNykgKyAxO1xyXG4gICAgICAgIHJldHVybiBidWY7XHJcbiAgICB9O1xyXG59XHJcbiIsIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBMb25nQml0cztcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cy5cbiAqIEBjbGFzc2Rlc2MgSGVscGVyIGNsYXNzIGZvciB3b3JraW5nIHdpdGggdGhlIGxvdyBhbmQgaGlnaCBiaXRzIG9mIGEgNjQgYml0IHZhbHVlLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtudW1iZXJ9IGxvIExvdyAzMiBiaXRzLCB1bnNpZ25lZFxuICogQHBhcmFtIHtudW1iZXJ9IGhpIEhpZ2ggMzIgYml0cywgdW5zaWduZWRcbiAqL1xuZnVuY3Rpb24gTG9uZ0JpdHMobG8sIGhpKSB7XG5cbiAgICAvLyBub3RlIHRoYXQgdGhlIGNhc3RzIGJlbG93IGFyZSB0aGVvcmV0aWNhbGx5IHVubmVjZXNzYXJ5IGFzIG9mIHRvZGF5LCBidXQgb2xkZXIgc3RhdGljYWxseVxuICAgIC8vIGdlbmVyYXRlZCBjb252ZXJ0ZXIgY29kZSBtaWdodCBzdGlsbCBjYWxsIHRoZSBjdG9yIHdpdGggc2lnbmVkIDMyYml0cy4ga2VwdCBmb3IgY29tcGF0LlxuXG4gICAgLyoqXG4gICAgICogTG93IGJpdHMuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxvID0gbG8gPj4+IDA7XG5cbiAgICAvKipcbiAgICAgKiBIaWdoIGJpdHMuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmhpID0gaGkgPj4+IDA7XG59XG5cbi8qKlxuICogWmVybyBiaXRzLlxuICogQG1lbWJlcm9mIHV0aWwuTG9uZ0JpdHNcbiAqIEB0eXBlIHt1dGlsLkxvbmdCaXRzfVxuICovXG52YXIgemVybyA9IExvbmdCaXRzLnplcm8gPSBuZXcgTG9uZ0JpdHMoMCwgMCk7XG5cbnplcm8udG9OdW1iZXIgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG56ZXJvLnp6RW5jb2RlID0gemVyby56ekRlY29kZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfTtcbnplcm8ubGVuZ3RoID0gZnVuY3Rpb24oKSB7IHJldHVybiAxOyB9O1xuXG4vKipcbiAqIFplcm8gaGFzaC5cbiAqIEBtZW1iZXJvZiB1dGlsLkxvbmdCaXRzXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG52YXIgemVyb0hhc2ggPSBMb25nQml0cy56ZXJvSGFzaCA9IFwiXFwwXFwwXFwwXFwwXFwwXFwwXFwwXFwwXCI7XG5cbi8qKlxuICogQ29uc3RydWN0cyBuZXcgbG9uZyBiaXRzIGZyb20gdGhlIHNwZWNpZmllZCBudW1iZXIuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWVcbiAqIEByZXR1cm5zIHt1dGlsLkxvbmdCaXRzfSBJbnN0YW5jZVxuICovXG5Mb25nQml0cy5mcm9tTnVtYmVyID0gZnVuY3Rpb24gZnJvbU51bWJlcih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgcmV0dXJuIHplcm87XG4gICAgdmFyIHNpZ24gPSB2YWx1ZSA8IDA7XG4gICAgaWYgKHNpZ24pXG4gICAgICAgIHZhbHVlID0gLXZhbHVlO1xuICAgIHZhciBsbyA9IHZhbHVlID4+PiAwLFxuICAgICAgICBoaSA9ICh2YWx1ZSAtIGxvKSAvIDQyOTQ5NjcyOTYgPj4+IDA7XG4gICAgaWYgKHNpZ24pIHtcbiAgICAgICAgaGkgPSB+aGkgPj4+IDA7XG4gICAgICAgIGxvID0gfmxvID4+PiAwO1xuICAgICAgICBpZiAoKytsbyA+IDQyOTQ5NjcyOTUpIHtcbiAgICAgICAgICAgIGxvID0gMDtcbiAgICAgICAgICAgIGlmICgrK2hpID4gNDI5NDk2NzI5NSlcbiAgICAgICAgICAgICAgICBoaSA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBMb25nQml0cyhsbywgaGkpO1xufTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMgZnJvbSBhIG51bWJlciwgbG9uZyBvciBzdHJpbmcuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWVcbiAqIEByZXR1cm5zIHt1dGlsLkxvbmdCaXRzfSBJbnN0YW5jZVxuICovXG5Mb25nQml0cy5mcm9tID0gZnVuY3Rpb24gZnJvbSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgIHJldHVybiBMb25nQml0cy5mcm9tTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAodXRpbC5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHV0aWwuTG9uZylcbiAgICAgICAgICAgIHZhbHVlID0gdXRpbC5Mb25nLmZyb21TdHJpbmcodmFsdWUpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gTG9uZ0JpdHMuZnJvbU51bWJlcihwYXJzZUludCh2YWx1ZSwgMTApKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlLmxvdyB8fCB2YWx1ZS5oaWdoID8gbmV3IExvbmdCaXRzKHZhbHVlLmxvdyA+Pj4gMCwgdmFsdWUuaGlnaCA+Pj4gMCkgOiB6ZXJvO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGlzIGxvbmcgYml0cyB0byBhIHBvc3NpYmx5IHVuc2FmZSBKYXZhU2NyaXB0IG51bWJlci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vuc2lnbmVkPWZhbHNlXSBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICogQHJldHVybnMge251bWJlcn0gUG9zc2libHkgdW5zYWZlIG51bWJlclxuICovXG5Mb25nQml0cy5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiB0b051bWJlcih1bnNpZ25lZCkge1xuICAgIGlmICghdW5zaWduZWQgJiYgdGhpcy5oaSA+Pj4gMzEpIHtcbiAgICAgICAgdmFyIGxvID0gfnRoaXMubG8gKyAxID4+PiAwLFxuICAgICAgICAgICAgaGkgPSB+dGhpcy5oaSAgICAgPj4+IDA7XG4gICAgICAgIGlmICghbG8pXG4gICAgICAgICAgICBoaSA9IGhpICsgMSA+Pj4gMDtcbiAgICAgICAgcmV0dXJuIC0obG8gKyBoaSAqIDQyOTQ5NjcyOTYpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sbyArIHRoaXMuaGkgKiA0Mjk0OTY3Mjk2O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGlzIGxvbmcgYml0cyB0byBhIGxvbmcuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1bnNpZ25lZD1mYWxzZV0gV2hldGhlciB1bnNpZ25lZCBvciBub3RcbiAqIEByZXR1cm5zIHtMb25nfSBMb25nXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS50b0xvbmcgPSBmdW5jdGlvbiB0b0xvbmcodW5zaWduZWQpIHtcbiAgICByZXR1cm4gdXRpbC5Mb25nXG4gICAgICAgID8gbmV3IHV0aWwuTG9uZyh0aGlzLmxvIHwgMCwgdGhpcy5oaSB8IDAsIEJvb2xlYW4odW5zaWduZWQpKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IHsgbG93OiB0aGlzLmxvIHwgMCwgaGlnaDogdGhpcy5oaSB8IDAsIHVuc2lnbmVkOiBCb29sZWFuKHVuc2lnbmVkKSB9O1xufTtcblxudmFyIGNoYXJDb2RlQXQgPSBTdHJpbmcucHJvdG90eXBlLmNoYXJDb2RlQXQ7XG5cbi8qKlxuICogQ29uc3RydWN0cyBuZXcgbG9uZyBiaXRzIGZyb20gdGhlIHNwZWNpZmllZCA4IGNoYXJhY3RlcnMgbG9uZyBoYXNoLlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggSGFzaFxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IEJpdHNcbiAqL1xuTG9uZ0JpdHMuZnJvbUhhc2ggPSBmdW5jdGlvbiBmcm9tSGFzaChoYXNoKSB7XG4gICAgaWYgKGhhc2ggPT09IHplcm9IYXNoKVxuICAgICAgICByZXR1cm4gemVybztcbiAgICByZXR1cm4gbmV3IExvbmdCaXRzKFxuICAgICAgICAoIGNoYXJDb2RlQXQuY2FsbChoYXNoLCAwKVxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCAxKSA8PCA4XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDIpIDw8IDE2XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDMpIDw8IDI0KSA+Pj4gMFxuICAgICxcbiAgICAgICAgKCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgNClcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgNSkgPDwgOFxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCA2KSA8PCAxNlxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCA3KSA8PCAyNCkgPj4+IDBcbiAgICApO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGlzIGxvbmcgYml0cyB0byBhIDggY2hhcmFjdGVycyBsb25nIGhhc2guXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIYXNoXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS50b0hhc2ggPSBmdW5jdGlvbiB0b0hhc2goKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXG4gICAgICAgIHRoaXMubG8gICAgICAgICYgMjU1LFxuICAgICAgICB0aGlzLmxvID4+PiA4ICAmIDI1NSxcbiAgICAgICAgdGhpcy5sbyA+Pj4gMTYgJiAyNTUsXG4gICAgICAgIHRoaXMubG8gPj4+IDI0ICAgICAgLFxuICAgICAgICB0aGlzLmhpICAgICAgICAmIDI1NSxcbiAgICAgICAgdGhpcy5oaSA+Pj4gOCAgJiAyNTUsXG4gICAgICAgIHRoaXMuaGkgPj4+IDE2ICYgMjU1LFxuICAgICAgICB0aGlzLmhpID4+PiAyNFxuICAgICk7XG59O1xuXG4vKipcbiAqIFppZy16YWcgZW5jb2RlcyB0aGlzIGxvbmcgYml0cy5cbiAqIEByZXR1cm5zIHt1dGlsLkxvbmdCaXRzfSBgdGhpc2BcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnp6RW5jb2RlID0gZnVuY3Rpb24genpFbmNvZGUoKSB7XG4gICAgdmFyIG1hc2sgPSAgIHRoaXMuaGkgPj4gMzE7XG4gICAgdGhpcy5oaSAgPSAoKHRoaXMuaGkgPDwgMSB8IHRoaXMubG8gPj4+IDMxKSBeIG1hc2spID4+PiAwO1xuICAgIHRoaXMubG8gID0gKCB0aGlzLmxvIDw8IDEgICAgICAgICAgICAgICAgICAgXiBtYXNrKSA+Pj4gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogWmlnLXphZyBkZWNvZGVzIHRoaXMgbG9uZyBiaXRzLlxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IGB0aGlzYFxuICovXG5Mb25nQml0cy5wcm90b3R5cGUuenpEZWNvZGUgPSBmdW5jdGlvbiB6ekRlY29kZSgpIHtcbiAgICB2YXIgbWFzayA9IC0odGhpcy5sbyAmIDEpO1xuICAgIHRoaXMubG8gID0gKCh0aGlzLmxvID4+PiAxIHwgdGhpcy5oaSA8PCAzMSkgXiBtYXNrKSA+Pj4gMDtcbiAgICB0aGlzLmhpICA9ICggdGhpcy5oaSA+Pj4gMSAgICAgICAgICAgICAgICAgIF4gbWFzaykgPj4+IDA7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGxvbmdiaXRzIHdoZW4gZW5jb2RlZCBhcyBhIHZhcmludC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IExlbmd0aFxuICovXG5Mb25nQml0cy5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gbGVuZ3RoKCkge1xuICAgIHZhciBwYXJ0MCA9ICB0aGlzLmxvLFxuICAgICAgICBwYXJ0MSA9ICh0aGlzLmxvID4+PiAyOCB8IHRoaXMuaGkgPDwgNCkgPj4+IDAsXG4gICAgICAgIHBhcnQyID0gIHRoaXMuaGkgPj4+IDI0O1xuICAgIHJldHVybiBwYXJ0MiA9PT0gMFxuICAgICAgICAgPyBwYXJ0MSA9PT0gMFxuICAgICAgICAgICA/IHBhcnQwIDwgMTYzODRcbiAgICAgICAgICAgICA/IHBhcnQwIDwgMTI4ID8gMSA6IDJcbiAgICAgICAgICAgICA6IHBhcnQwIDwgMjA5NzE1MiA/IDMgOiA0XG4gICAgICAgICAgIDogcGFydDEgPCAxNjM4NFxuICAgICAgICAgICAgID8gcGFydDEgPCAxMjggPyA1IDogNlxuICAgICAgICAgICAgIDogcGFydDEgPCAyMDk3MTUyID8gNyA6IDhcbiAgICAgICAgIDogcGFydDIgPCAxMjggPyA5IDogMTA7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgdXRpbCA9IGV4cG9ydHM7XG5cbi8vIHVzZWQgdG8gcmV0dXJuIGEgUHJvbWlzZSB3aGVyZSBjYWxsYmFjayBpcyBvbWl0dGVkXG51dGlsLmFzUHJvbWlzZSA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9hc3Byb21pc2VcIik7XG5cbi8vIGNvbnZlcnRzIHRvIC8gZnJvbSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdzXG51dGlsLmJhc2U2NCA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9iYXNlNjRcIik7XG5cbi8vIGJhc2UgY2xhc3Mgb2YgcnBjLlNlcnZpY2VcbnV0aWwuRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2V2ZW50ZW1pdHRlclwiKTtcblxuLy8gZmxvYXQgaGFuZGxpbmcgYWNjcm9zcyBicm93c2Vyc1xudXRpbC5mbG9hdCA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9mbG9hdFwiKTtcblxuLy8gcmVxdWlyZXMgbW9kdWxlcyBvcHRpb25hbGx5IGFuZCBoaWRlcyB0aGUgY2FsbCBmcm9tIGJ1bmRsZXJzXG51dGlsLmlucXVpcmUgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvaW5xdWlyZVwiKTtcblxuLy8gY29udmVydHMgdG8gLyBmcm9tIHV0ZjggZW5jb2RlZCBzdHJpbmdzXG51dGlsLnV0ZjggPSByZXF1aXJlKFwiQHByb3RvYnVmanMvdXRmOFwiKTtcblxuLy8gcHJvdmlkZXMgYSBub2RlLWxpa2UgYnVmZmVyIHBvb2wgaW4gdGhlIGJyb3dzZXJcbnV0aWwucG9vbCA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9wb29sXCIpO1xuXG4vLyB1dGlsaXR5IHRvIHdvcmsgd2l0aCB0aGUgbG93IGFuZCBoaWdoIGJpdHMgb2YgYSA2NCBiaXQgdmFsdWVcbnV0aWwuTG9uZ0JpdHMgPSByZXF1aXJlKFwiLi9sb25nYml0c1wiKTtcblxuLyoqXG4gKiBXaGV0aGVyIHJ1bm5pbmcgd2l0aGluIG5vZGUgb3Igbm90LlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG51dGlsLmlzTm9kZSA9IEJvb2xlYW4odHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbFxuICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbC5wcm9jZXNzXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsLnByb2Nlc3MudmVyc2lvbnNcbiAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWwucHJvY2Vzcy52ZXJzaW9ucy5ub2RlKTtcblxuLyoqXG4gKiBHbG9iYWwgb2JqZWN0IHJlZmVyZW5jZS5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG51dGlsLmdsb2JhbCA9IHV0aWwuaXNOb2RlICYmIGdsb2JhbFxuICAgICAgICAgICB8fCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvd1xuICAgICAgICAgICB8fCB0eXBlb2Ygc2VsZiAgICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGZcbiAgICAgICAgICAgfHwgdGhpczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblxuLyoqXG4gKiBBbiBpbW11YWJsZSBlbXB0eSBhcnJheS5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAdHlwZSB7QXJyYXkuPCo+fVxuICogQGNvbnN0XG4gKi9cbnV0aWwuZW1wdHlBcnJheSA9IE9iamVjdC5mcmVlemUgPyBPYmplY3QuZnJlZXplKFtdKSA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIFtdOyAvLyB1c2VkIG9uIHByb3RvdHlwZXNcblxuLyoqXG4gKiBBbiBpbW11dGFibGUgZW1wdHkgb2JqZWN0LlxuICogQHR5cGUge09iamVjdH1cbiAqIEBjb25zdFxuICovXG51dGlsLmVtcHR5T2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSA/IE9iamVjdC5mcmVlemUoe30pIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8ge307IC8vIHVzZWQgb24gcHJvdG90eXBlc1xuXG4vKipcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYW4gaW50ZWdlci5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyXG4gKi9cbnV0aWwuaXNJbnRlZ2VyID0gTnVtYmVyLmlzSW50ZWdlciB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBzdHJpbmcuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nXG4gKi9cbnV0aWwuaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XG59O1xuXG4vKipcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGEgbm9uLW51bGwgb2JqZWN0XG4gKi9cbnV0aWwuaXNPYmplY3QgPSBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCI7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHByb3BlcnR5IG9uIGEgbWVzc2FnZSBpcyBjb25zaWRlcmVkIHRvIGJlIHByZXNlbnQuXG4gKiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayB1dGlsLmlzU2V0fS5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBQbGFpbiBvYmplY3Qgb3IgbWVzc2FnZSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgbmFtZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBjb25zaWRlcmVkIHRvIGJlIHByZXNlbnQsIG90aGVyd2lzZSBgZmFsc2VgXG4gKi9cbnV0aWwuaXNzZXQgPVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHByb3BlcnR5IG9uIGEgbWVzc2FnZSBpcyBjb25zaWRlcmVkIHRvIGJlIHByZXNlbnQuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFBsYWluIG9iamVjdCBvciBtZXNzYWdlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xudXRpbC5pc1NldCA9IGZ1bmN0aW9uIGlzU2V0KG9iaiwgcHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IG9ialtwcm9wXTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxLCBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5sZW5ndGggOiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSA+IDA7XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBBbnkgY29tcGF0aWJsZSBCdWZmZXIgaW5zdGFuY2UuXG4gKiBUaGlzIGlzIGEgbWluaW1hbCBzdGFuZC1hbG9uZSBkZWZpbml0aW9uIG9mIGEgQnVmZmVyIGluc3RhbmNlLiBUaGUgYWN0dWFsIHR5cGUgaXMgdGhhdCBleHBvcnRlZCBieSBub2RlJ3MgdHlwaW5ncy5cbiAqIEBpbnRlcmZhY2UgQnVmZmVyXG4gKiBAZXh0ZW5kcyBVaW50OEFycmF5XG4gKi9cblxuLyoqXG4gKiBOb2RlJ3MgQnVmZmVyIGNsYXNzIGlmIGF2YWlsYWJsZS5cbiAqIEB0eXBlIHtDb25zdHJ1Y3RvcjxCdWZmZXI+fVxuICovXG51dGlsLkJ1ZmZlciA9IChmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgQnVmZmVyID0gdXRpbC5pbnF1aXJlKFwiYnVmZmVyXCIpLkJ1ZmZlcjtcbiAgICAgICAgLy8gcmVmdXNlIHRvIHVzZSBub24tbm9kZSBidWZmZXJzIGlmIG5vdCBleHBsaWNpdGx5IGFzc2lnbmVkIChwZXJmIHJlYXNvbnMpOlxuICAgICAgICByZXR1cm4gQnVmZmVyLnByb3RvdHlwZS51dGY4V3JpdGUgPyBCdWZmZXIgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBudWxsO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufSkoKTtcblxuLy8gSW50ZXJuYWwgYWxpYXMgb2Ygb3IgcG9seWZ1bGwgZm9yIEJ1ZmZlci5mcm9tLlxudXRpbC5fQnVmZmVyX2Zyb20gPSBudWxsO1xuXG4vLyBJbnRlcm5hbCBhbGlhcyBvZiBvciBwb2x5ZmlsbCBmb3IgQnVmZmVyLmFsbG9jVW5zYWZlLlxudXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlID0gbnVsbDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGJ1ZmZlciBvZiB3aGF0ZXZlciB0eXBlIHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge251bWJlcnxudW1iZXJbXX0gW3NpemVPckFycmF5PTBdIEJ1ZmZlciBzaXplIG9yIG51bWJlciBhcnJheVxuICogQHJldHVybnMge1VpbnQ4QXJyYXl8QnVmZmVyfSBCdWZmZXJcbiAqL1xudXRpbC5uZXdCdWZmZXIgPSBmdW5jdGlvbiBuZXdCdWZmZXIoc2l6ZU9yQXJyYXkpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0eXBlb2Ygc2l6ZU9yQXJyYXkgPT09IFwibnVtYmVyXCJcbiAgICAgICAgPyB1dGlsLkJ1ZmZlclxuICAgICAgICAgICAgPyB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUoc2l6ZU9yQXJyYXkpXG4gICAgICAgICAgICA6IG5ldyB1dGlsLkFycmF5KHNpemVPckFycmF5KVxuICAgICAgICA6IHV0aWwuQnVmZmVyXG4gICAgICAgICAgICA/IHV0aWwuX0J1ZmZlcl9mcm9tKHNpemVPckFycmF5KVxuICAgICAgICAgICAgOiB0eXBlb2YgVWludDhBcnJheSA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgID8gc2l6ZU9yQXJyYXlcbiAgICAgICAgICAgICAgICA6IG5ldyBVaW50OEFycmF5KHNpemVPckFycmF5KTtcbn07XG5cbi8qKlxuICogQXJyYXkgaW1wbGVtZW50YXRpb24gdXNlZCBpbiB0aGUgYnJvd3Nlci4gYFVpbnQ4QXJyYXlgIGlmIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGBBcnJheWAuXG4gKiBAdHlwZSB7Q29uc3RydWN0b3I8VWludDhBcnJheT59XG4gKi9cbnV0aWwuQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gXCJ1bmRlZmluZWRcIiA/IFVpbnQ4QXJyYXkgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gOiBBcnJheTtcblxuLyoqXG4gKiBBbnkgY29tcGF0aWJsZSBMb25nIGluc3RhbmNlLlxuICogVGhpcyBpcyBhIG1pbmltYWwgc3RhbmQtYWxvbmUgZGVmaW5pdGlvbiBvZiBhIExvbmcgaW5zdGFuY2UuIFRoZSBhY3R1YWwgdHlwZSBpcyB0aGF0IGV4cG9ydGVkIGJ5IGxvbmcuanMuXG4gKiBAaW50ZXJmYWNlIExvbmdcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb3cgTG93IGJpdHNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoaWdoIEhpZ2ggYml0c1xuICogQHByb3BlcnR5IHtib29sZWFufSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICovXG5cbi8qKlxuICogTG9uZy5qcydzIExvbmcgY2xhc3MgaWYgYXZhaWxhYmxlLlxuICogQHR5cGUge0NvbnN0cnVjdG9yPExvbmc+fVxuICovXG51dGlsLkxvbmcgPSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB1dGlsLmdsb2JhbC5kY29kZUlPICYmIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuZ2xvYmFsLmRjb2RlSU8uTG9uZ1xuICAgICAgICAgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdXRpbC5nbG9iYWwuTG9uZ1xuICAgICAgICAgfHwgdXRpbC5pbnF1aXJlKFwibG9uZ1wiKTtcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byB2ZXJpZnkgMiBiaXQgKGBib29sYCkgbWFwIGtleXMuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICogQGNvbnN0XG4gKi9cbnV0aWwua2V5MlJlID0gL150cnVlfGZhbHNlfDB8MSQvO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHZlcmlmeSAzMiBiaXQgKGBpbnQzMmAgZXRjLikgbWFwIGtleXMuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICogQGNvbnN0XG4gKi9cbnV0aWwua2V5MzJSZSA9IC9eLT8oPzowfFsxLTldWzAtOV0qKSQvO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHZlcmlmeSA2NCBiaXQgKGBpbnQ2NGAgZXRjLikgbWFwIGtleXMuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICogQGNvbnN0XG4gKi9cbnV0aWwua2V5NjRSZSA9IC9eKD86W1xcXFx4MDAtXFxcXHhmZl17OH18LT8oPzowfFsxLTldWzAtOV0qKSkkLztcblxuLyoqXG4gKiBDb252ZXJ0cyBhIG51bWJlciBvciBsb25nIHRvIGFuIDggY2hhcmFjdGVycyBsb25nIGhhc2ggc3RyaW5nLlxuICogQHBhcmFtIHtMb25nfG51bWJlcn0gdmFsdWUgVmFsdWUgdG8gY29udmVydFxuICogQHJldHVybnMge3N0cmluZ30gSGFzaFxuICovXG51dGlsLmxvbmdUb0hhc2ggPSBmdW5jdGlvbiBsb25nVG9IYXNoKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAgID8gdXRpbC5Mb25nQml0cy5mcm9tKHZhbHVlKS50b0hhc2goKVxuICAgICAgICA6IHV0aWwuTG9uZ0JpdHMuemVyb0hhc2g7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIDggY2hhcmFjdGVycyBsb25nIGhhc2ggc3RyaW5nIHRvIGEgbG9uZyBvciBudW1iZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaCBIYXNoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1bnNpZ25lZD1mYWxzZV0gV2hldGhlciB1bnNpZ25lZCBvciBub3RcbiAqIEByZXR1cm5zIHtMb25nfG51bWJlcn0gT3JpZ2luYWwgdmFsdWVcbiAqL1xudXRpbC5sb25nRnJvbUhhc2ggPSBmdW5jdGlvbiBsb25nRnJvbUhhc2goaGFzaCwgdW5zaWduZWQpIHtcbiAgICB2YXIgYml0cyA9IHV0aWwuTG9uZ0JpdHMuZnJvbUhhc2goaGFzaCk7XG4gICAgaWYgKHV0aWwuTG9uZylcbiAgICAgICAgcmV0dXJuIHV0aWwuTG9uZy5mcm9tQml0cyhiaXRzLmxvLCBiaXRzLmhpLCB1bnNpZ25lZCk7XG4gICAgcmV0dXJuIGJpdHMudG9OdW1iZXIoQm9vbGVhbih1bnNpZ25lZCkpO1xufTtcblxuLyoqXG4gKiBNZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNvdXJjZSBvYmplY3QgaW50byB0aGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IGRzdCBEZXN0aW5hdGlvbiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IHNyYyBTb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpZk5vdFNldD1mYWxzZV0gTWVyZ2VzIG9ubHkgaWYgdGhlIGtleSBpcyBub3QgYWxyZWFkeSBzZXRcbiAqIEByZXR1cm5zIHtPYmplY3QuPHN0cmluZywqPn0gRGVzdGluYXRpb24gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIG1lcmdlKGRzdCwgc3JjLCBpZk5vdFNldCkgeyAvLyB1c2VkIGJ5IGNvbnZlcnRlcnNcbiAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMoc3JjKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKVxuICAgICAgICBpZiAoZHN0W2tleXNbaV1dID09PSB1bmRlZmluZWQgfHwgIWlmTm90U2V0KVxuICAgICAgICAgICAgZHN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIHJldHVybiBkc3Q7XG59XG5cbnV0aWwubWVyZ2UgPSBtZXJnZTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgc3RyaW5nIHRvIGxvd2VyIGNhc2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFN0cmluZyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDb252ZXJ0ZWQgc3RyaW5nXG4gKi9cbnV0aWwubGNGaXJzdCA9IGZ1bmN0aW9uIGxjRmlyc3Qoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjdXN0b20gZXJyb3IgY29uc3RydWN0b3IuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRXJyb3IgbmFtZVxuICogQHJldHVybnMge0NvbnN0cnVjdG9yPEVycm9yPn0gQ3VzdG9tIGVycm9yIGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIG5ld0Vycm9yKG5hbWUpIHtcblxuICAgIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIHByb3BlcnRpZXMpIHtcblxuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ3VzdG9tRXJyb3IpKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDdXN0b21FcnJvcihtZXNzYWdlLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICAvLyBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuICAgICAgICAvLyBeIGp1c3QgcmV0dXJucyBhIG5ldyBlcnJvciBpbnN0YW5jZSBiZWNhdXNlIHRoZSBjdG9yIGNhbiBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvblxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1lc3NhZ2VcIiwgeyBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbWVzc2FnZTsgfSB9KTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIC8vIG5vZGVcbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEN1c3RvbUVycm9yKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic3RhY2tcIiwgeyB2YWx1ZTogbmV3IEVycm9yKCkuc3RhY2sgfHwgXCJcIiB9KTtcblxuICAgICAgICBpZiAocHJvcGVydGllcylcbiAgICAgICAgICAgIG1lcmdlKHRoaXMsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIChDdXN0b21FcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gQ3VzdG9tRXJyb3I7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3VzdG9tRXJyb3IucHJvdG90eXBlLCBcIm5hbWVcIiwgeyBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmFtZTsgfSB9KTtcblxuICAgIEN1c3RvbUVycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgXCI6IFwiICsgdGhpcy5tZXNzYWdlO1xuICAgIH07XG5cbiAgICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59XG5cbnV0aWwubmV3RXJyb3IgPSBuZXdFcnJvcjtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHByb3RvY29sIGVycm9yLlxuICogQGNsYXNzZGVzYyBFcnJvciBzdWJjbGFzcyBpbmRpY2F0aW5nIGEgcHJvdG9jb2wgc3BlY2lmYyBlcnJvci5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAZXh0ZW5kcyBFcnJvclxuICogQHRlbXBsYXRlIFQgZXh0ZW5kcyBNZXNzYWdlPFQ+XG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIEVycm9yIG1lc3NhZ2VcbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsKj59IFtwcm9wZXJ0aWVzXSBBZGRpdGlvbmFsIHByb3BlcnRpZXNcbiAqIEBleGFtcGxlXG4gKiB0cnkge1xuICogICAgIE15TWVzc2FnZS5kZWNvZGUoc29tZUJ1ZmZlcik7IC8vIHRocm93cyBpZiByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmdcbiAqIH0gY2F0Y2ggKGUpIHtcbiAqICAgICBpZiAoZSBpbnN0YW5jZW9mIFByb3RvY29sRXJyb3IgJiYgZS5pbnN0YW5jZSlcbiAqICAgICAgICAgY29uc29sZS5sb2coXCJkZWNvZGVkIHNvIGZhcjogXCIgKyBKU09OLnN0cmluZ2lmeShlLmluc3RhbmNlKSk7XG4gKiB9XG4gKi9cbnV0aWwuUHJvdG9jb2xFcnJvciA9IG5ld0Vycm9yKFwiUHJvdG9jb2xFcnJvclwiKTtcblxuLyoqXG4gKiBTbyBmYXIgZGVjb2RlZCBtZXNzYWdlIGluc3RhbmNlLlxuICogQG5hbWUgdXRpbC5Qcm90b2NvbEVycm9yI2luc3RhbmNlXG4gKiBAdHlwZSB7TWVzc2FnZTxUPn1cbiAqL1xuXG4vKipcbiAqIEEgT25lT2YgZ2V0dGVyIGFzIHJldHVybmVkIGJ5IHtAbGluayB1dGlsLm9uZU9mR2V0dGVyfS5cbiAqIEB0eXBlZGVmIE9uZU9mR2V0dGVyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gU2V0IGZpZWxkIG5hbWUsIGlmIGFueVxuICovXG5cbi8qKlxuICogQnVpbGRzIGEgZ2V0dGVyIGZvciBhIG9uZW9mJ3MgcHJlc2VudCBmaWVsZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gZmllbGROYW1lcyBGaWVsZCBuYW1lc1xuICogQHJldHVybnMge09uZU9mR2V0dGVyfSBVbmJvdW5kIGdldHRlclxuICovXG51dGlsLm9uZU9mR2V0dGVyID0gZnVuY3Rpb24gZ2V0T25lT2YoZmllbGROYW1lcykge1xuICAgIHZhciBmaWVsZE1hcCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGROYW1lcy5sZW5ndGg7ICsraSlcbiAgICAgICAgZmllbGRNYXBbZmllbGROYW1lc1tpXV0gPSAxO1xuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IFNldCBmaWVsZCBuYW1lLCBpZiBhbnlcbiAgICAgKiBAdGhpcyBPYmplY3RcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gICAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKSwgaSA9IGtleXMubGVuZ3RoIC0gMTsgaSA+IC0xOyAtLWkpXG4gICAgICAgICAgICBpZiAoZmllbGRNYXBba2V5c1tpXV0gPT09IDEgJiYgdGhpc1trZXlzW2ldXSAhPT0gdW5kZWZpbmVkICYmIHRoaXNba2V5c1tpXV0gIT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleXNbaV07XG4gICAgfTtcbn07XG5cbi8qKlxuICogQSBPbmVPZiBzZXR0ZXIgYXMgcmV0dXJuZWQgYnkge0BsaW5rIHV0aWwub25lT2ZTZXR0ZXJ9LlxuICogQHR5cGVkZWYgT25lT2ZTZXR0ZXJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdmFsdWUgRmllbGQgbmFtZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuXG4vKipcbiAqIEJ1aWxkcyBhIHNldHRlciBmb3IgYSBvbmVvZidzIHByZXNlbnQgZmllbGQgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nW119IGZpZWxkTmFtZXMgRmllbGQgbmFtZXNcbiAqIEByZXR1cm5zIHtPbmVPZlNldHRlcn0gVW5ib3VuZCBzZXR0ZXJcbiAqL1xudXRpbC5vbmVPZlNldHRlciA9IGZ1bmN0aW9uIHNldE9uZU9mKGZpZWxkTmFtZXMpIHtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEZpZWxkIG5hbWVcbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqIEB0aGlzIE9iamVjdFxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24obmFtZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkTmFtZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICBpZiAoZmllbGROYW1lc1tpXSAhPT0gbmFtZSlcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1tmaWVsZE5hbWVzW2ldXTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBEZWZhdWx0IGNvbnZlcnNpb24gb3B0aW9ucyB1c2VkIGZvciB7QGxpbmsgTWVzc2FnZSN0b0pTT059IGltcGxlbWVudGF0aW9ucy5cbiAqXG4gKiBUaGVzZSBvcHRpb25zIGFyZSBjbG9zZSB0byBwcm90bzMncyBKU09OIG1hcHBpbmcgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgaW50ZXJuYWwgdHlwZXMgbGlrZSBBbnkgYXJlIGhhbmRsZWQganVzdCBsaWtlIG1lc3NhZ2VzLiBNb3JlIHByZWNpc2VseTpcbiAqXG4gKiAtIExvbmdzIGJlY29tZSBzdHJpbmdzXG4gKiAtIEVudW1zIGJlY29tZSBzdHJpbmcga2V5c1xuICogLSBCeXRlcyBiZWNvbWUgYmFzZTY0IGVuY29kZWQgc3RyaW5nc1xuICogLSAoU3ViLSlNZXNzYWdlcyBiZWNvbWUgcGxhaW4gb2JqZWN0c1xuICogLSBNYXBzIGJlY29tZSBwbGFpbiBvYmplY3RzIHdpdGggYWxsIHN0cmluZyBrZXlzXG4gKiAtIFJlcGVhdGVkIGZpZWxkcyBiZWNvbWUgYXJyYXlzXG4gKiAtIE5hTiBhbmQgSW5maW5pdHkgZm9yIGZsb2F0IGFuZCBkb3VibGUgZmllbGRzIGJlY29tZSBzdHJpbmdzXG4gKlxuICogQHR5cGUge0lDb252ZXJzaW9uT3B0aW9uc31cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMz9obD1lbiNqc29uXG4gKi9cbnV0aWwudG9KU09OT3B0aW9ucyA9IHtcbiAgICBsb25nczogU3RyaW5nLFxuICAgIGVudW1zOiBTdHJpbmcsXG4gICAgYnl0ZXM6IFN0cmluZyxcbiAgICBqc29uOiB0cnVlXG59O1xuXG4vLyBTZXRzIHVwIGJ1ZmZlciB1dGlsaXR5IGFjY29yZGluZyB0byB0aGUgZW52aXJvbm1lbnQgKGNhbGxlZCBpbiBpbmRleC1taW5pbWFsKVxudXRpbC5fY29uZmlndXJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIEJ1ZmZlciA9IHV0aWwuQnVmZmVyO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghQnVmZmVyKSB7XG4gICAgICAgIHV0aWwuX0J1ZmZlcl9mcm9tID0gdXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBiZWNhdXNlIG5vZGUgNC54IGJ1ZmZlcnMgYXJlIGluY29tcGF0aWJsZSAmIGltbXV0YWJsZVxuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Rjb2RlSU8vcHJvdG9idWYuanMvcHVsbC82NjVcbiAgICB1dGlsLl9CdWZmZXJfZnJvbSA9IEJ1ZmZlci5mcm9tICE9PSBVaW50OEFycmF5LmZyb20gJiYgQnVmZmVyLmZyb20gfHxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZnVuY3Rpb24gQnVmZmVyX2Zyb20odmFsdWUsIGVuY29kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmcpO1xuICAgICAgICB9O1xuICAgIHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSB8fFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBCdWZmZXJfYWxsb2NVbnNhZmUoc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXIoc2l6ZSk7XG4gICAgICAgIH07XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IFdyaXRlcjtcblxudmFyIHV0aWwgICAgICA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxudmFyIEJ1ZmZlcldyaXRlcjsgLy8gY3ljbGljXG5cbnZhciBMb25nQml0cyAgPSB1dGlsLkxvbmdCaXRzLFxuICAgIGJhc2U2NCAgICA9IHV0aWwuYmFzZTY0LFxuICAgIHV0ZjggICAgICA9IHV0aWwudXRmODtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHdyaXRlciBvcGVyYXRpb24gaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFNjaGVkdWxlZCB3cml0ZXIgb3BlcmF0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIFVpbnQ4QXJyYXksIG51bWJlcil9IGZuIEZ1bmN0aW9uIHRvIGNhbGxcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW4gVmFsdWUgYnl0ZSBsZW5ndGhcbiAqIEBwYXJhbSB7Kn0gdmFsIFZhbHVlIHRvIHdyaXRlXG4gKiBAaWdub3JlXG4gKi9cbmZ1bmN0aW9uIE9wKGZuLCBsZW4sIHZhbCkge1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2FsbC5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb24oVWludDhBcnJheSwgbnVtYmVyLCAqKX1cbiAgICAgKi9cbiAgICB0aGlzLmZuID0gZm47XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBieXRlIGxlbmd0aC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGVuID0gbGVuO1xuXG4gICAgLyoqXG4gICAgICogTmV4dCBvcGVyYXRpb24uXG4gICAgICogQHR5cGUge1dyaXRlci5PcHx1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5uZXh0ID0gdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogVmFsdWUgdG8gd3JpdGUuXG4gICAgICogQHR5cGUgeyp9XG4gICAgICovXG4gICAgdGhpcy52YWwgPSB2YWw7IC8vIHR5cGUgdmFyaWVzXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBub29wKCkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eS1mdW5jdGlvblxuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgd3JpdGVyIHN0YXRlIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBDb3BpZWQgd3JpdGVyIHN0YXRlLlxuICogQG1lbWJlcm9mIFdyaXRlclxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1dyaXRlcn0gd3JpdGVyIFdyaXRlciB0byBjb3B5IHN0YXRlIGZyb21cbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gU3RhdGUod3JpdGVyKSB7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGhlYWQuXG4gICAgICogQHR5cGUge1dyaXRlci5PcH1cbiAgICAgKi9cbiAgICB0aGlzLmhlYWQgPSB3cml0ZXIuaGVhZDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgdGFpbC5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfVxuICAgICAqL1xuICAgIHRoaXMudGFpbCA9IHdyaXRlci50YWlsO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBidWZmZXIgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSB3cml0ZXIubGVuO1xuXG4gICAgLyoqXG4gICAgICogTmV4dCBzdGF0ZS5cbiAgICAgKiBAdHlwZSB7U3RhdGV8bnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLm5leHQgPSB3cml0ZXIuc3RhdGVzO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgd3JpdGVyIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBXaXJlIGZvcm1hdCB3cml0ZXIgdXNpbmcgYFVpbnQ4QXJyYXlgIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGBBcnJheWAuXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gV3JpdGVyKCkge1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBsZW5ndGguXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxlbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBPcGVyYXRpb25zIGhlYWQuXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLmhlYWQgPSBuZXcgT3Aobm9vcCwgMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBPcGVyYXRpb25zIHRhaWxcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMudGFpbCA9IHRoaXMuaGVhZDtcblxuICAgIC8qKlxuICAgICAqIExpbmtlZCBmb3JrZWQgc3RhdGVzLlxuICAgICAqIEB0eXBlIHtPYmplY3R8bnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLnN0YXRlcyA9IG51bGw7XG5cbiAgICAvLyBXaGVuIGEgdmFsdWUgaXMgd3JpdHRlbiwgdGhlIHdyaXRlciBjYWxjdWxhdGVzIGl0cyBieXRlIGxlbmd0aCBhbmQgcHV0cyBpdCBpbnRvIGEgbGlua2VkXG4gICAgLy8gbGlzdCBvZiBvcGVyYXRpb25zIHRvIHBlcmZvcm0gd2hlbiBmaW5pc2goKSBpcyBjYWxsZWQuIFRoaXMgYm90aCBhbGxvd3MgdXMgdG8gYWxsb2NhdGVcbiAgICAvLyBidWZmZXJzIG9mIHRoZSBleGFjdCByZXF1aXJlZCBzaXplIGFuZCByZWR1Y2VzIHRoZSBhbW91bnQgb2Ygd29yayB3ZSBoYXZlIHRvIGRvIGNvbXBhcmVkXG4gICAgLy8gdG8gZmlyc3QgY2FsY3VsYXRpbmcgb3ZlciBvYmplY3RzIGFuZCB0aGVuIGVuY29kaW5nIG92ZXIgb2JqZWN0cy4gSW4gb3VyIGNhc2UsIHRoZSBlbmNvZGluZ1xuICAgIC8vIHBhcnQgaXMganVzdCBhIGxpbmtlZCBsaXN0IHdhbGsgY2FsbGluZyBvcGVyYXRpb25zIHdpdGggYWxyZWFkeSBwcmVwYXJlZCB2YWx1ZXMuXG59XG5cbnZhciBjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIHV0aWwuQnVmZmVyXG4gICAgICAgID8gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcl9zZXR1cCgpIHtcbiAgICAgICAgICAgIHJldHVybiAoV3JpdGVyLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZV9idWZmZXIoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXJXcml0ZXIoKTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgOiBmdW5jdGlvbiBjcmVhdGVfYXJyYXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFdyaXRlcigpO1xuICAgICAgICB9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHdyaXRlci5cbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0J1ZmZlcldyaXRlcnxXcml0ZXJ9IEEge0BsaW5rIEJ1ZmZlcldyaXRlcn0gd2hlbiBCdWZmZXJzIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBhIHtAbGluayBXcml0ZXJ9XG4gKi9cbldyaXRlci5jcmVhdGUgPSBjcmVhdGUoKTtcblxuLyoqXG4gKiBBbGxvY2F0ZXMgYSBidWZmZXIgb2YgdGhlIHNwZWNpZmllZCBzaXplLlxuICogQHBhcmFtIHtudW1iZXJ9IHNpemUgQnVmZmVyIHNpemVcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXJcbiAqL1xuV3JpdGVyLmFsbG9jID0gZnVuY3Rpb24gYWxsb2Moc2l6ZSkge1xuICAgIHJldHVybiBuZXcgdXRpbC5BcnJheShzaXplKTtcbn07XG5cbi8vIFVzZSBVaW50OEFycmF5IGJ1ZmZlciBwb29sIGluIHRoZSBicm93c2VyLCBqdXN0IGxpa2Ugbm9kZSBkb2VzIHdpdGggYnVmZmVyc1xuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbmlmICh1dGlsLkFycmF5ICE9PSBBcnJheSlcbiAgICBXcml0ZXIuYWxsb2MgPSB1dGlsLnBvb2woV3JpdGVyLmFsbG9jLCB1dGlsLkFycmF5LnByb3RvdHlwZS5zdWJhcnJheSk7XG5cbi8qKlxuICogUHVzaGVzIGEgbmV3IG9wZXJhdGlvbiB0byB0aGUgcXVldWUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKFVpbnQ4QXJyYXksIG51bWJlciwgKil9IGZuIEZ1bmN0aW9uIHRvIGNhbGxcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW4gVmFsdWUgYnl0ZSBsZW5ndGhcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHByaXZhdGVcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5fcHVzaCA9IGZ1bmN0aW9uIHB1c2goZm4sIGxlbiwgdmFsKSB7XG4gICAgdGhpcy50YWlsID0gdGhpcy50YWlsLm5leHQgPSBuZXcgT3AoZm4sIGxlbiwgdmFsKTtcbiAgICB0aGlzLmxlbiArPSBsZW47XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiB3cml0ZUJ5dGUodmFsLCBidWYsIHBvcykge1xuICAgIGJ1Zltwb3NdID0gdmFsICYgMjU1O1xufVxuXG5mdW5jdGlvbiB3cml0ZVZhcmludDMyKHZhbCwgYnVmLCBwb3MpIHtcbiAgICB3aGlsZSAodmFsID4gMTI3KSB7XG4gICAgICAgIGJ1Zltwb3MrK10gPSB2YWwgJiAxMjcgfCAxMjg7XG4gICAgICAgIHZhbCA+Pj49IDc7XG4gICAgfVxuICAgIGJ1Zltwb3NdID0gdmFsO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgdmFyaW50IHdyaXRlciBvcGVyYXRpb24gaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFNjaGVkdWxlZCB2YXJpbnQgd3JpdGVyIG9wZXJhdGlvbi5cbiAqIEBleHRlbmRzIE9wXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW4gVmFsdWUgYnl0ZSBsZW5ndGhcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gVmFyaW50T3AobGVuLCB2YWwpIHtcbiAgICB0aGlzLmxlbiA9IGxlbjtcbiAgICB0aGlzLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy52YWwgPSB2YWw7XG59XG5cblZhcmludE9wLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoT3AucHJvdG90eXBlKTtcblZhcmludE9wLnByb3RvdHlwZS5mbiA9IHdyaXRlVmFyaW50MzI7XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZSBhcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUudWludDMyID0gZnVuY3Rpb24gd3JpdGVfdWludDMyKHZhbHVlKSB7XG4gICAgLy8gaGVyZSwgdGhlIGNhbGwgdG8gdGhpcy5wdXNoIGhhcyBiZWVuIGlubGluZWQgYW5kIGEgdmFyaW50IHNwZWNpZmljIE9wIHN1YmNsYXNzIGlzIHVzZWQuXG4gICAgLy8gdWludDMyIGlzIGJ5IGZhciB0aGUgbW9zdCBmcmVxdWVudGx5IHVzZWQgb3BlcmF0aW9uIGFuZCBiZW5lZml0cyBzaWduaWZpY2FudGx5IGZyb20gdGhpcy5cbiAgICB0aGlzLmxlbiArPSAodGhpcy50YWlsID0gdGhpcy50YWlsLm5leHQgPSBuZXcgVmFyaW50T3AoXG4gICAgICAgICh2YWx1ZSA9IHZhbHVlID4+PiAwKVxuICAgICAgICAgICAgICAgIDwgMTI4ICAgICAgID8gMVxuICAgICAgICA6IHZhbHVlIDwgMTYzODQgICAgID8gMlxuICAgICAgICA6IHZhbHVlIDwgMjA5NzE1MiAgID8gM1xuICAgICAgICA6IHZhbHVlIDwgMjY4NDM1NDU2ID8gNFxuICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgNSxcbiAgICB2YWx1ZSkpLmxlbjtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgc2lnbmVkIDMyIGJpdCB2YWx1ZSBhcyBhIHZhcmludC5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5pbnQzMiA9IGZ1bmN0aW9uIHdyaXRlX2ludDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIDwgMFxuICAgICAgICA/IHRoaXMuX3B1c2god3JpdGVWYXJpbnQ2NCwgMTAsIExvbmdCaXRzLmZyb21OdW1iZXIodmFsdWUpKSAvLyAxMCBieXRlcyBwZXIgc3BlY1xuICAgICAgICA6IHRoaXMudWludDMyKHZhbHVlKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LCB6aWctemFnIGVuY29kZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLnNpbnQzMiA9IGZ1bmN0aW9uIHdyaXRlX3NpbnQzMih2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnVpbnQzMigodmFsdWUgPDwgMSBeIHZhbHVlID4+IDMxKSA+Pj4gMCk7XG59O1xuXG5mdW5jdGlvbiB3cml0ZVZhcmludDY0KHZhbCwgYnVmLCBwb3MpIHtcbiAgICB3aGlsZSAodmFsLmhpKSB7XG4gICAgICAgIGJ1Zltwb3MrK10gPSB2YWwubG8gJiAxMjcgfCAxMjg7XG4gICAgICAgIHZhbC5sbyA9ICh2YWwubG8gPj4+IDcgfCB2YWwuaGkgPDwgMjUpID4+PiAwO1xuICAgICAgICB2YWwuaGkgPj4+PSA3O1xuICAgIH1cbiAgICB3aGlsZSAodmFsLmxvID4gMTI3KSB7XG4gICAgICAgIGJ1Zltwb3MrK10gPSB2YWwubG8gJiAxMjcgfCAxMjg7XG4gICAgICAgIHZhbC5sbyA9IHZhbC5sbyA+Pj4gNztcbiAgICB9XG4gICAgYnVmW3BvcysrXSA9IHZhbC5sbztcbn1cblxuLyoqXG4gKiBXcml0ZXMgYW4gdW5zaWduZWQgNjQgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYHZhbHVlYCBpcyBhIHN0cmluZyBhbmQgbm8gbG9uZyBsaWJyYXJ5IGlzIHByZXNlbnQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUudWludDY0ID0gZnVuY3Rpb24gd3JpdGVfdWludDY0KHZhbHVlKSB7XG4gICAgdmFyIGJpdHMgPSBMb25nQml0cy5mcm9tKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCBiaXRzLmxlbmd0aCgpLCBiaXRzKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBhIHZhcmludC5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYHZhbHVlYCBpcyBhIHN0cmluZyBhbmQgbm8gbG9uZyBsaWJyYXJ5IGlzIHByZXNlbnQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUuaW50NjQgPSBXcml0ZXIucHJvdG90eXBlLnVpbnQ2NDtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgNjQgYml0IHZhbHVlIGFzIGEgdmFyaW50LCB6aWctemFnIGVuY29kZWQuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zaW50NjQgPSBmdW5jdGlvbiB3cml0ZV9zaW50NjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpLnp6RW5jb2RlKCk7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVWYXJpbnQ2NCwgYml0cy5sZW5ndGgoKSwgYml0cyk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIGJvb2xpc2ggdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5ib29sID0gZnVuY3Rpb24gd3JpdGVfYm9vbCh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlQnl0ZSwgMSwgdmFsdWUgPyAxIDogMCk7XG59O1xuXG5mdW5jdGlvbiB3cml0ZUZpeGVkMzIodmFsLCBidWYsIHBvcykge1xuICAgIGJ1Zltwb3MgICAgXSA9ICB2YWwgICAgICAgICAmIDI1NTtcbiAgICBidWZbcG9zICsgMV0gPSAgdmFsID4+PiA4ICAgJiAyNTU7XG4gICAgYnVmW3BvcyArIDJdID0gIHZhbCA+Pj4gMTYgICYgMjU1O1xuICAgIGJ1Zltwb3MgKyAzXSA9ICB2YWwgPj4+IDI0O1xufVxuXG4vKipcbiAqIFdyaXRlcyBhbiB1bnNpZ25lZCAzMiBiaXQgdmFsdWUgYXMgZml4ZWQgMzIgYml0cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZml4ZWQzMiA9IGZ1bmN0aW9uIHdyaXRlX2ZpeGVkMzIodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZUZpeGVkMzIsIDQsIHZhbHVlID4+PiAwKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgc2lnbmVkIDMyIGJpdCB2YWx1ZSBhcyBmaXhlZCAzMiBiaXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLnNmaXhlZDMyID0gV3JpdGVyLnByb3RvdHlwZS5maXhlZDMyO1xuXG4vKipcbiAqIFdyaXRlcyBhbiB1bnNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgZml4ZWQgNjQgYml0cy5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLmZpeGVkNjQgPSBmdW5jdGlvbiB3cml0ZV9maXhlZDY0KHZhbHVlKSB7XG4gICAgdmFyIGJpdHMgPSBMb25nQml0cy5mcm9tKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZUZpeGVkMzIsIDQsIGJpdHMubG8pLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgYml0cy5oaSk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgZml4ZWQgNjQgYml0cy5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYHZhbHVlYCBpcyBhIHN0cmluZyBhbmQgbm8gbG9uZyBsaWJyYXJ5IGlzIHByZXNlbnQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ZpeGVkNjQgPSBXcml0ZXIucHJvdG90eXBlLmZpeGVkNjQ7XG5cbi8qKlxuICogV3JpdGVzIGEgZmxvYXQgKDMyIGJpdCkuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZmxvYXQgPSBmdW5jdGlvbiB3cml0ZV9mbG9hdCh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHV0aWwuZmxvYXQud3JpdGVGbG9hdExFLCA0LCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIGRvdWJsZSAoNjQgYml0IGZsb2F0KS5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5kb3VibGUgPSBmdW5jdGlvbiB3cml0ZV9kb3VibGUodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh1dGlsLmZsb2F0LndyaXRlRG91YmxlTEUsIDgsIHZhbHVlKTtcbn07XG5cbnZhciB3cml0ZUJ5dGVzID0gdXRpbC5BcnJheS5wcm90b3R5cGUuc2V0XG4gICAgPyBmdW5jdGlvbiB3cml0ZUJ5dGVzX3NldCh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgICAgIGJ1Zi5zZXQodmFsLCBwb3MpOyAvLyBhbHNvIHdvcmtzIGZvciBwbGFpbiBhcnJheSB2YWx1ZXNcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICA6IGZ1bmN0aW9uIHdyaXRlQnl0ZXNfZm9yKHZhbCwgYnVmLCBwb3MpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICBidWZbcG9zICsgaV0gPSB2YWxbaV07XG4gICAgfTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzZXF1ZW5jZSBvZiBieXRlcy5cbiAqIEBwYXJhbSB7VWludDhBcnJheXxzdHJpbmd9IHZhbHVlIEJ1ZmZlciBvciBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gd3JpdGVfYnl0ZXModmFsdWUpIHtcbiAgICB2YXIgbGVuID0gdmFsdWUubGVuZ3RoID4+PiAwO1xuICAgIGlmICghbGVuKVxuICAgICAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZUJ5dGUsIDEsIDApO1xuICAgIGlmICh1dGlsLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICB2YXIgYnVmID0gV3JpdGVyLmFsbG9jKGxlbiA9IGJhc2U2NC5sZW5ndGgodmFsdWUpKTtcbiAgICAgICAgYmFzZTY0LmRlY29kZSh2YWx1ZSwgYnVmLCAwKTtcbiAgICAgICAgdmFsdWUgPSBidWY7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVpbnQzMihsZW4pLl9wdXNoKHdyaXRlQnl0ZXMsIGxlbiwgdmFsdWUpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHdyaXRlX3N0cmluZyh2YWx1ZSkge1xuICAgIHZhciBsZW4gPSB1dGY4Lmxlbmd0aCh2YWx1ZSk7XG4gICAgcmV0dXJuIGxlblxuICAgICAgICA/IHRoaXMudWludDMyKGxlbikuX3B1c2godXRmOC53cml0ZSwgbGVuLCB2YWx1ZSlcbiAgICAgICAgOiB0aGlzLl9wdXNoKHdyaXRlQnl0ZSwgMSwgMCk7XG59O1xuXG4vKipcbiAqIEZvcmtzIHRoaXMgd3JpdGVyJ3Mgc3RhdGUgYnkgcHVzaGluZyBpdCB0byBhIHN0YWNrLlxuICogQ2FsbGluZyB7QGxpbmsgV3JpdGVyI3Jlc2V0fHJlc2V0fSBvciB7QGxpbmsgV3JpdGVyI2xkZWxpbXxsZGVsaW19IHJlc2V0cyB0aGUgd3JpdGVyIHRvIHRoZSBwcmV2aW91cyBzdGF0ZS5cbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmZvcmsgPSBmdW5jdGlvbiBmb3JrKCkge1xuICAgIHRoaXMuc3RhdGVzID0gbmV3IFN0YXRlKHRoaXMpO1xuICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBPcChub29wLCAwLCAwKTtcbiAgICB0aGlzLmxlbiA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlc2V0cyB0aGlzIGluc3RhbmNlIHRvIHRoZSBsYXN0IHN0YXRlLlxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZXMpIHtcbiAgICAgICAgdGhpcy5oZWFkICAgPSB0aGlzLnN0YXRlcy5oZWFkO1xuICAgICAgICB0aGlzLnRhaWwgICA9IHRoaXMuc3RhdGVzLnRhaWw7XG4gICAgICAgIHRoaXMubGVuICAgID0gdGhpcy5zdGF0ZXMubGVuO1xuICAgICAgICB0aGlzLnN0YXRlcyA9IHRoaXMuc3RhdGVzLm5leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IE9wKG5vb3AsIDAsIDApO1xuICAgICAgICB0aGlzLmxlbiAgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRvIHRoZSBsYXN0IHN0YXRlIGFuZCBhcHBlbmRzIHRoZSBmb3JrIHN0YXRlJ3MgY3VycmVudCB3cml0ZSBsZW5ndGggYXMgYSB2YXJpbnQgZm9sbG93ZWQgYnkgaXRzIG9wZXJhdGlvbnMuXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5sZGVsaW0gPSBmdW5jdGlvbiBsZGVsaW0oKSB7XG4gICAgdmFyIGhlYWQgPSB0aGlzLmhlYWQsXG4gICAgICAgIHRhaWwgPSB0aGlzLnRhaWwsXG4gICAgICAgIGxlbiAgPSB0aGlzLmxlbjtcbiAgICB0aGlzLnJlc2V0KCkudWludDMyKGxlbik7XG4gICAgaWYgKGxlbikge1xuICAgICAgICB0aGlzLnRhaWwubmV4dCA9IGhlYWQubmV4dDsgLy8gc2tpcCBub29wXG4gICAgICAgIHRoaXMudGFpbCA9IHRhaWw7XG4gICAgICAgIHRoaXMubGVuICs9IGxlbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEZpbmlzaGVzIHRoZSB3cml0ZSBvcGVyYXRpb24uXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gRmluaXNoZWQgYnVmZmVyXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24gZmluaXNoKCkge1xuICAgIHZhciBoZWFkID0gdGhpcy5oZWFkLm5leHQsIC8vIHNraXAgbm9vcFxuICAgICAgICBidWYgID0gdGhpcy5jb25zdHJ1Y3Rvci5hbGxvYyh0aGlzLmxlbiksXG4gICAgICAgIHBvcyAgPSAwO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICAgIGhlYWQuZm4oaGVhZC52YWwsIGJ1ZiwgcG9zKTtcbiAgICAgICAgcG9zICs9IGhlYWQubGVuO1xuICAgICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgIH1cbiAgICAvLyB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHJldHVybiBidWY7XG59O1xuXG5Xcml0ZXIuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uKEJ1ZmZlcldyaXRlcl8pIHtcbiAgICBCdWZmZXJXcml0ZXIgPSBCdWZmZXJXcml0ZXJfO1xuICAgIFdyaXRlci5jcmVhdGUgPSBjcmVhdGUoKTtcbiAgICBCdWZmZXJXcml0ZXIuX2NvbmZpZ3VyZSgpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJXcml0ZXI7XG5cbi8vIGV4dGVuZHMgV3JpdGVyXG52YXIgV3JpdGVyID0gcmVxdWlyZShcIi4vd3JpdGVyXCIpO1xuKEJ1ZmZlcldyaXRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFdyaXRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IEJ1ZmZlcldyaXRlcjtcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBidWZmZXIgd3JpdGVyIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBXaXJlIGZvcm1hdCB3cml0ZXIgdXNpbmcgbm9kZSBidWZmZXJzLlxuICogQGV4dGVuZHMgV3JpdGVyXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gQnVmZmVyV3JpdGVyKCkge1xuICAgIFdyaXRlci5jYWxsKHRoaXMpO1xufVxuXG5CdWZmZXJXcml0ZXIuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBBbGxvY2F0ZXMgYSBidWZmZXIgb2YgdGhlIHNwZWNpZmllZCBzaXplLlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIEJ1ZmZlciBzaXplXG4gICAgICogQHJldHVybnMge0J1ZmZlcn0gQnVmZmVyXG4gICAgICovXG4gICAgQnVmZmVyV3JpdGVyLmFsbG9jID0gdXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlO1xuXG4gICAgQnVmZmVyV3JpdGVyLndyaXRlQnl0ZXNCdWZmZXIgPSB1dGlsLkJ1ZmZlciAmJiB1dGlsLkJ1ZmZlci5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIHV0aWwuQnVmZmVyLnByb3RvdHlwZS5zZXQubmFtZSA9PT0gXCJzZXRcIlxuICAgICAgICA/IGZ1bmN0aW9uIHdyaXRlQnl0ZXNCdWZmZXJfc2V0KHZhbCwgYnVmLCBwb3MpIHtcbiAgICAgICAgICBidWYuc2V0KHZhbCwgcG9zKTsgLy8gZmFzdGVyIHRoYW4gY29weSAocmVxdWlyZXMgbm9kZSA+PSA0IHdoZXJlIEJ1ZmZlcnMgZXh0ZW5kIFVpbnQ4QXJyYXkgYW5kIHNldCBpcyBwcm9wZXJseSBpbmhlcml0ZWQpXG4gICAgICAgICAgLy8gYWxzbyB3b3JrcyBmb3IgcGxhaW4gYXJyYXkgdmFsdWVzXG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgOiBmdW5jdGlvbiB3cml0ZUJ5dGVzQnVmZmVyX2NvcHkodmFsLCBidWYsIHBvcykge1xuICAgICAgICAgIGlmICh2YWwuY29weSkgLy8gQnVmZmVyIHZhbHVlc1xuICAgICAgICAgICAgdmFsLmNvcHkoYnVmLCBwb3MsIDAsIHZhbC5sZW5ndGgpO1xuICAgICAgICAgIGVsc2UgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOykgLy8gcGxhaW4gYXJyYXkgdmFsdWVzXG4gICAgICAgICAgICBidWZbcG9zKytdID0gdmFsW2krK107XG4gICAgICAgIH07XG59O1xuXG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cbkJ1ZmZlcldyaXRlci5wcm90b3R5cGUuYnl0ZXMgPSBmdW5jdGlvbiB3cml0ZV9ieXRlc19idWZmZXIodmFsdWUpIHtcbiAgICBpZiAodXRpbC5pc1N0cmluZyh2YWx1ZSkpXG4gICAgICAgIHZhbHVlID0gdXRpbC5fQnVmZmVyX2Zyb20odmFsdWUsIFwiYmFzZTY0XCIpO1xuICAgIHZhciBsZW4gPSB2YWx1ZS5sZW5ndGggPj4+IDA7XG4gICAgdGhpcy51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKVxuICAgICAgICB0aGlzLl9wdXNoKEJ1ZmZlcldyaXRlci53cml0ZUJ5dGVzQnVmZmVyLCBsZW4sIHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHdyaXRlU3RyaW5nQnVmZmVyKHZhbCwgYnVmLCBwb3MpIHtcbiAgICBpZiAodmFsLmxlbmd0aCA8IDQwKSAvLyBwbGFpbiBqcyBpcyBmYXN0ZXIgZm9yIHNob3J0IHN0cmluZ3MgKHByb2JhYmx5IGR1ZSB0byByZWR1bmRhbnQgYXNzZXJ0aW9ucylcbiAgICAgICAgdXRpbC51dGY4LndyaXRlKHZhbCwgYnVmLCBwb3MpO1xuICAgIGVsc2UgaWYgKGJ1Zi51dGY4V3JpdGUpXG4gICAgICAgIGJ1Zi51dGY4V3JpdGUodmFsLCBwb3MpO1xuICAgIGVsc2VcbiAgICAgICAgYnVmLndyaXRlKHZhbCwgcG9zKTtcbn1cblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuQnVmZmVyV3JpdGVyLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiB3cml0ZV9zdHJpbmdfYnVmZmVyKHZhbHVlKSB7XG4gICAgdmFyIGxlbiA9IHV0aWwuQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUpO1xuICAgIHRoaXMudWludDMyKGxlbik7XG4gICAgaWYgKGxlbilcbiAgICAgICAgdGhpcy5fcHVzaCh3cml0ZVN0cmluZ0J1ZmZlciwgbGVuLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qKlxuICogRmluaXNoZXMgdGhlIHdyaXRlIG9wZXJhdGlvbi5cbiAqIEBuYW1lIEJ1ZmZlcldyaXRlciNmaW5pc2hcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0J1ZmZlcn0gRmluaXNoZWQgYnVmZmVyXG4gKi9cblxuQnVmZmVyV3JpdGVyLl9jb25maWd1cmUoKTtcbiIsIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBSZWFkZXI7XG5cbnZhciB1dGlsICAgICAgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5cbnZhciBCdWZmZXJSZWFkZXI7IC8vIGN5Y2xpY1xuXG52YXIgTG9uZ0JpdHMgID0gdXRpbC5Mb25nQml0cyxcbiAgICB1dGY4ICAgICAgPSB1dGlsLnV0Zjg7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBpbmRleE91dE9mUmFuZ2UocmVhZGVyLCB3cml0ZUxlbmd0aCkge1xuICAgIHJldHVybiBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlOiBcIiArIHJlYWRlci5wb3MgKyBcIiArIFwiICsgKHdyaXRlTGVuZ3RoIHx8IDEpICsgXCIgPiBcIiArIHJlYWRlci5sZW4pO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgcmVhZGVyIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgYnVmZmVyLlxuICogQGNsYXNzZGVzYyBXaXJlIGZvcm1hdCByZWFkZXIgdXNpbmcgYFVpbnQ4QXJyYXlgIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGBBcnJheWAuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIEJ1ZmZlciB0byByZWFkIGZyb21cbiAqL1xuZnVuY3Rpb24gUmVhZGVyKGJ1ZmZlcikge1xuXG4gICAgLyoqXG4gICAgICogUmVhZCBidWZmZXIuXG4gICAgICogQHR5cGUge1VpbnQ4QXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5idWYgPSBidWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlciBwb3NpdGlvbi5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucG9zID0gMDtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyIGxlbmd0aC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGVuID0gYnVmZmVyLmxlbmd0aDtcbn1cblxudmFyIGNyZWF0ZV9hcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyBmdW5jdGlvbiBjcmVhdGVfdHlwZWRfYXJyYXkoYnVmZmVyKSB7XG4gICAgICAgIGlmIChidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEFycmF5LmlzQXJyYXkoYnVmZmVyKSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVhZGVyKGJ1ZmZlcik7XG4gICAgICAgIHRocm93IEVycm9yKFwiaWxsZWdhbCBidWZmZXJcIik7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgOiBmdW5jdGlvbiBjcmVhdGVfYXJyYXkoYnVmZmVyKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJ1ZmZlcikpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlYWRlcihidWZmZXIpO1xuICAgICAgICB0aHJvdyBFcnJvcihcImlsbGVnYWwgYnVmZmVyXCIpO1xuICAgIH07XG5cbnZhciBjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIHV0aWwuQnVmZmVyXG4gICAgICAgID8gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcl9zZXR1cChidWZmZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoUmVhZGVyLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZV9idWZmZXIoYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwuQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcilcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgQnVmZmVyUmVhZGVyKGJ1ZmZlcilcbiAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVfYXJyYXkoYnVmZmVyKTtcbiAgICAgICAgICAgIH0pKGJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgOiBjcmVhdGVfYXJyYXk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcmVhZGVyIHVzaW5nIHRoZSBzcGVjaWZpZWQgYnVmZmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl8QnVmZmVyfSBidWZmZXIgQnVmZmVyIHRvIHJlYWQgZnJvbVxuICogQHJldHVybnMge1JlYWRlcnxCdWZmZXJSZWFkZXJ9IEEge0BsaW5rIEJ1ZmZlclJlYWRlcn0gaWYgYGJ1ZmZlcmAgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBhIHtAbGluayBSZWFkZXJ9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYGJ1ZmZlcmAgaXMgbm90IGEgdmFsaWQgYnVmZmVyXG4gKi9cblJlYWRlci5jcmVhdGUgPSBjcmVhdGUoKTtcblxuUmVhZGVyLnByb3RvdHlwZS5fc2xpY2UgPSB1dGlsLkFycmF5LnByb3RvdHlwZS5zdWJhcnJheSB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB1dGlsLkFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhbiB1bnNpZ25lZCAzMiBiaXQgdmFsdWUuXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS51aW50MzIgPSAoZnVuY3Rpb24gcmVhZF91aW50MzJfc2V0dXAoKSB7XG4gICAgdmFyIHZhbHVlID0gNDI5NDk2NzI5NTsgLy8gb3B0aW1pemVyIHR5cGUtaGludCwgdGVuZHMgdG8gZGVvcHQgb3RoZXJ3aXNlICg/ISlcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVhZF91aW50MzIoKSB7XG4gICAgICAgIHZhbHVlID0gKCAgICAgICAgIHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNyAgICAgICApID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAgNykgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IDE0KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMjEpID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgIDE1KSA8PCAyOCkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoKHRoaXMucG9zICs9IDUpID4gdGhpcy5sZW4pIHtcbiAgICAgICAgICAgIHRoaXMucG9zID0gdGhpcy5sZW47XG4gICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgMTApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xufSkoKTtcblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIHNpZ25lZCAzMiBiaXQgdmFsdWUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuaW50MzIgPSBmdW5jdGlvbiByZWFkX2ludDMyKCkge1xuICAgIHJldHVybiB0aGlzLnVpbnQzMigpIHwgMDtcbn07XG5cbi8qKlxuICogUmVhZHMgYSB6aWctemFnIGVuY29kZWQgdmFyaW50IGFzIGEgc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5zaW50MzIgPSBmdW5jdGlvbiByZWFkX3NpbnQzMigpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnVpbnQzMigpO1xuICAgIHJldHVybiB2YWx1ZSA+Pj4gMSBeIC0odmFsdWUgJiAxKSB8IDA7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuZnVuY3Rpb24gcmVhZExvbmdWYXJpbnQoKSB7XG4gICAgLy8gdGVuZHMgdG8gZGVvcHQgd2l0aCBsb2NhbCB2YXJzIGZvciBvY3RldCBldGMuXG4gICAgdmFyIGJpdHMgPSBuZXcgTG9uZ0JpdHMoMCwgMCk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGlmICh0aGlzLmxlbiAtIHRoaXMucG9zID4gNCkgeyAvLyBmYXN0IHJvdXRlIChsbylcbiAgICAgICAgZm9yICg7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgICAgIC8vIDFzdC4uNHRoXG4gICAgICAgICAgICBiaXRzLmxvID0gKGJpdHMubG8gfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCBpICogNykgPj4+IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNXRoXG4gICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IDI4KSA+Pj4gMDtcbiAgICAgICAgYml0cy5oaSA9IChiaXRzLmhpIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPj4gIDQpID4+PiAwO1xuICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgaSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICg7IGkgPCAzOyArK2kpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMubGVuKVxuICAgICAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgICAgICAgIC8vIDFzdC4uM3RoXG4gICAgICAgICAgICBiaXRzLmxvID0gKGJpdHMubG8gfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCBpICogNykgPj4+IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNHRoXG4gICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSAmIDEyNykgPDwgaSAqIDcpID4+PiAwO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG4gICAgaWYgKHRoaXMubGVuIC0gdGhpcy5wb3MgPiA0KSB7IC8vIGZhc3Qgcm91dGUgKGhpKVxuICAgICAgICBmb3IgKDsgaSA8IDU7ICsraSkge1xuICAgICAgICAgICAgLy8gNnRoLi4xMHRoXG4gICAgICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCBpICogNyArIDMpID4+PiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICg7IGkgPCA1OyArK2kpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMubGVuKVxuICAgICAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgICAgICAgIC8vIDZ0aC4uMTB0aFxuICAgICAgICAgICAgYml0cy5oaSA9IChiaXRzLmhpIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgaSAqIDcgKyAzKSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93IEVycm9yKFwiaW52YWxpZCB2YXJpbnQgZW5jb2RpbmdcIik7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbm8taW52YWxpZC10aGlzICovXG5cbi8qKlxuICogUmVhZHMgYSB2YXJpbnQgYXMgYSBzaWduZWQgNjQgYml0IHZhbHVlLlxuICogQG5hbWUgUmVhZGVyI2ludDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhbiB1bnNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjdWludDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIHppZy16YWcgZW5jb2RlZCB2YXJpbnQgYXMgYSBzaWduZWQgNjQgYml0IHZhbHVlLlxuICogQG5hbWUgUmVhZGVyI3NpbnQ2NFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7TG9uZ30gVmFsdWUgcmVhZFxuICovXG5cbi8qKlxuICogUmVhZHMgYSB2YXJpbnQgYXMgYSBib29sZWFuLlxuICogQHJldHVybnMge2Jvb2xlYW59IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5ib29sID0gZnVuY3Rpb24gcmVhZF9ib29sKCkge1xuICAgIHJldHVybiB0aGlzLnVpbnQzMigpICE9PSAwO1xufTtcblxuZnVuY3Rpb24gcmVhZEZpeGVkMzJfZW5kKGJ1ZiwgZW5kKSB7IC8vIG5vdGUgdGhhdCB0aGlzIHVzZXMgYGVuZGAsIG5vdCBgcG9zYFxuICAgIHJldHVybiAoYnVmW2VuZCAtIDRdXG4gICAgICAgICAgfCBidWZbZW5kIC0gM10gPDwgOFxuICAgICAgICAgIHwgYnVmW2VuZCAtIDJdIDw8IDE2XG4gICAgICAgICAgfCBidWZbZW5kIC0gMV0gPDwgMjQpID4+PiAwO1xufVxuXG4vKipcbiAqIFJlYWRzIGZpeGVkIDMyIGJpdHMgYXMgYW4gdW5zaWduZWQgMzIgYml0IGludGVnZXIuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZml4ZWQzMiA9IGZ1bmN0aW9uIHJlYWRfZml4ZWQzMigpIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDQpO1xuXG4gICAgcmV0dXJuIHJlYWRGaXhlZDMyX2VuZCh0aGlzLmJ1ZiwgdGhpcy5wb3MgKz0gNCk7XG59O1xuXG4vKipcbiAqIFJlYWRzIGZpeGVkIDMyIGJpdHMgYXMgYSBzaWduZWQgMzIgYml0IGludGVnZXIuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuc2ZpeGVkMzIgPSBmdW5jdGlvbiByZWFkX3NmaXhlZDMyKCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICByZXR1cm4gcmVhZEZpeGVkMzJfZW5kKHRoaXMuYnVmLCB0aGlzLnBvcyArPSA0KSB8IDA7XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuZnVuY3Rpb24gcmVhZEZpeGVkNjQoLyogdGhpczogUmVhZGVyICovKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA4ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA4KTtcblxuICAgIHJldHVybiBuZXcgTG9uZ0JpdHMocmVhZEZpeGVkMzJfZW5kKHRoaXMuYnVmLCB0aGlzLnBvcyArPSA0KSwgcmVhZEZpeGVkMzJfZW5kKHRoaXMuYnVmLCB0aGlzLnBvcyArPSA0KSk7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbm8taW52YWxpZC10aGlzICovXG5cbi8qKlxuICogUmVhZHMgZml4ZWQgNjQgYml0cy5cbiAqIEBuYW1lIFJlYWRlciNmaXhlZDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyB6aWctemFnIGVuY29kZWQgZml4ZWQgNjQgYml0cy5cbiAqIEBuYW1lIFJlYWRlciNzZml4ZWQ2NFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7TG9uZ30gVmFsdWUgcmVhZFxuICovXG5cbi8qKlxuICogUmVhZHMgYSBmbG9hdCAoMzIgYml0KSBhcyBhIG51bWJlci5cbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmZsb2F0ID0gZnVuY3Rpb24gcmVhZF9mbG9hdCgpIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDQpO1xuXG4gICAgdmFyIHZhbHVlID0gdXRpbC5mbG9hdC5yZWFkRmxvYXRMRSh0aGlzLmJ1ZiwgdGhpcy5wb3MpO1xuICAgIHRoaXMucG9zICs9IDQ7XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIGRvdWJsZSAoNjQgYml0IGZsb2F0KSBhcyBhIG51bWJlci5cbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmRvdWJsZSA9IGZ1bmN0aW9uIHJlYWRfZG91YmxlKCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgOCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICB2YXIgdmFsdWUgPSB1dGlsLmZsb2F0LnJlYWREb3VibGVMRSh0aGlzLmJ1ZiwgdGhpcy5wb3MpO1xuICAgIHRoaXMucG9zICs9IDg7XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHNlcXVlbmNlIG9mIGJ5dGVzIHByZWNlZWRlZCBieSBpdHMgbGVuZ3RoIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5ieXRlcyA9IGZ1bmN0aW9uIHJlYWRfYnl0ZXMoKSB7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMudWludDMyKCksXG4gICAgICAgIHN0YXJ0ICA9IHRoaXMucG9zLFxuICAgICAgICBlbmQgICAgPSB0aGlzLnBvcyArIGxlbmd0aDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlbmQgPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIGxlbmd0aCk7XG5cbiAgICB0aGlzLnBvcyArPSBsZW5ndGg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5idWYpKSAvLyBwbGFpbiBhcnJheVxuICAgICAgICByZXR1cm4gdGhpcy5idWYuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgcmV0dXJuIHN0YXJ0ID09PSBlbmQgLy8gZml4IGZvciBJRSAxMC9XaW44IGFuZCBvdGhlcnMnIHN1YmFycmF5IHJldHVybmluZyBhcnJheSBvZiBzaXplIDFcbiAgICAgICAgPyBuZXcgdGhpcy5idWYuY29uc3RydWN0b3IoMClcbiAgICAgICAgOiB0aGlzLl9zbGljZS5jYWxsKHRoaXMuYnVmLCBzdGFydCwgZW5kKTtcbn07XG5cbi8qKlxuICogUmVhZHMgYSBzdHJpbmcgcHJlY2VlZGVkIGJ5IGl0cyBieXRlIGxlbmd0aCBhcyBhIHZhcmludC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiByZWFkX3N0cmluZygpIHtcbiAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzKCk7XG4gICAgcmV0dXJuIHV0ZjgucmVhZChieXRlcywgMCwgYnl0ZXMubGVuZ3RoKTtcbn07XG5cbi8qKlxuICogU2tpcHMgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMgaWYgc3BlY2lmaWVkLCBvdGhlcndpc2Ugc2tpcHMgYSB2YXJpbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTGVuZ3RoIGlmIGtub3duLCBvdGhlcndpc2UgYSB2YXJpbnQgaXMgYXNzdW1lZFxuICogQHJldHVybnMge1JlYWRlcn0gYHRoaXNgXG4gKi9cblJlYWRlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uIHNraXAobGVuZ3RoKSB7XG4gICAgaWYgKHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICh0aGlzLnBvcyArIGxlbmd0aCA+IHRoaXMubGVuKVxuICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIGxlbmd0aCk7XG4gICAgICAgIHRoaXMucG9zICs9IGxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmxlbilcbiAgICAgICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcyk7XG4gICAgICAgIH0gd2hpbGUgKHRoaXMuYnVmW3RoaXMucG9zKytdICYgMTI4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNraXBzIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCB3aXJlIHR5cGUuXG4gKiBAcGFyYW0ge251bWJlcn0gd2lyZVR5cGUgV2lyZSB0eXBlIHJlY2VpdmVkXG4gKiBAcmV0dXJucyB7UmVhZGVyfSBgdGhpc2BcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5za2lwVHlwZSA9IGZ1bmN0aW9uKHdpcmVUeXBlKSB7XG4gICAgc3dpdGNoICh3aXJlVHlwZSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICB0aGlzLnNraXAoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLnNraXAoOCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5za2lwKHRoaXMudWludDMyKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHdoaWxlICgod2lyZVR5cGUgPSB0aGlzLnVpbnQzMigpICYgNykgIT09IDQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNraXBUeXBlKHdpcmVUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB0aGlzLnNraXAoNCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJpbnZhbGlkIHdpcmUgdHlwZSBcIiArIHdpcmVUeXBlICsgXCIgYXQgb2Zmc2V0IFwiICsgdGhpcy5wb3MpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblJlYWRlci5fY29uZmlndXJlID0gZnVuY3Rpb24oQnVmZmVyUmVhZGVyXykge1xuICAgIEJ1ZmZlclJlYWRlciA9IEJ1ZmZlclJlYWRlcl87XG4gICAgUmVhZGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuICAgIEJ1ZmZlclJlYWRlci5fY29uZmlndXJlKCk7XG5cbiAgICB2YXIgZm4gPSB1dGlsLkxvbmcgPyBcInRvTG9uZ1wiIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gXCJ0b051bWJlclwiO1xuICAgIHV0aWwubWVyZ2UoUmVhZGVyLnByb3RvdHlwZSwge1xuXG4gICAgICAgIGludDY0OiBmdW5jdGlvbiByZWFkX2ludDY0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRMb25nVmFyaW50LmNhbGwodGhpcylbZm5dKGZhbHNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICB1aW50NjQ6IGZ1bmN0aW9uIHJlYWRfdWludDY0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRMb25nVmFyaW50LmNhbGwodGhpcylbZm5dKHRydWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNpbnQ2NDogZnVuY3Rpb24gcmVhZF9zaW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKS56ekRlY29kZSgpW2ZuXShmYWxzZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZml4ZWQ2NDogZnVuY3Rpb24gcmVhZF9maXhlZDY0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRGaXhlZDY0LmNhbGwodGhpcylbZm5dKHRydWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNmaXhlZDY0OiBmdW5jdGlvbiByZWFkX3NmaXhlZDY0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRGaXhlZDY0LmNhbGwodGhpcylbZm5dKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgfSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlclJlYWRlcjtcblxuLy8gZXh0ZW5kcyBSZWFkZXJcbnZhciBSZWFkZXIgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG4oQnVmZmVyUmVhZGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVhZGVyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gQnVmZmVyUmVhZGVyO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IGJ1ZmZlciByZWFkZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHJlYWRlciB1c2luZyBub2RlIGJ1ZmZlcnMuXG4gKiBAZXh0ZW5kcyBSZWFkZXJcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBCdWZmZXIgdG8gcmVhZCBmcm9tXG4gKi9cbmZ1bmN0aW9uIEJ1ZmZlclJlYWRlcihidWZmZXIpIHtcbiAgICBSZWFkZXIuY2FsbCh0aGlzLCBidWZmZXIpO1xuXG4gICAgLyoqXG4gICAgICogUmVhZCBidWZmZXIuXG4gICAgICogQG5hbWUgQnVmZmVyUmVhZGVyI2J1ZlxuICAgICAqIEB0eXBlIHtCdWZmZXJ9XG4gICAgICovXG59XG5cbkJ1ZmZlclJlYWRlci5fY29uZmlndXJlID0gZnVuY3Rpb24gKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHV0aWwuQnVmZmVyKVxuICAgICAgICBCdWZmZXJSZWFkZXIucHJvdG90eXBlLl9zbGljZSA9IHV0aWwuQnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbn07XG5cblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuQnVmZmVyUmVhZGVyLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiByZWFkX3N0cmluZ19idWZmZXIoKSB7XG4gICAgdmFyIGxlbiA9IHRoaXMudWludDMyKCk7IC8vIG1vZGlmaWVzIHBvc1xuICAgIHJldHVybiB0aGlzLmJ1Zi51dGY4U2xpY2VcbiAgICAgICAgPyB0aGlzLmJ1Zi51dGY4U2xpY2UodGhpcy5wb3MsIHRoaXMucG9zID0gTWF0aC5taW4odGhpcy5wb3MgKyBsZW4sIHRoaXMubGVuKSlcbiAgICAgICAgOiB0aGlzLmJ1Zi50b1N0cmluZyhcInV0Zi04XCIsIHRoaXMucG9zLCB0aGlzLnBvcyA9IE1hdGgubWluKHRoaXMucG9zICsgbGVuLCB0aGlzLmxlbikpO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHNlcXVlbmNlIG9mIGJ5dGVzIHByZWNlZWRlZCBieSBpdHMgbGVuZ3RoIGFzIGEgdmFyaW50LlxuICogQG5hbWUgQnVmZmVyUmVhZGVyI2J5dGVzXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFZhbHVlIHJlYWRcbiAqL1xuXG5CdWZmZXJSZWFkZXIuX2NvbmZpZ3VyZSgpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IFNlcnZpY2U7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4uL3V0aWwvbWluaW1hbFwiKTtcblxuLy8gRXh0ZW5kcyBFdmVudEVtaXR0ZXJcbihTZXJ2aWNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodXRpbC5FdmVudEVtaXR0ZXIucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBTZXJ2aWNlO1xuXG4vKipcbiAqIEEgc2VydmljZSBtZXRob2QgY2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgcnBjLlNlcnZpY2VNZXRob2R8U2VydmljZU1ldGhvZH0uXG4gKlxuICogRGlmZmVycyBmcm9tIHtAbGluayBSUENJbXBsQ2FsbGJhY2t9IGluIHRoYXQgaXQgaXMgYW4gYWN0dWFsIGNhbGxiYWNrIG9mIGEgc2VydmljZSBtZXRob2Qgd2hpY2ggbWF5IG5vdCByZXR1cm4gYHJlc3BvbnNlID0gbnVsbGAuXG4gKiBAdHlwZWRlZiBycGMuU2VydmljZU1ldGhvZENhbGxiYWNrXG4gKiBAdGVtcGxhdGUgVFJlcyBleHRlbmRzIE1lc3NhZ2U8VFJlcz5cbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueVxuICogQHBhcmFtIHtUUmVzfSBbcmVzcG9uc2VdIFJlc3BvbnNlIG1lc3NhZ2VcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cblxuLyoqXG4gKiBBIHNlcnZpY2UgbWV0aG9kIHBhcnQgb2YgYSB7QGxpbmsgcnBjLlNlcnZpY2V9IGFzIGNyZWF0ZWQgYnkge0BsaW5rIFNlcnZpY2UuY3JlYXRlfS5cbiAqIEB0eXBlZGVmIHJwYy5TZXJ2aWNlTWV0aG9kXG4gKiBAdGVtcGxhdGUgVFJlcSBleHRlbmRzIE1lc3NhZ2U8VFJlcT5cbiAqIEB0ZW1wbGF0ZSBUUmVzIGV4dGVuZHMgTWVzc2FnZTxUUmVzPlxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtUUmVxfFByb3BlcnRpZXM8VFJlcT59IHJlcXVlc3QgUmVxdWVzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdFxuICogQHBhcmFtIHtycGMuU2VydmljZU1ldGhvZENhbGxiYWNrPFRSZXM+fSBbY2FsbGJhY2tdIE5vZGUtc3R5bGUgY2FsbGJhY2sgY2FsbGVkIHdpdGggdGhlIGVycm9yLCBpZiBhbnksIGFuZCB0aGUgcmVzcG9uc2UgbWVzc2FnZVxuICogQHJldHVybnMge1Byb21pc2U8TWVzc2FnZTxUUmVzPj59IFByb21pc2UgaWYgYGNhbGxiYWNrYCBoYXMgYmVlbiBvbWl0dGVkLCBvdGhlcndpc2UgYHVuZGVmaW5lZGBcbiAqL1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgUlBDIHNlcnZpY2UgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIEFuIFJQQyBzZXJ2aWNlIGFzIHJldHVybmVkIGJ5IHtAbGluayBTZXJ2aWNlI2NyZWF0ZX0uXG4gKiBAZXhwb3J0cyBycGMuU2VydmljZVxuICogQGV4dGVuZHMgdXRpbC5FdmVudEVtaXR0ZXJcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtSUENJbXBsfSBycGNJbXBsIFJQQyBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcmVxdWVzdERlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXF1ZXN0cyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICogQHBhcmFtIHtib29sZWFufSBbcmVzcG9uc2VEZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVzcG9uc2VzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gKi9cbmZ1bmN0aW9uIFNlcnZpY2UocnBjSW1wbCwgcmVxdWVzdERlbGltaXRlZCwgcmVzcG9uc2VEZWxpbWl0ZWQpIHtcblxuICAgIGlmICh0eXBlb2YgcnBjSW1wbCAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJycGNJbXBsIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcblxuICAgIHV0aWwuRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAvKipcbiAgICAgKiBSUEMgaW1wbGVtZW50YXRpb24uIEJlY29tZXMgYG51bGxgIG9uY2UgdGhlIHNlcnZpY2UgaXMgZW5kZWQuXG4gICAgICogQHR5cGUge1JQQ0ltcGx8bnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLnJwY0ltcGwgPSBycGNJbXBsO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciByZXF1ZXN0cyBhcmUgbGVuZ3RoLWRlbGltaXRlZC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlcXVlc3REZWxpbWl0ZWQgPSBCb29sZWFuKHJlcXVlc3REZWxpbWl0ZWQpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciByZXNwb25zZXMgYXJlIGxlbmd0aC1kZWxpbWl0ZWQuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXNwb25zZURlbGltaXRlZCA9IEJvb2xlYW4ocmVzcG9uc2VEZWxpbWl0ZWQpO1xufVxuXG4vKipcbiAqIENhbGxzIGEgc2VydmljZSBtZXRob2QgdGhyb3VnaCB7QGxpbmsgcnBjLlNlcnZpY2UjcnBjSW1wbHxycGNJbXBsfS5cbiAqIEBwYXJhbSB7TWV0aG9kfHJwYy5TZXJ2aWNlTWV0aG9kPFRSZXEsVFJlcz59IG1ldGhvZCBSZWZsZWN0ZWQgb3Igc3RhdGljIG1ldGhvZFxuICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxUUmVxPn0gcmVxdWVzdEN0b3IgUmVxdWVzdCBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxUUmVzPn0gcmVzcG9uc2VDdG9yIFJlc3BvbnNlIGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1RSZXF8UHJvcGVydGllczxUUmVxPn0gcmVxdWVzdCBSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gKiBAcGFyYW0ge3JwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2s8VFJlcz59IGNhbGxiYWNrIFNlcnZpY2UgY2FsbGJhY2tcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAdGVtcGxhdGUgVFJlcSBleHRlbmRzIE1lc3NhZ2U8VFJlcT5cbiAqIEB0ZW1wbGF0ZSBUUmVzIGV4dGVuZHMgTWVzc2FnZTxUUmVzPlxuICovXG5TZXJ2aWNlLnByb3RvdHlwZS5ycGNDYWxsID0gZnVuY3Rpb24gcnBjQ2FsbChtZXRob2QsIHJlcXVlc3RDdG9yLCByZXNwb25zZUN0b3IsIHJlcXVlc3QsIGNhbGxiYWNrKSB7XG5cbiAgICBpZiAoIXJlcXVlc3QpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcInJlcXVlc3QgbXVzdCBiZSBzcGVjaWZpZWRcIik7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFjYWxsYmFjaylcbiAgICAgICAgcmV0dXJuIHV0aWwuYXNQcm9taXNlKHJwY0NhbGwsIHNlbGYsIG1ldGhvZCwgcmVxdWVzdEN0b3IsIHJlc3BvbnNlQ3RvciwgcmVxdWVzdCk7XG5cbiAgICBpZiAoIXNlbGYucnBjSW1wbCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhFcnJvcihcImFscmVhZHkgZW5kZWRcIikpOyB9LCAwKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gc2VsZi5ycGNJbXBsKFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgcmVxdWVzdEN0b3Jbc2VsZi5yZXF1ZXN0RGVsaW1pdGVkID8gXCJlbmNvZGVEZWxpbWl0ZWRcIiA6IFwiZW5jb2RlXCJdKHJlcXVlc3QpLmZpbmlzaCgpLFxuICAgICAgICAgICAgZnVuY3Rpb24gcnBjQ2FsbGJhY2soZXJyLCByZXNwb25zZSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnIsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmVuZCgvKiBlbmRlZEJ5UlBDICovIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghKHJlc3BvbnNlIGluc3RhbmNlb2YgcmVzcG9uc2VDdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZUN0b3Jbc2VsZi5yZXNwb25zZURlbGltaXRlZCA/IFwiZGVjb2RlRGVsaW1pdGVkXCIgOiBcImRlY29kZVwiXShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyLCBtZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWxmLmVtaXQoXCJkYXRhXCIsIHJlc3BvbnNlLCBtZXRob2QpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVyciwgbWV0aG9kKTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2soZXJyKTsgfSwgMCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcblxuLyoqXG4gKiBFbmRzIHRoaXMgc2VydmljZSBhbmQgZW1pdHMgdGhlIGBlbmRgIGV2ZW50LlxuICogQHBhcmFtIHtib29sZWFufSBbZW5kZWRCeVJQQz1mYWxzZV0gV2hldGhlciB0aGUgc2VydmljZSBoYXMgYmVlbiBlbmRlZCBieSB0aGUgUlBDIGltcGxlbWVudGF0aW9uLlxuICogQHJldHVybnMge3JwYy5TZXJ2aWNlfSBgdGhpc2BcbiAqL1xuU2VydmljZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gZW5kKGVuZGVkQnlSUEMpIHtcbiAgICBpZiAodGhpcy5ycGNJbXBsKSB7XG4gICAgICAgIGlmICghZW5kZWRCeVJQQykgLy8gc2lnbmFsIGVuZCB0byBycGNJbXBsXG4gICAgICAgICAgICB0aGlzLnJwY0ltcGwobnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgICAgIHRoaXMucnBjSW1wbCA9IG51bGw7XG4gICAgICAgIHRoaXMuZW1pdChcImVuZFwiKS5vZmYoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogU3RyZWFtaW5nIFJQQyBoZWxwZXJzLlxuICogQG5hbWVzcGFjZVxuICovXG52YXIgcnBjID0gZXhwb3J0cztcblxuLyoqXG4gKiBSUEMgaW1wbGVtZW50YXRpb24gcGFzc2VkIHRvIHtAbGluayBTZXJ2aWNlI2NyZWF0ZX0gcGVyZm9ybWluZyBhIHNlcnZpY2UgcmVxdWVzdCBvbiBuZXR3b3JrIGxldmVsLCBpLmUuIGJ5IHV0aWxpemluZyBodHRwIHJlcXVlc3RzIG9yIHdlYnNvY2tldHMuXG4gKiBAdHlwZWRlZiBSUENJbXBsXG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge01ldGhvZHxycGMuU2VydmljZU1ldGhvZDxNZXNzYWdlPHt9PixNZXNzYWdlPHt9Pj59IG1ldGhvZCBSZWZsZWN0ZWQgb3Igc3RhdGljIG1ldGhvZCBiZWluZyBjYWxsZWRcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gcmVxdWVzdERhdGEgUmVxdWVzdCBkYXRhXG4gKiBAcGFyYW0ge1JQQ0ltcGxDYWxsYmFja30gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiBAZXhhbXBsZVxuICogZnVuY3Rpb24gcnBjSW1wbChtZXRob2QsIHJlcXVlc3REYXRhLCBjYWxsYmFjaykge1xuICogICAgIGlmIChwcm90b2J1Zi51dGlsLmxjRmlyc3QobWV0aG9kLm5hbWUpICE9PSBcIm15TWV0aG9kXCIpIC8vIGNvbXBhdGlibGUgd2l0aCBzdGF0aWMgY29kZVxuICogICAgICAgICB0aHJvdyBFcnJvcihcIm5vIHN1Y2ggbWV0aG9kXCIpO1xuICogICAgIGFzeW5jaHJvbm91c2x5T2J0YWluQVJlc3BvbnNlKHJlcXVlc3REYXRhLCBmdW5jdGlvbihlcnIsIHJlc3BvbnNlRGF0YSkge1xuICogICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3BvbnNlRGF0YSk7XG4gKiAgICAgfSk7XG4gKiB9XG4gKi9cblxuLyoqXG4gKiBOb2RlLXN0eWxlIGNhbGxiYWNrIGFzIHVzZWQgYnkge0BsaW5rIFJQQ0ltcGx9LlxuICogQHR5cGVkZWYgUlBDSW1wbENhbGxiYWNrXG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge0Vycm9yfG51bGx9IGVycm9yIEVycm9yLCBpZiBhbnksIG90aGVyd2lzZSBgbnVsbGBcbiAqIEBwYXJhbSB7VWludDhBcnJheXxudWxsfSBbcmVzcG9uc2VdIFJlc3BvbnNlIGRhdGEgb3IgYG51bGxgIHRvIHNpZ25hbCBlbmQgb2Ygc3RyZWFtLCBpZiB0aGVyZSBoYXNuJ3QgYmVlbiBhbiBlcnJvclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuXG5ycGMuU2VydmljZSA9IHJlcXVpcmUoXCIuL3JwYy9zZXJ2aWNlXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vKipcbiAqIE5hbWVkIHJvb3RzLlxuICogVGhpcyBpcyB3aGVyZSBwYmpzIHN0b3JlcyBnZW5lcmF0ZWQgc3RydWN0dXJlcyAodGhlIG9wdGlvbiBgLXIsIC0tcm9vdGAgc3BlY2lmaWVzIGEgbmFtZSkuXG4gKiBDYW4gYWxzbyBiZSB1c2VkIG1hbnVhbGx5IHRvIG1ha2Ugcm9vdHMgYXZhaWxhYmxlIGFjY3Jvc3MgbW9kdWxlcy5cbiAqIEBuYW1lIHJvb3RzXG4gKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsUm9vdD59XG4gKiBAZXhhbXBsZVxuICogLy8gcGJqcyAtciBteXJvb3QgLW8gY29tcGlsZWQuanMgLi4uXG4gKlxuICogLy8gaW4gYW5vdGhlciBtb2R1bGU6XG4gKiByZXF1aXJlKFwiLi9jb21waWxlZC5qc1wiKTtcbiAqXG4gKiAvLyBpbiBhbnkgc3Vic2VxdWVudCBtb2R1bGU6XG4gKiB2YXIgcm9vdCA9IHByb3RvYnVmLnJvb3RzW1wibXlyb290XCJdO1xuICovXG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBwcm90b2J1ZiA9IGV4cG9ydHM7XG5cbi8qKlxuICogQnVpbGQgdHlwZSwgb25lIG9mIGBcImZ1bGxcImAsIGBcImxpZ2h0XCJgIG9yIGBcIm1pbmltYWxcImAuXG4gKiBAbmFtZSBidWlsZFxuICogQHR5cGUge3N0cmluZ31cbiAqIEBjb25zdFxuICovXG5wcm90b2J1Zi5idWlsZCA9IFwibWluaW1hbFwiO1xuXG4vLyBTZXJpYWxpemF0aW9uXG5wcm90b2J1Zi5Xcml0ZXIgICAgICAgPSByZXF1aXJlKFwiLi93cml0ZXJcIik7XG5wcm90b2J1Zi5CdWZmZXJXcml0ZXIgPSByZXF1aXJlKFwiLi93cml0ZXJfYnVmZmVyXCIpO1xucHJvdG9idWYuUmVhZGVyICAgICAgID0gcmVxdWlyZShcIi4vcmVhZGVyXCIpO1xucHJvdG9idWYuQnVmZmVyUmVhZGVyID0gcmVxdWlyZShcIi4vcmVhZGVyX2J1ZmZlclwiKTtcblxuLy8gVXRpbGl0eVxucHJvdG9idWYudXRpbCAgICAgICAgID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xucHJvdG9idWYucnBjICAgICAgICAgID0gcmVxdWlyZShcIi4vcnBjXCIpO1xucHJvdG9idWYucm9vdHMgICAgICAgID0gcmVxdWlyZShcIi4vcm9vdHNcIik7XG5wcm90b2J1Zi5jb25maWd1cmUgICAgPSBjb25maWd1cmU7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vKipcbiAqIFJlY29uZmlndXJlcyB0aGUgbGlicmFyeSBhY2NvcmRpbmcgdG8gdGhlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gY29uZmlndXJlKCkge1xuICAgIHByb3RvYnVmLnV0aWwuX2NvbmZpZ3VyZSgpO1xuICAgIHByb3RvYnVmLldyaXRlci5fY29uZmlndXJlKHByb3RvYnVmLkJ1ZmZlcldyaXRlcik7XG4gICAgcHJvdG9idWYuUmVhZGVyLl9jb25maWd1cmUocHJvdG9idWYuQnVmZmVyUmVhZGVyKTtcbn1cblxuLy8gU2V0IHVwIGJ1ZmZlciB1dGlsaXR5IGFjY29yZGluZyB0byB0aGUgZW52aXJvbm1lbnRcbmNvbmZpZ3VyZSgpO1xuIiwiLy8gbWluaW1hbCBsaWJyYXJ5IGVudHJ5IHBvaW50LlxuXG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vc3JjL2luZGV4LW1pbmltYWxcIik7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJBbmltYXRvciB7XG4gIHN0YXRlczogUEJBbmltYXRpb25TdGF0ZVtdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJBbmltYXRpb25TdGF0ZSB7XG4gIG5hbWU6IHN0cmluZ1xuICBjbGlwOiBzdHJpbmdcbiAgcGxheWluZz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wcyAqL1xuICB3ZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHNwZWVkPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgbG9vcD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgc2hvdWxkUmVzZXQ/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkFuaW1hdG9yKCk6IFBCQW5pbWF0b3Ige1xuICByZXR1cm4geyBzdGF0ZXM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBbmltYXRvciA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQW5pbWF0b3IsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5zdGF0ZXMpIHtcbiAgICAgIFBCQW5pbWF0aW9uU3RhdGUuZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkFuaW1hdG9yIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkFuaW1hdG9yKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5zdGF0ZXMucHVzaChQQkFuaW1hdGlvblN0YXRlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkFuaW1hdGlvblN0YXRlKCk6IFBCQW5pbWF0aW9uU3RhdGUge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICcnLFxuICAgIGNsaXA6ICcnLFxuICAgIHBsYXlpbmc6IHVuZGVmaW5lZCxcbiAgICB3ZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICBzcGVlZDogdW5kZWZpbmVkLFxuICAgIGxvb3A6IHVuZGVmaW5lZCxcbiAgICBzaG91bGRSZXNldDogdW5kZWZpbmVkXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBbmltYXRpb25TdGF0ZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQW5pbWF0aW9uU3RhdGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY2xpcCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLmNsaXApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBsYXlpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnBsYXlpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLndlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM3KS5mbG9hdChtZXNzYWdlLndlaWdodClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3BlZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0NSkuZmxvYXQobWVzc2FnZS5zcGVlZClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubG9vcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5ib29sKG1lc3NhZ2UubG9vcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hvdWxkUmVzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1NikuYm9vbChtZXNzYWdlLnNob3VsZFJlc2V0KVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJBbmltYXRpb25TdGF0ZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJBbmltYXRpb25TdGF0ZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmNsaXAgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5wbGF5aW5nID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLndlaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2Uuc3BlZWQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLmxvb3AgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hvdWxkUmVzZXQgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQW5pbWF0b3IgfSBmcm9tICcuL3BiL0FuaW1hdG9yLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNDJcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEFuaW1hdG9yU2NoZW1hOiBJU2NoZW1hPFBCQW5pbWF0b3I+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQW5pbWF0b3IsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkFuaW1hdG9yLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkFuaW1hdG9yIHtcbiAgICByZXR1cm4gUEJBbmltYXRvci5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQW5pbWF0b3Ige1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkFuaW1hdG9yLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJBdWRpb1NvdXJjZSB7XG4gIHBsYXlpbmc/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMGYgKi9cbiAgdm9sdW1lPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGxvb3A/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMGYgKi9cbiAgcGl0Y2g/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgYXVkaW9DbGlwVXJsOiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQXVkaW9Tb3VyY2UoKTogUEJBdWRpb1NvdXJjZSB7XG4gIHJldHVybiB7IHBsYXlpbmc6IHVuZGVmaW5lZCwgdm9sdW1lOiB1bmRlZmluZWQsIGxvb3A6IHVuZGVmaW5lZCwgcGl0Y2g6IHVuZGVmaW5lZCwgYXVkaW9DbGlwVXJsOiAnJyB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQXVkaW9Tb3VyY2UgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkF1ZGlvU291cmNlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucGxheWluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS5wbGF5aW5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52b2x1bWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS52b2x1bWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmxvb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLmxvb3ApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBpdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzcpLmZsb2F0KG1lc3NhZ2UucGl0Y2gpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmF1ZGlvQ2xpcFVybCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDIpLnN0cmluZyhtZXNzYWdlLmF1ZGlvQ2xpcFVybClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQXVkaW9Tb3VyY2Uge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQXVkaW9Tb3VyY2UoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnBsYXlpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2Uudm9sdW1lID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5sb29wID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnBpdGNoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5hdWRpb0NsaXBVcmwgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBdWRpb1NvdXJjZSB9IGZyb20gJy4vcGIvQXVkaW9Tb3VyY2UuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAyMFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQXVkaW9Tb3VyY2VTY2hlbWE6IElTY2hlbWE8UEJBdWRpb1NvdXJjZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBdWRpb1NvdXJjZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQXVkaW9Tb3VyY2UuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQXVkaW9Tb3VyY2Uge1xuICAgIHJldHVybiBQQkF1ZGlvU291cmNlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBdWRpb1NvdXJjZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQXVkaW9Tb3VyY2UuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gQXZhdGFyQW5jaG9yUG9pbnQge1xuICBQT1NJVElPTiA9IDAsXG4gIE5BTUVfVEFHID0gMSxcbiAgTEVGVF9IQU5EID0gMixcbiAgUklHSFRfSEFORCA9IDMsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJBdmF0YXJBdHRhY2gge1xuICBhdmF0YXJJZDogc3RyaW5nXG4gIGFuY2hvclBvaW50SWQ6IEF2YXRhckFuY2hvclBvaW50XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkF2YXRhckF0dGFjaCgpOiBQQkF2YXRhckF0dGFjaCB7XG4gIHJldHVybiB7IGF2YXRhcklkOiAnJywgYW5jaG9yUG9pbnRJZDogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQXZhdGFyQXR0YWNoID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBdmF0YXJBdHRhY2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5hdmF0YXJJZCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmF2YXRhcklkKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbmNob3JQb2ludElkICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLmFuY2hvclBvaW50SWQpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkF2YXRhckF0dGFjaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJBdmF0YXJBdHRhY2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmF2YXRhcklkID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuYW5jaG9yUG9pbnRJZCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF2YXRhckF0dGFjaCB9IGZyb20gJy4vcGIvQXZhdGFyQXR0YWNoLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzNcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhckF0dGFjaFNjaGVtYTogSVNjaGVtYTxQQkF2YXRhckF0dGFjaD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBdmF0YXJBdHRhY2gsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkF2YXRhckF0dGFjaC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdmF0YXJBdHRhY2gge1xuICAgIHJldHVybiBQQkF2YXRhckF0dGFjaC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQXZhdGFyQXR0YWNoIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdmF0YXJBdHRhY2guZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBWZWN0b3IzIHtcbiAgeDogbnVtYmVyXG4gIHk6IG51bWJlclxuICB6OiBudW1iZXJcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVZlY3RvcjMoKTogVmVjdG9yMyB7XG4gIHJldHVybiB7IHg6IDAsIHk6IDAsIHo6IDAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBWZWN0b3IzID0ge1xuICBlbmNvZGUobWVzc2FnZTogVmVjdG9yMywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UueClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UueSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS55KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS56ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI5KS5mbG9hdChtZXNzYWdlLnopXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBWZWN0b3IzIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VWZWN0b3IzKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS54ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS55ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS56ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gQXZhdGFyTW9kaWZpZXIge1xuICBISURFX0FWQVRBUlMgPSAwLFxuICBESVNBQkxFX1BBU1NQT1JUUyA9IDEsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJBdmF0YXJNb2RpZmllckFyZWEge1xuICBhcmVhOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGV4Y2x1ZGVJZHM6IHN0cmluZ1tdXG4gIG1vZGlmaWVyczogQXZhdGFyTW9kaWZpZXJbXVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBdmF0YXJNb2RpZmllckFyZWEoKTogUEJBdmF0YXJNb2RpZmllckFyZWEge1xuICByZXR1cm4geyBhcmVhOiB1bmRlZmluZWQsIGV4Y2x1ZGVJZHM6IFtdLCBtb2RpZmllcnM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdmF0YXJNb2RpZmllckFyZWEgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkF2YXRhck1vZGlmaWVyQXJlYSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmFyZWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5hcmVhLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmV4Y2x1ZGVJZHMpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyh2ISlcbiAgICB9XG4gICAgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpXG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubW9kaWZpZXJzKSB7XG4gICAgICB3cml0ZXIuaW50MzIodilcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpXG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQXZhdGFyTW9kaWZpZXJBcmVhIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF2YXRhck1vZGlmaWVyQXJlYSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYXJlYSA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmV4Y2x1ZGVJZHMucHVzaChyZWFkZXIuc3RyaW5nKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS5tb2RpZmllcnMucHVzaChyZWFkZXIuaW50MzIoKSBhcyBhbnkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UubW9kaWZpZXJzLnB1c2gocmVhZGVyLmludDMyKCkgYXMgYW55KVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBdmF0YXJNb2RpZmllckFyZWEgfSBmcm9tICcuL3BiL0F2YXRhck1vZGlmaWVyQXJlYS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDcwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBdmF0YXJNb2RpZmllckFyZWFTY2hlbWE6IElTY2hlbWE8UEJBdmF0YXJNb2RpZmllckFyZWE+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQXZhdGFyTW9kaWZpZXJBcmVhLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJBdmF0YXJNb2RpZmllckFyZWEuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQXZhdGFyTW9kaWZpZXJBcmVhIHtcbiAgICByZXR1cm4gUEJBdmF0YXJNb2RpZmllckFyZWEuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkF2YXRhck1vZGlmaWVyQXJlYSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQXZhdGFyTW9kaWZpZXJBcmVhLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IExvbmc7XHJcblxyXG4vKipcclxuICogd2FzbSBvcHRpbWl6YXRpb25zLCB0byBkbyBuYXRpdmUgaTY0IG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpZGVcclxuICovXHJcbnZhciB3YXNtID0gbnVsbDtcclxuXHJcbnRyeSB7XHJcbiAgd2FzbSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKG5ldyBVaW50OEFycmF5KFtcclxuICAgIDAsIDk3LCAxMTUsIDEwOSwgMSwgMCwgMCwgMCwgMSwgMTMsIDIsIDk2LCAwLCAxLCAxMjcsIDk2LCA0LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEsIDEyNywgMywgNywgNiwgMCwgMSwgMSwgMSwgMSwgMSwgNiwgNiwgMSwgMTI3LCAxLCA2NSwgMCwgMTEsIDcsIDUwLCA2LCAzLCAxMDksIDExNywgMTA4LCAwLCAxLCA1LCAxMDAsIDEwNSwgMTE4LCA5NSwgMTE1LCAwLCAyLCA1LCAxMDAsIDEwNSwgMTE4LCA5NSwgMTE3LCAwLCAzLCA1LCAxMTQsIDEwMSwgMTA5LCA5NSwgMTE1LCAwLCA0LCA1LCAxMTQsIDEwMSwgMTA5LCA5NSwgMTE3LCAwLCA1LCA4LCAxMDMsIDEwMSwgMTE2LCA5NSwgMTA0LCAxMDUsIDEwMywgMTA0LCAwLCAwLCAxMCwgMTkxLCAxLCA2LCA0LCAwLCAzNSwgMCwgMTEsIDM2LCAxLCAxLCAxMjYsIDMyLCAwLCAxNzMsIDMyLCAxLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDMyLCAyLCAxNzMsIDMyLCAzLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDEyNiwgMzQsIDQsIDY2LCAzMiwgMTM1LCAxNjcsIDM2LCAwLCAzMiwgNCwgMTY3LCAxMSwgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MywgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTI3LCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsIDMyLCA0LCAxNjcsIDExLCAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLCAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMjgsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCwgMzIsIDQsIDE2NywgMTEsIDM2LCAxLCAxLCAxMjYsIDMyLCAwLCAxNzMsIDMyLCAxLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDMyLCAyLCAxNzMsIDMyLCAzLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDEyOSwgMzQsIDQsIDY2LCAzMiwgMTM1LCAxNjcsIDM2LCAwLCAzMiwgNCwgMTY3LCAxMSwgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MywgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTMwLCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsIDMyLCA0LCAxNjcsIDExXHJcbiAgXSkpLCB7fSkuZXhwb3J0cztcclxufSBjYXRjaCAoZSkge1xyXG4gIC8vIG5vIHdhc20gc3VwcG9ydCA6KFxyXG59XHJcblxyXG4vKipcclxuICogQ29uc3RydWN0cyBhIDY0IGJpdCB0d28ncy1jb21wbGVtZW50IGludGVnZXIsIGdpdmVuIGl0cyBsb3cgYW5kIGhpZ2ggMzIgYml0IHZhbHVlcyBhcyAqc2lnbmVkKiBpbnRlZ2Vycy5cclxuICogIFNlZSB0aGUgZnJvbSogZnVuY3Rpb25zIGJlbG93IGZvciBtb3JlIGNvbnZlbmllbnQgd2F5cyBvZiBjb25zdHJ1Y3RpbmcgTG9uZ3MuXHJcbiAqIEBleHBvcnRzIExvbmdcclxuICogQGNsYXNzIEEgTG9uZyBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIGEgNjQgYml0IHR3bydzLWNvbXBsZW1lbnQgaW50ZWdlciB2YWx1ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IGxvdyBUaGUgbG93IChzaWduZWQpIDMyIGJpdHMgb2YgdGhlIGxvbmdcclxuICogQHBhcmFtIHtudW1iZXJ9IGhpZ2ggVGhlIGhpZ2ggKHNpZ25lZCkgMzIgYml0cyBvZiB0aGUgbG9uZ1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gTG9uZyhsb3csIGhpZ2gsIHVuc2lnbmVkKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbG93IDMyIGJpdHMgYXMgYSBzaWduZWQgdmFsdWUuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmxvdyA9IGxvdyB8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaGlnaCAzMiBiaXRzIGFzIGEgc2lnbmVkIHZhbHVlLlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5oaWdoID0gaGlnaCB8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdC5cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICB0aGlzLnVuc2lnbmVkID0gISF1bnNpZ25lZDtcclxufVxyXG5cclxuLy8gVGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGEgbG9uZyBpcyB0aGUgdHdvIGdpdmVuIHNpZ25lZCwgMzItYml0IHZhbHVlcy5cclxuLy8gV2UgdXNlIDMyLWJpdCBwaWVjZXMgYmVjYXVzZSB0aGVzZSBhcmUgdGhlIHNpemUgb2YgaW50ZWdlcnMgb24gd2hpY2hcclxuLy8gSmF2YXNjcmlwdCBwZXJmb3JtcyBiaXQtb3BlcmF0aW9ucy4gIEZvciBvcGVyYXRpb25zIGxpa2UgYWRkaXRpb24gYW5kXHJcbi8vIG11bHRpcGxpY2F0aW9uLCB3ZSBzcGxpdCBlYWNoIG51bWJlciBpbnRvIDE2IGJpdCBwaWVjZXMsIHdoaWNoIGNhbiBlYXNpbHkgYmVcclxuLy8gbXVsdGlwbGllZCB3aXRoaW4gSmF2YXNjcmlwdCdzIGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIHdpdGhvdXQgb3ZlcmZsb3dcclxuLy8gb3IgY2hhbmdlIGluIHNpZ24uXHJcbi8vXHJcbi8vIEluIHRoZSBhbGdvcml0aG1zIGJlbG93LCB3ZSBmcmVxdWVudGx5IHJlZHVjZSB0aGUgbmVnYXRpdmUgY2FzZSB0byB0aGVcclxuLy8gcG9zaXRpdmUgY2FzZSBieSBuZWdhdGluZyB0aGUgaW5wdXQocykgYW5kIHRoZW4gcG9zdC1wcm9jZXNzaW5nIHRoZSByZXN1bHQuXHJcbi8vIE5vdGUgdGhhdCB3ZSBtdXN0IEFMV0FZUyBjaGVjayBzcGVjaWFsbHkgd2hldGhlciB0aG9zZSB2YWx1ZXMgYXJlIE1JTl9WQUxVRVxyXG4vLyAoLTJeNjMpIGJlY2F1c2UgLU1JTl9WQUxVRSA9PSBNSU5fVkFMVUUgKHNpbmNlIDJeNjMgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzXHJcbi8vIGEgcG9zaXRpdmUgbnVtYmVyLCBpdCBvdmVyZmxvd3MgYmFjayBpbnRvIGEgbmVnYXRpdmUpLiAgTm90IGhhbmRsaW5nIHRoaXNcclxuLy8gY2FzZSB3b3VsZCBvZnRlbiByZXN1bHQgaW4gaW5maW5pdGUgcmVjdXJzaW9uLlxyXG4vL1xyXG4vLyBDb21tb24gY29uc3RhbnQgdmFsdWVzIFpFUk8sIE9ORSwgTkVHX09ORSwgZXRjLiBhcmUgZGVmaW5lZCBiZWxvdyB0aGUgZnJvbSpcclxuLy8gbWV0aG9kcyBvbiB3aGljaCB0aGV5IGRlcGVuZC5cclxuXHJcbi8qKlxyXG4gKiBBbiBpbmRpY2F0b3IgdXNlZCB0byByZWxpYWJseSBkZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgTG9uZyBvciBub3QuXHJcbiAqIEB0eXBlIHtib29sZWFufVxyXG4gKiBAY29uc3RcclxuICogQHByaXZhdGVcclxuICovXHJcbkxvbmcucHJvdG90eXBlLl9faXNMb25nX187XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTG9uZy5wcm90b3R5cGUsIFwiX19pc0xvbmdfX1wiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyp9IG9iaiBPYmplY3RcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gaXNMb25nKG9iaikge1xyXG4gICAgcmV0dXJuIChvYmogJiYgb2JqW1wiX19pc0xvbmdfX1wiXSkgPT09IHRydWU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIG9iamVjdCBpcyBhIExvbmcuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyp9IG9iaiBPYmplY3RcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nLmlzTG9uZyA9IGlzTG9uZztcclxuXHJcbi8qKlxyXG4gKiBBIGNhY2hlIG9mIHRoZSBMb25nIHJlcHJlc2VudGF0aW9ucyBvZiBzbWFsbCBpbnRlZ2VyIHZhbHVlcy5cclxuICogQHR5cGUgeyFPYmplY3R9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIElOVF9DQUNIRSA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIEEgY2FjaGUgb2YgdGhlIExvbmcgcmVwcmVzZW50YXRpb25zIG9mIHNtYWxsIHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLlxyXG4gKiBAdHlwZSB7IU9iamVjdH1cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVUlOVF9DQUNIRSA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gZnJvbUludCh2YWx1ZSwgdW5zaWduZWQpIHtcclxuICAgIHZhciBvYmosIGNhY2hlZE9iaiwgY2FjaGU7XHJcbiAgICBpZiAodW5zaWduZWQpIHtcclxuICAgICAgICB2YWx1ZSA+Pj49IDA7XHJcbiAgICAgICAgaWYgKGNhY2hlID0gKDAgPD0gdmFsdWUgJiYgdmFsdWUgPCAyNTYpKSB7XHJcbiAgICAgICAgICAgIGNhY2hlZE9iaiA9IFVJTlRfQ0FDSEVbdmFsdWVdO1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVkT2JqKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZE9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgb2JqID0gZnJvbUJpdHModmFsdWUsICh2YWx1ZSB8IDApIDwgMCA/IC0xIDogMCwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKGNhY2hlKVxyXG4gICAgICAgICAgICBVSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajtcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YWx1ZSB8PSAwO1xyXG4gICAgICAgIGlmIChjYWNoZSA9ICgtMTI4IDw9IHZhbHVlICYmIHZhbHVlIDwgMTI4KSkge1xyXG4gICAgICAgICAgICBjYWNoZWRPYmogPSBJTlRfQ0FDSEVbdmFsdWVdO1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVkT2JqKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZE9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgb2JqID0gZnJvbUJpdHModmFsdWUsIHZhbHVlIDwgMCA/IC0xIDogMCwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChjYWNoZSlcclxuICAgICAgICAgICAgSU5UX0NBQ0hFW3ZhbHVlXSA9IG9iajtcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIExvbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiAzMiBiaXQgaW50ZWdlciB2YWx1ZS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgMzIgYml0IGludGVnZXIgaW4gcXVlc3Rpb25cclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcclxuICovXHJcbkxvbmcuZnJvbUludCA9IGZyb21JbnQ7XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBmcm9tTnVtYmVyKHZhbHVlLCB1bnNpZ25lZCkge1xyXG4gICAgaWYgKGlzTmFOKHZhbHVlKSlcclxuICAgICAgICByZXR1cm4gdW5zaWduZWQgPyBVWkVSTyA6IFpFUk87XHJcbiAgICBpZiAodW5zaWduZWQpIHtcclxuICAgICAgICBpZiAodmFsdWUgPCAwKVxyXG4gICAgICAgICAgICByZXR1cm4gVVpFUk87XHJcbiAgICAgICAgaWYgKHZhbHVlID49IFRXT19QV1JfNjRfREJMKVxyXG4gICAgICAgICAgICByZXR1cm4gTUFYX1VOU0lHTkVEX1ZBTFVFO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodmFsdWUgPD0gLVRXT19QV1JfNjNfREJMKVxyXG4gICAgICAgICAgICByZXR1cm4gTUlOX1ZBTFVFO1xyXG4gICAgICAgIGlmICh2YWx1ZSArIDEgPj0gVFdPX1BXUl82M19EQkwpXHJcbiAgICAgICAgICAgIHJldHVybiBNQVhfVkFMVUU7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPCAwKVxyXG4gICAgICAgIHJldHVybiBmcm9tTnVtYmVyKC12YWx1ZSwgdW5zaWduZWQpLm5lZygpO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKCh2YWx1ZSAlIFRXT19QV1JfMzJfREJMKSB8IDAsICh2YWx1ZSAvIFRXT19QV1JfMzJfREJMKSB8IDAsIHVuc2lnbmVkKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBMb25nIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gdmFsdWUsIHByb3ZpZGVkIHRoYXQgaXQgaXMgYSBmaW5pdGUgbnVtYmVyLiBPdGhlcndpc2UsIHplcm8gaXMgcmV0dXJuZWQuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIG51bWJlciBpbiBxdWVzdGlvblxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tTnVtYmVyID0gZnJvbU51bWJlcjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG93Qml0c1xyXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaEJpdHNcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGZyb21CaXRzKGxvd0JpdHMsIGhpZ2hCaXRzLCB1bnNpZ25lZCkge1xyXG4gICAgcmV0dXJuIG5ldyBMb25nKGxvd0JpdHMsIGhpZ2hCaXRzLCB1bnNpZ25lZCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgTG9uZyByZXByZXNlbnRpbmcgdGhlIDY0IGJpdCBpbnRlZ2VyIHRoYXQgY29tZXMgYnkgY29uY2F0ZW5hdGluZyB0aGUgZ2l2ZW4gbG93IGFuZCBoaWdoIGJpdHMuIEVhY2ggaXNcclxuICogIGFzc3VtZWQgdG8gdXNlIDMyIGJpdHMuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG93Qml0cyBUaGUgbG93IDMyIGJpdHNcclxuICogQHBhcmFtIHtudW1iZXJ9IGhpZ2hCaXRzIFRoZSBoaWdoIDMyIGJpdHNcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcclxuICovXHJcbkxvbmcuZnJvbUJpdHMgPSBmcm9tQml0cztcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IGJhc2VcclxuICogQHBhcmFtIHtudW1iZXJ9IGV4cG9uZW50XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIHBvd19kYmwgPSBNYXRoLnBvdzsgLy8gVXNlZCA0IHRpbWVzICg0KjggdG8gMTUrNClcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXHJcbiAqIEBwYXJhbSB7KGJvb2xlYW58bnVtYmVyKT19IHVuc2lnbmVkXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcmFkaXhcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGZyb21TdHJpbmcoc3RyLCB1bnNpZ25lZCwgcmFkaXgpIHtcclxuICAgIGlmIChzdHIubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHRocm93IEVycm9yKCdlbXB0eSBzdHJpbmcnKTtcclxuICAgIGlmIChzdHIgPT09IFwiTmFOXCIgfHwgc3RyID09PSBcIkluZmluaXR5XCIgfHwgc3RyID09PSBcIitJbmZpbml0eVwiIHx8IHN0ciA9PT0gXCItSW5maW5pdHlcIilcclxuICAgICAgICByZXR1cm4gWkVSTztcclxuICAgIGlmICh0eXBlb2YgdW5zaWduZWQgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgLy8gRm9yIGdvb2cubWF0aC5sb25nIGNvbXBhdGliaWxpdHlcclxuICAgICAgICByYWRpeCA9IHVuc2lnbmVkLFxyXG4gICAgICAgIHVuc2lnbmVkID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVuc2lnbmVkID0gISEgdW5zaWduZWQ7XHJcbiAgICB9XHJcbiAgICByYWRpeCA9IHJhZGl4IHx8IDEwO1xyXG4gICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KVxyXG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoJ3JhZGl4Jyk7XHJcblxyXG4gICAgdmFyIHA7XHJcbiAgICBpZiAoKHAgPSBzdHIuaW5kZXhPZignLScpKSA+IDApXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ2ludGVyaW9yIGh5cGhlbicpO1xyXG4gICAgZWxzZSBpZiAocCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmcm9tU3RyaW5nKHN0ci5zdWJzdHJpbmcoMSksIHVuc2lnbmVkLCByYWRpeCkubmVnKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRG8gc2V2ZXJhbCAoOCkgZGlnaXRzIGVhY2ggdGltZSB0aHJvdWdoIHRoZSBsb29wLCBzbyBhcyB0b1xyXG4gICAgLy8gbWluaW1pemUgdGhlIGNhbGxzIHRvIHRoZSB2ZXJ5IGV4cGVuc2l2ZSBlbXVsYXRlZCBkaXYuXHJcbiAgICB2YXIgcmFkaXhUb1Bvd2VyID0gZnJvbU51bWJlcihwb3dfZGJsKHJhZGl4LCA4KSk7XHJcblxyXG4gICAgdmFyIHJlc3VsdCA9IFpFUk87XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gOCkge1xyXG4gICAgICAgIHZhciBzaXplID0gTWF0aC5taW4oOCwgc3RyLmxlbmd0aCAtIGkpLFxyXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHN0ci5zdWJzdHJpbmcoaSwgaSArIHNpemUpLCByYWRpeCk7XHJcbiAgICAgICAgaWYgKHNpemUgPCA4KSB7XHJcbiAgICAgICAgICAgIHZhciBwb3dlciA9IGZyb21OdW1iZXIocG93X2RibChyYWRpeCwgc2l6ZSkpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubXVsKHBvd2VyKS5hZGQoZnJvbU51bWJlcih2YWx1ZSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWwocmFkaXhUb1Bvd2VyKTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmFkZChmcm9tTnVtYmVyKHZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzdWx0LnVuc2lnbmVkID0gdW5zaWduZWQ7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIExvbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHN0cmluZywgd3JpdHRlbiB1c2luZyB0aGUgc3BlY2lmaWVkIHJhZGl4LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUaGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgTG9uZ1xyXG4gKiBAcGFyYW0geyhib29sZWFufG51bWJlcik9fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcmFkaXggVGhlIHJhZGl4IGluIHdoaWNoIHRoZSB0ZXh0IGlzIHdyaXR0ZW4gKDItMzYpLCBkZWZhdWx0cyB0byAxMFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcclxuICovXHJcbkxvbmcuZnJvbVN0cmluZyA9IGZyb21TdHJpbmc7XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ3whe2xvdzogbnVtYmVyLCBoaWdoOiBudW1iZXIsIHVuc2lnbmVkOiBib29sZWFufX0gdmFsXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBmcm9tVmFsdWUodmFsLCB1bnNpZ25lZCkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKVxyXG4gICAgICAgIHJldHVybiBmcm9tTnVtYmVyKHZhbCwgdW5zaWduZWQpO1xyXG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbCwgdW5zaWduZWQpO1xyXG4gICAgLy8gVGhyb3dzIGZvciBub24tb2JqZWN0cywgY29udmVydHMgbm9uLWluc3RhbmNlb2YgTG9uZzpcclxuICAgIHJldHVybiBmcm9tQml0cyh2YWwubG93LCB2YWwuaGlnaCwgdHlwZW9mIHVuc2lnbmVkID09PSAnYm9vbGVhbicgPyB1bnNpZ25lZCA6IHZhbC51bnNpZ25lZCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHZhbHVlIHRvIGEgTG9uZyB1c2luZyB0aGUgYXBwcm9wcmlhdGUgZnJvbSogZnVuY3Rpb24gZm9yIGl0cyB0eXBlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfCF7bG93OiBudW1iZXIsIGhpZ2g6IG51bWJlciwgdW5zaWduZWQ6IGJvb2xlYW59fSB2YWwgVmFsdWVcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLmZyb21WYWx1ZSA9IGZyb21WYWx1ZTtcclxuXHJcbi8vIE5PVEU6IHRoZSBjb21waWxlciBzaG91bGQgaW5saW5lIHRoZXNlIGNvbnN0YW50IHZhbHVlcyBiZWxvdyBhbmQgdGhlbiByZW1vdmUgdGhlc2UgdmFyaWFibGVzLCBzbyB0aGVyZSBzaG91bGQgYmVcclxuLy8gbm8gcnVudGltZSBwZW5hbHR5IGZvciB0aGVzZS5cclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAY29uc3RcclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVFdPX1BXUl8xNl9EQkwgPSAxIDw8IDE2O1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzI0X0RCTCA9IDEgPDwgMjQ7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfMzJfREJMID0gVFdPX1BXUl8xNl9EQkwgKiBUV09fUFdSXzE2X0RCTDtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAY29uc3RcclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVFdPX1BXUl82NF9EQkwgPSBUV09fUFdSXzMyX0RCTCAqIFRXT19QV1JfMzJfREJMO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzYzX0RCTCA9IFRXT19QV1JfNjRfREJMIC8gMjtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzI0ID0gZnJvbUludChUV09fUFdSXzI0X0RCTCk7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBaRVJPID0gZnJvbUludCgwKTtcclxuXHJcbi8qKlxyXG4gKiBTaWduZWQgemVyby5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5aRVJPID0gWkVSTztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFVaRVJPID0gZnJvbUludCgwLCB0cnVlKTtcclxuXHJcbi8qKlxyXG4gKiBVbnNpZ25lZCB6ZXJvLlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLlVaRVJPID0gVVpFUk87XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBPTkUgPSBmcm9tSW50KDEpO1xyXG5cclxuLyoqXHJcbiAqIFNpZ25lZCBvbmUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuT05FID0gT05FO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVU9ORSA9IGZyb21JbnQoMSwgdHJ1ZSk7XHJcblxyXG4vKipcclxuICogVW5zaWduZWQgb25lLlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLlVPTkUgPSBVT05FO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgTkVHX09ORSA9IGZyb21JbnQoLTEpO1xyXG5cclxuLyoqXHJcbiAqIFNpZ25lZCBuZWdhdGl2ZSBvbmUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTkVHX09ORSA9IE5FR19PTkU7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBNQVhfVkFMVUUgPSBmcm9tQml0cygweEZGRkZGRkZGfDAsIDB4N0ZGRkZGRkZ8MCwgZmFsc2UpO1xyXG5cclxuLyoqXHJcbiAqIE1heGltdW0gc2lnbmVkIHZhbHVlLlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLk1BWF9WQUxVRSA9IE1BWF9WQUxVRTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIE1BWF9VTlNJR05FRF9WQUxVRSA9IGZyb21CaXRzKDB4RkZGRkZGRkZ8MCwgMHhGRkZGRkZGRnwwLCB0cnVlKTtcclxuXHJcbi8qKlxyXG4gKiBNYXhpbXVtIHVuc2lnbmVkIHZhbHVlLlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLk1BWF9VTlNJR05FRF9WQUxVRSA9IE1BWF9VTlNJR05FRF9WQUxVRTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIE1JTl9WQUxVRSA9IGZyb21CaXRzKDAsIDB4ODAwMDAwMDB8MCwgZmFsc2UpO1xyXG5cclxuLyoqXHJcbiAqIE1pbmltdW0gc2lnbmVkIHZhbHVlLlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLk1JTl9WQUxVRSA9IE1JTl9WQUxVRTtcclxuXHJcbi8qKlxyXG4gKiBAYWxpYXMgTG9uZy5wcm90b3R5cGVcclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgTG9uZ1Byb3RvdHlwZSA9IExvbmcucHJvdG90eXBlO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBMb25nIHRvIGEgMzIgYml0IGludGVnZXIsIGFzc3VtaW5nIGl0IGlzIGEgMzIgYml0IGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnRvSW50ID0gZnVuY3Rpb24gdG9JbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IHRoaXMubG93ID4+PiAwIDogdGhpcy5sb3c7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhlIExvbmcgdG8gYSB0aGUgbmVhcmVzdCBmbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHZhbHVlIChkb3VibGUsIDUzIGJpdCBtYW50aXNzYSkuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24gdG9OdW1iZXIoKSB7XHJcbiAgICBpZiAodGhpcy51bnNpZ25lZClcclxuICAgICAgICByZXR1cm4gKCh0aGlzLmhpZ2ggPj4+IDApICogVFdPX1BXUl8zMl9EQkwpICsgKHRoaXMubG93ID4+PiAwKTtcclxuICAgIHJldHVybiB0aGlzLmhpZ2ggKiBUV09fUFdSXzMyX0RCTCArICh0aGlzLmxvdyA+Pj4gMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhlIExvbmcgdG8gYSBzdHJpbmcgd3JpdHRlbiBpbiB0aGUgc3BlY2lmaWVkIHJhZGl4LlxyXG4gKiBAcGFyYW0ge251bWJlcj19IHJhZGl4IFJhZGl4ICgyLTM2KSwgZGVmYXVsdHMgdG8gMTBcclxuICogQHJldHVybnMge3N0cmluZ31cclxuICogQG92ZXJyaWRlXHJcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IElmIGByYWRpeGAgaXMgb3V0IG9mIHJhbmdlXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcocmFkaXgpIHtcclxuICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7XHJcbiAgICBpZiAocmFkaXggPCAyIHx8IDM2IDwgcmFkaXgpXHJcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcigncmFkaXgnKTtcclxuICAgIGlmICh0aGlzLmlzWmVybygpKVxyXG4gICAgICAgIHJldHVybiAnMCc7XHJcbiAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHsgLy8gVW5zaWduZWQgTG9uZ3MgYXJlIG5ldmVyIG5lZ2F0aXZlXHJcbiAgICAgICAgaWYgKHRoaXMuZXEoTUlOX1ZBTFVFKSkge1xyXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoYW5nZSB0aGUgTG9uZyB2YWx1ZSBiZWZvcmUgaXQgY2FuIGJlIG5lZ2F0ZWQsIHNvIHdlIHJlbW92ZVxyXG4gICAgICAgICAgICAvLyB0aGUgYm90dG9tLW1vc3QgZGlnaXQgaW4gdGhpcyBiYXNlIGFuZCB0aGVuIHJlY3Vyc2UgdG8gZG8gdGhlIHJlc3QuXHJcbiAgICAgICAgICAgIHZhciByYWRpeExvbmcgPSBmcm9tTnVtYmVyKHJhZGl4KSxcclxuICAgICAgICAgICAgICAgIGRpdiA9IHRoaXMuZGl2KHJhZGl4TG9uZyksXHJcbiAgICAgICAgICAgICAgICByZW0xID0gZGl2Lm11bChyYWRpeExvbmcpLnN1Yih0aGlzKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpdi50b1N0cmluZyhyYWRpeCkgKyByZW0xLnRvSW50KCkudG9TdHJpbmcocmFkaXgpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gJy0nICsgdGhpcy5uZWcoKS50b1N0cmluZyhyYWRpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRG8gc2V2ZXJhbCAoNikgZGlnaXRzIGVhY2ggdGltZSB0aHJvdWdoIHRoZSBsb29wLCBzbyBhcyB0b1xyXG4gICAgLy8gbWluaW1pemUgdGhlIGNhbGxzIHRvIHRoZSB2ZXJ5IGV4cGVuc2l2ZSBlbXVsYXRlZCBkaXYuXHJcbiAgICB2YXIgcmFkaXhUb1Bvd2VyID0gZnJvbU51bWJlcihwb3dfZGJsKHJhZGl4LCA2KSwgdGhpcy51bnNpZ25lZCksXHJcbiAgICAgICAgcmVtID0gdGhpcztcclxuICAgIHZhciByZXN1bHQgPSAnJztcclxuICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgICAgdmFyIHJlbURpdiA9IHJlbS5kaXYocmFkaXhUb1Bvd2VyKSxcclxuICAgICAgICAgICAgaW50dmFsID0gcmVtLnN1YihyZW1EaXYubXVsKHJhZGl4VG9Qb3dlcikpLnRvSW50KCkgPj4+IDAsXHJcbiAgICAgICAgICAgIGRpZ2l0cyA9IGludHZhbC50b1N0cmluZyhyYWRpeCk7XHJcbiAgICAgICAgcmVtID0gcmVtRGl2O1xyXG4gICAgICAgIGlmIChyZW0uaXNaZXJvKCkpXHJcbiAgICAgICAgICAgIHJldHVybiBkaWdpdHMgKyByZXN1bHQ7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChkaWdpdHMubGVuZ3RoIDwgNilcclxuICAgICAgICAgICAgICAgIGRpZ2l0cyA9ICcwJyArIGRpZ2l0cztcclxuICAgICAgICAgICAgcmVzdWx0ID0gJycgKyBkaWdpdHMgKyByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIGhpZ2ggMzIgYml0cyBhcyBhIHNpZ25lZCBpbnRlZ2VyLlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBTaWduZWQgaGlnaCBiaXRzXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldEhpZ2hCaXRzID0gZnVuY3Rpb24gZ2V0SGlnaEJpdHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIGhpZ2ggMzIgYml0cyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBVbnNpZ25lZCBoaWdoIGJpdHNcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ2V0SGlnaEJpdHNVbnNpZ25lZCA9IGZ1bmN0aW9uIGdldEhpZ2hCaXRzVW5zaWduZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoID4+PiAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIGxvdyAzMiBiaXRzIGFzIGEgc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFNpZ25lZCBsb3cgYml0c1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZXRMb3dCaXRzID0gZnVuY3Rpb24gZ2V0TG93Qml0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmxvdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBsb3cgMzIgYml0cyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBVbnNpZ25lZCBsb3cgYml0c1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZXRMb3dCaXRzVW5zaWduZWQgPSBmdW5jdGlvbiBnZXRMb3dCaXRzVW5zaWduZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sb3cgPj4+IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBMb25nLlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZXROdW1CaXRzQWJzID0gZnVuY3Rpb24gZ2V0TnVtQml0c0FicygpIHtcclxuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgLy8gVW5zaWduZWQgTG9uZ3MgYXJlIG5ldmVyIG5lZ2F0aXZlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXEoTUlOX1ZBTFVFKSA/IDY0IDogdGhpcy5uZWcoKS5nZXROdW1CaXRzQWJzKCk7XHJcbiAgICB2YXIgdmFsID0gdGhpcy5oaWdoICE9IDAgPyB0aGlzLmhpZ2ggOiB0aGlzLmxvdztcclxuICAgIGZvciAodmFyIGJpdCA9IDMxOyBiaXQgPiAwOyBiaXQtLSlcclxuICAgICAgICBpZiAoKHZhbCAmICgxIDw8IGJpdCkpICE9IDApXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaCAhPSAwID8gYml0ICsgMzMgOiBiaXQgKyAxO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGVxdWFscyB6ZXJvLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuaXNaZXJvID0gZnVuY3Rpb24gaXNaZXJvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaCA9PT0gMCAmJiB0aGlzLmxvdyA9PT0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBlcXVhbHMgemVyby4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNpc1plcm99LlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZXF6ID0gTG9uZ1Byb3RvdHlwZS5pc1plcm87XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbmVnYXRpdmUuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5pc05lZ2F0aXZlID0gZnVuY3Rpb24gaXNOZWdhdGl2ZSgpIHtcclxuICAgIHJldHVybiAhdGhpcy51bnNpZ25lZCAmJiB0aGlzLmhpZ2ggPCAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIHBvc2l0aXZlLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuaXNQb3NpdGl2ZSA9IGZ1bmN0aW9uIGlzUG9zaXRpdmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51bnNpZ25lZCB8fCB0aGlzLmhpZ2ggPj0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBvZGQuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5pc09kZCA9IGZ1bmN0aW9uIGlzT2RkKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLmxvdyAmIDEpID09PSAxO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGV2ZW4uXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5pc0V2ZW4gPSBmdW5jdGlvbiBpc0V2ZW4oKSB7XHJcbiAgICByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZXF1YWxzIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhvdGhlcikpXHJcbiAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpO1xyXG4gICAgaWYgKHRoaXMudW5zaWduZWQgIT09IG90aGVyLnVuc2lnbmVkICYmICh0aGlzLmhpZ2ggPj4+IDMxKSA9PT0gMSAmJiAob3RoZXIuaGlnaCA+Pj4gMzEpID09PSAxKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLmhpZ2ggPT09IG90aGVyLmhpZ2ggJiYgdGhpcy5sb3cgPT09IG90aGVyLmxvdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBlcXVhbHMgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2VxdWFsc30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5lcSA9IExvbmdQcm90b3R5cGUuZXF1YWxzO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm5vdEVxdWFscyA9IGZ1bmN0aW9uIG5vdEVxdWFscyhvdGhlcikge1xyXG4gICAgcmV0dXJuICF0aGlzLmVxKC8qIHZhbGlkYXRlcyAqLyBvdGhlcik7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNub3RFcXVhbHN9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubmVxID0gTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHM7XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNub3RFcXVhbHN9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubmUgPSBMb25nUHJvdG90eXBlLm5vdEVxdWFscztcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbiA9IGZ1bmN0aW9uIGxlc3NUaGFuKG90aGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPCAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbGVzc1RoYW59LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubHQgPSBMb25nUHJvdG90eXBlLmxlc3NUaGFuO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmxlc3NUaGFuT3JFcXVhbCA9IGZ1bmN0aW9uIGxlc3NUaGFuT3JFcXVhbChvdGhlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcCgvKiB2YWxpZGF0ZXMgKi8gb3RoZXIpIDw9IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNsZXNzVGhhbk9yRXF1YWx9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubHRlID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWw7XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNsZXNzVGhhbk9yRXF1YWx9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubGUgPSBMb25nUHJvdG90eXBlLmxlc3NUaGFuT3JFcXVhbDtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ncmVhdGVyVGhhbiA9IGZ1bmN0aW9uIGdyZWF0ZXJUaGFuKG90aGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPiAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZ3JlYXRlclRoYW59LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ3QgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbCA9IGZ1bmN0aW9uIGdyZWF0ZXJUaGFuT3JFcXVhbChvdGhlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcCgvKiB2YWxpZGF0ZXMgKi8gb3RoZXIpID49IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNncmVhdGVyVGhhbk9yRXF1YWx9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ3RlID0gTG9uZ1Byb3RvdHlwZS5ncmVhdGVyVGhhbk9yRXF1YWw7XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNncmVhdGVyVGhhbk9yRXF1YWx9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ2UgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDtcclxuXHJcbi8qKlxyXG4gKiBDb21wYXJlcyB0aGlzIExvbmcncyB2YWx1ZSB3aXRoIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lLCAxIGlmIHRoZSB0aGlzIGlzIGdyZWF0ZXIgYW5kIC0xXHJcbiAqICBpZiB0aGUgZ2l2ZW4gb25lIGlzIGdyZWF0ZXJcclxuICovXHJcbkxvbmdQcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUob3RoZXIpIHtcclxuICAgIGlmICghaXNMb25nKG90aGVyKSlcclxuICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XHJcbiAgICBpZiAodGhpcy5lcShvdGhlcikpXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB2YXIgdGhpc05lZyA9IHRoaXMuaXNOZWdhdGl2ZSgpLFxyXG4gICAgICAgIG90aGVyTmVnID0gb3RoZXIuaXNOZWdhdGl2ZSgpO1xyXG4gICAgaWYgKHRoaXNOZWcgJiYgIW90aGVyTmVnKVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIGlmICghdGhpc05lZyAmJiBvdGhlck5lZylcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHNpZ24gYml0cyBhcmUgdGhlIHNhbWVcclxuICAgIGlmICghdGhpcy51bnNpZ25lZClcclxuICAgICAgICByZXR1cm4gdGhpcy5zdWIob3RoZXIpLmlzTmVnYXRpdmUoKSA/IC0xIDogMTtcclxuICAgIC8vIEJvdGggYXJlIHBvc2l0aXZlIGlmIGF0IGxlYXN0IG9uZSBpcyB1bnNpZ25lZFxyXG4gICAgcmV0dXJuIChvdGhlci5oaWdoID4+PiAwKSA+ICh0aGlzLmhpZ2ggPj4+IDApIHx8IChvdGhlci5oaWdoID09PSB0aGlzLmhpZ2ggJiYgKG90aGVyLmxvdyA+Pj4gMCkgPiAodGhpcy5sb3cgPj4+IDApKSA/IC0xIDogMTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb21wYXJlcyB0aGlzIExvbmcncyB2YWx1ZSB3aXRoIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNjb21wYXJlfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge251bWJlcn0gMCBpZiB0aGV5IGFyZSB0aGUgc2FtZSwgMSBpZiB0aGUgdGhpcyBpcyBncmVhdGVyIGFuZCAtMVxyXG4gKiAgaWYgdGhlIGdpdmVuIG9uZSBpcyBncmVhdGVyXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmNvbXAgPSBMb25nUHJvdG90eXBlLmNvbXBhcmU7XHJcblxyXG4vKipcclxuICogTmVnYXRlcyB0aGlzIExvbmcncyB2YWx1ZS5cclxuICogQHJldHVybnMgeyFMb25nfSBOZWdhdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUubmVnYXRlID0gZnVuY3Rpb24gbmVnYXRlKCkge1xyXG4gICAgaWYgKCF0aGlzLnVuc2lnbmVkICYmIHRoaXMuZXEoTUlOX1ZBTFVFKSlcclxuICAgICAgICByZXR1cm4gTUlOX1ZBTFVFO1xyXG4gICAgcmV0dXJuIHRoaXMubm90KCkuYWRkKE9ORSk7XHJcbn07XHJcblxyXG4vKipcclxuICogTmVnYXRlcyB0aGlzIExvbmcncyB2YWx1ZS4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNuZWdhdGV9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHJldHVybnMgeyFMb25nfSBOZWdhdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUubmVnID0gTG9uZ1Byb3RvdHlwZS5uZWdhdGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgc3VtIG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgTG9uZy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBhZGRlbmQgQWRkZW5kXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU3VtXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChhZGRlbmQpIHtcclxuICAgIGlmICghaXNMb25nKGFkZGVuZCkpXHJcbiAgICAgICAgYWRkZW5kID0gZnJvbVZhbHVlKGFkZGVuZCk7XHJcblxyXG4gICAgLy8gRGl2aWRlIGVhY2ggbnVtYmVyIGludG8gNCBjaHVua3Mgb2YgMTYgYml0cywgYW5kIHRoZW4gc3VtIHRoZSBjaHVua3MuXHJcblxyXG4gICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7XHJcbiAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgMHhGRkZGO1xyXG4gICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjtcclxuICAgIHZhciBhMDAgPSB0aGlzLmxvdyAmIDB4RkZGRjtcclxuXHJcbiAgICB2YXIgYjQ4ID0gYWRkZW5kLmhpZ2ggPj4+IDE2O1xyXG4gICAgdmFyIGIzMiA9IGFkZGVuZC5oaWdoICYgMHhGRkZGO1xyXG4gICAgdmFyIGIxNiA9IGFkZGVuZC5sb3cgPj4+IDE2O1xyXG4gICAgdmFyIGIwMCA9IGFkZGVuZC5sb3cgJiAweEZGRkY7XHJcblxyXG4gICAgdmFyIGM0OCA9IDAsIGMzMiA9IDAsIGMxNiA9IDAsIGMwMCA9IDA7XHJcbiAgICBjMDAgKz0gYTAwICsgYjAwO1xyXG4gICAgYzE2ICs9IGMwMCA+Pj4gMTY7XHJcbiAgICBjMDAgJj0gMHhGRkZGO1xyXG4gICAgYzE2ICs9IGExNiArIGIxNjtcclxuICAgIGMzMiArPSBjMTYgPj4+IDE2O1xyXG4gICAgYzE2ICY9IDB4RkZGRjtcclxuICAgIGMzMiArPSBhMzIgKyBiMzI7XHJcbiAgICBjNDggKz0gYzMyID4+PiAxNjtcclxuICAgIGMzMiAmPSAweEZGRkY7XHJcbiAgICBjNDggKz0gYTQ4ICsgYjQ4O1xyXG4gICAgYzQ4ICY9IDB4RkZGRjtcclxuICAgIHJldHVybiBmcm9tQml0cygoYzE2IDw8IDE2KSB8IGMwMCwgKGM0OCA8PCAxNikgfCBjMzIsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2Ugb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBMb25nLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IHN1YnRyYWhlbmQgU3VidHJhaGVuZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IERpZmZlcmVuY2VcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc3VidHJhY3QgPSBmdW5jdGlvbiBzdWJ0cmFjdChzdWJ0cmFoZW5kKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhzdWJ0cmFoZW5kKSlcclxuICAgICAgICBzdWJ0cmFoZW5kID0gZnJvbVZhbHVlKHN1YnRyYWhlbmQpO1xyXG4gICAgcmV0dXJuIHRoaXMuYWRkKHN1YnRyYWhlbmQubmVnKCkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2Ugb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBMb25nLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3N1YnRyYWN0fS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gc3VidHJhaGVuZCBTdWJ0cmFoZW5kXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gRGlmZmVyZW5jZVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zdWIgPSBMb25nUHJvdG90eXBlLnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHByb2R1Y3Qgb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBMb25nLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG11bHRpcGxpZXIgTXVsdGlwbGllclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFByb2R1Y3RcclxuICovXHJcbkxvbmdQcm90b3R5cGUubXVsdGlwbHkgPSBmdW5jdGlvbiBtdWx0aXBseShtdWx0aXBsaWVyKSB7XHJcbiAgICBpZiAodGhpcy5pc1plcm8oKSlcclxuICAgICAgICByZXR1cm4gWkVSTztcclxuICAgIGlmICghaXNMb25nKG11bHRpcGxpZXIpKVxyXG4gICAgICAgIG11bHRpcGxpZXIgPSBmcm9tVmFsdWUobXVsdGlwbGllcik7XHJcblxyXG4gICAgLy8gdXNlIHdhc20gc3VwcG9ydCBpZiBwcmVzZW50XHJcbiAgICBpZiAod2FzbSkge1xyXG4gICAgICAgIHZhciBsb3cgPSB3YXNtLm11bCh0aGlzLmxvdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyLmxvdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGllci5oaWdoKTtcclxuICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtLmdldF9oaWdoKCksIHRoaXMudW5zaWduZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtdWx0aXBsaWVyLmlzWmVybygpKVxyXG4gICAgICAgIHJldHVybiBaRVJPO1xyXG4gICAgaWYgKHRoaXMuZXEoTUlOX1ZBTFVFKSlcclxuICAgICAgICByZXR1cm4gbXVsdGlwbGllci5pc09kZCgpID8gTUlOX1ZBTFVFIDogWkVSTztcclxuICAgIGlmIChtdWx0aXBsaWVyLmVxKE1JTl9WQUxVRSkpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPZGQoKSA/IE1JTl9WQUxVRSA6IFpFUk87XHJcblxyXG4gICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7XHJcbiAgICAgICAgaWYgKG11bHRpcGxpZXIuaXNOZWdhdGl2ZSgpKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5tdWwobXVsdGlwbGllci5uZWcoKSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5tdWwobXVsdGlwbGllcikubmVnKCk7XHJcbiAgICB9IGVsc2UgaWYgKG11bHRpcGxpZXIuaXNOZWdhdGl2ZSgpKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm11bChtdWx0aXBsaWVyLm5lZygpKS5uZWcoKTtcclxuXHJcbiAgICAvLyBJZiBib3RoIGxvbmdzIGFyZSBzbWFsbCwgdXNlIGZsb2F0IG11bHRpcGxpY2F0aW9uXHJcbiAgICBpZiAodGhpcy5sdChUV09fUFdSXzI0KSAmJiBtdWx0aXBsaWVyLmx0KFRXT19QV1JfMjQpKVxyXG4gICAgICAgIHJldHVybiBmcm9tTnVtYmVyKHRoaXMudG9OdW1iZXIoKSAqIG11bHRpcGxpZXIudG9OdW1iZXIoKSwgdGhpcy51bnNpZ25lZCk7XHJcblxyXG4gICAgLy8gRGl2aWRlIGVhY2ggbG9uZyBpbnRvIDQgY2h1bmtzIG9mIDE2IGJpdHMsIGFuZCB0aGVuIGFkZCB1cCA0eDQgcHJvZHVjdHMuXHJcbiAgICAvLyBXZSBjYW4gc2tpcCBwcm9kdWN0cyB0aGF0IHdvdWxkIG92ZXJmbG93LlxyXG5cclxuICAgIHZhciBhNDggPSB0aGlzLmhpZ2ggPj4+IDE2O1xyXG4gICAgdmFyIGEzMiA9IHRoaXMuaGlnaCAmIDB4RkZGRjtcclxuICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7XHJcbiAgICB2YXIgYTAwID0gdGhpcy5sb3cgJiAweEZGRkY7XHJcblxyXG4gICAgdmFyIGI0OCA9IG11bHRpcGxpZXIuaGlnaCA+Pj4gMTY7XHJcbiAgICB2YXIgYjMyID0gbXVsdGlwbGllci5oaWdoICYgMHhGRkZGO1xyXG4gICAgdmFyIGIxNiA9IG11bHRpcGxpZXIubG93ID4+PiAxNjtcclxuICAgIHZhciBiMDAgPSBtdWx0aXBsaWVyLmxvdyAmIDB4RkZGRjtcclxuXHJcbiAgICB2YXIgYzQ4ID0gMCwgYzMyID0gMCwgYzE2ID0gMCwgYzAwID0gMDtcclxuICAgIGMwMCArPSBhMDAgKiBiMDA7XHJcbiAgICBjMTYgKz0gYzAwID4+PiAxNjtcclxuICAgIGMwMCAmPSAweEZGRkY7XHJcbiAgICBjMTYgKz0gYTE2ICogYjAwO1xyXG4gICAgYzMyICs9IGMxNiA+Pj4gMTY7XHJcbiAgICBjMTYgJj0gMHhGRkZGO1xyXG4gICAgYzE2ICs9IGEwMCAqIGIxNjtcclxuICAgIGMzMiArPSBjMTYgPj4+IDE2O1xyXG4gICAgYzE2ICY9IDB4RkZGRjtcclxuICAgIGMzMiArPSBhMzIgKiBiMDA7XHJcbiAgICBjNDggKz0gYzMyID4+PiAxNjtcclxuICAgIGMzMiAmPSAweEZGRkY7XHJcbiAgICBjMzIgKz0gYTE2ICogYjE2O1xyXG4gICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XHJcbiAgICBjMzIgJj0gMHhGRkZGO1xyXG4gICAgYzMyICs9IGEwMCAqIGIzMjtcclxuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xyXG4gICAgYzMyICY9IDB4RkZGRjtcclxuICAgIGM0OCArPSBhNDggKiBiMDAgKyBhMzIgKiBiMTYgKyBhMTYgKiBiMzIgKyBhMDAgKiBiNDg7XHJcbiAgICBjNDggJj0gMHhGRkZGO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKChjMTYgPDwgMTYpIHwgYzAwLCAoYzQ4IDw8IDE2KSB8IGMzMiwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgcHJvZHVjdCBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbXVsdGlwbHl9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBtdWx0aXBsaWVyIE11bHRpcGxpZXJcclxuICogQHJldHVybnMgeyFMb25nfSBQcm9kdWN0XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm11bCA9IExvbmdQcm90b3R5cGUubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgZGl2aWRlZCBieSB0aGUgc3BlY2lmaWVkLiBUaGUgcmVzdWx0IGlzIHNpZ25lZCBpZiB0aGlzIExvbmcgaXMgc2lnbmVkIG9yXHJcbiAqICB1bnNpZ25lZCBpZiB0aGlzIExvbmcgaXMgdW5zaWduZWQuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUXVvdGllbnRcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZGl2aWRlID0gZnVuY3Rpb24gZGl2aWRlKGRpdmlzb3IpIHtcclxuICAgIGlmICghaXNMb25nKGRpdmlzb3IpKVxyXG4gICAgICAgIGRpdmlzb3IgPSBmcm9tVmFsdWUoZGl2aXNvcik7XHJcbiAgICBpZiAoZGl2aXNvci5pc1plcm8oKSlcclxuICAgICAgICB0aHJvdyBFcnJvcignZGl2aXNpb24gYnkgemVybycpO1xyXG5cclxuICAgIC8vIHVzZSB3YXNtIHN1cHBvcnQgaWYgcHJlc2VudFxyXG4gICAgaWYgKHdhc20pIHtcclxuICAgICAgICAvLyBndWFyZCBhZ2FpbnN0IHNpZ25lZCBkaXZpc2lvbiBvdmVyZmxvdzogdGhlIGxhcmdlc3RcclxuICAgICAgICAvLyBuZWdhdGl2ZSBudW1iZXIgLyAtMSB3b3VsZCBiZSAxIGxhcmdlciB0aGFuIHRoZSBsYXJnZXN0XHJcbiAgICAgICAgLy8gcG9zaXRpdmUgbnVtYmVyLCBkdWUgdG8gdHdvJ3MgY29tcGxlbWVudC5cclxuICAgICAgICBpZiAoIXRoaXMudW5zaWduZWQgJiZcclxuICAgICAgICAgICAgdGhpcy5oaWdoID09PSAtMHg4MDAwMDAwMCAmJlxyXG4gICAgICAgICAgICBkaXZpc29yLmxvdyA9PT0gLTEgJiYgZGl2aXNvci5oaWdoID09PSAtMSkge1xyXG4gICAgICAgICAgICAvLyBiZSBjb25zaXN0ZW50IHdpdGggbm9uLXdhc20gY29kZSBwYXRoXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbG93ID0gKHRoaXMudW5zaWduZWQgPyB3YXNtLmRpdl91IDogd2FzbS5kaXZfcykoXHJcbiAgICAgICAgICAgIHRoaXMubG93LFxyXG4gICAgICAgICAgICB0aGlzLmhpZ2gsXHJcbiAgICAgICAgICAgIGRpdmlzb3IubG93LFxyXG4gICAgICAgICAgICBkaXZpc29yLmhpZ2hcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmcm9tQml0cyhsb3csIHdhc20uZ2V0X2hpZ2goKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudW5zaWduZWQgPyBVWkVSTyA6IFpFUk87XHJcbiAgICB2YXIgYXBwcm94LCByZW0sIHJlcztcclxuICAgIGlmICghdGhpcy51bnNpZ25lZCkge1xyXG4gICAgICAgIC8vIFRoaXMgc2VjdGlvbiBpcyBvbmx5IHJlbGV2YW50IGZvciBzaWduZWQgbG9uZ3MgYW5kIGlzIGRlcml2ZWQgZnJvbSB0aGVcclxuICAgICAgICAvLyBjbG9zdXJlIGxpYnJhcnkgYXMgYSB3aG9sZS5cclxuICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKSB7XHJcbiAgICAgICAgICAgIGlmIChkaXZpc29yLmVxKE9ORSkgfHwgZGl2aXNvci5lcShORUdfT05FKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7ICAvLyByZWNhbGwgdGhhdCAtTUlOX1ZBTFVFID09IE1JTl9WQUxVRVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkaXZpc29yLmVxKE1JTl9WQUxVRSkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gT05FO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgfG90aGVyfCA+PSAyLCBzbyB8dGhpcy9vdGhlcnwgPCB8TUlOX1ZBTFVFfC5cclxuICAgICAgICAgICAgICAgIHZhciBoYWxmVGhpcyA9IHRoaXMuc2hyKDEpO1xyXG4gICAgICAgICAgICAgICAgYXBwcm94ID0gaGFsZlRoaXMuZGl2KGRpdmlzb3IpLnNobCgxKTtcclxuICAgICAgICAgICAgICAgIGlmIChhcHByb3guZXEoWkVSTykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGl2aXNvci5pc05lZ2F0aXZlKCkgPyBPTkUgOiBORUdfT05FO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZW0gPSB0aGlzLnN1YihkaXZpc29yLm11bChhcHByb3gpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXMgPSBhcHByb3guYWRkKHJlbS5kaXYoZGl2aXNvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuZXEoTUlOX1ZBTFVFKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5zaWduZWQgPyBVWkVSTyA6IFpFUk87XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgIGlmIChkaXZpc29yLmlzTmVnYXRpdmUoKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLmRpdihkaXZpc29yLm5lZygpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IpLm5lZygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5pc05lZ2F0aXZlKCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpdihkaXZpc29yLm5lZygpKS5uZWcoKTtcclxuICAgICAgICByZXMgPSBaRVJPO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBUaGUgYWxnb3JpdGhtIGJlbG93IGhhcyBub3QgYmVlbiBtYWRlIGZvciB1bnNpZ25lZCBsb25ncy4gSXQncyB0aGVyZWZvcmVcclxuICAgICAgICAvLyByZXF1aXJlZCB0byB0YWtlIHNwZWNpYWwgY2FyZSBvZiB0aGUgTVNCIHByaW9yIHRvIHJ1bm5pbmcgaXQuXHJcbiAgICAgICAgaWYgKCFkaXZpc29yLnVuc2lnbmVkKVxyXG4gICAgICAgICAgICBkaXZpc29yID0gZGl2aXNvci50b1Vuc2lnbmVkKCk7XHJcbiAgICAgICAgaWYgKGRpdmlzb3IuZ3QodGhpcykpXHJcbiAgICAgICAgICAgIHJldHVybiBVWkVSTztcclxuICAgICAgICBpZiAoZGl2aXNvci5ndCh0aGlzLnNocnUoMSkpKSAvLyAxNSA+Pj4gMSA9IDcgOyB3aXRoIGRpdmlzb3IgPSA4IDsgdHJ1ZVxyXG4gICAgICAgICAgICByZXR1cm4gVU9ORTtcclxuICAgICAgICByZXMgPSBVWkVSTztcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXBlYXQgdGhlIGZvbGxvd2luZyB1bnRpbCB0aGUgcmVtYWluZGVyIGlzIGxlc3MgdGhhbiBvdGhlcjogIGZpbmQgYVxyXG4gICAgLy8gZmxvYXRpbmctcG9pbnQgdGhhdCBhcHByb3hpbWF0ZXMgcmVtYWluZGVyIC8gb3RoZXIgKmZyb20gYmVsb3cqLCBhZGQgdGhpc1xyXG4gICAgLy8gaW50byB0aGUgcmVzdWx0LCBhbmQgc3VidHJhY3QgaXQgZnJvbSB0aGUgcmVtYWluZGVyLiAgSXQgaXMgY3JpdGljYWwgdGhhdFxyXG4gICAgLy8gdGhlIGFwcHJveGltYXRlIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcmVhbCB2YWx1ZSBzbyB0aGF0IHRoZVxyXG4gICAgLy8gcmVtYWluZGVyIG5ldmVyIGJlY29tZXMgbmVnYXRpdmUuXHJcbiAgICByZW0gPSB0aGlzO1xyXG4gICAgd2hpbGUgKHJlbS5ndGUoZGl2aXNvcikpIHtcclxuICAgICAgICAvLyBBcHByb3hpbWF0ZSB0aGUgcmVzdWx0IG9mIGRpdmlzaW9uLiBUaGlzIG1heSBiZSBhIGxpdHRsZSBncmVhdGVyIG9yXHJcbiAgICAgICAgLy8gc21hbGxlciB0aGFuIHRoZSBhY3R1YWwgdmFsdWUuXHJcbiAgICAgICAgYXBwcm94ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihyZW0udG9OdW1iZXIoKSAvIGRpdmlzb3IudG9OdW1iZXIoKSkpO1xyXG5cclxuICAgICAgICAvLyBXZSB3aWxsIHR3ZWFrIHRoZSBhcHByb3hpbWF0ZSByZXN1bHQgYnkgY2hhbmdpbmcgaXQgaW4gdGhlIDQ4LXRoIGRpZ2l0IG9yXHJcbiAgICAgICAgLy8gdGhlIHNtYWxsZXN0IG5vbi1mcmFjdGlvbmFsIGRpZ2l0LCB3aGljaGV2ZXIgaXMgbGFyZ2VyLlxyXG4gICAgICAgIHZhciBsb2cyID0gTWF0aC5jZWlsKE1hdGgubG9nKGFwcHJveCkgLyBNYXRoLkxOMiksXHJcbiAgICAgICAgICAgIGRlbHRhID0gKGxvZzIgPD0gNDgpID8gMSA6IHBvd19kYmwoMiwgbG9nMiAtIDQ4KSxcclxuXHJcbiAgICAgICAgLy8gRGVjcmVhc2UgdGhlIGFwcHJveGltYXRpb24gdW50aWwgaXQgaXMgc21hbGxlciB0aGFuIHRoZSByZW1haW5kZXIuICBOb3RlXHJcbiAgICAgICAgLy8gdGhhdCBpZiBpdCBpcyB0b28gbGFyZ2UsIHRoZSBwcm9kdWN0IG92ZXJmbG93cyBhbmQgaXMgbmVnYXRpdmUuXHJcbiAgICAgICAgICAgIGFwcHJveFJlcyA9IGZyb21OdW1iZXIoYXBwcm94KSxcclxuICAgICAgICAgICAgYXBwcm94UmVtID0gYXBwcm94UmVzLm11bChkaXZpc29yKTtcclxuICAgICAgICB3aGlsZSAoYXBwcm94UmVtLmlzTmVnYXRpdmUoKSB8fCBhcHByb3hSZW0uZ3QocmVtKSkge1xyXG4gICAgICAgICAgICBhcHByb3ggLT0gZGVsdGE7XHJcbiAgICAgICAgICAgIGFwcHJveFJlcyA9IGZyb21OdW1iZXIoYXBwcm94LCB0aGlzLnVuc2lnbmVkKTtcclxuICAgICAgICAgICAgYXBwcm94UmVtID0gYXBwcm94UmVzLm11bChkaXZpc29yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFdlIGtub3cgdGhlIGFuc3dlciBjYW4ndCBiZSB6ZXJvLi4uIGFuZCBhY3R1YWxseSwgemVybyB3b3VsZCBjYXVzZVxyXG4gICAgICAgIC8vIGluZmluaXRlIHJlY3Vyc2lvbiBzaW5jZSB3ZSB3b3VsZCBtYWtlIG5vIHByb2dyZXNzLlxyXG4gICAgICAgIGlmIChhcHByb3hSZXMuaXNaZXJvKCkpXHJcbiAgICAgICAgICAgIGFwcHJveFJlcyA9IE9ORTtcclxuXHJcbiAgICAgICAgcmVzID0gcmVzLmFkZChhcHByb3hSZXMpO1xyXG4gICAgICAgIHJlbSA9IHJlbS5zdWIoYXBwcm94UmVtKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgZGl2aWRlZCBieSB0aGUgc3BlY2lmaWVkLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2RpdmlkZX0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFF1b3RpZW50XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmRpdiA9IExvbmdQcm90b3R5cGUuZGl2aWRlO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIG1vZHVsbyB0aGUgc3BlY2lmaWVkLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFJlbWFpbmRlclxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5tb2R1bG8gPSBmdW5jdGlvbiBtb2R1bG8oZGl2aXNvcikge1xyXG4gICAgaWYgKCFpc0xvbmcoZGl2aXNvcikpXHJcbiAgICAgICAgZGl2aXNvciA9IGZyb21WYWx1ZShkaXZpc29yKTtcclxuXHJcbiAgICAvLyB1c2Ugd2FzbSBzdXBwb3J0IGlmIHByZXNlbnRcclxuICAgIGlmICh3YXNtKSB7XHJcbiAgICAgICAgdmFyIGxvdyA9ICh0aGlzLnVuc2lnbmVkID8gd2FzbS5yZW1fdSA6IHdhc20ucmVtX3MpKFxyXG4gICAgICAgICAgICB0aGlzLmxvdyxcclxuICAgICAgICAgICAgdGhpcy5oaWdoLFxyXG4gICAgICAgICAgICBkaXZpc29yLmxvdyxcclxuICAgICAgICAgICAgZGl2aXNvci5oaWdoXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtLmdldF9oaWdoKCksIHRoaXMudW5zaWduZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnN1Yih0aGlzLmRpdihkaXZpc29yKS5tdWwoZGl2aXNvcikpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIG1vZHVsbyB0aGUgc3BlY2lmaWVkLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI21vZHVsb30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFJlbWFpbmRlclxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5tb2QgPSBMb25nUHJvdG90eXBlLm1vZHVsbztcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyBtb2R1bG8gdGhlIHNwZWNpZmllZC4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNtb2R1bG99LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcclxuICogQHJldHVybnMgeyFMb25nfSBSZW1haW5kZXJcclxuICovXHJcbkxvbmdQcm90b3R5cGUucmVtID0gTG9uZ1Byb3RvdHlwZS5tb2R1bG87XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgYml0d2lzZSBOT1Qgb2YgdGhpcyBMb25nLlxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm5vdCA9IGZ1bmN0aW9uIG5vdCgpIHtcclxuICAgIHJldHVybiBmcm9tQml0cyh+dGhpcy5sb3csIH50aGlzLmhpZ2gsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGJpdHdpc2UgQU5EIG9mIHRoaXMgTG9uZyBhbmQgdGhlIHNwZWNpZmllZC5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciBMb25nXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICovXHJcbkxvbmdQcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gYW5kKG90aGVyKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhvdGhlcikpXHJcbiAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93ICYgb3RoZXIubG93LCB0aGlzLmhpZ2ggJiBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE9SIG9mIHRoaXMgTG9uZyBhbmQgdGhlIHNwZWNpZmllZC5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciBMb25nXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICovXHJcbkxvbmdQcm90b3R5cGUub3IgPSBmdW5jdGlvbiBvcihvdGhlcikge1xyXG4gICAgaWYgKCFpc0xvbmcob3RoZXIpKVxyXG4gICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyB8IG90aGVyLmxvdywgdGhpcy5oaWdoIHwgb3RoZXIuaGlnaCwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgYml0d2lzZSBYT1Igb2YgdGhpcyBMb25nIGFuZCB0aGUgZ2l2ZW4gb25lLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIExvbmdcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS54b3IgPSBmdW5jdGlvbiB4b3Iob3RoZXIpIHtcclxuICAgIGlmICghaXNMb25nKG90aGVyKSlcclxuICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XHJcbiAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgXiBvdGhlci5sb3csIHRoaXMuaGlnaCBeIG90aGVyLmhpZ2gsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBzaGlmdGVkIHRvIHRoZSBsZWZ0IGJ5IHRoZSBnaXZlbiBhbW91bnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfCFMb25nfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU2hpZnRlZCBMb25nXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnNoaWZ0TGVmdCA9IGZ1bmN0aW9uIHNoaWZ0TGVmdChudW1CaXRzKSB7XHJcbiAgICBpZiAoaXNMb25nKG51bUJpdHMpKVxyXG4gICAgICAgIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7XHJcbiAgICBpZiAoKG51bUJpdHMgJj0gNjMpID09PSAwKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgZWxzZSBpZiAobnVtQml0cyA8IDMyKVxyXG4gICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyA8PCBudW1CaXRzLCAodGhpcy5oaWdoIDw8IG51bUJpdHMpIHwgKHRoaXMubG93ID4+PiAoMzIgLSBudW1CaXRzKSksIHRoaXMudW5zaWduZWQpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHJldHVybiBmcm9tQml0cygwLCB0aGlzLmxvdyA8PCAobnVtQml0cyAtIDMyKSwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIHNoaWZ0ZWQgdG8gdGhlIGxlZnQgYnkgdGhlIGdpdmVuIGFtb3VudC4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNzaGlmdExlZnR9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hsID0gTG9uZ1Byb3RvdHlwZS5zaGlmdExlZnQ7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGFyaXRobWV0aWNhbGx5IHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IGJ5IHRoZSBnaXZlbiBhbW91bnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfCFMb25nfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU2hpZnRlZCBMb25nXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnNoaWZ0UmlnaHQgPSBmdW5jdGlvbiBzaGlmdFJpZ2h0KG51bUJpdHMpIHtcclxuICAgIGlmIChpc0xvbmcobnVtQml0cykpXHJcbiAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcclxuICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKCh0aGlzLmxvdyA+Pj4gbnVtQml0cykgfCAodGhpcy5oaWdoIDw8ICgzMiAtIG51bUJpdHMpKSwgdGhpcy5oaWdoID4+IG51bUJpdHMsIHRoaXMudW5zaWduZWQpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmhpZ2ggPj4gKG51bUJpdHMgLSAzMiksIHRoaXMuaGlnaCA+PSAwID8gMCA6IC0xLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgYXJpdGhtZXRpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNzaGlmdFJpZ2h0fS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfCFMb25nfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU2hpZnRlZCBMb25nXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnNociA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodDtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgbG9naWNhbGx5IHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IGJ5IHRoZSBnaXZlbiBhbW91bnQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfCFMb25nfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU2hpZnRlZCBMb25nXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnNoaWZ0UmlnaHRVbnNpZ25lZCA9IGZ1bmN0aW9uIHNoaWZ0UmlnaHRVbnNpZ25lZChudW1CaXRzKSB7XHJcbiAgICBpZiAoaXNMb25nKG51bUJpdHMpKVxyXG4gICAgICAgIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7XHJcbiAgICBudW1CaXRzICY9IDYzO1xyXG4gICAgaWYgKG51bUJpdHMgPT09IDApXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgaGlnaCA9IHRoaXMuaGlnaDtcclxuICAgICAgICBpZiAobnVtQml0cyA8IDMyKSB7XHJcbiAgICAgICAgICAgIHZhciBsb3cgPSB0aGlzLmxvdztcclxuICAgICAgICAgICAgcmV0dXJuIGZyb21CaXRzKChsb3cgPj4+IG51bUJpdHMpIHwgKGhpZ2ggPDwgKDMyIC0gbnVtQml0cykpLCBoaWdoID4+PiBudW1CaXRzLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG51bUJpdHMgPT09IDMyKVxyXG4gICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoaGlnaCwgMCwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoaGlnaCA+Pj4gKG51bUJpdHMgLSAzMiksIDAsIHRoaXMudW5zaWduZWQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBsb2dpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNzaGlmdFJpZ2h0VW5zaWduZWR9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hydSA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBsb2dpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNzaGlmdFJpZ2h0VW5zaWduZWR9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hyX3UgPSBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHRVbnNpZ25lZDtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGlzIExvbmcgdG8gc2lnbmVkLlxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNpZ25lZCBsb25nXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnRvU2lnbmVkID0gZnVuY3Rpb24gdG9TaWduZWQoKSB7XHJcbiAgICBpZiAoIXRoaXMudW5zaWduZWQpXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3csIHRoaXMuaGlnaCwgZmFsc2UpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoaXMgTG9uZyB0byB1bnNpZ25lZC5cclxuICogQHJldHVybnMgeyFMb25nfSBVbnNpZ25lZCBsb25nXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnRvVW5zaWduZWQgPSBmdW5jdGlvbiB0b1Vuc2lnbmVkKCkge1xyXG4gICAgaWYgKHRoaXMudW5zaWduZWQpXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3csIHRoaXMuaGlnaCwgdHJ1ZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIGl0cyBieXRlIHJlcHJlc2VudGF0aW9uLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBsZSBXaGV0aGVyIGxpdHRsZSBvciBiaWcgZW5kaWFuLCBkZWZhdWx0cyB0byBiaWcgZW5kaWFuXHJcbiAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IEJ5dGUgcmVwcmVzZW50YXRpb25cclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9CeXRlcyA9IGZ1bmN0aW9uIHRvQnl0ZXMobGUpIHtcclxuICAgIHJldHVybiBsZSA/IHRoaXMudG9CeXRlc0xFKCkgOiB0aGlzLnRvQnl0ZXNCRSgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoaXMgTG9uZyB0byBpdHMgbGl0dGxlIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uLlxyXG4gKiBAcmV0dXJucyB7IUFycmF5LjxudW1iZXI+fSBMaXR0bGUgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb25cclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9CeXRlc0xFID0gZnVuY3Rpb24gdG9CeXRlc0xFKCkge1xyXG4gICAgdmFyIGhpID0gdGhpcy5oaWdoLFxyXG4gICAgICAgIGxvID0gdGhpcy5sb3c7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIGxvICAgICAgICAmIDB4ZmYsXHJcbiAgICAgICAgbG8gPj4+ICA4ICYgMHhmZixcclxuICAgICAgICBsbyA+Pj4gMTYgJiAweGZmLFxyXG4gICAgICAgIGxvID4+PiAyNCAgICAgICAsXHJcbiAgICAgICAgaGkgICAgICAgICYgMHhmZixcclxuICAgICAgICBoaSA+Pj4gIDggJiAweGZmLFxyXG4gICAgICAgIGhpID4+PiAxNiAmIDB4ZmYsXHJcbiAgICAgICAgaGkgPj4+IDI0XHJcbiAgICBdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoaXMgTG9uZyB0byBpdHMgYmlnIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uLlxyXG4gKiBAcmV0dXJucyB7IUFycmF5LjxudW1iZXI+fSBCaWcgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb25cclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9CeXRlc0JFID0gZnVuY3Rpb24gdG9CeXRlc0JFKCkge1xyXG4gICAgdmFyIGhpID0gdGhpcy5oaWdoLFxyXG4gICAgICAgIGxvID0gdGhpcy5sb3c7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIGhpID4+PiAyNCAgICAgICAsXHJcbiAgICAgICAgaGkgPj4+IDE2ICYgMHhmZixcclxuICAgICAgICBoaSA+Pj4gIDggJiAweGZmLFxyXG4gICAgICAgIGhpICAgICAgICAmIDB4ZmYsXHJcbiAgICAgICAgbG8gPj4+IDI0ICAgICAgICxcclxuICAgICAgICBsbyA+Pj4gMTYgJiAweGZmLFxyXG4gICAgICAgIGxvID4+PiAgOCAmIDB4ZmYsXHJcbiAgICAgICAgbG8gICAgICAgICYgMHhmZlxyXG4gICAgXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgTG9uZyBmcm9tIGl0cyBieXRlIHJlcHJlc2VudGF0aW9uLlxyXG4gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gYnl0ZXMgQnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGxlIFdoZXRoZXIgbGl0dGxlIG9yIGJpZyBlbmRpYW4sIGRlZmF1bHRzIHRvIGJpZyBlbmRpYW5cclxuICogQHJldHVybnMge0xvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcclxuICovXHJcbkxvbmcuZnJvbUJ5dGVzID0gZnVuY3Rpb24gZnJvbUJ5dGVzKGJ5dGVzLCB1bnNpZ25lZCwgbGUpIHtcclxuICAgIHJldHVybiBsZSA/IExvbmcuZnJvbUJ5dGVzTEUoYnl0ZXMsIHVuc2lnbmVkKSA6IExvbmcuZnJvbUJ5dGVzQkUoYnl0ZXMsIHVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgTG9uZyBmcm9tIGl0cyBsaXR0bGUgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBieXRlcyBMaXR0bGUgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb25cclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxyXG4gKiBAcmV0dXJucyB7TG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tQnl0ZXNMRSA9IGZ1bmN0aW9uIGZyb21CeXRlc0xFKGJ5dGVzLCB1bnNpZ25lZCkge1xyXG4gICAgcmV0dXJuIG5ldyBMb25nKFxyXG4gICAgICAgIGJ5dGVzWzBdICAgICAgIHxcclxuICAgICAgICBieXRlc1sxXSA8PCAgOCB8XHJcbiAgICAgICAgYnl0ZXNbMl0gPDwgMTYgfFxyXG4gICAgICAgIGJ5dGVzWzNdIDw8IDI0LFxyXG4gICAgICAgIGJ5dGVzWzRdICAgICAgIHxcclxuICAgICAgICBieXRlc1s1XSA8PCAgOCB8XHJcbiAgICAgICAgYnl0ZXNbNl0gPDwgMTYgfFxyXG4gICAgICAgIGJ5dGVzWzddIDw8IDI0LFxyXG4gICAgICAgIHVuc2lnbmVkXHJcbiAgICApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBMb25nIGZyb20gaXRzIGJpZyBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvbi5cclxuICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGJ5dGVzIEJpZyBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHtMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21CeXRlc0JFID0gZnVuY3Rpb24gZnJvbUJ5dGVzQkUoYnl0ZXMsIHVuc2lnbmVkKSB7XHJcbiAgICByZXR1cm4gbmV3IExvbmcoXHJcbiAgICAgICAgYnl0ZXNbNF0gPDwgMjQgfFxyXG4gICAgICAgIGJ5dGVzWzVdIDw8IDE2IHxcclxuICAgICAgICBieXRlc1s2XSA8PCAgOCB8XHJcbiAgICAgICAgYnl0ZXNbN10sXHJcbiAgICAgICAgYnl0ZXNbMF0gPDwgMjQgfFxyXG4gICAgICAgIGJ5dGVzWzFdIDw8IDE2IHxcclxuICAgICAgICBieXRlc1syXSA8PCAgOCB8XHJcbiAgICAgICAgYnl0ZXNbM10sXHJcbiAgICAgICAgdW5zaWduZWRcclxuICAgICk7XHJcbn07XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBDb2xvcjMge1xuICByOiBudW1iZXJcbiAgZzogbnVtYmVyXG4gIGI6IG51bWJlclxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlQ29sb3IzKCk6IENvbG9yMyB7XG4gIHJldHVybiB7IHI6IDAsIGc6IDAsIGI6IDAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDb2xvcjMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBDb2xvcjMsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5yICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzKS5mbG9hdChtZXNzYWdlLnIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmcgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjEpLmZsb2F0KG1lc3NhZ2UuZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYiAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS5iKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogQ29sb3IzIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VDb2xvcjMoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnIgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmcgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmIgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBMb25nIGZyb20gJ2xvbmcnXG5pbXBvcnQgeyBDb2xvcjMgfSBmcm9tICcuL2NvbW1vbi9Db2xvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJBdmF0YXJTaGFwZSB7XG4gIGlkOiBzdHJpbmdcbiAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZFxuICBib2R5U2hhcGU/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgc2tpbkNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIGhhaXJDb2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICBleWVDb2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICB3ZWFyYWJsZXM6IHN0cmluZ1tdXG4gIGV4cHJlc3Npb25UcmlnZ2VySWQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXA/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgc3RpY2tlclRyaWdnZXJJZD86IHN0cmluZyB8IHVuZGVmaW5lZFxuICBzdGlja2VyVHJpZ2dlclRpbWVzdGFtcD86IG51bWJlciB8IHVuZGVmaW5lZFxuICB0YWxraW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBdmF0YXJTaGFwZSgpOiBQQkF2YXRhclNoYXBlIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogJycsXG4gICAgbmFtZTogdW5kZWZpbmVkLFxuICAgIGJvZHlTaGFwZTogdW5kZWZpbmVkLFxuICAgIHNraW5Db2xvcjogdW5kZWZpbmVkLFxuICAgIGhhaXJDb2xvcjogdW5kZWZpbmVkLFxuICAgIGV5ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgd2VhcmFibGVzOiBbXSxcbiAgICBleHByZXNzaW9uVHJpZ2dlcklkOiB1bmRlZmluZWQsXG4gICAgZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXA6IHVuZGVmaW5lZCxcbiAgICBzdGlja2VyVHJpZ2dlcklkOiB1bmRlZmluZWQsXG4gICAgc3RpY2tlclRyaWdnZXJUaW1lc3RhbXA6IHVuZGVmaW5lZCxcbiAgICB0YWxraW5nOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF2YXRhclNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBdmF0YXJTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmlkICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuaWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UubmFtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm9keVNoYXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLmJvZHlTaGFwZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2tpbkNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5za2luQ29sb3IsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaGFpckNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5oYWlyQ29sb3IsIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXllQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLmV5ZUNvbG9yLCB3cml0ZXIudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLndlYXJhYmxlcykge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKHYhKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjYpLnN0cmluZyhtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VySWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VyVGltZXN0YW1wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDY0KG1lc3NhZ2UuZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnN0aWNrZXJUcmlnZ2VySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4Mikuc3RyaW5nKG1lc3NhZ2Uuc3RpY2tlclRyaWdnZXJJZClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3RpY2tlclRyaWdnZXJUaW1lc3RhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4OCkuaW50NjQobWVzc2FnZS5zdGlja2VyVHJpZ2dlclRpbWVzdGFtcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGFsa2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDk2KS5ib29sKG1lc3NhZ2UudGFsa2luZylcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQXZhdGFyU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQXZhdGFyU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmlkID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmJvZHlTaGFwZSA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnNraW5Db2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuaGFpckNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5leWVDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2Uud2VhcmFibGVzLnB1c2gocmVhZGVyLnN0cmluZygpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VySWQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlclRpbWVzdGFtcCA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgbWVzc2FnZS5zdGlja2VyVHJpZ2dlcklkID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBtZXNzYWdlLnN0aWNrZXJUcmlnZ2VyVGltZXN0YW1wID0gbG9uZ1RvTnVtYmVyKHJlYWRlci5pbnQ2NCgpIGFzIExvbmcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBtZXNzYWdlLnRhbGtpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmRlY2xhcmUgdmFyIHNlbGY6IGFueSB8IHVuZGVmaW5lZFxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnkgfCB1bmRlZmluZWRcbmRlY2xhcmUgdmFyIGdsb2JhbDogYW55IHwgdW5kZWZpbmVkXG52YXIgZ2xvYmFsVGhpczogYW55ID0gKCgpID0+IHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGdsb2JhbFRoaXNcbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHNlbGZcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gd2luZG93XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGdsb2JhbFxuICB0aHJvdyAnVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0J1xufSkoKVxuXG5mdW5jdGlvbiBsb25nVG9OdW1iZXIobG9uZzogTG9uZyk6IG51bWJlciB7XG4gIGlmIChsb25nLmd0KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkge1xuICAgIHRocm93IG5ldyBnbG9iYWxUaGlzLkVycm9yKCdWYWx1ZSBpcyBsYXJnZXIgdGhhbiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUicpXG4gIH1cbiAgcmV0dXJuIGxvbmcudG9OdW1iZXIoKVxufVxuXG5pZiAoX20wLnV0aWwuTG9uZyAhPT0gTG9uZykge1xuICBfbTAudXRpbC5Mb25nID0gTG9uZyBhcyBhbnlcbiAgX20wLmNvbmZpZ3VyZSgpXG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQXZhdGFyU2hhcGUgfSBmcm9tICcuL3BiL0F2YXRhclNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwODBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhclNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCQXZhdGFyU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQXZhdGFyU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkF2YXRhclNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkF2YXRhclNoYXBlIHtcbiAgICByZXR1cm4gUEJBdmF0YXJTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQXZhdGFyU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkF2YXRhclNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJCaWxsYm9hcmQge1xuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHg/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgeT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICB6PzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJCaWxsYm9hcmQoKTogUEJCaWxsYm9hcmQge1xuICByZXR1cm4geyB4OiB1bmRlZmluZWQsIHk6IHVuZGVmaW5lZCwgejogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJCaWxsYm9hcmQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkJpbGxib2FyZCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2UueClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UueSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UueSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UueiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UueilcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQmlsbGJvYXJkIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkJpbGxib2FyZCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UueCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS55ID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnogPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQmlsbGJvYXJkIH0gZnJvbSAnLi9wYi9CaWxsYm9hcmQuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA5MFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQmlsbGJvYXJkU2NoZW1hOiBJU2NoZW1hPFBCQmlsbGJvYXJkPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkJpbGxib2FyZCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQmlsbGJvYXJkLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkJpbGxib2FyZCB7XG4gICAgcmV0dXJuIFBCQmlsbGJvYXJkLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJCaWxsYm9hcmQge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkJpbGxib2FyZC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQm94U2hhcGUge1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgd2l0aENvbGxpc2lvbnM/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICBpc1BvaW50ZXJCbG9ja2VyPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIEhpZGRlbkNvbXBvbmVudCBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNTMgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgdXZzOiBudW1iZXJbXVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJCb3hTaGFwZSgpOiBQQkJveFNoYXBlIHtcbiAgcmV0dXJuIHsgd2l0aENvbGxpc2lvbnM6IHVuZGVmaW5lZCwgaXNQb2ludGVyQmxvY2tlcjogdW5kZWZpbmVkLCB2aXNpYmxlOiB1bmRlZmluZWQsIHV2czogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkJveFNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJCb3hTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICB3cml0ZXIudWludDMyKDM0KS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJCb3hTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJCb3hTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvc1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkJveFNoYXBlIH0gZnJvbSAnLi9wYi9Cb3hTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDEzXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBCb3hTaGFwZVNjaGVtYTogSVNjaGVtYTxQQkJveFNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkJveFNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJCb3hTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJCb3hTaGFwZSB7XG4gICAgcmV0dXJuIFBCQm94U2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkJveFNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJCb3hTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENhbWVyYU1vZGVWYWx1ZSB9IGZyb20gJy4vY29tbW9uL0NhbWVyYU1vZGVWYWx1ZS5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkNhbWVyYU1vZGUge1xuICBtb2RlOiBDYW1lcmFNb2RlVmFsdWVcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQ2FtZXJhTW9kZSgpOiBQQkNhbWVyYU1vZGUge1xuICByZXR1cm4geyBtb2RlOiAwIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJDYW1lcmFNb2RlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJDYW1lcmFNb2RlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubW9kZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLm1vZGUpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkNhbWVyYU1vZGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQ2FtZXJhTW9kZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UubW9kZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkNhbWVyYU1vZGUgfSBmcm9tICcuL3BiL0NhbWVyYU1vZGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA3MlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ2FtZXJhTW9kZVNjaGVtYTogSVNjaGVtYTxQQkNhbWVyYU1vZGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQ2FtZXJhTW9kZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQ2FtZXJhTW9kZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJDYW1lcmFNb2RlIHtcbiAgICByZXR1cm4gUEJDYW1lcmFNb2RlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJDYW1lcmFNb2RlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJDYW1lcmFNb2RlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ2FtZXJhTW9kZVZhbHVlIH0gZnJvbSAnLi9jb21tb24vQ2FtZXJhTW9kZVZhbHVlLmdlbidcbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICcuL2NvbW1vbi9WZWN0b3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQ2FtZXJhTW9kZUFyZWEge1xuICBhcmVhOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIG1vZGU6IENhbWVyYU1vZGVWYWx1ZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJDYW1lcmFNb2RlQXJlYSgpOiBQQkNhbWVyYU1vZGVBcmVhIHtcbiAgcmV0dXJuIHsgYXJlYTogdW5kZWZpbmVkLCBtb2RlOiAwIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJDYW1lcmFNb2RlQXJlYSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQ2FtZXJhTW9kZUFyZWEsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5hcmVhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UuYXJlYSwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tb2RlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLm1vZGUpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkNhbWVyYU1vZGVBcmVhIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkNhbWVyYU1vZGVBcmVhKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5hcmVhID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UubW9kZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkNhbWVyYU1vZGVBcmVhIH0gZnJvbSAnLi9wYi9DYW1lcmFNb2RlQXJlYS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDcxXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDYW1lcmFNb2RlQXJlYVNjaGVtYTogSVNjaGVtYTxQQkNhbWVyYU1vZGVBcmVhPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkNhbWVyYU1vZGVBcmVhLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJDYW1lcmFNb2RlQXJlYS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJDYW1lcmFNb2RlQXJlYSB7XG4gICAgcmV0dXJuIFBCQ2FtZXJhTW9kZUFyZWEuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkNhbWVyYU1vZGVBcmVhIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJDYW1lcmFNb2RlQXJlYS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQ3lsaW5kZXJTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgcmFkaXVzVG9wPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNCb3R0b20/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQ3lsaW5kZXJTaGFwZSgpOiBQQkN5bGluZGVyU2hhcGUge1xuICByZXR1cm4ge1xuICAgIHdpdGhDb2xsaXNpb25zOiB1bmRlZmluZWQsXG4gICAgaXNQb2ludGVyQmxvY2tlcjogdW5kZWZpbmVkLFxuICAgIHZpc2libGU6IHVuZGVmaW5lZCxcbiAgICByYWRpdXNUb3A6IHVuZGVmaW5lZCxcbiAgICByYWRpdXNCb3R0b206IHVuZGVmaW5lZFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQ3lsaW5kZXJTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQ3lsaW5kZXJTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5yYWRpdXNUb3ApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJhZGl1c0JvdHRvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ1KS5mbG9hdChtZXNzYWdlLnJhZGl1c0JvdHRvbSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQ3lsaW5kZXJTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJDeWxpbmRlclNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNCb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkN5bGluZGVyU2hhcGUgfSBmcm9tICcuL3BiL0N5bGluZGVyU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxNlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ3lsaW5kZXJTaGFwZVNjaGVtYTogSVNjaGVtYTxQQkN5bGluZGVyU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQ3lsaW5kZXJTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQ3lsaW5kZXJTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJDeWxpbmRlclNoYXBlIHtcbiAgICByZXR1cm4gUEJDeWxpbmRlclNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJDeWxpbmRlclNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJDeWxpbmRlclNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJHTFRGU2hhcGUge1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgd2l0aENvbGxpc2lvbnM/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICBpc1BvaW50ZXJCbG9ja2VyPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIEhpZGRlbkNvbXBvbmVudCBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNTMgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgc3JjOiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCR0xURlNoYXBlKCk6IFBCR0xURlNoYXBlIHtcbiAgcmV0dXJuIHsgd2l0aENvbGxpc2lvbnM6IHVuZGVmaW5lZCwgaXNQb2ludGVyQmxvY2tlcjogdW5kZWZpbmVkLCB2aXNpYmxlOiB1bmRlZmluZWQsIHNyYzogJycgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkdMVEZTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCR0xURlNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNyYyAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzQpLnN0cmluZyhtZXNzYWdlLnNyYylcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCR0xURlNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkdMVEZTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnNyYyA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkdMVEZTaGFwZSB9IGZyb20gJy4vcGIvR0xURlNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNDFcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEdMVEZTaGFwZVNjaGVtYTogSVNjaGVtYTxQQkdMVEZTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJHTFRGU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkdMVEZTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJHTFRGU2hhcGUge1xuICAgIHJldHVybiBQQkdMVEZTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCR0xURlNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJHTFRGU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDb2xvcjMgfSBmcm9tICcuL2NvbW1vbi9Db2xvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBjb25zdCBlbnVtIFRleHR1cmVXcmFwTW9kZSB7XG4gIFJlcGVhdCA9IDAsXG4gIENsYW1wID0gMSxcbiAgTWlycm9yID0gMixcbiAgTWlycm9yT25jZSA9IDMsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIEZpbHRlck1vZGUge1xuICBQb2ludCA9IDAsXG4gIEJpbGluZWFyID0gMSxcbiAgVHJpbGluZWFyID0gMixcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gVHJhbnNwYXJlbmN5TW9kZSB7XG4gIE9wYXF1ZSA9IDAsXG4gIEFscGhhVGVzdCA9IDEsXG4gIEFscGhhQmxlbmQgPSAyLFxuICBBbHBoYVRlc3RBbmRBbHBoYUJsZW5kID0gMyxcbiAgQXV0byA9IDQsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNYXRlcmlhbCB7XG4gIC8qKiBkZWZhdWx0ID0gbnVsbCAqL1xuICB0ZXh0dXJlPzogUEJNYXRlcmlhbF9UZXh0dXJlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMC41LiByYW5nZSB2YWx1ZTogZnJvbSAwIHRvIDEgKi9cbiAgYWxwaGFUZXN0PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gIHRydWUgKi9cbiAgY2FzdFNoYWRvd3M/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gbnVsbCAqL1xuICBhbHBoYVRleHR1cmU/OiBQQk1hdGVyaWFsX1RleHR1cmUgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBudWxsICovXG4gIGVtaXNzaXZlVGV4dHVyZT86IFBCTWF0ZXJpYWxfVGV4dHVyZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IG51bGwgKi9cbiAgYnVtcFRleHR1cmU/OiBQQk1hdGVyaWFsX1RleHR1cmUgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSB3aGl0ZTsgKi9cbiAgYWxiZWRvQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBibGFjazsgKi9cbiAgZW1pc3NpdmVDb2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IHdoaXRlOyAqL1xuICByZWZsZWN0aXZpdHlDb2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IFRyYW5zcGFyZW5jeU1vZGUuQXV0byAqL1xuICB0cmFuc3BhcmVuY3lNb2RlPzogVHJhbnNwYXJlbmN5TW9kZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDAuNSAqL1xuICBtZXRhbGxpYz86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDAuNSAqL1xuICByb3VnaG5lc3M/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAxICovXG4gIGdsb3NzaW5lc3M/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAxICovXG4gIHNwZWN1bGFySW50ZW5zaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMiAqL1xuICBlbWlzc2l2ZUludGVuc2l0eT86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDEgKi9cbiAgZGlyZWN0SW50ZW5zaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNYXRlcmlhbF9UZXh0dXJlIHtcbiAgc3JjOiBzdHJpbmdcbiAgLyoqIGRlZmF1bHQgPSBUZXh0dXJlV3JhcE1vZGUuQ2xhbXAgKi9cbiAgd3JhcE1vZGU/OiBUZXh0dXJlV3JhcE1vZGUgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBGaWx0ZXJNb2RlLkJpbGluZWFyICovXG4gIGZpbHRlck1vZGU/OiBGaWx0ZXJNb2RlIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1hdGVyaWFsKCk6IFBCTWF0ZXJpYWwge1xuICByZXR1cm4ge1xuICAgIHRleHR1cmU6IHVuZGVmaW5lZCxcbiAgICBhbHBoYVRlc3Q6IHVuZGVmaW5lZCxcbiAgICBjYXN0U2hhZG93czogdW5kZWZpbmVkLFxuICAgIGFscGhhVGV4dHVyZTogdW5kZWZpbmVkLFxuICAgIGVtaXNzaXZlVGV4dHVyZTogdW5kZWZpbmVkLFxuICAgIGJ1bXBUZXh0dXJlOiB1bmRlZmluZWQsXG4gICAgYWxiZWRvQ29sb3I6IHVuZGVmaW5lZCxcbiAgICBlbWlzc2l2ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgcmVmbGVjdGl2aXR5Q29sb3I6IHVuZGVmaW5lZCxcbiAgICB0cmFuc3BhcmVuY3lNb2RlOiB1bmRlZmluZWQsXG4gICAgbWV0YWxsaWM6IHVuZGVmaW5lZCxcbiAgICByb3VnaG5lc3M6IHVuZGVmaW5lZCxcbiAgICBnbG9zc2luZXNzOiB1bmRlZmluZWQsXG4gICAgc3BlY3VsYXJJbnRlbnNpdHk6IHVuZGVmaW5lZCxcbiAgICBlbWlzc2l2ZUludGVuc2l0eTogdW5kZWZpbmVkLFxuICAgIGRpcmVjdEludGVuc2l0eTogdW5kZWZpbmVkXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNYXRlcmlhbCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWF0ZXJpYWwsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS50ZXh0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWF0ZXJpYWxfVGV4dHVyZS5lbmNvZGUobWVzc2FnZS50ZXh0dXJlLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFscGhhVGVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLmFscGhhVGVzdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY2FzdFNoYWRvd3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLmNhc3RTaGFkb3dzKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbHBoYVRleHR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNYXRlcmlhbF9UZXh0dXJlLmVuY29kZShtZXNzYWdlLmFscGhhVGV4dHVyZSwgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbWlzc2l2ZVRleHR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNYXRlcmlhbF9UZXh0dXJlLmVuY29kZShtZXNzYWdlLmVtaXNzaXZlVGV4dHVyZSwgd3JpdGVyLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5idW1wVGV4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1hdGVyaWFsX1RleHR1cmUuZW5jb2RlKG1lc3NhZ2UuYnVtcFRleHR1cmUsIHdyaXRlci51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxiZWRvQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLmFsYmVkb0NvbG9yLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVtaXNzaXZlQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLmVtaXNzaXZlQ29sb3IsIHdyaXRlci51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmVmbGVjdGl2aXR5Q29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLnJlZmxlY3Rpdml0eUNvbG9yLCB3cml0ZXIudWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRyYW5zcGFyZW5jeU1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4MCkuaW50MzIobWVzc2FnZS50cmFuc3BhcmVuY3lNb2RlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tZXRhbGxpYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDkzKS5mbG9hdChtZXNzYWdlLm1ldGFsbGljKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yb3VnaG5lc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMDEpLmZsb2F0KG1lc3NhZ2Uucm91Z2huZXNzKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5nbG9zc2luZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTA5KS5mbG9hdChtZXNzYWdlLmdsb3NzaW5lc3MpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNwZWN1bGFySW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTE3KS5mbG9hdChtZXNzYWdlLnNwZWN1bGFySW50ZW5zaXR5KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbWlzc2l2ZUludGVuc2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyNSkuZmxvYXQobWVzc2FnZS5lbWlzc2l2ZUludGVuc2l0eSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlyZWN0SW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMzKS5mbG9hdChtZXNzYWdlLmRpcmVjdEludGVuc2l0eSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWF0ZXJpYWwge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWF0ZXJpYWwoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnRleHR1cmUgPSBQQk1hdGVyaWFsX1RleHR1cmUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmFscGhhVGVzdCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuY2FzdFNoYWRvd3MgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2UuYWxwaGFUZXh0dXJlID0gUEJNYXRlcmlhbF9UZXh0dXJlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5lbWlzc2l2ZVRleHR1cmUgPSBQQk1hdGVyaWFsX1RleHR1cmUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLmJ1bXBUZXh0dXJlID0gUEJNYXRlcmlhbF9UZXh0dXJlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5hbGJlZG9Db2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIG1lc3NhZ2UuZW1pc3NpdmVDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2UucmVmbGVjdGl2aXR5Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgbWVzc2FnZS50cmFuc3BhcmVuY3lNb2RlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBtZXNzYWdlLm1ldGFsbGljID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIG1lc3NhZ2Uucm91Z2huZXNzID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIG1lc3NhZ2UuZ2xvc3NpbmVzcyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICBtZXNzYWdlLnNwZWN1bGFySW50ZW5zaXR5ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIG1lc3NhZ2UuZW1pc3NpdmVJbnRlbnNpdHkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgbWVzc2FnZS5kaXJlY3RJbnRlbnNpdHkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNYXRlcmlhbF9UZXh0dXJlKCk6IFBCTWF0ZXJpYWxfVGV4dHVyZSB7XG4gIHJldHVybiB7IHNyYzogJycsIHdyYXBNb2RlOiB1bmRlZmluZWQsIGZpbHRlck1vZGU6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWF0ZXJpYWxfVGV4dHVyZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWF0ZXJpYWxfVGV4dHVyZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnNyYyAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLnNyYylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud3JhcE1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS53cmFwTW9kZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZmlsdGVyTW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5pbnQzMihtZXNzYWdlLmZpbHRlck1vZGUpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1hdGVyaWFsX1RleHR1cmUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWF0ZXJpYWxfVGV4dHVyZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uuc3JjID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2Uud3JhcE1vZGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5maWx0ZXJNb2RlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCTWF0ZXJpYWwgfSBmcm9tICcuL3BiL01hdGVyaWFsLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTdcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1hdGVyaWFsU2NoZW1hOiBJU2NoZW1hPFBCTWF0ZXJpYWw+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCTWF0ZXJpYWwsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk1hdGVyaWFsLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk1hdGVyaWFsIHtcbiAgICByZXR1cm4gUEJNYXRlcmlhbC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTWF0ZXJpYWwge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk1hdGVyaWFsLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoUmVuZGVyZXIge1xuICBib3g6IFBCTWVzaFJlbmRlcmVyX0JveE1lc2ggfCB1bmRlZmluZWRcbiAgc3BoZXJlOiBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoIHwgdW5kZWZpbmVkXG4gIGN5bGluZGVyOiBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2ggfCB1bmRlZmluZWRcbiAgcGxhbmU6IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaCB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaFJlbmRlcmVyX0JveE1lc2gge1xuICB1dnM6IG51bWJlcltdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoIHtcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c1RvcD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgcmFkaXVzQm90dG9tPzogbnVtYmVyIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoIHtcbiAgdXZzOiBudW1iZXJbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2gge31cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyKCk6IFBCTWVzaFJlbmRlcmVyIHtcbiAgcmV0dXJuIHsgYm94OiB1bmRlZmluZWQsIHNwaGVyZTogdW5kZWZpbmVkLCBjeWxpbmRlcjogdW5kZWZpbmVkLCBwbGFuZTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoUmVuZGVyZXIgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk1lc2hSZW5kZXJlciwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmJveCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoLmVuY29kZShtZXNzYWdlLmJveCwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcGhlcmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaC5lbmNvZGUobWVzc2FnZS5zcGhlcmUsIHdyaXRlci51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY3lsaW5kZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoLmVuY29kZShtZXNzYWdlLmN5bGluZGVyLCB3cml0ZXIudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBsYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaC5lbmNvZGUobWVzc2FnZS5wbGFuZSwgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoUmVuZGVyZXIge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5ib3ggPSBQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5zcGhlcmUgPSBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5jeWxpbmRlciA9IFBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2UucGxhbmUgPSBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfQm94TWVzaCgpOiBQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoIHtcbiAgcmV0dXJuIHsgdXZzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaFJlbmRlcmVyX0JveE1lc2ggPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpXG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudXZzKSB7XG4gICAgICB3cml0ZXIuZmxvYXQodilcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpXG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaFJlbmRlcmVyX0JveE1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX0JveE1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvc1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoKCk6IFBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCB7XG4gIHJldHVybiB7IHJhZGl1c1RvcDogdW5kZWZpbmVkLCByYWRpdXNCb3R0b206IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnJhZGl1c1RvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzKS5mbG9hdChtZXNzYWdlLnJhZGl1c1RvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzQm90dG9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjEpLmZsb2F0KG1lc3NhZ2UucmFkaXVzQm90dG9tKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnJhZGl1c1RvcCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaCgpOiBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2gge1xuICByZXR1cm4geyB1dnM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpXG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudXZzKSB7XG4gICAgICB3cml0ZXIuZmxvYXQodilcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpXG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2goKTogUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCB7XG4gIHJldHVybiB7fVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoID0ge1xuICBlbmNvZGUoXzogUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJNZXNoUmVuZGVyZXIgfSBmcm9tICcuL3BiL01lc2hSZW5kZXJlci5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE4XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBNZXNoUmVuZGVyZXJTY2hlbWE6IElTY2hlbWE8UEJNZXNoUmVuZGVyZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCTWVzaFJlbmRlcmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJNZXNoUmVuZGVyZXIuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCTWVzaFJlbmRlcmVyIHtcbiAgICByZXR1cm4gUEJNZXNoUmVuZGVyZXIuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQk1lc2hSZW5kZXJlciB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCTWVzaFJlbmRlcmVyLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ29sb3IzIH0gZnJvbSAnLi9jb21tb24vQ29sb3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCTkZUU2hhcGUge1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgd2l0aENvbGxpc2lvbnM/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICBpc1BvaW50ZXJCbG9ja2VyPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIEhpZGRlbkNvbXBvbmVudCBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNTMgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgc3JjOiBzdHJpbmdcbiAgYXNzZXRJZD86IHN0cmluZyB8IHVuZGVmaW5lZFxuICBzdHlsZT86IG51bWJlciB8IHVuZGVmaW5lZFxuICBjb2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJORlRTaGFwZSgpOiBQQk5GVFNoYXBlIHtcbiAgcmV0dXJuIHtcbiAgICB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLFxuICAgIGlzUG9pbnRlckJsb2NrZXI6IHVuZGVmaW5lZCxcbiAgICB2aXNpYmxlOiB1bmRlZmluZWQsXG4gICAgc3JjOiAnJyxcbiAgICBhc3NldElkOiB1bmRlZmluZWQsXG4gICAgc3R5bGU6IHVuZGVmaW5lZCxcbiAgICBjb2xvcjogdW5kZWZpbmVkXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJORlRTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTkZUU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3JjICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNCkuc3RyaW5nKG1lc3NhZ2Uuc3JjKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hc3NldElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDIpLnN0cmluZyhtZXNzYWdlLmFzc2V0SWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnN0eWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmludDMyKG1lc3NhZ2Uuc3R5bGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5jb2xvciwgd3JpdGVyLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJORlRTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJORlRTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnNyYyA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmFzc2V0SWQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5zdHlsZSA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2UuY29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk5GVFNoYXBlIH0gZnJvbSAnLi9wYi9ORlRTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDQwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBORlRTaGFwZVNjaGVtYTogSVNjaGVtYTxQQk5GVFNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk5GVFNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJORlRTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJORlRTaGFwZSB7XG4gICAgcmV0dXJuIFBCTkZUU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQk5GVFNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJORlRTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlckRvd24ge1xuICAvKiogZGVmYXVsdD1BY3Rpb25CdXR0b24uQU5ZICovXG4gIGJ1dHRvbj86IEFjdGlvbkJ1dHRvbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0nSW50ZXJhY3QnICovXG4gIGhvdmVyVGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xMCAqL1xuICBtYXhEaXN0YW5jZT86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHNob3dGZWVkYmFjaz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCT25Qb2ludGVyRG93bigpOiBQQk9uUG9pbnRlckRvd24ge1xuICByZXR1cm4geyBidXR0b246IHVuZGVmaW5lZCwgaG92ZXJUZXh0OiB1bmRlZmluZWQsIG1heERpc3RhbmNlOiB1bmRlZmluZWQsIHNob3dGZWVkYmFjazogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJPblBvaW50ZXJEb3duID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJPblBvaW50ZXJEb3duLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYnV0dG9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuaW50MzIobWVzc2FnZS5idXR0b24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmhvdmVyVGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS5ob3ZlclRleHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heERpc3RhbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjkpLmZsb2F0KG1lc3NhZ2UubWF4RGlzdGFuY2UpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNob3dGZWVkYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMyKS5ib29sKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJPblBvaW50ZXJEb3duIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlckRvd24oKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmJ1dHRvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmhvdmVyVGV4dCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLm1heERpc3RhbmNlID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5zaG93RmVlZGJhY2sgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCT25Qb2ludGVyRG93biB9IGZyb20gJy4vcGIvT25Qb2ludGVyRG93bi5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDYwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJEb3duU2NoZW1hOiBJU2NoZW1hPFBCT25Qb2ludGVyRG93bj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJPblBvaW50ZXJEb3duLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJPblBvaW50ZXJEb3duLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk9uUG9pbnRlckRvd24ge1xuICAgIHJldHVybiBQQk9uUG9pbnRlckRvd24uZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQk9uUG9pbnRlckRvd24ge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk9uUG9pbnRlckRvd24uZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tICcuL2NvbW1vbi9BY3Rpb25CdXR0b24uZ2VuJ1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJy4vY29tbW9uL1ZlY3RvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJPblBvaW50ZXJEb3duUmVzdWx0IHtcbiAgYnV0dG9uOiBBY3Rpb25CdXR0b25cbiAgbWVzaE5hbWU6IHN0cmluZ1xuICBvcmlnaW46IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZGlyZWN0aW9uOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIHBvaW50OiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIG5vcm1hbDogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXN0YW5jZTogbnVtYmVyXG4gIHRpbWVzdGFtcDogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk9uUG9pbnRlckRvd25SZXN1bHQoKTogUEJPblBvaW50ZXJEb3duUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBidXR0b246IDAsXG4gICAgbWVzaE5hbWU6ICcnLFxuICAgIG9yaWdpbjogdW5kZWZpbmVkLFxuICAgIGRpcmVjdGlvbjogdW5kZWZpbmVkLFxuICAgIHBvaW50OiB1bmRlZmluZWQsXG4gICAgbm9ybWFsOiB1bmRlZmluZWQsXG4gICAgZGlzdGFuY2U6IDAsXG4gICAgdGltZXN0YW1wOiAwXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJPblBvaW50ZXJEb3duUmVzdWx0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJPblBvaW50ZXJEb3duUmVzdWx0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYnV0dG9uICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWVzaE5hbWUgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS5tZXNoTmFtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2Uub3JpZ2luLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLmRpcmVjdGlvbiwgd3JpdGVyLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb2ludCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLnBvaW50LCB3cml0ZXIudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5vcm1hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLm5vcm1hbCwgd3JpdGVyLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXN0YW5jZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2OSkuZmxvYXQobWVzc2FnZS5kaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGltZXN0YW1wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDcyKS5pbnQzMihtZXNzYWdlLnRpbWVzdGFtcClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCT25Qb2ludGVyRG93blJlc3VsdCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJPblBvaW50ZXJEb3duUmVzdWx0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5idXR0b24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5tZXNoTmFtZSA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdGlvbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLnBvaW50ID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2Uubm9ybWFsID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIG1lc3NhZ2UuZGlzdGFuY2UgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLnRpbWVzdGFtcCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCT25Qb2ludGVyRG93blJlc3VsdCB9IGZyb20gJy4vcGIvT25Qb2ludGVyRG93blJlc3VsdC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDY2XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hOiBJU2NoZW1hPFBCT25Qb2ludGVyRG93blJlc3VsdD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJPblBvaW50ZXJEb3duUmVzdWx0LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJPblBvaW50ZXJEb3duUmVzdWx0LmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk9uUG9pbnRlckRvd25SZXN1bHQge1xuICAgIHJldHVybiBQQk9uUG9pbnRlckRvd25SZXN1bHQuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQk9uUG9pbnRlckRvd25SZXN1bHQge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk9uUG9pbnRlckRvd25SZXN1bHQuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tICcuL2NvbW1vbi9BY3Rpb25CdXR0b24uZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJPblBvaW50ZXJVcCB7XG4gIC8qKiBkZWZhdWx0PUFjdGlvbkJ1dHRvbi5BTlkgKi9cbiAgYnV0dG9uPzogQWN0aW9uQnV0dG9uIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSdJbnRlcmFjdCcgKi9cbiAgaG92ZXJUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEwICovXG4gIG1heERpc3RhbmNlPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgc2hvd0ZlZWRiYWNrPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJPblBvaW50ZXJVcCgpOiBQQk9uUG9pbnRlclVwIHtcbiAgcmV0dXJuIHsgYnV0dG9uOiB1bmRlZmluZWQsIGhvdmVyVGV4dDogdW5kZWZpbmVkLCBtYXhEaXN0YW5jZTogdW5kZWZpbmVkLCBzaG93RmVlZGJhY2s6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCT25Qb2ludGVyVXAgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk9uUG9pbnRlclVwLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYnV0dG9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuaW50MzIobWVzc2FnZS5idXR0b24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmhvdmVyVGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS5ob3ZlclRleHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heERpc3RhbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjkpLmZsb2F0KG1lc3NhZ2UubWF4RGlzdGFuY2UpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNob3dGZWVkYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMyKS5ib29sKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJPblBvaW50ZXJVcCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJPblBvaW50ZXJVcCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYnV0dG9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaG92ZXJUZXh0ID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UubWF4RGlzdGFuY2UgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnNob3dGZWVkYmFjayA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJPblBvaW50ZXJVcCB9IGZyb20gJy4vcGIvT25Qb2ludGVyVXAuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA2MVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT25Qb2ludGVyVXBTY2hlbWE6IElTY2hlbWE8UEJPblBvaW50ZXJVcD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJPblBvaW50ZXJVcCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCT25Qb2ludGVyVXAuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCT25Qb2ludGVyVXAge1xuICAgIHJldHVybiBQQk9uUG9pbnRlclVwLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJPblBvaW50ZXJVcCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCT25Qb2ludGVyVXAuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tICcuL2NvbW1vbi9BY3Rpb25CdXR0b24uZ2VuJ1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJy4vY29tbW9uL1ZlY3RvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJPblBvaW50ZXJVcFJlc3VsdCB7XG4gIGJ1dHRvbjogQWN0aW9uQnV0dG9uXG4gIG1lc2hOYW1lOiBzdHJpbmdcbiAgb3JpZ2luOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGRpcmVjdGlvbjogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBwb2ludDogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBub3JtYWw6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZGlzdGFuY2U6IG51bWJlclxuICB0aW1lc3RhbXA6IG51bWJlclxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJPblBvaW50ZXJVcFJlc3VsdCgpOiBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBidXR0b246IDAsXG4gICAgbWVzaE5hbWU6ICcnLFxuICAgIG9yaWdpbjogdW5kZWZpbmVkLFxuICAgIGRpcmVjdGlvbjogdW5kZWZpbmVkLFxuICAgIHBvaW50OiB1bmRlZmluZWQsXG4gICAgbm9ybWFsOiB1bmRlZmluZWQsXG4gICAgZGlzdGFuY2U6IDAsXG4gICAgdGltZXN0YW1wOiAwXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJPblBvaW50ZXJVcFJlc3VsdCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCT25Qb2ludGVyVXBSZXN1bHQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuYnV0dG9uKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tZXNoTmFtZSAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLm1lc2hOYW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5vcmlnaW4sIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UuZGlyZWN0aW9uLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvaW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UucG9pbnQsIHdyaXRlci51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uubm9ybWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2Uubm9ybWFsLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpc3RhbmNlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY5KS5mbG9hdChtZXNzYWdlLmRpc3RhbmNlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50aW1lc3RhbXAgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDMyKG1lc3NhZ2UudGltZXN0YW1wKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJPblBvaW50ZXJVcFJlc3VsdCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJPblBvaW50ZXJVcFJlc3VsdCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuYnV0dG9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UubWVzaE5hbWUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5vcmlnaW4gPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5kaXJlY3Rpb24gPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5wb2ludCA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLm5vcm1hbCA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLmRpc3RhbmNlID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS50aW1lc3RhbXAgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk9uUG9pbnRlclVwUmVzdWx0IH0gZnJvbSAnLi9wYi9PblBvaW50ZXJVcFJlc3VsdC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDY1XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcFJlc3VsdFNjaGVtYTogSVNjaGVtYTxQQk9uUG9pbnRlclVwUmVzdWx0PiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlclVwUmVzdWx0LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJPblBvaW50ZXJVcFJlc3VsdC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJPblBvaW50ZXJVcFJlc3VsdCB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyVXBSZXN1bHQuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJPblBvaW50ZXJVcFJlc3VsdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCUGxhbmVTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICB1dnM6IG51bWJlcltdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlBsYW5lU2hhcGUoKTogUEJQbGFuZVNoYXBlIHtcbiAgcmV0dXJuIHsgd2l0aENvbGxpc2lvbnM6IHVuZGVmaW5lZCwgaXNQb2ludGVyQmxvY2tlcjogdW5kZWZpbmVkLCB2aXNpYmxlOiB1bmRlZmluZWQsIHV2czogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlBsYW5lU2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlBsYW5lU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpXG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudXZzKSB7XG4gICAgICB3cml0ZXIuZmxvYXQodilcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpXG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCUGxhbmVTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJQbGFuZVNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCUGxhbmVTaGFwZSB9IGZyb20gJy4vcGIvUGxhbmVTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE0XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQbGFuZVNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCUGxhbmVTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJQbGFuZVNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJQbGFuZVNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlBsYW5lU2hhcGUge1xuICAgIHJldHVybiBQQlBsYW5lU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlBsYW5lU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlBsYW5lU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlBvaW50ZXJMb2NrIHtcbiAgaXNQb2ludGVyTG9ja2VkOiBib29sZWFuXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlBvaW50ZXJMb2NrKCk6IFBCUG9pbnRlckxvY2sge1xuICByZXR1cm4geyBpc1BvaW50ZXJMb2NrZWQ6IGZhbHNlIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJQb2ludGVyTG9jayA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCUG9pbnRlckxvY2ssIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJMb2NrZWQgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLmlzUG9pbnRlckxvY2tlZClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCUG9pbnRlckxvY2sge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCUG9pbnRlckxvY2soKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckxvY2tlZCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJQb2ludGVyTG9jayB9IGZyb20gJy4vcGIvUG9pbnRlckxvY2suZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA3NFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUG9pbnRlckxvY2tTY2hlbWE6IElTY2hlbWE8UEJQb2ludGVyTG9jaz4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJQb2ludGVyTG9jaywgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCUG9pbnRlckxvY2suZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCUG9pbnRlckxvY2sge1xuICAgIHJldHVybiBQQlBvaW50ZXJMb2NrLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJQb2ludGVyTG9jayB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCUG9pbnRlckxvY2suZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlNwaGVyZVNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlNwaGVyZVNoYXBlKCk6IFBCU3BoZXJlU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCU3BoZXJlU2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlNwaGVyZVNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlNwaGVyZVNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlNwaGVyZVNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCU3BoZXJlU2hhcGUgfSBmcm9tICcuL3BiL1NwaGVyZVNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTVcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFNwaGVyZVNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCU3BoZXJlU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCU3BoZXJlU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlNwaGVyZVNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlNwaGVyZVNoYXBlIHtcbiAgICByZXR1cm4gUEJTcGhlcmVTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCU3BoZXJlU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlNwaGVyZVNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ29sb3IzIH0gZnJvbSAnLi9jb21tb24vQ29sb3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCVGV4dFNoYXBlIHtcbiAgdGV4dDogc3RyaW5nXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBmb250Pzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMGYgKi9cbiAgb3BhY2l0eT86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xMCAqL1xuICBmb250U2l6ZT86IG51bWJlciB8IHVuZGVmaW5lZFxuICBmb250QXV0b1NpemU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSdjZW50ZXInICovXG4gIGhUZXh0QWxpZ24/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9J2NlbnRlcicgKi9cbiAgdlRleHRBbGlnbj86IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xICovXG4gIHdpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEgKi9cbiAgaGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHBhZGRpbmdUb3A/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgcGFkZGluZ1JpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHBhZGRpbmdCb3R0b20/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgcGFkZGluZ0xlZnQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgbGluZVNwYWNpbmc/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgbGluZUNvdW50PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHRleHRXcmFwcGluZz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgc2hhZG93Qmx1cj86IG51bWJlciB8IHVuZGVmaW5lZFxuICBzaGFkb3dPZmZzZXRYPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHNoYWRvd09mZnNldFk/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgb3V0bGluZVdpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSgxLjAsMS4wLDEuMCkgKi9cbiAgc2hhZG93Q29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9KDEuMCwxLjAsMS4wKSAqL1xuICBvdXRsaW5lQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9KDEuMCwxLjAsMS4wKSAqL1xuICB0ZXh0Q29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCVGV4dFNoYXBlKCk6IFBCVGV4dFNoYXBlIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiAnJyxcbiAgICB2aXNpYmxlOiB1bmRlZmluZWQsXG4gICAgZm9udDogdW5kZWZpbmVkLFxuICAgIG9wYWNpdHk6IHVuZGVmaW5lZCxcbiAgICBmb250U2l6ZTogdW5kZWZpbmVkLFxuICAgIGZvbnRBdXRvU2l6ZTogdW5kZWZpbmVkLFxuICAgIGhUZXh0QWxpZ246IHVuZGVmaW5lZCxcbiAgICB2VGV4dEFsaWduOiB1bmRlZmluZWQsXG4gICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICBoZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nVG9wOiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ1JpZ2h0OiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ0JvdHRvbTogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdMZWZ0OiB1bmRlZmluZWQsXG4gICAgbGluZVNwYWNpbmc6IHVuZGVmaW5lZCxcbiAgICBsaW5lQ291bnQ6IHVuZGVmaW5lZCxcbiAgICB0ZXh0V3JhcHBpbmc6IHVuZGVmaW5lZCxcbiAgICBzaGFkb3dCbHVyOiB1bmRlZmluZWQsXG4gICAgc2hhZG93T2Zmc2V0WDogdW5kZWZpbmVkLFxuICAgIHNoYWRvd09mZnNldFk6IHVuZGVmaW5lZCxcbiAgICBvdXRsaW5lV2lkdGg6IHVuZGVmaW5lZCxcbiAgICBzaGFkb3dDb2xvcjogdW5kZWZpbmVkLFxuICAgIG91dGxpbmVDb2xvcjogdW5kZWZpbmVkLFxuICAgIHRleHRDb2xvcjogdW5kZWZpbmVkXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJUZXh0U2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlRleHRTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnRleHQgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS50ZXh0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mb250ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLmZvbnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5vcGFjaXR5KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mb250U2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ1KS5mbG9hdChtZXNzYWdlLmZvbnRTaXplKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mb250QXV0b1NpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0OCkuYm9vbChtZXNzYWdlLmZvbnRBdXRvU2l6ZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaFRleHRBbGlnbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU4KS5zdHJpbmcobWVzc2FnZS5oVGV4dEFsaWduKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52VGV4dEFsaWduICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjYpLnN0cmluZyhtZXNzYWdlLnZUZXh0QWxpZ24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLndpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzcpLmZsb2F0KG1lc3NhZ2Uud2lkdGgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDg1KS5mbG9hdChtZXNzYWdlLmhlaWdodClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ1RvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDkzKS5mbG9hdChtZXNzYWdlLnBhZGRpbmdUb3ApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdSaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwMSkuZmxvYXQobWVzc2FnZS5wYWRkaW5nUmlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdCb3R0b20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMDkpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ0JvdHRvbSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ0xlZnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMTcpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ0xlZnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmxpbmVTcGFjaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI1KS5mbG9hdChtZXNzYWdlLmxpbmVTcGFjaW5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5saW5lQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMjgpLmludDMyKG1lc3NhZ2UubGluZUNvdW50KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50ZXh0V3JhcHBpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMzYpLmJvb2wobWVzc2FnZS50ZXh0V3JhcHBpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd0JsdXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNDkpLmZsb2F0KG1lc3NhZ2Uuc2hhZG93Qmx1cilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE1NykuZmxvYXQobWVzc2FnZS5zaGFkb3dPZmZzZXRYKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaGFkb3dPZmZzZXRZICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTY1KS5mbG9hdChtZXNzYWdlLnNoYWRvd09mZnNldFkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm91dGxpbmVXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE3MykuZmxvYXQobWVzc2FnZS5vdXRsaW5lV2lkdGgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5zaGFkb3dDb2xvciwgd3JpdGVyLnVpbnQzMigxNzgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3V0bGluZUNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5vdXRsaW5lQ29sb3IsIHdyaXRlci51aW50MzIoMTg2KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRleHRDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UudGV4dENvbG9yLCB3cml0ZXIudWludDMyKDE5NCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJUZXh0U2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCVGV4dFNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0ID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5mb250ID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uub3BhY2l0eSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuZm9udFNpemUgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLmZvbnRBdXRvU2l6ZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5oVGV4dEFsaWduID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIG1lc3NhZ2UudlRleHRBbGlnbiA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLndpZHRoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIG1lc3NhZ2UuaGVpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ1RvcCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBtZXNzYWdlLnBhZGRpbmdSaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBtZXNzYWdlLnBhZGRpbmdCb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nTGVmdCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBtZXNzYWdlLmxpbmVTcGFjaW5nID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIG1lc3NhZ2UubGluZUNvdW50ID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgIG1lc3NhZ2UudGV4dFdyYXBwaW5nID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgbWVzc2FnZS5zaGFkb3dCbHVyID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICBtZXNzYWdlLnNoYWRvd09mZnNldFkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgbWVzc2FnZS5vdXRsaW5lV2lkdGggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgbWVzc2FnZS5zaGFkb3dDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICBtZXNzYWdlLm91dGxpbmVDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICBtZXNzYWdlLnRleHRDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCVGV4dFNoYXBlIH0gZnJvbSAnLi9wYi9UZXh0U2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAzMFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVGV4dFNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCVGV4dFNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlRleHRTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCVGV4dFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlRleHRTaGFwZSB7XG4gICAgcmV0dXJuIFBCVGV4dFNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJUZXh0U2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlRleHRTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlVpVGV4dCB7XG4gIHRleHQ6IHN0cmluZ1xuICB0ZXh0Q29sb3I6IENvbG9yMyB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJVaVRleHQoKTogUEJVaVRleHQge1xuICByZXR1cm4geyB0ZXh0OiAnJywgdGV4dENvbG9yOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlVpVGV4dCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCVWlUZXh0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UudGV4dCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLnRleHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRleHRDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UudGV4dENvbG9yLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlVpVGV4dCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJVaVRleHQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnRleHQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlVpVGV4dCB9IGZyb20gJy4vcGIvVWlUZXh0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNTJcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFVpVGV4dFNjaGVtYTogSVNjaGVtYTxQQlVpVGV4dD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJVaVRleHQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlVpVGV4dC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJVaVRleHQge1xuICAgIHJldHVybiBQQlVpVGV4dC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCVWlUZXh0IHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJVaVRleHQuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlZpc2liaWxpdHlDb21wb25lbnQge1xuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlZpc2liaWxpdHlDb21wb25lbnQoKTogUEJWaXNpYmlsaXR5Q29tcG9uZW50IHtcbiAgcmV0dXJuIHsgdmlzaWJsZTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJWaXNpYmlsaXR5Q29tcG9uZW50ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJWaXNpYmlsaXR5Q29tcG9uZW50LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJWaXNpYmlsaXR5Q29tcG9uZW50IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlZpc2liaWxpdHlDb21wb25lbnQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCVmlzaWJpbGl0eUNvbXBvbmVudCB9IGZyb20gJy4vcGIvVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDgxXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hOiBJU2NoZW1hPFBCVmlzaWJpbGl0eUNvbXBvbmVudD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJWaXNpYmlsaXR5Q29tcG9uZW50LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJWaXNpYmlsaXR5Q29tcG9uZW50LmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlZpc2liaWxpdHlDb21wb25lbnQge1xuICAgIHJldHVybiBQQlZpc2liaWxpdHlDb21wb25lbnQuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlZpc2liaWxpdHlDb21wb25lbnQge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlZpc2liaWxpdHlDb21wb25lbnQuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgSUVuZ2luZSB9IGZyb20gJy4uLy4uL2VuZ2luZS90eXBlcydcbmltcG9ydCAqIGFzIFRyYW5zZm9ybVNjaGVtYSBmcm9tICcuLi9sZWdhY3kvVHJhbnNmb3JtJ1xuaW1wb3J0ICogYXMgQW5pbWF0b3JTY2hlbWEgZnJvbSAnLi9BbmltYXRvci5nZW4nXG5pbXBvcnQgKiBhcyBBdWRpb1NvdXJjZVNjaGVtYSBmcm9tICcuL0F1ZGlvU291cmNlLmdlbidcbmltcG9ydCAqIGFzIEF2YXRhckF0dGFjaFNjaGVtYSBmcm9tICcuL0F2YXRhckF0dGFjaC5nZW4nXG5pbXBvcnQgKiBhcyBBdmF0YXJNb2RpZmllckFyZWFTY2hlbWEgZnJvbSAnLi9BdmF0YXJNb2RpZmllckFyZWEuZ2VuJ1xuaW1wb3J0ICogYXMgQXZhdGFyU2hhcGVTY2hlbWEgZnJvbSAnLi9BdmF0YXJTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBCaWxsYm9hcmRTY2hlbWEgZnJvbSAnLi9CaWxsYm9hcmQuZ2VuJ1xuaW1wb3J0ICogYXMgQm94U2hhcGVTY2hlbWEgZnJvbSAnLi9Cb3hTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBDYW1lcmFNb2RlU2NoZW1hIGZyb20gJy4vQ2FtZXJhTW9kZS5nZW4nXG5pbXBvcnQgKiBhcyBDYW1lcmFNb2RlQXJlYVNjaGVtYSBmcm9tICcuL0NhbWVyYU1vZGVBcmVhLmdlbidcbmltcG9ydCAqIGFzIEN5bGluZGVyU2hhcGVTY2hlbWEgZnJvbSAnLi9DeWxpbmRlclNoYXBlLmdlbidcbmltcG9ydCAqIGFzIEdMVEZTaGFwZVNjaGVtYSBmcm9tICcuL0dMVEZTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBNYXRlcmlhbFNjaGVtYSBmcm9tICcuL01hdGVyaWFsLmdlbidcbmltcG9ydCAqIGFzIE1lc2hSZW5kZXJlclNjaGVtYSBmcm9tICcuL01lc2hSZW5kZXJlci5nZW4nXG5pbXBvcnQgKiBhcyBORlRTaGFwZVNjaGVtYSBmcm9tICcuL05GVFNoYXBlLmdlbidcbmltcG9ydCAqIGFzIE9uUG9pbnRlckRvd25TY2hlbWEgZnJvbSAnLi9PblBvaW50ZXJEb3duLmdlbidcbmltcG9ydCAqIGFzIE9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEgZnJvbSAnLi9PblBvaW50ZXJEb3duUmVzdWx0LmdlbidcbmltcG9ydCAqIGFzIE9uUG9pbnRlclVwU2NoZW1hIGZyb20gJy4vT25Qb2ludGVyVXAuZ2VuJ1xuaW1wb3J0ICogYXMgT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEgZnJvbSAnLi9PblBvaW50ZXJVcFJlc3VsdC5nZW4nXG5pbXBvcnQgKiBhcyBQbGFuZVNoYXBlU2NoZW1hIGZyb20gJy4vUGxhbmVTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBQb2ludGVyTG9ja1NjaGVtYSBmcm9tICcuL1BvaW50ZXJMb2NrLmdlbidcbmltcG9ydCAqIGFzIFNwaGVyZVNoYXBlU2NoZW1hIGZyb20gJy4vU3BoZXJlU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgVGV4dFNoYXBlU2NoZW1hIGZyb20gJy4vVGV4dFNoYXBlLmdlbidcbmltcG9ydCAqIGFzIFVpVGV4dFNjaGVtYSBmcm9tICcuL1VpVGV4dC5nZW4nXG5pbXBvcnQgKiBhcyBWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hIGZyb20gJy4vVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4nXG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVMaWJyYXJ5Q29tcG9uZW50cyh7XG4gIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWFcbn06IFBpY2s8SUVuZ2luZSwgJ2RlZmluZUNvbXBvbmVudEZyb21TY2hlbWEnPikge1xuICByZXR1cm4ge1xuXHRcdEFuaW1hdG9yOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEFuaW1hdG9yU2NoZW1hLkFuaW1hdG9yU2NoZW1hLCBBbmltYXRvclNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEF1ZGlvU291cmNlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEF1ZGlvU291cmNlU2NoZW1hLkF1ZGlvU291cmNlU2NoZW1hLCBBdWRpb1NvdXJjZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEF2YXRhckF0dGFjaDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShBdmF0YXJBdHRhY2hTY2hlbWEuQXZhdGFyQXR0YWNoU2NoZW1hLCBBdmF0YXJBdHRhY2hTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRBdmF0YXJNb2RpZmllckFyZWE6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYSwgQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0QXZhdGFyU2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQXZhdGFyU2hhcGVTY2hlbWEuQXZhdGFyU2hhcGVTY2hlbWEsIEF2YXRhclNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0QmlsbGJvYXJkOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEJpbGxib2FyZFNjaGVtYS5CaWxsYm9hcmRTY2hlbWEsIEJpbGxib2FyZFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEJveFNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEJveFNoYXBlU2NoZW1hLkJveFNoYXBlU2NoZW1hLCBCb3hTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdENhbWVyYU1vZGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQ2FtZXJhTW9kZVNjaGVtYS5DYW1lcmFNb2RlU2NoZW1hLCBDYW1lcmFNb2RlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0Q2FtZXJhTW9kZUFyZWE6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQ2FtZXJhTW9kZUFyZWFTY2hlbWEuQ2FtZXJhTW9kZUFyZWFTY2hlbWEsIENhbWVyYU1vZGVBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0Q3lsaW5kZXJTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShDeWxpbmRlclNoYXBlU2NoZW1hLkN5bGluZGVyU2hhcGVTY2hlbWEsIEN5bGluZGVyU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRHTFRGU2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoR0xURlNoYXBlU2NoZW1hLkdMVEZTaGFwZVNjaGVtYSwgR0xURlNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0TWF0ZXJpYWw6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoTWF0ZXJpYWxTY2hlbWEuTWF0ZXJpYWxTY2hlbWEsIE1hdGVyaWFsU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0TWVzaFJlbmRlcmVyOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE1lc2hSZW5kZXJlclNjaGVtYS5NZXNoUmVuZGVyZXJTY2hlbWEsIE1lc2hSZW5kZXJlclNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE5GVFNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE5GVFNoYXBlU2NoZW1hLk5GVFNoYXBlU2NoZW1hLCBORlRTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE9uUG9pbnRlckRvd246IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoT25Qb2ludGVyRG93blNjaGVtYS5PblBvaW50ZXJEb3duU2NoZW1hLCBPblBvaW50ZXJEb3duU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0T25Qb2ludGVyRG93blJlc3VsdDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShPblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLk9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEsIE9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRPblBvaW50ZXJVcDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShPblBvaW50ZXJVcFNjaGVtYS5PblBvaW50ZXJVcFNjaGVtYSwgT25Qb2ludGVyVXBTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRPblBvaW50ZXJVcFJlc3VsdDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShPblBvaW50ZXJVcFJlc3VsdFNjaGVtYS5PblBvaW50ZXJVcFJlc3VsdFNjaGVtYSwgT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRQbGFuZVNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFBsYW5lU2hhcGVTY2hlbWEuUGxhbmVTaGFwZVNjaGVtYSwgUGxhbmVTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFBvaW50ZXJMb2NrOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFBvaW50ZXJMb2NrU2NoZW1hLlBvaW50ZXJMb2NrU2NoZW1hLCBQb2ludGVyTG9ja1NjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFNwaGVyZVNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFNwaGVyZVNoYXBlU2NoZW1hLlNwaGVyZVNoYXBlU2NoZW1hLCBTcGhlcmVTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFRleHRTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShUZXh0U2hhcGVTY2hlbWEuVGV4dFNoYXBlU2NoZW1hLCBUZXh0U2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRVaVRleHQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVWlUZXh0U2NoZW1hLlVpVGV4dFNjaGVtYSwgVWlUZXh0U2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0VmlzaWJpbGl0eUNvbXBvbmVudDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLlZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEsIFZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEuQ09NUE9ORU5UX0lEKSxcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vZW5naW5lL2VudGl0eSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uLCBJRW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNmb3JtVHlwZSA9IHtcbiAgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9XG4gIHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXI7IHc6IG51bWJlciB9XG4gIHNjYWxlOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfVxuICBwYXJlbnQ/OiBFbnRpdHlcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IFRSQU5TRk9STV9MRU5HVEggPSA0NFxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgVHJhbnNmb3JtU2NoZW1hOiBJU2NoZW1hPFRyYW5zZm9ybVR5cGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFRyYW5zZm9ybVR5cGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwdHIgPSBidWlsZGVyLmluY3JlbWVudFdyaXRlT2Zmc2V0KFRSQU5TRk9STV9MRU5HVEgpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciwgdmFsdWUucG9zaXRpb24ueClcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgNCwgdmFsdWUucG9zaXRpb24ueSlcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgOCwgdmFsdWUucG9zaXRpb24ueilcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMTIsIHZhbHVlLnJvdGF0aW9uLngpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDE2LCB2YWx1ZS5yb3RhdGlvbi55KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAyMCwgdmFsdWUucm90YXRpb24ueilcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMjQsIHZhbHVlLnJvdGF0aW9uLncpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDI4LCB2YWx1ZS5zY2FsZS54KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAzMiwgdmFsdWUuc2NhbGUueSlcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMzYsIHZhbHVlLnNjYWxlLnopXG4gICAgYnVpbGRlci5zZXRVaW50MzIocHRyICsgNDAsIHZhbHVlLnBhcmVudCB8fCAwKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBUcmFuc2Zvcm1UeXBlIHtcbiAgICBjb25zdCBwdHIgPSByZWFkZXIuaW5jcmVtZW50UmVhZE9mZnNldChUUkFOU0ZPUk1fTEVOR1RIKVxuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB4OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIpLFxuICAgICAgICB5OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyA0KSxcbiAgICAgICAgejogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgOClcbiAgICAgIH0sXG4gICAgICByb3RhdGlvbjoge1xuICAgICAgICB4OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAxMiksXG4gICAgICAgIHk6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDE2KSxcbiAgICAgICAgejogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMjApLFxuICAgICAgICB3OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAyNClcbiAgICAgIH0sXG4gICAgICBzY2FsZToge1xuICAgICAgICB4OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAyOCksXG4gICAgICAgIHk6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDMyKSxcbiAgICAgICAgejogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMzYpXG4gICAgICB9LFxuICAgICAgcGFyZW50OiByZWFkZXIuZ2V0VWludDMyKHB0ciArIDQwKSBhcyBFbnRpdHlcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZSgpOiBUcmFuc2Zvcm1UeXBlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IHsgeDogMCwgeTogMCwgejogMCB9LFxuICAgICAgc2NhbGU6IHsgeDogMSwgeTogMSwgejogMSB9LFxuICAgICAgcm90YXRpb246IHsgeDogMCwgeTogMCwgejogMCwgdzogMSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVUcmFuc2Zvcm1Db21wb25lbnQoe1xuICBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hXG59OiBQaWNrPElFbmdpbmUsICdkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hJz4pOiBDb21wb25lbnREZWZpbml0aW9uPFxuICBJU2NoZW1hPFRyYW5zZm9ybVR5cGU+LFxuICBQYXJ0aWFsPFRyYW5zZm9ybVR5cGU+XG4+IHtcbiAgcmV0dXJuIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVHJhbnNmb3JtU2NoZW1hLCBDT01QT05FTlRfSUQpXG59XG4iLCJpbXBvcnQgeyBQcmVFbmdpbmUgfSBmcm9tICcuLi9lbmdpbmUnXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vc2NoZW1hcy9JU2NoZW1hJ1xuXG5pbXBvcnQgeyBkZWZpbmVMaWJyYXJ5Q29tcG9uZW50cyB9IGZyb20gJy4vZ2VuZXJhdGVkL2luZGV4LmdlbidcbmltcG9ydCAqIGFzIE1lc2hSZW5kZXJlclNjaGVtYSBmcm9tICcuL2dlbmVyYXRlZC9NZXNoUmVuZGVyZXIuZ2VuJ1xuaW1wb3J0IHsgUEJNZXNoUmVuZGVyZXIgfSBmcm9tICcuL2dlbmVyYXRlZC9wYi9NZXNoUmVuZGVyZXIuZ2VuJ1xuaW1wb3J0IHsgZGVmaW5lVHJhbnNmb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9sZWdhY3kvVHJhbnNmb3JtJ1xuXG5leHBvcnQgZW51bSBDT01QT05FTlRfSUQge1xuICBTWU5DID0gMTAwMFxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgU2RrQ29tcG9uZW50cyA9IFJldHVyblR5cGU8dHlwZW9mIGRlZmluZVNka0NvbXBvbmVudHM+XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTZGtDb21wb25lbnRzKGVuZ2luZTogUHJlRW5naW5lKSB7XG4gIGNvbnN0IGF1dG9nZW5lcmF0ZWRDb21wb25lbnRzID0gZGVmaW5lTGlicmFyeUNvbXBvbmVudHMoZW5naW5lKVxuICBlbmdpbmUucmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvbihhdXRvZ2VuZXJhdGVkQ29tcG9uZW50cy5NZXNoUmVuZGVyZXIuX2lkKVxuICByZXR1cm4ge1xuICAgIC4uLmF1dG9nZW5lcmF0ZWRDb21wb25lbnRzLFxuICAgIFRyYW5zZm9ybTogZGVmaW5lVHJhbnNmb3JtQ29tcG9uZW50KGVuZ2luZSksXG4gICAgTWVzaFJlbmRlcmVyOiBlbmdpbmUuZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYTxcbiAgICAgIElTY2hlbWE8UEJNZXNoUmVuZGVyZXI+LFxuICAgICAgUGFydGlhbDxQQk1lc2hSZW5kZXJlcj5cbiAgICA+KE1lc2hSZW5kZXJlclNjaGVtYS5NZXNoUmVuZGVyZXJTY2hlbWEsIE1lc2hSZW5kZXJlclNjaGVtYS5DT01QT05FTlRfSUQpXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElBcnJheTxUPih0eXBlOiBJU2NoZW1hPFQ+KTogSVNjaGVtYTxBcnJheTxUPj4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogQXJyYXk8VD4sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIGJ1aWxkZXIud3JpdGVVaW50MzIodmFsdWUubGVuZ3RoKVxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgIHR5cGUuc2VyaWFsaXplKGl0ZW0sIGJ1aWxkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBBcnJheTxUPiB7XG4gICAgICBjb25zdCBuZXdBcnJheTogQXJyYXk8VD4gPSBbXVxuICAgICAgY29uc3QgbGVuZ3RoID0gcmVhZGVyLnJlYWRVaW50MzIoKVxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBuZXdBcnJheS5wdXNoKHR5cGUuZGVzZXJpYWxpemUocmVhZGVyKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdBcnJheVxuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgQm9vbDogSVNjaGVtYTxib29sZWFuPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBib29sZWFuLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDgodmFsdWUgPyAxIDogMClcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50OCgpID09PSAxXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElFbnVtPFQ+KHR5cGU6IElTY2hlbWE8YW55Pik6IElTY2hlbWE8VD4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogVCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgICAgdHlwZS5zZXJpYWxpemUodmFsdWUsIGJ1aWxkZXIpXG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBUIHtcbiAgICAgIHJldHVybiB0eXBlLmRlc2VyaWFsaXplKHJlYWRlcilcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIHJldHVybiB0eXBlLmNyZWF0ZSgpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxvYXQzMjogSVNjaGVtYTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVGbG9hdDMyKHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEZsb2F0MzIoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxvYXQ2NDogSVNjaGVtYTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVGbG9hdDY0KHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEZsb2F0NjQoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50NjQ6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50NjQoQmlnSW50KHZhbHVlKSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTnVtYmVyKHJlYWRlci5yZWFkSW50NjQoKSlcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJbnQzMjogSVNjaGVtYTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVJbnQzMih2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRJbnQzMigpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50MTY6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50MTYodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50MTYoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDg6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50OCh2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRJbnQ4KClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBGbGF0U3RyaW5nOiBJU2NoZW1hPHN0cmluZz4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogc3RyaW5nLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodmFsdWUpKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocmVhZGVyLnJlYWRCdWZmZXIoKSlcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRWNzU3RyaW5nID0gRmxhdFN0cmluZ1xuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuL0lTY2hlbWEnXG5pbXBvcnQgeyBUb09wdGlvbmFsIH0gZnJvbSAnLi90eXBpbmcnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMge1xuICBba2V5OiBzdHJpbmddOiBJU2NoZW1hXG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCBleHRlbmRzIFNwZWM+ID0gVG9PcHRpb25hbDx7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgSVNjaGVtYVxuICAgID8gUmV0dXJuVHlwZTxUW0tdWydkZXNlcmlhbGl6ZSddPlxuICAgIDogVFtLXSBleHRlbmRzIFNwZWNcbiAgICA/IFJlc3VsdDxUW0tdPlxuICAgIDogbmV2ZXJcbn0+XG5cbmV4cG9ydCB0eXBlIE1hcFNjaGVtYVR5cGU8VCBleHRlbmRzIFNwZWM+ID0gSVNjaGVtYTxSZXN1bHQ8VD4+XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gSU1hcDxUIGV4dGVuZHMgU3BlYz4oc3BlYzogVCk6IElTY2hlbWE8UmVzdWx0PFQ+PiB7XG4gIHJldHVybiB7XG4gICAgc2VyaWFsaXplKHZhbHVlOiBSZXN1bHQ8VD4sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWMpIHtcbiAgICAgICAgLy8gVE9ETzogYXMgYW55XG4gICAgICAgIHNwZWNba2V5XS5zZXJpYWxpemUoKHZhbHVlIGFzIGFueSlba2V5XSwgYnVpbGRlcilcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFJlc3VsdDxUPiB7XG4gICAgICBjb25zdCBuZXdWYWx1ZTogUmVzdWx0PFQ+ID0ge30gYXMgYW55XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICA7KG5ld1ZhbHVlIGFzIGFueSlba2V5XSA9IHNwZWNba2V5XS5kZXNlcmlhbGl6ZShyZWFkZXIpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3VmFsdWVcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlOiBSZXN1bHQ8VD4gPSB7fSBhcyBhbnlcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWMpIHtcbiAgICAgICAgLy8gVE9ETzogYXMgYW55XG4gICAgICAgIDsobmV3VmFsdWUgYXMgYW55KVtrZXldID0gc3BlY1trZXldLmNyZWF0ZSgpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3VmFsdWVcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElPcHRpb25hbDxUPihzcGVjOiBJU2NoZW1hPFQ+KTogSVNjaGVtYTxUIHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiB7XG4gICAgc2VyaWFsaXplKHZhbHVlOiBUIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgYnVpbGRlci53cml0ZUludDgoMSlcbiAgICAgICAgc3BlYy5zZXJpYWxpemUodmFsdWUsIGJ1aWxkZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWlsZGVyLndyaXRlSW50OCgwKVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICBjb25zdCBleGlzdHMgPSByZWFkZXIucmVhZEludDgoKVxuICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICByZXR1cm4gc3BlYy5kZXNlcmlhbGl6ZShyZWFkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBJQXJyYXkgfSBmcm9tICcuL0FycmF5J1xuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4vYmFzaWMvQm9vbGVhbidcbmltcG9ydCB7IElFbnVtIH0gZnJvbSAnLi9iYXNpYy9FbnVtJ1xuaW1wb3J0IHsgRmxvYXQzMiwgRmxvYXQ2NCB9IGZyb20gJy4vYmFzaWMvRmxvYXQnXG5pbXBvcnQgeyBJbnQxNiwgSW50MzIsIEludDgsIEludDY0IGFzIGlJbnQ2NCB9IGZyb20gJy4vYmFzaWMvSW50ZWdlcidcbmltcG9ydCB7IEVjc1N0cmluZyB9IGZyb20gJy4vYmFzaWMvU3RyaW5nJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4vSVNjaGVtYSdcbmltcG9ydCB7IElNYXAgfSBmcm9tICcuL01hcCdcbmltcG9ydCB7IElPcHRpb25hbCB9IGZyb20gJy4vT3B0aW9uYWwnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgbmFtZXNwYWNlIFNjaGVtYXMge1xuICBleHBvcnQgdHlwZSBTY2hlbWFUeXBlID0gSVNjaGVtYVxuXG4gIGV4cG9ydCBjb25zdCBCb29sZWFuID0gQm9vbFxuXG4gIGV4cG9ydCBjb25zdCBTdHJpbmcgPSBFY3NTdHJpbmdcblxuICBleHBvcnQgY29uc3QgRmxvYXQgPSBGbG9hdDMyXG4gIGV4cG9ydCBjb25zdCBEb3VibGUgPSBGbG9hdDY0XG5cbiAgZXhwb3J0IGNvbnN0IEJ5dGUgPSBJbnQ4XG4gIGV4cG9ydCBjb25zdCBTaG9ydCA9IEludDE2XG4gIGV4cG9ydCBjb25zdCBJbnQgPSBJbnQzMlxuICBleHBvcnQgY29uc3QgSW50NjQgPSBpSW50NjRcblxuICBleHBvcnQgY29uc3QgTnVtYmVyID0gRmxvYXQzMlxuXG4gIGV4cG9ydCBjb25zdCBFbnVtID0gSUVudW1cbiAgZXhwb3J0IGNvbnN0IEFycmF5ID0gSUFycmF5XG4gIGV4cG9ydCBjb25zdCBNYXAgPSBJTWFwXG4gIGV4cG9ydCBjb25zdCBPcHRpb25hbCA9IElPcHRpb25hbFxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmR0UHJvdG9jb2wgPSBleHBvcnRzLnN0YXRlSXRlcmF0b3IgPSBleHBvcnRzLnNhbWVEYXRhID0gdm9pZCAwO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbi8qKlxuICogQ29tcGFyZSByYXcgZGF0YS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBzYW1lRGF0YShhLCBiKSB7XG4gICAgLy8gQXQgcmVmZXJlbmNlIGxldmVsXG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChhIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiBiIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoICE9PSBiLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGdsb2JhbFRoaXMuQnVmZmVyKSB7XG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgQnVmZmVyICYmIGIgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgICAgIC8vIERlZXAgbGV2ZWxcbiAgICAgICAgICAgIHJldHVybiBhLmVxdWFscyhiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNhbWVEYXRhID0gc2FtZURhdGE7XG4vKipcbiAqIFN0YXRlIGl0ZXJhdG9yXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24qIHN0YXRlSXRlcmF0b3Ioc3RhdGUpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXkxLCB2YWx1ZTFdIG9mIHN0YXRlLmVudHJpZXMoKSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIHZhbHVlMS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIHlpZWxkIFtrZXkxLCBrZXkyLCB2YWx1ZTJdO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5zdGF0ZUl0ZXJhdG9yID0gc3RhdGVJdGVyYXRvcjtcbi8qKlxuICogQHB1YmxpY1xuICogQ1JEVCBwcm90b2NvbC5cbiAqIFN0b3JlcyB0aGUgbGF0ZXN0IHN0YXRlLCBhbmQgZGVjaWRlcyB3aGVuZXZlciB3ZSBoYXZlXG4gKiB0byBwcm9jZXNzIGFuZCBzdG9yZSB0aGUgbmV3IGRhdGEgaW4gY2FzZSBpdHMgYW4gdXBkYXRlLCBvclxuICogdG8gZGlzY2FyZCBhbmQgc2VuZCBvdXIgbG9jYWwgdmFsdWUgY2F1c2UgcmVtb3RlIGl0J3Mgb3V0ZGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZHRQcm90b2NvbCgpIHtcbiAgICAvKipcbiAgICAgKiBMb2NhbCBzdGF0ZSB3aGVyZSB3ZSBzdG9yZSB0aGUgbGF0ZXN0IGxhbXBvcnQgdGltZXN0YW1wXG4gICAgICogYW5kIHRoZSByYXcgZGF0YSB2YWx1ZVxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0IHN0YXRlID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIFdlIHNob3VsZCBjYWxsIHRoaXMgZm4gaW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBzdGF0ZVxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVwZGF0ZVN0YXRlKGtleTEsIGtleTIsIGRhdGEsIHJlbW90ZVRpbWVzdGFtcCkge1xuICAgICAgICBjb25zdCBrZXkxVmFsdWUgPSBzdGF0ZS5nZXQoa2V5MSk7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IE1hdGgubWF4KHJlbW90ZVRpbWVzdGFtcCwga2V5MVZhbHVlPy5nZXQoa2V5Mik/LnRpbWVzdGFtcCB8fCAwKTtcbiAgICAgICAgaWYgKGtleTFWYWx1ZSkge1xuICAgICAgICAgICAga2V5MVZhbHVlLnNldChrZXkyLCB7IHRpbWVzdGFtcCwgZGF0YSB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0tleTFWYWx1ZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIG5ld0tleTFWYWx1ZS5zZXQoa2V5MiwgeyB0aW1lc3RhbXAsIGRhdGEgfSk7XG4gICAgICAgICAgICBzdGF0ZS5zZXQoa2V5MSwgbmV3S2V5MVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB0aW1lc3RhbXAsIGRhdGEgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGV2ZW50IGZvciB0aGUgc3BlY2lmaWVkIGtleSBhbmQgc3RvcmUgdGhlIG5ldyBkYXRhIGFuZFxuICAgICAqIGxhbXBvcnQgdGltZXN0bWFwIGluY3JlbWVudGVkIGJ5IG9uZSBpbiB0aGUgc3RhdGUuXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KGtleTEsIGtleTIsIGRhdGEpIHtcbiAgICAgICAgLy8gSW5jcmVtZW50IHRoZSB0aW1lc3RhbXBcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gKHN0YXRlLmdldChrZXkxKT8uZ2V0KGtleTIpPy50aW1lc3RhbXAgfHwgMCkgKyAxO1xuICAgICAgICB1cGRhdGVTdGF0ZShrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXApO1xuICAgICAgICByZXR1cm4geyBrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvY2VzcyB0aGUgcmVjZWl2ZWQgbWVzc2FnZSBvbmx5IGlmIHRoZSBsYW1wb3J0IG51bWJlciByZWNpZXZlZCBpcyBoaWdoZXJcbiAgICAgKiB0aGFuIHRoZSBzdG9yZWQgb25lLiBJZiBpdHMgbG93ZXIsIHdlIHNwcmVhZCBpdCB0byB0aGUgbmV0d29yayB0byBjb3JyZWN0IHRoZSBwZWVyLlxuICAgICAqIElmIHRoZXkgYXJlIGVxdWFsLCB0aGUgYmlnZ2VyIHJhdyBkYXRhIHdpbnMuXG4gIFxuICAgICAqIFJldHVybnMgdGhlIHJlY2lldmVkIGRhdGEgaWYgdGhlIGxhbXBvcnQgbnVtYmVyIHdhcyBiaWdnZXIgdGhhbiBvdXJzLlxuICAgICAqIElmIGl0IHdhcyBhbiBvdXRkYXRlZCBtZXNzYWdlLCB0aGVuIHdlIHJldHVybiB2b2lkXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgeyBrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXAgfSA9IG1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS5nZXQoa2V5MSk/LmdldChrZXkyKTtcbiAgICAgICAgLy8gVGhlIHJlY2VpdmVkIG1lc3NhZ2UgaXMgPiB0aGFuIG91ciBjdXJyZW50IHZhbHVlLCB1cGRhdGUgb3VyIHN0YXRlLlxuICAgICAgICBpZiAoIWN1cnJlbnQgfHwgY3VycmVudC50aW1lc3RhbXAgPCB0aW1lc3RhbXApIHtcbiAgICAgICAgICAgIHVwZGF0ZVN0YXRlKGtleTEsIGtleTIsIGRhdGEsIHRpbWVzdGFtcCk7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPdXRkYXRlZCBNZXNzYWdlLiBSZXNlbmQgb3VyIHN0YXRlIG1lc3NhZ2UgdGhyb3VnaCB0aGUgd2lyZS5cbiAgICAgICAgaWYgKGN1cnJlbnQudGltZXN0YW1wID4gdGltZXN0YW1wKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleTEsXG4gICAgICAgICAgICAgICAga2V5MixcbiAgICAgICAgICAgICAgICBkYXRhOiBjdXJyZW50LmRhdGEsXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBjdXJyZW50LnRpbWVzdGFtcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTYW1lIGRhdGEsIHNhbWUgdGltZXN0YW1wLiBXZWlyZG8gZWNobyBtZXNzYWdlLlxuICAgICAgICBpZiAoc2FtZURhdGEoY3VycmVudC5kYXRhLCBkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmFjZSBjb25kaXRpb24sIHNhbWUgdGltZXN0YW1wIGRpZmYgZGF0YS5cbiAgICAgICAgZnVuY3Rpb24gY29tcGFyZURhdGEoY3VycmVudCwgZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQgPiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wYXJlRGF0YShjdXJyZW50LmRhdGEsIGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleTEsXG4gICAgICAgICAgICAgICAga2V5MixcbiAgICAgICAgICAgICAgICBkYXRhOiBjdXJyZW50LmRhdGEsXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBjdXJyZW50LnRpbWVzdGFtcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTdGF0ZShrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXApLmRhdGE7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGNyZWF0ZUV2ZW50LFxuICAgICAgICBwcm9jZXNzTWVzc2FnZSxcbiAgICAgICAgZ2V0U3RhdGVcbiAgICB9O1xufVxuZXhwb3J0cy5jcmR0UHJvdG9jb2wgPSBjcmR0UHJvdG9jb2w7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKipcbiAqIFRha2UgdGhlIG1heCBiZXR3ZWVuIGN1cnJlbnRTaXplIGFuZCBpbnRlbmRlZFNpemUgYW5kIHRoZW4gcGx1cyAxMDI0LiBUaGVuLFxuICogIGZpbmQgdGhlIG5leHQgbmVhcmVyIG11bHRpcGxlIG9mIDEwMjQuXG4gKiBAcGFyYW0gY3VycmVudFNpemUgLSBudW1iZXJcbiAqIEBwYXJhbSBpbnRlbmRlZFNpemUgLSBudW1iZXJcbiAqIEByZXR1cm5zIHRoZSBjYWxjdWxhdGVkIG51bWJlclxuICovXG5mdW5jdGlvbiBnZXROZXh0U2l6ZShjdXJyZW50U2l6ZTogbnVtYmVyLCBpbnRlbmRlZFNpemU6IG51bWJlcikge1xuICBjb25zdCBtaW5OZXdTaXplID0gTWF0aC5tYXgoY3VycmVudFNpemUsIGludGVuZGVkU2l6ZSkgKyAxMDI0XG4gIHJldHVybiBNYXRoLmNlaWwobWluTmV3U2l6ZSAvIDEwMjQpICogMTAyNFxufVxuXG4vKipcbiAqIEBwYXJhbSB3cml0aW5nIC0gd3JpdGluZyBvcHRpb24sIHNlZSBvYmplY3Qgc3BlY3MuXG4gKiBAcGFyYW0gcmVhZGluZyAtIHJlYWRpbmcgb3B0aW9uLCBzZWUgb2JqZWN0IHNwZWNzLlxuICogQHBhcmFtIGluaXRpYWxDYXBhY2l0eSAtIEluaXRpYWwgY2FwYWNpdHkgb2YgYnVmZmVyIHRvIGFsbG9jYXRlLCBpZ25vcmVkIGlmIHlvdSB1c2Ugd3JpdGluZyBvciByZWFkaW5nIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVCeXRlQnVmZmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gYSBidWZmZXIgYWxyZWFkeSBhbGxvY2F0ZWQgdG8gcmVhZCBmcm9tIHRoZXJlLlxuICAgKiBAcGFyYW0gY3VycmVudE9mZnNldCAtIHNldCB0aGUgY3Vyc29yIHdoZXJlIGJlZ2lucyB0byByZWFkLiBEZWZhdWx0IDBcbiAgICogQHBhcmFtIGxlbmd0aCAtIGRlbGltaXRlIHdoZXJlIHRoZSB2YWxpZCBkYXRhIGVuZHMuIERlZmF1bHQ6IGJ1ZmZlci5sZW5ndGhcbiAgICovXG4gIHJlYWRpbmc/OiB7XG4gICAgYnVmZmVyOiBVaW50OEFycmF5XG4gICAgbGVuZ3RoPzogbnVtYmVyXG4gICAgY3VycmVudE9mZnNldDogbnVtYmVyXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGJ1ZmZlciAtIGEgYnVmZmVyIGFscmVhZHkgYWxsb2NhdGVkIHRvIHdyaXRlIHRoZXJlLlxuICAgKiBAcGFyYW0gY3VycmVudE9mZnNldCAtIHNldCB0aGUgY3Vyc29yIHRvIG5vdCBzdGFydCB3cml0aW5nIGZyb20gdGhlIGJlZ2luIG9mIGl0LiBEZWZhdWx0IDBcbiAgICovXG4gIHdyaXRpbmc/OiB7XG4gICAgYnVmZmVyOiBVaW50OEFycmF5XG4gICAgY3VycmVudE9mZnNldD86IG51bWJlclxuICB9XG5cbiAgaW5pdGlhbENhcGFjaXR5PzogbnVtYmVyXG59XG5cbmNvbnN0IGRlZmF1bHRJbml0aWFsQ2FwYWNpdHkgPSAxMDI0MFxuXG4vKipcbiAqIEJ5dGVCdWZmZXIgaXMgYSB3cmFwcGVyIG9mIERhdGFWaWV3IHdoaWNoIGFsc28gYWRkcyBhIHJlYWQgYW5kIHdyaXRlIG9mZnNldC5cbiAqICBBbHNvIGluIGEgd3JpdGUgb3BlcmF0aW9uIGl0IHJlc2l6ZXMgdGhlIGJ1ZmZlciBpcyBiZWluZyB1c2VkIGlmIGl0IG5lZWRzLlxuICpcbiAqIC0gVXNlIHJlYWQgYW5kIHdyaXRlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG9yIGNvbnN1bWUgZGF0YS5cbiAqIC0gVXNlIHNldCBhbmQgZ2V0IG9ubHkgaWYgeW91IGFyZSBzdXJlIHRoYXQgeW91J3JlIGRvaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQnl0ZUJ1ZmZlcihvcHRpb25zOiBDcmVhdGVCeXRlQnVmZmVyT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGluaXRpYWxST2Zmc2V0OiBudW1iZXIgPSBvcHRpb25zLnJlYWRpbmc/LmN1cnJlbnRPZmZzZXQgfHwgMFxuICBsZXQgaW5pdGlhbEJ1ZmZlcjogVWludDhBcnJheSB8IG51bGwgPSBudWxsXG4gIGxldCBpbml0aWFsV09mZnNldDogbnVtYmVyID0gMFxuXG4gIGlmIChvcHRpb25zLndyaXRpbmcpIHtcbiAgICBpbml0aWFsQnVmZmVyID0gb3B0aW9ucy53cml0aW5nLmJ1ZmZlclxuICAgIGlmIChvcHRpb25zLndyaXRpbmcuY3VycmVudE9mZnNldCkge1xuICAgICAgaW5pdGlhbFdPZmZzZXQgPSBvcHRpb25zLndyaXRpbmcuY3VycmVudE9mZnNldFxuICAgIH1cbiAgfSBlbHNlIGlmIChvcHRpb25zLnJlYWRpbmcpIHtcbiAgICBpbml0aWFsQnVmZmVyID0gb3B0aW9ucy5yZWFkaW5nLmJ1ZmZlclxuICAgIGluaXRpYWxXT2Zmc2V0ID0gb3B0aW9ucy5yZWFkaW5nLmxlbmd0aCB8fCBvcHRpb25zLnJlYWRpbmcuYnVmZmVyLmxlbmd0aFxuICB9IGVsc2Uge1xuICAgIGluaXRpYWxCdWZmZXIgPSBuZXcgVWludDhBcnJheShcbiAgICAgIG9wdGlvbnMuaW5pdGlhbENhcGFjaXR5IHx8IGRlZmF1bHRJbml0aWFsQ2FwYWNpdHlcbiAgICApXG4gIH1cblxuICBsZXQgYnVmZmVyOiBVaW50OEFycmF5ID0gaW5pdGlhbEJ1ZmZlciFcbiAgbGV0IHZpZXc6IERhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0KVxuICBsZXQgd29mZnNldDogbnVtYmVyID0gaW5pdGlhbFdPZmZzZXRcbiAgbGV0IHJvZmZzZXQ6IG51bWJlciA9IGluaXRpYWxST2Zmc2V0XG5cbiAgLyoqXG4gICAqIEluY3JlZW1lbnQgdGhlIHdyaXRlIG9mZnNldCBhbmQgcmVzaXplIHRoZSBidWZmZXIgaWYgaXQgbmVlZHMuXG4gICAqL1xuICBjb25zdCB3b0FkZCA9IChhbW91bnQ6IG51bWJlcikgPT4ge1xuICAgIGlmICh3b2Zmc2V0ICsgYW1vdW50ID4gYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5ld3NpemUgPSBnZXROZXh0U2l6ZShidWZmZXIuYnl0ZUxlbmd0aCwgd29mZnNldCArIGFtb3VudClcbiAgICAgIGNvbnN0IG5ld0J1ZmZlciA9IG5ldyBVaW50OEFycmF5KG5ld3NpemUpXG4gICAgICBuZXdCdWZmZXIuc2V0KGJ1ZmZlcilcbiAgICAgIGJ1ZmZlciA9IG5ld0J1ZmZlclxuICAgICAgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyKVxuICAgIH1cblxuICAgIHdvZmZzZXQgKz0gYW1vdW50XG4gICAgcmV0dXJuIHdvZmZzZXQgLSBhbW91bnRcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgdGhlIHJlYWQgb2Zmc2V0IGFuZCB0aHJvdyBhbiBlcnJvciBpZiBpdCdzIHRyeWluZyB0byByZWFkXG4gICAqICBvdXRzaWRlIHRoZSBib3VuZHMuXG4gICAqL1xuICBjb25zdCByb0FkZCA9IChhbW91bnQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChyb2Zmc2V0ICsgYW1vdW50ID4gd29mZnNldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPdXRzaWRlIG9mIHRoZSBib3VuZHMgb2Ygd3JpdGVuIGRhdGEuJylcbiAgICB9XG5cbiAgICByb2Zmc2V0ICs9IGFtb3VudFxuICAgIHJldHVybiByb2Zmc2V0IC0gYW1vdW50XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSBlbnRpcmUgY3VycmVudCBVaW50OEFycmF5LlxuICAgICAqXG4gICAgICogV0FSTklORzogaWYgdGhlIGJ1ZmZlciBncm93cywgdGhlIHZpZXcgaGFkIGNoYW5nZWQgaXRzZWxmLFxuICAgICAqICBhbmQgdGhlIHJlZmVyZW5jZSB3aWxsIGJlIGEgaW52YWxpZCBvbmUuXG4gICAgICovXG4gICAgYnVmZmVyKCk6IFVpbnQ4QXJyYXkge1xuICAgICAgcmV0dXJuIGJ1ZmZlclxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGNhcGFjaXR5IG9mIHRoZSBjdXJyZW50IGJ1ZmZlclxuICAgICAqL1xuICAgIGJ1ZmZlckxlbmd0aCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5sZW5ndGhcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJlc2V0cyBieXRlQnVmZmVyIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IG9uZVxuICAgICAqL1xuICAgIHJlc2V0QnVmZmVyKCk6IHZvaWQge1xuICAgICAgcm9mZnNldCA9IDBcbiAgICAgIHdvZmZzZXQgPSAwXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCByZWFkIG9mZnNldFxuICAgICAqL1xuICAgIGN1cnJlbnRSZWFkT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gcm9mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgd3JpdGUgb2Zmc2V0XG4gICAgICovXG4gICAgY3VycmVudFdyaXRlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVhZGluZyBwdXJwb3NlXG4gICAgICogUmV0dXJucyB0aGUgcHJldml1b3Mgb2Zmc3NldCBzaXplIGJlZm9yZSBpbmNyZW1lbnRpbmdcbiAgICAgKi9cbiAgICBpbmNyZW1lbnRSZWFkT2Zmc2V0KGFtb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiByb0FkZChhbW91bnQpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBIb3cgbWFueSBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIHJlYWQuXG4gICAgICovXG4gICAgcmVtYWluaW5nQnl0ZXMoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB3b2Zmc2V0IC0gcm9mZnNldFxuICAgIH0sXG4gICAgcmVhZEZsb2F0MzIoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0MzIocm9BZGQoNCkpXG4gICAgfSxcbiAgICByZWFkRmxvYXQ2NCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQ2NChyb0FkZCg4KSlcbiAgICB9LFxuICAgIHJlYWRJbnQ4KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQ4KHJvQWRkKDEpKVxuICAgIH0sXG4gICAgcmVhZEludDE2KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQxNihyb0FkZCgyKSlcbiAgICB9LFxuICAgIHJlYWRJbnQzMigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MzIocm9BZGQoNCkpXG4gICAgfSxcbiAgICByZWFkSW50NjQoKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ0ludDY0KHJvQWRkKDgpKVxuICAgIH0sXG4gICAgcmVhZFVpbnQ4KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50OChyb0FkZCgxKSlcbiAgICB9LFxuICAgIHJlYWRVaW50MTYoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQxNihyb0FkZCgyKSlcbiAgICB9LFxuICAgIHJlYWRVaW50MzIoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQzMihyb0FkZCg0KSlcbiAgICB9LFxuICAgIHJlYWRVaW50NjQoKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ1VpbnQ2NChyb0FkZCg4KSlcbiAgICB9LFxuICAgIHJlYWRCdWZmZXIoKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSB2aWV3LmdldFVpbnQzMihyb0FkZCg0KSlcbiAgICAgIHJldHVybiBidWZmZXIuc3ViYXJyYXkocm9BZGQobGVuZ3RoKSwgcm9BZGQoMCkpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBXcml0aW5nIHB1cnBvc2VcbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnQgb2Zmc2V0XG4gICAgICogQHBhcmFtIGFtb3VudCAtIGhvdyBtYW55IGJ5dGVzXG4gICAgICogQHJldHVybnMgVGhlIG9mZnNldCB3aGVuIHRoaXMgcmVzZXJ2aW5nIHN0YXJ0cy5cbiAgICAgKi9cbiAgICBpbmNyZW1lbnRXcml0ZU9mZnNldChhbW91bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29BZGQoYW1vdW50KVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB3cml0ZW4gaW4gdGhlIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBzaXplKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogVGFrZSBjYXJlIHVzaW5nIHRoaXMgZnVuY3Rpb24sIGlmIHlvdSBtb2RpZnkgdGhlIGRhdGEgYWZ0ZXIsIHRoZVxuICAgICAqIHJldHVybmVkIHN1YmFycmF5IHdpbGwgY2hhbmdlIHRvby4gSWYgeW91J2xsIG1vZGlmeSB0aGUgY29udGVudCBvZiB0aGVcbiAgICAgKiBieXRlYnVmZmVyLCBtYXliZSB5b3Ugd2FudCB0byB1c2UgdG9Db3BpZWRCaW5hcnkoKVxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIHN1YmFycmF5IGZyb20gMCB0byBvZmZzZXQgYXMgcmVmZXJlbmNlLlxuICAgICAqL1xuICAgIHRvQmluYXJ5KCkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5zdWJhcnJheSgwLCB3b2Zmc2V0KVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTYWZlIGNvcGllZCBidWZmZXIgb2YgdGhlIGN1cnJlbnQgZGF0YSBvZiBCeXRlQnVmZmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgc3ViYXJyYXkgZnJvbSAwIHRvIG9mZnNldC5cbiAgICAgKi9cbiAgICB0b0NvcGllZEJpbmFyeSgpIHtcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0aGlzLnRvQmluYXJ5KCkpXG4gICAgfSxcblxuICAgIHdyaXRlQnVmZmVyKHZhbHVlOiBVaW50OEFycmF5LCB3cml0ZUxlbmd0aDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgIGlmICh3cml0ZUxlbmd0aCkge1xuICAgICAgICB0aGlzLndyaXRlVWludDMyKHZhbHVlLmJ5dGVMZW5ndGgpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG8gPSB3b0FkZCh2YWx1ZS5ieXRlTGVuZ3RoKVxuICAgICAgYnVmZmVyLnNldCh2YWx1ZSwgbylcbiAgICB9LFxuICAgIHdyaXRlRmxvYXQzMih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoNClcbiAgICAgIHZpZXcuc2V0RmxvYXQzMihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlRmxvYXQ2NCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoOClcbiAgICAgIHZpZXcuc2V0RmxvYXQ2NChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50OCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoMSlcbiAgICAgIHZpZXcuc2V0SW50OChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50MTYodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDIpXG4gICAgICB2aWV3LnNldEludDE2KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVJbnQzMih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoNClcbiAgICAgIHZpZXcuc2V0SW50MzIobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUludDY0KHZhbHVlOiBiaWdpbnQpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg4KVxuICAgICAgdmlldy5zZXRCaWdJbnQ2NChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDgodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDEpXG4gICAgICB2aWV3LnNldFVpbnQ4KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVVaW50MTYodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDIpXG4gICAgICB2aWV3LnNldFVpbnQxNihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDMyKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg0KVxuICAgICAgdmlldy5zZXRVaW50MzIobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZVVpbnQ2NCh2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoOClcbiAgICAgIHZpZXcuc2V0QmlnVWludDY0KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgLy8gRGF0YXZpZXcgUHJveHlcbiAgICBnZXRGbG9hdDMyKG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0MzIob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NChvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDY0KG9mZnNldClcbiAgICB9LFxuICAgIGdldEludDgob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50OChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQxNihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQxNihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQzMihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQzMihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQ2NChvZmZzZXQ6IG51bWJlcik6IGJpZ2ludCB7XG4gICAgICByZXR1cm4gdmlldy5nZXRCaWdJbnQ2NChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50OChvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50OChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50MTYob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDE2KG9mZnNldClcbiAgICB9LFxuICAgIGdldFVpbnQzMihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50MzIob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0VWludDY0KG9mZnNldDogbnVtYmVyKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ1VpbnQ2NChvZmZzZXQpXG4gICAgfSxcbiAgICBzZXRGbG9hdDMyKG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEZsb2F0MzIob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEZsb2F0NjQob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0RmxvYXQ2NChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50OChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRJbnQ4KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRJbnQxNihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRJbnQxNihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50MzIob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEludDY0KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICB2aWV3LnNldEJpZ0ludDY0KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRVaW50OChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRVaW50OChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDE2KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldFVpbnQxNihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDMyKG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldFVpbnQzMihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDY0KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICB2aWV3LnNldEJpZ1VpbnQ2NChvZmZzZXQsIHZhbHVlKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQnl0ZUJ1ZmZlciA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUJ5dGVCdWZmZXI+XG4iLCIvKipcbiAqIFRoZSB3aXJlIG1lc3NhZ2UgaXMgdGhlIHRvcC1sZXZlbCBtZXNzYWdlIHRoYXQgY2FuIGJlIHBhY2tlZFxuICogIGluc2lkZSBpdCBjYW4gY29udGFpbiBhIGRhdGEgd2l0aCBhbm90aGVyIHN0cnVjdHVyZSBvciBwcm90b2NvbFxuICpcbiAqIEVhY2ggd2lyZSBtZXNzYWdlIGhhcyB0aHJlZSBwcmltaXRpdmUgcHJvcGVydHkgdGhhdCBpdCdsbCBuZXZlciBjaGFuZ2VcbiAqICAgLS0tPiBsZW5ndGggICAgICAgIHVpbnQzMiAobWVzc2FnZSBzaXplIHVwIHRvIDQsMjk0LDk2NywyOTUpXG4gKiAgIC0tLT4gdmVyc2lvbiAgICAgICB1aW50MzIgKGZvciBub3cganVzdCBhIG51bWJlciB3aGljaCBpcyB6ZXJvKVxuICogICAtLS0+IG1lc3NhZ2UgdHlwZSAgdWludDMyXG4gKiBUaGUgbGVuZ3RoIGluZGljYXRlcyBob3cgbWFueSBieXRlcyBhcmUgYWJvdmUgc2VsZiwgdGhlIHZlcnNpb24gaW5cbiAqIGNvbWJpbmF0aW9uIHdpdGggbWVzc2FnZSB0eXBlIGRlZmluZXMgdGhlIHNldCBvZiBoYW5kbGVycyB0aGF0IHdpbGwgYmVcbiAqIGF2YWlsYWJsZSB0byBwcm9jZXNzIHRoZSBtZXNzYWdlXG4gKlxuICovXG5cbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuL0J5dGVCdWZmZXInXG5cbnR5cGUgVWludDMyID0gbnVtYmVyXG5cbmV4cG9ydCBuYW1lc3BhY2UgV2lyZU1lc3NhZ2Uge1xuICBleHBvcnQgZW51bSBFbnVtIHtcbiAgICBSRVNFUlZFRCA9IDAsXG5cbiAgICAvLyBDb21wb25lbnQgT3BlcmF0aW9uXG4gICAgUFVUX0NPTVBPTkVOVCA9IDEsXG4gICAgREVMRVRFX0NPTVBPTkVOVCA9IDIsXG5cbiAgICBNQVhfTUVTU0FHRV9UWVBFXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGxlbmd0aCAtIFVpbnQzMiB0aGUgbGVuZ3RoIG9mIGFsbCBtZXNzYWdlIChpbmNsdWRpbmcgdGhlIGhlYWRlcilcbiAgICogQHBhcmFtIHR5cGUgLSBkZWZpbmUgdGhlIGZ1bmN0aW9uIHdoaWNoIGhhbmRsZXMgdGhlIGRhdGFcbiAgICovXG4gIGV4cG9ydCB0eXBlIEhlYWRlciA9IHtcbiAgICBsZW5ndGg6IFVpbnQzMlxuICAgIHR5cGU6IFVpbnQzMlxuICB9XG5cbiAgZXhwb3J0IGNvbnN0IEhFQURFUl9MRU5HVEggPSA4XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBpZiB0aGUgbWVzc2FnZSBpbmNvbWluZyBpcyBjb21wbGV0ZWRcbiAgICogQHBhcmFtIGJ1ZiAtIEJ5dGVCdWZmZXJcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZShidWY6IEJ5dGVCdWZmZXIpIHtcbiAgICBjb25zdCByZW0gPSBidWYucmVtYWluaW5nQnl0ZXMoKVxuICAgIGlmIChyZW0gPCBIRUFERVJfTEVOR1RIKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlTGVuZ3RoID0gYnVmLmdldFVpbnQzMihidWYuY3VycmVudFJlYWRPZmZzZXQoKSlcbiAgICBpZiAocmVtIDwgbWVzc2FnZUxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZWFkSGVhZGVyKGJ1ZjogQnl0ZUJ1ZmZlcik6IEhlYWRlciB8IG51bGwge1xuICAgIGlmICghdmFsaWRhdGUoYnVmKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGVuZ3RoOiBidWYucmVhZFVpbnQzMigpLFxuICAgICAgdHlwZTogYnVmLnJlYWRVaW50MzIoKSBhcyBFbnVtXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdpcmVNZXNzYWdlXG4iLCJpbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZW5naW5lL2NvbXBvbmVudCdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vQnl0ZUJ1ZmZlcidcbmltcG9ydCBXaXJlTWVzc2FnZSBmcm9tICcuLi93aXJlTWVzc2FnZSdcblxuZXhwb3J0IG5hbWVzcGFjZSBDb21wb25lbnRPcGVyYXRpb24ge1xuICAvKipcbiAgICogQHBhcmFtIGVudGl0eSAtIFVpbnQzMiBudW1iZXIgb2YgdGhlIGVudGl0eVxuICAgKiBAcGFyYW0gY29tcG9uZW50SWQgLSBVaW50MzIgbnVtYmVyIG9mIGlkXG4gICAqIEBwYXJhbSB0aW1lc3RhbXAgLSBVaW50NjQgTGFtcG9ydCB0aW1lc3RhbXBcbiAgICogQHBhcmFtIGRhdGEgLSBVaW50OFtdIGRhdGEgb2YgY29tcG9uZW50XG4gICAqL1xuICBleHBvcnQgdHlwZSBJUHV0Q29tcG9uZW50ID0ge1xuICAgIGVudGl0eTogRW50aXR5XG4gICAgY29tcG9uZW50SWQ6IG51bWJlclxuICAgIHRpbWVzdGFtcDogbnVtYmVyXG4gICAgZGF0YTogVWludDhBcnJheVxuICB9XG4gIGV4cG9ydCB0eXBlIElEZWxldGVDb21wb25lbnQgPSB7XG4gICAgZW50aXR5OiBFbnRpdHlcbiAgICBjb21wb25lbnRJZDogbnVtYmVyXG4gICAgdGltZXN0YW1wOiBudW1iZXJcbiAgICBkYXRhPzogdW5kZWZpbmVkXG4gIH1cblxuICBleHBvcnQgY29uc3QgTUVTU0FHRV9IRUFERVJfTEVOR1RIID0gMjBcbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiBmb3IgYW4gb3B0aW1hbCB3cml0aW5nIGRhdGEgcGFzc2luZyB0aGUgQnl0ZUJ1ZmZlclxuICAgKiAgYWxyZWFkeSBhbGxvY2F0ZWRcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB3cml0ZShcbiAgICB0eXBlOiBXaXJlTWVzc2FnZS5FbnVtLFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHRpbWVzdGFtcDogbnVtYmVyLFxuICAgIGNvbXBvbmVudERlZmluaXRpb246IENvbXBvbmVudERlZmluaXRpb24sXG4gICAgYnVmOiBCeXRlQnVmZmVyXG4gICkge1xuICAgIC8vIHJlc2VydmUgdGhlIGJlZ2lubmluZ1xuICAgIGNvbnN0IHN0YXJ0TWVzc2FnZU9mZnNldCA9IGJ1Zi5pbmNyZW1lbnRXcml0ZU9mZnNldChcbiAgICAgIFdpcmVNZXNzYWdlLkhFQURFUl9MRU5HVEggKyBNRVNTQUdFX0hFQURFUl9MRU5HVEhcbiAgICApXG5cbiAgICAvLyB3cml0ZSBib2R5XG4gICAgaWYgKHR5cGUgPT09IFdpcmVNZXNzYWdlLkVudW0uUFVUX0NPTVBPTkVOVCkge1xuICAgICAgY29tcG9uZW50RGVmaW5pdGlvbi53cml0ZVRvQnl0ZUJ1ZmZlcihlbnRpdHksIGJ1ZilcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZUxlbmd0aCA9IGJ1Zi5zaXplKCkgLSBzdGFydE1lc3NhZ2VPZmZzZXRcblxuICAgIC8vIFdyaXRlIFdpcmVNZXNzYWdlIGhlYWRlclxuICAgIGJ1Zi5zZXRVaW50MzIoc3RhcnRNZXNzYWdlT2Zmc2V0LCBtZXNzYWdlTGVuZ3RoKVxuICAgIGJ1Zi5zZXRVaW50MzIoc3RhcnRNZXNzYWdlT2Zmc2V0ICsgNCwgdHlwZSlcblxuICAgIC8vIFdyaXRlIENvbXBvbmVudE9wZXJhdGlvbiBoZWFkZXJcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCArIDgsIGVudGl0eSlcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCArIDEyLCBjb21wb25lbnREZWZpbml0aW9uLl9pZClcbiAgICBidWYuc2V0VWludDY0KHN0YXJ0TWVzc2FnZU9mZnNldCArIDE2LCBCaWdJbnQodGltZXN0YW1wKSlcbiAgICBidWYuc2V0VWludDMyKFxuICAgICAgc3RhcnRNZXNzYWdlT2Zmc2V0ICsgMjQsXG4gICAgICBtZXNzYWdlTGVuZ3RoIC0gTUVTU0FHRV9IRUFERVJfTEVOR1RIIC0gV2lyZU1lc3NhZ2UuSEVBREVSX0xFTkdUSFxuICAgIClcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZWFkKFxuICAgIGJ1ZjogQnl0ZUJ1ZmZlclxuICApOiAoV2lyZU1lc3NhZ2UuSGVhZGVyICYgKElQdXRDb21wb25lbnQgfCBJRGVsZXRlQ29tcG9uZW50KSkgfCBudWxsIHtcbiAgICBjb25zdCBoZWFkZXIgPSBXaXJlTWVzc2FnZS5yZWFkSGVhZGVyKGJ1ZilcblxuICAgIGlmICghaGVhZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IGNvbW1vbiA9IHtcbiAgICAgIC4uLmhlYWRlcixcbiAgICAgIGVudGl0eTogYnVmLnJlYWRVaW50MzIoKSBhcyBFbnRpdHksXG4gICAgICBjb21wb25lbnRJZDogYnVmLnJlYWRJbnQzMigpLFxuICAgICAgdGltZXN0YW1wOiBOdW1iZXIoYnVmLnJlYWRVaW50NjQoKSlcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyLnR5cGUgPT09IFdpcmVNZXNzYWdlLkVudW0uREVMRVRFX0NPTVBPTkVOVCkge1xuICAgICAgcmV0dXJuIGNvbW1vblxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb21tb24sXG4gICAgICBkYXRhOiBidWYucmVhZEJ1ZmZlcigpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBjcmR0UHJvdG9jb2wsIE1lc3NhZ2UgYXMgQ3JkdE1lc3NhZ2UgfSBmcm9tICdAZGNsL2NyZHQnXG5cbmltcG9ydCB0eXBlIHsgUHJlRW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lJ1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vZW5naW5lL2VudGl0eSdcbmltcG9ydCB7IGNyZWF0ZUJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBDb21wb25lbnRPcGVyYXRpb24gYXMgTWVzc2FnZSB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vY3JkdC9jb21wb25lbnRPcGVyYXRpb24nXG5pbXBvcnQgV2lyZU1lc3NhZ2UgZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi93aXJlTWVzc2FnZSdcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0cy90eXBlcydcbmltcG9ydCB7IFJlY2VpdmVNZXNzYWdlLCBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZHRTY2VuZVN5c3RlbSh7XG4gIGVuZ2luZSxcbiAgdHJhbnNwb3J0c1xufToge1xuICBlbmdpbmU6IFByZUVuZ2luZVxuICB0cmFuc3BvcnRzOiBUcmFuc3BvcnRbXVxufSkge1xuICAvLyBDUkRUIENsaWVudFxuICBjb25zdCBjcmR0Q2xpZW50ID0gY3JkdFByb3RvY29sPFVpbnQ4QXJyYXk+KClcbiAgLy8gTWVzc2FnZXMgdGhhdCB3ZSByZWNlaXZlZCBhdCB0cmFuc3BvcnQub25NZXNzYWdlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkXG4gIGNvbnN0IHJlY2VpdmVkTWVzc2FnZXM6IFJlY2VpdmVNZXNzYWdlW10gPSBbXVxuICAvLyBNZXNzYWdlcyBhbHJlYWR5IHByb2Nlc3NlZCBieSB0aGUgZW5naW5lIGJ1dCB0aGF0IHdlIG5lZWQgdG8gYnJvYWRjYXN0IHRvIG90aGVyIHRyYW5zcG9ydHMuXG4gIGNvbnN0IHRyYW5zcG9ydE1lc3NhZ2VzOiBUcmFuc3BvcnRNZXNzYWdlW10gPSBbXVxuICAvLyBNYXAgb2YgZW50aXRpZXMgYWxyZWFkeSBwcm9jZXNzZWQgYXQgbGVhc3Qgb25jZVxuXG4gIHRyYW5zcG9ydHMuZm9yRWFjaChcbiAgICAodHJhbnNwb3J0KSA9PiAodHJhbnNwb3J0Lm9ubWVzc2FnZSA9IHBhcnNlQ2h1bmtNZXNzYWdlKHRyYW5zcG9ydC50eXBlKSlcbiAgKVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gdHJhbnNwb3J0VHlwZSB0cmFucG9ydCBpZCB0byBpZGVudGl5IG1lc3NhZ2VzXG4gICAqIEByZXR1cm5zIGEgZnVuY3Rpb24gdG8gcHJvY2VzcyByZWNlaXZlZCBtZXNzYWdlc1xuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2VDaHVua01lc3NhZ2UodHJhbnNwb3J0VHlwZTogc3RyaW5nKSB7XG4gICAgLyoqXG4gICAgICogUmVjZWl2ZXMgYSBjaHVuayBvZiBiaW5hcnkgbWVzc2FnZXMgYW5kIHN0b3JlcyBhbGwgdGhlIHZhbGlkXG4gICAgICogQ29tcG9uZW50IE9wZXJhdGlvbiBNZXNzYWdlcyBhdCBtZXNzYWdlcyBxdWV1ZVxuICAgICAqIEBwYXJhbSBjaHVua01lc3NhZ2UgQSBjaHVuayBvZiBiaW5hcnkgbWVzc2FnZXNcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gcGFyc2VDaHVua01lc3NhZ2UoY2h1bmtNZXNzYWdlOiBVaW50OEFycmF5KSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKHtcbiAgICAgICAgcmVhZGluZzogeyBidWZmZXI6IGNodW5rTWVzc2FnZSwgY3VycmVudE9mZnNldDogMCB9XG4gICAgICB9KVxuXG4gICAgICB3aGlsZSAoV2lyZU1lc3NhZ2UudmFsaWRhdGUoYnVmZmVyKSkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBidWZmZXIuY3VycmVudFJlYWRPZmZzZXQoKVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5yZWFkKGJ1ZmZlcikhXG5cbiAgICAgICAgY29uc3QgeyB0eXBlLCBlbnRpdHksIGNvbXBvbmVudElkLCBkYXRhLCB0aW1lc3RhbXAgfSA9IG1lc3NhZ2VcbiAgICAgICAgcmVjZWl2ZWRNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICBjb21wb25lbnRJZCxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgICB0cmFuc3BvcnRUeXBlLFxuICAgICAgICAgIG1lc3NhZ2VCdWZmZXI6IGJ1ZmZlclxuICAgICAgICAgICAgLmJ1ZmZlcigpXG4gICAgICAgICAgICAuc3ViYXJyYXkob2Zmc2V0LCBidWZmZXIuY3VycmVudFJlYWRPZmZzZXQoKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuZCBjbGVhciB0aGUgbWVzc2FlcyBxdWV1ZVxuICAgKiBAcmV0dXJucyBtZXNzYWdlcyByZWNpZXZlZCBieSB0aGUgdHJhbnNwb3J0IHRvIHByb2Nlc3Mgb24gdGhlIG5leHQgdGlja1xuICAgKi9cbiAgZnVuY3Rpb24gZ2V0TWVzc2FnZXM8VCA9IHVua25vd24+KHZhbHVlOiBUW10pIHtcbiAgICBjb25zdCBtZXNzYWdlc1RvUHJvY2VzcyA9IEFycmF5LmZyb20odmFsdWUpXG4gICAgdmFsdWUubGVuZ3RoID0gMFxuICAgIHJldHVybiBtZXNzYWdlc1RvUHJvY2Vzc1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZm4gd2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgdGljay5cbiAgICogUHJvY2VzcyBhbGwgdGhlIG1lc3NhZ2VzIHF1ZXVlIHJlY2VpdmVkIGJ5IHRoZSB0cmFuc3BvcnRcbiAgICovXG4gIGZ1bmN0aW9uIHJlY2VpdmVNZXNzYWdlcygpIHtcbiAgICBjb25zdCBtZXNzYWdlc1RvUHJvY2VzcyA9IGdldE1lc3NhZ2VzKHJlY2VpdmVkTWVzc2FnZXMpXG4gICAgZm9yIChjb25zdCB0cmFuc3BvcnQgb2YgdHJhbnNwb3J0cykge1xuICAgICAgY29uc3QgYnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXNUb1Byb2Nlc3MpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCB0aW1lc3RhbXAsIGNvbXBvbmVudElkLCBlbnRpdHksIHR5cGUgfSA9IG1lc3NhZ2VcbiAgICAgICAgY29uc3QgY3JkdE1lc3NhZ2U6IENyZHRNZXNzYWdlPFVpbnQ4QXJyYXk+ID0ge1xuICAgICAgICAgIGtleTE6IGVudGl0eSxcbiAgICAgICAgICBrZXkyOiBjb21wb25lbnRJZCxcbiAgICAgICAgICBkYXRhOiBkYXRhIHx8IG51bGwsXG4gICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBlbmdpbmUuZ2V0Q29tcG9uZW50KGNvbXBvbmVudElkKVxuICAgICAgICBjb25zdCBjdXJyZW50ID0gY3JkdENsaWVudC5wcm9jZXNzTWVzc2FnZShjcmR0TWVzc2FnZSlcblxuICAgICAgICAvLyBDUkRUIG91dGRhdGVkIG1lc3NhZ2UuIFJlc2VuZCB0aGlzIG1lc3NhZ2UgdGhyb3VnaCB0aGUgd2lyZVxuICAgICAgICBpZiAoY3JkdE1lc3NhZ2UgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gY29tcG9uZW50LmhhcyhlbnRpdHkpXG4gICAgICAgICAgICA/IFdpcmVNZXNzYWdlLkVudW0uUFVUX0NPTVBPTkVOVFxuICAgICAgICAgICAgOiBXaXJlTWVzc2FnZS5FbnVtLkRFTEVURV9DT01QT05FTlRcbiAgICAgICAgICBNZXNzYWdlLndyaXRlKHR5cGUsIGVudGl0eSwgY3VycmVudC50aW1lc3RhbXAsIGNvbXBvbmVudCwgYnVmZmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFByb2Nlc3MgQ1JEVCBNZXNzYWdlXG4gICAgICAgICAgaWYgKHR5cGUgPT09IFdpcmVNZXNzYWdlLkVudW0uREVMRVRFX0NPTVBPTkVOVCkge1xuICAgICAgICAgICAgY29tcG9uZW50LmRlbGV0ZUZyb20oZW50aXR5KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgICByZWFkaW5nOiB7IGJ1ZmZlcjogbWVzc2FnZS5kYXRhISwgY3VycmVudE9mZnNldDogMCB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYiA9IGNyZWF0ZUJ5dGVCdWZmZXIob3B0cylcblxuICAgICAgICAgICAgLy8gVXBkYXRlIGVuZ2luZSBjb21wb25lbnRcbiAgICAgICAgICAgIGNvbXBvbmVudC51cHNlcnRGcm9tQmluYXJ5KG1lc3NhZ2UuZW50aXR5LCBiYilcbiAgICAgICAgICAgIGNvbXBvbmVudC5jbGVhckRpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQWRkIG1lc3NhZ2UgdG8gdHJhbnNwb3J0IHF1ZXVlIHRvIGJlIHByb2Nlc3NlZCBieSBvdGhlcnMgdHJhbnNwb3J0c1xuICAgICAgICAgIHRyYW5zcG9ydE1lc3NhZ2VzLnB1c2gobWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnVmZmVyLnNpemUoKSkge1xuICAgICAgICB0cmFuc3BvcnQuc2VuZChidWZmZXIudG9CaW5hcnkoKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZXMgdGhlIGRpcnR5IG1hcCBhbmQgZ2VuZXJhdGVzIGNyZHQgbWVzc2FnZXMgdG8gYmUgc2VuZFxuICAgKiBAcGFyYW0gZGlydHlNYXAgYSBtYXAgb2YgeyBlbnRpdGllczogW2NvbXBvbmVudElkXSB9XG4gICAqL1xuICBmdW5jdGlvbiBjcmVhdGVNZXNzYWdlcyhkaXJ0eU1hcDogTWFwPEVudGl0eSwgU2V0PG51bWJlcj4+KSB7XG4gICAgLy8gQ1JEVCBNZXNzYWdlcyB3aWxsIGJlIHRoZSBtZXJnZSBiZXR3ZWVuIHRoZSByZWNpZXZlZCB0cmFuc3BvcnQgbWVzc2FnZXMgYW5kIHRoZSBuZXcgY3JkdCBtZXNzYWdlc1xuICAgIGNvbnN0IGNyZHRNZXNzYWdlcyA9IGdldE1lc3NhZ2VzKHRyYW5zcG9ydE1lc3NhZ2VzKVxuICAgIGNvbnN0IGJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuXG4gICAgZm9yIChjb25zdCBbZW50aXR5LCBjb21wb25lbnRzSWRdIG9mIGRpcnR5TWFwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudElkIG9mIGNvbXBvbmVudHNJZCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBlbmdpbmUuZ2V0Q29tcG9uZW50KGNvbXBvbmVudElkKVxuICAgICAgICBjb25zdCBlbnRpdHlDb21wb25lbnQgPSBjb21wb25lbnQuaGFzKGVudGl0eSlcbiAgICAgICAgICA/IGNvbXBvbmVudC50b0JpbmFyeShlbnRpdHkpLnRvQmluYXJ5KClcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgY29uc3QgZXZlbnQgPSBjcmR0Q2xpZW50LmNyZWF0ZUV2ZW50KFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICBjb21wb25lbnRJZCxcbiAgICAgICAgICBlbnRpdHlDb21wb25lbnRcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBvZmZzZXQgPSBidWZmZXIuY3VycmVudFdyaXRlT2Zmc2V0KClcbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbXBvbmVudC5oYXMoZW50aXR5KVxuICAgICAgICAgID8gV2lyZU1lc3NhZ2UuRW51bS5QVVRfQ09NUE9ORU5UXG4gICAgICAgICAgOiBXaXJlTWVzc2FnZS5FbnVtLkRFTEVURV9DT01QT05FTlRcbiAgICAgICAgY29uc3QgdHJhbnNwb3J0TWVzc2FnZTogT21pdDxUcmFuc3BvcnRNZXNzYWdlLCAnbWVzc2FnZUJ1ZmZlcic+ID0ge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgY29tcG9uZW50SWQsXG4gICAgICAgICAgZW50aXR5LFxuICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYW5zcG9ydHMuc29tZSgodCkgPT4gdC5maWx0ZXIodHJhbnNwb3J0TWVzc2FnZSkpKSB7XG4gICAgICAgICAgTWVzc2FnZS53cml0ZSh0eXBlLCBlbnRpdHksIGV2ZW50LnRpbWVzdGFtcCwgY29tcG9uZW50LCBidWZmZXIpXG4gICAgICAgICAgY3JkdE1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgICAgLi4udHJhbnNwb3J0TWVzc2FnZSxcbiAgICAgICAgICAgIG1lc3NhZ2VCdWZmZXI6IGJ1ZmZlclxuICAgICAgICAgICAgICAuYnVmZmVyKClcbiAgICAgICAgICAgICAgLnN1YmFycmF5KG9mZnNldCwgYnVmZmVyLmN1cnJlbnRXcml0ZU9mZnNldCgpKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZW5kIG1lc3NhZ2VzIHRvIHRyYW5zcG9ydHNcbiAgICBjb25zdCB0cmFuc3BvcnRCdWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKClcbiAgICBmb3IgKGNvbnN0IHRyYW5zcG9ydCBvZiB0cmFuc3BvcnRzKSB7XG4gICAgICB0cmFuc3BvcnRCdWZmZXIucmVzZXRCdWZmZXIoKVxuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIGNyZHRNZXNzYWdlcykge1xuICAgICAgICBpZiAodHJhbnNwb3J0LmZpbHRlcihtZXNzYWdlKSkge1xuICAgICAgICAgIHRyYW5zcG9ydEJ1ZmZlci53cml0ZUJ1ZmZlcihtZXNzYWdlLm1lc3NhZ2VCdWZmZXIsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNwb3J0QnVmZmVyLnNpemUoKSkge1xuICAgICAgICB0cmFuc3BvcnQuc2VuZCh0cmFuc3BvcnRCdWZmZXIudG9CaW5hcnkoKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZU1lc3NhZ2VzLFxuICAgIHJlY2VpdmVNZXNzYWdlc1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi9jb21wb25lbnQnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBEZWVwUmVhZG9ubHlNYXA8SywgVj4gPSBSZWFkb25seU1hcDxcbiAgRGVlcFJlYWRvbmx5PEs+LFxuICBEZWVwUmVhZG9ubHk8Vj5cbj5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBEZWVwUmVhZG9ubHlTZXQ8VD4gPSBSZWFkb25seVNldDxEZWVwUmVhZG9ubHk8VD4+XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlYWRvbmx5T2JqZWN0PFQ+ID0ge1xuICByZWFkb25seSBbSyBpbiBrZXlvZiBUXTogRGVlcFJlYWRvbmx5PFRbS10+XG59XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUmVhZG9ubHlQcmltaXRpdmUgPVxuICB8IG51bWJlclxuICB8IHN0cmluZ1xuICB8IG51bWJlcltdXG4gIHwgc3RyaW5nW11cbiAgfCBib29sZWFuXG4gIHwgYm9vbGVhbltdXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBSZWFkb25seUNvbXBvbmVudFNjaGVtYTxcbiAgVCBleHRlbmRzIFtDb21wb25lbnREZWZpbml0aW9uLCAuLi5Db21wb25lbnREZWZpbml0aW9uW11dXG4+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIENvbXBvbmVudERlZmluaXRpb25cbiAgICA/IFJldHVyblR5cGU8VFtLXVsnZ2V0J10+XG4gICAgOiBuZXZlclxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlYWRvbmx5PFQ+ID0gVCBleHRlbmRzIFJlYWRvbmx5UHJpbWl0aXZlXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBEZWVwUmVhZG9ubHlNYXA8SywgVj5cbiAgOiBUIGV4dGVuZHMgU2V0PGluZmVyIE0+XG4gID8gRGVlcFJlYWRvbmx5U2V0PE0+XG4gIDogRGVlcFJlYWRvbmx5T2JqZWN0PFQ+XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwUmVhZG9ubHk8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgdmFsOiBUXG4pOiBEZWVwUmVhZG9ubHk8VD4ge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLnZhbCB9KSBhcyBEZWVwUmVhZG9ubHk8VD5cbn1cbiIsImltcG9ydCB0eXBlIHsgSVNjaGVtYSB9IGZyb20gJy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIsIGNyZWF0ZUJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eSdcbmltcG9ydCB7IGRlZXBSZWFkb25seSwgRGVlcFJlYWRvbmx5IH0gZnJvbSAnLi9yZWFkb25seSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEVjc1Jlc3VsdDxUIGV4dGVuZHMgSVNjaGVtYT4gPSBUIGV4dGVuZHMgSVNjaGVtYVxuICA/IFJldHVyblR5cGU8VFsnZGVzZXJpYWxpemUnXT5cbiAgOiBuZXZlclxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQ29tcG9uZW50VHlwZTxUIGV4dGVuZHMgSVNjaGVtYT4gPSBFY3NSZXN1bHQ8VD5cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIENvbXBvbmVudERlZmluaXRpb248XG4gIFQgZXh0ZW5kcyBJU2NoZW1hID0gSVNjaGVtYTxhbnk+LFxuICBDb25zdHJ1Y3RvclR5cGUgPSBDb21wb25lbnRUeXBlPFQ+XG4+ID0ge1xuICBfaWQ6IG51bWJlclxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50XG4gICAqL1xuICBkZWZhdWx0KCk6IERlZXBSZWFkb25seTxDb21wb25lbnRUeXBlPFQ+PlxuXG4gIC8qKlxuICAgKiBHZXQgaWYgdGhlIGVudGl0eSBoYXMgdGhpcyBjb21wb25lbnRcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uaGFzKG15RW50aXR5KSAvLyByZXR1cm4gZmFsc2VcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSlcbiAgICogVHJhbnNmb3JtLmhhcyhteUVudGl0eSkgLy8gcmV0dXJuIHRydWVcbiAgICogYGBgXG4gICAqL1xuICBoYXMoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVhZG9ubHkgY29tcG9uZW50IG9mIHRoZSBlbnRpdHkgKHRvIG11dGF0ZSBpdCwgdXNlIGdldE11dGFibGUgaW5zdGVhZCksIHRocm93IGFuIGVycm9yIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIHRoZSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHJldHVyblxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5KVxuICAgKiBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KG15RW50aXR5KSAvLyByZXR1cm4gdHJ1ZVxuICAgKiBsb2codHJhbnNmb3JtLnBvc2l0aW9uLnggPT09IDApIC8vIGxvZyAndHJ1ZSdcbiAgICpcbiAgICogdHJhbnNmb3JtLnBvc2l0aW9uLnkgPSAxMCAvLyBpbGxlZ2FsIHN0YXRlbWVudCwgdG8gbXV0YXRlIHRoZSBjb21wb25lbnQgdXNlIGdldE11dGFibGVcbiAgICogYGBgXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG90aGVyRW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5nZXQob3RoZXJFbnRpdHkpIC8vIHRocm93IGFuIGVycm9yISFcbiAgICogYGBgXG4gICAqL1xuICBnZXQoZW50aXR5OiBFbnRpdHkpOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj5cblxuICAvKipcbiAgICogR2V0IHRoZSByZWFkb25seSBjb21wb25lbnQgb2YgdGhlIGVudGl0eSAodG8gbXV0YXRlIGl0LCB1c2UgZ2V0TXV0YWJsZSBpbnN0ZWFkKSwgb3IgbnVsbCBpZiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSB0aGUgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEByZXR1cm5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3Qgb3RoZXJFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogbG9nKFRyYW5zZm9ybS5nZXQob3RoZXJFbnRpdHkpID09PSBudWxsKSAvLyBsb2cgJ3RydWUnXG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0T3JOdWxsKGVudGl0eTogRW50aXR5KTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+IHwgbnVsbFxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGN1cnJlbnQgY29tcG9uZW50IHRvIGFuIGVudGl0eSwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGNvbXBvbmVudCBhbHJlYWR5IGV4aXN0cyAodXNlIGBjcmVhdGVPclJlcGxhY2VgIGluc3RlYWQpLlxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIHZhbCBUaGUgaW5pdGlhbCB2YWx1ZVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5LCB7IC4uLlRyYW5zZm9ybS5kZWZhdWx0KCksIHBvc2l0aW9uOiB7eDogNCwgeTogMCwgejogNH0gfSkgLy8gb2shXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpIC8vIHRocm93IGFuIGVycm9yLCB0aGUgYFRyYW5zZm9ybWAgY29tcG9uZW50IGFscmVhZHkgZXhpc3RzIGluIGBteUVudGl0eWBcbiAgICogYGBgYFxuICAgKi9cbiAgY3JlYXRlKGVudGl0eTogRW50aXR5LCB2YWw/OiBDb25zdHJ1Y3RvclR5cGUpOiBDb21wb25lbnRUeXBlPFQ+XG4gIC8qKlxuICAgKiBBZGQgdGhlIGN1cnJlbnQgY29tcG9uZW50IHRvIGFuIGVudGl0eSBvciByZXBsYWNlIHRoZSBjb250ZW50IGlmIHRoZSBlbnRpdHkgYWxyZWFkeSBoYXMgdGhlIGNvbXBvbmVudFxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIHZhbCBUaGUgaW5pdGlhbCBvciBuZXcgdmFsdWVcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSkgLy8gb2shXG4gICAqIFRyYW5zZm9ybS5jcmVhdGVPclJlcGxhY2UobXlFbnRpdHksIHsgLi4uVHJhbnNmb3JtLmRlZmF1bHQoKSwgcG9zaXRpb246IHt4OiA0LCB5OiAwLCB6OiA0fSB9KSAvLyBvayFcbiAgICogYGBgYFxuICAgKi9cbiAgY3JlYXRlT3JSZXBsYWNlKGVudGl0eTogRW50aXR5LCB2YWw/OiBDb21wb25lbnRUeXBlPFQ+KTogQ29tcG9uZW50VHlwZTxUPlxuXG4gIC8qKlxuICAgKiBEZWxldGUgdGhlIGN1cnJlbnQgY29tcG9uZW50IHRvIGFuIGVudGl0eSwgcmV0dXJuIG51bGwgaWYgdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgdGhlIGN1cnJlbnQgY29tcG9uZW50LlxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSkgLy8gb2shXG4gICAqIFRyYW5zZm9ybS5kZWxldGVGcm9tKG15RW50aXR5KSAvLyByZXR1cm4gdGhlIGNvbXBvbmVudFxuICAgKiBUcmFuc2Zvcm0uZGVsZXRlRnJvbShteUVudGl0eSkgLy8gcmV0dXJuIG51bGxcbiAgICogYGBgYFxuICAgKi9cbiAgZGVsZXRlRnJvbShlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbXV0YWJsZSBjb21wb25lbnQgb2YgdGhlIGVudGl0eSwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgdGhlIGNvbXBvbmVudC5cbiAgICogLSBJbnRlcm5hbCBjb21tZW50OiBUaGlzIG1ldGhvZCBhZGRzIHRoZSA8ZW50aXR5LGNvbXBvbmVudD4gdG8gdGhlIGxpc3QgdG8gYmUgcmV2aWV3ZWQgbmV4dCBmcmFtZVxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG15RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpXG4gICAqIFRyYW5zZm9ybS5nZXRNdXRhYmxlKG15RW50aXR5KS5wb3NpdGlvbiA9IHt4OiA0LCB5OiAwLCB6OiA0fVxuICAgKiBgYGBgXG4gICAqL1xuICBnZXRNdXRhYmxlKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPlxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG11dGFibGUgY29tcG9uZW50IG9mIHRoZSBlbnRpdHksIHJldHVybiBudWxsIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIHRoZSBjb21wb25lbnQuXG4gICAqIC0gSW50ZXJuYWwgY29tbWVudDogVGhpcyBtZXRob2QgYWRkcyB0aGUgPGVudGl0eSxjb21wb25lbnQ+IHRvIHRoZSBsaXN0IHRvIGJlIHJldmlld2VkIG5leHQgZnJhbWVcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChteUVudGl0eSlcbiAgICogaWYgKHRyYW5zZm9ybSkge1xuICAgKiAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHt4OiA0LCB5OiAwLCB6OiA0fVxuICAgKiB9XG4gICAqIGBgYGBcbiAgICovXG4gIGdldE11dGFibGVPck51bGwoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbFxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgdXBzZXJ0RnJvbUJpbmFyeShlbnRpdHk6IEVudGl0eSwgZGF0YTogQnl0ZUJ1ZmZlcik6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgdXBkYXRlRnJvbUJpbmFyeShlbnRpdHk6IEVudGl0eSwgZGF0YTogQnl0ZUJ1ZmZlcik6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsXG5cbiAgLy8gYWxsb2NhdGVzIGEgYnVmZmVyIGFuZCByZXR1cm5zIG5ldyBidWZmZXJcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqL1xuICB0b0JpbmFyeShlbnRpdHk6IEVudGl0eSk6IEJ5dGVCdWZmZXJcblxuICAvLyB3cml0ZXMgdG8gYSBwcmUtYWxsb2NhdGVkIGJ1ZmZlclxuICB3cml0ZVRvQnl0ZUJ1ZmZlcihlbnRpdHk6IEVudGl0eSwgYnVmZmVyOiBCeXRlQnVmZmVyKTogdm9pZFxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgVXNlIGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQ29tcG9uZW50KSBpbnN0ZWFkLlxuICAgKiBHZXQgdGhlIGl0ZXJhdG9yIHRvIGV2ZXJ5IGVudGl0eSBoYXMgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgaXRlcmF0b3IoKTogSXRlcmFibGU8W0VudGl0eSwgQ29tcG9uZW50VHlwZTxUPl0+XG5cbiAgLy8gRGlydHlcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGlydHlJdGVyYXRvcigpOiBJdGVyYWJsZTxFbnRpdHk+XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNsZWFyRGlydHkoKTogdm9pZFxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBpc0RpcnR5KGVudGl0eTogRW50aXR5KTogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50PFxuICBUIGV4dGVuZHMgSVNjaGVtYSxcbiAgQ29uc3RydWN0b3JUeXBlID0gQ29tcG9uZW50VHlwZTxUPlxuPihcbiAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgc3BlYzogVCxcbiAgY29uc3RydWN0b3JEZWZhdWx0PzogQ29uc3RydWN0b3JUeXBlXG4gIC8vIG1ldGE6IHsgc3luY0ZsYWdzIH1cbik6IENvbXBvbmVudERlZmluaXRpb248VCwgQ29uc3RydWN0b3JUeXBlPiB7XG4gIGNvbnN0IGRhdGEgPSBuZXcgTWFwPEVudGl0eSwgQ29tcG9uZW50VHlwZTxUPj4oKVxuICBjb25zdCBkaXJ0eUl0ZXJhdG9yID0gbmV3IFNldDxFbnRpdHk+KClcblxuICBjb25zdCBkZWZhdWx0QnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gIGlmIChjb25zdHJ1Y3RvckRlZmF1bHQpIHtcbiAgICBzcGVjLnNlcmlhbGl6ZShjb25zdHJ1Y3RvckRlZmF1bHQsIGRlZmF1bHRCdWZmZXIpXG4gIH1cblxuICBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgaWYgKGNvbnN0cnVjdG9yRGVmYXVsdCkge1xuICAgICAgcmV0dXJuIHNwZWMuZGVzZXJpYWxpemUoXG4gICAgICAgIGNyZWF0ZUJ5dGVCdWZmZXIoe1xuICAgICAgICAgIHdyaXRpbmc6IHtcbiAgICAgICAgICAgIGJ1ZmZlcjogZGVmYXVsdEJ1ZmZlci5idWZmZXIoKSxcbiAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQ6IGRlZmF1bHRCdWZmZXIuY3VycmVudFdyaXRlT2Zmc2V0KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzcGVjLmNyZWF0ZSgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlZmlsbFZhbHVlKHZhbHVlOiBDb25zdHJ1Y3RvclR5cGUpIHtcbiAgICByZXR1cm4geyAuLi5nZXREZWZhdWx0VmFsdWUoKSwgLi4udmFsdWUgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBfaWQ6IGNvbXBvbmVudElkLFxuICAgIGRlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXREZWZhdWx0VmFsdWUoKVxuICAgIH0sXG4gICAgaXNEaXJ0eTogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gZGlydHlJdGVyYXRvci5oYXMoZW50aXR5KVxuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBkYXRhLmhhcyhlbnRpdHkpXG4gICAgfSxcbiAgICBkZWxldGVGcm9tOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBkYXRhLmRlbGV0ZShlbnRpdHkpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gY29tcG9uZW50IHx8IG51bGxcbiAgICB9LFxuICAgIGdldE9yTnVsbDogZnVuY3Rpb24gKFxuICAgICAgZW50aXR5OiBFbnRpdHlcbiAgICApOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj4gfCBudWxsIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIHJldHVybiBjb21wb25lbnQgPyBkZWVwUmVhZG9ubHkoY29tcG9uZW50KSA6IG51bGxcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW2dldEZyb21dIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZXBSZWFkb25seShjb21wb25lbnQpXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgdmFsdWU/OiBDb25zdHJ1Y3RvclR5cGVcbiAgICApOiBDb21wb25lbnRUeXBlPFQ+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbY3JlYXRlXSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBhbHJlYWR5IGV4aXN0c2BcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY29uc3QgdXNlZFZhbHVlID1cbiAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCA/IGdldERlZmF1bHRWYWx1ZSgpIDogcHJlZmlsbFZhbHVlKHZhbHVlKVxuICAgICAgZGF0YS5zZXQoZW50aXR5LCB1c2VkVmFsdWUpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gdXNlZFZhbHVlXG4gICAgfSxcbiAgICBjcmVhdGVPclJlcGxhY2U6IGZ1bmN0aW9uIChcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgdmFsdWU/OiBDb25zdHJ1Y3RvclR5cGVcbiAgICApOiBDb21wb25lbnRUeXBlPFQ+IHtcbiAgICAgIGNvbnN0IHVzZWRWYWx1ZSA9XG4gICAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0VmFsdWUoKSA6IHByZWZpbGxWYWx1ZSh2YWx1ZSlcbiAgICAgIGRhdGEuc2V0KGVudGl0eSwgdXNlZFZhbHVlISlcbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiB1c2VkVmFsdWUhXG4gICAgfSxcbiAgICBnZXRNdXRhYmxlT3JOdWxsOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIGNvbXBvbmVudFxuICAgIH0sXG4gICAgZ2V0TXV0YWJsZTogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFttdXRhYmxlXSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICB9LFxuICAgIGl0ZXJhdG9yOiBmdW5jdGlvbiogKCk6IEl0ZXJhYmxlPFtFbnRpdHksIENvbXBvbmVudFR5cGU8VD5dPiB7XG4gICAgICBmb3IgKGNvbnN0IFtlbnRpdHksIGNvbXBvbmVudF0gb2YgZGF0YSkge1xuICAgICAgICB5aWVsZCBbZW50aXR5LCBjb21wb25lbnRdXG4gICAgICB9XG4gICAgfSxcbiAgICBkaXJ0eUl0ZXJhdG9yOiBmdW5jdGlvbiogKCk6IEl0ZXJhYmxlPEVudGl0eT4ge1xuICAgICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZGlydHlJdGVyYXRvcikge1xuICAgICAgICB5aWVsZCBlbnRpdHlcbiAgICAgIH1cbiAgICB9LFxuICAgIHRvQmluYXJ5KGVudGl0eTogRW50aXR5KTogQnl0ZUJ1ZmZlciB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFt0b0JpbmFyeV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyaXRlQnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gICAgICBzcGVjLnNlcmlhbGl6ZShjb21wb25lbnQsIHdyaXRlQnVmZmVyKVxuICAgICAgcmV0dXJuIHdyaXRlQnVmZmVyXG4gICAgfSxcbiAgICB3cml0ZVRvQnl0ZUJ1ZmZlcihlbnRpdHk6IEVudGl0eSwgYnVmZmVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFt3cml0ZVRvQnl0ZUJ1ZmZlcl0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHNwZWMuc2VyaWFsaXplKGNvbXBvbmVudCwgYnVmZmVyKVxuICAgIH0sXG4gICAgdXBkYXRlRnJvbUJpbmFyeShcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgYnVmZmVyOiBCeXRlQnVmZmVyXG4gICAgKTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGwge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbdXBkYXRlRnJvbUJpbmFyeV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy51cHNlcnRGcm9tQmluYXJ5KGVudGl0eSwgYnVmZmVyKVxuICAgIH0sXG4gICAgdXBzZXJ0RnJvbUJpbmFyeShcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgYnVmZmVyOiBCeXRlQnVmZmVyXG4gICAgKTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGwge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBzcGVjLmRlc2VyaWFsaXplKGJ1ZmZlcilcbiAgICAgIGRhdGEuc2V0KGVudGl0eSwgbmV3VmFsdWUpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gbmV3VmFsdWVcbiAgICB9LFxuICAgIGNsZWFyRGlydHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRpcnR5SXRlcmF0b3IuY2xlYXIoKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHknXG5cbmV4cG9ydCBuYW1lc3BhY2UgRW50aXR5VXRpbHMge1xuICAvKipcbiAgICogUmFuZ2UgaXMgdGhlIGZpcnN0IGVsZW1lbnQgYW5kIHRoZSBsYXN0IHBvc3NpYmxlIGVsZW1lbnQsIHRoZXkgYm90aCBhcmUgaW5jbHVkZWQgaW4gdGhlIGludGVydmFsLlxuICAgKiBbc3RhcnQsIGVuZF1cbiAgICovXG4gIGV4cG9ydCB0eXBlIEVudGl0eVJhbmdlID0gcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXVxuXG4gIGV4cG9ydCBjb25zdCBNQVhfRU5USVRJRVMgPSAweGZmZmZmZmZmXG4gIGV4cG9ydCBjb25zdCBEWU5BTUlDX0VOVElUSUVTX1NUQVJUX0FUID0gMTAwZTNcbiAgZXhwb3J0IGNvbnN0IFJFU0VSVkVEX1NUQVRJQ19FTlRJVElFUyA9IDUxMlxuXG4gIGV4cG9ydCBjb25zdCBSRVNFUlZFRF9FTlRJVElFU19SQU5HRTogRW50aXR5UmFuZ2UgPSBbXG4gICAgMCxcbiAgICBSRVNFUlZFRF9TVEFUSUNfRU5USVRJRVMgLSAxXG4gIF1cblxuICBleHBvcnQgY29uc3QgU1RBVElDX0VOVElUSUVTX1JBTkdFOiBFbnRpdHlSYW5nZSA9IFtcbiAgICBSRVNFUlZFRF9TVEFUSUNfRU5USVRJRVMsXG4gICAgRFlOQU1JQ19FTlRJVElFU19TVEFSVF9BVCAtIDFcbiAgXVxuXG4gIGV4cG9ydCBjb25zdCBEWU5BTUlDX0VOVElUSUVTX1JBTkdFOiBFbnRpdHlSYW5nZSA9IFtcbiAgICBEWU5BTUlDX0VOVElUSUVTX1NUQVJUX0FULFxuICAgIE1BWF9FTlRJVElFU1xuICBdXG5cbiAgZnVuY3Rpb24gaXNJblJhbmdlKGVudGl0eTogRW50aXR5LCByYW5nZTogRW50aXR5UmFuZ2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZW50aXR5ID49IHJhbmdlWzBdICYmIGVudGl0eSA8PSByYW5nZVsxXVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzRHluYW1pY0VudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIHJldHVybiBpc0luUmFuZ2UoZW50aXR5LCBEWU5BTUlDX0VOVElUSUVTX1JBTkdFKVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzU3RhdGljRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgcmV0dXJuIGlzSW5SYW5nZShlbnRpdHksIFNUQVRJQ19FTlRJVElFU19SQU5HRSlcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1Jlc2VydmVkRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgcmV0dXJuIGlzSW5SYW5nZShlbnRpdHksIFJFU0VSVkVEX0VOVElUSUVTX1JBTkdFKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVudGl0eVV0aWxzXG4iLCJpbXBvcnQgeyBFbnRpdHlVdGlscyB9IGZyb20gJy4vZW50aXR5LXV0aWxzJ1xuXG5kZWNsYXJlIGNvbnN0IGVudGl0eVN5bWJvbDogdW5pcXVlIHN5bWJvbFxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eSA9IG51bWJlciAmIHsgW2VudGl0eVN5bWJvbF06IHRydWUgfVxuXG5leHBvcnQgZnVuY3Rpb24gRW50aXR5Q29udGFpbmVyKCkge1xuICBjb25zdCBzdGF0aWNFbnRpdHkgPSBFbnRpdHkoRW50aXR5VXRpbHMuU1RBVElDX0VOVElUSUVTX1JBTkdFKVxuICBjb25zdCBkeW5hbWljRW50aXR5ID0gRW50aXR5KEVudGl0eVV0aWxzLkRZTkFNSUNfRU5USVRJRVNfUkFOR0UpXG4gIHJldHVybiB7XG4gICAgZ2VuZXJhdGVFbnRpdHkoZHluYW1pYzogYm9vbGVhbiA9IGZhbHNlKTogRW50aXR5IHtcbiAgICAgIGlmIChkeW5hbWljKSB7XG4gICAgICAgIHJldHVybiBkeW5hbWljRW50aXR5LmdlbmVyYXRlRW50aXR5KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdGF0aWNFbnRpdHkuZ2VuZXJhdGVFbnRpdHkoKVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzdGF0aWNFbnRpdHkucmVtb3ZlRW50aXR5KGVudGl0eSkgfHwgZHluYW1pY0VudGl0eS5yZW1vdmVFbnRpdHkoZW50aXR5KVxuICAgICAgKVxuICAgIH0sXG4gICAgaXNFbnRpdHlFeGlzdHMoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIEVudGl0eVV0aWxzLmlzUmVzZXJ2ZWRFbnRpdHkoZW50aXR5KSB8fFxuICAgICAgICBzdGF0aWNFbnRpdHkuZ2V0RXhpc3RpbmdFbnRpdGllcygpLmhhcyhlbnRpdHkpIHx8XG4gICAgICAgIGR5bmFtaWNFbnRpdHkuZ2V0RXhpc3RpbmdFbnRpdGllcygpLmhhcyhlbnRpdHkpXG4gICAgICApXG4gICAgfSxcbiAgICBnZXRFeGlzdGluZ0VudGl0aWVzKCk6IFNldDxFbnRpdHk+IHtcbiAgICAgIHJldHVybiBuZXcgU2V0KFtcbiAgICAgICAgLi4uc3RhdGljRW50aXR5LmdldEV4aXN0aW5nRW50aXRpZXMoKSxcbiAgICAgICAgLi4uZHluYW1pY0VudGl0eS5nZXRFeGlzdGluZ0VudGl0aWVzKClcbiAgICAgIF0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIEVudGl0eShyYW5nZTogRW50aXR5VXRpbHMuRW50aXR5UmFuZ2UpIHtcbiAgZnVuY3Rpb24gY3JlYXRlRW50aXR5KGVudGl0eTogbnVtYmVyKTogRW50aXR5IHtcbiAgICByZXR1cm4gZW50aXR5IGFzIEVudGl0eVxuICB9XG5cbiAgbGV0IGVudGl0eUNvdW50ZXIgPSByYW5nZVswXVxuICBjb25zdCB1c2VkRW50aXRpZXM6IFNldDxFbnRpdHk+ID0gbmV3IFNldCgpXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVFbnRpdHkoKTogRW50aXR5IHtcbiAgICBpZiAoZW50aXR5Q291bnRlciA+PSByYW5nZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSXQgZmFpbHMgdHJ5aW5nIHRvIGdlbmVyYXRlIGFuIGVudGl0eSBvdXQgb2YgcmFuZ2UgWyR7cmFuZ2VbMF19LCAke3JhbmdlWzFdfV0uYFxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eSA9IGNyZWF0ZUVudGl0eShlbnRpdHlDb3VudGVyKVxuICAgIGVudGl0eUNvdW50ZXIrK1xuXG4gICAgdXNlZEVudGl0aWVzLmFkZChlbnRpdHkpXG4gICAgcmV0dXJuIGVudGl0eVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgcmV0dXJuIHVzZWRFbnRpdGllcy5kZWxldGUoZW50aXR5KVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBnZXRFeGlzdGluZ0VudGl0aWVzKCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQodXNlZEVudGl0aWVzKVxuICAgIH0sXG4gICAgZ2VuZXJhdGVFbnRpdHksXG4gICAgcmVtb3ZlRW50aXR5XG4gIH1cbn1cbiIsIi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBVcGRhdGUgPSAoZHQ6IG51bWJlcikgPT4gdm9pZFxuXG5leHBvcnQgY29uc3QgU1lTVEVNU19SRUdVTEFSX1BSSU9SSVRZID0gMTAwZTNcblxudHlwZSBTeXN0ZW1JdGVtID0ge1xuICBmbjogVXBkYXRlXG4gIHByaW9yaXR5OiBudW1iZXJcbiAgbmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3lzdGVtQ29udGFpbmVyKCkge1xuICBjb25zdCBzeXN0ZW1zOiBTeXN0ZW1JdGVtW10gPSBbXVxuXG4gIGZ1bmN0aW9uIHNvcnQoKSB7XG4gICAgc3lzdGVtcy5zb3J0KChhLCBiKSA9PiBiLnByaW9yaXR5IC0gYS5wcmlvcml0eSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZChmbjogVXBkYXRlLCBwcmlvcml0eTogbnVtYmVyLCBuYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHN5c3RlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5mbiA9PT0gZm4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbSBhbHJlYWR5IGFkZGVkJylcbiAgICB9IGVsc2UgaWYgKG5hbWUgJiYgc3lzdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbSBuYW1lIGFscmVhZHkgdXNlZCcpXG4gICAgfVxuXG4gICAgc3lzdGVtcy5wdXNoKHtcbiAgICAgIGZuLFxuICAgICAgcHJpb3JpdHksXG4gICAgICBuYW1lXG4gICAgfSlcbiAgICBzb3J0KClcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZShzZWxlY3Rvcjogc3RyaW5nIHwgVXBkYXRlKSB7XG4gICAgbGV0IGluZGV4ID0gLTFcblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbmRleCA9IHN5c3RlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHNlbGVjdG9yKVxuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IHN5c3RlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmZuID09PSBzZWxlY3RvcilcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBzeXN0ZW1zLnNwbGljZShpbmRleCwgMSlcbiAgICBzb3J0KClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhZGQsXG4gICAgcmVtb3ZlLFxuICAgIGdldFN5c3RlbXMoKSB7XG4gICAgICByZXR1cm4gc3lzdGVtc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgZGVmaW5lU2RrQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBTY2hlbWFzIH0gZnJvbSAnLi4vc2NoZW1hcydcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBSZXN1bHQsIFNwZWMgfSBmcm9tICcuLi9zY2hlbWFzL01hcCdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBjcmR0U2NlbmVTeXN0ZW0gfSBmcm9tICcuLi9zeXN0ZW1zL2NyZHQnXG5pbXBvcnQge1xuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBDb21wb25lbnRUeXBlLFxuICBkZWZpbmVDb21wb25lbnQgYXMgZGVmQ29tcG9uZW50XG59IGZyb20gJy4vY29tcG9uZW50J1xuaW1wb3J0IHsgRW50aXR5LCBFbnRpdHlDb250YWluZXIgfSBmcm9tICcuL2VudGl0eSdcbmltcG9ydCB7IFN5c3RlbUNvbnRhaW5lciwgU1lTVEVNU19SRUdVTEFSX1BSSU9SSVRZLCBVcGRhdGUgfSBmcm9tICcuL3N5c3RlbXMnXG5pbXBvcnQgdHlwZSB7IElFbmdpbmVQYXJhbXMgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgSUVuZ2luZSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBSZWFkb25seUNvbXBvbmVudFNjaGVtYSB9IGZyb20gJy4vcmVhZG9ubHknXG5cbmV4cG9ydCAqIGZyb20gJy4vcmVhZG9ubHknXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJ1xuZXhwb3J0IHsgQ29tcG9uZW50VHlwZSwgRW50aXR5LCBCeXRlQnVmZmVyLCBDb21wb25lbnREZWZpbml0aW9uIH1cblxuZnVuY3Rpb24gcHJlRW5naW5lKCkge1xuICBjb25zdCBlbnRpdHlDb250YWluZXIgPSBFbnRpdHlDb250YWluZXIoKVxuICBjb25zdCBjb21wb25lbnRzRGVmaW5pdGlvbiA9IG5ldyBNYXA8bnVtYmVyLCBDb21wb25lbnREZWZpbml0aW9uPGFueT4+KClcbiAgLy8gVE9ETzogZmluZCBhIHdheSB0byBtYWtlIHRoaXMgd29yay5cbiAgLy8gTWF5YmUgYSBwcm94eS9jYWxsYmFjayB0byBiZSB1cC10by1kYXRlXG4gIGNvbnN0IGVudGl0aWVzQ29tcG9uZW50ID0gbmV3IE1hcDxcbiAgICBudW1iZXIsXG4gICAgU2V0PENvbXBvbmVudERlZmluaXRpb248YW55PlsnX2lkJ10+XG4gID4oKVxuICBjb25zdCBzeXN0ZW1zID0gU3lzdGVtQ29udGFpbmVyKClcblxuICBmdW5jdGlvbiBhZGRTeXN0ZW0oXG4gICAgZm46IFVwZGF0ZSxcbiAgICBwcmlvcml0eTogbnVtYmVyID0gU1lTVEVNU19SRUdVTEFSX1BSSU9SSVRZLFxuICAgIG5hbWU/OiBzdHJpbmdcbiAgKSB7XG4gICAgc3lzdGVtcy5hZGQoZm4sIHByaW9yaXR5LCBuYW1lKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlU3lzdGVtKHNlbGVjdG9yOiBzdHJpbmcgfCBVcGRhdGUpIHtcbiAgICByZXR1cm4gc3lzdGVtcy5yZW1vdmUoc2VsZWN0b3IpXG4gIH1cblxuICBmdW5jdGlvbiBhZGRFbnRpdHkoZHluYW1pYzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgLy8gZW50aXRpZXNDb21wbm9uZW50LnNldChlbnRpdHksIG5ldyBTZXQoKSlcbiAgICBjb25zdCBlbnRpdHkgPSBlbnRpdHlDb250YWluZXIuZ2VuZXJhdGVFbnRpdHkoZHluYW1pYylcbiAgICByZXR1cm4gZW50aXR5XG4gIH1cblxuICBmdW5jdGlvbiBhZGREeW5hbWljRW50aXR5KCkge1xuICAgIHJldHVybiBhZGRFbnRpdHkodHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUVudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIGZvciAoY29uc3QgWywgY29tcG9uZW50XSBvZiBjb21wb25lbnRzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKGNvbXBvbmVudC5oYXMoZW50aXR5KSkge1xuICAgICAgICBjb21wb25lbnQuZGVsZXRlRnJvbShlbnRpdHkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eUNvbnRhaW5lci5yZW1vdmVFbnRpdHkoZW50aXR5KVxuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYTxcbiAgICBUIGV4dGVuZHMgSVNjaGVtYSxcbiAgICBDb25zdHJ1Y3RvclR5cGUgPSBDb21wb25lbnRUeXBlPFQ+XG4gID4oXG4gICAgc3BlYzogVCxcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGNvbnN0cnVjdG9yRGVmYXVsdD86IENvbnN0cnVjdG9yVHlwZVxuICApOiBDb21wb25lbnREZWZpbml0aW9uPFQsIENvbnN0cnVjdG9yVHlwZT4ge1xuICAgIGlmIChjb21wb25lbnRzRGVmaW5pdGlvbi5nZXQoY29tcG9uZW50SWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCAke2NvbXBvbmVudElkfSBhbHJlYWR5IGRlY2xhcmVkYClcbiAgICB9XG4gICAgY29uc3QgbmV3Q29tcG9uZW50ID0gZGVmQ29tcG9uZW50PFQsIENvbnN0cnVjdG9yVHlwZT4oXG4gICAgICBjb21wb25lbnRJZCxcbiAgICAgIHNwZWMsXG4gICAgICBjb25zdHJ1Y3RvckRlZmF1bHRcbiAgICApXG4gICAgY29tcG9uZW50c0RlZmluaXRpb24uc2V0KGNvbXBvbmVudElkLCBuZXdDb21wb25lbnQpXG4gICAgcmV0dXJuIG5ld0NvbXBvbmVudFxuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50PFxuICAgIFQgZXh0ZW5kcyBTcGVjLFxuICAgIENvbnN0cnVjdG9yVHlwZSA9IFBhcnRpYWw8UmVzdWx0PFQ+PlxuICA+KFxuICAgIHNwZWM6IFQsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBjb25zdHJ1Y3RvckRlZmF1bHQ/OiBDb25zdHJ1Y3RvclR5cGVcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbjxJU2NoZW1hPFJlc3VsdDxUPj4sIENvbnN0cnVjdG9yVHlwZT4ge1xuICAgIHJldHVybiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFxuICAgICAgU2NoZW1hcy5NYXAoc3BlYyksXG4gICAgICBjb21wb25lbnRJZCxcbiAgICAgIGNvbnN0cnVjdG9yRGVmYXVsdFxuICAgIClcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbXBvbmVudDxUIGV4dGVuZHMgSVNjaGVtYT4oXG4gICAgY29tcG9uZW50SWQ6IG51bWJlclxuICApOiBDb21wb25lbnREZWZpbml0aW9uPFQ+IHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBjb21wb25lbnRzRGVmaW5pdGlvbi5nZXQoY29tcG9uZW50SWQpXG4gICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvbXBvbmVudCBub3QgZm91bmQuIFlvdSBuZWVkIHRvIGRlY2xhcmUgdGhlIGNvbXBvbmVudHMgYXQgdGhlIGJlZ2lubmlnIG9mIHRoZSBlbmdpbmUgZGVjbGFyYXRpb24nXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uKiBnZXRFbnRpdGllc1dpdGg8XG4gICAgVCBleHRlbmRzIFtDb21wb25lbnREZWZpbml0aW9uLCAuLi5Db21wb25lbnREZWZpbml0aW9uW11dXG4gID4oLi4uY29tcG9uZW50czogVCk6IEl0ZXJhYmxlPFtFbnRpdHksIC4uLlJlYWRvbmx5Q29tcG9uZW50U2NoZW1hPFQ+XT4ge1xuICAgIGZvciAoY29uc3QgW2VudGl0eSwgLi4uZ3JvdXBDb21wXSBvZiBnZXRDb21wb25lbnREZWZHcm91cCguLi5jb21wb25lbnRzKSkge1xuICAgICAgeWllbGQgW2VudGl0eSwgLi4uZ3JvdXBDb21wLm1hcCgoYykgPT4gYy5nZXQoZW50aXR5KSldIGFzIFtcbiAgICAgICAgRW50aXR5LFxuICAgICAgICAuLi5SZWFkb25seUNvbXBvbmVudFNjaGVtYTxUPlxuICAgICAgXVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uKiBnZXRDb21wb25lbnREZWZHcm91cDxUIGV4dGVuZHMgQ29tcG9uZW50RGVmaW5pdGlvbltdPihcbiAgICAuLi5hcmdzOiBUXG4gICk6IEl0ZXJhYmxlPFtFbnRpdHksIC4uLlRdPiB7XG4gICAgY29uc3QgW2ZpcnN0Q29tcG9uZW50RGVmLCAuLi5jb21wb25lbnREZWZpbml0aW9uc10gPSBhcmdzXG4gICAgZm9yIChjb25zdCBbZW50aXR5XSBvZiBmaXJzdENvbXBvbmVudERlZi5pdGVyYXRvcigpKSB7XG4gICAgICBsZXQgbWF0Y2hlcyA9IHRydWVcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50RGVmIG9mIGNvbXBvbmVudERlZmluaXRpb25zKSB7XG4gICAgICAgIGlmICghY29tcG9uZW50RGVmLmhhcyhlbnRpdHkpKSB7XG4gICAgICAgICAgbWF0Y2hlcyA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICB5aWVsZCBbZW50aXR5LCAuLi5hcmdzXVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN5c3RlbXMoKSB7XG4gICAgcmV0dXJuIHN5c3RlbXMuZ2V0U3lzdGVtcygpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVDb21wb25lbnREZWZpbml0aW9uKGNvbXBvbmVudElkOiBudW1iZXIpIHtcbiAgICBjb21wb25lbnRzRGVmaW5pdGlvbi5kZWxldGUoY29tcG9uZW50SWQpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVudGl0aWVzQ29tcG9uZW50LFxuICAgIGNvbXBvbmVudHNEZWZpbml0aW9uLFxuICAgIGFkZEVudGl0eSxcbiAgICBhZGREeW5hbWljRW50aXR5LFxuICAgIHJlbW92ZUVudGl0eSxcbiAgICBhZGRTeXN0ZW0sXG4gICAgZ2V0U3lzdGVtcyxcbiAgICByZW1vdmVTeXN0ZW0sXG4gICAgZGVmaW5lQ29tcG9uZW50LFxuICAgIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEsXG4gICAgZ2V0RW50aXRpZXNXaXRoLFxuICAgIGdldENvbXBvbmVudCxcbiAgICByZW1vdmVDb21wb25lbnREZWZpbml0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFByZUVuZ2luZSA9IFJldHVyblR5cGU8dHlwZW9mIHByZUVuZ2luZT5cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbmdpbmUoeyB0cmFuc3BvcnRzIH06IElFbmdpbmVQYXJhbXMgPSB7fSk6IElFbmdpbmUge1xuICBjb25zdCBlbmdpbmUgPSBwcmVFbmdpbmUoKVxuICBjb25zdCBjcmR0U3lzdGVtID0gY3JkdFNjZW5lU3lzdGVtKHsgZW5naW5lLCB0cmFuc3BvcnRzOiB0cmFuc3BvcnRzIHx8IFtdIH0pXG4gIGNvbnN0IGJhc2VDb21wb25lbnRzID0gZGVmaW5lU2RrQ29tcG9uZW50cyhlbmdpbmUpXG5cbiAgZnVuY3Rpb24gdXBkYXRlKGR0OiBudW1iZXIpIHtcbiAgICBjcmR0U3lzdGVtLnJlY2VpdmVNZXNzYWdlcygpXG5cbiAgICBmb3IgKGNvbnN0IHN5c3RlbSBvZiBlbmdpbmUuZ2V0U3lzdGVtcygpKSB7XG4gICAgICBzeXN0ZW0uZm4oZHQpXG4gICAgfVxuXG4gICAgLy8gU2VsZWN0ZWQgY29tcG9uZW50cyB0aGF0IG9ubHkgZXhpc3Qgb25lIGZyYW1lXG4gICAgLy8gIHRoZW4sIHRoZXkgYXJlIGRlbGV0ZWQgYnV0IHRoZWlyIGNyZHQgc3RhdGUga2VlcHNcbiAgICBjb25zdCByZW1vdmVTZWxlY3RlZENvbXBvbmVudHMgPSBbXG4gICAgICBiYXNlQ29tcG9uZW50cy5PblBvaW50ZXJEb3duUmVzdWx0LFxuICAgICAgYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyVXBSZXN1bHRcbiAgICBdXG4gICAgY29uc3QgZXhjbHVkZUNvbXBvbmVudElkcyA9IHJlbW92ZVNlbGVjdGVkQ29tcG9uZW50cy5tYXAoKGl0ZW0pID0+IGl0ZW0uX2lkKVxuICAgIGZvciAoY29uc3QgY29tcG9uZW50RGVmIG9mIHJlbW92ZVNlbGVjdGVkQ29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbZW50aXR5XSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKGNvbXBvbmVudERlZikpIHtcbiAgICAgICAgY29tcG9uZW50RGVmLmRlbGV0ZUZyb20oZW50aXR5KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFBlcmYgdGlwXG4gICAgLy8gU2hvdWxkIHdlIGFkZCBzb21lIGRpcnR5SXRlcmF0b3JTZXQgYXQgZW5naW5lIGxldmVsIHNvIHdlIGRvbnQgaGF2ZVxuICAgIC8vIHRvIGl0ZXJhdGUgYWxsIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbnMgdG8gZ2V0IHRoZSBkaXJ0eSBvbmVzID9cbiAgICBjb25zdCBkaXJ0eVNldCA9IG5ldyBNYXA8RW50aXR5LCBTZXQ8bnVtYmVyPj4oKVxuICAgIGZvciAoY29uc3QgW2NvbXBvbmVudElkLCBkZWZpbml0aW9uXSBvZiBlbmdpbmUuY29tcG9uZW50c0RlZmluaXRpb24pIHtcbiAgICAgIGlmIChleGNsdWRlQ29tcG9uZW50SWRzLmluY2x1ZGVzKGNvbXBvbmVudElkKSkgY29udGludWVcblxuICAgICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZGVmaW5pdGlvbi5kaXJ0eUl0ZXJhdG9yKCkpIHtcbiAgICAgICAgaWYgKCFkaXJ0eVNldC5oYXMoZW50aXR5KSkge1xuICAgICAgICAgIGRpcnR5U2V0LnNldChlbnRpdHksIG5ldyBTZXQoKSlcbiAgICAgICAgfVxuICAgICAgICBkaXJ0eVNldC5nZXQoZW50aXR5KSEuYWRkKGNvbXBvbmVudElkKVxuICAgICAgfVxuICAgIH1cbiAgICBjcmR0U3lzdGVtLmNyZWF0ZU1lc3NhZ2VzKGRpcnR5U2V0KVxuXG4gICAgZm9yIChjb25zdCBbX2NvbXBvbmVudElkLCBkZWZpbml0aW9uXSBvZiBlbmdpbmUuY29tcG9uZW50c0RlZmluaXRpb24pIHtcbiAgICAgIGRlZmluaXRpb24uY2xlYXJEaXJ0eSgpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRFbnRpdHk6IGVuZ2luZS5hZGRFbnRpdHksXG4gICAgYWRkRHluYW1pY0VudGl0eTogZW5naW5lLmFkZER5bmFtaWNFbnRpdHksXG4gICAgcmVtb3ZlRW50aXR5OiBlbmdpbmUucmVtb3ZlRW50aXR5LFxuICAgIGFkZFN5c3RlbTogZW5naW5lLmFkZFN5c3RlbSxcbiAgICByZW1vdmVTeXN0ZW06IGVuZ2luZS5yZW1vdmVTeXN0ZW0sXG4gICAgZGVmaW5lQ29tcG9uZW50OiBlbmdpbmUuZGVmaW5lQ29tcG9uZW50LFxuICAgIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWE6IGVuZ2luZS5kZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hLFxuICAgIGdldEVudGl0aWVzV2l0aDogZW5naW5lLmdldEVudGl0aWVzV2l0aCxcbiAgICBnZXRDb21wb25lbnQ6IGVuZ2luZS5nZXRDb21wb25lbnQsXG4gICAgcmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvbjogZW5naW5lLnJlbW92ZUNvbXBvbmVudERlZmluaXRpb24sXG4gICAgdXBkYXRlLFxuICAgIGJhc2VDb21wb25lbnRzXG4gIH1cbn1cbiIsIi8qKiBAcHVibGljICovXG5leHBvcnQgZW51bSBFQ1NDb21wb25lbnRJRHMge1xuXHRUcmFuc2Zvcm0gPSAxLFxuXHRBbmltYXRvciA9IDEwNDIsXG5cdEF1ZGlvU291cmNlID0gMTAyMCxcblx0QXZhdGFyQXR0YWNoID0gMTA3Myxcblx0QXZhdGFyTW9kaWZpZXJBcmVhID0gMTA3MCxcblx0QXZhdGFyU2hhcGUgPSAxMDgwLFxuXHRCaWxsYm9hcmQgPSAxMDkwLFxuXHRCb3hTaGFwZSA9IDEwMTMsXG5cdENhbWVyYU1vZGUgPSAxMDcyLFxuXHRDYW1lcmFNb2RlQXJlYSA9IDEwNzEsXG5cdEN5bGluZGVyU2hhcGUgPSAxMDE2LFxuXHRHTFRGU2hhcGUgPSAxMDQxLFxuXHRNYXRlcmlhbCA9IDEwMTcsXG5cdE1lc2hSZW5kZXJlciA9IDEwMTgsXG5cdE5GVFNoYXBlID0gMTA0MCxcblx0T25Qb2ludGVyRG93biA9IDEwNjAsXG5cdE9uUG9pbnRlckRvd25SZXN1bHQgPSAxMDY2LFxuXHRPblBvaW50ZXJVcCA9IDEwNjEsXG5cdE9uUG9pbnRlclVwUmVzdWx0ID0gMTA2NSxcblx0UGxhbmVTaGFwZSA9IDEwMTQsXG5cdFBvaW50ZXJMb2NrID0gMTA3NCxcblx0U3BoZXJlU2hhcGUgPSAxMDE1LFxuXHRUZXh0U2hhcGUgPSAxMDMwLFxuXHRVaVRleHQgPSAxMDUyLFxuXHRWaXNpYmlsaXR5Q29tcG9uZW50ID0gMTA4MSxcbn1cbiIsImltcG9ydCB7IFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBFQ1NDb21wb25lbnRJRHMgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2dlbmVyYXRlZC9pZHMuZ2VuJ1xuXG5jb25zdCBjb21wb25lbnRJZHMgPSBPYmplY3QudmFsdWVzKEVDU0NvbXBvbmVudElEcylcbiAgLmZpbHRlcigoYSkgPT4gdHlwZW9mIGEgPT09ICdudW1iZXInKVxuICAubWFwKE51bWJlcilcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gIGlmICh0eXBlb2YgZGNsID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCBuZXcgcnBjXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBjcmVhdGUgY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQgd2l0aG91dCBnbG9iYWwgZGNsIG9iamVjdCdcbiAgICApXG4gIH1cblxuICBjb25zdCB0eXBlID0gJ3JlbmRlcmVyJ1xuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgc2VuZChtZXNzYWdlOiBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgICAvLyBUT0RPOiByZXBsYWNlIHdpdGggbmV3IHJwY1xuICAgICAgZGNsXG4gICAgICAgIC5jYWxsUnBjKCdAZGVjZW50cmFsYW5kL0V4cGVyaW1lbnRhbEFQSScsICdzZW5kVG9SZW5kZXJlcicsIFtcbiAgICAgICAgICB7IGRhdGE6IG5ldyBVaW50OEFycmF5KG1lc3NhZ2UpIH1cbiAgICAgICAgXSlcbiAgICAgICAgLmNhdGNoKGRjbC5lcnJvcilcbiAgICB9LFxuICAgIGZpbHRlcihtZXNzYWdlOiBUcmFuc3BvcnRNZXNzYWdlKTogYm9vbGVhbiB7XG4gICAgICAvLyBFY2hvIG1lc3NhZ2UsIGlnbm9yZSB0aGVtXG4gICAgICBpZiAobWVzc2FnZS50cmFuc3BvcnRUeXBlID09PSB0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHNlbmQgcmVuZGVyZXIgY29tcG9uZW50cyAoUHJvdG8gR2VuZXJhdGVkKVxuICAgICAgaWYgKCFjb21wb25lbnRJZHMuaW5jbHVkZXMobWVzc2FnZS5jb21wb25lbnRJZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIW1lc3NhZ2VcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXR3b3JrVHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gIC8vIGNvbnN0IHJwYyA9IG5ldyBScGNUcmFuc3BvcnQoKVxuICBmdW5jdGlvbiBzZW5kKC4uLl9hcmdzOiBhbnlbXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdOZXR3b3JrTWVzc2FnZSBTZW50OiAnLCAuLi5hcmdzKVxuICB9XG5cbiAgY29uc3QgdHlwZSA9ICduZXR3b3JrLXRyYW5zcG9ydCdcbiAgcmV0dXJuIHtcbiAgICBzZW5kLFxuICAgIHR5cGUsXG4gICAgZmlsdGVyKG1lc3NhZ2U6IFRyYW5zcG9ydE1lc3NhZ2UpOiBib29sZWFuIHtcbiAgICAgIC8vIEVjaG8gbWVzc2FnZSwgaWdub3JlIHRoZW1cbiAgICAgIGlmIChtZXNzYWdlLnRyYW5zcG9ydFR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IFN0YXRpYyBlbnRpdGllcyAmIE5ldHdvcmsgY29tcG9uZW50c1xuXG4gICAgICByZXR1cm4gISFtZXNzYWdlIC8vIHZhbGlkQ29tcG9uZW50cy5pbmNsdWRlcyhjb21wb25lbnRJZClcbiAgICB9XG4gIH1cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiQGRjbC9wb3NpeFwiIC8+XG5cbi8qKlxuICogQGFscGhhICogVGhpcyBmaWxlIGluaXRpYWxpemF0aW9uIGlzIGFuIGFscGhhIG9uZS4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgb2xkLWVjc1xuICogaW5pdCBhbmQgaXQnbGwgYmUgY2hhbmdpbmcuXG4gKi9cblxuaW1wb3J0IHsgRW5naW5lIH0gZnJvbSAnLi4vZW5naW5lJ1xuaW1wb3J0IHsgY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQgfSBmcm9tICcuLi9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydCdcbmltcG9ydCB7IGNyZWF0ZU5ldHdvcmtUcmFuc3BvcnQgfSBmcm9tICcuLi9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9uZXR3b3JrVHJhbnNwb3J0J1xuXG5jb25zdCByZW5kZXJlclRyYW5zcG9ydCA9IGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0KClcbmV4cG9ydCBjb25zdCBlbmdpbmUgPSBFbmdpbmUoe1xuICB0cmFuc3BvcnRzOiBbcmVuZGVyZXJUcmFuc3BvcnQsIGNyZWF0ZU5ldHdvcmtUcmFuc3BvcnQoKV1cbn0pXG5cbmlmICh0eXBlb2YgZGNsICE9PSAndW5kZWZpbmVkJykge1xuICBkY2wubG9hZE1vZHVsZSgnQGRlY2VudHJhbGFuZC9FeHBlcmltZW50YWxBUEknLCB7fSkuY2F0Y2goZGNsLmVycm9yKVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHB1bGxSZW5kZXJlck1lc3NhZ2VzKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZGNsLmNhbGxScGMoXG4gICAgICAnQGRlY2VudHJhbGFuZC9FeHBlcmltZW50YWxBUEknLFxuICAgICAgJ21lc3NhZ2VGcm9tUmVuZGVyZXInLFxuICAgICAgW11cbiAgICApXG5cbiAgICBpZiAocmVzcG9uc2UuZGF0YT8ubGVuZ3RoKSB7XG4gICAgICBpZiAocmVuZGVyZXJUcmFuc3BvcnQub25tZXNzYWdlKSB7XG4gICAgICAgIGZvciAoY29uc3QgYnl0ZUFycmF5IG9mIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICByZW5kZXJlclRyYW5zcG9ydC5vbm1lc3NhZ2UoYnl0ZUFycmF5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGNsLm9uVXBkYXRlKChkdDogbnVtYmVyKSA9PiB7XG4gICAgcHVsbFJlbmRlcmVyTWVzc2FnZXMoKVxuICAgICAgLmNhdGNoKGRjbC5lcnJvcilcbiAgICAgIC5maW5hbGx5KCgpID0+IGVuZ2luZS51cGRhdGUoZHQpKVxuICB9KVxufVxuXG5leHBvcnQgY29uc3QgbG9nID0gZGNsLmxvZ1xuZXhwb3J0IGNvbnN0IGVycm9yID0gZGNsLmVycm9yXG4iLCJpbXBvcnQgeyBlbmdpbmUgfSBmcm9tICcuLi8uLi9ydW50aW1lL2luaXRpYWxpemF0aW9uJ1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFRyYW5zZm9ybSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5UcmFuc2Zvcm1cbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQW5pbWF0b3IgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQW5pbWF0b3Jcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQXVkaW9Tb3VyY2UgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXVkaW9Tb3VyY2Vcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQXZhdGFyQXR0YWNoID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhckF0dGFjaFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBBdmF0YXJNb2RpZmllckFyZWEgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyTW9kaWZpZXJBcmVhXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhclNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhclNoYXBlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEJpbGxib2FyZCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5CaWxsYm9hcmRcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQm94U2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQm94U2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQ2FtZXJhTW9kZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5DYW1lcmFNb2RlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IENhbWVyYU1vZGVBcmVhID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkNhbWVyYU1vZGVBcmVhXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEN5bGluZGVyU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ3lsaW5kZXJTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBHTFRGU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuR0xURlNoYXBlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE1hdGVyaWFsID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk1hdGVyaWFsXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoUmVuZGVyZXJcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgTkZUU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTkZUU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgT25Qb2ludGVyRG93biA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJEb3duXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blJlc3VsdFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJVcFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcFJlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJVcFJlc3VsdFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBQbGFuZVNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBsYW5lU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgUG9pbnRlckxvY2sgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUG9pbnRlckxvY2tcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgU3BoZXJlU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuU3BoZXJlU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgVGV4dFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRleHRTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBVaVRleHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVWlUZXh0XG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb21wb25lbnQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVmlzaWJpbGl0eUNvbXBvbmVudFxuIiwiaW1wb3J0IHsgZW5naW5lIH0gZnJvbSAnLi4vLi4vcnVudGltZS9pbml0aWFsaXphdGlvbidcbi8qKiBAcHVibGljICovXG5leHBvcnQgbmFtZXNwYWNlIENvbXBvbmVudHMge1xuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVHJhbnNmb3JtID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRyYW5zZm9ybVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQW5pbWF0b3IgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQW5pbWF0b3Jcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEF1ZGlvU291cmNlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF1ZGlvU291cmNlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJBdHRhY2ggPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyQXR0YWNoXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJNb2RpZmllckFyZWEgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyTW9kaWZpZXJBcmVhXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQmlsbGJvYXJkID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkJpbGxib2FyZFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQm94U2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQm94U2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IENhbWVyYU1vZGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ2FtZXJhTW9kZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQ2FtZXJhTW9kZUFyZWEgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ2FtZXJhTW9kZUFyZWFcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEN5bGluZGVyU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ3lsaW5kZXJTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgR0xURlNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkdMVEZTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgTWF0ZXJpYWwgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTWF0ZXJpYWxcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoUmVuZGVyZXJcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE5GVFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk5GVFNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBPblBvaW50ZXJEb3duID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlckRvd25cblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blJlc3VsdFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgT25Qb2ludGVyVXAgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyVXBcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwUmVzdWx0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwUmVzdWx0XG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBQbGFuZVNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBsYW5lU2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IFBvaW50ZXJMb2NrID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBvaW50ZXJMb2NrXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBTcGhlcmVTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5TcGhlcmVTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVGV4dFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRleHRTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVWlUZXh0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlVpVGV4dFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbXBvbmVudCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5WaXNpYmlsaXR5Q29tcG9uZW50XG59XG4iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwidGhpcyIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwiZ2xvYmFsIiwiX20wIiwiQ09NUE9ORU5UX0lEIiwiZ2xvYmFsVGhpcyIsIkxvbmciLCJBbmltYXRvclNjaGVtYS5BbmltYXRvclNjaGVtYSIsIkFuaW1hdG9yU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkF1ZGlvU291cmNlU2NoZW1hLkF1ZGlvU291cmNlU2NoZW1hIiwiQXVkaW9Tb3VyY2VTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQXZhdGFyQXR0YWNoU2NoZW1hLkF2YXRhckF0dGFjaFNjaGVtYSIsIkF2YXRhckF0dGFjaFNjaGVtYS5DT01QT05FTlRfSUQiLCJBdmF0YXJNb2RpZmllckFyZWFTY2hlbWEuQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hIiwiQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkF2YXRhclNoYXBlU2NoZW1hLkF2YXRhclNoYXBlU2NoZW1hIiwiQXZhdGFyU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQmlsbGJvYXJkU2NoZW1hLkJpbGxib2FyZFNjaGVtYSIsIkJpbGxib2FyZFNjaGVtYS5DT01QT05FTlRfSUQiLCJCb3hTaGFwZVNjaGVtYS5Cb3hTaGFwZVNjaGVtYSIsIkJveFNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkNhbWVyYU1vZGVTY2hlbWEuQ2FtZXJhTW9kZVNjaGVtYSIsIkNhbWVyYU1vZGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQ2FtZXJhTW9kZUFyZWFTY2hlbWEuQ2FtZXJhTW9kZUFyZWFTY2hlbWEiLCJDYW1lcmFNb2RlQXJlYVNjaGVtYS5DT01QT05FTlRfSUQiLCJDeWxpbmRlclNoYXBlU2NoZW1hLkN5bGluZGVyU2hhcGVTY2hlbWEiLCJDeWxpbmRlclNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkdMVEZTaGFwZVNjaGVtYS5HTFRGU2hhcGVTY2hlbWEiLCJHTFRGU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiTWF0ZXJpYWxTY2hlbWEuTWF0ZXJpYWxTY2hlbWEiLCJNYXRlcmlhbFNjaGVtYS5DT01QT05FTlRfSUQiLCJNZXNoUmVuZGVyZXJTY2hlbWEuTWVzaFJlbmRlcmVyU2NoZW1hIiwiTWVzaFJlbmRlcmVyU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk5GVFNoYXBlU2NoZW1hLk5GVFNoYXBlU2NoZW1hIiwiTkZUU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiT25Qb2ludGVyRG93blNjaGVtYS5PblBvaW50ZXJEb3duU2NoZW1hIiwiT25Qb2ludGVyRG93blNjaGVtYS5DT01QT05FTlRfSUQiLCJPblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLk9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEiLCJPblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCIsIk9uUG9pbnRlclVwU2NoZW1hLk9uUG9pbnRlclVwU2NoZW1hIiwiT25Qb2ludGVyVXBTY2hlbWEuQ09NUE9ORU5UX0lEIiwiT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEuT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEiLCJPblBvaW50ZXJVcFJlc3VsdFNjaGVtYS5DT01QT05FTlRfSUQiLCJQbGFuZVNoYXBlU2NoZW1hLlBsYW5lU2hhcGVTY2hlbWEiLCJQbGFuZVNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIlBvaW50ZXJMb2NrU2NoZW1hLlBvaW50ZXJMb2NrU2NoZW1hIiwiUG9pbnRlckxvY2tTY2hlbWEuQ09NUE9ORU5UX0lEIiwiU3BoZXJlU2hhcGVTY2hlbWEuU3BoZXJlU2hhcGVTY2hlbWEiLCJTcGhlcmVTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQiLCJUZXh0U2hhcGVTY2hlbWEuVGV4dFNoYXBlU2NoZW1hIiwiVGV4dFNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIlVpVGV4dFNjaGVtYS5VaVRleHRTY2hlbWEiLCJVaVRleHRTY2hlbWEuQ09NUE9ORU5UX0lEIiwiVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYS5WaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hIiwiVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYS5DT01QT05FTlRfSUQiLCJTY2hlbWFzIiwiaUludDY0IiwiV2lyZU1lc3NhZ2UiLCJjcmR0UHJvdG9jb2wiLCJNZXNzYWdlIiwiZGVmQ29tcG9uZW50IiwiZGVmaW5lQ29tcG9uZW50IiwiQ29tcG9uZW50cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FDQSxNQUFNLENBQUMsY0FBYyxDQUFBLE9BQUEsRUFBVSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztHQUM5RCxPQUFrQixDQUFBLE9BQUEsR0FBQSxLQUFLLENBQUMsQ0FBQztHQUt6QixDQUFDLFVBQVUsT0FBTyxFQUFFO0NBQ3BCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxNQUFNO0NBQ25CO0NBQ0E7Q0FDQTtPQUNJLENBQUMsR0FBRyxDQUFDO0NBQ1Q7Q0FDQTtDQUNBO09BQ0ksQ0FBQyxHQUFHLENBQUM7Q0FDVDtDQUNBO0NBQ0E7T0FDSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1dBQ0gsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdEI7Q0FDTCxNQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0NBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRTtDQUNuQyxVQUFRLE9BQU87ZUFDSCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztlQUN4QixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztlQUN4QixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FB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LENBQUMsRUFBRTtXQUN2QixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7V0FDM0IsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDakQ7Q0FDQSxVQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzVDLFVBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDNUMsVUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QyxVQUFRLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDN0M7Q0FDQSxVQUFRLE9BQU87Q0FDZixjQUFZLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtDQUN2RCxjQUFZLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtDQUN2RCxjQUFZLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtDQUN2RCxXQUFT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QUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0NBQ2pFLFVBQVEsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUM1QixVQUFRLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDNUIsVUFBUSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQzVCLFVBQVEsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUM1QixVQUFRLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDNUIsVUFBUSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQzVCLFVBQVEsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztDQUNqQyxVQUFRLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7Q0FDakMsVUFBUSxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1dBQ3pCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JDLFVBQVEsTUFBTSxVQUFVLEdBQUcsTUFBTSxFQUFFLENBQUM7Q0FDcEMsVUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7ZUFDVixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztDQUMxQyxjQUFZLFVBQVUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQyxjQUFZLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO2VBQ2hCLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztlQUNqQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7ZUFDakMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUks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R0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Q0FDdEMsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9DLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvQyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0MsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzFDO0NBQ0wsTUFBSSxVQUFVLENBQUMseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7Q0FDckU7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFO0NBQ3JELFVBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUMvQjtXQUNRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDbEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FB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O0NBQ0E7T0FDSSxTQUFTLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtDQUM3QyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2pGLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNsRixVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2pGLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RTtDQUNMLE1BQUksVUFBVSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7Q0FDN0MsTUFBSSxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO1dBQzlCLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0NBQ3pELGNBQVksT0FBTyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEM7Q0FDVCxVQUFRLE1BQU0sTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO1dBQzFCLElBQUksT0FBTyxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1dBQ3hDLE9BQU8sSUFBSSxHQUFHLENBQUM7V0FDZixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNyRCxVQUFRLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2hFLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1dBQ2hCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUNyQyxVQUFRLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCO0NBQ0wsTUFBSSxVQUFVLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztDQUNyQztDQUNBO0NBQ0E7T0FDSSxTQUFTLElBQUksR0FBRztXQUNaLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDO0NBQ0wsTUFBSSxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUMxQixFQUFlLE9BQU8sQ0FBQyxVQUFVLEtBQUssT0FBcUIsQ0FBQSxVQUFBLEdBQUEsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqRSxFQUFBOzs7Ozs7Ozs7OztHQ3RhQSxJQUFJLGVBQWUsR0FBRyxDQUFDQyxjQUFJLElBQUlBLGNBQUksQ0FBQyxlQUFlLE1BQU0sTUFBTSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtPQUM1RixJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUM3QixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RixLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO09BQ3hCLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQzdCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7Q0FDSixFQUFBLElBQUksWUFBWSxHQUFHLENBQUNBLGNBQUksSUFBSUEsY0FBSSxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUU7Q0FDdkUsTUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzlILEdBQUMsQ0FBQztHQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUEsT0FBQSxFQUFVLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0NBQzlELEVBQUEsWUFBWSxDQUFDSCxpQkFBQSxFQUF1QixFQUFFLE9BQU8sQ0FBQyxDQUFDO0NBQy9DLEVBQUEsWUFBWSxDQUFDQyxjQUFBLEVBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDNUMsRUFBQSxZQUFZLENBQUNDLGNBQUEsRUFBa0IsRUFBRSxPQUFPLENBQUMsQ0FBQztDQUMxQyxFQUFBLFlBQVksQ0FBQ0UsYUFBQSxFQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0NBQzFDLEVBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0NmQSxDQUFjLFNBQUEsR0FBRyxTQUFTLENBQUM7QUFDM0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLFNBQVMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxnQkFBZ0I7TUFDdEMsSUFBSSxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7VUFDekMsTUFBTSxJQUFJLENBQUM7VUFDWCxLQUFLLEtBQUssQ0FBQztVQUNYLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDdkIsS0FBSSxPQUFPLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTTtVQUMzQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUMxQyxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7VUFDbEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsUUFBUSxDQUFDLEdBQUcsZ0JBQWdCO2NBQ2xELElBQUksT0FBTyxFQUFFO2tCQUNULE9BQU8sR0FBRyxLQUFLLENBQUM7Q0FDaEMsaUJBQWdCLElBQUksR0FBRztDQUN2QixxQkFBb0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3VCQUNYO3NCQUNELElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOzBCQUN4QyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLHFCQUFvQixPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTTswQkFDekIsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3NCQUN6QyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzttQkFDL0I7ZUFDSjtDQUNiLFVBQVMsQ0FBQztDQUNWLFNBQVEsSUFBSTtjQUNBLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztXQUNqQyxDQUFDLE9BQU8sR0FBRyxFQUFFO2NBQ1YsSUFBSSxPQUFPLEVBQUU7a0JBQ1QsT0FBTyxHQUFHLEtBQUssQ0FBQztDQUNoQyxpQkFBZ0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2VBQ2Y7V0FDSjtDQUNULE1BQUssQ0FBQyxDQUFDO0NBQ1AsRUFBQTs7Ozs7Ozs7Ozs7O0FDbERBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNBLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUNyQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFO0NBQ3hDLE1BQUksSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztPQUN0QixJQUFJLENBQUMsQ0FBQztXQUNGLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLE1BQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2QsTUFBSSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO1dBQzFDLEVBQUUsQ0FBQyxDQUFDO0NBQ1osTUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2hELEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQSxFQUFBLElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxFQUFBLElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxFQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFO0NBQ3RCLE1BQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3pGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7R0FDQSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO09BQ2hELElBQUksS0FBSyxHQUFHLElBQUk7V0FDWixLQUFLLEdBQUcsRUFBRSxDQUFDO09BQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQztXQUNMLENBQUMsR0FBRyxDQUFDO0NBQ2IsVUFBUSxDQUFDLENBQUM7Q0FDVixNQUFJLE9BQU8sS0FBSyxHQUFHLEdBQUcsRUFBRTtXQUNoQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztDQUNoQyxVQUFRLFFBQVEsQ0FBQztDQUNqQixjQUFZLEtBQUssQ0FBQztDQUNsQixrQkFBZ0IsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzttQkFDekIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7bUJBQ2pCLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEIsa0JBQWdCLE1BQU07Q0FDdEIsY0FBWSxLQUFLLENBQUM7Q0FDbEIsa0JBQWdCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO21CQUM3QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzttQkFDbEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixrQkFBZ0IsTUFBTTtDQUN0QixjQUFZLEtBQUssQ0FBQztDQUNsQixrQkFBZ0IsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDN0Msa0JBQWdCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7bUJBQ3pCLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEIsa0JBQWdCLE1BQU07WUFDYjtDQUNULFVBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFO2VBQ1YsQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztlQUN2RSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1Q7UUFDSjtPQUNELElBQUksQ0FBQyxFQUFFO1dBQ0gsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzVCLFVBQVEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1dBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbkIsY0FBWSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkI7T0FDRCxJQUFJLEtBQUssRUFBRTtDQUNmLFVBQVEsSUFBSSxDQUFDO2VBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdFLFVBQVEsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCO0NBQ0wsTUFBSSxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hFLEdBQUMsQ0FBQztBQUNGO0dBQ0EsSUFBSSxlQUFlLEdBQUcsa0JBQWtCLENBQUM7QUFDekM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0dBQ0EsTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtDQUN4RCxNQUFJLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQztPQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ2IsVUFBUSxDQUFDLENBQUM7T0FDTixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRztXQUNoQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDdkMsVUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDN0IsY0FBWSxNQUFNO1dBQ1YsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sU0FBUztDQUN0QyxjQUFZLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0NBQ3pDLFVBQVEsUUFBUSxDQUFDO0NBQ2pCLGNBQVksS0FBSyxDQUFDO21CQUNGLENBQUMsR0FBRyxDQUFDLENBQUM7bUJBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixrQkFBZ0IsTUFBTTtDQUN0QixjQUFZLEtBQUssQ0FBQztDQUNsQixrQkFBZ0IsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO21CQUMxQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO21CQUNOLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEIsa0JBQWdCLE1BQU07Q0FDdEIsY0FBWSxLQUFLLENBQUM7Q0FDbEIsa0JBQWdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzttQkFDakQsQ0FBQyxHQUFHLENBQUMsQ0FBQzttQkFDTixDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RCLGtCQUFnQixNQUFNO0NBQ3RCLGNBQVksS0FBSyxDQUFDO0NBQ2xCLGtCQUFnQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzttQkFDcEMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixrQkFBZ0IsTUFBTTtZQUNiO1FBQ0o7T0FDRCxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ2YsVUFBUSxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztDQUNyQyxNQUFJLE9BQU8sTUFBTSxHQUFHLEtBQUssQ0FBQztDQUMxQixHQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLE1BQU0sQ0FBQyxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ3BDLE1BQUksT0FBTyxrRUFBa0UsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUYsQ0FBQTs7Ozs7Ozs7Ozs7Q0N6SUQsQ0FBYyxZQUFBLEdBQUcsWUFBWSxDQUFDO0FBQzlCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLFlBQVksR0FBRztBQUN4QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0dBQ3hCO0FBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7Q0FDdEQsS0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUM7VUFDdkQsRUFBRSxJQUFJLEVBQUU7Q0FDaEIsU0FBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUk7Q0FDekIsTUFBSyxDQUFDLENBQUM7TUFDSCxPQUFPLElBQUksQ0FBQztDQUNoQixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUU7TUFDL0MsSUFBSSxHQUFHLEtBQUssU0FBUztDQUN6QixTQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1dBQ3BCO1VBQ0QsSUFBSSxFQUFFLEtBQUssU0FBUztjQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztlQUN6QjtjQUNELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Y0FDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNO2tCQUNoQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRTtzQkFDdEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDM0M7c0JBQ29CLEVBQUUsQ0FBQyxDQUFDO1dBQ2Y7T0FDSjtNQUNELE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFO01BQzdDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDckMsSUFBSSxTQUFTLEVBQUU7VUFDWCxJQUFJLElBQUksR0FBRyxFQUFFO2NBQ1QsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNsQixTQUFRLE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNO2NBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztVQUM5QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNO0NBQ3hDLGFBQVksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3ZEO01BQ0QsT0FBTyxJQUFJLENBQUM7R0FDZixDQUFBOzs7Ozs7Ozs7O0FDMUVEO0NBQ0EsQ0FBQSxLQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtFQUNBLFNBQVMsT0FBTyxDQUFDLE9BQU8sRUFBRTtBQUMxQjtDQUNBO0NBQ0EsS0FBSSxJQUFJLE9BQU8sWUFBWSxLQUFLLFdBQVcsRUFBRSxDQUFDLFdBQVc7QUFDekQ7VUFDUSxJQUFJLEdBQUcsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Y0FDOUIsR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Y0FDaEMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDakM7VUFDUSxTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ25ELGFBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztjQUNiLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDekI7QUFDVDtVQUNRLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7Q0FDbkQsYUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2NBQ2IsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUN6QjtBQUNUO0NBQ0E7VUFDUSxPQUFPLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztDQUM1RTtVQUNRLE9BQU8sQ0FBQyxZQUFZLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQzVFO0NBQ0EsU0FBUSxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7Y0FDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztjQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNsQyxhQUFZLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ2pCO0FBQ1Q7Q0FDQSxTQUFRLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtjQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLGFBQVksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDakI7QUFDVDtDQUNBO1VBQ1EsT0FBTyxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7Q0FDekU7VUFDUSxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUN6RTtDQUNBO0NBQ0EsTUFBSyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVc7QUFDM0I7VUFDUSxTQUFTLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtjQUNsRCxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkMsYUFBWSxJQUFJLElBQUk7Q0FDcEIsaUJBQWdCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztjQUNmLElBQUksR0FBRyxLQUFLLENBQUM7Q0FDekIsaUJBQWdCLFNBQVMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDbEcsa0JBQWlCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQztrQkFDZixTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzttQkFDL0IsSUFBSSxHQUFHLEdBQUcsc0JBQXNCO0NBQ2pELGlCQUFnQixTQUFTLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLFVBQVUsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO21CQUNwRCxJQUFJLEdBQUcsR0FBRyxzQkFBc0I7a0JBQ2pDLFNBQVMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO21CQUNqRjtDQUNqQixpQkFBZ0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7c0JBQy9DLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztrQkFDNUUsU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxRQUFRLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxRQUFRLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztlQUM3RTtXQUNKO0FBQ1Q7Q0FDQSxTQUFRLE9BQU8sQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztDQUMxRSxTQUFRLE9BQU8sQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMxRTtVQUNRLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7Y0FDM0MsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7a0JBQ3pCLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDM0MsaUJBQWdCLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7Q0FDNUMsaUJBQWdCLFFBQVEsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDO2NBQzlCLE9BQU8sUUFBUSxLQUFLLEdBQUc7Q0FDbkMsbUJBQWtCLFFBQVE7Q0FDMUIsbUJBQWtCLEdBQUc7b0JBQ0gsSUFBSSxHQUFHLFFBQVE7b0JBQ2YsUUFBUSxLQUFLLENBQUM7Q0FDaEMsbUJBQWtCLElBQUksR0FBRyxxQkFBcUIsR0FBRyxRQUFRO0NBQ3pELG1CQUFrQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQztXQUNuRTtBQUNUO0NBQ0EsU0FBUSxPQUFPLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7Q0FDdkUsU0FBUSxPQUFPLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdkU7Q0FDQSxNQUFLLEdBQUcsQ0FBQztBQUNUO0NBQ0E7Q0FDQSxLQUFJLElBQUksT0FBTyxZQUFZLEtBQUssV0FBVyxFQUFFLENBQUMsV0FBVztBQUN6RDtVQUNRLElBQUksR0FBRyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUM1QixHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztjQUNoQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUNqQztVQUNRLFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7Q0FDcEQsYUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2NBQ2IsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUN6QjtBQUNUO1VBQ1EsU0FBUyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtDQUNwRCxhQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Y0FDYixHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3pCO0FBQ1Q7Q0FDQTtVQUNRLE9BQU8sQ0FBQyxhQUFhLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0NBQy9FO1VBQ1EsT0FBTyxDQUFDLGFBQWEsR0FBRyxFQUFFLEdBQUcsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7QUFDL0U7Q0FDQSxTQUFRLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtjQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLGFBQVksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDakI7QUFDVDtDQUNBLFNBQVEsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO2NBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDbEMsYUFBWSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNqQjtBQUNUO0NBQ0E7VUFDUSxPQUFPLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztD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QUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDbEMsV0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksRUFBRTtlQUNsQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQztlQUN2QyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQztZQUMxQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxNQUFNLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUU7Q0FDdEcsY0FBWSxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7ZUFDckQsRUFBRSxDQUFDLENBQUM7ZUFDSixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQztDQUNuRCxjQUFZLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztDQUNuRCxjQUFZLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQztlQUN2QyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQztDQUNuRCxXQUFTLE1BQU07ZUFDSCxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQztDQUNuRCxjQUFZLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxH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QUM7Q0FDL0MsTUFBSyxDQUFDO0NBQ04sRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxNQUFNLEdBQUc7TUFDMUMsT0FBTyxNQUFNLENBQUMsWUFBWTtDQUM5QixTQUFRLElBQUksQ0FBQyxFQUFFLFVBQVUsR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFO0NBQ3RCLFNBQVEsSUFBSSxDQUFDLEVBQUUsVUFBVSxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUU7Q0FDdEIsTUFBSyxDQUFDO0NBQ04sRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLEdBQUc7TUFDOUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7TUFDM0IsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQztDQUM5RCxLQUFJLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMscUJBQXFCLElBQUksTUFBTSxDQUFDLENBQUM7TUFDMUQsT0FBTyxJQUFJLENBQUM7Q0FDaEIsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNB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QkFBQSxFQUF5QixDQUFDO0FBQzFDO0NBQ0EsQ0FBQSxJQUFJLFlBQVksQ0FBQztBQUNqQjtDQUNBLENBQUEsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVE7Q0FDN0IsS0FBSSxNQUFNLE1BQU0sSUFBSSxDQUFDLE1BQU07Q0FDM0IsS0FBSSxJQUFJLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMxQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7QUFDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7R0FDbEI7QUFDRDtDQUNBO0VBQ0EsU0FBUyxJQUFJLEdBQUcsRUFBRTtBQUNsQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxTQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDdkI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM1QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0dBQzdCO0FBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLE1BQU0sR0FBRztBQUNsQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNDO0FBQ0Q7Q0FDQSxDQUFBLElBQUksTUFBTSxHQUFHLFNBQVMsTUFBTSxHQUFHO01BQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU07WUFDWixTQUFTLG1CQUFtQixHQUFHO2NBQzdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsYUFBYSxHQUFHO0NBQzdELGlCQUFnQixPQUFPLElBQUksWUFBWSxFQUFFLENBQUM7Q0FDMUMsY0FBYSxHQUFHLENBQUM7V0FDUjtDQUNUO1lBQ1UsU0FBUyxZQUFZLEdBQUc7Q0FDbEMsYUFBWSxPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7Q0FDaEMsVUFBUyxDQUFDO0NBQ1YsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUU7TUFDaEMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDaEMsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSztNQUNwQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ3JELEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3RELEtBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7TUFDaEIsT0FBTyxJQUFJLENBQUM7Q0FDaEIsRUFBQyxDQUFDO0FBQ0Y7Q0FDQSxDQUFBLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0dBQ3hCO0FBQ0Q7Q0FDQSxDQUFBLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ3RDLEtBQUksT0FBTyxHQUFHLEdBQUcsR0FBRyxFQUFFO1VBQ2QsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7VUFDN0IsR0FBRyxNQUFNLENBQUMsQ0FBQztPQUNkO0NBQ0ws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QyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7Q0FDL0csU0FBUSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7Q0FDL0csU0FBUSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7Q0FDL0csU0FBUSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDL0c7Q0FDQTtVQUNRLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0NBQ3hDLGFBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ2hDLGFBQVksTUFBTSxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1dBQ25DO1VBQ0QsT0FBTyxLQUFLLENBQUM7Q0FDckIs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Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsU0FBUyxHQUFHO0NBQzdDLEtBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0NBQy9CLEVBQUMsQ0FBQztBQUNGO0NBQ0EsQ0FBQSxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ25DLEtBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3hCLGFBQVksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQzdCLGFBQVksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFO2NBQ2xCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztHQUNyQztBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFNBQVMsWUFBWSxHQUFHO0FBQ25EO0NBQ0E7TUFDSSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHO0NBQy9CLFNBQVEsTUFBTSxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDO0NBQ0EsS0FBSSxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDcEQsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxhQUFh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RSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtDQUNob0MsSUFBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7R0FDbEIsQ0FBQyxPQUFPLENBQUMsRUFBRTtDQUNaO0dBQ0M7QUFDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUNuQztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDdkI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztHQUM5QjtBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7QUFDMUI7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRTtNQUNqQixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUM7R0FDOUM7QUFDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ25CO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNwQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtDQUNsQyxLQUFJLElBQUksR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7TUFDMUIsSUFBSSxRQUFRLEVBQUU7VUFDVixLQUFLLE1BQU0sQ0FBQyxDQUFDO1VBQ2IsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEVBQUU7Q0FDakQsYUFBWSxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzFDLGFBQVksSUFBSSxTQUFTO2tCQUNULE9BQU8sU0FBUyxDQUFDO1dBQ3hCO1VBQ0QsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDOUQsU0FBUSxJQUFJLEtBQUs7Q0FDakIsYUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1VBQzVCLE9BQU8sR0FBRyxDQUFDO0NBQ25CLE1BQUssTUFBTTtVQUNILEtBQUssSUFBSSxDQUFDLENBQUM7Q0FDbkIsU0FBUSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxFQUFFO0NBQ3BELGFBQVksU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUN6QyxhQUFZLElBQUksU0FBUztrQkFDVCxPQUFPLFNBQVMsQ0FBQztXQUN4QjtDQUNULFNBQVEsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Q0FDekQsU0FBUSxJQUFJLEtBQUs7Q0FDakIsYUFBWSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1VBQzNCLE9BQU8sR0FBRyxDQUFDO09BQ2Q7R0FDSjtBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO0NBQ3JDLEtBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDO0NBQ3BCLFNBQVEsT0FBTyxRQUFRLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztNQUNuQyxJQUFJLFFBQVEsRUFBRTtVQUNWLElBQUksS0FBSyxHQUFHLENBQUM7Y0FDVCxPQUFPLEtBQUssQ0FBQztVQUNqQixJQUFJLEtBQUssSUFBSSxjQUFjO2NBQ3ZCLE9BQU8sa0JBQWtCLENBQUM7Q0FDdEMsTUFBSyxNQUFNO0NBQ1gsU0FBUSxJQUFJLEtBQUssSUFBSSxDQUFDLGNBQWM7Y0FDeEIsT0FBTyxTQUFTLENBQUM7Q0FDN0IsU0FBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksY0FBYztjQUMzQixPQUFPLFNBQVMsQ0FBQztPQUN4QjtNQUNELElBQUksS0FBSyxHQUFHLENBQUM7VUFDVCxPQUFPLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNsRCxLQUFJLE9BQU8sUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLGNBQWMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsY0FBYyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztHQUN6RjtBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzdCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO01BQzNDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztHQUNoRDtBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3ZCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO0NBQzFDLEtBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUM7Q0FDeEIsU0FBUSxNQUFNLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztDQUNwQyxLQUFJLElBQUksR0FBRyxLQUFLLEtBQUssSUFBSSxHQUFHLEtBQUssVUFBVSxJQUFJLEdBQUcsS0FBSyxXQUFXLElBQUksR0FBRyxLQUFLLFdBQVc7VUFDakYsT0FBTyxJQUFJLENBQUM7Q0FDcEIsS0FBSSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtDQUN0QztVQUNRLEtBQUssR0FBRyxRQUFRO1VBQ2hCLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDekIsTUFBSyxNQUFNO0NBQ1gsU0FBUSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQztPQUMxQjtDQUNMLEtBQUksS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7Q0FDeEIsS0FBSSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUs7Q0FDL0IsU0FBUSxNQUFNLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsQztNQUNJLElBQUksQ0FBQyxDQUFDO01BQ04sSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Q0FDbEMsU0FBUSxNQUFNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0NBQ3ZDLFVBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0NBQ3RCLFNBQVEsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDOUQ7QUFDTDtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQ7Q0FDQSxLQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztDQUN0QixLQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7Q0FDNUMsU0FBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztDQUM5QyxhQUFZLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0NBQ2hFLFNBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0NBQ3RCLGFBQVksSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUN6RCxhQUFZLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUM5RCxVQUFTLE1BQU07Y0FDSCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztjQUNsQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztXQUMxQztPQUNKO0NBQ0wsS0FBSSxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztNQUMzQixPQUFPLE1BQU0sQ0FBQztHQUNqQjtBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDN0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRTtDQUNsQyxLQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtDQUMvQixTQUFRLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztDQUN6QyxLQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtDQUMvQixTQUFRLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztDQUN6QztNQUNJLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLFFBQVEsS0FBSyxTQUFTLEdBQUcsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztHQUMvRjtBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzNCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxjQUFjLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksY0FBYyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLGNBQWMsR0FBRyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3JEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxjQUFjLEdBQUcsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUNyRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksY0FBYyxHQUFHLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDeEM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDekM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNmO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQ7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BFO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakQ7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNuQztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxhQUFhLENBQUMsS0FBSyxHQUFHLFNBQVMsS0FBSyxHQUFHO0NBQ3ZDLEtBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDckQsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsYUFBYSxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsR0FBRztNQUN6QyxJQUFJLElB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TUFDN0IsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7TUFDL0IsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDNUIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDbEM7Q0FDQSxLQUFJLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUMzQyxLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO01BQ2pCLEdBQUcsSUFBSSxNQUFNLENBQUM7TUFDZCxPQUFPLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQ3pFLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsYUFBYSxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsQ0FBQyxVQUFVLEVBQUU7Q0FDdkQsS0FBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FB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Q0FBQztNQUNqQyxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztNQUNuQyxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNoQyxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN0QztDQUNBLEtBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQzNDLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFB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RSxLQUFLLEVBQUUsRUFBRTtDQUNyQixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtDQUNyQyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0NBQzlCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0NBQ3ZDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7Q0FDbkMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7Q0FDNUMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTthQUNuQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0NBQ3BFLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7YUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtDQUNwRSxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO2FBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Q0FDbkUsU0FBQTtD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LENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7Q0FDMUMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtDQUN0QyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtDQUM3QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO0NBQ3BDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0NBQzdDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Q0FDcEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7Q0FDN0MsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtDQUMvQixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUN2QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO0NBQ2hDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0NBQ3hDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Q0FDcEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7Q0FDNUMsU0FBQTtD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
|
9728
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvVmVjdG9yMy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvU2NhbGFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvZWNzLW1hdGgvZGlzdC90eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvUXVhdGVybmlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvYXNwcm9taXNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2Jhc2U2NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9ldmVudGVtaXR0ZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvZmxvYXQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvaW5xdWlyZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy91dGY4L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL3Bvb2wvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvdXRpbC9sb25nYml0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy91dGlsL21pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvd3JpdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3dyaXRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcmVhZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3JlYWRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjL3NlcnZpY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3Jvb3RzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL2luZGV4LW1pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9taW5pbWFsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0FuaW1hdG9yLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BbmltYXRvci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQXVkaW9Tb3VyY2UuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F1ZGlvU291cmNlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9BdmF0YXJBdHRhY2guZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F2YXRhckF0dGFjaC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvY29tbW9uL1ZlY3RvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhck1vZGlmaWVyQXJlYS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQXZhdGFyTW9kaWZpZXJBcmVhLmdlbi50cyIsIi4uL25vZGVfbW9kdWxlcy9sb25nL3NyYy9sb25nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL2NvbW1vbi9Db2xvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BdmF0YXJTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQmlsbGJvYXJkLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9CaWxsYm9hcmQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0JveFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9Cb3hTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZUFyZWEuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0NhbWVyYU1vZGVBcmVhLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9HTFRGU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0dMVEZTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTWF0ZXJpYWwuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01hdGVyaWFsLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9NZXNoQ29sbGlkZXIuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01lc2hDb2xsaWRlci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTWVzaFJlbmRlcmVyLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9NZXNoUmVuZGVyZXIuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL05GVFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9ORlRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyRG93bi5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyRG93bi5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyRG93blJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyRG93blJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyVXAuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL09uUG9pbnRlclVwLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9PblBvaW50ZXJVcFJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyVXBSZXN1bHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJMb2NrLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9Qb2ludGVyTG9jay5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvU3BoZXJlU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1NwaGVyZVNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9UZXh0U2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1RleHRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvVWlUZXh0Lmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9VaVRleHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1Zpc2liaWxpdHlDb21wb25lbnQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1Zpc2liaWxpdHlDb21wb25lbnQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL2luZGV4Lmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2xlZ2FjeS9UcmFuc2Zvcm0udHMiLCIuLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyIsIi4uL3NyYy9zY2hlbWFzL0FycmF5LnRzIiwiLi4vc3JjL3NjaGVtYXMvYmFzaWMvQm9vbGVhbi50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL0VudW0udHMiLCIuLi9zcmMvc2NoZW1hcy9iYXNpYy9GbG9hdC50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL0ludGVnZXIudHMiLCIuLi9zcmMvc2NoZW1hcy9iYXNpYy9TdHJpbmcudHMiLCIuLi9zcmMvc2NoZW1hcy9NYXAudHMiLCIuLi9zcmMvc2NoZW1hcy9PcHRpb25hbC50cyIsIi4uL3NyYy9zY2hlbWFzL2luZGV4LnRzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvY3JkdC9kaXN0L3R5cGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvY3JkdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlci9pbmRleC50cyIsIi4uL3NyYy9zZXJpYWxpemF0aW9uL3dpcmVNZXNzYWdlLnRzIiwiLi4vc3JjL3NlcmlhbGl6YXRpb24vY3JkdC9jb21wb25lbnRPcGVyYXRpb24udHMiLCIuLi9zcmMvc3lzdGVtcy9jcmR0L2luZGV4LnRzIiwiLi4vc3JjL2VuZ2luZS9yZWFkb25seS50cyIsIi4uL3NyYy9lbmdpbmUvY29tcG9uZW50LnRzIiwiLi4vc3JjL2VuZ2luZS9lbnRpdHktdXRpbHMudHMiLCIuLi9zcmMvZW5naW5lL2VudGl0eS50cyIsIi4uL3NyYy9lbmdpbmUvc3lzdGVtcy50cyIsIi4uL3NyYy9lbmdpbmUvaW5kZXgudHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvaWRzLmdlbi50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydC50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9uZXR3b3JrVHJhbnNwb3J0LnRzIiwiLi4vc3JjL3J1bnRpbWUvaW5pdGlhbGl6YXRpb24udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvZ2xvYmFsLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9nbG9iYWwubmFtZXNwYWNlLmdlbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVmVjdG9yMyA9IHZvaWQgMDtcbi8qKlxuICogQHB1YmxpY1xuICovXG52YXIgVmVjdG9yMztcbihmdW5jdGlvbiAoVmVjdG9yMykge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgVmVjdG9yMyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4geCwgeSwgeiAoZmxvYXRzKSBjb29yZGluYXRlcy5cbiAgICAgKiBAcGFyYW0geCAtIGRlZmluZXMgdGhlIGZpcnN0IGNvb3JkaW5hdGVzIChvbiBYIGF4aXMpXG4gICAgICogQHBhcmFtIHkgLSBkZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZXMgKG9uIFkgYXhpcylcbiAgICAgKiBAcGFyYW0geiAtIGRlZmluZXMgdGhlIHRoaXJkIGNvb3JkaW5hdGVzIChvbiBaIGF4aXMpXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKFxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIGZpcnN0IGNvb3JkaW5hdGVzIChvbiBYIGF4aXMpXG4gICAgICovXG4gICAgeCA9IDAsIFxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHNlY29uZCBjb29yZGluYXRlcyAob24gWSBheGlzKVxuICAgICAqL1xuICAgIHkgPSAwLCBcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSB0aGlyZCBjb29yZGluYXRlcyAob24gWiBheGlzKVxuICAgICAqL1xuICAgIHogPSAwKSB7XG4gICAgICAgIHJldHVybiB7IHgsIHksIHogfTtcbiAgICB9XG4gICAgVmVjdG9yMy5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSByZXN1bHQgb2YgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gdmVjdG9ycy5cbiAgICAgKiBAcGFyYW0gdmVjdG9yMSAtIHRoZSBmaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gdmVjdG9yMiAtIHRoZSBzZWNvbmQgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGQodmVjdG9yMSwgdmVjdG9yMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogdmVjdG9yMS54ICsgdmVjdG9yMi54LFxuICAgICAgICAgICAgeTogdmVjdG9yMS55ICsgdmVjdG9yMi55LFxuICAgICAgICAgICAgejogdmVjdG9yMS56ICsgdmVjdG9yMi56XG4gICAgICAgIH07XG4gICAgfVxuICAgIFZlY3RvcjMuYWRkID0gYWRkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgcmVzdWx0IG9mIHRoZSBzdWJzdHJhY3Rpb24gb2YgdGhlIHR3byBnaXZlbiB2ZWN0b3JzLlxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3VidHJhY3QobWludWVuZCwgc3VidHJhaGVuZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogbWludWVuZC54IC0gc3VidHJhaGVuZC54LFxuICAgICAgICAgICAgeTogbWludWVuZC55IC0gc3VidHJhaGVuZC55LFxuICAgICAgICAgICAgejogbWludWVuZC56IC0gc3VidHJhaGVuZC56XG4gICAgICAgIH07XG4gICAgfVxuICAgIFZlY3RvcjMuc3VidHJhY3QgPSBzdWJ0cmFjdDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgYXMgdGhlIHJlc3VsdCBvZiB0aGUgc3Vic3RyYWN0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gdmVjdG9ycy5cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1YnRyYWN0VG9SZWYobWludWVuZCwgc3VidHJhaGVuZCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gbWludWVuZC54IC0gc3VidHJhaGVuZC54O1xuICAgICAgICByZXN1bHQueSA9IG1pbnVlbmQueSAtIHN1YnRyYWhlbmQueTtcbiAgICAgICAgcmVzdWx0LnogPSBtaW51ZW5kLnogLSBzdWJ0cmFoZW5kLno7XG4gICAgfVxuICAgIFZlY3RvcjMuc3VidHJhY3RUb1JlZiA9IHN1YnRyYWN0VG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHdpdGggdGhlIG90aGVyIHNpZ25cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9wcG9zaXRlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7IHg6IC12YWx1ZS54LCB5OiAtdmFsdWUueSwgejogLXZhbHVlLnogfTtcbiAgICB9XG4gICAgVmVjdG9yMy5vcHBvc2l0ZSA9IG9wcG9zaXRlO1xuICAgIC8qKlxuICAgICAqIENvcHkgc291cmNlIGludG8gZGVzdFxuICAgICAqXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29weShzb3VyY2UsIGRlc3QpIHtcbiAgICAgICAgZGVzdC54ID0gc291cmNlLng7XG4gICAgICAgIGRlc3QueSA9IHNvdXJjZS55O1xuICAgICAgICBkZXN0LnogPSBzb3VyY2UuejtcbiAgICB9XG4gICAgVmVjdG9yMy5jb3B5ID0gY29weTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgd2l0aCB0aGUgc2FtZSB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmUoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UpO1xuICAgIH1cbiAgICBWZWN0b3IzLmNsb25lID0gY2xvbmU7XG4gICAgLy8gUHJvcGVydGllc1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxlbmd0aCBvZiB0aGUgVmVjdG9yM1xuICAgICAqIEByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIFZlY3RvM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aCh2ZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh2ZWN0b3IueCAqIHZlY3Rvci54ICsgdmVjdG9yLnkgKiB2ZWN0b3IueSArIHZlY3Rvci56ICogdmVjdG9yLnopO1xuICAgIH1cbiAgICBWZWN0b3IzLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiB0aGUgVmVjdG9yM1xuICAgICAqIEByZXR1cm5zIHNxdWFyZWQgbGVuZ3RoIG9mIHRoZSBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVuZ3RoU3F1YXJlZCh2ZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHZlY3Rvci54ICogdmVjdG9yLnggKyB2ZWN0b3IueSAqIHZlY3Rvci55ICsgdmVjdG9yLnogKiB2ZWN0b3IuejtcbiAgICB9XG4gICAgVmVjdG9yMy5sZW5ndGhTcXVhcmVkID0gbGVuZ3RoU3F1YXJlZDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBtdWx0aXBsaWVkIGJ5IHRoZSBmbG9hdCBcInNjYWxlXCJcbiAgICAgKiBAcGFyYW0gc2NhbGUgLSBkZWZpbmVzIHRoZSBtdWx0aXBsaWVyIGZhY3RvclxuICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzY2FsZVRvUmVmKHZlY3Rvciwgc2NhbGUsIHJlc3VsdCkge1xuICAgICAgICByZXN1bHQueCA9IHZlY3Rvci54ICogc2NhbGU7XG4gICAgICAgIHJlc3VsdC55ID0gdmVjdG9yLnkgKiBzY2FsZTtcbiAgICAgICAgcmVzdWx0LnogPSB2ZWN0b3IueiAqIHNjYWxlO1xuICAgIH1cbiAgICBWZWN0b3IzLnNjYWxlVG9SZWYgPSBzY2FsZVRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgd2l0aCB0aGUgY3VycmVudCBWZWN0b3IzIGNvb3JkaW5hdGVzIG11bHRpcGxpZWQgYnkgdGhlIGZsb2F0IFwic2NhbGVcIlxuICAgICAqIEBwYXJhbSBzY2FsZSAtIGRlZmluZXMgdGhlIG11bHRpcGxpZXIgZmFjdG9yXG4gICAgICogQHJldHVybnMgYSBuZXcgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNjYWxlKHZlY3Rvciwgc2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSh2ZWN0b3IueCAqIHNjYWxlLCB2ZWN0b3IueSAqIHNjYWxlLCB2ZWN0b3IueiAqIHNjYWxlKTtcbiAgICB9XG4gICAgVmVjdG9yMy5zY2FsZSA9IHNjYWxlO1xuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSB0aGUgY3VycmVudCBWZWN0b3IzIHdpdGggdGhlIGdpdmVuIGlucHV0IGxlbmd0aC5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gaW4gcGxhY2Ugb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBsZW4gLSB0aGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3JcbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemVGcm9tTGVuZ3RoKHZlY3RvciwgbGVuKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZSgwLCAwLCAwKTtcbiAgICAgICAgbm9ybWFsaXplRnJvbUxlbmd0aFRvUmVmKHZlY3RvciwgbGVuLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZUZyb21MZW5ndGggPSBub3JtYWxpemVGcm9tTGVuZ3RoO1xuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSB0aGUgY3VycmVudCBWZWN0b3IzIHdpdGggdGhlIGdpdmVuIGlucHV0IGxlbmd0aC5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gaW4gcGxhY2Ugb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBsZW4gLSB0aGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3JcbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWYodmVjdG9yLCBsZW4sIHJlc3VsdCkge1xuICAgICAgICBpZiAobGVuID09PSAwIHx8IGxlbiA9PT0gMS4wKSB7XG4gICAgICAgICAgICBjb3B5KHZlY3RvciwgcmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzY2FsZVRvUmVmKHZlY3RvciwgMS4wIC8gbGVuLCByZXN1bHQpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZiA9IG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZjtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMy5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gaW4gcGxhY2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZSh2ZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUZyb21MZW5ndGgodmVjdG9yLCBsZW5ndGgodmVjdG9yKSk7XG4gICAgfVxuICAgIFZlY3RvcjMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSB0aGUgY3VycmVudCBWZWN0b3IzLlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBhbiBpbiBwbGFjZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVG9SZWYodmVjdG9yLCByZXN1bHQpIHtcbiAgICAgICAgbm9ybWFsaXplRnJvbUxlbmd0aFRvUmVmKHZlY3RvciwgbGVuZ3RoKHZlY3RvciksIHJlc3VsdCk7XG4gICAgfVxuICAgIFZlY3RvcjMubm9ybWFsaXplVG9SZWYgPSBub3JtYWxpemVUb1JlZjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCAoZmxvYXQpIGJldHdlZW4gdGhlIHZlY3RvcnMgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBkb3QgcHJvZHVjdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvdChsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4gbGVmdC54ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0LnkgKyBsZWZ0LnogKiByaWdodC56O1xuICAgIH1cbiAgICBWZWN0b3IzLmRvdCA9IGRvdDtcbiAgICAvKipcbiAgICAgKiBSb3RhdGVzIGN1cnJlbnQgVmVjdG9yMyBiYXNlZCBvbiB0aGUgZ2l2ZW4gcXVhdGVybmlvbiwgYnV0IGFwcGxpZXMgdGhlIHJvdGF0aW9uIHRvIHRhcmdldCBWZWN0b3IzLlxuICAgICAqIEBwYXJhbSBxIC0gZGVmaW5lcyB0aGUgUXVhdGVybmlvblxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgVmVjdG9yM1xuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByb3RhdGUodmVjdG9yLCBxKSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgeiB9ID0gdmVjdG9yO1xuICAgICAgICBjb25zdCB7IHg6IHF4LCB5OiBxeSwgejogcXosIHc6IHF3IH0gPSBxO1xuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY3RvclxuICAgICAgICBjb25zdCBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeTtcbiAgICAgICAgY29uc3QgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHo7XG4gICAgICAgIGNvbnN0IGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4O1xuICAgICAgICBjb25zdCBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSByZXN1bHQgKiBpbnZlcnNlIHF1YXRcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGl4ICogcXcgKyBpdyAqIC1xeCArIGl5ICogLXF6IC0gaXogKiAtcXksXG4gICAgICAgICAgICB5OiBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6LFxuICAgICAgICAgICAgejogaXogKiBxdyArIGl3ICogLXF6ICsgaXggKiAtcXkgLSBpeSAqIC1xeFxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLnJvdGF0ZSA9IHJvdGF0ZTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgbG9jYXRlZCBmb3IgXCJhbW91bnRcIiAoZmxvYXQpIG9uIHRoZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHRoZSB2ZWN0b3JzIFwic3RhcnRcIiBhbmQgXCJlbmRcIlxuICAgICAqIEBwYXJhbSBzdGFydCAtIGRlZmluZXMgdGhlIHN0YXJ0IHZhbHVlXG4gICAgICogQHBhcmFtIGVuZCAtIGRlZmluZXMgdGhlIGVuZCB2YWx1ZVxuICAgICAqIEBwYXJhbSBhbW91bnQgLSBtYXggZGVmaW5lcyBhbW91bnQgYmV0d2VlbiBib3RoIChiZXR3ZWVuIDAgYW5kIDEpXG4gICAgICogQHJldHVybnMgdGhlIG5ldyBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVycChzdGFydCwgZW5kLCBhbW91bnQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlKDAsIDAsIDApO1xuICAgICAgICBsZXJwVG9SZWYoc3RhcnQsIGVuZCwgYW1vdW50LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBWZWN0b3IzLmxlcnAgPSBsZXJwO1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciBcInJlc3VsdFwiIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgbGluZWFyIGludGVycG9sYXRpb24gZnJvbSB0aGUgdmVjdG9yIFwic3RhcnRcIiBmb3IgXCJhbW91bnRcIiB0byB0aGUgdmVjdG9yIFwiZW5kXCJcbiAgICAgKiBAcGFyYW0gc3RhcnQgLSBkZWZpbmVzIHRoZSBzdGFydCB2YWx1ZVxuICAgICAqIEBwYXJhbSBlbmQgLSBkZWZpbmVzIHRoZSBlbmQgdmFsdWVcbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gbWF4IGRlZmluZXMgYW1vdW50IGJldHdlZW4gYm90aCAoYmV0d2VlbiAwIGFuZCAxKVxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZXJwVG9SZWYoc3RhcnQsIGVuZCwgYW1vdW50LCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSBzdGFydC54ICsgKGVuZC54IC0gc3RhcnQueCkgKiBhbW91bnQ7XG4gICAgICAgIHJlc3VsdC55ID0gc3RhcnQueSArIChlbmQueSAtIHN0YXJ0LnkpICogYW1vdW50O1xuICAgICAgICByZXN1bHQueiA9IHN0YXJ0LnogKyAoZW5kLnogLSBzdGFydC56KSAqIGFtb3VudDtcbiAgICB9XG4gICAgVmVjdG9yMy5sZXJwVG9SZWYgPSBsZXJwVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHRoZSB2ZWN0b3JzIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBUaGUgY3Jvc3MgcHJvZHVjdCBpcyB0aGVuIG9ydGhvZ29uYWwgdG8gYm90aCBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIHRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMgdGhlIGNyb3NzIHByb2R1Y3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcm9zcyhsZWZ0LCByaWdodCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWZWN0b3IzLlplcm8oKTtcbiAgICAgICAgVmVjdG9yMy5jcm9zc1RvUmVmKGxlZnQsIHJpZ2h0LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBWZWN0b3IzLmNyb3NzID0gY3Jvc3M7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZ2l2ZW4gdmVjdG9yIFwicmVzdWx0XCIgd2l0aCB0aGUgY3Jvc3MgcHJvZHVjdCBvZiBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogVGhlIGNyb3NzIHByb2R1Y3QgaXMgdGhlbiBvcnRob2dvbmFsIHRvIGJvdGggXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSBWZWN0b3IzIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcm9zc1RvUmVmKGxlZnQsIHJpZ2h0LCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSBsZWZ0LnkgKiByaWdodC56IC0gbGVmdC56ICogcmlnaHQueTtcbiAgICAgICAgcmVzdWx0LnkgPSBsZWZ0LnogKiByaWdodC54IC0gbGVmdC54ICogcmlnaHQuejtcbiAgICAgICAgcmVzdWx0LnogPSBsZWZ0LnggKiByaWdodC55IC0gbGVmdC55ICogcmlnaHQueDtcbiAgICB9XG4gICAgVmVjdG9yMy5jcm9zc1RvUmVmID0gY3Jvc3NUb1JlZjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgwLjAsIDAuMCwgMC4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IGVtcHR5IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBaZXJvKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlplcm8gPSBaZXJvO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDEuMCwgMS4wLCAxLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgdW5pdCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gT25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDEuMCwgMS4wLCAxLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLk9uZSA9IE9uZTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvbGVuZ3RoU3F1YXJlZCAoMC4wLCAxLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyB1cCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gVXAoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMC4wLCAxLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuVXAgPSBVcDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgwLjAsIC0xLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBkb3duIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBEb3duKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgLTEuMCwgMC4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5Eb3duID0gRG93bjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgwLjAsIDAuMCwgMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IGZvcndhcmQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEZvcndhcmQoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMC4wLCAwLjAsIDEuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuRm9yd2FyZCA9IEZvcndhcmQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIC0xLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgZm9yd2FyZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gQmFja3dhcmQoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMC4wLCAwLjAsIC0xLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLkJhY2t3YXJkID0gQmFja3dhcmQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMS4wLCAwLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyByaWdodCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gUmlnaHQoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMS4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuUmlnaHQgPSBSaWdodDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgtMS4wLCAwLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBsZWZ0IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBMZWZ0KCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKC0xLjAsIDAuMCwgMC4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5MZWZ0ID0gTGVmdDtcbn0pKFZlY3RvcjMgPSBleHBvcnRzLlZlY3RvcjMgfHwgKGV4cG9ydHMuVmVjdG9yMyA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WZWN0b3IzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TY2FsYXIgPSB2b2lkIDA7XG4vKipcbiAqIFR3byBwaSBjb25zdGFudHMgY29udmVuaWVudCBmb3IgY29tcHV0YXRpb24uXG4gKi9cbmNvbnN0IFR3b1BpID0gTWF0aC5QSSAqIDI7XG4vKipcbiAqIEJvb2xlYW4gOiB0cnVlIGlmIHRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBhbmQgYiBpcyBsb3dlciB0aGFuIGVwc2lsb24gKGRlZmF1bHQgPSAxLjQwMTI5OEUtNDUpXG4gKiBAcGFyYW0gYSAtIG51bWJlclxuICogQHBhcmFtIGIgLSBudW1iZXJcbiAqIEBwYXJhbSBlcHNpbG9uIC0gKGRlZmF1bHQgPSAxLjQwMTI5OEUtNDUpXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBhbmQgYiBpcyBsb3dlciB0aGFuIGVwc2lsb24gKGRlZmF1bHQgPSAxLjQwMTI5OEUtNDUpXG4gKi9cbmZ1bmN0aW9uIHdpdGhpbkVwc2lsb24oYSwgYiwgZXBzaWxvbiA9IDEuNDAxMjk4ZS00NSkge1xuICAgIGNvbnN0IG51bSA9IGEgLSBiO1xuICAgIHJldHVybiAtZXBzaWxvbiA8PSBudW0gJiYgbnVtIDw9IGVwc2lsb247XG59XG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgOiB0aGUgdXBwZXIgY2FzZSB0cmFuc2xhdGlvbiBvZiB0aGUgbnVtYmVyIGkgdG8gaGV4YWRlY2ltYWwuXG4gKiBAcGFyYW0gaSAtIG51bWJlclxuICogQHJldHVybnMgdGhlIHVwcGVyIGNhc2UgdHJhbnNsYXRpb24gb2YgdGhlIG51bWJlciBpIHRvIGhleGFkZWNpbWFsLlxuICovXG5mdW5jdGlvbiB0b0hleChpKSB7XG4gICAgY29uc3Qgc3RyID0gaS50b1N0cmluZygxNik7XG4gICAgaWYgKGkgPD0gMTUpIHtcbiAgICAgICAgcmV0dXJuICgnMCcgKyBzdHIpLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcbn1cbi8qKlxuICogUmV0dXJucyAtMSBpZiB2YWx1ZSBpcyBuZWdhdGl2ZSBhbmQgKzEgaXMgdmFsdWUgaXMgcG9zaXRpdmUuXG4gKiBAcGFyYW0gX3ZhbHVlIC0gdGhlIHZhbHVlXG4gKiBAcmV0dXJucyB0aGUgdmFsdWUgaXRzZWxmIGlmIGl0J3MgZXF1YWwgdG8gemVyby5cbiAqL1xuZnVuY3Rpb24gc2lnbih2YWx1ZSkge1xuICAgIGNvbnN0IF92YWx1ZSA9ICt2YWx1ZTsgLy8gY29udmVydCB0byBhIG51bWJlclxuICAgIGlmIChfdmFsdWUgPT09IDAgfHwgaXNOYU4oX3ZhbHVlKSkge1xuICAgICAgICByZXR1cm4gX3ZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gX3ZhbHVlID4gMCA/IDEgOiAtMTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgaXRzZWxmIGlmIGl0J3MgYmV0d2VlbiBtaW4gYW5kIG1heC5cbiAqIFJldHVybnMgbWluIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIG1pbi5cbiAqIFJldHVybnMgbWF4IGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gbWF4LlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNsbWFwXG4gKiBAcGFyYW0gbWluIC0gdGhlIG1pbiB2YWx1ZSB0byBjbGFtcCB0byAoZGVmYXVsdDogMClcbiAqIEBwYXJhbSBtYXggLSB0aGUgbWF4IHZhbHVlIHRvIGNsYW1wIHRvIChkZWZhdWx0OiAxKVxuICogQHJldHVybnMgdGhlIGNsYW1wZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gY2xhbXAodmFsdWUsIG1pbiA9IDAsIG1heCA9IDEpIHtcbiAgICByZXR1cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHZhbHVlKSk7XG59XG4vKipcbiAqIHRoZSBsb2cyIG9mIHZhbHVlLlxuICogQHBhcmFtIHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNvbXB1dGUgbG9nMiBvZlxuICogQHJldHVybnMgdGhlIGxvZzIgb2YgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxvZzIodmFsdWUpIHtcbiAgICByZXR1cm4gTWF0aC5sb2codmFsdWUpICogTWF0aC5MT0cyRTtcbn1cbi8qKlxuICogTG9vcHMgdGhlIHZhbHVlLCBzbyB0aGF0IGl0IGlzIG5ldmVyIGxhcmdlciB0aGFuIGxlbmd0aCBhbmQgbmV2ZXIgc21hbGxlciB0aGFuIDAuXG4gKlxuICogVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBtb2R1bG8gb3BlcmF0b3IgYnV0IGl0IHdvcmtzIHdpdGggZmxvYXRpbmcgcG9pbnQgbnVtYmVycy5cbiAqIEZvciBleGFtcGxlLCB1c2luZyAzLjAgZm9yIHQgYW5kIDIuNSBmb3IgbGVuZ3RoLCB0aGUgcmVzdWx0IHdvdWxkIGJlIDAuNS5cbiAqIFdpdGggdCA9IDUgYW5kIGxlbmd0aCA9IDIuNSwgdGhlIHJlc3VsdCB3b3VsZCBiZSAwLjAuXG4gKiBOb3RlLCBob3dldmVyLCB0aGF0IHRoZSBiZWhhdmlvdXIgaXMgbm90IGRlZmluZWQgZm9yIG5lZ2F0aXZlIG51bWJlcnMgYXMgaXQgaXMgZm9yIHRoZSBtb2R1bG8gb3BlcmF0b3JcbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZVxuICogQHBhcmFtIGxlbmd0aCAtIHRoZSBsZW5ndGhcbiAqIEByZXR1cm5zIHRoZSBsb29wZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gcmVwZWF0KHZhbHVlLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gdmFsdWUgLSBNYXRoLmZsb29yKHZhbHVlIC8gbGVuZ3RoKSAqIGxlbmd0aDtcbn1cbi8qKlxuICogTm9ybWFsaXplIHRoZSB2YWx1ZSBiZXR3ZWVuIDAuMCBhbmQgMS4wIHVzaW5nIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIHZhbHVlIC0gdmFsdWUgdG8gbm9ybWFsaXplXG4gKiBAcGFyYW0gbWluIC0gbWF4IHRvIG5vcm1hbGl6ZSBiZXR3ZWVuXG4gKiBAcGFyYW0gbWF4IC0gbWluIHRvIG5vcm1hbGl6ZSBiZXR3ZWVuXG4gKiBAcmV0dXJucyB0aGUgbm9ybWFsaXplZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBub3JtYWxpemUodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuICh2YWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTtcbn1cbi8qKlxuICogRGVub3JtYWxpemUgdGhlIHZhbHVlIGZyb20gMC4wIGFuZCAxLjAgdXNpbmcgbWluIGFuZCBtYXggdmFsdWVzXG4gKiBAcGFyYW0gbm9ybWFsaXplZCAtIHZhbHVlIHRvIGRlbm9ybWFsaXplXG4gKiBAcGFyYW0gbWluIC0gbWF4IHRvIGRlbm9ybWFsaXplIGJldHdlZW5cbiAqIEBwYXJhbSBtYXggLSBtaW4gdG8gZGVub3JtYWxpemUgYmV0d2VlblxuICogQHJldHVybnMgdGhlIGRlbm9ybWFsaXplZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBkZW5vcm1hbGl6ZShub3JtYWxpemVkLCBtaW4sIG1heCkge1xuICAgIHJldHVybiBub3JtYWxpemVkICogKG1heCAtIG1pbikgKyBtaW47XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNob3J0ZXN0IGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZ2l2ZW4gYW5nbGVzIGdpdmVuIGluIGRlZ3JlZXMuXG4gKiBAcGFyYW0gY3VycmVudCAtIGN1cnJlbnQgYW5nbGUgaW4gZGVncmVlc1xuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCBhbmdsZSBpbiBkZWdyZWVzXG4gKiBAcmV0dXJucyB0aGUgZGVsdGFcbiAqL1xuZnVuY3Rpb24gZGVsdGFBbmdsZShjdXJyZW50LCB0YXJnZXQpIHtcbiAgICBsZXQgbnVtID0gcmVwZWF0KHRhcmdldCAtIGN1cnJlbnQsIDM2MC4wKTtcbiAgICBpZiAobnVtID4gMTgwLjApIHtcbiAgICAgICAgbnVtIC09IDM2MC4wO1xuICAgIH1cbiAgICByZXR1cm4gbnVtO1xufVxuLyoqXG4gKiBQaW5nUG9uZ3MgdGhlIHZhbHVlIHQsIHNvIHRoYXQgaXQgaXMgbmV2ZXIgbGFyZ2VyIHRoYW4gbGVuZ3RoIGFuZCBuZXZlciBzbWFsbGVyIHRoYW4gMC5cbiAqIEBwYXJhbSB0eCAtIHZhbHVlXG4gKiBAcGFyYW0gbGVuZ3RoIC0gbGVuZ3RoXG4gKiBAcmV0dXJucyBUaGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBtb3ZlIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gMCBhbmQgbGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIHBpbmdQb25nKHR4LCBsZW5ndGgpIHtcbiAgICBjb25zdCB0ID0gcmVwZWF0KHR4LCBsZW5ndGggKiAyLjApO1xuICAgIHJldHVybiBsZW5ndGggLSBNYXRoLmFicyh0IC0gbGVuZ3RoKTtcbn1cbi8qKlxuICogSW50ZXJwb2xhdGVzIGJldHdlZW4gbWluIGFuZCBtYXggd2l0aCBzbW9vdGhpbmcgYXQgdGhlIGxpbWl0cy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGludGVycG9sYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4IGluIGEgc2ltaWxhciB3YXkgdG8gTGVycC4gSG93ZXZlciwgdGhlIGludGVycG9sYXRpb24gd2lsbCBncmFkdWFsbHkgc3BlZWQgdXBcbiAqIGZyb20gdGhlIHN0YXJ0IGFuZCBzbG93IGRvd24gdG93YXJkIHRoZSBlbmQuIFRoaXMgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBuYXR1cmFsLWxvb2tpbmcgYW5pbWF0aW9uLCBmYWRpbmcgYW5kIG90aGVyIHRyYW5zaXRpb25zLlxuICogQHBhcmFtIGZyb20gLSBmcm9tXG4gKiBAcGFyYW0gdG8gLSB0b1xuICogQHBhcmFtIHR4IC0gdmFsdWVcbiAqIEByZXR1cm5zIHRoZSBzbW9vdGggc3RlcHBlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBzbW9vdGhTdGVwKGZyb20sIHRvLCB0eCkge1xuICAgIGxldCB0ID0gY2xhbXAodHgpO1xuICAgIHQgPSAtMi4wICogdCAqIHQgKiB0ICsgMy4wICogdCAqIHQ7XG4gICAgcmV0dXJuIHRvICogdCArIGZyb20gKiAoMS4wIC0gdCk7XG59XG4vKipcbiAqIE1vdmVzIGEgdmFsdWUgY3VycmVudCB0b3dhcmRzIHRhcmdldC5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIE1hdGhmLkxlcnAgYnV0IGluc3RlYWQgdGhlIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHNwZWVkIG5ldmVyIGV4Y2VlZHMgbWF4RGVsdGEuXG4gKiBOZWdhdGl2ZSB2YWx1ZXMgb2YgbWF4RGVsdGEgcHVzaGVzIHRoZSB2YWx1ZSBhd2F5IGZyb20gdGFyZ2V0LlxuICogQHBhcmFtIGN1cnJlbnQgLSBjdXJyZW50IHZhbHVlXG4gKiBAcGFyYW0gdGFyZ2V0IC0gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gbWF4RGVsdGEgLSBtYXggZGlzdGFuY2UgdG8gbW92ZVxuICogQHJldHVybnMgcmVzdWx0aW5nIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIG1vdmVUb3dhcmRzKGN1cnJlbnQsIHRhcmdldCwgbWF4RGVsdGEpIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBpZiAoTWF0aC5hYnModGFyZ2V0IC0gY3VycmVudCkgPD0gbWF4RGVsdGEpIHtcbiAgICAgICAgcmVzdWx0ID0gdGFyZ2V0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gY3VycmVudCArIHNpZ24odGFyZ2V0IC0gY3VycmVudCkgKiBtYXhEZWx0YTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogU2FtZSBhcyBNb3ZlVG93YXJkcyBidXQgbWFrZXMgc3VyZSB0aGUgdmFsdWVzIGludGVycG9sYXRlIGNvcnJlY3RseSB3aGVuIHRoZXkgd3JhcCBhcm91bmQgMzYwIGRlZ3JlZXMuXG4gKlxuICogVmFyaWFibGVzIGN1cnJlbnQgYW5kIHRhcmdldCBhcmUgYXNzdW1lZCB0byBiZSBpbiBkZWdyZWVzLiBGb3Igb3B0aW1pemF0aW9uIHJlYXNvbnMsIG5lZ2F0aXZlIHZhbHVlcyBvZiBtYXhEZWx0YVxuICogIGFyZSBub3Qgc3VwcG9ydGVkIGFuZCBtYXkgY2F1c2Ugb3NjaWxsYXRpb24uIFRvIHB1c2ggY3VycmVudCBhd2F5IGZyb20gYSB0YXJnZXQgYW5nbGUsIGFkZCAxODAgdG8gdGhhdCBhbmdsZSBpbnN0ZWFkLlxuICogQHBhcmFtIGN1cnJlbnQgLSBjdXJyZW50IHZhbHVlXG4gKiBAcGFyYW0gdGFyZ2V0IC0gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gbWF4RGVsdGEgLSBtYXggZGlzdGFuY2UgdG8gbW92ZVxuICogQHJldHVybnMgcmVzdWx0aW5nIGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIG1vdmVUb3dhcmRzQW5nbGUoY3VycmVudCwgdGFyZ2V0LCBtYXhEZWx0YSkge1xuICAgIGNvbnN0IG51bSA9IGRlbHRhQW5nbGUoY3VycmVudCwgdGFyZ2V0KTtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBpZiAoLW1heERlbHRhIDwgbnVtICYmIG51bSA8IG1heERlbHRhKSB7XG4gICAgICAgIHJlc3VsdCA9IHRhcmdldDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IG1vdmVUb3dhcmRzKGN1cnJlbnQsIGN1cnJlbnQgKyBudW0sIG1heERlbHRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBzY2FsYXIgd2l0aCB2YWx1ZXMgbGluZWFybHkgaW50ZXJwb2xhdGVkIG9mIFwiYW1vdW50XCIgYmV0d2VlbiB0aGUgc3RhcnQgc2NhbGFyIGFuZCB0aGUgZW5kIHNjYWxhclxuICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgdmFsdWVcbiAqIEBwYXJhbSBlbmQgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSBhbW91bnQgLSBhbW91bnQgdG8gbGVycCBiZXR3ZWVuXG4gKiBAcmV0dXJucyB0aGUgbGVycGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGxlcnAoc3RhcnQsIGVuZCwgYW1vdW50KSB7XG4gICAgcmV0dXJuIHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIGFtb3VudDtcbn1cbi8qKlxuICogU2FtZSBhcyBMZXJwIGJ1dCBtYWtlcyBzdXJlIHRoZSB2YWx1ZXMgaW50ZXJwb2xhdGUgY29ycmVjdGx5IHdoZW4gdGhleSB3cmFwIGFyb3VuZCAzNjAgZGVncmVlcy5cbiAqIFRoZSBwYXJhbWV0ZXIgdCBpcyBjbGFtcGVkIHRvIHRoZSByYW5nZSBbMCwgMV0uIFZhcmlhYmxlcyBhIGFuZCBiIGFyZSBhc3N1bWVkIHRvIGJlIGluIGRlZ3JlZXMuXG4gKiBAcGFyYW0gc3RhcnQgLSBzdGFydCB2YWx1ZVxuICogQHBhcmFtIGVuZCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIGFtb3VudCAtIGFtb3VudCB0byBsZXJwIGJldHdlZW5cbiAqIEByZXR1cm5zIHRoZSBsZXJwZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbGVycEFuZ2xlKHN0YXJ0LCBlbmQsIGFtb3VudCkge1xuICAgIGxldCBudW0gPSByZXBlYXQoZW5kIC0gc3RhcnQsIDM2MC4wKTtcbiAgICBpZiAobnVtID4gMTgwLjApIHtcbiAgICAgICAgbnVtIC09IDM2MC4wO1xuICAgIH1cbiAgICByZXR1cm4gc3RhcnQgKyBudW0gKiBjbGFtcChhbW91bnQpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsaW5lYXIgcGFyYW1ldGVyIHQgdGhhdCBwcm9kdWNlcyB0aGUgaW50ZXJwb2xhbnQgdmFsdWUgd2l0aGluIHRoZSByYW5nZSBbYSwgYl0uXG4gKiBAcGFyYW0gYSAtIHN0YXJ0IHZhbHVlXG4gKiBAcGFyYW0gYiAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIHZhbHVlIC0gdmFsdWUgYmV0d2VlbiBhIGFuZCBiXG4gKiBAcmV0dXJucyB0aGUgaW52ZXJzZUxlcnAgdmFsdWVcbiAqL1xuZnVuY3Rpb24gaW52ZXJzZUxlcnAoYSwgYiwgdmFsdWUpIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICByZXN1bHQgPSBjbGFtcCgodmFsdWUgLSBhKSAvIChiIC0gYSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gMC4wO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IHNjYWxhciBsb2NhdGVkIGZvciBcImFtb3VudFwiIChmbG9hdCkgb24gdGhlIEhlcm1pdGUgc3BsaW5lIGRlZmluZWQgYnkgdGhlIHNjYWxhcnMgXCJ2YWx1ZTFcIiwgXCJ2YWx1ZTNcIiwgXCJ0YW5nZW50MVwiLCBcInRhbmdlbnQyXCIuXG4gKiB7QGxpbmsgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9IZXJtaXRlUG9seW5vbWlhbC5odG1sfVxuICogQHBhcmFtIHZhbHVlMSAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHRhbmdlbnQxIC0gc3BsaW5lIHZhbHVlXG4gKiBAcGFyYW0gdmFsdWUyIC0gc3BsaW5lIHZhbHVlXG4gKiBAcGFyYW0gdGFuZ2VudDIgLSBzcGxpbmUgdmFsdWVcbiAqIEBwYXJhbSBhbW91bnQgLSBpbnB1dCB2YWx1ZVxuICogQHJldHVybnMgaGVybWl0ZSByZXN1bHRcbiAqL1xuZnVuY3Rpb24gaGVybWl0ZSh2YWx1ZTEsIHRhbmdlbnQxLCB2YWx1ZTIsIHRhbmdlbnQyLCBhbW91bnQpIHtcbiAgICBjb25zdCBzcXVhcmVkID0gYW1vdW50ICogYW1vdW50O1xuICAgIGNvbnN0IGN1YmVkID0gYW1vdW50ICogc3F1YXJlZDtcbiAgICBjb25zdCBwYXJ0MSA9IDIuMCAqIGN1YmVkIC0gMy4wICogc3F1YXJlZCArIDEuMDtcbiAgICBjb25zdCBwYXJ0MiA9IC0yLjAgKiBjdWJlZCArIDMuMCAqIHNxdWFyZWQ7XG4gICAgY29uc3QgcGFydDMgPSBjdWJlZCAtIDIuMCAqIHNxdWFyZWQgKyBhbW91bnQ7XG4gICAgY29uc3QgcGFydDQgPSBjdWJlZCAtIHNxdWFyZWQ7XG4gICAgcmV0dXJuIHZhbHVlMSAqIHBhcnQxICsgdmFsdWUyICogcGFydDIgKyB0YW5nZW50MSAqIHBhcnQzICsgdGFuZ2VudDIgKiBwYXJ0NDtcbn1cbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBmbG9hdCBudW1iZXIgYmV0d2VlbiBhbmQgbWluIGFuZCBtYXggdmFsdWVzXG4gKiBAcGFyYW0gbWluIC0gbWluIHZhbHVlIG9mIHJhbmRvbVxuICogQHBhcmFtIG1heCAtIG1heCB2YWx1ZSBvZiByYW5kb21cbiAqIEByZXR1cm5zIHJhbmRvbSB2YWx1ZVxuICovXG5mdW5jdGlvbiByYW5kb21SYW5nZShtaW4sIG1heCkge1xuICAgIGlmIChtaW4gPT09IG1heCkge1xuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcGVyY2VudGFnZSBvZiBhIG51bWJlciBpbiBhIGdpdmVuIHJhbmdlLlxuICpcbiAqIFJhbmdlVG9QZXJjZW50KDQwLDIwLDYwKSB3aWxsIHJldHVybiAwLjUgKDUwJSlcbiAqIFJhbmdlVG9QZXJjZW50KDM0LDAsMTAwKSB3aWxsIHJldHVybiAwLjM0ICgzNCUpXG4gKiBAcGFyYW0gbnVtIC0gdG8gY29udmVydCB0byBwZXJjZW50YWdlXG4gKiBAcGFyYW0gbWluIC0gbWluIHJhbmdlXG4gKiBAcGFyYW0gbWF4IC0gbWF4IHJhbmdlXG4gKiBAcmV0dXJucyB0aGUgcGVyY2VudGFnZVxuICovXG5mdW5jdGlvbiByYW5nZVRvUGVyY2VudChudW0sIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIChudW0gLSBtaW4pIC8gKG1heCAtIG1pbik7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcGVyY2VudGFnZSBpbiBhIGdpdmVuIHJhbmdlLlxuICpcbiAqIFBlcmNlbnRUb1JhbmdlKDAuMzQsMCwxMDApIHdpbGwgcmV0dXJuIDM0LlxuICogQHBhcmFtIHBlcmNlbnQgLSB0byBjb252ZXJ0IHRvIG51bWJlclxuICogQHBhcmFtIG1pbiAtIG1pbiByYW5nZVxuICogQHBhcmFtIG1heCAtIG1heCByYW5nZVxuICogQHJldHVybnMgdGhlIG51bWJlclxuICovXG5mdW5jdGlvbiBwZXJjZW50VG9SYW5nZShwZXJjZW50LCBtaW4sIG1heCkge1xuICAgIHJldHVybiAobWF4IC0gbWluKSAqIHBlcmNlbnQgKyBtaW47XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGFuZ2xlIGNvbnZlcnRlZCB0byBlcXVpdmFsZW50IHZhbHVlIGJldHdlZW4gLU1hdGguUEkgYW5kIE1hdGguUEkgcmFkaWFucy5cbiAqIEBwYXJhbSBhbmdsZSAtIFRoZSBhbmdsZSB0byBub3JtYWxpemUgaW4gcmFkaWFuLlxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBhbmdsZS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmFkaWFucyhhbmdsZSkge1xuICAgIC8vIE1vcmUgcHJlY2lzZSBidXQgc2xvd2VyIHZlcnNpb24ga2VwdCBmb3IgcmVmZXJlbmNlLlxuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbW1lbnRlZC1vdXQtY29kZVxuICAgIC8qXG4gICAgICAvLyBhbmdsZSA9IGFuZ2xlICUgVG9vbHMuVHdvUGk7XG4gICAgICAvLyBhbmdsZSA9IChhbmdsZSArIFRvb2xzLlR3b1BpKSAlIFRvb2xzLlR3b1BpO1xuICBcbiAgICAgIC8vaWYgKGFuZ2xlID4gTWF0aC5QSSkge1xuICAgICAgLy9cdGFuZ2xlIC09IFRvb2xzLlR3b1BpO1xuICAgICAgLy99XG4gICAgICAgICovXG4gICAgcmV0dXJuIGFuZ2xlIC0gVHdvUGkgKiBNYXRoLmZsb29yKChhbmdsZSArIE1hdGguUEkpIC8gVHdvUGkpO1xufVxuLyoqXG4gKiBTY2FsYXIgY29tcHV0YXRpb24gbGlicmFyeVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlNjYWxhciA9IHtcbiAgICB3aXRoaW5FcHNpbG9uLFxuICAgIHRvSGV4LFxuICAgIHNpZ24sXG4gICAgY2xhbXAsXG4gICAgbG9nMixcbiAgICByZXBlYXQsXG4gICAgbm9ybWFsaXplLFxuICAgIGRlbm9ybWFsaXplLFxuICAgIGRlbHRhQW5nbGUsXG4gICAgcGluZ1BvbmcsXG4gICAgc21vb3RoU3RlcCxcbiAgICBtb3ZlVG93YXJkcyxcbiAgICBtb3ZlVG93YXJkc0FuZ2xlLFxuICAgIGxlcnAsXG4gICAgbGVycEFuZ2xlLFxuICAgIGludmVyc2VMZXJwLFxuICAgIGhlcm1pdGUsXG4gICAgcmFuZG9tUmFuZ2UsXG4gICAgcmFuZ2VUb1BlcmNlbnQsXG4gICAgcGVyY2VudFRvUmFuZ2UsXG4gICAgbm9ybWFsaXplUmFkaWFucyxcbiAgICBUd29QaVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNjYWxhci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUkFEMkRFRyA9IGV4cG9ydHMuREVHMlJBRCA9IGV4cG9ydHMuRXBzaWxvbiA9IGV4cG9ydHMuVG9MaW5lYXJTcGFjZSA9IGV4cG9ydHMuVG9HYW1tYVNwYWNlID0gZXhwb3J0cy5TcGFjZSA9IGV4cG9ydHMuT3JpZW50YXRpb24gPSB2b2lkIDA7XG4vKipcbiAqIERlZmluZXMgcG90ZW50aWFsIG9yaWVudGF0aW9uIGZvciBiYWNrIGZhY2UgY3VsbGluZ1xuICogQHB1YmxpY1xuICovXG52YXIgT3JpZW50YXRpb247XG4oZnVuY3Rpb24gKE9yaWVudGF0aW9uKSB7XG4gICAgLyoqXG4gICAgICogQ2xvY2t3aXNlXG4gICAgICovXG4gICAgT3JpZW50YXRpb25bT3JpZW50YXRpb25bXCJDV1wiXSA9IDBdID0gXCJDV1wiO1xuICAgIC8qKiBDb3VudGVyIGNsb2Nrd2lzZSAqL1xuICAgIE9yaWVudGF0aW9uW09yaWVudGF0aW9uW1wiQ0NXXCJdID0gMV0gPSBcIkNDV1wiO1xufSkoT3JpZW50YXRpb24gPSBleHBvcnRzLk9yaWVudGF0aW9uIHx8IChleHBvcnRzLk9yaWVudGF0aW9uID0ge30pKTtcbi8qKlxuICogRGVmaW5lcyBzdXBwb3J0ZWQgc3BhY2VzXG4gKiBAcHVibGljXG4gKi9cbnZhciBTcGFjZTtcbihmdW5jdGlvbiAoU3BhY2UpIHtcbiAgICAvKiogTG9jYWwgKG9iamVjdCkgc3BhY2UgKi9cbiAgICBTcGFjZVtTcGFjZVtcIkxPQ0FMXCJdID0gMF0gPSBcIkxPQ0FMXCI7XG4gICAgLyoqIFdvcmxkIHNwYWNlICovXG4gICAgU3BhY2VbU3BhY2VbXCJXT1JMRFwiXSA9IDFdID0gXCJXT1JMRFwiO1xuICAgIC8qKiBCb25lIHNwYWNlICovXG4gICAgU3BhY2VbU3BhY2VbXCJCT05FXCJdID0gMl0gPSBcIkJPTkVcIjtcbn0pKFNwYWNlID0gZXhwb3J0cy5TcGFjZSB8fCAoZXhwb3J0cy5TcGFjZSA9IHt9KSk7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gY29udmVydCBhIHZhbHVlIHRvIGdhbW1hIHNwYWNlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuVG9HYW1tYVNwYWNlID0gMSAvIDIuMjtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCB0byBjb252ZXJ0IGEgdmFsdWUgdG8gbGluZWFyIHNwYWNlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuVG9MaW5lYXJTcGFjZSA9IDIuMjtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCB0byBkZWZpbmUgdGhlIG1pbmltYWwgbnVtYmVyIHZhbHVlIGluIEJhYnlsb24uanNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5FcHNpbG9uID0gMC4wMDAwMDE7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gY29udmVydCBmcm9tIEV1bGVyIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICogQHB1YmxpY1xuICovXG5leHBvcnRzLkRFRzJSQUQgPSBNYXRoLlBJIC8gMTgwO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgZnJvbSByYWRpYW5zIHRvIEV1bGVyIGRlZ3JlZXNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5SQUQyREVHID0gMzYwIC8gKE1hdGguUEkgKiAyKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5RdWF0ZXJuaW9uID0gdm9pZCAwO1xuY29uc3QgVmVjdG9yM18xID0gcmVxdWlyZShcIi4vVmVjdG9yM1wiKTtcbmNvbnN0IFNjYWxhcl8xID0gcmVxdWlyZShcIi4vU2NhbGFyXCIpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuLyoqXG4gKiBAcHVibGljXG4gKi9cbnZhciBRdWF0ZXJuaW9uO1xuKGZ1bmN0aW9uIChRdWF0ZXJuaW9uKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBRdWF0ZXJuaW9uIGZyb20gdGhlIGdpdmVuIGZsb2F0c1xuICAgICAqIEBwYXJhbSB4IC0gZGVmaW5lcyB0aGUgZmlyc3QgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpXG4gICAgICogQHBhcmFtIHkgLSBkZWZpbmVzIHRoZSBzZWNvbmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpXG4gICAgICogQHBhcmFtIHogLSBkZWZpbmVzIHRoZSB0aGlyZCBjb21wb25lbnQgKDAgYnkgZGVmYXVsdClcbiAgICAgKiBAcGFyYW0gdyAtIGRlZmluZXMgdGhlIGZvdXJ0aCBjb21wb25lbnQgKDEuMCBieSBkZWZhdWx0KVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShcbiAgICAvKiogZGVmaW5lcyB0aGUgZmlyc3QgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpICovXG4gICAgeCA9IDAuMCwgXG4gICAgLyoqIGRlZmluZXMgdGhlIHNlY29uZCBjb21wb25lbnQgKDAgYnkgZGVmYXVsdCkgKi9cbiAgICB5ID0gMC4wLCBcbiAgICAvKiogZGVmaW5lcyB0aGUgdGhpcmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpICovXG4gICAgeiA9IDAuMCwgXG4gICAgLyoqIGRlZmluZXMgdGhlIGZvdXJ0aCBjb21wb25lbnQgKDEuMCBieSBkZWZhdWx0KSAqL1xuICAgIHcgPSAxLjApIHtcbiAgICAgICAgcmV0dXJuIHsgeCwgeSwgeiwgdyB9O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFF1YXRlcm5pb24gYXMgdGhlIHJlc3VsdCBvZiB0aGUgYWRkaXRpb24gb2YgdGhlIHR3byBnaXZlbiBxdWF0ZXJuaW9ucy5cbiAgICAgKiBAcGFyYW0gcTEgLSB0aGUgZmlyc3QgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBxMiAtIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFkZChxMSwgcTIpIHtcbiAgICAgICAgcmV0dXJuIHsgeDogcTEueCArIHEyLngsIHk6IHExLnkgKyBxMi55LCB6OiBxMS56ICsgcTIueiwgdzogcTEudyArIHEyLncgfTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5hZGQgPSBhZGQ7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBmcm9tIHRoZSBnaXZlbiBFdWxlciBmbG9hdCBhbmdsZXMgKHksIHgsIHopIGFuZCBzdG9yZXMgaXQgaW4gdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHlhdyAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBZIGF4aXNcbiAgICAgKiBAcGFyYW0gcGl0Y2ggLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWCBheGlzXG4gICAgICogQHBhcmFtIHJvbGwgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWiBheGlzXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRpb25ZYXdQaXRjaFJvbGwoeWF3LCBwaXRjaCwgcm9sbCkge1xuICAgICAgICAvLyBJbXBsZW1lbnRlZCB1bml0eS1iYXNlZCBjYWxjdWxhdGlvbnMgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU2MDU1ODEzXG4gICAgICAgIGNvbnN0IGhhbGZQaXRjaCA9IHBpdGNoICogMC41O1xuICAgICAgICBjb25zdCBoYWxmWWF3ID0geWF3ICogMC41O1xuICAgICAgICBjb25zdCBoYWxmUm9sbCA9IHJvbGwgKiAwLjU7XG4gICAgICAgIGNvbnN0IGMxID0gTWF0aC5jb3MoaGFsZlBpdGNoKTtcbiAgICAgICAgY29uc3QgYzIgPSBNYXRoLmNvcyhoYWxmWWF3KTtcbiAgICAgICAgY29uc3QgYzMgPSBNYXRoLmNvcyhoYWxmUm9sbCk7XG4gICAgICAgIGNvbnN0IHMxID0gTWF0aC5zaW4oaGFsZlBpdGNoKTtcbiAgICAgICAgY29uc3QgczIgPSBNYXRoLnNpbihoYWxmWWF3KTtcbiAgICAgICAgY29uc3QgczMgPSBNYXRoLnNpbihoYWxmUm9sbCk7XG4gICAgICAgIHJldHVybiBjcmVhdGUoYzIgKiBzMSAqIGMzICsgczIgKiBjMSAqIHMzLCBzMiAqIGMxICogYzMgLSBjMiAqIHMxICogczMsIGMyICogYzEgKiBzMyAtIHMyICogczEgKiBjMywgYzIgKiBjMSAqIGMzICsgczIgKiBzMSAqIHMzKTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGlvbllhd1BpdGNoUm9sbCA9IHJvdGF0aW9uWWF3UGl0Y2hSb2xsO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByb3RhdGlvbiB0aGF0IHJvdGF0ZXMgeiBkZWdyZWVzIGFyb3VuZCB0aGUgeiBheGlzLCB4IGRlZ3JlZXMgYXJvdW5kIHRoZSB4IGF4aXMsIGFuZCB5IGRlZ3JlZXMgYXJvdW5kIHRoZSB5IGF4aXMuXG4gICAgICogQHBhcmFtIHggLSB0aGUgcm90YXRpb24gb24gdGhlIHggYXhpcyBpbiBldWxlciBkZWdyZWVzXG4gICAgICogQHBhcmFtIHkgLSB0aGUgcm90YXRpb24gb24gdGhlIHkgYXhpcyBpbiBldWxlciBkZWdyZWVzXG4gICAgICogQHBhcmFtIHogLSB0aGUgcm90YXRpb24gb24gdGhlIHogYXhpcyBpbiBldWxlciBkZWdyZWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXVsZXIoeCwgeSwgeikge1xuICAgICAgICByZXR1cm4gcm90YXRpb25ZYXdQaXRjaFJvbGwoeSAqIHR5cGVzXzEuREVHMlJBRCwgeCAqIHR5cGVzXzEuREVHMlJBRCwgeiAqIHR5cGVzXzEuREVHMlJBRCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uZXVsZXIgPSBldWxlcjtcbiAgICAvKipcbiAgICAgKiBHZXRzIGxlbmd0aCBvZiBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcXVhdGVybmlvbiBsZW5ndGggKGZsb2F0KVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aChxKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQobGVuZ3RoU3F1YXJlZChxKSk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubGVuZ3RoID0gbGVuZ3RoO1xuICAgIC8qKlxuICAgICAqIEdldHMgbGVuZ3RoIG9mIGN1cnJlbnQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSBxdWF0ZXJuaW9uIGxlbmd0aCAoZmxvYXQpXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVuZ3RoU3F1YXJlZChxKSB7XG4gICAgICAgIHJldHVybiBxLnggKiBxLnggKyBxLnkgKiBxLnkgKyBxLnogKiBxLnogKyBxLncgKiBxLnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubGVuZ3RoU3F1YXJlZCA9IGxlbmd0aFNxdWFyZWQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBiZXR3ZWVuIHRoZSBxdWF0ZXJuaW9ucyBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIHRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMgdGhlIGRvdCBwcm9kdWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gZG90KGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiAobGVmdC54ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0LnkgKyBsZWZ0LnogKiByaWdodC56ICsgbGVmdC53ICogcmlnaHQudyk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uZG90ID0gZG90O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFuZ2xlIGluIGRlZ3JlZXMgYmV0d2VlbiB0d28gcm90YXRpb25zIGEgYW5kIGIuXG4gICAgICogQHBhcmFtIHF1YXQxIC0gZGVmaW5lcyB0aGUgZmlyc3QgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBxdWF0MiAtIGRlZmluZXMgdGhlIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYW5nbGUocXVhdDEsIHF1YXQyKSB7XG4gICAgICAgIGNvbnN0IGRvdFZhbCA9IGRvdChxdWF0MSwgcXVhdDIpO1xuICAgICAgICByZXR1cm4gTWF0aC5hY29zKE1hdGgubWluKE1hdGguYWJzKGRvdFZhbCksIDEpKSAqIDIgKiB0eXBlc18xLlJBRDJERUc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uYW5nbGUgPSBhbmdsZTtcbiAgICAvKipcbiAgICAgKiBUaGUgZnJvbSBxdWF0ZXJuaW9uIGlzIHJvdGF0ZWQgdG93YXJkcyB0byBieSBhbiBhbmd1bGFyIHN0ZXAgb2YgbWF4RGVncmVlc0RlbHRhLlxuICAgICAqIEBwYXJhbSBmcm9tIC0gZGVmaW5lcyB0aGUgZmlyc3QgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSB0byAtIGRlZmluZXMgdGhlIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIG1heERlZ3JlZXNEZWx0YSAtIHRoZSBpbnRlcnZhbCBzdGVwXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRlVG93YXJkcyhmcm9tLCB0bywgbWF4RGVncmVlc0RlbHRhKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IGFuZ2xlKGZyb20sIHRvKTtcbiAgICAgICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRvO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHQgPSBNYXRoLm1pbigxLCBtYXhEZWdyZWVzRGVsdGEgLyBudW0pO1xuICAgICAgICByZXR1cm4gc2xlcnAoZnJvbSwgdG8sIHQpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLnJvdGF0ZVRvd2FyZHMgPSByb3RhdGVUb3dhcmRzO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSByb3RhdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgZm9yd2FyZCBhbmQgdXB3YXJkcyBkaXJlY3Rpb25zLlxuICAgICAqIEBwYXJhbSBmb3J3YXJkIC0gdGhlIGRpcmVjdGlvbiB0byBsb29rIGluXG4gICAgICogQHBhcmFtIHVwIC0gdGhlIHZlY3RvciB0aGF0IGRlZmluZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHVwIGlzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbG9va1JvdGF0aW9uKGZvcndhcmQsIHVwID0geyB4OiAwLjAsIHk6IDEuMCwgejogMC4wIH0pIHtcbiAgICAgICAgY29uc3QgZm9yd2FyZE5ldyA9IFZlY3RvcjNfMS5WZWN0b3IzLm5vcm1hbGl6ZShmb3J3YXJkKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoVmVjdG9yM18xLlZlY3RvcjMuY3Jvc3ModXAsIGZvcndhcmROZXcpKTtcbiAgICAgICAgY29uc3QgdXBOZXcgPSBWZWN0b3IzXzEuVmVjdG9yMy5jcm9zcyhmb3J3YXJkTmV3LCByaWdodCk7XG4gICAgICAgIGNvbnN0IG0wMCA9IHJpZ2h0Lng7XG4gICAgICAgIGNvbnN0IG0wMSA9IHJpZ2h0Lnk7XG4gICAgICAgIGNvbnN0IG0wMiA9IHJpZ2h0Lno7XG4gICAgICAgIGNvbnN0IG0xMCA9IHVwTmV3Lng7XG4gICAgICAgIGNvbnN0IG0xMSA9IHVwTmV3Lnk7XG4gICAgICAgIGNvbnN0IG0xMiA9IHVwTmV3Lno7XG4gICAgICAgIGNvbnN0IG0yMCA9IGZvcndhcmROZXcueDtcbiAgICAgICAgY29uc3QgbTIxID0gZm9yd2FyZE5ldy55O1xuICAgICAgICBjb25zdCBtMjIgPSBmb3J3YXJkTmV3Lno7XG4gICAgICAgIGNvbnN0IG51bTggPSBtMDAgKyBtMTEgKyBtMjI7XG4gICAgICAgIGNvbnN0IHF1YXRlcm5pb24gPSBjcmVhdGUoKTtcbiAgICAgICAgaWYgKG51bTggPiAwKSB7XG4gICAgICAgICAgICBsZXQgbnVtID0gTWF0aC5zcXJ0KG51bTggKyAxKTtcbiAgICAgICAgICAgIHF1YXRlcm5pb24udyA9IG51bSAqIDAuNTtcbiAgICAgICAgICAgIG51bSA9IDAuNSAvIG51bTtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueCA9IChtMTIgLSBtMjEpICogbnVtO1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gKG0yMCAtIG0wMikgKiBudW07XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnogPSAobTAxIC0gbTEwKSAqIG51bTtcbiAgICAgICAgICAgIHJldHVybiBxdWF0ZXJuaW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtMDAgPj0gbTExICYmIG0wMCA+PSBtMjIpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bTcgPSBNYXRoLnNxcnQoMSArIG0wMCAtIG0xMSAtIG0yMik7XG4gICAgICAgICAgICBjb25zdCBudW00ID0gMC41IC8gbnVtNztcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueCA9IDAuNSAqIG51bTc7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnkgPSAobTAxICsgbTEwKSAqIG51bTQ7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnogPSAobTAyICsgbTIwKSAqIG51bTQ7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLncgPSAobTEyIC0gbTIxKSAqIG51bTQ7XG4gICAgICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobTExID4gbTIyKSB7XG4gICAgICAgICAgICBjb25zdCBudW02ID0gTWF0aC5zcXJ0KDEgKyBtMTEgLSBtMDAgLSBtMjIpO1xuICAgICAgICAgICAgY29uc3QgbnVtMyA9IDAuNSAvIG51bTY7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTEwICsgbTAxKSAqIG51bTM7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnkgPSAwLjUgKiBudW02O1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0yMSArIG0xMikgKiBudW0zO1xuICAgICAgICAgICAgcXVhdGVybmlvbi53ID0gKG0yMCAtIG0wMikgKiBudW0zO1xuICAgICAgICAgICAgcmV0dXJuIHF1YXRlcm5pb247XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnVtNSA9IE1hdGguc3FydCgxICsgbTIyIC0gbTAwIC0gbTExKTtcbiAgICAgICAgY29uc3QgbnVtMiA9IDAuNSAvIG51bTU7XG4gICAgICAgIHF1YXRlcm5pb24ueCA9IChtMjAgKyBtMDIpICogbnVtMjtcbiAgICAgICAgcXVhdGVybmlvbi55ID0gKG0yMSArIG0xMikgKiBudW0yO1xuICAgICAgICBxdWF0ZXJuaW9uLnogPSAwLjUgKiBudW01O1xuICAgICAgICBxdWF0ZXJuaW9uLncgPSAobTAxIC0gbTEwKSAqIG51bTI7XG4gICAgICAgIHJldHVybiBxdWF0ZXJuaW9uO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxvb2tSb3RhdGlvbiA9IGxvb2tSb3RhdGlvbjtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgaW4gcGxhY2UgdGhlIGN1cnJlbnQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShxKSB7XG4gICAgICAgIGNvbnN0IHFMZW5ndGggPSAxLjAgLyBsZW5ndGgocSk7XG4gICAgICAgIHJldHVybiBjcmVhdGUocS54ICogcUxlbmd0aCwgcS55ICogcUxlbmd0aCwgcS56ICogcUxlbmd0aCwgcS53ICogcUxlbmd0aCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubm9ybWFsaXplID0gbm9ybWFsaXplO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSByb3RhdGlvbiB3aGljaCByb3RhdGVzIGZyb20gZnJvbURpcmVjdGlvbiB0byB0b0RpcmVjdGlvbi5cbiAgICAgKiBAcGFyYW0gZnJvbSAtIGRlZmluZXMgdGhlIGZpcnN0IGRpcmVjdGlvbiBWZWN0b3JcbiAgICAgKiBAcGFyYW0gdG8gLSBkZWZpbmVzIHRoZSB0YXJnZXQgZGlyZWN0aW9uIFZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21Ub1JvdGF0aW9uKGZyb20sIHRvLCB1cCA9IFZlY3RvcjNfMS5WZWN0b3IzLlVwKCkpIHtcbiAgICAgICAgLy8gVW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGltcGxlbWVudGVkIGZyb20gaHR0cHM6Ly9mb3J1bS51bml0eS5jb20vdGhyZWFkcy9xdWF0ZXJuaW9uLWxvb2tyb3RhdGlvbi1hcm91bmQtYW4tYXhpcy42MDg0NzAvI3Bvc3QtNDA2OTg4OFxuICAgICAgICBjb25zdCB2MCA9IFZlY3RvcjNfMS5WZWN0b3IzLm5vcm1hbGl6ZShmcm9tKTtcbiAgICAgICAgY29uc3QgdjEgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUodG8pO1xuICAgICAgICBjb25zdCBhID0gVmVjdG9yM18xLlZlY3RvcjMuY3Jvc3ModjAsIHYxKTtcbiAgICAgICAgY29uc3QgdyA9IE1hdGguc3FydChWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKHYwKSAqIFZlY3RvcjNfMS5WZWN0b3IzLmxlbmd0aFNxdWFyZWQodjEpKSArXG4gICAgICAgICAgICBWZWN0b3IzXzEuVmVjdG9yMy5kb3QodjAsIHYxKTtcbiAgICAgICAgaWYgKFZlY3RvcjNfMS5WZWN0b3IzLmxlbmd0aFNxdWFyZWQoYSkgPCAwLjAwMDEpIHtcbiAgICAgICAgICAgIC8vIHRoZSB2ZWN0b3JzIGFyZSBwYXJhbGxlbCwgY2hlY2sgdyB0byBmaW5kIGRpcmVjdGlvblxuICAgICAgICAgICAgLy8gaWYgdyBpcyAwIHRoZW4gdmFsdWVzIGFyZSBvcHBvc2l0ZSwgYW5kIHdlIHNvdWxkIHJvdGF0ZSAxODAgZGVncmVlcyBhcm91bmQgdGhlIHN1cHBsaWVkIGF4aXNcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSB0aGUgdmVjdG9ycyBpbiB0aGUgc2FtZSBkaXJlY3Rpb24gYW5kIG5vIHJvdGF0aW9uIHNob3VsZCBvY2N1clxuICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHcpIDwgMC4wMDAxXG4gICAgICAgICAgICAgICAgPyBub3JtYWxpemUoY3JlYXRlKHVwLngsIHVwLnksIHVwLnosIDApKVxuICAgICAgICAgICAgICAgIDogSWRlbnRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUoY3JlYXRlKGEueCwgYS55LCBhLnosIHcpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmZyb21Ub1JvdGF0aW9uID0gZnJvbVRvUm90YXRpb247XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpZGVudGl0eSBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgLSB0aGUgaWRlbnRpdHkgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIElkZW50aXR5KCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAwLjAsIDEuMCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uSWRlbnRpdHkgPSBJZGVudGl0eTtcbiAgICAvKipcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIGV1bGVyIGFuZ2xlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByb3RhdGlvbi5cbiAgICAgKiBJbXBsZW1lbnRlZCB1bml0eS1iYXNlZCBjYWxjdWxhdGlvbnMgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU2MDU1ODEzXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXVsZXJBbmdsZXMocSkge1xuICAgICAgICBjb25zdCBvdXQgPSBWZWN0b3IzXzEuVmVjdG9yMy5jcmVhdGUoKTtcbiAgICAgICAgLy8gaWYgdGhlIGlucHV0IHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCwgdGhpcyBpcyBleGFjdGx5IG9uZS4gT3RoZXJ3aXNlLCB0aGlzIGFjdHMgYXMgYSBjb3JyZWN0aW9uIGZhY3RvciBmb3IgdGhlIHF1YXRlcm5pb24ncyBub3Qtbm9ybWFsaXplZG5lc3NcbiAgICAgICAgY29uc3QgdW5pdCA9IHEueCAqIHEueCArIHEueSAqIHEueSArIHEueiAqIHEueiArIHEudyAqIHEudztcbiAgICAgICAgLy8gcSB3aWxsIGhhdmUgYSBtYWduaXR1ZGUgb2YgMC41IG9yIGdyZWF0ZXIgaWYgYW5kIG9ubHkgaWYgcSBpcyBhIHNpbmd1bGFyaXR5IGNhc2VcbiAgICAgICAgY29uc3QgdGVzdCA9IHEueCAqIHEudyAtIHEueSAqIHEuejtcbiAgICAgICAgaWYgKHRlc3QgPiAwLjQ5OTUgKiB1bml0KSB7XG4gICAgICAgICAgICAvLyBzaW5ndWxhcml0eSBhdCBub3J0aCBwb2xlXG4gICAgICAgICAgICBvdXQueCA9IE1hdGguUEkgLyAyO1xuICAgICAgICAgICAgb3V0LnkgPSAyICogTWF0aC5hdGFuMihxLnksIHEueCk7XG4gICAgICAgICAgICBvdXQueiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGVzdCA8IC0wLjQ5OTUgKiB1bml0KSB7XG4gICAgICAgICAgICAvLyBzaW5ndWxhcml0eSBhdCBzb3V0aCBwb2xlXG4gICAgICAgICAgICBvdXQueCA9IC1NYXRoLlBJIC8gMjtcbiAgICAgICAgICAgIG91dC55ID0gLTIgKiBNYXRoLmF0YW4yKHEueSwgcS54KTtcbiAgICAgICAgICAgIG91dC56ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vIHNpbmd1bGFyaXR5IC0gcSBpcyB0aGUgbWFqb3JpdHkgb2YgY2FzZXNcbiAgICAgICAgICAgIG91dC54ID0gTWF0aC5hc2luKDIgKiAocS53ICogcS54IC0gcS55ICogcS56KSk7XG4gICAgICAgICAgICBvdXQueSA9IE1hdGguYXRhbjIoMiAqIHEudyAqIHEueSArIDIgKiBxLnogKiBxLngsIDEgLSAyICogKHEueCAqIHEueCArIHEueSAqIHEueSkpO1xuICAgICAgICAgICAgb3V0LnogPSBNYXRoLmF0YW4yKDIgKiBxLncgKiBxLnogKyAyICogcS54ICogcS55LCAxIC0gMiAqIChxLnogKiBxLnogKyBxLnggKiBxLngpKTtcbiAgICAgICAgfVxuICAgICAgICBvdXQueCAqPSB0eXBlc18xLlJBRDJERUc7XG4gICAgICAgIG91dC55ICo9IHR5cGVzXzEuUkFEMkRFRztcbiAgICAgICAgb3V0LnogKj0gdHlwZXNfMS5SQUQyREVHO1xuICAgICAgICAvLyBlbnN1cmUgdGhlIGRlZ3JlZSB2YWx1ZXMgYXJlIGJldHdlZW4gMCBhbmQgMzYwXG4gICAgICAgIG91dC54ID0gU2NhbGFyXzEuU2NhbGFyLnJlcGVhdChvdXQueCwgMzYwKTtcbiAgICAgICAgb3V0LnkgPSBTY2FsYXJfMS5TY2FsYXIucmVwZWF0KG91dC55LCAzNjApO1xuICAgICAgICBvdXQueiA9IFNjYWxhcl8xLlNjYWxhci5yZXBlYXQob3V0LnosIDM2MCk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uZXVsZXJBbmdsZXMgPSBldWxlckFuZ2xlcztcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHJvdGF0aW9uIGZyb20gdGhlIGdpdmVuIEV1bGVyIGZsb2F0IGFuZ2xlcyAoeSwgeCwgeikgYW5kIHN0b3JlcyBpdCBpbiB0aGUgdGFyZ2V0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0geWF3IC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFkgYXhpc1xuICAgICAqIEBwYXJhbSBwaXRjaCAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBYIGF4aXNcbiAgICAgKiBAcGFyYW0gcm9sbCAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBaIGF4aXNcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgdGFyZ2V0IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmKHlhdywgcGl0Y2gsIHJvbGwsIHJlc3VsdCkge1xuICAgICAgICAvLyBJbXBsZW1lbnRlZCB1bml0eS1iYXNlZCBjYWxjdWxhdGlvbnMgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU2MDU1ODEzXG4gICAgICAgIGNvbnN0IGhhbGZQaXRjaCA9IHBpdGNoICogMC41O1xuICAgICAgICBjb25zdCBoYWxmWWF3ID0geWF3ICogMC41O1xuICAgICAgICBjb25zdCBoYWxmUm9sbCA9IHJvbGwgKiAwLjU7XG4gICAgICAgIGNvbnN0IGMxID0gTWF0aC5jb3MoaGFsZlBpdGNoKTtcbiAgICAgICAgY29uc3QgYzIgPSBNYXRoLmNvcyhoYWxmWWF3KTtcbiAgICAgICAgY29uc3QgYzMgPSBNYXRoLmNvcyhoYWxmUm9sbCk7XG4gICAgICAgIGNvbnN0IHMxID0gTWF0aC5zaW4oaGFsZlBpdGNoKTtcbiAgICAgICAgY29uc3QgczIgPSBNYXRoLnNpbihoYWxmWWF3KTtcbiAgICAgICAgY29uc3QgczMgPSBNYXRoLnNpbihoYWxmUm9sbCk7XG4gICAgICAgIHJlc3VsdC54ID0gYzIgKiBzMSAqIGMzICsgczIgKiBjMSAqIHMzO1xuICAgICAgICByZXN1bHQueSA9IHMyICogYzEgKiBjMyAtIGMyICogczEgKiBzMztcbiAgICAgICAgcmVzdWx0LnogPSBjMiAqIGMxICogczMgLSBzMiAqIHMxICogYzM7XG4gICAgICAgIHJlc3VsdC53ID0gYzIgKiBjMSAqIGMzICsgczIgKiBzMSAqIHMzO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLnJvdGF0aW9uWWF3UGl0Y2hSb2xsVG9SZWYgPSByb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGdpdmVuIHF1YXRlcm5pb24gd2l0aCB0aGUgZ2l2ZW4gcm90YXRpb24gbWF0cml4IHZhbHVlc1xuICAgICAqIEBwYXJhbSBtYXRyaXggLSBkZWZpbmVzIHRoZSBzb3VyY2UgbWF0cml4XG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gZnJvbVJvdGF0aW9uTWF0cml4VG9SZWYobWF0cml4LCByZXN1bHQpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1hdHJpeC5fbTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGU6b25lLXZhcmlhYmxlLXBlci1kZWNsYXJhdGlvblxuICAgICAgICBjb25zdCBtMTEgPSBkYXRhWzBdLCBtMTIgPSBkYXRhWzRdLCBtMTMgPSBkYXRhWzhdO1xuICAgICAgICBjb25zdCBtMjEgPSBkYXRhWzFdLCBtMjIgPSBkYXRhWzVdLCBtMjMgPSBkYXRhWzldO1xuICAgICAgICBjb25zdCBtMzEgPSBkYXRhWzJdLCBtMzIgPSBkYXRhWzZdLCBtMzMgPSBkYXRhWzEwXTtcbiAgICAgICAgLy8gdHNsaW50OmVuYWJsZTpvbmUtdmFyaWFibGUtcGVyLWRlY2xhcmF0aW9uXG4gICAgICAgIGNvbnN0IHRyYWNlID0gbTExICsgbTIyICsgbTMzO1xuICAgICAgICBsZXQgcztcbiAgICAgICAgaWYgKHRyYWNlID4gMCkge1xuICAgICAgICAgICAgcyA9IDAuNSAvIE1hdGguc3FydCh0cmFjZSArIDEuMCk7XG4gICAgICAgICAgICByZXN1bHQudyA9IDAuMjUgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnggPSAobTMyIC0gbTIzKSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMTMgLSBtMzEpICogcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gKG0yMSAtIG0xMikgKiBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG0xMSA+IG0yMiAmJiBtMTEgPiBtMzMpIHtcbiAgICAgICAgICAgIHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTExIC0gbTIyIC0gbTMzKTtcbiAgICAgICAgICAgIHJlc3VsdC53ID0gKG0zMiAtIG0yMykgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnggPSAwLjI1ICogcztcbiAgICAgICAgICAgIHJlc3VsdC55ID0gKG0xMiArIG0yMSkgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnogPSAobTEzICsgbTMxKSAvIHM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobTIyID4gbTMzKSB7XG4gICAgICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0yMiAtIG0xMSAtIG0zMyk7XG4gICAgICAgICAgICByZXN1bHQudyA9IChtMTMgLSBtMzEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gKG0xMiArIG0yMSkgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnkgPSAwLjI1ICogcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gKG0yMyArIG0zMikgLyBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMzMgLSBtMTEgLSBtMjIpO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAobTIxIC0gbTEyKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueCA9IChtMTMgKyBtMzEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC55ID0gKG0yMyArIG0zMikgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnogPSAwLjI1ICogcztcbiAgICAgICAgfVxuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmID0gZnJvbVJvdGF0aW9uTWF0cml4VG9SZWY7XG4gICAgLyoqXG4gICAgICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIHF1YXRlcm5pb25zXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGFtb3VudCAtIGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZVxuICAgICAqIEByZXR1cm5zIHRoZSBuZXcgaW50ZXJwb2xhdGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzbGVycChsZWZ0LCByaWdodCwgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFF1YXRlcm5pb24uSWRlbnRpdHkoKTtcbiAgICAgICAgUXVhdGVybmlvbi5zbGVycFRvUmVmKGxlZnQsIHJpZ2h0LCBhbW91bnQsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uc2xlcnAgPSBzbGVycDtcbiAgICAvKipcbiAgICAgKiBJbnRlcnBvbGF0ZXMgYmV0d2VlbiB0d28gcXVhdGVybmlvbnMgYW5kIHN0b3JlcyBpdCBpbnRvIGEgdGFyZ2V0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgZmlyc3QgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgc2Vjb25kIHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gZGVmaW5lcyB0aGUgZ3JhZGllbnQgdG8gdXNlXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xlcnBUb1JlZihsZWZ0LCByaWdodCwgYW1vdW50LCByZXN1bHQpIHtcbiAgICAgICAgbGV0IG51bTI7XG4gICAgICAgIGxldCBudW0zO1xuICAgICAgICBsZXQgbnVtNCA9IGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQueiArIGxlZnQudyAqIHJpZ2h0Lnc7XG4gICAgICAgIGxldCBmbGFnID0gZmFsc2U7XG4gICAgICAgIGlmIChudW00IDwgMCkge1xuICAgICAgICAgICAgZmxhZyA9IHRydWU7XG4gICAgICAgICAgICBudW00ID0gLW51bTQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bTQgPiAwLjk5OTk5OSkge1xuICAgICAgICAgICAgbnVtMyA9IDEgLSBhbW91bnQ7XG4gICAgICAgICAgICBudW0yID0gZmxhZyA/IC1hbW91bnQgOiBhbW91bnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBudW01ID0gTWF0aC5hY29zKG51bTQpO1xuICAgICAgICAgICAgY29uc3QgbnVtNiA9IDEuMCAvIE1hdGguc2luKG51bTUpO1xuICAgICAgICAgICAgbnVtMyA9IE1hdGguc2luKCgxLjAgLSBhbW91bnQpICogbnVtNSkgKiBudW02O1xuICAgICAgICAgICAgbnVtMiA9IGZsYWdcbiAgICAgICAgICAgICAgICA/IC1NYXRoLnNpbihhbW91bnQgKiBudW01KSAqIG51bTZcbiAgICAgICAgICAgICAgICA6IE1hdGguc2luKGFtb3VudCAqIG51bTUpICogbnVtNjtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQueCA9IG51bTMgKiBsZWZ0LnggKyBudW0yICogcmlnaHQueDtcbiAgICAgICAgcmVzdWx0LnkgPSBudW0zICogbGVmdC55ICsgbnVtMiAqIHJpZ2h0Lnk7XG4gICAgICAgIHJlc3VsdC56ID0gbnVtMyAqIGxlZnQueiArIG51bTIgKiByaWdodC56O1xuICAgICAgICByZXN1bHQudyA9IG51bTMgKiBsZWZ0LncgKyBudW0yICogcmlnaHQudztcbiAgICB9XG4gICAgUXVhdGVybmlvbi5zbGVycFRvUmVmID0gc2xlcnBUb1JlZjtcbiAgICAvKipcbiAgICAgKiBNdWx0aXBsaWVzIHR3byBxdWF0ZXJuaW9uc1xuICAgICAqIEBwYXJhbSBzZWxmIC0gZGVmaW5lcyB0aGUgZmlyc3Qgb3BlcmFuZFxuICAgICAqIEBwYXJhbSBxMSAtIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kXG4gICAgICogQHJldHVybnMgYSBuZXcgcXVhdGVybmlvbiBzZXQgYXMgdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBvZiB0aGUgc2VsZiBvbmUgd2l0aCB0aGUgZ2l2ZW4gb25lIFwicTFcIlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG11bHRpcGx5KHNlbGYsIHExKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZSgwLCAwLCAwLCAxLjApO1xuICAgICAgICBtdWx0aXBseVRvUmVmKHNlbGYsIHExLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLm11bHRpcGx5ID0gbXVsdGlwbHk7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZ2l2ZW4gXCJyZXN1bHRcIiBhcyB0aGUgdGhlIG11bHRpcGxpY2F0aW9uIHJlc3VsdCBvZiB0aGUgc2VsZiBvbmUgd2l0aCB0aGUgZ2l2ZW4gb25lIFwicTFcIlxuICAgICAqIEBwYXJhbSBzZWxmIC0gZGVmaW5lcyB0aGUgZmlyc3Qgb3BlcmFuZFxuICAgICAqIEBwYXJhbSBxMSAtIGRlZmluZXMgdGhlIHNlY29uZCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG11bHRpcGx5VG9SZWYoc2VsZiwgcTEsIHJlc3VsdCkge1xuICAgICAgICByZXN1bHQueCA9IHNlbGYueCAqIHExLncgKyBzZWxmLnkgKiBxMS56IC0gc2VsZi56ICogcTEueSArIHNlbGYudyAqIHExLng7XG4gICAgICAgIHJlc3VsdC55ID0gLXNlbGYueCAqIHExLnogKyBzZWxmLnkgKiBxMS53ICsgc2VsZi56ICogcTEueCArIHNlbGYudyAqIHExLnk7XG4gICAgICAgIHJlc3VsdC56ID0gc2VsZi54ICogcTEueSAtIHNlbGYueSAqIHExLnggKyBzZWxmLnogKiBxMS53ICsgc2VsZi53ICogcTEuejtcbiAgICAgICAgcmVzdWx0LncgPSAtc2VsZi54ICogcTEueCAtIHNlbGYueSAqIHExLnkgLSBzZWxmLnogKiBxMS56ICsgc2VsZi53ICogcTEudztcbiAgICB9XG4gICAgUXVhdGVybmlvbi5tdWx0aXBseVRvUmVmID0gbXVsdGlwbHlUb1JlZjtcbiAgICBmdW5jdGlvbiBhbmdsZUF4aXMoZGVncmVzcywgYXhpcykge1xuICAgICAgICBpZiAoVmVjdG9yM18xLlZlY3RvcjMubGVuZ3RoU3F1YXJlZChheGlzKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFF1YXRlcm5pb24uSWRlbnRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBJZGVudGl0eSgpO1xuICAgICAgICBsZXQgcmFkaWFucyA9IGRlZ3Jlc3MgKiB0eXBlc18xLkRFRzJSQUQ7XG4gICAgICAgIHJhZGlhbnMgKj0gMC41O1xuICAgICAgICBjb25zdCBhMiA9IFZlY3RvcjNfMS5WZWN0b3IzLm5vcm1hbGl6ZShheGlzKTtcbiAgICAgICAgVmVjdG9yM18xLlZlY3RvcjMuc2NhbGVUb1JlZihhMiwgTWF0aC5zaW4ocmFkaWFucyksIGEyKTtcbiAgICAgICAgcmVzdWx0LnggPSBhMi54O1xuICAgICAgICByZXN1bHQueSA9IGEyLnk7XG4gICAgICAgIHJlc3VsdC56ID0gYTIuejtcbiAgICAgICAgcmVzdWx0LncgPSBNYXRoLmNvcyhyYWRpYW5zKTtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShyZXN1bHQpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmFuZ2xlQXhpcyA9IGFuZ2xlQXhpcztcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgemVybyBmaWxsZWQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFplcm8oKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUoMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5aZXJvID0gWmVybztcbn0pKFF1YXRlcm5pb24gPSBleHBvcnRzLlF1YXRlcm5pb24gfHwgKGV4cG9ydHMuUXVhdGVybmlvbiA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1RdWF0ZXJuaW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vUXVhdGVybmlvblwiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vVmVjdG9yM1wiKSwgZXhwb3J0cyk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHlwZXNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL2luZGV4XCIpLCBleHBvcnRzKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5tb2R1bGUuZXhwb3J0cyA9IGFzUHJvbWlzZTtcclxuXHJcbi8qKlxyXG4gKiBDYWxsYmFjayBhcyB1c2VkIGJ5IHtAbGluayB1dGlsLmFzUHJvbWlzZX0uXHJcbiAqIEB0eXBlZGVmIGFzUHJvbWlzZUNhbGxiYWNrXHJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55XHJcbiAqIEBwYXJhbSB7Li4uKn0gcGFyYW1zIEFkZGl0aW9uYWwgYXJndW1lbnRzXHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBwcm9taXNlIGZyb20gYSBub2RlLXN0eWxlIGNhbGxiYWNrIGZ1bmN0aW9uLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAcGFyYW0ge2FzUHJvbWlzZUNhbGxiYWNrfSBmbiBGdW5jdGlvbiB0byBjYWxsXHJcbiAqIEBwYXJhbSB7Kn0gY3R4IEZ1bmN0aW9uIGNvbnRleHRcclxuICogQHBhcmFtIHsuLi4qfSBwYXJhbXMgRnVuY3Rpb24gYXJndW1lbnRzXHJcbiAqIEByZXR1cm5zIHtQcm9taXNlPCo+fSBQcm9taXNpZmllZCBmdW5jdGlvblxyXG4gKi9cclxuZnVuY3Rpb24gYXNQcm9taXNlKGZuLCBjdHgvKiwgdmFyYXJncyAqLykge1xyXG4gICAgdmFyIHBhcmFtcyAgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpLFxyXG4gICAgICAgIG9mZnNldCAgPSAwLFxyXG4gICAgICAgIGluZGV4ICAgPSAyLFxyXG4gICAgICAgIHBlbmRpbmcgPSB0cnVlO1xyXG4gICAgd2hpbGUgKGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aClcclxuICAgICAgICBwYXJhbXNbb2Zmc2V0KytdID0gYXJndW1lbnRzW2luZGV4KytdO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHBhcmFtc1tvZmZzZXRdID0gZnVuY3Rpb24gY2FsbGJhY2soZXJyLyosIHZhcmFyZ3MgKi8pIHtcclxuICAgICAgICAgICAgaWYgKHBlbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgcGFyYW1zLmxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW29mZnNldCsrXSA9IGFyZ3VtZW50c1tvZmZzZXRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUuYXBwbHkobnVsbCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZm4uYXBwbHkoY3R4IHx8IG51bGwsIHBhcmFtcyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5cclxuLyoqXHJcbiAqIEEgbWluaW1hbCBiYXNlNjQgaW1wbGVtZW50YXRpb24gZm9yIG51bWJlciBhcnJheXMuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcbnZhciBiYXNlNjQgPSBleHBvcnRzO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGJ5dGUgbGVuZ3RoIG9mIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIEJhc2U2NCBlbmNvZGVkIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBCeXRlIGxlbmd0aFxyXG4gKi9cclxuYmFzZTY0Lmxlbmd0aCA9IGZ1bmN0aW9uIGxlbmd0aChzdHJpbmcpIHtcclxuICAgIHZhciBwID0gc3RyaW5nLmxlbmd0aDtcclxuICAgIGlmICghcClcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIHZhciBuID0gMDtcclxuICAgIHdoaWxlICgtLXAgJSA0ID4gMSAmJiBzdHJpbmcuY2hhckF0KHApID09PSBcIj1cIilcclxuICAgICAgICArK247XHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKHN0cmluZy5sZW5ndGggKiAzKSAvIDQgLSBuO1xyXG59O1xyXG5cclxuLy8gQmFzZTY0IGVuY29kaW5nIHRhYmxlXHJcbnZhciBiNjQgPSBuZXcgQXJyYXkoNjQpO1xyXG5cclxuLy8gQmFzZTY0IGRlY29kaW5nIHRhYmxlXHJcbnZhciBzNjQgPSBuZXcgQXJyYXkoMTIzKTtcclxuXHJcbi8vIDY1Li45MCwgOTcuLjEyMiwgNDguLjU3LCA0MywgNDdcclxuZm9yICh2YXIgaSA9IDA7IGkgPCA2NDspXHJcbiAgICBzNjRbYjY0W2ldID0gaSA8IDI2ID8gaSArIDY1IDogaSA8IDUyID8gaSArIDcxIDogaSA8IDYyID8gaSAtIDQgOiBpIC0gNTkgfCA0M10gPSBpKys7XHJcblxyXG4vKipcclxuICogRW5jb2RlcyBhIGJ1ZmZlciB0byBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZy5cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgU291cmNlIHN0YXJ0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgU291cmNlIGVuZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgZW5jb2RlZCBzdHJpbmdcclxuICovXHJcbmJhc2U2NC5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoYnVmZmVyLCBzdGFydCwgZW5kKSB7XHJcbiAgICB2YXIgcGFydHMgPSBudWxsLFxyXG4gICAgICAgIGNodW5rID0gW107XHJcbiAgICB2YXIgaSA9IDAsIC8vIG91dHB1dCBpbmRleFxyXG4gICAgICAgIGogPSAwLCAvLyBnb3RvIGluZGV4XHJcbiAgICAgICAgdDsgICAgIC8vIHRlbXBvcmFyeVxyXG4gICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7XHJcbiAgICAgICAgdmFyIGIgPSBidWZmZXJbc3RhcnQrK107XHJcbiAgICAgICAgc3dpdGNoIChqKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIGNodW5rW2krK10gPSBiNjRbYiA+PiAyXTtcclxuICAgICAgICAgICAgICAgIHQgPSAoYiAmIDMpIDw8IDQ7XHJcbiAgICAgICAgICAgICAgICBqID0gMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W3QgfCBiID4+IDRdO1xyXG4gICAgICAgICAgICAgICAgdCA9IChiICYgMTUpIDw8IDI7XHJcbiAgICAgICAgICAgICAgICBqID0gMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W3QgfCBiID4+IDZdO1xyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFtiICYgNjNdO1xyXG4gICAgICAgICAgICAgICAgaiA9IDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGkgPiA4MTkxKSB7XHJcbiAgICAgICAgICAgIChwYXJ0cyB8fCAocGFydHMgPSBbXSkpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rKSk7XHJcbiAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChqKSB7XHJcbiAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0XTtcclxuICAgICAgICBjaHVua1tpKytdID0gNjE7XHJcbiAgICAgICAgaWYgKGogPT09IDEpXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSA2MTtcclxuICAgIH1cclxuICAgIGlmIChwYXJ0cykge1xyXG4gICAgICAgIGlmIChpKVxyXG4gICAgICAgICAgICBwYXJ0cy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuay5zbGljZSgwLCBpKSkpO1xyXG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuay5zbGljZSgwLCBpKSk7XHJcbn07XHJcblxyXG52YXIgaW52YWxpZEVuY29kaW5nID0gXCJpbnZhbGlkIGVuY29kaW5nXCI7XHJcblxyXG4vKipcclxuICogRGVjb2RlcyBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB0byBhIGJ1ZmZlci5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIERlc3RpbmF0aW9uIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERlc3RpbmF0aW9uIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlblxyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZW5jb2RpbmcgaXMgaW52YWxpZFxyXG4gKi9cclxuYmFzZTY0LmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShzdHJpbmcsIGJ1ZmZlciwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgc3RhcnQgPSBvZmZzZXQ7XHJcbiAgICB2YXIgaiA9IDAsIC8vIGdvdG8gaW5kZXhcclxuICAgICAgICB0OyAgICAgLy8gdGVtcG9yYXJ5XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7KSB7XHJcbiAgICAgICAgdmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGlmIChjID09PSA2MSAmJiBqID4gMSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgaWYgKChjID0gczY0W2NdKSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihpbnZhbGlkRW5jb2RpbmcpO1xyXG4gICAgICAgIHN3aXRjaCAoaikge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICB0ID0gYztcclxuICAgICAgICAgICAgICAgIGogPSAxO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSB0IDw8IDIgfCAoYyAmIDQ4KSA+PiA0O1xyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gKHQgJiAxNSkgPDwgNCB8IChjICYgNjApID4+IDI7XHJcbiAgICAgICAgICAgICAgICB0ID0gYztcclxuICAgICAgICAgICAgICAgIGogPSAzO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSAodCAmIDMpIDw8IDYgfCBjO1xyXG4gICAgICAgICAgICAgICAgaiA9IDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaiA9PT0gMSlcclxuICAgICAgICB0aHJvdyBFcnJvcihpbnZhbGlkRW5jb2RpbmcpO1xyXG4gICAgcmV0dXJuIG9mZnNldCAtIHN0YXJ0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGFwcGVhcnMgdG8gYmUgYmFzZTY0IGVuY29kZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nIHRvIHRlc3RcclxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBwcm9iYWJseSBiYXNlNjQgZW5jb2RlZCwgb3RoZXJ3aXNlIGZhbHNlXHJcbiAqL1xyXG5iYXNlNjQudGVzdCA9IGZ1bmN0aW9uIHRlc3Qoc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gL14oPzpbQS1aYS16MC05Ky9dezR9KSooPzpbQS1aYS16MC05Ky9dezJ9PT18W0EtWmEtejAtOSsvXXszfT0pPyQvLnRlc3Qoc3RyaW5nKTtcclxufTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xyXG5cclxuLyoqXHJcbiAqIENvbnN0cnVjdHMgYSBuZXcgZXZlbnQgZW1pdHRlciBpbnN0YW5jZS5cclxuICogQGNsYXNzZGVzYyBBIG1pbmltYWwgZXZlbnQgZW1pdHRlci5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcmVkIGxpc3RlbmVycy5cclxuICAgICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZywqPn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xyXG59XHJcblxyXG4vKipcclxuICogUmVnaXN0ZXJzIGFuIGV2ZW50IGxpc3RlbmVyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZ0IEV2ZW50IG5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gTGlzdGVuZXJcclxuICogQHBhcmFtIHsqfSBbY3R4XSBMaXN0ZW5lciBjb250ZXh0XHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZ0LCBmbiwgY3R4KSB7XHJcbiAgICAodGhpcy5fbGlzdGVuZXJzW2V2dF0gfHwgKHRoaXMuX2xpc3RlbmVyc1tldnRdID0gW10pKS5wdXNoKHtcclxuICAgICAgICBmbiAgOiBmbixcclxuICAgICAgICBjdHggOiBjdHggfHwgdGhpc1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmVzIGFuIGV2ZW50IGxpc3RlbmVyIG9yIGFueSBtYXRjaGluZyBsaXN0ZW5lcnMgaWYgYXJndW1lbnRzIGFyZSBvbWl0dGVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2V2dF0gRXZlbnQgbmFtZS4gUmVtb3ZlcyBhbGwgbGlzdGVuZXJzIGlmIG9taXR0ZWQuXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtmbl0gTGlzdGVuZXIgdG8gcmVtb3ZlLiBSZW1vdmVzIGFsbCBsaXN0ZW5lcnMgb2YgYGV2dGAgaWYgb21pdHRlZC5cclxuICogQHJldHVybnMge3V0aWwuRXZlbnRFbWl0dGVyfSBgdGhpc2BcclxuICovXHJcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gb2ZmKGV2dCwgZm4pIHtcclxuICAgIGlmIChldnQgPT09IHVuZGVmaW5lZClcclxuICAgICAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChmbiA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5lcnNbZXZ0XSA9IFtdO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW2V2dF07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDspXHJcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldLmZuID09PSBmbilcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICsraTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbWl0cyBhbiBldmVudCBieSBjYWxsaW5nIGl0cyBsaXN0ZW5lcnMgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cy5cclxuICogQHBhcmFtIHtzdHJpbmd9IGV2dCBFdmVudCBuYW1lXHJcbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHNcclxuICogQHJldHVybnMge3V0aWwuRXZlbnRFbWl0dGVyfSBgdGhpc2BcclxuICovXHJcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZ0KSB7XHJcbiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW2V2dF07XHJcbiAgICBpZiAobGlzdGVuZXJzKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSxcclxuICAgICAgICAgICAgaSA9IDE7XHJcbiAgICAgICAgZm9yICg7IGkgPCBhcmd1bWVudHMubGVuZ3RoOylcclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDspXHJcbiAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaSsrXS5jdHgsIGFyZ3MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KGZhY3RvcnkpO1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIC8gd3JpdGVzIGZsb2F0cyAvIGRvdWJsZXMgZnJvbSAvIHRvIGJ1ZmZlcnMuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXRcclxuICogQG5hbWVzcGFjZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBXcml0ZXMgYSAzMiBiaXQgZmxvYXQgdG8gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRmxvYXRMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBUYXJnZXQgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgVGFyZ2V0IGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgMzIgYml0IGZsb2F0IHRvIGEgYnVmZmVyIHVzaW5nIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC53cml0ZUZsb2F0QkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgMzIgYml0IGZsb2F0IGZyb20gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LnJlYWRGbG9hdExFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBTb3VyY2UgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgU291cmNlIGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBhIDMyIGJpdCBmbG9hdCBmcm9tIGEgYnVmZmVyIHVzaW5nIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRmxvYXRCRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgNjQgYml0IGRvdWJsZSB0byBhIGJ1ZmZlciB1c2luZyBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQud3JpdGVEb3VibGVMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBUYXJnZXQgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgVGFyZ2V0IGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgNjQgYml0IGRvdWJsZSB0byBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQud3JpdGVEb3VibGVCRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZiBUYXJnZXQgYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgVGFyZ2V0IGJ1ZmZlciBvZmZzZXRcclxuICogQHJldHVybnMge3VuZGVmaW5lZH1cclxuICovXHJcblxyXG4vKipcclxuICogUmVhZHMgYSA2NCBiaXQgZG91YmxlIGZyb20gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LnJlYWREb3VibGVMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vKipcclxuICogUmVhZHMgYSA2NCBiaXQgZG91YmxlIGZyb20gYSBidWZmZXIgdXNpbmcgYmlnIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LnJlYWREb3VibGVCRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vLyBGYWN0b3J5IGZ1bmN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBub2RlLWJhc2VkIHRlc3RpbmcgaW4gbW9kaWZpZWQgZ2xvYmFsIGVudmlyb25tZW50c1xyXG5mdW5jdGlvbiBmYWN0b3J5KGV4cG9ydHMpIHtcclxuXHJcbiAgICAvLyBmbG9hdDogdHlwZWQgYXJyYXlcclxuICAgIGlmICh0eXBlb2YgRmxvYXQzMkFycmF5ICE9PSBcInVuZGVmaW5lZFwiKSAoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBmMzIgPSBuZXcgRmxvYXQzMkFycmF5KFsgLTAgXSksXHJcbiAgICAgICAgICAgIGY4YiA9IG5ldyBVaW50OEFycmF5KGYzMi5idWZmZXIpLFxyXG4gICAgICAgICAgICBsZSAgPSBmOGJbM10gPT09IDEyODtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9mMzJfY3B5KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjMyWzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbMF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4YlsxXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbM107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZUZsb2F0X2YzMl9yZXYodmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmMzJbMF0gPSB2YWw7XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgICAgXSA9IGY4YlszXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDFdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMl0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAzXSA9IGY4YlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZUZsb2F0TEUgPSBsZSA/IHdyaXRlRmxvYXRfZjMyX2NweSA6IHdyaXRlRmxvYXRfZjMyX3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdEJFID0gbGUgPyB3cml0ZUZsb2F0X2YzMl9yZXYgOiB3cml0ZUZsb2F0X2YzMl9jcHk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRGbG9hdF9mMzJfY3B5KGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgICAgXTtcclxuICAgICAgICAgICAgZjhiWzFdID0gYnVmW3BvcyArIDFdO1xyXG4gICAgICAgICAgICBmOGJbMl0gPSBidWZbcG9zICsgMl07XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgKyAzXTtcclxuICAgICAgICAgICAgcmV0dXJuIGYzMlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRGbG9hdF9mMzJfcmV2KGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgICAgXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDFdO1xyXG4gICAgICAgICAgICBmOGJbMV0gPSBidWZbcG9zICsgMl07XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgKyAzXTtcclxuICAgICAgICAgICAgcmV0dXJuIGYzMlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRmxvYXRMRSA9IGxlID8gcmVhZEZsb2F0X2YzMl9jcHkgOiByZWFkRmxvYXRfZjMyX3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0QkUgPSBsZSA/IHJlYWRGbG9hdF9mMzJfcmV2IDogcmVhZEZsb2F0X2YzMl9jcHk7XHJcblxyXG4gICAgLy8gZmxvYXQ6IGllZWU3NTRcclxuICAgIH0pKCk7IGVsc2UgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZUZsb2F0X2llZWU3NTQod3JpdGVVaW50LCB2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIHZhciBzaWduID0gdmFsIDwgMCA/IDEgOiAwO1xyXG4gICAgICAgICAgICBpZiAoc2lnbilcclxuICAgICAgICAgICAgICAgIHZhbCA9IC12YWw7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPT09IDApXHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMSAvIHZhbCA+IDAgPyAvKiBwb3NpdGl2ZSAqLyAwIDogLyogbmVnYXRpdmUgMCAqLyAyMTQ3NDgzNjQ4LCBidWYsIHBvcyk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzTmFOKHZhbCkpXHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMjE0MzI4OTM0NCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWwgPiAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KSAvLyArLUluZmluaXR5XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCAyMTM5MDk1MDQwKSA+Pj4gMCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWwgPCAxLjE3NTQ5NDM1MDgyMjI4NzVlLTM4KSAvLyBkZW5vcm1hbFxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgTWF0aC5yb3VuZCh2YWwgLyAxLjQwMTI5ODQ2NDMyNDgxN2UtNDUpKSA+Pj4gMCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBleHBvbmVudCA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsKSAvIE1hdGguTE4yKSxcclxuICAgICAgICAgICAgICAgICAgICBtYW50aXNzYSA9IE1hdGgucm91bmQodmFsICogTWF0aC5wb3coMiwgLWV4cG9uZW50KSAqIDgzODg2MDgpICYgODM4ODYwNztcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IGV4cG9uZW50ICsgMTI3IDw8IDIzIHwgbWFudGlzc2EpID4+PiAwLCBidWYsIHBvcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdExFID0gd3JpdGVGbG9hdF9pZWVlNzU0LmJpbmQobnVsbCwgd3JpdGVVaW50TEUpO1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdEJFID0gd3JpdGVGbG9hdF9pZWVlNzU0LmJpbmQobnVsbCwgd3JpdGVVaW50QkUpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfaWVlZTc1NChyZWFkVWludCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgdmFyIHVpbnQgPSByZWFkVWludChidWYsIHBvcyksXHJcbiAgICAgICAgICAgICAgICBzaWduID0gKHVpbnQgPj4gMzEpICogMiArIDEsXHJcbiAgICAgICAgICAgICAgICBleHBvbmVudCA9IHVpbnQgPj4+IDIzICYgMjU1LFxyXG4gICAgICAgICAgICAgICAgbWFudGlzc2EgPSB1aW50ICYgODM4ODYwNztcclxuICAgICAgICAgICAgcmV0dXJuIGV4cG9uZW50ID09PSAyNTVcclxuICAgICAgICAgICAgICAgID8gbWFudGlzc2FcclxuICAgICAgICAgICAgICAgID8gTmFOXHJcbiAgICAgICAgICAgICAgICA6IHNpZ24gKiBJbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgOiBleHBvbmVudCA9PT0gMCAvLyBkZW5vcm1hbFxyXG4gICAgICAgICAgICAgICAgPyBzaWduICogMS40MDEyOTg0NjQzMjQ4MTdlLTQ1ICogbWFudGlzc2FcclxuICAgICAgICAgICAgICAgIDogc2lnbiAqIE1hdGgucG93KDIsIGV4cG9uZW50IC0gMTUwKSAqIChtYW50aXNzYSArIDgzODg2MDgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRmxvYXRMRSA9IHJlYWRGbG9hdF9pZWVlNzU0LmJpbmQobnVsbCwgcmVhZFVpbnRMRSk7XHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRmxvYXRCRSA9IHJlYWRGbG9hdF9pZWVlNzU0LmJpbmQobnVsbCwgcmVhZFVpbnRCRSk7XHJcblxyXG4gICAgfSkoKTtcclxuXHJcbiAgICAvLyBkb3VibGU6IHR5cGVkIGFycmF5XHJcbiAgICBpZiAodHlwZW9mIEZsb2F0NjRBcnJheSAhPT0gXCJ1bmRlZmluZWRcIikgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZjY0ID0gbmV3IEZsb2F0NjRBcnJheShbLTBdKSxcclxuICAgICAgICAgICAgZjhiID0gbmV3IFVpbnQ4QXJyYXkoZjY0LmJ1ZmZlciksXHJcbiAgICAgICAgICAgIGxlICA9IGY4Yls3XSA9PT0gMTI4O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZV9mNjRfY3B5KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjY0WzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbMF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4YlsxXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbM107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA0XSA9IGY4Yls0XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDVdID0gZjhiWzVdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNl0gPSBmOGJbNl07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA3XSA9IGY4Yls3XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRG91YmxlX2Y2NF9yZXYodmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmNjRbMF0gPSB2YWw7XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgICAgXSA9IGY4Yls3XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDFdID0gZjhiWzZdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMl0gPSBmOGJbNV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAzXSA9IGY4Yls0XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDRdID0gZjhiWzNdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNV0gPSBmOGJbMl07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA2XSA9IGY4YlsxXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDddID0gZjhiWzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLndyaXRlRG91YmxlTEUgPSBsZSA/IHdyaXRlRG91YmxlX2Y2NF9jcHkgOiB3cml0ZURvdWJsZV9mNjRfcmV2O1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUJFID0gbGUgPyB3cml0ZURvdWJsZV9mNjRfcmV2IDogd3JpdGVEb3VibGVfZjY0X2NweTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZERvdWJsZV9mNjRfY3B5KGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgICAgXTtcclxuICAgICAgICAgICAgZjhiWzFdID0gYnVmW3BvcyArIDFdO1xyXG4gICAgICAgICAgICBmOGJbMl0gPSBidWZbcG9zICsgMl07XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgKyAzXTtcclxuICAgICAgICAgICAgZjhiWzRdID0gYnVmW3BvcyArIDRdO1xyXG4gICAgICAgICAgICBmOGJbNV0gPSBidWZbcG9zICsgNV07XHJcbiAgICAgICAgICAgIGY4Yls2XSA9IGJ1Zltwb3MgKyA2XTtcclxuICAgICAgICAgICAgZjhiWzddID0gYnVmW3BvcyArIDddO1xyXG4gICAgICAgICAgICByZXR1cm4gZjY0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZERvdWJsZV9mNjRfcmV2KGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY4Yls3XSA9IGJ1Zltwb3MgICAgXTtcclxuICAgICAgICAgICAgZjhiWzZdID0gYnVmW3BvcyArIDFdO1xyXG4gICAgICAgICAgICBmOGJbNV0gPSBidWZbcG9zICsgMl07XHJcbiAgICAgICAgICAgIGY4Yls0XSA9IGJ1Zltwb3MgKyAzXTtcclxuICAgICAgICAgICAgZjhiWzNdID0gYnVmW3BvcyArIDRdO1xyXG4gICAgICAgICAgICBmOGJbMl0gPSBidWZbcG9zICsgNV07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyA2XTtcclxuICAgICAgICAgICAgZjhiWzBdID0gYnVmW3BvcyArIDddO1xyXG4gICAgICAgICAgICByZXR1cm4gZjY0WzBdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLnJlYWREb3VibGVMRSA9IGxlID8gcmVhZERvdWJsZV9mNjRfY3B5IDogcmVhZERvdWJsZV9mNjRfcmV2O1xyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlQkUgPSBsZSA/IHJlYWREb3VibGVfZjY0X3JldiA6IHJlYWREb3VibGVfZjY0X2NweTtcclxuXHJcbiAgICAvLyBkb3VibGU6IGllZWU3NTRcclxuICAgIH0pKCk7IGVsc2UgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZV9pZWVlNzU0KHdyaXRlVWludCwgb2ZmMCwgb2ZmMSwgdmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IHZhbCA8IDAgPyAxIDogMDtcclxuICAgICAgICAgICAgaWYgKHNpZ24pXHJcbiAgICAgICAgICAgICAgICB2YWwgPSAtdmFsO1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgxIC8gdmFsID4gMCA/IC8qIHBvc2l0aXZlICovIDAgOiAvKiBuZWdhdGl2ZSAwICovIDIxNDc0ODM2NDgsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOYU4odmFsKSkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMjE0Njk1OTM2MCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwgPiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkgeyAvLyArLUluZmluaXR5XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IDIxNDY0MzUwNzIpID4+PiAwLCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hbnRpc3NhO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbCA8IDIuMjI1MDczODU4NTA3MjAxNGUtMzA4KSB7IC8vIGRlbm9ybWFsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSB2YWwgLyA1ZS0zMjQ7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVVaW50KG1hbnRpc3NhID4+PiAwLCBidWYsIHBvcyArIG9mZjApO1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IG1hbnRpc3NhIC8gNDI5NDk2NzI5NikgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBleHBvbmVudCA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsKSAvIE1hdGguTE4yKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb25lbnQgPT09IDEwMjQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gMTAyMztcclxuICAgICAgICAgICAgICAgICAgICBtYW50aXNzYSA9IHZhbCAqIE1hdGgucG93KDIsIC1leHBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVVaW50KG1hbnRpc3NhICogNDUwMzU5OTYyNzM3MDQ5NiA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBleHBvbmVudCArIDEwMjMgPDwgMjAgfCBtYW50aXNzYSAqIDEwNDg1NzYgJiAxMDQ4NTc1KSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUxFID0gd3JpdGVEb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludExFLCAwLCA0KTtcclxuICAgICAgICBleHBvcnRzLndyaXRlRG91YmxlQkUgPSB3cml0ZURvdWJsZV9pZWVlNzU0LmJpbmQobnVsbCwgd3JpdGVVaW50QkUsIDQsIDApO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRG91YmxlX2llZWU3NTQocmVhZFVpbnQsIG9mZjAsIG9mZjEsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIHZhciBsbyA9IHJlYWRVaW50KGJ1ZiwgcG9zICsgb2ZmMCksXHJcbiAgICAgICAgICAgICAgICBoaSA9IHJlYWRVaW50KGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgIHZhciBzaWduID0gKGhpID4+IDMxKSAqIDIgKyAxLFxyXG4gICAgICAgICAgICAgICAgZXhwb25lbnQgPSBoaSA+Pj4gMjAgJiAyMDQ3LFxyXG4gICAgICAgICAgICAgICAgbWFudGlzc2EgPSA0Mjk0OTY3Mjk2ICogKGhpICYgMTA0ODU3NSkgKyBsbztcclxuICAgICAgICAgICAgcmV0dXJuIGV4cG9uZW50ID09PSAyMDQ3XHJcbiAgICAgICAgICAgICAgICA/IG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA/IE5hTlxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogSW5maW5pdHlcclxuICAgICAgICAgICAgICAgIDogZXhwb25lbnQgPT09IDAgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgID8gc2lnbiAqIDVlLTMyNCAqIG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA6IHNpZ24gKiBNYXRoLnBvdygyLCBleHBvbmVudCAtIDEwNzUpICogKG1hbnRpc3NhICsgNDUwMzU5OTYyNzM3MDQ5Nik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBleHBvcnRzLnJlYWREb3VibGVMRSA9IHJlYWREb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50TEUsIDAsIDQpO1xyXG4gICAgICAgIGV4cG9ydHMucmVhZERvdWJsZUJFID0gcmVhZERvdWJsZV9pZWVlNzU0LmJpbmQobnVsbCwgcmVhZFVpbnRCRSwgNCwgMCk7XHJcblxyXG4gICAgfSkoKTtcclxuXHJcbiAgICByZXR1cm4gZXhwb3J0cztcclxufVxyXG5cclxuLy8gdWludCBoZWxwZXJzXHJcblxyXG5mdW5jdGlvbiB3cml0ZVVpbnRMRSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICBidWZbcG9zICAgIF0gPSAgdmFsICAgICAgICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAxXSA9ICB2YWwgPj4+IDggICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDJdID0gIHZhbCA+Pj4gMTYgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgM10gPSAgdmFsID4+PiAyNDtcclxufVxyXG5cclxuZnVuY3Rpb24gd3JpdGVVaW50QkUodmFsLCBidWYsIHBvcykge1xyXG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCA+Pj4gMjQ7XHJcbiAgICBidWZbcG9zICsgMV0gPSAgdmFsID4+PiAxNiAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAyXSA9ICB2YWwgPj4+IDggICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCAgICAgICAgJiAyNTU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlYWRVaW50TEUoYnVmLCBwb3MpIHtcclxuICAgIHJldHVybiAoYnVmW3BvcyAgICBdXHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAxXSA8PCA4XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAyXSA8PCAxNlxyXG4gICAgICAgICAgfCBidWZbcG9zICsgM10gPDwgMjQpID4+PiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWFkVWludEJFKGJ1ZiwgcG9zKSB7XHJcbiAgICByZXR1cm4gKGJ1Zltwb3MgICAgXSA8PCAyNFxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMV0gPDwgMTZcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDJdIDw8IDhcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDNdKSA+Pj4gMDtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBpbnF1aXJlO1xyXG5cclxuLyoqXHJcbiAqIFJlcXVpcmVzIGEgbW9kdWxlIG9ubHkgaWYgYXZhaWxhYmxlLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlTmFtZSBNb2R1bGUgdG8gcmVxdWlyZVxyXG4gKiBAcmV0dXJucyB7P09iamVjdH0gUmVxdWlyZWQgbW9kdWxlIGlmIGF2YWlsYWJsZSBhbmQgbm90IGVtcHR5LCBvdGhlcndpc2UgYG51bGxgXHJcbiAqL1xyXG5mdW5jdGlvbiBpbnF1aXJlKG1vZHVsZU5hbWUpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIG1vZCA9IGV2YWwoXCJxdWlyZVwiLnJlcGxhY2UoL14vLFwicmVcIikpKG1vZHVsZU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV2YWxcclxuICAgICAgICBpZiAobW9kICYmIChtb2QubGVuZ3RoIHx8IE9iamVjdC5rZXlzKG1vZCkubGVuZ3RoKSlcclxuICAgICAgICAgICAgcmV0dXJuIG1vZDtcclxuICAgIH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5cclxuLyoqXHJcbiAqIEEgbWluaW1hbCBVVEY4IGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgYXJyYXlzLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG52YXIgdXRmOCA9IGV4cG9ydHM7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgVVRGOCBieXRlIGxlbmd0aCBvZiBhIHN0cmluZy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTdHJpbmdcclxuICogQHJldHVybnMge251bWJlcn0gQnl0ZSBsZW5ndGhcclxuICovXHJcbnV0ZjgubGVuZ3RoID0gZnVuY3Rpb24gdXRmOF9sZW5ndGgoc3RyaW5nKSB7XHJcbiAgICB2YXIgbGVuID0gMCxcclxuICAgICAgICBjID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgYyA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgIGlmIChjIDwgMTI4KVxyXG4gICAgICAgICAgICBsZW4gKz0gMTtcclxuICAgICAgICBlbHNlIGlmIChjIDwgMjA0OClcclxuICAgICAgICAgICAgbGVuICs9IDI7XHJcbiAgICAgICAgZWxzZSBpZiAoKGMgJiAweEZDMDApID09PSAweEQ4MDAgJiYgKHN0cmluZy5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4RkMwMCkgPT09IDB4REMwMCkge1xyXG4gICAgICAgICAgICArK2k7XHJcbiAgICAgICAgICAgIGxlbiArPSA0O1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBsZW4gKz0gMztcclxuICAgIH1cclxuICAgIHJldHVybiBsZW47XHJcbn07XHJcblxyXG4vKipcclxuICogUmVhZHMgVVRGOCBieXRlcyBhcyBhIHN0cmluZy5cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgU291cmNlIHN0YXJ0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgU291cmNlIGVuZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmcgcmVhZFxyXG4gKi9cclxudXRmOC5yZWFkID0gZnVuY3Rpb24gdXRmOF9yZWFkKGJ1ZmZlciwgc3RhcnQsIGVuZCkge1xyXG4gICAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0O1xyXG4gICAgaWYgKGxlbiA8IDEpXHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB2YXIgcGFydHMgPSBudWxsLFxyXG4gICAgICAgIGNodW5rID0gW10sXHJcbiAgICAgICAgaSA9IDAsIC8vIGNoYXIgb2Zmc2V0XHJcbiAgICAgICAgdDsgICAgIC8vIHRlbXBvcmFyeVxyXG4gICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7XHJcbiAgICAgICAgdCA9IGJ1ZmZlcltzdGFydCsrXTtcclxuICAgICAgICBpZiAodCA8IDEyOClcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IHQ7XHJcbiAgICAgICAgZWxzZSBpZiAodCA+IDE5MSAmJiB0IDwgMjI0KVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gKHQgJiAzMSkgPDwgNiB8IGJ1ZmZlcltzdGFydCsrXSAmIDYzO1xyXG4gICAgICAgIGVsc2UgaWYgKHQgPiAyMzkgJiYgdCA8IDM2NSkge1xyXG4gICAgICAgICAgICB0ID0gKCh0ICYgNykgPDwgMTggfCAoYnVmZmVyW3N0YXJ0KytdICYgNjMpIDw8IDEyIHwgKGJ1ZmZlcltzdGFydCsrXSAmIDYzKSA8PCA2IHwgYnVmZmVyW3N0YXJ0KytdICYgNjMpIC0gMHgxMDAwMDtcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IDB4RDgwMCArICh0ID4+IDEwKTtcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9IDB4REMwMCArICh0ICYgMTAyMyk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAodCAmIDE1KSA8PCAxMiB8IChidWZmZXJbc3RhcnQrK10gJiA2MykgPDwgNiB8IGJ1ZmZlcltzdGFydCsrXSAmIDYzO1xyXG4gICAgICAgIGlmIChpID4gODE5MSkge1xyXG4gICAgICAgICAgICAocGFydHMgfHwgKHBhcnRzID0gW10pKS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuaykpO1xyXG4gICAgICAgICAgICBpID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocGFydHMpIHtcclxuICAgICAgICBpZiAoaSlcclxuICAgICAgICAgICAgcGFydHMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpKTtcclxuICAgICAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIHN0cmluZyBhcyBVVEY4IGJ5dGVzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFNvdXJjZSBzdHJpbmdcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgRGVzdGluYXRpb24gYnVmZmVyXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgRGVzdGluYXRpb24gb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEJ5dGVzIHdyaXR0ZW5cclxuICovXHJcbnV0Zjgud3JpdGUgPSBmdW5jdGlvbiB1dGY4X3dyaXRlKHN0cmluZywgYnVmZmVyLCBvZmZzZXQpIHtcclxuICAgIHZhciBzdGFydCA9IG9mZnNldCxcclxuICAgICAgICBjMSwgLy8gY2hhcmFjdGVyIDFcclxuICAgICAgICBjMjsgLy8gY2hhcmFjdGVyIDJcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgYzEgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICBpZiAoYzEgPCAxMjgpIHtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYzEgPCAyMDQ4KSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiA2ICAgICAgIHwgMTkyO1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgICAgICAgJiA2MyB8IDEyODtcclxuICAgICAgICB9IGVsc2UgaWYgKChjMSAmIDB4RkMwMCkgPT09IDB4RDgwMCAmJiAoKGMyID0gc3RyaW5nLmNoYXJDb2RlQXQoaSArIDEpKSAmIDB4RkMwMCkgPT09IDB4REMwMCkge1xyXG4gICAgICAgICAgICBjMSA9IDB4MTAwMDAgKyAoKGMxICYgMHgwM0ZGKSA8PCAxMCkgKyAoYzIgJiAweDAzRkYpO1xyXG4gICAgICAgICAgICArK2k7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiAxOCAgICAgIHwgMjQwO1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTIgJiA2MyB8IDEyODtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDYgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSAgICAgICAmIDYzIHwgMTI4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiAxMiAgICAgIHwgMjI0O1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gNiAgJiA2MyB8IDEyODtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxICAgICAgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mZnNldCAtIHN0YXJ0O1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBwb29sO1xyXG5cclxuLyoqXHJcbiAqIEFuIGFsbG9jYXRvciBhcyB1c2VkIGJ5IHtAbGluayB1dGlsLnBvb2x9LlxyXG4gKiBAdHlwZWRlZiBQb29sQWxsb2NhdG9yXHJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICogQHBhcmFtIHtudW1iZXJ9IHNpemUgQnVmZmVyIHNpemVcclxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEJ1ZmZlclxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIHNsaWNlciBhcyB1c2VkIGJ5IHtAbGluayB1dGlsLnBvb2x9LlxyXG4gKiBAdHlwZWRlZiBQb29sU2xpY2VyXHJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFN0YXJ0IG9mZnNldFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIEVuZCBvZmZzZXRcclxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEJ1ZmZlciBzbGljZVxyXG4gKiBAdGhpcyB7VWludDhBcnJheX1cclxuICovXHJcblxyXG4vKipcclxuICogQSBnZW5lcmFsIHB1cnBvc2UgYnVmZmVyIHBvb2wuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge1Bvb2xBbGxvY2F0b3J9IGFsbG9jIEFsbG9jYXRvclxyXG4gKiBAcGFyYW0ge1Bvb2xTbGljZXJ9IHNsaWNlIFNsaWNlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemU9ODE5Ml0gU2xhYiBzaXplXHJcbiAqIEByZXR1cm5zIHtQb29sQWxsb2NhdG9yfSBQb29sZWQgYWxsb2NhdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBwb29sKGFsbG9jLCBzbGljZSwgc2l6ZSkge1xyXG4gICAgdmFyIFNJWkUgICA9IHNpemUgfHwgODE5MjtcclxuICAgIHZhciBNQVggICAgPSBTSVpFID4+PiAxO1xyXG4gICAgdmFyIHNsYWIgICA9IG51bGw7XHJcbiAgICB2YXIgb2Zmc2V0ID0gU0laRTtcclxuICAgIHJldHVybiBmdW5jdGlvbiBwb29sX2FsbG9jKHNpemUpIHtcclxuICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IE1BWClcclxuICAgICAgICAgICAgcmV0dXJuIGFsbG9jKHNpemUpO1xyXG4gICAgICAgIGlmIChvZmZzZXQgKyBzaXplID4gU0laRSkge1xyXG4gICAgICAgICAgICBzbGFiID0gYWxsb2MoU0laRSk7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBidWYgPSBzbGljZS5jYWxsKHNsYWIsIG9mZnNldCwgb2Zmc2V0ICs9IHNpemUpO1xyXG4gICAgICAgIGlmIChvZmZzZXQgJiA3KSAvLyBhbGlnbiB0byAzMiBiaXRcclxuICAgICAgICAgICAgb2Zmc2V0ID0gKG9mZnNldCB8IDcpICsgMTtcclxuICAgICAgICByZXR1cm4gYnVmO1xyXG4gICAgfTtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gTG9uZ0JpdHM7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4uL3V0aWwvbWluaW1hbFwiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMuXG4gKiBAY2xhc3NkZXNjIEhlbHBlciBjbGFzcyBmb3Igd29ya2luZyB3aXRoIHRoZSBsb3cgYW5kIGhpZ2ggYml0cyBvZiBhIDY0IGJpdCB2YWx1ZS5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBsbyBMb3cgMzIgYml0cywgdW5zaWduZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaSBIaWdoIDMyIGJpdHMsIHVuc2lnbmVkXG4gKi9cbmZ1bmN0aW9uIExvbmdCaXRzKGxvLCBoaSkge1xuXG4gICAgLy8gbm90ZSB0aGF0IHRoZSBjYXN0cyBiZWxvdyBhcmUgdGhlb3JldGljYWxseSB1bm5lY2Vzc2FyeSBhcyBvZiB0b2RheSwgYnV0IG9sZGVyIHN0YXRpY2FsbHlcbiAgICAvLyBnZW5lcmF0ZWQgY29udmVydGVyIGNvZGUgbWlnaHQgc3RpbGwgY2FsbCB0aGUgY3RvciB3aXRoIHNpZ25lZCAzMmJpdHMuIGtlcHQgZm9yIGNvbXBhdC5cblxuICAgIC8qKlxuICAgICAqIExvdyBiaXRzLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sbyA9IGxvID4+PiAwO1xuXG4gICAgLyoqXG4gICAgICogSGlnaCBiaXRzLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5oaSA9IGhpID4+PiAwO1xufVxuXG4vKipcbiAqIFplcm8gYml0cy5cbiAqIEBtZW1iZXJvZiB1dGlsLkxvbmdCaXRzXG4gKiBAdHlwZSB7dXRpbC5Mb25nQml0c31cbiAqL1xudmFyIHplcm8gPSBMb25nQml0cy56ZXJvID0gbmV3IExvbmdCaXRzKDAsIDApO1xuXG56ZXJvLnRvTnVtYmVyID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuemVyby56ekVuY29kZSA9IHplcm8uenpEZWNvZGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH07XG56ZXJvLmxlbmd0aCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMTsgfTtcblxuLyoqXG4gKiBaZXJvIGhhc2guXG4gKiBAbWVtYmVyb2YgdXRpbC5Mb25nQml0c1xuICogQHR5cGUge3N0cmluZ31cbiAqL1xudmFyIHplcm9IYXNoID0gTG9uZ0JpdHMuemVyb0hhc2ggPSBcIlxcMFxcMFxcMFxcMFxcMFxcMFxcMFxcMFwiO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cyBmcm9tIHRoZSBzcGVjaWZpZWQgbnVtYmVyLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gSW5zdGFuY2VcbiAqL1xuTG9uZ0JpdHMuZnJvbU51bWJlciA9IGZ1bmN0aW9uIGZyb21OdW1iZXIodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IDApXG4gICAgICAgIHJldHVybiB6ZXJvO1xuICAgIHZhciBzaWduID0gdmFsdWUgPCAwO1xuICAgIGlmIChzaWduKVxuICAgICAgICB2YWx1ZSA9IC12YWx1ZTtcbiAgICB2YXIgbG8gPSB2YWx1ZSA+Pj4gMCxcbiAgICAgICAgaGkgPSAodmFsdWUgLSBsbykgLyA0Mjk0OTY3Mjk2ID4+PiAwO1xuICAgIGlmIChzaWduKSB7XG4gICAgICAgIGhpID0gfmhpID4+PiAwO1xuICAgICAgICBsbyA9IH5sbyA+Pj4gMDtcbiAgICAgICAgaWYgKCsrbG8gPiA0Mjk0OTY3Mjk1KSB7XG4gICAgICAgICAgICBsbyA9IDA7XG4gICAgICAgICAgICBpZiAoKytoaSA+IDQyOTQ5NjcyOTUpXG4gICAgICAgICAgICAgICAgaGkgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgTG9uZ0JpdHMobG8sIGhpKTtcbn07XG5cbi8qKlxuICogQ29uc3RydWN0cyBuZXcgbG9uZyBiaXRzIGZyb20gYSBudW1iZXIsIGxvbmcgb3Igc3RyaW5nLlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gSW5zdGFuY2VcbiAqL1xuTG9uZ0JpdHMuZnJvbSA9IGZ1bmN0aW9uIGZyb20odmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm4gTG9uZ0JpdHMuZnJvbU51bWJlcih2YWx1ZSk7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh1dGlsLkxvbmcpXG4gICAgICAgICAgICB2YWx1ZSA9IHV0aWwuTG9uZy5mcm9tU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIExvbmdCaXRzLmZyb21OdW1iZXIocGFyc2VJbnQodmFsdWUsIDEwKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5sb3cgfHwgdmFsdWUuaGlnaCA/IG5ldyBMb25nQml0cyh2YWx1ZS5sb3cgPj4+IDAsIHZhbHVlLmhpZ2ggPj4+IDApIDogemVybztcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBsb25nIGJpdHMgdG8gYSBwb3NzaWJseSB1bnNhZmUgSmF2YVNjcmlwdCBudW1iZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1bnNpZ25lZD1mYWxzZV0gV2hldGhlciB1bnNpZ25lZCBvciBub3RcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFBvc3NpYmx5IHVuc2FmZSBudW1iZXJcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24gdG9OdW1iZXIodW5zaWduZWQpIHtcbiAgICBpZiAoIXVuc2lnbmVkICYmIHRoaXMuaGkgPj4+IDMxKSB7XG4gICAgICAgIHZhciBsbyA9IH50aGlzLmxvICsgMSA+Pj4gMCxcbiAgICAgICAgICAgIGhpID0gfnRoaXMuaGkgICAgID4+PiAwO1xuICAgICAgICBpZiAoIWxvKVxuICAgICAgICAgICAgaGkgPSBoaSArIDEgPj4+IDA7XG4gICAgICAgIHJldHVybiAtKGxvICsgaGkgKiA0Mjk0OTY3Mjk2KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG8gKyB0aGlzLmhpICogNDI5NDk2NzI5Njtcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBsb25nIGJpdHMgdG8gYSBsb25nLlxuICogQHBhcmFtIHtib29sZWFufSBbdW5zaWduZWQ9ZmFsc2VdIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKiBAcmV0dXJucyB7TG9uZ30gTG9uZ1xuICovXG5Mb25nQml0cy5wcm90b3R5cGUudG9Mb25nID0gZnVuY3Rpb24gdG9Mb25nKHVuc2lnbmVkKSB7XG4gICAgcmV0dXJuIHV0aWwuTG9uZ1xuICAgICAgICA/IG5ldyB1dGlsLkxvbmcodGhpcy5sbyB8IDAsIHRoaXMuaGkgfCAwLCBCb29sZWFuKHVuc2lnbmVkKSlcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgOiB7IGxvdzogdGhpcy5sbyB8IDAsIGhpZ2g6IHRoaXMuaGkgfCAwLCB1bnNpZ25lZDogQm9vbGVhbih1bnNpZ25lZCkgfTtcbn07XG5cbnZhciBjaGFyQ29kZUF0ID0gU3RyaW5nLnByb3RvdHlwZS5jaGFyQ29kZUF0O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cyBmcm9tIHRoZSBzcGVjaWZpZWQgOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIEhhc2hcbiAqIEByZXR1cm5zIHt1dGlsLkxvbmdCaXRzfSBCaXRzXG4gKi9cbkxvbmdCaXRzLmZyb21IYXNoID0gZnVuY3Rpb24gZnJvbUhhc2goaGFzaCkge1xuICAgIGlmIChoYXNoID09PSB6ZXJvSGFzaClcbiAgICAgICAgcmV0dXJuIHplcm87XG4gICAgcmV0dXJuIG5ldyBMb25nQml0cyhcbiAgICAgICAgKCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMClcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMSkgPDwgOFxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCAyKSA8PCAxNlxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCAzKSA8PCAyNCkgPj4+IDBcbiAgICAsXG4gICAgICAgICggY2hhckNvZGVBdC5jYWxsKGhhc2gsIDQpXG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDUpIDw8IDhcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgNikgPDwgMTZcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgNykgPDwgMjQpID4+PiAwXG4gICAgKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgdGhpcyBsb25nIGJpdHMgdG8gYSA4IGNoYXJhY3RlcnMgbG9uZyBoYXNoLlxuICogQHJldHVybnMge3N0cmluZ30gSGFzaFxuICovXG5Mb25nQml0cy5wcm90b3R5cGUudG9IYXNoID0gZnVuY3Rpb24gdG9IYXNoKCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgICAgICB0aGlzLmxvICAgICAgICAmIDI1NSxcbiAgICAgICAgdGhpcy5sbyA+Pj4gOCAgJiAyNTUsXG4gICAgICAgIHRoaXMubG8gPj4+IDE2ICYgMjU1LFxuICAgICAgICB0aGlzLmxvID4+PiAyNCAgICAgICxcbiAgICAgICAgdGhpcy5oaSAgICAgICAgJiAyNTUsXG4gICAgICAgIHRoaXMuaGkgPj4+IDggICYgMjU1LFxuICAgICAgICB0aGlzLmhpID4+PiAxNiAmIDI1NSxcbiAgICAgICAgdGhpcy5oaSA+Pj4gMjRcbiAgICApO1xufTtcblxuLyoqXG4gKiBaaWctemFnIGVuY29kZXMgdGhpcyBsb25nIGJpdHMuXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gYHRoaXNgXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS56ekVuY29kZSA9IGZ1bmN0aW9uIHp6RW5jb2RlKCkge1xuICAgIHZhciBtYXNrID0gICB0aGlzLmhpID4+IDMxO1xuICAgIHRoaXMuaGkgID0gKCh0aGlzLmhpIDw8IDEgfCB0aGlzLmxvID4+PiAzMSkgXiBtYXNrKSA+Pj4gMDtcbiAgICB0aGlzLmxvICA9ICggdGhpcy5sbyA8PCAxICAgICAgICAgICAgICAgICAgIF4gbWFzaykgPj4+IDA7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFppZy16YWcgZGVjb2RlcyB0aGlzIGxvbmcgYml0cy5cbiAqIEByZXR1cm5zIHt1dGlsLkxvbmdCaXRzfSBgdGhpc2BcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnp6RGVjb2RlID0gZnVuY3Rpb24genpEZWNvZGUoKSB7XG4gICAgdmFyIG1hc2sgPSAtKHRoaXMubG8gJiAxKTtcbiAgICB0aGlzLmxvICA9ICgodGhpcy5sbyA+Pj4gMSB8IHRoaXMuaGkgPDwgMzEpIF4gbWFzaykgPj4+IDA7XG4gICAgdGhpcy5oaSAgPSAoIHRoaXMuaGkgPj4+IDEgICAgICAgICAgICAgICAgICBeIG1hc2spID4+PiAwO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgdGhpcyBsb25nYml0cyB3aGVuIGVuY29kZWQgYXMgYSB2YXJpbnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBMZW5ndGhcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uIGxlbmd0aCgpIHtcbiAgICB2YXIgcGFydDAgPSAgdGhpcy5sbyxcbiAgICAgICAgcGFydDEgPSAodGhpcy5sbyA+Pj4gMjggfCB0aGlzLmhpIDw8IDQpID4+PiAwLFxuICAgICAgICBwYXJ0MiA9ICB0aGlzLmhpID4+PiAyNDtcbiAgICByZXR1cm4gcGFydDIgPT09IDBcbiAgICAgICAgID8gcGFydDEgPT09IDBcbiAgICAgICAgICAgPyBwYXJ0MCA8IDE2Mzg0XG4gICAgICAgICAgICAgPyBwYXJ0MCA8IDEyOCA/IDEgOiAyXG4gICAgICAgICAgICAgOiBwYXJ0MCA8IDIwOTcxNTIgPyAzIDogNFxuICAgICAgICAgICA6IHBhcnQxIDwgMTYzODRcbiAgICAgICAgICAgICA/IHBhcnQxIDwgMTI4ID8gNSA6IDZcbiAgICAgICAgICAgICA6IHBhcnQxIDwgMjA5NzE1MiA/IDcgOiA4XG4gICAgICAgICA6IHBhcnQyIDwgMTI4ID8gOSA6IDEwO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIHV0aWwgPSBleHBvcnRzO1xuXG4vLyB1c2VkIHRvIHJldHVybiBhIFByb21pc2Ugd2hlcmUgY2FsbGJhY2sgaXMgb21pdHRlZFxudXRpbC5hc1Byb21pc2UgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvYXNwcm9taXNlXCIpO1xuXG4vLyBjb252ZXJ0cyB0byAvIGZyb20gYmFzZTY0IGVuY29kZWQgc3RyaW5nc1xudXRpbC5iYXNlNjQgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvYmFzZTY0XCIpO1xuXG4vLyBiYXNlIGNsYXNzIG9mIHJwYy5TZXJ2aWNlXG51dGlsLkV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9ldmVudGVtaXR0ZXJcIik7XG5cbi8vIGZsb2F0IGhhbmRsaW5nIGFjY3Jvc3MgYnJvd3NlcnNcbnV0aWwuZmxvYXQgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvZmxvYXRcIik7XG5cbi8vIHJlcXVpcmVzIG1vZHVsZXMgb3B0aW9uYWxseSBhbmQgaGlkZXMgdGhlIGNhbGwgZnJvbSBidW5kbGVyc1xudXRpbC5pbnF1aXJlID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2lucXVpcmVcIik7XG5cbi8vIGNvbnZlcnRzIHRvIC8gZnJvbSB1dGY4IGVuY29kZWQgc3RyaW5nc1xudXRpbC51dGY4ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL3V0ZjhcIik7XG5cbi8vIHByb3ZpZGVzIGEgbm9kZS1saWtlIGJ1ZmZlciBwb29sIGluIHRoZSBicm93c2VyXG51dGlsLnBvb2wgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvcG9vbFwiKTtcblxuLy8gdXRpbGl0eSB0byB3b3JrIHdpdGggdGhlIGxvdyBhbmQgaGlnaCBiaXRzIG9mIGEgNjQgYml0IHZhbHVlXG51dGlsLkxvbmdCaXRzID0gcmVxdWlyZShcIi4vbG9uZ2JpdHNcIik7XG5cbi8qKlxuICogV2hldGhlciBydW5uaW5nIHdpdGhpbiBub2RlIG9yIG5vdC5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xudXRpbC5pc05vZGUgPSBCb29sZWFuKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWxcbiAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWwucHJvY2Vzc1xuICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbC5wcm9jZXNzLnZlcnNpb25zXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsLnByb2Nlc3MudmVyc2lvbnMubm9kZSk7XG5cbi8qKlxuICogR2xvYmFsIG9iamVjdCByZWZlcmVuY2UuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHR5cGUge09iamVjdH1cbiAqL1xudXRpbC5nbG9iYWwgPSB1dGlsLmlzTm9kZSAmJiBnbG9iYWxcbiAgICAgICAgICAgfHwgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3dcbiAgICAgICAgICAgfHwgdHlwZW9mIHNlbGYgICAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmXG4gICAgICAgICAgIHx8IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cbi8qKlxuICogQW4gaW1tdWFibGUgZW1wdHkgYXJyYXkuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHR5cGUge0FycmF5LjwqPn1cbiAqIEBjb25zdFxuICovXG51dGlsLmVtcHR5QXJyYXkgPSBPYmplY3QuZnJlZXplID8gT2JqZWN0LmZyZWV6ZShbXSkgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBbXTsgLy8gdXNlZCBvbiBwcm90b3R5cGVzXG5cbi8qKlxuICogQW4gaW1tdXRhYmxlIGVtcHR5IG9iamVjdC5cbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5lbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUgPyBPYmplY3QuZnJlZXplKHt9KSA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHt9OyAvLyB1c2VkIG9uIHByb3RvdHlwZXNcblxuLyoqXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGFuIGludGVnZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlclxuICovXG51dGlsLmlzSW50ZWdlciA9IE51bWJlci5pc0ludGVnZXIgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGEgc3RyaW5nLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZ1xuICovXG51dGlsLmlzU3RyaW5nID0gZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xufTtcblxuLyoqXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGEgbm9uLW51bGwgb2JqZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdFxuICovXG51dGlsLmlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBvbiBhIG1lc3NhZ2UgaXMgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LlxuICogVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgdXRpbC5pc1NldH0uXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogUGxhaW4gb2JqZWN0IG9yIG1lc3NhZ2UgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG51dGlsLmlzc2V0ID1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBvbiBhIG1lc3NhZ2UgaXMgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBQbGFpbiBvYmplY3Qgb3IgbWVzc2FnZSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgbmFtZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBjb25zaWRlcmVkIHRvIGJlIHByZXNlbnQsIG90aGVyd2lzZSBgZmFsc2VgXG4gKi9cbnV0aWwuaXNTZXQgPSBmdW5jdGlvbiBpc1NldChvYmosIHByb3ApIHtcbiAgICB2YXIgdmFsdWUgPSBvYmpbcHJvcF07XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgb2JqLmhhc093blByb3BlcnR5KHByb3ApKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcSwgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubGVuZ3RoIDogT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCkgPiAwO1xuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQW55IGNvbXBhdGlibGUgQnVmZmVyIGluc3RhbmNlLlxuICogVGhpcyBpcyBhIG1pbmltYWwgc3RhbmQtYWxvbmUgZGVmaW5pdGlvbiBvZiBhIEJ1ZmZlciBpbnN0YW5jZS4gVGhlIGFjdHVhbCB0eXBlIGlzIHRoYXQgZXhwb3J0ZWQgYnkgbm9kZSdzIHR5cGluZ3MuXG4gKiBAaW50ZXJmYWNlIEJ1ZmZlclxuICogQGV4dGVuZHMgVWludDhBcnJheVxuICovXG5cbi8qKlxuICogTm9kZSdzIEJ1ZmZlciBjbGFzcyBpZiBhdmFpbGFibGUuXG4gKiBAdHlwZSB7Q29uc3RydWN0b3I8QnVmZmVyPn1cbiAqL1xudXRpbC5CdWZmZXIgPSAoZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIEJ1ZmZlciA9IHV0aWwuaW5xdWlyZShcImJ1ZmZlclwiKS5CdWZmZXI7XG4gICAgICAgIC8vIHJlZnVzZSB0byB1c2Ugbm9uLW5vZGUgYnVmZmVycyBpZiBub3QgZXhwbGljaXRseSBhc3NpZ25lZCAocGVyZiByZWFzb25zKTpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5wcm90b3R5cGUudXRmOFdyaXRlID8gQnVmZmVyIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gbnVsbDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn0pKCk7XG5cbi8vIEludGVybmFsIGFsaWFzIG9mIG9yIHBvbHlmdWxsIGZvciBCdWZmZXIuZnJvbS5cbnV0aWwuX0J1ZmZlcl9mcm9tID0gbnVsbDtcblxuLy8gSW50ZXJuYWwgYWxpYXMgb2Ygb3IgcG9seWZpbGwgZm9yIEJ1ZmZlci5hbGxvY1Vuc2FmZS5cbnV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZSA9IG51bGw7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBidWZmZXIgb2Ygd2hhdGV2ZXIgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50LlxuICogQHBhcmFtIHtudW1iZXJ8bnVtYmVyW119IFtzaXplT3JBcnJheT0wXSBCdWZmZXIgc2l6ZSBvciBudW1iZXIgYXJyYXlcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fEJ1ZmZlcn0gQnVmZmVyXG4gKi9cbnV0aWwubmV3QnVmZmVyID0gZnVuY3Rpb24gbmV3QnVmZmVyKHNpemVPckFycmF5KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdHlwZW9mIHNpemVPckFycmF5ID09PSBcIm51bWJlclwiXG4gICAgICAgID8gdXRpbC5CdWZmZXJcbiAgICAgICAgICAgID8gdXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlKHNpemVPckFycmF5KVxuICAgICAgICAgICAgOiBuZXcgdXRpbC5BcnJheShzaXplT3JBcnJheSlcbiAgICAgICAgOiB1dGlsLkJ1ZmZlclxuICAgICAgICAgICAgPyB1dGlsLl9CdWZmZXJfZnJvbShzaXplT3JBcnJheSlcbiAgICAgICAgICAgIDogdHlwZW9mIFVpbnQ4QXJyYXkgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICA/IHNpemVPckFycmF5XG4gICAgICAgICAgICAgICAgOiBuZXcgVWludDhBcnJheShzaXplT3JBcnJheSk7XG59O1xuXG4vKipcbiAqIEFycmF5IGltcGxlbWVudGF0aW9uIHVzZWQgaW4gdGhlIGJyb3dzZXIuIGBVaW50OEFycmF5YCBpZiBzdXBwb3J0ZWQsIG90aGVyd2lzZSBgQXJyYXlgLlxuICogQHR5cGUge0NvbnN0cnVjdG9yPFVpbnQ4QXJyYXk+fVxuICovXG51dGlsLkFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09IFwidW5kZWZpbmVkXCIgPyBVaW50OEFycmF5IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDogQXJyYXk7XG5cbi8qKlxuICogQW55IGNvbXBhdGlibGUgTG9uZyBpbnN0YW5jZS5cbiAqIFRoaXMgaXMgYSBtaW5pbWFsIHN0YW5kLWFsb25lIGRlZmluaXRpb24gb2YgYSBMb25nIGluc3RhbmNlLiBUaGUgYWN0dWFsIHR5cGUgaXMgdGhhdCBleHBvcnRlZCBieSBsb25nLmpzLlxuICogQGludGVyZmFjZSBMb25nXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG93IExvdyBiaXRzXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGlnaCBIaWdoIGJpdHNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3RcbiAqL1xuXG4vKipcbiAqIExvbmcuanMncyBMb25nIGNsYXNzIGlmIGF2YWlsYWJsZS5cbiAqIEB0eXBlIHtDb25zdHJ1Y3RvcjxMb25nPn1cbiAqL1xudXRpbC5Mb25nID0gLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdXRpbC5nbG9iYWwuZGNvZGVJTyAmJiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB1dGlsLmdsb2JhbC5kY29kZUlPLkxvbmdcbiAgICAgICAgIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuZ2xvYmFsLkxvbmdcbiAgICAgICAgIHx8IHV0aWwuaW5xdWlyZShcImxvbmdcIik7XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDIgYml0IChgYm9vbGApIG1hcCBrZXlzLlxuICogQHR5cGUge1JlZ0V4cH1cbiAqIEBjb25zdFxuICovXG51dGlsLmtleTJSZSA9IC9edHJ1ZXxmYWxzZXwwfDEkLztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byB2ZXJpZnkgMzIgYml0IChgaW50MzJgIGV0Yy4pIG1hcCBrZXlzLlxuICogQHR5cGUge1JlZ0V4cH1cbiAqIEBjb25zdFxuICovXG51dGlsLmtleTMyUmUgPSAvXi0/KD86MHxbMS05XVswLTldKikkLztcblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byB2ZXJpZnkgNjQgYml0IChgaW50NjRgIGV0Yy4pIG1hcCBrZXlzLlxuICogQHR5cGUge1JlZ0V4cH1cbiAqIEBjb25zdFxuICovXG51dGlsLmtleTY0UmUgPSAvXig/OltcXFxceDAwLVxcXFx4ZmZdezh9fC0/KD86MHxbMS05XVswLTldKikpJC87XG5cbi8qKlxuICogQ29udmVydHMgYSBudW1iZXIgb3IgbG9uZyB0byBhbiA4IGNoYXJhY3RlcnMgbG9uZyBoYXNoIHN0cmluZy5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhhc2hcbiAqL1xudXRpbC5sb25nVG9IYXNoID0gZnVuY3Rpb24gbG9uZ1RvSGFzaCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgICA/IHV0aWwuTG9uZ0JpdHMuZnJvbSh2YWx1ZSkudG9IYXNoKClcbiAgICAgICAgOiB1dGlsLkxvbmdCaXRzLnplcm9IYXNoO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiA4IGNoYXJhY3RlcnMgbG9uZyBoYXNoIHN0cmluZyB0byBhIGxvbmcgb3IgbnVtYmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggSGFzaFxuICogQHBhcmFtIHtib29sZWFufSBbdW5zaWduZWQ9ZmFsc2VdIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKiBAcmV0dXJucyB7TG9uZ3xudW1iZXJ9IE9yaWdpbmFsIHZhbHVlXG4gKi9cbnV0aWwubG9uZ0Zyb21IYXNoID0gZnVuY3Rpb24gbG9uZ0Zyb21IYXNoKGhhc2gsIHVuc2lnbmVkKSB7XG4gICAgdmFyIGJpdHMgPSB1dGlsLkxvbmdCaXRzLmZyb21IYXNoKGhhc2gpO1xuICAgIGlmICh1dGlsLkxvbmcpXG4gICAgICAgIHJldHVybiB1dGlsLkxvbmcuZnJvbUJpdHMoYml0cy5sbywgYml0cy5oaSwgdW5zaWduZWQpO1xuICAgIHJldHVybiBiaXRzLnRvTnVtYmVyKEJvb2xlYW4odW5zaWduZWQpKTtcbn07XG5cbi8qKlxuICogTWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzb3VyY2Ugb2JqZWN0IGludG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBkc3QgRGVzdGluYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBzcmMgU291cmNlIG9iamVjdFxuICogQHBhcmFtIHtib29sZWFufSBbaWZOb3RTZXQ9ZmFsc2VdIE1lcmdlcyBvbmx5IGlmIHRoZSBrZXkgaXMgbm90IGFscmVhZHkgc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0LjxzdHJpbmcsKj59IERlc3RpbmF0aW9uIG9iamVjdFxuICovXG5mdW5jdGlvbiBtZXJnZShkc3QsIHNyYywgaWZOb3RTZXQpIHsgLy8gdXNlZCBieSBjb252ZXJ0ZXJzXG4gICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNyYyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSlcbiAgICAgICAgaWYgKGRzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkIHx8ICFpZk5vdFNldClcbiAgICAgICAgICAgIGRzdFtrZXlzW2ldXSA9IHNyY1trZXlzW2ldXTtcbiAgICByZXR1cm4gZHN0O1xufVxuXG51dGlsLm1lcmdlID0gbWVyZ2U7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIHN0cmluZyB0byBsb3dlciBjYXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBTdHJpbmcgdG8gY29udmVydFxuICogQHJldHVybnMge3N0cmluZ30gQ29udmVydGVkIHN0cmluZ1xuICovXG51dGlsLmxjRmlyc3QgPSBmdW5jdGlvbiBsY0ZpcnN0KHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIGVycm9yIGNvbnN0cnVjdG9yLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEVycm9yIG5hbWVcbiAqIEByZXR1cm5zIHtDb25zdHJ1Y3RvcjxFcnJvcj59IEN1c3RvbSBlcnJvciBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBuZXdFcnJvcihuYW1lKSB7XG5cbiAgICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBwcm9wZXJ0aWVzKSB7XG5cbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEN1c3RvbUVycm9yKSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ3VzdG9tRXJyb3IobWVzc2FnZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgLy8gRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbiAgICAgICAgLy8gXiBqdXN0IHJldHVybnMgYSBuZXcgZXJyb3IgaW5zdGFuY2UgYmVjYXVzZSB0aGUgY3RvciBjYW4gYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb25cblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJtZXNzYWdlXCIsIHsgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1lc3NhZ2U7IH0gfSk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSAvLyBub2RlXG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDdXN0b21FcnJvcik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YWNrXCIsIHsgdmFsdWU6IG5ldyBFcnJvcigpLnN0YWNrIHx8IFwiXCIgfSk7XG5cbiAgICAgICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgICAgICBtZXJnZSh0aGlzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICAoQ3VzdG9tRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IEN1c3RvbUVycm9yO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEN1c3RvbUVycm9yLnByb3RvdHlwZSwgXCJuYW1lXCIsIHsgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG5hbWU7IH0gfSk7XG5cbiAgICBDdXN0b21FcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZSArIFwiOiBcIiArIHRoaXMubWVzc2FnZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIEN1c3RvbUVycm9yO1xufVxuXG51dGlsLm5ld0Vycm9yID0gbmV3RXJyb3I7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBwcm90b2NvbCBlcnJvci5cbiAqIEBjbGFzc2Rlc2MgRXJyb3Igc3ViY2xhc3MgaW5kaWNhdGluZyBhIHByb3RvY29sIHNwZWNpZmMgZXJyb3IuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQGV4dGVuZHMgRXJyb3JcbiAqIEB0ZW1wbGF0ZSBUIGV4dGVuZHMgTWVzc2FnZTxUPlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBFcnJvciBtZXNzYWdlXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCo+fSBbcHJvcGVydGllc10gQWRkaXRpb25hbCBwcm9wZXJ0aWVzXG4gKiBAZXhhbXBsZVxuICogdHJ5IHtcbiAqICAgICBNeU1lc3NhZ2UuZGVjb2RlKHNvbWVCdWZmZXIpOyAvLyB0aHJvd3MgaWYgcmVxdWlyZWQgZmllbGRzIGFyZSBtaXNzaW5nXG4gKiB9IGNhdGNoIChlKSB7XG4gKiAgICAgaWYgKGUgaW5zdGFuY2VvZiBQcm90b2NvbEVycm9yICYmIGUuaW5zdGFuY2UpXG4gKiAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlZCBzbyBmYXI6IFwiICsgSlNPTi5zdHJpbmdpZnkoZS5pbnN0YW5jZSkpO1xuICogfVxuICovXG51dGlsLlByb3RvY29sRXJyb3IgPSBuZXdFcnJvcihcIlByb3RvY29sRXJyb3JcIik7XG5cbi8qKlxuICogU28gZmFyIGRlY29kZWQgbWVzc2FnZSBpbnN0YW5jZS5cbiAqIEBuYW1lIHV0aWwuUHJvdG9jb2xFcnJvciNpbnN0YW5jZVxuICogQHR5cGUge01lc3NhZ2U8VD59XG4gKi9cblxuLyoqXG4gKiBBIE9uZU9mIGdldHRlciBhcyByZXR1cm5lZCBieSB7QGxpbmsgdXRpbC5vbmVPZkdldHRlcn0uXG4gKiBAdHlwZWRlZiBPbmVPZkdldHRlclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IFNldCBmaWVsZCBuYW1lLCBpZiBhbnlcbiAqL1xuXG4vKipcbiAqIEJ1aWxkcyBhIGdldHRlciBmb3IgYSBvbmVvZidzIHByZXNlbnQgZmllbGQgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nW119IGZpZWxkTmFtZXMgRmllbGQgbmFtZXNcbiAqIEByZXR1cm5zIHtPbmVPZkdldHRlcn0gVW5ib3VuZCBnZXR0ZXJcbiAqL1xudXRpbC5vbmVPZkdldHRlciA9IGZ1bmN0aW9uIGdldE9uZU9mKGZpZWxkTmFtZXMpIHtcbiAgICB2YXIgZmllbGRNYXAgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkTmFtZXMubGVuZ3RoOyArK2kpXG4gICAgICAgIGZpZWxkTWFwW2ZpZWxkTmFtZXNbaV1dID0gMTtcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBTZXQgZmllbGQgbmFtZSwgaWYgYW55XG4gICAgICogQHRoaXMgT2JqZWN0XG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbigpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICAgICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcyksIGkgPSBrZXlzLmxlbmd0aCAtIDE7IGkgPiAtMTsgLS1pKVxuICAgICAgICAgICAgaWYgKGZpZWxkTWFwW2tleXNbaV1dID09PSAxICYmIHRoaXNba2V5c1tpXV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzW2tleXNbaV1dICE9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXlzW2ldO1xuICAgIH07XG59O1xuXG4vKipcbiAqIEEgT25lT2Ygc2V0dGVyIGFzIHJldHVybmVkIGJ5IHtAbGluayB1dGlsLm9uZU9mU2V0dGVyfS5cbiAqIEB0eXBlZGVmIE9uZU9mU2V0dGVyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHZhbHVlIEZpZWxkIG5hbWVcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cblxuLyoqXG4gKiBCdWlsZHMgYSBzZXR0ZXIgZm9yIGEgb25lb2YncyBwcmVzZW50IGZpZWxkIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBmaWVsZE5hbWVzIEZpZWxkIG5hbWVzXG4gKiBAcmV0dXJucyB7T25lT2ZTZXR0ZXJ9IFVuYm91bmQgc2V0dGVyXG4gKi9cbnV0aWwub25lT2ZTZXR0ZXIgPSBmdW5jdGlvbiBzZXRPbmVPZihmaWVsZE5hbWVzKSB7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBGaWVsZCBuYW1lXG4gICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgKiBAdGhpcyBPYmplY3RcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZE5hbWVzLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgaWYgKGZpZWxkTmFtZXNbaV0gIT09IG5hbWUpXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbZmllbGROYW1lc1tpXV07XG4gICAgfTtcbn07XG5cbi8qKlxuICogRGVmYXVsdCBjb252ZXJzaW9uIG9wdGlvbnMgdXNlZCBmb3Ige0BsaW5rIE1lc3NhZ2UjdG9KU09OfSBpbXBsZW1lbnRhdGlvbnMuXG4gKlxuICogVGhlc2Ugb3B0aW9ucyBhcmUgY2xvc2UgdG8gcHJvdG8zJ3MgSlNPTiBtYXBwaW5nIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGludGVybmFsIHR5cGVzIGxpa2UgQW55IGFyZSBoYW5kbGVkIGp1c3QgbGlrZSBtZXNzYWdlcy4gTW9yZSBwcmVjaXNlbHk6XG4gKlxuICogLSBMb25ncyBiZWNvbWUgc3RyaW5nc1xuICogLSBFbnVtcyBiZWNvbWUgc3RyaW5nIGtleXNcbiAqIC0gQnl0ZXMgYmVjb21lIGJhc2U2NCBlbmNvZGVkIHN0cmluZ3NcbiAqIC0gKFN1Yi0pTWVzc2FnZXMgYmVjb21lIHBsYWluIG9iamVjdHNcbiAqIC0gTWFwcyBiZWNvbWUgcGxhaW4gb2JqZWN0cyB3aXRoIGFsbCBzdHJpbmcga2V5c1xuICogLSBSZXBlYXRlZCBmaWVsZHMgYmVjb21lIGFycmF5c1xuICogLSBOYU4gYW5kIEluZmluaXR5IGZvciBmbG9hdCBhbmQgZG91YmxlIGZpZWxkcyBiZWNvbWUgc3RyaW5nc1xuICpcbiAqIEB0eXBlIHtJQ29udmVyc2lvbk9wdGlvbnN9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzM/aGw9ZW4janNvblxuICovXG51dGlsLnRvSlNPTk9wdGlvbnMgPSB7XG4gICAgbG9uZ3M6IFN0cmluZyxcbiAgICBlbnVtczogU3RyaW5nLFxuICAgIGJ5dGVzOiBTdHJpbmcsXG4gICAganNvbjogdHJ1ZVxufTtcblxuLy8gU2V0cyB1cCBidWZmZXIgdXRpbGl0eSBhY2NvcmRpbmcgdG8gdGhlIGVudmlyb25tZW50IChjYWxsZWQgaW4gaW5kZXgtbWluaW1hbClcbnV0aWwuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBCdWZmZXIgPSB1dGlsLkJ1ZmZlcjtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIUJ1ZmZlcikge1xuICAgICAgICB1dGlsLl9CdWZmZXJfZnJvbSA9IHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZSA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gYmVjYXVzZSBub2RlIDQueCBidWZmZXJzIGFyZSBpbmNvbXBhdGlibGUgJiBpbW11dGFibGVcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kY29kZUlPL3Byb3RvYnVmLmpzL3B1bGwvNjY1XG4gICAgdXRpbC5fQnVmZmVyX2Zyb20gPSBCdWZmZXIuZnJvbSAhPT0gVWludDhBcnJheS5mcm9tICYmIEJ1ZmZlci5mcm9tIHx8XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGZ1bmN0aW9uIEJ1ZmZlcl9mcm9tKHZhbHVlLCBlbmNvZGluZykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUsIGVuY29kaW5nKTtcbiAgICAgICAgfTtcbiAgICB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBCdWZmZXIuYWxsb2NVbnNhZmUgfHxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZnVuY3Rpb24gQnVmZmVyX2FsbG9jVW5zYWZlKHNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKHNpemUpO1xuICAgICAgICB9O1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBXcml0ZXI7XG5cbnZhciB1dGlsICAgICAgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5cbnZhciBCdWZmZXJXcml0ZXI7IC8vIGN5Y2xpY1xuXG52YXIgTG9uZ0JpdHMgID0gdXRpbC5Mb25nQml0cyxcbiAgICBiYXNlNjQgICAgPSB1dGlsLmJhc2U2NCxcbiAgICB1dGY4ICAgICAgPSB1dGlsLnV0Zjg7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgb3BlcmF0aW9uIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBTY2hlZHVsZWQgd3JpdGVyIG9wZXJhdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBVaW50OEFycmF5LCBudW1iZXIpfSBmbiBGdW5jdGlvbiB0byBjYWxsXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuIFZhbHVlIGJ5dGUgbGVuZ3RoXG4gKiBAcGFyYW0geyp9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBPcChmbiwgbGVuLCB2YWwpIHtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGNhbGwuXG4gICAgICogQHR5cGUge2Z1bmN0aW9uKFVpbnQ4QXJyYXksIG51bWJlciwgKil9XG4gICAgICovXG4gICAgdGhpcy5mbiA9IGZuO1xuXG4gICAgLyoqXG4gICAgICogVmFsdWUgYnl0ZSBsZW5ndGguXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxlbiA9IGxlbjtcblxuICAgIC8qKlxuICAgICAqIE5leHQgb3BlcmF0aW9uLlxuICAgICAqIEB0eXBlIHtXcml0ZXIuT3B8dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMubmV4dCA9IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIHRvIHdyaXRlLlxuICAgICAqIEB0eXBlIHsqfVxuICAgICAqL1xuICAgIHRoaXMudmFsID0gdmFsOyAvLyB0eXBlIHZhcmllc1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gbm9vcCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHdyaXRlciBzdGF0ZSBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgQ29waWVkIHdyaXRlciBzdGF0ZS5cbiAqIEBtZW1iZXJvZiBXcml0ZXJcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtXcml0ZXJ9IHdyaXRlciBXcml0ZXIgdG8gY29weSBzdGF0ZSBmcm9tXG4gKiBAaWdub3JlXG4gKi9cbmZ1bmN0aW9uIFN0YXRlKHdyaXRlcikge1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBoZWFkLlxuICAgICAqIEB0eXBlIHtXcml0ZXIuT3B9XG4gICAgICovXG4gICAgdGhpcy5oZWFkID0gd3JpdGVyLmhlYWQ7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IHRhaWwuXG4gICAgICogQHR5cGUge1dyaXRlci5PcH1cbiAgICAgKi9cbiAgICB0aGlzLnRhaWwgPSB3cml0ZXIudGFpbDtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgYnVmZmVyIGxlbmd0aC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGVuID0gd3JpdGVyLmxlbjtcblxuICAgIC8qKlxuICAgICAqIE5leHQgc3RhdGUuXG4gICAgICogQHR5cGUge1N0YXRlfG51bGx9XG4gICAgICovXG4gICAgdGhpcy5uZXh0ID0gd3JpdGVyLnN0YXRlcztcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHdyaXRlciBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgd3JpdGVyIHVzaW5nIGBVaW50OEFycmF5YCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBgQXJyYXlgLlxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIFdyaXRlcigpIHtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSAwO1xuXG4gICAgLyoqXG4gICAgICogT3BlcmF0aW9ucyBoZWFkLlxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5oZWFkID0gbmV3IE9wKG5vb3AsIDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogT3BlcmF0aW9ucyB0YWlsXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLnRhaWwgPSB0aGlzLmhlYWQ7XG5cbiAgICAvKipcbiAgICAgKiBMaW5rZWQgZm9ya2VkIHN0YXRlcy5cbiAgICAgKiBAdHlwZSB7T2JqZWN0fG51bGx9XG4gICAgICovXG4gICAgdGhpcy5zdGF0ZXMgPSBudWxsO1xuXG4gICAgLy8gV2hlbiBhIHZhbHVlIGlzIHdyaXR0ZW4sIHRoZSB3cml0ZXIgY2FsY3VsYXRlcyBpdHMgYnl0ZSBsZW5ndGggYW5kIHB1dHMgaXQgaW50byBhIGxpbmtlZFxuICAgIC8vIGxpc3Qgb2Ygb3BlcmF0aW9ucyB0byBwZXJmb3JtIHdoZW4gZmluaXNoKCkgaXMgY2FsbGVkLiBUaGlzIGJvdGggYWxsb3dzIHVzIHRvIGFsbG9jYXRlXG4gICAgLy8gYnVmZmVycyBvZiB0aGUgZXhhY3QgcmVxdWlyZWQgc2l6ZSBhbmQgcmVkdWNlcyB0aGUgYW1vdW50IG9mIHdvcmsgd2UgaGF2ZSB0byBkbyBjb21wYXJlZFxuICAgIC8vIHRvIGZpcnN0IGNhbGN1bGF0aW5nIG92ZXIgb2JqZWN0cyBhbmQgdGhlbiBlbmNvZGluZyBvdmVyIG9iamVjdHMuIEluIG91ciBjYXNlLCB0aGUgZW5jb2RpbmdcbiAgICAvLyBwYXJ0IGlzIGp1c3QgYSBsaW5rZWQgbGlzdCB3YWxrIGNhbGxpbmcgb3BlcmF0aW9ucyB3aXRoIGFscmVhZHkgcHJlcGFyZWQgdmFsdWVzLlxufVxuXG52YXIgY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgIHJldHVybiB1dGlsLkJ1ZmZlclxuICAgICAgICA/IGZ1bmN0aW9uIGNyZWF0ZV9idWZmZXJfc2V0dXAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKFdyaXRlci5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyV3JpdGVyKCk7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogZnVuY3Rpb24gY3JlYXRlX2FycmF5KCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBXcml0ZXIoKTtcbiAgICAgICAgfTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB3cml0ZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtCdWZmZXJXcml0ZXJ8V3JpdGVyfSBBIHtAbGluayBCdWZmZXJXcml0ZXJ9IHdoZW4gQnVmZmVycyBhcmUgc3VwcG9ydGVkLCBvdGhlcndpc2UgYSB7QGxpbmsgV3JpdGVyfVxuICovXG5Xcml0ZXIuY3JlYXRlID0gY3JlYXRlKCk7XG5cbi8qKlxuICogQWxsb2NhdGVzIGEgYnVmZmVyIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIEJ1ZmZlciBzaXplXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gQnVmZmVyXG4gKi9cbldyaXRlci5hbGxvYyA9IGZ1bmN0aW9uIGFsbG9jKHNpemUpIHtcbiAgICByZXR1cm4gbmV3IHV0aWwuQXJyYXkoc2l6ZSk7XG59O1xuXG4vLyBVc2UgVWludDhBcnJheSBidWZmZXIgcG9vbCBpbiB0aGUgYnJvd3NlciwganVzdCBsaWtlIG5vZGUgZG9lcyB3aXRoIGJ1ZmZlcnNcbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5pZiAodXRpbC5BcnJheSAhPT0gQXJyYXkpXG4gICAgV3JpdGVyLmFsbG9jID0gdXRpbC5wb29sKFdyaXRlci5hbGxvYywgdXRpbC5BcnJheS5wcm90b3R5cGUuc3ViYXJyYXkpO1xuXG4vKipcbiAqIFB1c2hlcyBhIG5ldyBvcGVyYXRpb24gdG8gdGhlIHF1ZXVlLlxuICogQHBhcmFtIHtmdW5jdGlvbihVaW50OEFycmF5LCBudW1iZXIsICopfSBmbiBGdW5jdGlvbiB0byBjYWxsXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuIFZhbHVlIGJ5dGUgbGVuZ3RoXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEBwcml2YXRlXG4gKi9cbldyaXRlci5wcm90b3R5cGUuX3B1c2ggPSBmdW5jdGlvbiBwdXNoKGZuLCBsZW4sIHZhbCkge1xuICAgIHRoaXMudGFpbCA9IHRoaXMudGFpbC5uZXh0ID0gbmV3IE9wKGZuLCBsZW4sIHZhbCk7XG4gICAgdGhpcy5sZW4gKz0gbGVuO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gd3JpdGVCeXRlKHZhbCwgYnVmLCBwb3MpIHtcbiAgICBidWZbcG9zXSA9IHZhbCAmIDI1NTtcbn1cblxuZnVuY3Rpb24gd3JpdGVWYXJpbnQzMih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgd2hpbGUgKHZhbCA+IDEyNykge1xuICAgICAgICBidWZbcG9zKytdID0gdmFsICYgMTI3IHwgMTI4O1xuICAgICAgICB2YWwgPj4+PSA3O1xuICAgIH1cbiAgICBidWZbcG9zXSA9IHZhbDtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHZhcmludCB3cml0ZXIgb3BlcmF0aW9uIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBTY2hlZHVsZWQgdmFyaW50IHdyaXRlciBvcGVyYXRpb24uXG4gKiBAZXh0ZW5kcyBPcFxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuIFZhbHVlIGJ5dGUgbGVuZ3RoXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXG4gKiBAaWdub3JlXG4gKi9cbmZ1bmN0aW9uIFZhcmludE9wKGxlbiwgdmFsKSB7XG4gICAgdGhpcy5sZW4gPSBsZW47XG4gICAgdGhpcy5uZXh0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudmFsID0gdmFsO1xufVxuXG5WYXJpbnRPcC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE9wLnByb3RvdHlwZSk7XG5WYXJpbnRPcC5wcm90b3R5cGUuZm4gPSB3cml0ZVZhcmludDMyO1xuXG4vKipcbiAqIFdyaXRlcyBhbiB1bnNpZ25lZCAzMiBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLnVpbnQzMiA9IGZ1bmN0aW9uIHdyaXRlX3VpbnQzMih2YWx1ZSkge1xuICAgIC8vIGhlcmUsIHRoZSBjYWxsIHRvIHRoaXMucHVzaCBoYXMgYmVlbiBpbmxpbmVkIGFuZCBhIHZhcmludCBzcGVjaWZpYyBPcCBzdWJjbGFzcyBpcyB1c2VkLlxuICAgIC8vIHVpbnQzMiBpcyBieSBmYXIgdGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIG9wZXJhdGlvbiBhbmQgYmVuZWZpdHMgc2lnbmlmaWNhbnRseSBmcm9tIHRoaXMuXG4gICAgdGhpcy5sZW4gKz0gKHRoaXMudGFpbCA9IHRoaXMudGFpbC5uZXh0ID0gbmV3IFZhcmludE9wKFxuICAgICAgICAodmFsdWUgPSB2YWx1ZSA+Pj4gMClcbiAgICAgICAgICAgICAgICA8IDEyOCAgICAgICA/IDFcbiAgICAgICAgOiB2YWx1ZSA8IDE2Mzg0ICAgICA/IDJcbiAgICAgICAgOiB2YWx1ZSA8IDIwOTcxNTIgICA/IDNcbiAgICAgICAgOiB2YWx1ZSA8IDI2ODQzNTQ1NiA/IDRcbiAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgIDUsXG4gICAgdmFsdWUpKS5sZW47XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCAzMiBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuaW50MzIgPSBmdW5jdGlvbiB3cml0ZV9pbnQzMih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA8IDBcbiAgICAgICAgPyB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIDEwLCBMb25nQml0cy5mcm9tTnVtYmVyKHZhbHVlKSkgLy8gMTAgYnl0ZXMgcGVyIHNwZWNcbiAgICAgICAgOiB0aGlzLnVpbnQzMih2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIDMyIGJpdCB2YWx1ZSBhcyBhIHZhcmludCwgemlnLXphZyBlbmNvZGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zaW50MzIgPSBmdW5jdGlvbiB3cml0ZV9zaW50MzIodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy51aW50MzIoKHZhbHVlIDw8IDEgXiB2YWx1ZSA+PiAzMSkgPj4+IDApO1xufTtcblxuZnVuY3Rpb24gd3JpdGVWYXJpbnQ2NCh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgd2hpbGUgKHZhbC5oaSkge1xuICAgICAgICBidWZbcG9zKytdID0gdmFsLmxvICYgMTI3IHwgMTI4O1xuICAgICAgICB2YWwubG8gPSAodmFsLmxvID4+PiA3IHwgdmFsLmhpIDw8IDI1KSA+Pj4gMDtcbiAgICAgICAgdmFsLmhpID4+Pj0gNztcbiAgICB9XG4gICAgd2hpbGUgKHZhbC5sbyA+IDEyNykge1xuICAgICAgICBidWZbcG9zKytdID0gdmFsLmxvICYgMTI3IHwgMTI4O1xuICAgICAgICB2YWwubG8gPSB2YWwubG8gPj4+IDc7XG4gICAgfVxuICAgIGJ1Zltwb3MrK10gPSB2YWwubG87XG59XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLnVpbnQ2NCA9IGZ1bmN0aW9uIHdyaXRlX3VpbnQ2NCh2YWx1ZSkge1xuICAgIHZhciBiaXRzID0gTG9uZ0JpdHMuZnJvbSh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVWYXJpbnQ2NCwgYml0cy5sZW5ndGgoKSwgYml0cyk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLmludDY0ID0gV3JpdGVyLnByb3RvdHlwZS51aW50NjQ7XG5cbi8qKlxuICogV3JpdGVzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBhIHZhcmludCwgemlnLXphZyBlbmNvZGVkLlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYHZhbHVlYCBpcyBhIHN0cmluZyBhbmQgbm8gbG9uZyBsaWJyYXJ5IGlzIHByZXNlbnQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ludDY0ID0gZnVuY3Rpb24gd3JpdGVfc2ludDY0KHZhbHVlKSB7XG4gICAgdmFyIGJpdHMgPSBMb25nQml0cy5mcm9tKHZhbHVlKS56ekVuY29kZSgpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIGJpdHMubGVuZ3RoKCksIGJpdHMpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBib29saXNoIHZhbHVlIGFzIGEgdmFyaW50LlxuICogQHBhcmFtIHtib29sZWFufSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuYm9vbCA9IGZ1bmN0aW9uIHdyaXRlX2Jvb2wodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZUJ5dGUsIDEsIHZhbHVlID8gMSA6IDApO1xufTtcblxuZnVuY3Rpb24gd3JpdGVGaXhlZDMyKHZhbCwgYnVmLCBwb3MpIHtcbiAgICBidWZbcG9zICAgIF0gPSAgdmFsICAgICAgICAgJiAyNTU7XG4gICAgYnVmW3BvcyArIDFdID0gIHZhbCA+Pj4gOCAgICYgMjU1O1xuICAgIGJ1Zltwb3MgKyAyXSA9ICB2YWwgPj4+IDE2ICAmIDI1NTtcbiAgICBidWZbcG9zICsgM10gPSAgdmFsID4+PiAyNDtcbn1cblxuLyoqXG4gKiBXcml0ZXMgYW4gdW5zaWduZWQgMzIgYml0IHZhbHVlIGFzIGZpeGVkIDMyIGJpdHMuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmZpeGVkMzIgPSBmdW5jdGlvbiB3cml0ZV9maXhlZDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVGaXhlZDMyLCA0LCB2YWx1ZSA+Pj4gMCk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCAzMiBiaXQgdmFsdWUgYXMgZml4ZWQgMzIgYml0cy5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zZml4ZWQzMiA9IFdyaXRlci5wcm90b3R5cGUuZml4ZWQzMjtcblxuLyoqXG4gKiBXcml0ZXMgYW4gdW5zaWduZWQgNjQgYml0IHZhbHVlIGFzIGZpeGVkIDY0IGJpdHMuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maXhlZDY0ID0gZnVuY3Rpb24gd3JpdGVfZml4ZWQ2NCh2YWx1ZSkge1xuICAgIHZhciBiaXRzID0gTG9uZ0JpdHMuZnJvbSh2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVGaXhlZDMyLCA0LCBiaXRzLmxvKS5fcHVzaCh3cml0ZUZpeGVkMzIsIDQsIGJpdHMuaGkpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgNjQgYml0IHZhbHVlIGFzIGZpeGVkIDY0IGJpdHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLnNmaXhlZDY0ID0gV3JpdGVyLnByb3RvdHlwZS5maXhlZDY0O1xuXG4vKipcbiAqIFdyaXRlcyBhIGZsb2F0ICgzMiBiaXQpLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmZsb2F0ID0gZnVuY3Rpb24gd3JpdGVfZmxvYXQodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh1dGlsLmZsb2F0LndyaXRlRmxvYXRMRSwgNCwgdmFsdWUpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBkb3VibGUgKDY0IGJpdCBmbG9hdCkuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZG91YmxlID0gZnVuY3Rpb24gd3JpdGVfZG91YmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2godXRpbC5mbG9hdC53cml0ZURvdWJsZUxFLCA4LCB2YWx1ZSk7XG59O1xuXG52YXIgd3JpdGVCeXRlcyA9IHV0aWwuQXJyYXkucHJvdG90eXBlLnNldFxuICAgID8gZnVuY3Rpb24gd3JpdGVCeXRlc19zZXQodmFsLCBidWYsIHBvcykge1xuICAgICAgICBidWYuc2V0KHZhbCwgcG9zKTsgLy8gYWxzbyB3b3JrcyBmb3IgcGxhaW4gYXJyYXkgdmFsdWVzXG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgOiBmdW5jdGlvbiB3cml0ZUJ5dGVzX2Zvcih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgYnVmW3BvcyArIGldID0gdmFsW2ldO1xuICAgIH07XG5cbi8qKlxuICogV3JpdGVzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMuXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl8c3RyaW5nfSB2YWx1ZSBCdWZmZXIgb3IgYmFzZTY0IGVuY29kZWQgc3RyaW5nIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5ieXRlcyA9IGZ1bmN0aW9uIHdyaXRlX2J5dGVzKHZhbHVlKSB7XG4gICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aCA+Pj4gMDtcbiAgICBpZiAoIWxlbilcbiAgICAgICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCAwKTtcbiAgICBpZiAodXRpbC5pc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgdmFyIGJ1ZiA9IFdyaXRlci5hbGxvYyhsZW4gPSBiYXNlNjQubGVuZ3RoKHZhbHVlKSk7XG4gICAgICAgIGJhc2U2NC5kZWNvZGUodmFsdWUsIGJ1ZiwgMCk7XG4gICAgICAgIHZhbHVlID0gYnVmO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51aW50MzIobGVuKS5fcHVzaCh3cml0ZUJ5dGVzLCBsZW4sIHZhbHVlKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zdHJpbmcgPSBmdW5jdGlvbiB3cml0ZV9zdHJpbmcodmFsdWUpIHtcbiAgICB2YXIgbGVuID0gdXRmOC5sZW5ndGgodmFsdWUpO1xuICAgIHJldHVybiBsZW5cbiAgICAgICAgPyB0aGlzLnVpbnQzMihsZW4pLl9wdXNoKHV0Zjgud3JpdGUsIGxlbiwgdmFsdWUpXG4gICAgICAgIDogdGhpcy5fcHVzaCh3cml0ZUJ5dGUsIDEsIDApO1xufTtcblxuLyoqXG4gKiBGb3JrcyB0aGlzIHdyaXRlcidzIHN0YXRlIGJ5IHB1c2hpbmcgaXQgdG8gYSBzdGFjay5cbiAqIENhbGxpbmcge0BsaW5rIFdyaXRlciNyZXNldHxyZXNldH0gb3Ige0BsaW5rIFdyaXRlciNsZGVsaW18bGRlbGltfSByZXNldHMgdGhlIHdyaXRlciB0byB0aGUgcHJldmlvdXMgc3RhdGUuXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5mb3JrID0gZnVuY3Rpb24gZm9yaygpIHtcbiAgICB0aGlzLnN0YXRlcyA9IG5ldyBTdGF0ZSh0aGlzKTtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgT3Aobm9vcCwgMCwgMCk7XG4gICAgdGhpcy5sZW4gPSAwO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdGhpcyBpbnN0YW5jZSB0byB0aGUgbGFzdCBzdGF0ZS5cbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVzKSB7XG4gICAgICAgIHRoaXMuaGVhZCAgID0gdGhpcy5zdGF0ZXMuaGVhZDtcbiAgICAgICAgdGhpcy50YWlsICAgPSB0aGlzLnN0YXRlcy50YWlsO1xuICAgICAgICB0aGlzLmxlbiAgICA9IHRoaXMuc3RhdGVzLmxlbjtcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSB0aGlzLnN0YXRlcy5uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBPcChub29wLCAwLCAwKTtcbiAgICAgICAgdGhpcy5sZW4gID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlc2V0cyB0byB0aGUgbGFzdCBzdGF0ZSBhbmQgYXBwZW5kcyB0aGUgZm9yayBzdGF0ZSdzIGN1cnJlbnQgd3JpdGUgbGVuZ3RoIGFzIGEgdmFyaW50IGZvbGxvd2VkIGJ5IGl0cyBvcGVyYXRpb25zLlxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUubGRlbGltID0gZnVuY3Rpb24gbGRlbGltKCkge1xuICAgIHZhciBoZWFkID0gdGhpcy5oZWFkLFxuICAgICAgICB0YWlsID0gdGhpcy50YWlsLFxuICAgICAgICBsZW4gID0gdGhpcy5sZW47XG4gICAgdGhpcy5yZXNldCgpLnVpbnQzMihsZW4pO1xuICAgIGlmIChsZW4pIHtcbiAgICAgICAgdGhpcy50YWlsLm5leHQgPSBoZWFkLm5leHQ7IC8vIHNraXAgbm9vcFxuICAgICAgICB0aGlzLnRhaWwgPSB0YWlsO1xuICAgICAgICB0aGlzLmxlbiArPSBsZW47XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBGaW5pc2hlcyB0aGUgd3JpdGUgb3BlcmF0aW9uLlxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEZpbmlzaGVkIGJ1ZmZlclxuICovXG5Xcml0ZXIucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICB2YXIgaGVhZCA9IHRoaXMuaGVhZC5uZXh0LCAvLyBza2lwIG5vb3BcbiAgICAgICAgYnVmICA9IHRoaXMuY29uc3RydWN0b3IuYWxsb2ModGhpcy5sZW4pLFxuICAgICAgICBwb3MgID0gMDtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgICBoZWFkLmZuKGhlYWQudmFsLCBidWYsIHBvcyk7XG4gICAgICAgIHBvcyArPSBoZWFkLmxlbjtcbiAgICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICB9XG4gICAgLy8gdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICByZXR1cm4gYnVmO1xufTtcblxuV3JpdGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbihCdWZmZXJXcml0ZXJfKSB7XG4gICAgQnVmZmVyV3JpdGVyID0gQnVmZmVyV3JpdGVyXztcbiAgICBXcml0ZXIuY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgQnVmZmVyV3JpdGVyLl9jb25maWd1cmUoKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyV3JpdGVyO1xuXG4vLyBleHRlbmRzIFdyaXRlclxudmFyIFdyaXRlciA9IHJlcXVpcmUoXCIuL3dyaXRlclwiKTtcbihCdWZmZXJXcml0ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXcml0ZXIucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBCdWZmZXJXcml0ZXI7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgYnVmZmVyIHdyaXRlciBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgd3JpdGVyIHVzaW5nIG5vZGUgYnVmZmVycy5cbiAqIEBleHRlbmRzIFdyaXRlclxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEJ1ZmZlcldyaXRlcigpIHtcbiAgICBXcml0ZXIuY2FsbCh0aGlzKTtcbn1cblxuQnVmZmVyV3JpdGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQWxsb2NhdGVzIGEgYnVmZmVyIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBCdWZmZXIgc2l6ZVxuICAgICAqIEByZXR1cm5zIHtCdWZmZXJ9IEJ1ZmZlclxuICAgICAqL1xuICAgIEJ1ZmZlcldyaXRlci5hbGxvYyA9IHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZTtcblxuICAgIEJ1ZmZlcldyaXRlci53cml0ZUJ5dGVzQnVmZmVyID0gdXRpbC5CdWZmZXIgJiYgdXRpbC5CdWZmZXIucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiB1dGlsLkJ1ZmZlci5wcm90b3R5cGUuc2V0Lm5hbWUgPT09IFwic2V0XCJcbiAgICAgICAgPyBmdW5jdGlvbiB3cml0ZUJ5dGVzQnVmZmVyX3NldCh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgICAgICAgYnVmLnNldCh2YWwsIHBvcyk7IC8vIGZhc3RlciB0aGFuIGNvcHkgKHJlcXVpcmVzIG5vZGUgPj0gNCB3aGVyZSBCdWZmZXJzIGV4dGVuZCBVaW50OEFycmF5IGFuZCBzZXQgaXMgcHJvcGVybHkgaW5oZXJpdGVkKVxuICAgICAgICAgIC8vIGFsc28gd29ya3MgZm9yIHBsYWluIGFycmF5IHZhbHVlc1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogZnVuY3Rpb24gd3JpdGVCeXRlc0J1ZmZlcl9jb3B5KHZhbCwgYnVmLCBwb3MpIHtcbiAgICAgICAgICBpZiAodmFsLmNvcHkpIC8vIEJ1ZmZlciB2YWx1ZXNcbiAgICAgICAgICAgIHZhbC5jb3B5KGJ1ZiwgcG9zLCAwLCB2YWwubGVuZ3RoKTtcbiAgICAgICAgICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDspIC8vIHBsYWluIGFycmF5IHZhbHVlc1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IHZhbFtpKytdO1xuICAgICAgICB9O1xufTtcblxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJXcml0ZXIucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gd3JpdGVfYnl0ZXNfYnVmZmVyKHZhbHVlKSB7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKVxuICAgICAgICB2YWx1ZSA9IHV0aWwuX0J1ZmZlcl9mcm9tKHZhbHVlLCBcImJhc2U2NFwiKTtcbiAgICB2YXIgbGVuID0gdmFsdWUubGVuZ3RoID4+PiAwO1xuICAgIHRoaXMudWludDMyKGxlbik7XG4gICAgaWYgKGxlbilcbiAgICAgICAgdGhpcy5fcHVzaChCdWZmZXJXcml0ZXIud3JpdGVCeXRlc0J1ZmZlciwgbGVuLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiB3cml0ZVN0cmluZ0J1ZmZlcih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgaWYgKHZhbC5sZW5ndGggPCA0MCkgLy8gcGxhaW4ganMgaXMgZmFzdGVyIGZvciBzaG9ydCBzdHJpbmdzIChwcm9iYWJseSBkdWUgdG8gcmVkdW5kYW50IGFzc2VydGlvbnMpXG4gICAgICAgIHV0aWwudXRmOC53cml0ZSh2YWwsIGJ1ZiwgcG9zKTtcbiAgICBlbHNlIGlmIChidWYudXRmOFdyaXRlKVxuICAgICAgICBidWYudXRmOFdyaXRlKHZhbCwgcG9zKTtcbiAgICBlbHNlXG4gICAgICAgIGJ1Zi53cml0ZSh2YWwsIHBvcyk7XG59XG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cbkJ1ZmZlcldyaXRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gd3JpdGVfc3RyaW5nX2J1ZmZlcih2YWx1ZSkge1xuICAgIHZhciBsZW4gPSB1dGlsLkJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgICB0aGlzLnVpbnQzMihsZW4pO1xuICAgIGlmIChsZW4pXG4gICAgICAgIHRoaXMuX3B1c2god3JpdGVTdHJpbmdCdWZmZXIsIGxlbiwgdmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuXG4vKipcbiAqIEZpbmlzaGVzIHRoZSB3cml0ZSBvcGVyYXRpb24uXG4gKiBAbmFtZSBCdWZmZXJXcml0ZXIjZmluaXNoXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IEZpbmlzaGVkIGJ1ZmZlclxuICovXG5cbkJ1ZmZlcldyaXRlci5fY29uZmlndXJlKCk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gUmVhZGVyO1xuXG52YXIgdXRpbCAgICAgID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG52YXIgQnVmZmVyUmVhZGVyOyAvLyBjeWNsaWNcblxudmFyIExvbmdCaXRzICA9IHV0aWwuTG9uZ0JpdHMsXG4gICAgdXRmOCAgICAgID0gdXRpbC51dGY4O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gaW5kZXhPdXRPZlJhbmdlKHJlYWRlciwgd3JpdGVMZW5ndGgpIHtcbiAgICByZXR1cm4gUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZTogXCIgKyByZWFkZXIucG9zICsgXCIgKyBcIiArICh3cml0ZUxlbmd0aCB8fCAxKSArIFwiID4gXCIgKyByZWFkZXIubGVuKTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IHJlYWRlciBpbnN0YW5jZSB1c2luZyB0aGUgc3BlY2lmaWVkIGJ1ZmZlci5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgcmVhZGVyIHVzaW5nIGBVaW50OEFycmF5YCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBgQXJyYXlgLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBCdWZmZXIgdG8gcmVhZCBmcm9tXG4gKi9cbmZ1bmN0aW9uIFJlYWRlcihidWZmZXIpIHtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyLlxuICAgICAqIEB0eXBlIHtVaW50OEFycmF5fVxuICAgICAqL1xuICAgIHRoaXMuYnVmID0gYnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogUmVhZCBidWZmZXIgcG9zaXRpb24uXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnBvcyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlciBsZW5ndGguXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxlbiA9IGJ1ZmZlci5sZW5ndGg7XG59XG5cbnZhciBjcmVhdGVfYXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gZnVuY3Rpb24gY3JlYXRlX3R5cGVkX2FycmF5KGJ1ZmZlcikge1xuICAgICAgICBpZiAoYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBBcnJheS5pc0FycmF5KGJ1ZmZlcikpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlYWRlcihidWZmZXIpO1xuICAgICAgICB0aHJvdyBFcnJvcihcImlsbGVnYWwgYnVmZmVyXCIpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIDogZnVuY3Rpb24gY3JlYXRlX2FycmF5KGJ1ZmZlcikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidWZmZXIpKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFkZXIoYnVmZmVyKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGJ1ZmZlclwiKTtcbiAgICB9O1xuXG52YXIgY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgIHJldHVybiB1dGlsLkJ1ZmZlclxuICAgICAgICA/IGZ1bmN0aW9uIGNyZWF0ZV9idWZmZXJfc2V0dXAoYnVmZmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWRlci5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyKGJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB1dGlsLkJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IEJ1ZmZlclJlYWRlcihidWZmZXIpXG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlX2FycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICB9KShidWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogY3JlYXRlX2FycmF5O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJlYWRlciB1c2luZyB0aGUgc3BlY2lmaWVkIGJ1ZmZlci5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtVaW50OEFycmF5fEJ1ZmZlcn0gYnVmZmVyIEJ1ZmZlciB0byByZWFkIGZyb21cbiAqIEByZXR1cm5zIHtSZWFkZXJ8QnVmZmVyUmVhZGVyfSBBIHtAbGluayBCdWZmZXJSZWFkZXJ9IGlmIGBidWZmZXJgIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgYSB7QGxpbmsgUmVhZGVyfVxuICogQHRocm93cyB7RXJyb3J9IElmIGBidWZmZXJgIGlzIG5vdCBhIHZhbGlkIGJ1ZmZlclxuICovXG5SZWFkZXIuY3JlYXRlID0gY3JlYXRlKCk7XG5cblJlYWRlci5wcm90b3R5cGUuX3NsaWNlID0gdXRpbC5BcnJheS5wcm90b3R5cGUuc3ViYXJyYXkgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdXRpbC5BcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbi8qKlxuICogUmVhZHMgYSB2YXJpbnQgYXMgYW4gdW5zaWduZWQgMzIgYml0IHZhbHVlLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUudWludDMyID0gKGZ1bmN0aW9uIHJlYWRfdWludDMyX3NldHVwKCkge1xuICAgIHZhciB2YWx1ZSA9IDQyOTQ5NjcyOTU7IC8vIG9wdGltaXplciB0eXBlLWhpbnQsIHRlbmRzIHRvIGRlb3B0IG90aGVyd2lzZSAoPyEpXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHJlYWRfdWludDMyKCkge1xuICAgICAgICB2YWx1ZSA9ICggICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcgICAgICAgKSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgIDcpID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAxNCkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IDIxKSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmICAxNSkgPDwgMjgpID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCh0aGlzLnBvcyArPSA1KSA+IHRoaXMubGVuKSB7XG4gICAgICAgICAgICB0aGlzLnBvcyA9IHRoaXMubGVuO1xuICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDEwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbn0pKCk7XG5cbi8qKlxuICogUmVhZHMgYSB2YXJpbnQgYXMgYSBzaWduZWQgMzIgYml0IHZhbHVlLlxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmludDMyID0gZnVuY3Rpb24gcmVhZF9pbnQzMigpIHtcbiAgICByZXR1cm4gdGhpcy51aW50MzIoKSB8IDA7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgemlnLXphZyBlbmNvZGVkIHZhcmludCBhcyBhIHNpZ25lZCAzMiBiaXQgdmFsdWUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuc2ludDMyID0gZnVuY3Rpb24gcmVhZF9zaW50MzIoKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy51aW50MzIoKTtcbiAgICByZXR1cm4gdmFsdWUgPj4+IDEgXiAtKHZhbHVlICYgMSkgfCAwO1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8taW52YWxpZC10aGlzICovXG5cbmZ1bmN0aW9uIHJlYWRMb25nVmFyaW50KCkge1xuICAgIC8vIHRlbmRzIHRvIGRlb3B0IHdpdGggbG9jYWwgdmFycyBmb3Igb2N0ZXQgZXRjLlxuICAgIHZhciBiaXRzID0gbmV3IExvbmdCaXRzKDAsIDApO1xuICAgIHZhciBpID0gMDtcbiAgICBpZiAodGhpcy5sZW4gLSB0aGlzLnBvcyA+IDQpIHsgLy8gZmFzdCByb3V0ZSAobG8pXG4gICAgICAgIGZvciAoOyBpIDwgNDsgKytpKSB7XG4gICAgICAgICAgICAvLyAxc3QuLjR0aFxuICAgICAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgaSAqIDcpID4+PiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIDV0aFxuICAgICAgICBiaXRzLmxvID0gKGJpdHMubG8gfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAyOCkgPj4+IDA7XG4gICAgICAgIGJpdHMuaGkgPSAoYml0cy5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpID4+ICA0KSA+Pj4gMDtcbiAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIGkgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoOyBpIDwgMzsgKytpKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmxlbilcbiAgICAgICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcyk7XG4gICAgICAgICAgICAvLyAxc3QuLjN0aFxuICAgICAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgaSAqIDcpID4+PiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIDR0aFxuICAgICAgICBiaXRzLmxvID0gKGJpdHMubG8gfCAodGhpcy5idWZbdGhpcy5wb3MrK10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgfVxuICAgIGlmICh0aGlzLmxlbiAtIHRoaXMucG9zID4gNCkgeyAvLyBmYXN0IHJvdXRlIChoaSlcbiAgICAgICAgZm9yICg7IGkgPCA1OyArK2kpIHtcbiAgICAgICAgICAgIC8vIDZ0aC4uMTB0aFxuICAgICAgICAgICAgYml0cy5oaSA9IChiaXRzLmhpIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgaSAqIDcgKyAzKSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoOyBpIDwgNTsgKytpKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmxlbilcbiAgICAgICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcyk7XG4gICAgICAgICAgICAvLyA2dGguLjEwdGhcbiAgICAgICAgICAgIGJpdHMuaGkgPSAoYml0cy5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3ICsgMykgPj4+IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aHJvdyBFcnJvcihcImludmFsaWQgdmFyaW50IGVuY29kaW5nXCIpO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZS5cbiAqIEBuYW1lIFJlYWRlciNpbnQ2NFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7TG9uZ30gVmFsdWUgcmVhZFxuICovXG5cbi8qKlxuICogUmVhZHMgYSB2YXJpbnQgYXMgYW4gdW5zaWduZWQgNjQgYml0IHZhbHVlLlxuICogQG5hbWUgUmVhZGVyI3VpbnQ2NFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7TG9uZ30gVmFsdWUgcmVhZFxuICovXG5cbi8qKlxuICogUmVhZHMgYSB6aWctemFnIGVuY29kZWQgdmFyaW50IGFzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZS5cbiAqIEBuYW1lIFJlYWRlciNzaW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGEgYm9vbGVhbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuYm9vbCA9IGZ1bmN0aW9uIHJlYWRfYm9vbCgpIHtcbiAgICByZXR1cm4gdGhpcy51aW50MzIoKSAhPT0gMDtcbn07XG5cbmZ1bmN0aW9uIHJlYWRGaXhlZDMyX2VuZChidWYsIGVuZCkgeyAvLyBub3RlIHRoYXQgdGhpcyB1c2VzIGBlbmRgLCBub3QgYHBvc2BcbiAgICByZXR1cm4gKGJ1ZltlbmQgLSA0XVxuICAgICAgICAgIHwgYnVmW2VuZCAtIDNdIDw8IDhcbiAgICAgICAgICB8IGJ1ZltlbmQgLSAyXSA8PCAxNlxuICAgICAgICAgIHwgYnVmW2VuZCAtIDFdIDw8IDI0KSA+Pj4gMDtcbn1cblxuLyoqXG4gKiBSZWFkcyBmaXhlZCAzMiBiaXRzIGFzIGFuIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLlxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmZpeGVkMzIgPSBmdW5jdGlvbiByZWFkX2ZpeGVkMzIoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA0ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHJldHVybiByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpO1xufTtcblxuLyoqXG4gKiBSZWFkcyBmaXhlZCAzMiBiaXRzIGFzIGEgc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLlxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNmaXhlZDMyID0gZnVuY3Rpb24gcmVhZF9zZml4ZWQzMigpIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDQgPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDQpO1xuXG4gICAgcmV0dXJuIHJlYWRGaXhlZDMyX2VuZCh0aGlzLmJ1ZiwgdGhpcy5wb3MgKz0gNCkgfCAwO1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8taW52YWxpZC10aGlzICovXG5cbmZ1bmN0aW9uIHJlYWRGaXhlZDY0KC8qIHRoaXM6IFJlYWRlciAqLykge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgOCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgOCk7XG5cbiAgICByZXR1cm4gbmV3IExvbmdCaXRzKHJlYWRGaXhlZDMyX2VuZCh0aGlzLmJ1ZiwgdGhpcy5wb3MgKz0gNCksIHJlYWRGaXhlZDMyX2VuZCh0aGlzLmJ1ZiwgdGhpcy5wb3MgKz0gNCkpO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG4vKipcbiAqIFJlYWRzIGZpeGVkIDY0IGJpdHMuXG4gKiBAbmFtZSBSZWFkZXIjZml4ZWQ2NFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7TG9uZ30gVmFsdWUgcmVhZFxuICovXG5cbi8qKlxuICogUmVhZHMgemlnLXphZyBlbmNvZGVkIGZpeGVkIDY0IGJpdHMuXG4gKiBAbmFtZSBSZWFkZXIjc2ZpeGVkNjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgZmxvYXQgKDMyIGJpdCkgYXMgYSBudW1iZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5mbG9hdCA9IGZ1bmN0aW9uIHJlYWRfZmxvYXQoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA0ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHZhciB2YWx1ZSA9IHV0aWwuZmxvYXQucmVhZEZsb2F0TEUodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgICB0aGlzLnBvcyArPSA0O1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbi8qKlxuICogUmVhZHMgYSBkb3VibGUgKDY0IGJpdCBmbG9hdCkgYXMgYSBudW1iZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5kb3VibGUgPSBmdW5jdGlvbiByZWFkX2RvdWJsZSgpIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDggPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDQpO1xuXG4gICAgdmFyIHZhbHVlID0gdXRpbC5mbG9hdC5yZWFkRG91YmxlTEUodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgICB0aGlzLnBvcyArPSA4O1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbi8qKlxuICogUmVhZHMgYSBzZXF1ZW5jZSBvZiBieXRlcyBwcmVjZWVkZWQgYnkgaXRzIGxlbmd0aCBhcyBhIHZhcmludC5cbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuYnl0ZXMgPSBmdW5jdGlvbiByZWFkX2J5dGVzKCkge1xuICAgIHZhciBsZW5ndGggPSB0aGlzLnVpbnQzMigpLFxuICAgICAgICBzdGFydCAgPSB0aGlzLnBvcyxcbiAgICAgICAgZW5kICAgID0gdGhpcy5wb3MgKyBsZW5ndGg7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZW5kID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCBsZW5ndGgpO1xuXG4gICAgdGhpcy5wb3MgKz0gbGVuZ3RoO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuYnVmKSkgLy8gcGxhaW4gYXJyYXlcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIHJldHVybiBzdGFydCA9PT0gZW5kIC8vIGZpeCBmb3IgSUUgMTAvV2luOCBhbmQgb3RoZXJzJyBzdWJhcnJheSByZXR1cm5pbmcgYXJyYXkgb2Ygc2l6ZSAxXG4gICAgICAgID8gbmV3IHRoaXMuYnVmLmNvbnN0cnVjdG9yKDApXG4gICAgICAgIDogdGhpcy5fc2xpY2UuY2FsbCh0aGlzLmJ1Ziwgc3RhcnQsIGVuZCk7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc3RyaW5nIHByZWNlZWRlZCBieSBpdHMgYnl0ZSBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gcmVhZF9zdHJpbmcoKSB7XG4gICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcygpO1xuICAgIHJldHVybiB1dGY4LnJlYWQoYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCk7XG59O1xuXG4vKipcbiAqIFNraXBzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzIGlmIHNwZWNpZmllZCwgb3RoZXJ3aXNlIHNraXBzIGEgdmFyaW50LlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIExlbmd0aCBpZiBrbm93biwgb3RoZXJ3aXNlIGEgdmFyaW50IGlzIGFzc3VtZWRcbiAqIEByZXR1cm5zIHtSZWFkZXJ9IGB0aGlzYFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbiBza2lwKGxlbmd0aCkge1xuICAgIGlmICh0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAodGhpcy5wb3MgKyBsZW5ndGggPiB0aGlzLmxlbilcbiAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCBsZW5ndGgpO1xuICAgICAgICB0aGlzLnBvcyArPSBsZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICB9IHdoaWxlICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSAmIDEyOCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTa2lwcyB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBzcGVjaWZpZWQgd2lyZSB0eXBlLlxuICogQHBhcmFtIHtudW1iZXJ9IHdpcmVUeXBlIFdpcmUgdHlwZSByZWNlaXZlZFxuICogQHJldHVybnMge1JlYWRlcn0gYHRoaXNgXG4gKi9cblJlYWRlci5wcm90b3R5cGUuc2tpcFR5cGUgPSBmdW5jdGlvbih3aXJlVHlwZSkge1xuICAgIHN3aXRjaCAod2lyZVR5cGUpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdGhpcy5za2lwKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5za2lwKDgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuc2tpcCh0aGlzLnVpbnQzMigpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB3aGlsZSAoKHdpcmVUeXBlID0gdGhpcy51aW50MzIoKSAmIDcpICE9PSA0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5za2lwVHlwZSh3aXJlVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgdGhpcy5za2lwKDQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiaW52YWxpZCB3aXJlIHR5cGUgXCIgKyB3aXJlVHlwZSArIFwiIGF0IG9mZnNldCBcIiArIHRoaXMucG9zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5SZWFkZXIuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uKEJ1ZmZlclJlYWRlcl8pIHtcbiAgICBCdWZmZXJSZWFkZXIgPSBCdWZmZXJSZWFkZXJfO1xuICAgIFJlYWRlci5jcmVhdGUgPSBjcmVhdGUoKTtcbiAgICBCdWZmZXJSZWFkZXIuX2NvbmZpZ3VyZSgpO1xuXG4gICAgdmFyIGZuID0gdXRpbC5Mb25nID8gXCJ0b0xvbmdcIiA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIFwidG9OdW1iZXJcIjtcbiAgICB1dGlsLm1lcmdlKFJlYWRlci5wcm90b3R5cGUsIHtcblxuICAgICAgICBpbnQ2NDogZnVuY3Rpb24gcmVhZF9pbnQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpW2ZuXShmYWxzZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdWludDY0OiBmdW5jdGlvbiByZWFkX3VpbnQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpW2ZuXSh0cnVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzaW50NjQ6IGZ1bmN0aW9uIHJlYWRfc2ludDY0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRMb25nVmFyaW50LmNhbGwodGhpcykuenpEZWNvZGUoKVtmbl0oZmFsc2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGZpeGVkNjQ6IGZ1bmN0aW9uIHJlYWRfZml4ZWQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkRml4ZWQ2NC5jYWxsKHRoaXMpW2ZuXSh0cnVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZml4ZWQ2NDogZnVuY3Rpb24gcmVhZF9zZml4ZWQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkRml4ZWQ2NC5jYWxsKHRoaXMpW2ZuXShmYWxzZSk7XG4gICAgICAgIH1cblxuICAgIH0pO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJSZWFkZXI7XG5cbi8vIGV4dGVuZHMgUmVhZGVyXG52YXIgUmVhZGVyID0gcmVxdWlyZShcIi4vcmVhZGVyXCIpO1xuKEJ1ZmZlclJlYWRlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlYWRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IEJ1ZmZlclJlYWRlcjtcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBidWZmZXIgcmVhZGVyIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBXaXJlIGZvcm1hdCByZWFkZXIgdXNpbmcgbm9kZSBidWZmZXJzLlxuICogQGV4dGVuZHMgUmVhZGVyXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgQnVmZmVyIHRvIHJlYWQgZnJvbVxuICovXG5mdW5jdGlvbiBCdWZmZXJSZWFkZXIoYnVmZmVyKSB7XG4gICAgUmVhZGVyLmNhbGwodGhpcywgYnVmZmVyKTtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyLlxuICAgICAqIEBuYW1lIEJ1ZmZlclJlYWRlciNidWZcbiAgICAgKiBAdHlwZSB7QnVmZmVyfVxuICAgICAqL1xufVxuXG5CdWZmZXJSZWFkZXIuX2NvbmZpZ3VyZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh1dGlsLkJ1ZmZlcilcbiAgICAgICAgQnVmZmVyUmVhZGVyLnByb3RvdHlwZS5fc2xpY2UgPSB1dGlsLkJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG59O1xuXG5cbi8qKlxuICogQG92ZXJyaWRlXG4gKi9cbkJ1ZmZlclJlYWRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gcmVhZF9zdHJpbmdfYnVmZmVyKCkge1xuICAgIHZhciBsZW4gPSB0aGlzLnVpbnQzMigpOyAvLyBtb2RpZmllcyBwb3NcbiAgICByZXR1cm4gdGhpcy5idWYudXRmOFNsaWNlXG4gICAgICAgID8gdGhpcy5idWYudXRmOFNsaWNlKHRoaXMucG9zLCB0aGlzLnBvcyA9IE1hdGgubWluKHRoaXMucG9zICsgbGVuLCB0aGlzLmxlbikpXG4gICAgICAgIDogdGhpcy5idWYudG9TdHJpbmcoXCJ1dGYtOFwiLCB0aGlzLnBvcywgdGhpcy5wb3MgPSBNYXRoLm1pbih0aGlzLnBvcyArIGxlbiwgdGhpcy5sZW4pKTtcbn07XG5cbi8qKlxuICogUmVhZHMgYSBzZXF1ZW5jZSBvZiBieXRlcyBwcmVjZWVkZWQgYnkgaXRzIGxlbmd0aCBhcyBhIHZhcmludC5cbiAqIEBuYW1lIEJ1ZmZlclJlYWRlciNieXRlc1xuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBWYWx1ZSByZWFkXG4gKi9cblxuQnVmZmVyUmVhZGVyLl9jb25maWd1cmUoKTtcbiIsIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBTZXJ2aWNlO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuLi91dGlsL21pbmltYWxcIik7XG5cbi8vIEV4dGVuZHMgRXZlbnRFbWl0dGVyXG4oU2VydmljZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHV0aWwuRXZlbnRFbWl0dGVyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gU2VydmljZTtcblxuLyoqXG4gKiBBIHNlcnZpY2UgbWV0aG9kIGNhbGxiYWNrIGFzIHVzZWQgYnkge0BsaW5rIHJwYy5TZXJ2aWNlTWV0aG9kfFNlcnZpY2VNZXRob2R9LlxuICpcbiAqIERpZmZlcnMgZnJvbSB7QGxpbmsgUlBDSW1wbENhbGxiYWNrfSBpbiB0aGF0IGl0IGlzIGFuIGFjdHVhbCBjYWxsYmFjayBvZiBhIHNlcnZpY2UgbWV0aG9kIHdoaWNoIG1heSBub3QgcmV0dXJuIGByZXNwb25zZSA9IG51bGxgLlxuICogQHR5cGVkZWYgcnBjLlNlcnZpY2VNZXRob2RDYWxsYmFja1xuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge0Vycm9yfG51bGx9IGVycm9yIEVycm9yLCBpZiBhbnlcbiAqIEBwYXJhbSB7VFJlc30gW3Jlc3BvbnNlXSBSZXNwb25zZSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbi8qKlxuICogQSBzZXJ2aWNlIG1ldGhvZCBwYXJ0IG9mIGEge0BsaW5rIHJwYy5TZXJ2aWNlfSBhcyBjcmVhdGVkIGJ5IHtAbGluayBTZXJ2aWNlLmNyZWF0ZX0uXG4gKiBAdHlwZWRlZiBycGMuU2VydmljZU1ldGhvZFxuICogQHRlbXBsYXRlIFRSZXEgZXh0ZW5kcyBNZXNzYWdlPFRSZXE+XG4gKiBAdGVtcGxhdGUgVFJlcyBleHRlbmRzIE1lc3NhZ2U8VFJlcz5cbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7VFJlcXxQcm9wZXJ0aWVzPFRSZXE+fSByZXF1ZXN0IFJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3RcbiAqIEBwYXJhbSB7cnBjLlNlcnZpY2VNZXRob2RDYWxsYmFjazxUUmVzPn0gW2NhbGxiYWNrXSBOb2RlLXN0eWxlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIHRoZSBlcnJvciwgaWYgYW55LCBhbmQgdGhlIHJlc3BvbnNlIG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtQcm9taXNlPE1lc3NhZ2U8VFJlcz4+fSBQcm9taXNlIGlmIGBjYWxsYmFja2AgaGFzIGJlZW4gb21pdHRlZCwgb3RoZXJ3aXNlIGB1bmRlZmluZWRgXG4gKi9cblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IFJQQyBzZXJ2aWNlIGluc3RhbmNlLlxuICogQGNsYXNzZGVzYyBBbiBSUEMgc2VydmljZSBhcyByZXR1cm5lZCBieSB7QGxpbmsgU2VydmljZSNjcmVhdGV9LlxuICogQGV4cG9ydHMgcnBjLlNlcnZpY2VcbiAqIEBleHRlbmRzIHV0aWwuRXZlbnRFbWl0dGVyXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7UlBDSW1wbH0gcnBjSW1wbCBSUEMgaW1wbGVtZW50YXRpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlcXVlc3REZWxpbWl0ZWQ9ZmFsc2VdIFdoZXRoZXIgcmVxdWVzdHMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Jlc3BvbnNlRGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgbGVuZ3RoLWRlbGltaXRlZFxuICovXG5mdW5jdGlvbiBTZXJ2aWNlKHJwY0ltcGwsIHJlcXVlc3REZWxpbWl0ZWQsIHJlc3BvbnNlRGVsaW1pdGVkKSB7XG5cbiAgICBpZiAodHlwZW9mIHJwY0ltcGwgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwicnBjSW1wbCBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG5cbiAgICB1dGlsLkV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogUlBDIGltcGxlbWVudGF0aW9uLiBCZWNvbWVzIGBudWxsYCBvbmNlIHRoZSBzZXJ2aWNlIGlzIGVuZGVkLlxuICAgICAqIEB0eXBlIHtSUENJbXBsfG51bGx9XG4gICAgICovXG4gICAgdGhpcy5ycGNJbXBsID0gcnBjSW1wbDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgcmVxdWVzdHMgYXJlIGxlbmd0aC1kZWxpbWl0ZWQuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXF1ZXN0RGVsaW1pdGVkID0gQm9vbGVhbihyZXF1ZXN0RGVsaW1pdGVkKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgcmVzcG9uc2VzIGFyZSBsZW5ndGgtZGVsaW1pdGVkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVzcG9uc2VEZWxpbWl0ZWQgPSBCb29sZWFuKHJlc3BvbnNlRGVsaW1pdGVkKTtcbn1cblxuLyoqXG4gKiBDYWxscyBhIHNlcnZpY2UgbWV0aG9kIHRocm91Z2gge0BsaW5rIHJwYy5TZXJ2aWNlI3JwY0ltcGx8cnBjSW1wbH0uXG4gKiBAcGFyYW0ge01ldGhvZHxycGMuU2VydmljZU1ldGhvZDxUUmVxLFRSZXM+fSBtZXRob2QgUmVmbGVjdGVkIG9yIHN0YXRpYyBtZXRob2RcbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8VFJlcT59IHJlcXVlc3RDdG9yIFJlcXVlc3QgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8VFJlcz59IHJlc3BvbnNlQ3RvciBSZXNwb25zZSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtUUmVxfFByb3BlcnRpZXM8VFJlcT59IHJlcXVlc3QgUmVxdWVzdCBtZXNzYWdlIG9yIHBsYWluIG9iamVjdFxuICogQHBhcmFtIHtycGMuU2VydmljZU1ldGhvZENhbGxiYWNrPFRSZXM+fSBjYWxsYmFjayBTZXJ2aWNlIGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogQHRlbXBsYXRlIFRSZXEgZXh0ZW5kcyBNZXNzYWdlPFRSZXE+XG4gKiBAdGVtcGxhdGUgVFJlcyBleHRlbmRzIE1lc3NhZ2U8VFJlcz5cbiAqL1xuU2VydmljZS5wcm90b3R5cGUucnBjQ2FsbCA9IGZ1bmN0aW9uIHJwY0NhbGwobWV0aG9kLCByZXF1ZXN0Q3RvciwgcmVzcG9uc2VDdG9yLCByZXF1ZXN0LCBjYWxsYmFjaykge1xuXG4gICAgaWYgKCFyZXF1ZXN0KVxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJyZXF1ZXN0IG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICghY2FsbGJhY2spXG4gICAgICAgIHJldHVybiB1dGlsLmFzUHJvbWlzZShycGNDYWxsLCBzZWxmLCBtZXRob2QsIHJlcXVlc3RDdG9yLCByZXNwb25zZUN0b3IsIHJlcXVlc3QpO1xuXG4gICAgaWYgKCFzZWxmLnJwY0ltcGwpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2soRXJyb3IoXCJhbHJlYWR5IGVuZGVkXCIpKTsgfSwgMCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHNlbGYucnBjSW1wbChcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgIHJlcXVlc3RDdG9yW3NlbGYucmVxdWVzdERlbGltaXRlZCA/IFwiZW5jb2RlRGVsaW1pdGVkXCIgOiBcImVuY29kZVwiXShyZXF1ZXN0KS5maW5pc2goKSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJwY0NhbGxiYWNrKGVyciwgcmVzcG9uc2UpIHtcblxuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyLCBtZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lbmQoLyogZW5kZWRCeVJQQyAqLyB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIShyZXNwb25zZSBpbnN0YW5jZW9mIHJlc3BvbnNlQ3RvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2VDdG9yW3NlbGYucmVzcG9uc2VEZWxpbWl0ZWQgPyBcImRlY29kZURlbGltaXRlZFwiIDogXCJkZWNvZGVcIl0ocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVyciwgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2VsZi5lbWl0KFwiZGF0YVwiLCByZXNwb25zZSwgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnIsIG1ldGhvZCk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKGVycik7IH0sIDApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn07XG5cbi8qKlxuICogRW5kcyB0aGlzIHNlcnZpY2UgYW5kIGVtaXRzIHRoZSBgZW5kYCBldmVudC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2VuZGVkQnlSUEM9ZmFsc2VdIFdoZXRoZXIgdGhlIHNlcnZpY2UgaGFzIGJlZW4gZW5kZWQgYnkgdGhlIFJQQyBpbXBsZW1lbnRhdGlvbi5cbiAqIEByZXR1cm5zIHtycGMuU2VydmljZX0gYHRoaXNgXG4gKi9cblNlcnZpY2UucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIGVuZChlbmRlZEJ5UlBDKSB7XG4gICAgaWYgKHRoaXMucnBjSW1wbCkge1xuICAgICAgICBpZiAoIWVuZGVkQnlSUEMpIC8vIHNpZ25hbCBlbmQgdG8gcnBjSW1wbFxuICAgICAgICAgICAgdGhpcy5ycGNJbXBsKG51bGwsIG51bGwsIG51bGwpO1xuICAgICAgICB0aGlzLnJwY0ltcGwgPSBudWxsO1xuICAgICAgICB0aGlzLmVtaXQoXCJlbmRcIikub2ZmKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFN0cmVhbWluZyBSUEMgaGVscGVycy5cbiAqIEBuYW1lc3BhY2VcbiAqL1xudmFyIHJwYyA9IGV4cG9ydHM7XG5cbi8qKlxuICogUlBDIGltcGxlbWVudGF0aW9uIHBhc3NlZCB0byB7QGxpbmsgU2VydmljZSNjcmVhdGV9IHBlcmZvcm1pbmcgYSBzZXJ2aWNlIHJlcXVlc3Qgb24gbmV0d29yayBsZXZlbCwgaS5lLiBieSB1dGlsaXppbmcgaHR0cCByZXF1ZXN0cyBvciB3ZWJzb2NrZXRzLlxuICogQHR5cGVkZWYgUlBDSW1wbFxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtNZXRob2R8cnBjLlNlcnZpY2VNZXRob2Q8TWVzc2FnZTx7fT4sTWVzc2FnZTx7fT4+fSBtZXRob2QgUmVmbGVjdGVkIG9yIHN0YXRpYyBtZXRob2QgYmVpbmcgY2FsbGVkXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHJlcXVlc3REYXRhIFJlcXVlc3QgZGF0YVxuICogQHBhcmFtIHtSUENJbXBsQ2FsbGJhY2t9IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogQGV4YW1wbGVcbiAqIGZ1bmN0aW9uIHJwY0ltcGwobWV0aG9kLCByZXF1ZXN0RGF0YSwgY2FsbGJhY2spIHtcbiAqICAgICBpZiAocHJvdG9idWYudXRpbC5sY0ZpcnN0KG1ldGhvZC5uYW1lKSAhPT0gXCJteU1ldGhvZFwiKSAvLyBjb21wYXRpYmxlIHdpdGggc3RhdGljIGNvZGVcbiAqICAgICAgICAgdGhyb3cgRXJyb3IoXCJubyBzdWNoIG1ldGhvZFwiKTtcbiAqICAgICBhc3luY2hyb25vdXNseU9idGFpbkFSZXNwb25zZShyZXF1ZXN0RGF0YSwgZnVuY3Rpb24oZXJyLCByZXNwb25zZURhdGEpIHtcbiAqICAgICAgICAgY2FsbGJhY2soZXJyLCByZXNwb25zZURhdGEpO1xuICogICAgIH0pO1xuICogfVxuICovXG5cbi8qKlxuICogTm9kZS1zdHlsZSBjYWxsYmFjayBhcyB1c2VkIGJ5IHtAbGluayBSUENJbXBsfS5cbiAqIEB0eXBlZGVmIFJQQ0ltcGxDYWxsYmFja1xuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55LCBvdGhlcndpc2UgYG51bGxgXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl8bnVsbH0gW3Jlc3BvbnNlXSBSZXNwb25zZSBkYXRhIG9yIGBudWxsYCB0byBzaWduYWwgZW5kIG9mIHN0cmVhbSwgaWYgdGhlcmUgaGFzbid0IGJlZW4gYW4gZXJyb3JcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cblxucnBjLlNlcnZpY2UgPSByZXF1aXJlKFwiLi9ycGMvc2VydmljZVwiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLyoqXG4gKiBOYW1lZCByb290cy5cbiAqIFRoaXMgaXMgd2hlcmUgcGJqcyBzdG9yZXMgZ2VuZXJhdGVkIHN0cnVjdHVyZXMgKHRoZSBvcHRpb24gYC1yLCAtLXJvb3RgIHNwZWNpZmllcyBhIG5hbWUpLlxuICogQ2FuIGFsc28gYmUgdXNlZCBtYW51YWxseSB0byBtYWtlIHJvb3RzIGF2YWlsYWJsZSBhY2Nyb3NzIG1vZHVsZXMuXG4gKiBAbmFtZSByb290c1xuICogQHR5cGUge09iamVjdC48c3RyaW5nLFJvb3Q+fVxuICogQGV4YW1wbGVcbiAqIC8vIHBianMgLXIgbXlyb290IC1vIGNvbXBpbGVkLmpzIC4uLlxuICpcbiAqIC8vIGluIGFub3RoZXIgbW9kdWxlOlxuICogcmVxdWlyZShcIi4vY29tcGlsZWQuanNcIik7XG4gKlxuICogLy8gaW4gYW55IHN1YnNlcXVlbnQgbW9kdWxlOlxuICogdmFyIHJvb3QgPSBwcm90b2J1Zi5yb290c1tcIm15cm9vdFwiXTtcbiAqL1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcHJvdG9idWYgPSBleHBvcnRzO1xuXG4vKipcbiAqIEJ1aWxkIHR5cGUsIG9uZSBvZiBgXCJmdWxsXCJgLCBgXCJsaWdodFwiYCBvciBgXCJtaW5pbWFsXCJgLlxuICogQG5hbWUgYnVpbGRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAY29uc3RcbiAqL1xucHJvdG9idWYuYnVpbGQgPSBcIm1pbmltYWxcIjtcblxuLy8gU2VyaWFsaXphdGlvblxucHJvdG9idWYuV3JpdGVyICAgICAgID0gcmVxdWlyZShcIi4vd3JpdGVyXCIpO1xucHJvdG9idWYuQnVmZmVyV3JpdGVyID0gcmVxdWlyZShcIi4vd3JpdGVyX2J1ZmZlclwiKTtcbnByb3RvYnVmLlJlYWRlciAgICAgICA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbnByb3RvYnVmLkJ1ZmZlclJlYWRlciA9IHJlcXVpcmUoXCIuL3JlYWRlcl9idWZmZXJcIik7XG5cbi8vIFV0aWxpdHlcbnByb3RvYnVmLnV0aWwgICAgICAgICA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcbnByb3RvYnVmLnJwYyAgICAgICAgICA9IHJlcXVpcmUoXCIuL3JwY1wiKTtcbnByb3RvYnVmLnJvb3RzICAgICAgICA9IHJlcXVpcmUoXCIuL3Jvb3RzXCIpO1xucHJvdG9idWYuY29uZmlndXJlICAgID0gY29uZmlndXJlO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuLyoqXG4gKiBSZWNvbmZpZ3VyZXMgdGhlIGxpYnJhcnkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZSgpIHtcbiAgICBwcm90b2J1Zi51dGlsLl9jb25maWd1cmUoKTtcbiAgICBwcm90b2J1Zi5Xcml0ZXIuX2NvbmZpZ3VyZShwcm90b2J1Zi5CdWZmZXJXcml0ZXIpO1xuICAgIHByb3RvYnVmLlJlYWRlci5fY29uZmlndXJlKHByb3RvYnVmLkJ1ZmZlclJlYWRlcik7XG59XG5cbi8vIFNldCB1cCBidWZmZXIgdXRpbGl0eSBhY2NvcmRpbmcgdG8gdGhlIGVudmlyb25tZW50XG5jb25maWd1cmUoKTtcbiIsIi8vIG1pbmltYWwgbGlicmFyeSBlbnRyeSBwb2ludC5cblxuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL3NyYy9pbmRleC1taW5pbWFsXCIpO1xuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQW5pbWF0b3Ige1xuICBzdGF0ZXM6IFBCQW5pbWF0aW9uU3RhdGVbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCQW5pbWF0aW9uU3RhdGUge1xuICBuYW1lOiBzdHJpbmdcbiAgY2xpcDogc3RyaW5nXG4gIHBsYXlpbmc/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMHMgKi9cbiAgd2VpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICBzcGVlZD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD10cnVlICovXG4gIGxvb3A/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIHNob3VsZFJlc2V0PzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBbmltYXRvcigpOiBQQkFuaW1hdG9yIHtcbiAgcmV0dXJuIHsgc3RhdGVzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQW5pbWF0b3IgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkFuaW1hdG9yLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uuc3RhdGVzKSB7XG4gICAgICBQQkFuaW1hdGlvblN0YXRlLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJBbmltYXRvciB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJBbmltYXRvcigpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uuc3RhdGVzLnB1c2goUEJBbmltYXRpb25TdGF0ZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBbmltYXRpb25TdGF0ZSgpOiBQQkFuaW1hdGlvblN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnJyxcbiAgICBjbGlwOiAnJyxcbiAgICBwbGF5aW5nOiB1bmRlZmluZWQsXG4gICAgd2VpZ2h0OiB1bmRlZmluZWQsXG4gICAgc3BlZWQ6IHVuZGVmaW5lZCxcbiAgICBsb29wOiB1bmRlZmluZWQsXG4gICAgc2hvdWxkUmVzZXQ6IHVuZGVmaW5lZFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQW5pbWF0aW9uU3RhdGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkFuaW1hdGlvblN0YXRlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmNsaXAgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS5jbGlwKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wbGF5aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS5wbGF5aW5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53ZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS53ZWlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNwZWVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDUpLmZsb2F0KG1lc3NhZ2Uuc3BlZWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmxvb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0OCkuYm9vbChtZXNzYWdlLmxvb3ApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNob3VsZFJlc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTYpLmJvb2wobWVzc2FnZS5zaG91bGRSZXNldClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQW5pbWF0aW9uU3RhdGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQW5pbWF0aW9uU3RhdGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5jbGlwID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UucGxheWluZyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS53ZWlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLnNwZWVkID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5sb29wID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLnNob3VsZFJlc2V0ID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkFuaW1hdG9yIH0gZnJvbSAnLi9wYi9BbmltYXRvci5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDQyXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBbmltYXRvclNjaGVtYTogSVNjaGVtYTxQQkFuaW1hdG9yPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkFuaW1hdG9yLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJBbmltYXRvci5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBbmltYXRvciB7XG4gICAgcmV0dXJuIFBCQW5pbWF0b3IuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkFuaW1hdG9yIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBbmltYXRvci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQXVkaW9Tb3VyY2Uge1xuICBwbGF5aW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjBmICovXG4gIHZvbHVtZT86IG51bWJlciB8IHVuZGVmaW5lZFxuICBsb29wPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjBmICovXG4gIHBpdGNoPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGF1ZGlvQ2xpcFVybDogc3RyaW5nXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkF1ZGlvU291cmNlKCk6IFBCQXVkaW9Tb3VyY2Uge1xuICByZXR1cm4geyBwbGF5aW5nOiB1bmRlZmluZWQsIHZvbHVtZTogdW5kZWZpbmVkLCBsb29wOiB1bmRlZmluZWQsIHBpdGNoOiB1bmRlZmluZWQsIGF1ZGlvQ2xpcFVybDogJycgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF1ZGlvU291cmNlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBdWRpb1NvdXJjZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnBsYXlpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2UucGxheWluZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uudm9sdW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjEpLmZsb2F0KG1lc3NhZ2Uudm9sdW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sb29wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS5sb29wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5waXRjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM3KS5mbG9hdChtZXNzYWdlLnBpdGNoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hdWRpb0NsaXBVcmwgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQyKS5zdHJpbmcobWVzc2FnZS5hdWRpb0NsaXBVcmwpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkF1ZGlvU291cmNlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF1ZGlvU291cmNlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5wbGF5aW5nID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnZvbHVtZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UubG9vcCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5waXRjaCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuYXVkaW9DbGlwVXJsID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQXVkaW9Tb3VyY2UgfSBmcm9tICcuL3BiL0F1ZGlvU291cmNlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMjBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEF1ZGlvU291cmNlU2NoZW1hOiBJU2NoZW1hPFBCQXVkaW9Tb3VyY2U+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQXVkaW9Tb3VyY2UsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkF1ZGlvU291cmNlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkF1ZGlvU291cmNlIHtcbiAgICByZXR1cm4gUEJBdWRpb1NvdXJjZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQXVkaW9Tb3VyY2Uge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkF1ZGlvU291cmNlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBjb25zdCBlbnVtIEF2YXRhckFuY2hvclBvaW50IHtcbiAgUE9TSVRJT04gPSAwLFxuICBOQU1FX1RBRyA9IDEsXG4gIExFRlRfSEFORCA9IDIsXG4gIFJJR0hUX0hBTkQgPSAzLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCQXZhdGFyQXR0YWNoIHtcbiAgYXZhdGFySWQ6IHN0cmluZ1xuICBhbmNob3JQb2ludElkOiBBdmF0YXJBbmNob3JQb2ludFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBdmF0YXJBdHRhY2goKTogUEJBdmF0YXJBdHRhY2gge1xuICByZXR1cm4geyBhdmF0YXJJZDogJycsIGFuY2hvclBvaW50SWQ6IDAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF2YXRhckF0dGFjaCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXZhdGFyQXR0YWNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYXZhdGFySWQgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5hdmF0YXJJZClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYW5jaG9yUG9pbnRJZCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5hbmNob3JQb2ludElkKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJBdmF0YXJBdHRhY2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQXZhdGFyQXR0YWNoKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5hdmF0YXJJZCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmFuY2hvclBvaW50SWQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBdmF0YXJBdHRhY2ggfSBmcm9tICcuL3BiL0F2YXRhckF0dGFjaC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDczXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBdmF0YXJBdHRhY2hTY2hlbWE6IElTY2hlbWE8UEJBdmF0YXJBdHRhY2g+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQXZhdGFyQXR0YWNoLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJBdmF0YXJBdHRhY2guZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQXZhdGFyQXR0YWNoIHtcbiAgICByZXR1cm4gUEJBdmF0YXJBdHRhY2guZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkF2YXRhckF0dGFjaCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQXZhdGFyQXR0YWNoLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVjdG9yMyB7XG4gIHg6IG51bWJlclxuICB5OiBudW1iZXJcbiAgejogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VWZWN0b3IzKCk6IFZlY3RvcjMge1xuICByZXR1cm4geyB4OiAwLCB5OiAwLCB6OiAwIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVmVjdG9yMyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFZlY3RvcjMsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS54ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzKS5mbG9hdChtZXNzYWdlLngpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnkgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjEpLmZsb2F0KG1lc3NhZ2UueSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UueiAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS56KVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogVmVjdG9yMyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVmVjdG9yMygpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UueCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UueSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UueiA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJy4vY29tbW9uL1ZlY3RvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBjb25zdCBlbnVtIEF2YXRhck1vZGlmaWVyIHtcbiAgSElERV9BVkFUQVJTID0gMCxcbiAgRElTQUJMRV9QQVNTUE9SVFMgPSAxLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCQXZhdGFyTW9kaWZpZXJBcmVhIHtcbiAgYXJlYTogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBleGNsdWRlSWRzOiBzdHJpbmdbXVxuICBtb2RpZmllcnM6IEF2YXRhck1vZGlmaWVyW11cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQXZhdGFyTW9kaWZpZXJBcmVhKCk6IFBCQXZhdGFyTW9kaWZpZXJBcmVhIHtcbiAgcmV0dXJuIHsgYXJlYTogdW5kZWZpbmVkLCBleGNsdWRlSWRzOiBbXSwgbW9kaWZpZXJzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQXZhdGFyTW9kaWZpZXJBcmVhID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBdmF0YXJNb2RpZmllckFyZWEsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5hcmVhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UuYXJlYSwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5leGNsdWRlSWRzKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcodiEpXG4gICAgfVxuICAgIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLm1vZGlmaWVycykge1xuICAgICAgd3JpdGVyLmludDMyKHYpXG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkF2YXRhck1vZGlmaWVyQXJlYSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJBdmF0YXJNb2RpZmllckFyZWEoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmFyZWEgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5leGNsdWRlSWRzLnB1c2gocmVhZGVyLnN0cmluZygpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvc1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UubW9kaWZpZXJzLnB1c2gocmVhZGVyLmludDMyKCkgYXMgYW55KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlLm1vZGlmaWVycy5wdXNoKHJlYWRlci5pbnQzMigpIGFzIGFueSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQXZhdGFyTW9kaWZpZXJBcmVhIH0gZnJvbSAnLi9wYi9BdmF0YXJNb2RpZmllckFyZWEuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA3MFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hOiBJU2NoZW1hPFBCQXZhdGFyTW9kaWZpZXJBcmVhPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF2YXRhck1vZGlmaWVyQXJlYSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQXZhdGFyTW9kaWZpZXJBcmVhLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkF2YXRhck1vZGlmaWVyQXJlYSB7XG4gICAgcmV0dXJuIFBCQXZhdGFyTW9kaWZpZXJBcmVhLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBdmF0YXJNb2RpZmllckFyZWEge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkF2YXRhck1vZGlmaWVyQXJlYS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBMb25nO1xyXG5cclxuLyoqXHJcbiAqIHdhc20gb3B0aW1pemF0aW9ucywgdG8gZG8gbmF0aXZlIGk2NCBtdWx0aXBsaWNhdGlvbiBhbmQgZGl2aWRlXHJcbiAqL1xyXG52YXIgd2FzbSA9IG51bGw7XHJcblxyXG50cnkge1xyXG4gIHdhc20gPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShuZXcgVWludDhBcnJheShbXHJcbiAgICAwLCA5NywgMTE1LCAxMDksIDEsIDAsIDAsIDAsIDEsIDEzLCAyLCA5NiwgMCwgMSwgMTI3LCA5NiwgNCwgMTI3LCAxMjcsIDEyNywgMTI3LCAxLCAxMjcsIDMsIDcsIDYsIDAsIDEsIDEsIDEsIDEsIDEsIDYsIDYsIDEsIDEyNywgMSwgNjUsIDAsIDExLCA3LCA1MCwgNiwgMywgMTA5LCAxMTcsIDEwOCwgMCwgMSwgNSwgMTAwLCAxMDUsIDExOCwgOTUsIDExNSwgMCwgMiwgNSwgMTAwLCAxMDUsIDExOCwgOTUsIDExNywgMCwgMywgNSwgMTE0LCAxMDEsIDEwOSwgOTUsIDExNSwgMCwgNCwgNSwgMTE0LCAxMDEsIDEwOSwgOTUsIDExNywgMCwgNSwgOCwgMTAzLCAxMDEsIDExNiwgOTUsIDEwNCwgMTA1LCAxMDMsIDEwNCwgMCwgMCwgMTAsIDE5MSwgMSwgNiwgNCwgMCwgMzUsIDAsIDExLCAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLCAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMjYsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCwgMzIsIDQsIDE2NywgMTEsIDM2LCAxLCAxLCAxMjYsIDMyLCAwLCAxNzMsIDMyLCAxLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDMyLCAyLCAxNzMsIDMyLCAzLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDEyNywgMzQsIDQsIDY2LCAzMiwgMTM1LCAxNjcsIDM2LCAwLCAzMiwgNCwgMTY3LCAxMSwgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MywgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTI4LCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsIDMyLCA0LCAxNjcsIDExLCAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLCAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMjksIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCwgMzIsIDQsIDE2NywgMTEsIDM2LCAxLCAxLCAxMjYsIDMyLCAwLCAxNzMsIDMyLCAxLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDMyLCAyLCAxNzMsIDMyLCAzLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDEzMCwgMzQsIDQsIDY2LCAzMiwgMTM1LCAxNjcsIDM2LCAwLCAzMiwgNCwgMTY3LCAxMVxyXG4gIF0pKSwge30pLmV4cG9ydHM7XHJcbn0gY2F0Y2ggKGUpIHtcclxuICAvLyBubyB3YXNtIHN1cHBvcnQgOihcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnN0cnVjdHMgYSA2NCBiaXQgdHdvJ3MtY29tcGxlbWVudCBpbnRlZ2VyLCBnaXZlbiBpdHMgbG93IGFuZCBoaWdoIDMyIGJpdCB2YWx1ZXMgYXMgKnNpZ25lZCogaW50ZWdlcnMuXHJcbiAqICBTZWUgdGhlIGZyb20qIGZ1bmN0aW9ucyBiZWxvdyBmb3IgbW9yZSBjb252ZW5pZW50IHdheXMgb2YgY29uc3RydWN0aW5nIExvbmdzLlxyXG4gKiBAZXhwb3J0cyBMb25nXHJcbiAqIEBjbGFzcyBBIExvbmcgY2xhc3MgZm9yIHJlcHJlc2VudGluZyBhIDY0IGJpdCB0d28ncy1jb21wbGVtZW50IGludGVnZXIgdmFsdWUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3cgVGhlIGxvdyAoc2lnbmVkKSAzMiBiaXRzIG9mIHRoZSBsb25nXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoIFRoZSBoaWdoIChzaWduZWQpIDMyIGJpdHMgb2YgdGhlIGxvbmdcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxyXG4gKiBAY29uc3RydWN0b3JcclxuICovXHJcbmZ1bmN0aW9uIExvbmcobG93LCBoaWdoLCB1bnNpZ25lZCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxvdyAzMiBiaXRzIGFzIGEgc2lnbmVkIHZhbHVlLlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5sb3cgPSBsb3cgfCAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhpZ2ggMzIgYml0cyBhcyBhIHNpZ25lZCB2YWx1ZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuaGlnaCA9IGhpZ2ggfCAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB1bnNpZ25lZCBvciBub3QuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgdGhpcy51bnNpZ25lZCA9ICEhdW5zaWduZWQ7XHJcbn1cclxuXHJcbi8vIFRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIGxvbmcgaXMgdGhlIHR3byBnaXZlbiBzaWduZWQsIDMyLWJpdCB2YWx1ZXMuXHJcbi8vIFdlIHVzZSAzMi1iaXQgcGllY2VzIGJlY2F1c2UgdGhlc2UgYXJlIHRoZSBzaXplIG9mIGludGVnZXJzIG9uIHdoaWNoXHJcbi8vIEphdmFzY3JpcHQgcGVyZm9ybXMgYml0LW9wZXJhdGlvbnMuICBGb3Igb3BlcmF0aW9ucyBsaWtlIGFkZGl0aW9uIGFuZFxyXG4vLyBtdWx0aXBsaWNhdGlvbiwgd2Ugc3BsaXQgZWFjaCBudW1iZXIgaW50byAxNiBiaXQgcGllY2VzLCB3aGljaCBjYW4gZWFzaWx5IGJlXHJcbi8vIG11bHRpcGxpZWQgd2l0aGluIEphdmFzY3JpcHQncyBmbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbiB3aXRob3V0IG92ZXJmbG93XHJcbi8vIG9yIGNoYW5nZSBpbiBzaWduLlxyXG4vL1xyXG4vLyBJbiB0aGUgYWxnb3JpdGhtcyBiZWxvdywgd2UgZnJlcXVlbnRseSByZWR1Y2UgdGhlIG5lZ2F0aXZlIGNhc2UgdG8gdGhlXHJcbi8vIHBvc2l0aXZlIGNhc2UgYnkgbmVnYXRpbmcgdGhlIGlucHV0KHMpIGFuZCB0aGVuIHBvc3QtcHJvY2Vzc2luZyB0aGUgcmVzdWx0LlxyXG4vLyBOb3RlIHRoYXQgd2UgbXVzdCBBTFdBWVMgY2hlY2sgc3BlY2lhbGx5IHdoZXRoZXIgdGhvc2UgdmFsdWVzIGFyZSBNSU5fVkFMVUVcclxuLy8gKC0yXjYzKSBiZWNhdXNlIC1NSU5fVkFMVUUgPT0gTUlOX1ZBTFVFIChzaW5jZSAyXjYzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhc1xyXG4vLyBhIHBvc2l0aXZlIG51bWJlciwgaXQgb3ZlcmZsb3dzIGJhY2sgaW50byBhIG5lZ2F0aXZlKS4gIE5vdCBoYW5kbGluZyB0aGlzXHJcbi8vIGNhc2Ugd291bGQgb2Z0ZW4gcmVzdWx0IGluIGluZmluaXRlIHJlY3Vyc2lvbi5cclxuLy9cclxuLy8gQ29tbW9uIGNvbnN0YW50IHZhbHVlcyBaRVJPLCBPTkUsIE5FR19PTkUsIGV0Yy4gYXJlIGRlZmluZWQgYmVsb3cgdGhlIGZyb20qXHJcbi8vIG1ldGhvZHMgb24gd2hpY2ggdGhleSBkZXBlbmQuXHJcblxyXG4vKipcclxuICogQW4gaW5kaWNhdG9yIHVzZWQgdG8gcmVsaWFibHkgZGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIExvbmcgb3Igbm90LlxyXG4gKiBAdHlwZSB7Ym9vbGVhbn1cclxuICogQGNvbnN0XHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5Mb25nLnByb3RvdHlwZS5fX2lzTG9uZ19fO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExvbmcucHJvdG90eXBlLCBcIl9faXNMb25nX19cIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHsqfSBvYmogT2JqZWN0XHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGlzTG9uZyhvYmopIHtcclxuICAgIHJldHVybiAob2JqICYmIG9ialtcIl9faXNMb25nX19cIl0pID09PSB0cnVlO1xyXG59XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCBvYmplY3QgaXMgYSBMb25nLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHsqfSBvYmogT2JqZWN0XHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZy5pc0xvbmcgPSBpc0xvbmc7XHJcblxyXG4vKipcclxuICogQSBjYWNoZSBvZiB0aGUgTG9uZyByZXByZXNlbnRhdGlvbnMgb2Ygc21hbGwgaW50ZWdlciB2YWx1ZXMuXHJcbiAqIEB0eXBlIHshT2JqZWN0fVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBJTlRfQ0FDSEUgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBBIGNhY2hlIG9mIHRoZSBMb25nIHJlcHJlc2VudGF0aW9ucyBvZiBzbWFsbCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy5cclxuICogQHR5cGUgeyFPYmplY3R9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFVJTlRfQ0FDSEUgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGZyb21JbnQodmFsdWUsIHVuc2lnbmVkKSB7XHJcbiAgICB2YXIgb2JqLCBjYWNoZWRPYmosIGNhY2hlO1xyXG4gICAgaWYgKHVuc2lnbmVkKSB7XHJcbiAgICAgICAgdmFsdWUgPj4+PSAwO1xyXG4gICAgICAgIGlmIChjYWNoZSA9ICgwIDw9IHZhbHVlICYmIHZhbHVlIDwgMjU2KSkge1xyXG4gICAgICAgICAgICBjYWNoZWRPYmogPSBVSU5UX0NBQ0hFW3ZhbHVlXTtcclxuICAgICAgICAgICAgaWYgKGNhY2hlZE9iailcclxuICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWRPYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9iaiA9IGZyb21CaXRzKHZhbHVlLCAodmFsdWUgfCAwKSA8IDAgPyAtMSA6IDAsIHRydWUpO1xyXG4gICAgICAgIGlmIChjYWNoZSlcclxuICAgICAgICAgICAgVUlOVF9DQUNIRVt2YWx1ZV0gPSBvYmo7XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFsdWUgfD0gMDtcclxuICAgICAgICBpZiAoY2FjaGUgPSAoLTEyOCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDEyOCkpIHtcclxuICAgICAgICAgICAgY2FjaGVkT2JqID0gSU5UX0NBQ0hFW3ZhbHVlXTtcclxuICAgICAgICAgICAgaWYgKGNhY2hlZE9iailcclxuICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZWRPYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9iaiA9IGZyb21CaXRzKHZhbHVlLCB2YWx1ZSA8IDAgPyAtMSA6IDAsIGZhbHNlKTtcclxuICAgICAgICBpZiAoY2FjaGUpXHJcbiAgICAgICAgICAgIElOVF9DQUNIRVt2YWx1ZV0gPSBvYmo7XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBMb25nIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gMzIgYml0IGludGVnZXIgdmFsdWUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIDMyIGJpdCBpbnRlZ2VyIGluIHF1ZXN0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21JbnQgPSBmcm9tSW50O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gZnJvbU51bWJlcih2YWx1ZSwgdW5zaWduZWQpIHtcclxuICAgIGlmIChpc05hTih2YWx1ZSkpXHJcbiAgICAgICAgcmV0dXJuIHVuc2lnbmVkID8gVVpFUk8gOiBaRVJPO1xyXG4gICAgaWYgKHVuc2lnbmVkKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDwgMClcclxuICAgICAgICAgICAgcmV0dXJuIFVaRVJPO1xyXG4gICAgICAgIGlmICh2YWx1ZSA+PSBUV09fUFdSXzY0X0RCTClcclxuICAgICAgICAgICAgcmV0dXJuIE1BWF9VTlNJR05FRF9WQUxVRTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIDw9IC1UV09fUFdSXzYzX0RCTClcclxuICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTtcclxuICAgICAgICBpZiAodmFsdWUgKyAxID49IFRXT19QV1JfNjNfREJMKVxyXG4gICAgICAgICAgICByZXR1cm4gTUFYX1ZBTFVFO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlIDwgMClcclxuICAgICAgICByZXR1cm4gZnJvbU51bWJlcigtdmFsdWUsIHVuc2lnbmVkKS5uZWcoKTtcclxuICAgIHJldHVybiBmcm9tQml0cygodmFsdWUgJSBUV09fUFdSXzMyX0RCTCkgfCAwLCAodmFsdWUgLyBUV09fUFdSXzMyX0RCTCkgfCAwLCB1bnNpZ25lZCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgTG9uZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHZhbHVlLCBwcm92aWRlZCB0aGF0IGl0IGlzIGEgZmluaXRlIG51bWJlci4gT3RoZXJ3aXNlLCB6ZXJvIGlzIHJldHVybmVkLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSBudW1iZXIgaW4gcXVlc3Rpb25cclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcclxuICovXHJcbkxvbmcuZnJvbU51bWJlciA9IGZyb21OdW1iZXI7XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtudW1iZXJ9IGxvd0JpdHNcclxuICogQHBhcmFtIHtudW1iZXJ9IGhpZ2hCaXRzXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBmcm9tQml0cyhsb3dCaXRzLCBoaWdoQml0cywgdW5zaWduZWQpIHtcclxuICAgIHJldHVybiBuZXcgTG9uZyhsb3dCaXRzLCBoaWdoQml0cywgdW5zaWduZWQpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIExvbmcgcmVwcmVzZW50aW5nIHRoZSA2NCBiaXQgaW50ZWdlciB0aGF0IGNvbWVzIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIGdpdmVuIGxvdyBhbmQgaGlnaCBiaXRzLiBFYWNoIGlzXHJcbiAqICBhc3N1bWVkIHRvIHVzZSAzMiBiaXRzLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IGxvd0JpdHMgVGhlIGxvdyAzMiBiaXRzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoQml0cyBUaGUgaGlnaCAzMiBiaXRzXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21CaXRzID0gZnJvbUJpdHM7XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBiYXNlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBleHBvbmVudFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBwb3dfZGJsID0gTWF0aC5wb3c7IC8vIFVzZWQgNCB0aW1lcyAoNCo4IHRvIDE1KzQpXHJcblxyXG4vKipcclxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxyXG4gKiBAcGFyYW0geyhib29sZWFufG51bWJlcik9fSB1bnNpZ25lZFxyXG4gKiBAcGFyYW0ge251bWJlcj19IHJhZGl4XHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBmcm9tU3RyaW5nKHN0ciwgdW5zaWduZWQsIHJhZGl4KSB7XHJcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMClcclxuICAgICAgICB0aHJvdyBFcnJvcignZW1wdHkgc3RyaW5nJyk7XHJcbiAgICBpZiAoc3RyID09PSBcIk5hTlwiIHx8IHN0ciA9PT0gXCJJbmZpbml0eVwiIHx8IHN0ciA9PT0gXCIrSW5maW5pdHlcIiB8fCBzdHIgPT09IFwiLUluZmluaXR5XCIpXHJcbiAgICAgICAgcmV0dXJuIFpFUk87XHJcbiAgICBpZiAodHlwZW9mIHVuc2lnbmVkID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIC8vIEZvciBnb29nLm1hdGgubG9uZyBjb21wYXRpYmlsaXR5XHJcbiAgICAgICAgcmFkaXggPSB1bnNpZ25lZCxcclxuICAgICAgICB1bnNpZ25lZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB1bnNpZ25lZCA9ICEhIHVuc2lnbmVkO1xyXG4gICAgfVxyXG4gICAgcmFkaXggPSByYWRpeCB8fCAxMDtcclxuICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeClcclxuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdyYWRpeCcpO1xyXG5cclxuICAgIHZhciBwO1xyXG4gICAgaWYgKChwID0gc3RyLmluZGV4T2YoJy0nKSkgPiAwKVxyXG4gICAgICAgIHRocm93IEVycm9yKCdpbnRlcmlvciBoeXBoZW4nKTtcclxuICAgIGVsc2UgaWYgKHAgPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnJvbVN0cmluZyhzdHIuc3Vic3RyaW5nKDEpLCB1bnNpZ25lZCwgcmFkaXgpLm5lZygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERvIHNldmVyYWwgKDgpIGRpZ2l0cyBlYWNoIHRpbWUgdGhyb3VnaCB0aGUgbG9vcCwgc28gYXMgdG9cclxuICAgIC8vIG1pbmltaXplIHRoZSBjYWxscyB0byB0aGUgdmVyeSBleHBlbnNpdmUgZW11bGF0ZWQgZGl2LlxyXG4gICAgdmFyIHJhZGl4VG9Qb3dlciA9IGZyb21OdW1iZXIocG93X2RibChyYWRpeCwgOCkpO1xyXG5cclxuICAgIHZhciByZXN1bHQgPSBaRVJPO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpICs9IDgpIHtcclxuICAgICAgICB2YXIgc2l6ZSA9IE1hdGgubWluKDgsIHN0ci5sZW5ndGggLSBpKSxcclxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludChzdHIuc3Vic3RyaW5nKGksIGkgKyBzaXplKSwgcmFkaXgpO1xyXG4gICAgICAgIGlmIChzaXplIDwgOCkge1xyXG4gICAgICAgICAgICB2YXIgcG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIHNpemUpKTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bChwb3dlcikuYWRkKGZyb21OdW1iZXIodmFsdWUpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubXVsKHJhZGl4VG9Qb3dlcik7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5hZGQoZnJvbU51bWJlcih2YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc3VsdC51bnNpZ25lZCA9IHVuc2lnbmVkO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBMb25nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBzdHJpbmcsIHdyaXR0ZW4gdXNpbmcgdGhlIHNwZWNpZmllZCByYWRpeC5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIExvbmdcclxuICogQHBhcmFtIHsoYm9vbGVhbnxudW1iZXIpPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxyXG4gKiBAcGFyYW0ge251bWJlcj19IHJhZGl4IFRoZSByYWRpeCBpbiB3aGljaCB0aGUgdGV4dCBpcyB3cml0dGVuICgyLTM2KSwgZGVmYXVsdHMgdG8gMTBcclxuICogQHJldHVybnMgeyFMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21TdHJpbmcgPSBmcm9tU3RyaW5nO1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyLCB1bnNpZ25lZDogYm9vbGVhbn19IHZhbFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gZnJvbVZhbHVlKHZhbCwgdW5zaWduZWQpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJylcclxuICAgICAgICByZXR1cm4gZnJvbU51bWJlcih2YWwsIHVuc2lnbmVkKTtcclxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJylcclxuICAgICAgICByZXR1cm4gZnJvbVN0cmluZyh2YWwsIHVuc2lnbmVkKTtcclxuICAgIC8vIFRocm93cyBmb3Igbm9uLW9iamVjdHMsIGNvbnZlcnRzIG5vbi1pbnN0YW5jZW9mIExvbmc6XHJcbiAgICByZXR1cm4gZnJvbUJpdHModmFsLmxvdywgdmFsLmhpZ2gsIHR5cGVvZiB1bnNpZ25lZCA9PT0gJ2Jvb2xlYW4nID8gdW5zaWduZWQgOiB2YWwudW5zaWduZWQpO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhlIHNwZWNpZmllZCB2YWx1ZSB0byBhIExvbmcgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGZyb20qIGZ1bmN0aW9uIGZvciBpdHMgdHlwZS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ3whe2xvdzogbnVtYmVyLCBoaWdoOiBudW1iZXIsIHVuc2lnbmVkOiBib29sZWFufX0gdmFsIFZhbHVlXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5mcm9tVmFsdWUgPSBmcm9tVmFsdWU7XHJcblxyXG4vLyBOT1RFOiB0aGUgY29tcGlsZXIgc2hvdWxkIGlubGluZSB0aGVzZSBjb25zdGFudCB2YWx1ZXMgYmVsb3cgYW5kIHRoZW4gcmVtb3ZlIHRoZXNlIHZhcmlhYmxlcywgc28gdGhlcmUgc2hvdWxkIGJlXHJcbi8vIG5vIHJ1bnRpbWUgcGVuYWx0eSBmb3IgdGhlc2UuXHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfMTZfREJMID0gMSA8PCAxNjtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAY29uc3RcclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVFdPX1BXUl8yNF9EQkwgPSAxIDw8IDI0O1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzMyX0RCTCA9IFRXT19QV1JfMTZfREJMICogVFdPX1BXUl8xNl9EQkw7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfNjRfREJMID0gVFdPX1BXUl8zMl9EQkwgKiBUV09fUFdSXzMyX0RCTDtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAY29uc3RcclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVFdPX1BXUl82M19EQkwgPSBUV09fUFdSXzY0X0RCTCAvIDI7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAY29uc3RcclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVFdPX1BXUl8yNCA9IGZyb21JbnQoVFdPX1BXUl8yNF9EQkwpO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgWkVSTyA9IGZyb21JbnQoMCk7XHJcblxyXG4vKipcclxuICogU2lnbmVkIHplcm8uXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuWkVSTyA9IFpFUk87XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBVWkVSTyA9IGZyb21JbnQoMCwgdHJ1ZSk7XHJcblxyXG4vKipcclxuICogVW5zaWduZWQgemVyby5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5VWkVSTyA9IFVaRVJPO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgT05FID0gZnJvbUludCgxKTtcclxuXHJcbi8qKlxyXG4gKiBTaWduZWQgb25lLlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLk9ORSA9IE9ORTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFVPTkUgPSBmcm9tSW50KDEsIHRydWUpO1xyXG5cclxuLyoqXHJcbiAqIFVuc2lnbmVkIG9uZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5VT05FID0gVU9ORTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIE5FR19PTkUgPSBmcm9tSW50KC0xKTtcclxuXHJcbi8qKlxyXG4gKiBTaWduZWQgbmVnYXRpdmUgb25lLlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLk5FR19PTkUgPSBORUdfT05FO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgTUFYX1ZBTFVFID0gZnJvbUJpdHMoMHhGRkZGRkZGRnwwLCAweDdGRkZGRkZGfDAsIGZhbHNlKTtcclxuXHJcbi8qKlxyXG4gKiBNYXhpbXVtIHNpZ25lZCB2YWx1ZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5NQVhfVkFMVUUgPSBNQVhfVkFMVUU7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBNQVhfVU5TSUdORURfVkFMVUUgPSBmcm9tQml0cygweEZGRkZGRkZGfDAsIDB4RkZGRkZGRkZ8MCwgdHJ1ZSk7XHJcblxyXG4vKipcclxuICogTWF4aW11bSB1bnNpZ25lZCB2YWx1ZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5NQVhfVU5TSUdORURfVkFMVUUgPSBNQVhfVU5TSUdORURfVkFMVUU7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBNSU5fVkFMVUUgPSBmcm9tQml0cygwLCAweDgwMDAwMDAwfDAsIGZhbHNlKTtcclxuXHJcbi8qKlxyXG4gKiBNaW5pbXVtIHNpZ25lZCB2YWx1ZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5NSU5fVkFMVUUgPSBNSU5fVkFMVUU7XHJcblxyXG4vKipcclxuICogQGFsaWFzIExvbmcucHJvdG90eXBlXHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIExvbmdQcm90b3R5cGUgPSBMb25nLnByb3RvdHlwZTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgTG9uZyB0byBhIDMyIGJpdCBpbnRlZ2VyLCBhc3N1bWluZyBpdCBpcyBhIDMyIGJpdCBpbnRlZ2VyLlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0ludCA9IGZ1bmN0aW9uIHRvSW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudW5zaWduZWQgPyB0aGlzLmxvdyA+Pj4gMCA6IHRoaXMubG93O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBMb25nIHRvIGEgdGhlIG5lYXJlc3QgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB2YWx1ZSAoZG91YmxlLCA1MyBiaXQgbWFudGlzc2EpLlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyKCkge1xyXG4gICAgaWYgKHRoaXMudW5zaWduZWQpXHJcbiAgICAgICAgcmV0dXJuICgodGhpcy5oaWdoID4+PiAwKSAqIFRXT19QV1JfMzJfREJMKSArICh0aGlzLmxvdyA+Pj4gMCk7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoICogVFdPX1BXUl8zMl9EQkwgKyAodGhpcy5sb3cgPj4+IDApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBMb25nIHRvIGEgc3RyaW5nIHdyaXR0ZW4gaW4gdGhlIHNwZWNpZmllZCByYWRpeC5cclxuICogQHBhcmFtIHtudW1iZXI9fSByYWRpeCBSYWRpeCAoMi0zNiksIGRlZmF1bHRzIHRvIDEwXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAqIEBvdmVycmlkZVxyXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBJZiBgcmFkaXhgIGlzIG91dCBvZiByYW5nZVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKHJhZGl4KSB7XHJcbiAgICByYWRpeCA9IHJhZGl4IHx8IDEwO1xyXG4gICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KVxyXG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoJ3JhZGl4Jyk7XHJcbiAgICBpZiAodGhpcy5pc1plcm8oKSlcclxuICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSB7IC8vIFVuc2lnbmVkIExvbmdzIGFyZSBuZXZlciBuZWdhdGl2ZVxyXG4gICAgICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpIHtcclxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGFuZ2UgdGhlIExvbmcgdmFsdWUgYmVmb3JlIGl0IGNhbiBiZSBuZWdhdGVkLCBzbyB3ZSByZW1vdmVcclxuICAgICAgICAgICAgLy8gdGhlIGJvdHRvbS1tb3N0IGRpZ2l0IGluIHRoaXMgYmFzZSBhbmQgdGhlbiByZWN1cnNlIHRvIGRvIHRoZSByZXN0LlxyXG4gICAgICAgICAgICB2YXIgcmFkaXhMb25nID0gZnJvbU51bWJlcihyYWRpeCksXHJcbiAgICAgICAgICAgICAgICBkaXYgPSB0aGlzLmRpdihyYWRpeExvbmcpLFxyXG4gICAgICAgICAgICAgICAgcmVtMSA9IGRpdi5tdWwocmFkaXhMb25nKS5zdWIodGhpcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBkaXYudG9TdHJpbmcocmFkaXgpICsgcmVtMS50b0ludCgpLnRvU3RyaW5nKHJhZGl4KTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuICctJyArIHRoaXMubmVnKCkudG9TdHJpbmcocmFkaXgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERvIHNldmVyYWwgKDYpIGRpZ2l0cyBlYWNoIHRpbWUgdGhyb3VnaCB0aGUgbG9vcCwgc28gYXMgdG9cclxuICAgIC8vIG1pbmltaXplIHRoZSBjYWxscyB0byB0aGUgdmVyeSBleHBlbnNpdmUgZW11bGF0ZWQgZGl2LlxyXG4gICAgdmFyIHJhZGl4VG9Qb3dlciA9IGZyb21OdW1iZXIocG93X2RibChyYWRpeCwgNiksIHRoaXMudW5zaWduZWQpLFxyXG4gICAgICAgIHJlbSA9IHRoaXM7XHJcbiAgICB2YXIgcmVzdWx0ID0gJyc7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIHZhciByZW1EaXYgPSByZW0uZGl2KHJhZGl4VG9Qb3dlciksXHJcbiAgICAgICAgICAgIGludHZhbCA9IHJlbS5zdWIocmVtRGl2Lm11bChyYWRpeFRvUG93ZXIpKS50b0ludCgpID4+PiAwLFxyXG4gICAgICAgICAgICBkaWdpdHMgPSBpbnR2YWwudG9TdHJpbmcocmFkaXgpO1xyXG4gICAgICAgIHJlbSA9IHJlbURpdjtcclxuICAgICAgICBpZiAocmVtLmlzWmVybygpKVxyXG4gICAgICAgICAgICByZXR1cm4gZGlnaXRzICsgcmVzdWx0O1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aGlsZSAoZGlnaXRzLmxlbmd0aCA8IDYpXHJcbiAgICAgICAgICAgICAgICBkaWdpdHMgPSAnMCcgKyBkaWdpdHM7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9ICcnICsgZGlnaXRzICsgcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBoaWdoIDMyIGJpdHMgYXMgYSBzaWduZWQgaW50ZWdlci5cclxuICogQHJldHVybnMge251bWJlcn0gU2lnbmVkIGhpZ2ggYml0c1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZXRIaWdoQml0cyA9IGZ1bmN0aW9uIGdldEhpZ2hCaXRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBoaWdoIDMyIGJpdHMgYXMgYW4gdW5zaWduZWQgaW50ZWdlci5cclxuICogQHJldHVybnMge251bWJlcn0gVW5zaWduZWQgaGlnaCBiaXRzXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldEhpZ2hCaXRzVW5zaWduZWQgPSBmdW5jdGlvbiBnZXRIaWdoQml0c1Vuc2lnbmVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaCA+Pj4gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBsb3cgMzIgYml0cyBhcyBhIHNpZ25lZCBpbnRlZ2VyLlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBTaWduZWQgbG93IGJpdHNcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ2V0TG93Qml0cyA9IGZ1bmN0aW9uIGdldExvd0JpdHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sb3c7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgbG93IDMyIGJpdHMgYXMgYW4gdW5zaWduZWQgaW50ZWdlci5cclxuICogQHJldHVybnMge251bWJlcn0gVW5zaWduZWQgbG93IGJpdHNcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ2V0TG93Qml0c1Vuc2lnbmVkID0gZnVuY3Rpb24gZ2V0TG93Qml0c1Vuc2lnbmVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubG93ID4+PiAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgTG9uZy5cclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ2V0TnVtQml0c0FicyA9IGZ1bmN0aW9uIGdldE51bUJpdHNBYnMoKSB7XHJcbiAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIC8vIFVuc2lnbmVkIExvbmdzIGFyZSBuZXZlciBuZWdhdGl2ZVxyXG4gICAgICAgIHJldHVybiB0aGlzLmVxKE1JTl9WQUxVRSkgPyA2NCA6IHRoaXMubmVnKCkuZ2V0TnVtQml0c0FicygpO1xyXG4gICAgdmFyIHZhbCA9IHRoaXMuaGlnaCAhPSAwID8gdGhpcy5oaWdoIDogdGhpcy5sb3c7XHJcbiAgICBmb3IgKHZhciBiaXQgPSAzMTsgYml0ID4gMDsgYml0LS0pXHJcbiAgICAgICAgaWYgKCh2YWwgJiAoMSA8PCBiaXQpKSAhPSAwKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIHJldHVybiB0aGlzLmhpZ2ggIT0gMCA/IGJpdCArIDMzIDogYml0ICsgMTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBlcXVhbHMgemVyby5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uIGlzWmVybygpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZ2ggPT09IDAgJiYgdGhpcy5sb3cgPT09IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZXF1YWxzIHplcm8uIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjaXNaZXJvfS5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmVxeiA9IExvbmdQcm90b3R5cGUuaXNaZXJvO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIG5lZ2F0aXZlLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuaXNOZWdhdGl2ZSA9IGZ1bmN0aW9uIGlzTmVnYXRpdmUoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMudW5zaWduZWQgJiYgdGhpcy5oaWdoIDwgMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBwb3NpdGl2ZS5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzUG9zaXRpdmUgPSBmdW5jdGlvbiBpc1Bvc2l0aXZlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudW5zaWduZWQgfHwgdGhpcy5oaWdoID49IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgb2RkLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuaXNPZGQgPSBmdW5jdGlvbiBpc09kZCgpIHtcclxuICAgIHJldHVybiAodGhpcy5sb3cgJiAxKSA9PT0gMTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBldmVuLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuaXNFdmVuID0gZnVuY3Rpb24gaXNFdmVuKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLmxvdyAmIDEpID09PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGVxdWFscyB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhvdGhlcikge1xyXG4gICAgaWYgKCFpc0xvbmcob3RoZXIpKVxyXG4gICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcclxuICAgIGlmICh0aGlzLnVuc2lnbmVkICE9PSBvdGhlci51bnNpZ25lZCAmJiAodGhpcy5oaWdoID4+PiAzMSkgPT09IDEgJiYgKG90aGVyLmhpZ2ggPj4+IDMxKSA9PT0gMSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoID09PSBvdGhlci5oaWdoICYmIHRoaXMubG93ID09PSBvdGhlci5sb3c7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZXF1YWxzIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNlcXVhbHN9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZXEgPSBMb25nUHJvdG90eXBlLmVxdWFscztcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHMgPSBmdW5jdGlvbiBub3RFcXVhbHMob3RoZXIpIHtcclxuICAgIHJldHVybiAhdGhpcy5lcSgvKiB2YWxpZGF0ZXMgKi8gb3RoZXIpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbm90RXF1YWxzfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm5lcSA9IExvbmdQcm90b3R5cGUubm90RXF1YWxzO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbm90RXF1YWxzfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm5lID0gTG9uZ1Byb3RvdHlwZS5ub3RFcXVhbHM7XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubGVzc1RoYW4gPSBmdW5jdGlvbiBsZXNzVGhhbihvdGhlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcCgvKiB2YWxpZGF0ZXMgKi8gb3RoZXIpIDwgMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2xlc3NUaGFufS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmx0ID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbjtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWwgPSBmdW5jdGlvbiBsZXNzVGhhbk9yRXF1YWwob3RoZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA8PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbGVzc1RoYW5PckVxdWFsfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmx0ZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbGVzc1RoYW5PckVxdWFsfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmxlID0gTG9uZ1Byb3RvdHlwZS5sZXNzVGhhbk9yRXF1YWw7XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW4gPSBmdW5jdGlvbiBncmVhdGVyVGhhbihvdGhlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcCgvKiB2YWxpZGF0ZXMgKi8gb3RoZXIpID4gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2dyZWF0ZXJUaGFufS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmd0ID0gTG9uZ1Byb3RvdHlwZS5ncmVhdGVyVGhhbjtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ncmVhdGVyVGhhbk9yRXF1YWwgPSBmdW5jdGlvbiBncmVhdGVyVGhhbk9yRXF1YWwob3RoZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA+PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZ3JlYXRlclRoYW5PckVxdWFsfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmd0ZSA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZ3JlYXRlclRoYW5PckVxdWFsfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdlID0gTG9uZ1Byb3RvdHlwZS5ncmVhdGVyVGhhbk9yRXF1YWw7XHJcblxyXG4vKipcclxuICogQ29tcGFyZXMgdGhpcyBMb25nJ3MgdmFsdWUgd2l0aCB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge251bWJlcn0gMCBpZiB0aGV5IGFyZSB0aGUgc2FtZSwgMSBpZiB0aGUgdGhpcyBpcyBncmVhdGVyIGFuZCAtMVxyXG4gKiAgaWYgdGhlIGdpdmVuIG9uZSBpcyBncmVhdGVyXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKG90aGVyKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhvdGhlcikpXHJcbiAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpO1xyXG4gICAgaWYgKHRoaXMuZXEob3RoZXIpKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgdmFyIHRoaXNOZWcgPSB0aGlzLmlzTmVnYXRpdmUoKSxcclxuICAgICAgICBvdGhlck5lZyA9IG90aGVyLmlzTmVnYXRpdmUoKTtcclxuICAgIGlmICh0aGlzTmVnICYmICFvdGhlck5lZylcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICBpZiAoIXRoaXNOZWcgJiYgb3RoZXJOZWcpXHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBzaWduIGJpdHMgYXJlIHRoZSBzYW1lXHJcbiAgICBpZiAoIXRoaXMudW5zaWduZWQpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViKG90aGVyKS5pc05lZ2F0aXZlKCkgPyAtMSA6IDE7XHJcbiAgICAvLyBCb3RoIGFyZSBwb3NpdGl2ZSBpZiBhdCBsZWFzdCBvbmUgaXMgdW5zaWduZWRcclxuICAgIHJldHVybiAob3RoZXIuaGlnaCA+Pj4gMCkgPiAodGhpcy5oaWdoID4+PiAwKSB8fCAob3RoZXIuaGlnaCA9PT0gdGhpcy5oaWdoICYmIChvdGhlci5sb3cgPj4+IDApID4gKHRoaXMubG93ID4+PiAwKSkgPyAtMSA6IDE7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29tcGFyZXMgdGhpcyBMb25nJ3MgdmFsdWUgd2l0aCB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjY29tcGFyZX0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgdGhleSBhcmUgdGhlIHNhbWUsIDEgaWYgdGhlIHRoaXMgaXMgZ3JlYXRlciBhbmQgLTFcclxuICogIGlmIHRoZSBnaXZlbiBvbmUgaXMgZ3JlYXRlclxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5jb21wID0gTG9uZ1Byb3RvdHlwZS5jb21wYXJlO1xyXG5cclxuLyoqXHJcbiAqIE5lZ2F0ZXMgdGhpcyBMb25nJ3MgdmFsdWUuXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gTmVnYXRlZCBMb25nXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm5lZ2F0ZSA9IGZ1bmN0aW9uIG5lZ2F0ZSgpIHtcclxuICAgIGlmICghdGhpcy51bnNpZ25lZCAmJiB0aGlzLmVxKE1JTl9WQUxVRSkpXHJcbiAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTtcclxuICAgIHJldHVybiB0aGlzLm5vdCgpLmFkZChPTkUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE5lZ2F0ZXMgdGhpcyBMb25nJ3MgdmFsdWUuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbmVnYXRlfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gTmVnYXRlZCBMb25nXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm5lZyA9IExvbmdQcm90b3R5cGUubmVnYXRlO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHN1bSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gYWRkZW5kIEFkZGVuZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFN1bVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoYWRkZW5kKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhhZGRlbmQpKVxyXG4gICAgICAgIGFkZGVuZCA9IGZyb21WYWx1ZShhZGRlbmQpO1xyXG5cclxuICAgIC8vIERpdmlkZSBlYWNoIG51bWJlciBpbnRvIDQgY2h1bmtzIG9mIDE2IGJpdHMsIGFuZCB0aGVuIHN1bSB0aGUgY2h1bmtzLlxyXG5cclxuICAgIHZhciBhNDggPSB0aGlzLmhpZ2ggPj4+IDE2O1xyXG4gICAgdmFyIGEzMiA9IHRoaXMuaGlnaCAmIDB4RkZGRjtcclxuICAgIHZhciBhMTYgPSB0aGlzLmxvdyA+Pj4gMTY7XHJcbiAgICB2YXIgYTAwID0gdGhpcy5sb3cgJiAweEZGRkY7XHJcblxyXG4gICAgdmFyIGI0OCA9IGFkZGVuZC5oaWdoID4+PiAxNjtcclxuICAgIHZhciBiMzIgPSBhZGRlbmQuaGlnaCAmIDB4RkZGRjtcclxuICAgIHZhciBiMTYgPSBhZGRlbmQubG93ID4+PiAxNjtcclxuICAgIHZhciBiMDAgPSBhZGRlbmQubG93ICYgMHhGRkZGO1xyXG5cclxuICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwO1xyXG4gICAgYzAwICs9IGEwMCArIGIwMDtcclxuICAgIGMxNiArPSBjMDAgPj4+IDE2O1xyXG4gICAgYzAwICY9IDB4RkZGRjtcclxuICAgIGMxNiArPSBhMTYgKyBiMTY7XHJcbiAgICBjMzIgKz0gYzE2ID4+PiAxNjtcclxuICAgIGMxNiAmPSAweEZGRkY7XHJcbiAgICBjMzIgKz0gYTMyICsgYjMyO1xyXG4gICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XHJcbiAgICBjMzIgJj0gMHhGRkZGO1xyXG4gICAgYzQ4ICs9IGE0OCArIGI0ODtcclxuICAgIGM0OCAmPSAweEZGRkY7XHJcbiAgICByZXR1cm4gZnJvbUJpdHMoKGMxNiA8PCAxNikgfCBjMDAsIChjNDggPDwgMTYpIHwgYzMyLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgTG9uZy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBzdWJ0cmFoZW5kIFN1YnRyYWhlbmRcclxuICogQHJldHVybnMgeyFMb25nfSBEaWZmZXJlbmNlXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnN1YnRyYWN0ID0gZnVuY3Rpb24gc3VidHJhY3Qoc3VidHJhaGVuZCkge1xyXG4gICAgaWYgKCFpc0xvbmcoc3VidHJhaGVuZCkpXHJcbiAgICAgICAgc3VidHJhaGVuZCA9IGZyb21WYWx1ZShzdWJ0cmFoZW5kKTtcclxuICAgIHJldHVybiB0aGlzLmFkZChzdWJ0cmFoZW5kLm5lZygpKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgTG9uZy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNzdWJ0cmFjdH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IHN1YnRyYWhlbmQgU3VidHJhaGVuZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IERpZmZlcmVuY2VcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc3ViID0gTG9uZ1Byb3RvdHlwZS5zdWJ0cmFjdDtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgTG9uZy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBtdWx0aXBsaWVyIE11bHRpcGxpZXJcclxuICogQHJldHVybnMgeyFMb25nfSBQcm9kdWN0XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm11bHRpcGx5ID0gZnVuY3Rpb24gbXVsdGlwbHkobXVsdGlwbGllcikge1xyXG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpXHJcbiAgICAgICAgcmV0dXJuIFpFUk87XHJcbiAgICBpZiAoIWlzTG9uZyhtdWx0aXBsaWVyKSlcclxuICAgICAgICBtdWx0aXBsaWVyID0gZnJvbVZhbHVlKG11bHRpcGxpZXIpO1xyXG5cclxuICAgIC8vIHVzZSB3YXNtIHN1cHBvcnQgaWYgcHJlc2VudFxyXG4gICAgaWYgKHdhc20pIHtcclxuICAgICAgICB2YXIgbG93ID0gd2FzbS5tdWwodGhpcy5sb3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGllci5sb3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIuaGlnaCk7XHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobXVsdGlwbGllci5pc1plcm8oKSlcclxuICAgICAgICByZXR1cm4gWkVSTztcclxuICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpXHJcbiAgICAgICAgcmV0dXJuIG11bHRpcGxpZXIuaXNPZGQoKSA/IE1JTl9WQUxVRSA6IFpFUk87XHJcbiAgICBpZiAobXVsdGlwbGllci5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgIHJldHVybiB0aGlzLmlzT2RkKCkgPyBNSU5fVkFMVUUgOiBaRVJPO1xyXG5cclxuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkge1xyXG4gICAgICAgIGlmIChtdWx0aXBsaWVyLmlzTmVnYXRpdmUoKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkubXVsKG11bHRpcGxpZXIubmVnKCkpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkubXVsKG11bHRpcGxpZXIpLm5lZygpO1xyXG4gICAgfSBlbHNlIGlmIChtdWx0aXBsaWVyLmlzTmVnYXRpdmUoKSlcclxuICAgICAgICByZXR1cm4gdGhpcy5tdWwobXVsdGlwbGllci5uZWcoKSkubmVnKCk7XHJcblxyXG4gICAgLy8gSWYgYm90aCBsb25ncyBhcmUgc21hbGwsIHVzZSBmbG9hdCBtdWx0aXBsaWNhdGlvblxyXG4gICAgaWYgKHRoaXMubHQoVFdPX1BXUl8yNCkgJiYgbXVsdGlwbGllci5sdChUV09fUFdSXzI0KSlcclxuICAgICAgICByZXR1cm4gZnJvbU51bWJlcih0aGlzLnRvTnVtYmVyKCkgKiBtdWx0aXBsaWVyLnRvTnVtYmVyKCksIHRoaXMudW5zaWduZWQpO1xyXG5cclxuICAgIC8vIERpdmlkZSBlYWNoIGxvbmcgaW50byA0IGNodW5rcyBvZiAxNiBiaXRzLCBhbmQgdGhlbiBhZGQgdXAgNHg0IHByb2R1Y3RzLlxyXG4gICAgLy8gV2UgY2FuIHNraXAgcHJvZHVjdHMgdGhhdCB3b3VsZCBvdmVyZmxvdy5cclxuXHJcbiAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjtcclxuICAgIHZhciBhMzIgPSB0aGlzLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYTE2ID0gdGhpcy5sb3cgPj4+IDE2O1xyXG4gICAgdmFyIGEwMCA9IHRoaXMubG93ICYgMHhGRkZGO1xyXG5cclxuICAgIHZhciBiNDggPSBtdWx0aXBsaWVyLmhpZ2ggPj4+IDE2O1xyXG4gICAgdmFyIGIzMiA9IG11bHRpcGxpZXIuaGlnaCAmIDB4RkZGRjtcclxuICAgIHZhciBiMTYgPSBtdWx0aXBsaWVyLmxvdyA+Pj4gMTY7XHJcbiAgICB2YXIgYjAwID0gbXVsdGlwbGllci5sb3cgJiAweEZGRkY7XHJcblxyXG4gICAgdmFyIGM0OCA9IDAsIGMzMiA9IDAsIGMxNiA9IDAsIGMwMCA9IDA7XHJcbiAgICBjMDAgKz0gYTAwICogYjAwO1xyXG4gICAgYzE2ICs9IGMwMCA+Pj4gMTY7XHJcbiAgICBjMDAgJj0gMHhGRkZGO1xyXG4gICAgYzE2ICs9IGExNiAqIGIwMDtcclxuICAgIGMzMiArPSBjMTYgPj4+IDE2O1xyXG4gICAgYzE2ICY9IDB4RkZGRjtcclxuICAgIGMxNiArPSBhMDAgKiBiMTY7XHJcbiAgICBjMzIgKz0gYzE2ID4+PiAxNjtcclxuICAgIGMxNiAmPSAweEZGRkY7XHJcbiAgICBjMzIgKz0gYTMyICogYjAwO1xyXG4gICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XHJcbiAgICBjMzIgJj0gMHhGRkZGO1xyXG4gICAgYzMyICs9IGExNiAqIGIxNjtcclxuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xyXG4gICAgYzMyICY9IDB4RkZGRjtcclxuICAgIGMzMiArPSBhMDAgKiBiMzI7XHJcbiAgICBjNDggKz0gYzMyID4+PiAxNjtcclxuICAgIGMzMiAmPSAweEZGRkY7XHJcbiAgICBjNDggKz0gYTQ4ICogYjAwICsgYTMyICogYjE2ICsgYTE2ICogYjMyICsgYTAwICogYjQ4O1xyXG4gICAgYzQ4ICY9IDB4RkZGRjtcclxuICAgIHJldHVybiBmcm9tQml0cygoYzE2IDw8IDE2KSB8IGMwMCwgKGM0OCA8PCAxNikgfCBjMzIsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHByb2R1Y3Qgb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBMb25nLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI211bHRpcGx5fS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gbXVsdGlwbGllciBNdWx0aXBsaWVyXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUHJvZHVjdFxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5tdWwgPSBMb25nUHJvdG90eXBlLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIGRpdmlkZWQgYnkgdGhlIHNwZWNpZmllZC4gVGhlIHJlc3VsdCBpcyBzaWduZWQgaWYgdGhpcyBMb25nIGlzIHNpZ25lZCBvclxyXG4gKiAgdW5zaWduZWQgaWYgdGhpcyBMb25nIGlzIHVuc2lnbmVkLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFF1b3RpZW50XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmRpdmlkZSA9IGZ1bmN0aW9uIGRpdmlkZShkaXZpc29yKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhkaXZpc29yKSlcclxuICAgICAgICBkaXZpc29yID0gZnJvbVZhbHVlKGRpdmlzb3IpO1xyXG4gICAgaWYgKGRpdmlzb3IuaXNaZXJvKCkpXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ2RpdmlzaW9uIGJ5IHplcm8nKTtcclxuXHJcbiAgICAvLyB1c2Ugd2FzbSBzdXBwb3J0IGlmIHByZXNlbnRcclxuICAgIGlmICh3YXNtKSB7XHJcbiAgICAgICAgLy8gZ3VhcmQgYWdhaW5zdCBzaWduZWQgZGl2aXNpb24gb3ZlcmZsb3c6IHRoZSBsYXJnZXN0XHJcbiAgICAgICAgLy8gbmVnYXRpdmUgbnVtYmVyIC8gLTEgd291bGQgYmUgMSBsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdFxyXG4gICAgICAgIC8vIHBvc2l0aXZlIG51bWJlciwgZHVlIHRvIHR3bydzIGNvbXBsZW1lbnQuXHJcbiAgICAgICAgaWYgKCF0aGlzLnVuc2lnbmVkICYmXHJcbiAgICAgICAgICAgIHRoaXMuaGlnaCA9PT0gLTB4ODAwMDAwMDAgJiZcclxuICAgICAgICAgICAgZGl2aXNvci5sb3cgPT09IC0xICYmIGRpdmlzb3IuaGlnaCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgLy8gYmUgY29uc2lzdGVudCB3aXRoIG5vbi13YXNtIGNvZGUgcGF0aFxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxvdyA9ICh0aGlzLnVuc2lnbmVkID8gd2FzbS5kaXZfdSA6IHdhc20uZGl2X3MpKFxyXG4gICAgICAgICAgICB0aGlzLmxvdyxcclxuICAgICAgICAgICAgdGhpcy5oaWdoLFxyXG4gICAgICAgICAgICBkaXZpc29yLmxvdyxcclxuICAgICAgICAgICAgZGl2aXNvci5oaWdoXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZnJvbUJpdHMobG93LCB3YXNtLmdldF9oaWdoKCksIHRoaXMudW5zaWduZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzWmVybygpKVxyXG4gICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gVVpFUk8gOiBaRVJPO1xyXG4gICAgdmFyIGFwcHJveCwgcmVtLCByZXM7XHJcbiAgICBpZiAoIXRoaXMudW5zaWduZWQpIHtcclxuICAgICAgICAvLyBUaGlzIHNlY3Rpb24gaXMgb25seSByZWxldmFudCBmb3Igc2lnbmVkIGxvbmdzIGFuZCBpcyBkZXJpdmVkIGZyb20gdGhlXHJcbiAgICAgICAgLy8gY2xvc3VyZSBsaWJyYXJ5IGFzIGEgd2hvbGUuXHJcbiAgICAgICAgaWYgKHRoaXMuZXEoTUlOX1ZBTFVFKSkge1xyXG4gICAgICAgICAgICBpZiAoZGl2aXNvci5lcShPTkUpIHx8IGRpdmlzb3IuZXEoTkVHX09ORSkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTUlOX1ZBTFVFOyAgLy8gcmVjYWxsIHRoYXQgLU1JTl9WQUxVRSA9PSBNSU5fVkFMVUVcclxuICAgICAgICAgICAgZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9ORTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIHxvdGhlcnwgPj0gMiwgc28gfHRoaXMvb3RoZXJ8IDwgfE1JTl9WQUxVRXwuXHJcbiAgICAgICAgICAgICAgICB2YXIgaGFsZlRoaXMgPSB0aGlzLnNocigxKTtcclxuICAgICAgICAgICAgICAgIGFwcHJveCA9IGhhbGZUaGlzLmRpdihkaXZpc29yKS5zaGwoMSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXBwcm94LmVxKFpFUk8pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpdmlzb3IuaXNOZWdhdGl2ZSgpID8gT05FIDogTkVHX09ORTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtID0gdGhpcy5zdWIoZGl2aXNvci5tdWwoYXBwcm94KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gYXBwcm94LmFkZChyZW0uZGl2KGRpdmlzb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXZpc29yLmVxKE1JTl9WQUxVRSkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gVVpFUk8gOiBaRVJPO1xyXG4gICAgICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkge1xyXG4gICAgICAgICAgICBpZiAoZGl2aXNvci5pc05lZ2F0aXZlKCkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5kaXYoZGl2aXNvci5uZWcoKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLmRpdihkaXZpc29yKS5uZWcoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXYoZGl2aXNvci5uZWcoKSkubmVnKCk7XHJcbiAgICAgICAgcmVzID0gWkVSTztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVGhlIGFsZ29yaXRobSBiZWxvdyBoYXMgbm90IGJlZW4gbWFkZSBmb3IgdW5zaWduZWQgbG9uZ3MuIEl0J3MgdGhlcmVmb3JlXHJcbiAgICAgICAgLy8gcmVxdWlyZWQgdG8gdGFrZSBzcGVjaWFsIGNhcmUgb2YgdGhlIE1TQiBwcmlvciB0byBydW5uaW5nIGl0LlxyXG4gICAgICAgIGlmICghZGl2aXNvci51bnNpZ25lZClcclxuICAgICAgICAgICAgZGl2aXNvciA9IGRpdmlzb3IudG9VbnNpZ25lZCgpO1xyXG4gICAgICAgIGlmIChkaXZpc29yLmd0KHRoaXMpKVxyXG4gICAgICAgICAgICByZXR1cm4gVVpFUk87XHJcbiAgICAgICAgaWYgKGRpdmlzb3IuZ3QodGhpcy5zaHJ1KDEpKSkgLy8gMTUgPj4+IDEgPSA3IDsgd2l0aCBkaXZpc29yID0gOCA7IHRydWVcclxuICAgICAgICAgICAgcmV0dXJuIFVPTkU7XHJcbiAgICAgICAgcmVzID0gVVpFUk87XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVwZWF0IHRoZSBmb2xsb3dpbmcgdW50aWwgdGhlIHJlbWFpbmRlciBpcyBsZXNzIHRoYW4gb3RoZXI6ICBmaW5kIGFcclxuICAgIC8vIGZsb2F0aW5nLXBvaW50IHRoYXQgYXBwcm94aW1hdGVzIHJlbWFpbmRlciAvIG90aGVyICpmcm9tIGJlbG93KiwgYWRkIHRoaXNcclxuICAgIC8vIGludG8gdGhlIHJlc3VsdCwgYW5kIHN1YnRyYWN0IGl0IGZyb20gdGhlIHJlbWFpbmRlci4gIEl0IGlzIGNyaXRpY2FsIHRoYXRcclxuICAgIC8vIHRoZSBhcHByb3hpbWF0ZSB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJlYWwgdmFsdWUgc28gdGhhdCB0aGVcclxuICAgIC8vIHJlbWFpbmRlciBuZXZlciBiZWNvbWVzIG5lZ2F0aXZlLlxyXG4gICAgcmVtID0gdGhpcztcclxuICAgIHdoaWxlIChyZW0uZ3RlKGRpdmlzb3IpKSB7XHJcbiAgICAgICAgLy8gQXBwcm94aW1hdGUgdGhlIHJlc3VsdCBvZiBkaXZpc2lvbi4gVGhpcyBtYXkgYmUgYSBsaXR0bGUgZ3JlYXRlciBvclxyXG4gICAgICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgYWN0dWFsIHZhbHVlLlxyXG4gICAgICAgIGFwcHJveCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IocmVtLnRvTnVtYmVyKCkgLyBkaXZpc29yLnRvTnVtYmVyKCkpKTtcclxuXHJcbiAgICAgICAgLy8gV2Ugd2lsbCB0d2VhayB0aGUgYXBwcm94aW1hdGUgcmVzdWx0IGJ5IGNoYW5naW5nIGl0IGluIHRoZSA0OC10aCBkaWdpdCBvclxyXG4gICAgICAgIC8vIHRoZSBzbWFsbGVzdCBub24tZnJhY3Rpb25hbCBkaWdpdCwgd2hpY2hldmVyIGlzIGxhcmdlci5cclxuICAgICAgICB2YXIgbG9nMiA9IE1hdGguY2VpbChNYXRoLmxvZyhhcHByb3gpIC8gTWF0aC5MTjIpLFxyXG4gICAgICAgICAgICBkZWx0YSA9IChsb2cyIDw9IDQ4KSA/IDEgOiBwb3dfZGJsKDIsIGxvZzIgLSA0OCksXHJcblxyXG4gICAgICAgIC8vIERlY3JlYXNlIHRoZSBhcHByb3hpbWF0aW9uIHVudGlsIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVtYWluZGVyLiAgTm90ZVxyXG4gICAgICAgIC8vIHRoYXQgaWYgaXQgaXMgdG9vIGxhcmdlLCB0aGUgcHJvZHVjdCBvdmVyZmxvd3MgYW5kIGlzIG5lZ2F0aXZlLlxyXG4gICAgICAgICAgICBhcHByb3hSZXMgPSBmcm9tTnVtYmVyKGFwcHJveCksXHJcbiAgICAgICAgICAgIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWwoZGl2aXNvcik7XHJcbiAgICAgICAgd2hpbGUgKGFwcHJveFJlbS5pc05lZ2F0aXZlKCkgfHwgYXBwcm94UmVtLmd0KHJlbSkpIHtcclxuICAgICAgICAgICAgYXBwcm94IC09IGRlbHRhO1xyXG4gICAgICAgICAgICBhcHByb3hSZXMgPSBmcm9tTnVtYmVyKGFwcHJveCwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICAgICAgICAgIGFwcHJveFJlbSA9IGFwcHJveFJlcy5tdWwoZGl2aXNvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXZSBrbm93IHRoZSBhbnN3ZXIgY2FuJ3QgYmUgemVyby4uLiBhbmQgYWN0dWFsbHksIHplcm8gd291bGQgY2F1c2VcclxuICAgICAgICAvLyBpbmZpbml0ZSByZWN1cnNpb24gc2luY2Ugd2Ugd291bGQgbWFrZSBubyBwcm9ncmVzcy5cclxuICAgICAgICBpZiAoYXBwcm94UmVzLmlzWmVybygpKVxyXG4gICAgICAgICAgICBhcHByb3hSZXMgPSBPTkU7XHJcblxyXG4gICAgICAgIHJlcyA9IHJlcy5hZGQoYXBwcm94UmVzKTtcclxuICAgICAgICByZW0gPSByZW0uc3ViKGFwcHJveFJlbSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIGRpdmlkZWQgYnkgdGhlIHNwZWNpZmllZC4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNkaXZpZGV9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcclxuICogQHJldHVybnMgeyFMb25nfSBRdW90aWVudFxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5kaXYgPSBMb25nUHJvdG90eXBlLmRpdmlkZTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyBtb2R1bG8gdGhlIHNwZWNpZmllZC5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcclxuICogQHJldHVybnMgeyFMb25nfSBSZW1haW5kZXJcclxuICovXHJcbkxvbmdQcm90b3R5cGUubW9kdWxvID0gZnVuY3Rpb24gbW9kdWxvKGRpdmlzb3IpIHtcclxuICAgIGlmICghaXNMb25nKGRpdmlzb3IpKVxyXG4gICAgICAgIGRpdmlzb3IgPSBmcm9tVmFsdWUoZGl2aXNvcik7XHJcblxyXG4gICAgLy8gdXNlIHdhc20gc3VwcG9ydCBpZiBwcmVzZW50XHJcbiAgICBpZiAod2FzbSkge1xyXG4gICAgICAgIHZhciBsb3cgPSAodGhpcy51bnNpZ25lZCA/IHdhc20ucmVtX3UgOiB3YXNtLnJlbV9zKShcclxuICAgICAgICAgICAgdGhpcy5sb3csXHJcbiAgICAgICAgICAgIHRoaXMuaGlnaCxcclxuICAgICAgICAgICAgZGl2aXNvci5sb3csXHJcbiAgICAgICAgICAgIGRpdmlzb3IuaGlnaFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5zdWIodGhpcy5kaXYoZGl2aXNvcikubXVsKGRpdmlzb3IpKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyBtb2R1bG8gdGhlIHNwZWNpZmllZC4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNtb2R1bG99LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcclxuICogQHJldHVybnMgeyFMb25nfSBSZW1haW5kZXJcclxuICovXHJcbkxvbmdQcm90b3R5cGUubW9kID0gTG9uZ1Byb3RvdHlwZS5tb2R1bG87XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgbW9kdWxvIHRoZSBzcGVjaWZpZWQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbW9kdWxvfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUmVtYWluZGVyXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnJlbSA9IExvbmdQcm90b3R5cGUubW9kdWxvO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGJpdHdpc2UgTk9UIG9mIHRoaXMgTG9uZy5cclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ub3QgPSBmdW5jdGlvbiBub3QoKSB7XHJcbiAgICByZXR1cm4gZnJvbUJpdHMofnRoaXMubG93LCB+dGhpcy5oaWdoLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBiaXR3aXNlIEFORCBvZiB0aGlzIExvbmcgYW5kIHRoZSBzcGVjaWZpZWQuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgTG9uZ1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZChvdGhlcikge1xyXG4gICAgaWYgKCFpc0xvbmcob3RoZXIpKVxyXG4gICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyAmIG90aGVyLmxvdywgdGhpcy5oaWdoICYgb3RoZXIuaGlnaCwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgYml0d2lzZSBPUiBvZiB0aGlzIExvbmcgYW5kIHRoZSBzcGVjaWZpZWQuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgTG9uZ1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3Iob3RoZXIpIHtcclxuICAgIGlmICghaXNMb25nKG90aGVyKSlcclxuICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XHJcbiAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgfCBvdGhlci5sb3csIHRoaXMuaGlnaCB8IG90aGVyLmhpZ2gsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGJpdHdpc2UgWE9SIG9mIHRoaXMgTG9uZyBhbmQgdGhlIGdpdmVuIG9uZS5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciBMb25nXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICovXHJcbkxvbmdQcm90b3R5cGUueG9yID0gZnVuY3Rpb24geG9yKG90aGVyKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhvdGhlcikpXHJcbiAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IF4gb3RoZXIubG93LCB0aGlzLmhpZ2ggXiBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgc2hpZnRlZCB0byB0aGUgbGVmdCBieSB0aGUgZ2l2ZW4gYW1vdW50LlxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaGlmdExlZnQgPSBmdW5jdGlvbiBzaGlmdExlZnQobnVtQml0cykge1xyXG4gICAgaWYgKGlzTG9uZyhudW1CaXRzKSlcclxuICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpO1xyXG4gICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMilcclxuICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgPDwgbnVtQml0cywgKHRoaXMuaGlnaCA8PCBudW1CaXRzKSB8ICh0aGlzLmxvdyA+Pj4gKDMyIC0gbnVtQml0cykpLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gZnJvbUJpdHMoMCwgdGhpcy5sb3cgPDwgKG51bUJpdHMgLSAzMiksIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBzaGlmdGVkIHRvIHRoZSBsZWZ0IGJ5IHRoZSBnaXZlbiBhbW91bnQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjc2hpZnRMZWZ0fS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfCFMb25nfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU2hpZnRlZCBMb25nXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnNobCA9IExvbmdQcm90b3R5cGUuc2hpZnRMZWZ0O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBhcml0aG1ldGljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LlxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0ID0gZnVuY3Rpb24gc2hpZnRSaWdodChudW1CaXRzKSB7XHJcbiAgICBpZiAoaXNMb25nKG51bUJpdHMpKVxyXG4gICAgICAgIG51bUJpdHMgPSBudW1CaXRzLnRvSW50KCk7XHJcbiAgICBpZiAoKG51bUJpdHMgJj0gNjMpID09PSAwKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgZWxzZSBpZiAobnVtQml0cyA8IDMyKVxyXG4gICAgICAgIHJldHVybiBmcm9tQml0cygodGhpcy5sb3cgPj4+IG51bUJpdHMpIHwgKHRoaXMuaGlnaCA8PCAoMzIgLSBudW1CaXRzKSksIHRoaXMuaGlnaCA+PiBudW1CaXRzLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gZnJvbUJpdHModGhpcy5oaWdoID4+IChudW1CaXRzIC0gMzIpLCB0aGlzLmhpZ2ggPj0gMCA/IDAgOiAtMSwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGFyaXRobWV0aWNhbGx5IHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IGJ5IHRoZSBnaXZlbiBhbW91bnQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjc2hpZnRSaWdodH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaHIgPSBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHQ7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGxvZ2ljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LlxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQgPSBmdW5jdGlvbiBzaGlmdFJpZ2h0VW5zaWduZWQobnVtQml0cykge1xyXG4gICAgaWYgKGlzTG9uZyhudW1CaXRzKSlcclxuICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpO1xyXG4gICAgbnVtQml0cyAmPSA2MztcclxuICAgIGlmIChudW1CaXRzID09PSAwKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGhpZ2ggPSB0aGlzLmhpZ2g7XHJcbiAgICAgICAgaWYgKG51bUJpdHMgPCAzMikge1xyXG4gICAgICAgICAgICB2YXIgbG93ID0gdGhpcy5sb3c7XHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cygobG93ID4+PiBudW1CaXRzKSB8IChoaWdoIDw8ICgzMiAtIG51bUJpdHMpKSwgaGlnaCA+Pj4gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChudW1CaXRzID09PSAzMilcclxuICAgICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGhpZ2gsIDAsIHRoaXMudW5zaWduZWQpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIGZyb21CaXRzKGhpZ2ggPj4+IChudW1CaXRzIC0gMzIpLCAwLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgbG9naWNhbGx5IHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IGJ5IHRoZSBnaXZlbiBhbW91bnQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjc2hpZnRSaWdodFVuc2lnbmVkfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfCFMb25nfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU2hpZnRlZCBMb25nXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnNocnUgPSBMb25nUHJvdG90eXBlLnNoaWZ0UmlnaHRVbnNpZ25lZDtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgbG9naWNhbGx5IHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IGJ5IHRoZSBnaXZlbiBhbW91bnQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjc2hpZnRSaWdodFVuc2lnbmVkfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfCFMb25nfSBudW1CaXRzIE51bWJlciBvZiBiaXRzXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU2hpZnRlZCBMb25nXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnNocl91ID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQ7XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIHNpZ25lZC5cclxuICogQHJldHVybnMgeyFMb25nfSBTaWduZWQgbG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b1NpZ25lZCA9IGZ1bmN0aW9uIHRvU2lnbmVkKCkge1xyXG4gICAgaWYgKCF0aGlzLnVuc2lnbmVkKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93LCB0aGlzLmhpZ2gsIGZhbHNlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGlzIExvbmcgdG8gdW5zaWduZWQuXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVW5zaWduZWQgbG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b1Vuc2lnbmVkID0gZnVuY3Rpb24gdG9VbnNpZ25lZCgpIHtcclxuICAgIGlmICh0aGlzLnVuc2lnbmVkKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93LCB0aGlzLmhpZ2gsIHRydWUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoaXMgTG9uZyB0byBpdHMgYnl0ZSByZXByZXNlbnRhdGlvbi5cclxuICogQHBhcmFtIHtib29sZWFuPX0gbGUgV2hldGhlciBsaXR0bGUgb3IgYmlnIGVuZGlhbiwgZGVmYXVsdHMgdG8gYmlnIGVuZGlhblxyXG4gKiBAcmV0dXJucyB7IUFycmF5LjxudW1iZXI+fSBCeXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnRvQnl0ZXMgPSBmdW5jdGlvbiB0b0J5dGVzKGxlKSB7XHJcbiAgICByZXR1cm4gbGUgPyB0aGlzLnRvQnl0ZXNMRSgpIDogdGhpcy50b0J5dGVzQkUoKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGlzIExvbmcgdG8gaXRzIGxpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvbi5cclxuICogQHJldHVybnMgeyFBcnJheS48bnVtYmVyPn0gTGl0dGxlIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnRvQnl0ZXNMRSA9IGZ1bmN0aW9uIHRvQnl0ZXNMRSgpIHtcclxuICAgIHZhciBoaSA9IHRoaXMuaGlnaCxcclxuICAgICAgICBsbyA9IHRoaXMubG93O1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBsbyAgICAgICAgJiAweGZmLFxyXG4gICAgICAgIGxvID4+PiAgOCAmIDB4ZmYsXHJcbiAgICAgICAgbG8gPj4+IDE2ICYgMHhmZixcclxuICAgICAgICBsbyA+Pj4gMjQgICAgICAgLFxyXG4gICAgICAgIGhpICAgICAgICAmIDB4ZmYsXHJcbiAgICAgICAgaGkgPj4+ICA4ICYgMHhmZixcclxuICAgICAgICBoaSA+Pj4gMTYgJiAweGZmLFxyXG4gICAgICAgIGhpID4+PiAyNFxyXG4gICAgXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGlzIExvbmcgdG8gaXRzIGJpZyBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvbi5cclxuICogQHJldHVybnMgeyFBcnJheS48bnVtYmVyPn0gQmlnIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnRvQnl0ZXNCRSA9IGZ1bmN0aW9uIHRvQnl0ZXNCRSgpIHtcclxuICAgIHZhciBoaSA9IHRoaXMuaGlnaCxcclxuICAgICAgICBsbyA9IHRoaXMubG93O1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBoaSA+Pj4gMjQgICAgICAgLFxyXG4gICAgICAgIGhpID4+PiAxNiAmIDB4ZmYsXHJcbiAgICAgICAgaGkgPj4+ICA4ICYgMHhmZixcclxuICAgICAgICBoaSAgICAgICAgJiAweGZmLFxyXG4gICAgICAgIGxvID4+PiAyNCAgICAgICAsXHJcbiAgICAgICAgbG8gPj4+IDE2ICYgMHhmZixcclxuICAgICAgICBsbyA+Pj4gIDggJiAweGZmLFxyXG4gICAgICAgIGxvICAgICAgICAmIDB4ZmZcclxuICAgIF07XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIExvbmcgZnJvbSBpdHMgYnl0ZSByZXByZXNlbnRhdGlvbi5cclxuICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGJ5dGVzIEJ5dGUgcmVwcmVzZW50YXRpb25cclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBsZSBXaGV0aGVyIGxpdHRsZSBvciBiaWcgZW5kaWFuLCBkZWZhdWx0cyB0byBiaWcgZW5kaWFuXHJcbiAqIEByZXR1cm5zIHtMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21CeXRlcyA9IGZ1bmN0aW9uIGZyb21CeXRlcyhieXRlcywgdW5zaWduZWQsIGxlKSB7XHJcbiAgICByZXR1cm4gbGUgPyBMb25nLmZyb21CeXRlc0xFKGJ5dGVzLCB1bnNpZ25lZCkgOiBMb25nLmZyb21CeXRlc0JFKGJ5dGVzLCB1bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIExvbmcgZnJvbSBpdHMgbGl0dGxlIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uLlxyXG4gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gYnl0ZXMgTGl0dGxlIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMge0xvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcclxuICovXHJcbkxvbmcuZnJvbUJ5dGVzTEUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIHtcclxuICAgIHJldHVybiBuZXcgTG9uZyhcclxuICAgICAgICBieXRlc1swXSAgICAgICB8XHJcbiAgICAgICAgYnl0ZXNbMV0gPDwgIDggfFxyXG4gICAgICAgIGJ5dGVzWzJdIDw8IDE2IHxcclxuICAgICAgICBieXRlc1szXSA8PCAyNCxcclxuICAgICAgICBieXRlc1s0XSAgICAgICB8XHJcbiAgICAgICAgYnl0ZXNbNV0gPDwgIDggfFxyXG4gICAgICAgIGJ5dGVzWzZdIDw8IDE2IHxcclxuICAgICAgICBieXRlc1s3XSA8PCAyNCxcclxuICAgICAgICB1bnNpZ25lZFxyXG4gICAgKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgTG9uZyBmcm9tIGl0cyBiaWcgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBieXRlcyBCaWcgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb25cclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWQgV2hldGhlciB1bnNpZ25lZCBvciBub3QsIGRlZmF1bHRzIHRvIHNpZ25lZFxyXG4gKiBAcmV0dXJucyB7TG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tQnl0ZXNCRSA9IGZ1bmN0aW9uIGZyb21CeXRlc0JFKGJ5dGVzLCB1bnNpZ25lZCkge1xyXG4gICAgcmV0dXJuIG5ldyBMb25nKFxyXG4gICAgICAgIGJ5dGVzWzRdIDw8IDI0IHxcclxuICAgICAgICBieXRlc1s1XSA8PCAxNiB8XHJcbiAgICAgICAgYnl0ZXNbNl0gPDwgIDggfFxyXG4gICAgICAgIGJ5dGVzWzddLFxyXG4gICAgICAgIGJ5dGVzWzBdIDw8IDI0IHxcclxuICAgICAgICBieXRlc1sxXSA8PCAxNiB8XHJcbiAgICAgICAgYnl0ZXNbMl0gPDwgIDggfFxyXG4gICAgICAgIGJ5dGVzWzNdLFxyXG4gICAgICAgIHVuc2lnbmVkXHJcbiAgICApO1xyXG59O1xyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3IzIHtcbiAgcjogbnVtYmVyXG4gIGc6IG51bWJlclxuICBiOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZUNvbG9yMygpOiBDb2xvcjMge1xuICByZXR1cm4geyByOiAwLCBnOiAwLCBiOiAwIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ29sb3IzID0ge1xuICBlbmNvZGUobWVzc2FnZTogQ29sb3IzLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuciAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMykuZmxvYXQobWVzc2FnZS5yKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5nICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjkpLmZsb2F0KG1lc3NhZ2UuYilcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IENvbG9yMyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlQ29sb3IzKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5yID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5nID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5iID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgTG9uZyBmcm9tICdsb25nJ1xuaW1wb3J0IHsgQ29sb3IzIH0gZnJvbSAnLi9jb21tb24vQ29sb3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQXZhdGFyU2hhcGUge1xuICBpZDogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgYm9keVNoYXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIHNraW5Db2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICBoYWlyQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgZXllQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgd2VhcmFibGVzOiBzdHJpbmdbXVxuICBleHByZXNzaW9uVHJpZ2dlcklkPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGV4cHJlc3Npb25UcmlnZ2VyVGltZXN0YW1wPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHN0aWNrZXJUcmlnZ2VySWQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgc3RpY2tlclRyaWdnZXJUaW1lc3RhbXA/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgdGFsa2luZz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQXZhdGFyU2hhcGUoKTogUEJBdmF0YXJTaGFwZSB7XG4gIHJldHVybiB7XG4gICAgaWQ6ICcnLFxuICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICBib2R5U2hhcGU6IHVuZGVmaW5lZCxcbiAgICBza2luQ29sb3I6IHVuZGVmaW5lZCxcbiAgICBoYWlyQ29sb3I6IHVuZGVmaW5lZCxcbiAgICBleWVDb2xvcjogdW5kZWZpbmVkLFxuICAgIHdlYXJhYmxlczogW10sXG4gICAgZXhwcmVzc2lvblRyaWdnZXJJZDogdW5kZWZpbmVkLFxuICAgIGV4cHJlc3Npb25UcmlnZ2VyVGltZXN0YW1wOiB1bmRlZmluZWQsXG4gICAgc3RpY2tlclRyaWdnZXJJZDogdW5kZWZpbmVkLFxuICAgIHN0aWNrZXJUcmlnZ2VyVGltZXN0YW1wOiB1bmRlZmluZWQsXG4gICAgdGFsa2luZzogdW5kZWZpbmVkXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdmF0YXJTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXZhdGFyU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5pZCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmlkKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLm5hbWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmJvZHlTaGFwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS5ib2R5U2hhcGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNraW5Db2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2Uuc2tpbkNvbG9yLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmhhaXJDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuaGFpckNvbG9yLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmV5ZUNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5leWVDb2xvciwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS53ZWFyYWJsZXMpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTgpLnN0cmluZyh2ISlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXhwcmVzc2lvblRyaWdnZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY2KS5zdHJpbmcobWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlcklkKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlclRpbWVzdGFtcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDcyKS5pbnQ2NChtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VyVGltZXN0YW1wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zdGlja2VyVHJpZ2dlcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoODIpLnN0cmluZyhtZXNzYWdlLnN0aWNrZXJUcmlnZ2VySWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnN0aWNrZXJUcmlnZ2VyVGltZXN0YW1wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoODgpLmludDY0KG1lc3NhZ2Uuc3RpY2tlclRyaWdnZXJUaW1lc3RhbXApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRhbGtpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig5NikuYm9vbChtZXNzYWdlLnRhbGtpbmcpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkF2YXRhclNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF2YXRhclNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5pZCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5ib2R5U2hhcGUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5za2luQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmhhaXJDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuZXllQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLndlYXJhYmxlcy5wdXNoKHJlYWRlci5zdHJpbmcoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlcklkID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2UuZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXAgPSBsb25nVG9OdW1iZXIocmVhZGVyLmludDY0KCkgYXMgTG9uZylcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIG1lc3NhZ2Uuc3RpY2tlclRyaWdnZXJJZCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgbWVzc2FnZS5zdGlja2VyVHJpZ2dlclRpbWVzdGFtcCA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgbWVzc2FnZS50YWxraW5nID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5kZWNsYXJlIHZhciBzZWxmOiBhbnkgfCB1bmRlZmluZWRcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55IHwgdW5kZWZpbmVkXG5kZWNsYXJlIHZhciBnbG9iYWw6IGFueSB8IHVuZGVmaW5lZFxudmFyIGdsb2JhbFRoaXM6IGFueSA9ICgoKSA9PiB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxUaGlzXG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBzZWxmXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHdpbmRvd1xuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxcbiAgdGhyb3cgJ1VuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCdcbn0pKClcblxuZnVuY3Rpb24gbG9uZ1RvTnVtYmVyKGxvbmc6IExvbmcpOiBudW1iZXIge1xuICBpZiAobG9uZy5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpIHtcbiAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcignVmFsdWUgaXMgbGFyZ2VyIHRoYW4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVInKVxuICB9XG4gIHJldHVybiBsb25nLnRvTnVtYmVyKClcbn1cblxuaWYgKF9tMC51dGlsLkxvbmcgIT09IExvbmcpIHtcbiAgX20wLnV0aWwuTG9uZyA9IExvbmcgYXMgYW55XG4gIF9tMC5jb25maWd1cmUoKVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF2YXRhclNoYXBlIH0gZnJvbSAnLi9wYi9BdmF0YXJTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDgwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBdmF0YXJTaGFwZVNjaGVtYTogSVNjaGVtYTxQQkF2YXRhclNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF2YXRhclNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJBdmF0YXJTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdmF0YXJTaGFwZSB7XG4gICAgcmV0dXJuIFBCQXZhdGFyU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkF2YXRhclNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdmF0YXJTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQmlsbGJvYXJkIHtcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICB4PzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHk/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgej86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQmlsbGJvYXJkKCk6IFBCQmlsbGJvYXJkIHtcbiAgcmV0dXJuIHsgeDogdW5kZWZpbmVkLCB5OiB1bmRlZmluZWQsIHo6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQmlsbGJvYXJkID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJCaWxsYm9hcmQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS54ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLngpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLnkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnogIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnopXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkJpbGxib2FyZCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJCaWxsYm9hcmQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnggPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UueSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS56ID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkJpbGxib2FyZCB9IGZyb20gJy4vcGIvQmlsbGJvYXJkLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwOTBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEJpbGxib2FyZFNjaGVtYTogSVNjaGVtYTxQQkJpbGxib2FyZD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJCaWxsYm9hcmQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkJpbGxib2FyZC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJCaWxsYm9hcmQge1xuICAgIHJldHVybiBQQkJpbGxib2FyZC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQmlsbGJvYXJkIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJCaWxsYm9hcmQuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkJveFNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIHV2czogbnVtYmVyW11cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQm94U2hhcGUoKTogUEJCb3hTaGFwZSB7XG4gIHJldHVybiB7IHdpdGhDb2xsaXNpb25zOiB1bmRlZmluZWQsIGlzUG9pbnRlckJsb2NrZXI6IHVuZGVmaW5lZCwgdmlzaWJsZTogdW5kZWZpbmVkLCB1dnM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJCb3hTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQm94U2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpXG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudXZzKSB7XG4gICAgICB3cml0ZXIuZmxvYXQodilcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpXG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQm94U2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQm94U2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJCb3hTaGFwZSB9IGZyb20gJy4vcGIvQm94U2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxM1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQm94U2hhcGVTY2hlbWE6IElTY2hlbWE8UEJCb3hTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJCb3hTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQm94U2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQm94U2hhcGUge1xuICAgIHJldHVybiBQQkJveFNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJCb3hTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQm94U2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDYW1lcmFNb2RlVmFsdWUgfSBmcm9tICcuL2NvbW1vbi9DYW1lcmFNb2RlVmFsdWUuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJDYW1lcmFNb2RlIHtcbiAgbW9kZTogQ2FtZXJhTW9kZVZhbHVlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkNhbWVyYU1vZGUoKTogUEJDYW1lcmFNb2RlIHtcbiAgcmV0dXJuIHsgbW9kZTogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQ2FtZXJhTW9kZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQ2FtZXJhTW9kZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm1vZGUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuaW50MzIobWVzc2FnZS5tb2RlKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJDYW1lcmFNb2RlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkNhbWVyYU1vZGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLm1vZGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJDYW1lcmFNb2RlIH0gZnJvbSAnLi9wYi9DYW1lcmFNb2RlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzJcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENhbWVyYU1vZGVTY2hlbWE6IElTY2hlbWE8UEJDYW1lcmFNb2RlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkNhbWVyYU1vZGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkNhbWVyYU1vZGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQ2FtZXJhTW9kZSB7XG4gICAgcmV0dXJuIFBCQ2FtZXJhTW9kZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQ2FtZXJhTW9kZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQ2FtZXJhTW9kZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENhbWVyYU1vZGVWYWx1ZSB9IGZyb20gJy4vY29tbW9uL0NhbWVyYU1vZGVWYWx1ZS5nZW4nXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkNhbWVyYU1vZGVBcmVhIHtcbiAgYXJlYTogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBtb2RlOiBDYW1lcmFNb2RlVmFsdWVcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQ2FtZXJhTW9kZUFyZWEoKTogUEJDYW1lcmFNb2RlQXJlYSB7XG4gIHJldHVybiB7IGFyZWE6IHVuZGVmaW5lZCwgbW9kZTogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQ2FtZXJhTW9kZUFyZWEgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkNhbWVyYU1vZGVBcmVhLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYXJlYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLmFyZWEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubW9kZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5tb2RlKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJDYW1lcmFNb2RlQXJlYSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJDYW1lcmFNb2RlQXJlYSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYXJlYSA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLm1vZGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJDYW1lcmFNb2RlQXJlYSB9IGZyb20gJy4vcGIvQ2FtZXJhTW9kZUFyZWEuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA3MVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ2FtZXJhTW9kZUFyZWFTY2hlbWE6IElTY2hlbWE8UEJDYW1lcmFNb2RlQXJlYT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJDYW1lcmFNb2RlQXJlYSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQ2FtZXJhTW9kZUFyZWEuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICAgIHJldHVybiBQQkNhbWVyYU1vZGVBcmVhLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJDYW1lcmFNb2RlQXJlYSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQ2FtZXJhTW9kZUFyZWEuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkN5bGluZGVyU2hhcGUge1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgd2l0aENvbGxpc2lvbnM/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICBpc1BvaW50ZXJCbG9ja2VyPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIEhpZGRlbkNvbXBvbmVudCBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNTMgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c1RvcD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgcmFkaXVzQm90dG9tPzogbnVtYmVyIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkN5bGluZGVyU2hhcGUoKTogUEJDeWxpbmRlclNoYXBlIHtcbiAgcmV0dXJuIHtcbiAgICB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLFxuICAgIGlzUG9pbnRlckJsb2NrZXI6IHVuZGVmaW5lZCxcbiAgICB2aXNpYmxlOiB1bmRlZmluZWQsXG4gICAgcmFkaXVzVG9wOiB1bmRlZmluZWQsXG4gICAgcmFkaXVzQm90dG9tOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkN5bGluZGVyU2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkN5bGluZGVyU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzcpLmZsb2F0KG1lc3NhZ2UucmFkaXVzVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNCb3R0b20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0NSkuZmxvYXQobWVzc2FnZS5yYWRpdXNCb3R0b20pXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQ3lsaW5kZXJTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnJhZGl1c1RvcCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJDeWxpbmRlclNoYXBlIH0gZnJvbSAnLi9wYi9DeWxpbmRlclNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTZcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEN5bGluZGVyU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJDeWxpbmRlclNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkN5bGluZGVyU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkN5bGluZGVyU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQ3lsaW5kZXJTaGFwZSB7XG4gICAgcmV0dXJuIFBCQ3lsaW5kZXJTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQ3lsaW5kZXJTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQ3lsaW5kZXJTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCR0xURlNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIHNyYzogc3RyaW5nXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkdMVEZTaGFwZSgpOiBQQkdMVEZTaGFwZSB7XG4gIHJldHVybiB7IHdpdGhDb2xsaXNpb25zOiB1bmRlZmluZWQsIGlzUG9pbnRlckJsb2NrZXI6IHVuZGVmaW5lZCwgdmlzaWJsZTogdW5kZWZpbmVkLCBzcmM6ICcnIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJHTFRGU2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkdMVEZTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcmMgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM0KS5zdHJpbmcobWVzc2FnZS5zcmMpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkdMVEZTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJHTFRGU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5zcmMgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJHTFRGU2hhcGUgfSBmcm9tICcuL3BiL0dMVEZTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDQxXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBHTFRGU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJHTFRGU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCR0xURlNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJHTFRGU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCR0xURlNoYXBlIHtcbiAgICByZXR1cm4gUEJHTFRGU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkdMVEZTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCR0xURlNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ29sb3IzIH0gZnJvbSAnLi9jb21tb24vQ29sb3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgY29uc3QgZW51bSBUZXh0dXJlV3JhcE1vZGUge1xuICBSZXBlYXQgPSAwLFxuICBDbGFtcCA9IDEsXG4gIE1pcnJvciA9IDIsXG4gIE1pcnJvck9uY2UgPSAzLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBGaWx0ZXJNb2RlIHtcbiAgUG9pbnQgPSAwLFxuICBCaWxpbmVhciA9IDEsXG4gIFRyaWxpbmVhciA9IDIsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFRyYW5zcGFyZW5jeU1vZGUge1xuICBPcGFxdWUgPSAwLFxuICBBbHBoYVRlc3QgPSAxLFxuICBBbHBoYUJsZW5kID0gMixcbiAgQWxwaGFUZXN0QW5kQWxwaGFCbGVuZCA9IDMsXG4gIEF1dG8gPSA0LFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWF0ZXJpYWwge1xuICAvKiogZGVmYXVsdCA9IG51bGwgKi9cbiAgdGV4dHVyZT86IFBCTWF0ZXJpYWxfVGV4dHVyZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDAuNS4gcmFuZ2UgdmFsdWU6IGZyb20gMCB0byAxICovXG4gIGFscGhhVGVzdD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9ICB0cnVlICovXG4gIGNhc3RTaGFkb3dzPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IG51bGwgKi9cbiAgYWxwaGFUZXh0dXJlPzogUEJNYXRlcmlhbF9UZXh0dXJlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gbnVsbCAqL1xuICBlbWlzc2l2ZVRleHR1cmU/OiBQQk1hdGVyaWFsX1RleHR1cmUgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBudWxsICovXG4gIGJ1bXBUZXh0dXJlPzogUEJNYXRlcmlhbF9UZXh0dXJlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gd2hpdGU7ICovXG4gIGFsYmVkb0NvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gYmxhY2s7ICovXG4gIGVtaXNzaXZlQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSB3aGl0ZTsgKi9cbiAgcmVmbGVjdGl2aXR5Q29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBUcmFuc3BhcmVuY3lNb2RlLkF1dG8gKi9cbiAgdHJhbnNwYXJlbmN5TW9kZT86IFRyYW5zcGFyZW5jeU1vZGUgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAwLjUgKi9cbiAgbWV0YWxsaWM/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAwLjUgKi9cbiAgcm91Z2huZXNzPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMSAqL1xuICBnbG9zc2luZXNzPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMSAqL1xuICBzcGVjdWxhckludGVuc2l0eT86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDIgKi9cbiAgZW1pc3NpdmVJbnRlbnNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAxICovXG4gIGRpcmVjdEludGVuc2l0eT86IG51bWJlciB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWF0ZXJpYWxfVGV4dHVyZSB7XG4gIHNyYzogc3RyaW5nXG4gIC8qKiBkZWZhdWx0ID0gVGV4dHVyZVdyYXBNb2RlLkNsYW1wICovXG4gIHdyYXBNb2RlPzogVGV4dHVyZVdyYXBNb2RlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gRmlsdGVyTW9kZS5CaWxpbmVhciAqL1xuICBmaWx0ZXJNb2RlPzogRmlsdGVyTW9kZSB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNYXRlcmlhbCgpOiBQQk1hdGVyaWFsIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0dXJlOiB1bmRlZmluZWQsXG4gICAgYWxwaGFUZXN0OiB1bmRlZmluZWQsXG4gICAgY2FzdFNoYWRvd3M6IHVuZGVmaW5lZCxcbiAgICBhbHBoYVRleHR1cmU6IHVuZGVmaW5lZCxcbiAgICBlbWlzc2l2ZVRleHR1cmU6IHVuZGVmaW5lZCxcbiAgICBidW1wVGV4dHVyZTogdW5kZWZpbmVkLFxuICAgIGFsYmVkb0NvbG9yOiB1bmRlZmluZWQsXG4gICAgZW1pc3NpdmVDb2xvcjogdW5kZWZpbmVkLFxuICAgIHJlZmxlY3Rpdml0eUNvbG9yOiB1bmRlZmluZWQsXG4gICAgdHJhbnNwYXJlbmN5TW9kZTogdW5kZWZpbmVkLFxuICAgIG1ldGFsbGljOiB1bmRlZmluZWQsXG4gICAgcm91Z2huZXNzOiB1bmRlZmluZWQsXG4gICAgZ2xvc3NpbmVzczogdW5kZWZpbmVkLFxuICAgIHNwZWN1bGFySW50ZW5zaXR5OiB1bmRlZmluZWQsXG4gICAgZW1pc3NpdmVJbnRlbnNpdHk6IHVuZGVmaW5lZCxcbiAgICBkaXJlY3RJbnRlbnNpdHk6IHVuZGVmaW5lZFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWF0ZXJpYWwgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk1hdGVyaWFsLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UudGV4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1hdGVyaWFsX1RleHR1cmUuZW5jb2RlKG1lc3NhZ2UudGV4dHVyZSwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbHBoYVRlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5hbHBoYVRlc3QpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmNhc3RTaGFkb3dzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS5jYXN0U2hhZG93cylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxwaGFUZXh0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWF0ZXJpYWxfVGV4dHVyZS5lbmNvZGUobWVzc2FnZS5hbHBoYVRleHR1cmUsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW1pc3NpdmVUZXh0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWF0ZXJpYWxfVGV4dHVyZS5lbmNvZGUobWVzc2FnZS5lbWlzc2l2ZVRleHR1cmUsIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYnVtcFRleHR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNYXRlcmlhbF9UZXh0dXJlLmVuY29kZShtZXNzYWdlLmJ1bXBUZXh0dXJlLCB3cml0ZXIudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFsYmVkb0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5hbGJlZG9Db2xvciwgd3JpdGVyLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbWlzc2l2ZUNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5lbWlzc2l2ZUNvbG9yLCB3cml0ZXIudWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJlZmxlY3Rpdml0eUNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5yZWZsZWN0aXZpdHlDb2xvciwgd3JpdGVyLnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50cmFuc3BhcmVuY3lNb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoODApLmludDMyKG1lc3NhZ2UudHJhbnNwYXJlbmN5TW9kZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWV0YWxsaWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig5MykuZmxvYXQobWVzc2FnZS5tZXRhbGxpYylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uucm91Z2huZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTAxKS5mbG9hdChtZXNzYWdlLnJvdWdobmVzcylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZ2xvc3NpbmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwOSkuZmxvYXQobWVzc2FnZS5nbG9zc2luZXNzKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcGVjdWxhckludGVuc2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDExNykuZmxvYXQobWVzc2FnZS5zcGVjdWxhckludGVuc2l0eSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW1pc3NpdmVJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMjUpLmZsb2F0KG1lc3NhZ2UuZW1pc3NpdmVJbnRlbnNpdHkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpcmVjdEludGVuc2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzMykuZmxvYXQobWVzc2FnZS5kaXJlY3RJbnRlbnNpdHkpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1hdGVyaWFsIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1hdGVyaWFsKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0dXJlID0gUEJNYXRlcmlhbF9UZXh0dXJlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5hbHBoYVRlc3QgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmNhc3RTaGFkb3dzID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLmFscGhhVGV4dHVyZSA9IFBCTWF0ZXJpYWxfVGV4dHVyZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuZW1pc3NpdmVUZXh0dXJlID0gUEJNYXRlcmlhbF9UZXh0dXJlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5idW1wVGV4dHVyZSA9IFBCTWF0ZXJpYWxfVGV4dHVyZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2UuYWxiZWRvQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLmVtaXNzaXZlQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLnJlZmxlY3Rpdml0eUNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIG1lc3NhZ2UudHJhbnNwYXJlbmN5TW9kZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgbWVzc2FnZS5tZXRhbGxpYyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBtZXNzYWdlLnJvdWdobmVzcyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBtZXNzYWdlLmdsb3NzaW5lc3MgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgbWVzc2FnZS5zcGVjdWxhckludGVuc2l0eSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBtZXNzYWdlLmVtaXNzaXZlSW50ZW5zaXR5ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIG1lc3NhZ2UuZGlyZWN0SW50ZW5zaXR5ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWF0ZXJpYWxfVGV4dHVyZSgpOiBQQk1hdGVyaWFsX1RleHR1cmUge1xuICByZXR1cm4geyBzcmM6ICcnLCB3cmFwTW9kZTogdW5kZWZpbmVkLCBmaWx0ZXJNb2RlOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1hdGVyaWFsX1RleHR1cmUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk1hdGVyaWFsX1RleHR1cmUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5zcmMgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5zcmMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLndyYXBNb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2Uud3JhcE1vZGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZpbHRlck1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuaW50MzIobWVzc2FnZS5maWx0ZXJNb2RlKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNYXRlcmlhbF9UZXh0dXJlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1hdGVyaWFsX1RleHR1cmUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnNyYyA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLndyYXBNb2RlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuZmlsdGVyTW9kZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk1hdGVyaWFsIH0gZnJvbSAnLi9wYi9NYXRlcmlhbC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE3XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBNYXRlcmlhbFNjaGVtYTogSVNjaGVtYTxQQk1hdGVyaWFsPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk1hdGVyaWFsLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJNYXRlcmlhbC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJNYXRlcmlhbCB7XG4gICAgcmV0dXJuIFBCTWF0ZXJpYWwuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQk1hdGVyaWFsIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJNYXRlcmlhbC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgY29uc3QgZW51bSBDb2xsaWRlckxheWVyIHtcbiAgTm9uZSA9IDAsXG4gIFBvaW50ZXIgPSAxLFxuICBQaHlzaWNzID0gMixcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hDb2xsaWRlciB7XG4gIC8qKiBkZWZhdWx0ID0gQ29sbGlkZXJMYXllci5QaHlzaWNzIHwgQ29sbGlkZXJMYXllci5Qb2ludGVyICovXG4gIGNvbGxpc2lvbk1hc2s/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgYm94OiBQQk1lc2hDb2xsaWRlcl9Cb3hNZXNoIHwgdW5kZWZpbmVkXG4gIHNwaGVyZTogUEJNZXNoQ29sbGlkZXJfU3BoZXJlTWVzaCB8IHVuZGVmaW5lZFxuICBjeWxpbmRlcjogUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoIHwgdW5kZWZpbmVkXG4gIHBsYW5lOiBQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2ggfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hDb2xsaWRlcl9Cb3hNZXNoIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoIHtcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c1RvcD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgcmFkaXVzQm90dG9tPzogbnVtYmVyIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoQ29sbGlkZXJfU3BoZXJlTWVzaCB7fVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXIoKTogUEJNZXNoQ29sbGlkZXIge1xuICByZXR1cm4geyBjb2xsaXNpb25NYXNrOiB1bmRlZmluZWQsIGJveDogdW5kZWZpbmVkLCBzcGhlcmU6IHVuZGVmaW5lZCwgY3lsaW5kZXI6IHVuZGVmaW5lZCwgcGxhbmU6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaENvbGxpZGVyID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoQ29sbGlkZXIsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5jb2xsaXNpb25NYXNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuaW50MzIobWVzc2FnZS5jb2xsaXNpb25NYXNrKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ib3ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoQ29sbGlkZXJfQm94TWVzaC5lbmNvZGUobWVzc2FnZS5ib3gsIHdyaXRlci51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3BoZXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2guZW5jb2RlKG1lc3NhZ2Uuc3BoZXJlLCB3cml0ZXIudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmN5bGluZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaC5lbmNvZGUobWVzc2FnZS5jeWxpbmRlciwgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wbGFuZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2guZW5jb2RlKG1lc3NhZ2UucGxhbmUsIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaENvbGxpZGVyIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcigpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuY29sbGlzaW9uTWFzayA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuYm94ID0gUEJNZXNoQ29sbGlkZXJfQm94TWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2Uuc3BoZXJlID0gUEJNZXNoQ29sbGlkZXJfU3BoZXJlTWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2UuY3lsaW5kZXIgPSBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLnBsYW5lID0gUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyX0JveE1lc2goKTogUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB7XG4gIHJldHVybiB7fVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hDb2xsaWRlcl9Cb3hNZXNoID0ge1xuICBlbmNvZGUoXzogUEJNZXNoQ29sbGlkZXJfQm94TWVzaCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hDb2xsaWRlcl9Cb3hNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9Cb3hNZXNoKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCgpOiBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2gge1xuICByZXR1cm4geyByYWRpdXNUb3A6IHVuZGVmaW5lZCwgcmFkaXVzQm90dG9tOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2ggPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5yYWRpdXNUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMykuZmxvYXQobWVzc2FnZS5yYWRpdXNUb3ApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJhZGl1c0JvdHRvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLnJhZGl1c0JvdHRvbSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnJhZGl1c0JvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2goKTogUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoIHtcbiAgcmV0dXJuIHt9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaCA9IHtcbiAgZW5jb2RlKF86IFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoKCk6IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2gge1xuICByZXR1cm4ge31cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoQ29sbGlkZXJfU3BoZXJlTWVzaCA9IHtcbiAgZW5jb2RlKF86IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoQ29sbGlkZXJfU3BoZXJlTWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfU3BoZXJlTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCTWVzaENvbGxpZGVyIH0gZnJvbSAnLi9wYi9NZXNoQ29sbGlkZXIuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxOVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTWVzaENvbGxpZGVyU2NoZW1hOiBJU2NoZW1hPFBCTWVzaENvbGxpZGVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk1lc2hDb2xsaWRlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCTWVzaENvbGxpZGVyLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk1lc2hDb2xsaWRlciB7XG4gICAgcmV0dXJuIFBCTWVzaENvbGxpZGVyLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJNZXNoQ29sbGlkZXIge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk1lc2hDb2xsaWRlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaFJlbmRlcmVyIHtcbiAgYm94OiBQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoIHwgdW5kZWZpbmVkXG4gIHNwaGVyZTogUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCB8IHVuZGVmaW5lZFxuICBjeWxpbmRlcjogUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoIHwgdW5kZWZpbmVkXG4gIHBsYW5lOiBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2ggfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoIHtcbiAgdXZzOiBudW1iZXJbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCB7XG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNUb3A/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c0JvdHRvbT86IG51bWJlciB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaCB7XG4gIHV2czogbnVtYmVyW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoIHt9XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcigpOiBQQk1lc2hSZW5kZXJlciB7XG4gIHJldHVybiB7IGJveDogdW5kZWZpbmVkLCBzcGhlcmU6IHVuZGVmaW5lZCwgY3lsaW5kZXI6IHVuZGVmaW5lZCwgcGxhbmU6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaFJlbmRlcmVyID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoUmVuZGVyZXIsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5ib3ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoUmVuZGVyZXJfQm94TWVzaC5lbmNvZGUobWVzc2FnZS5ib3gsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3BoZXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2guZW5jb2RlKG1lc3NhZ2Uuc3BoZXJlLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmN5bGluZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaC5lbmNvZGUobWVzc2FnZS5jeWxpbmRlciwgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wbGFuZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2guZW5jb2RlKG1lc3NhZ2UucGxhbmUsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaFJlbmRlcmVyIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcigpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYm94ID0gUEJNZXNoUmVuZGVyZXJfQm94TWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2Uuc3BoZXJlID0gUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuY3lsaW5kZXIgPSBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnBsYW5lID0gUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX0JveE1lc2goKTogUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB7XG4gIHJldHVybiB7IHV2czogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoUmVuZGVyZXJfQm94TWVzaCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIHdyaXRlci51aW50MzIoMTApLmZvcmsoKVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnV2cykge1xuICAgICAgd3JpdGVyLmZsb2F0KHYpXG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCgpOiBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2gge1xuICByZXR1cm4geyByYWRpdXNUb3A6IHVuZGVmaW5lZCwgcmFkaXVzQm90dG9tOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2ggPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5yYWRpdXNUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMykuZmxvYXQobWVzc2FnZS5yYWRpdXNUb3ApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJhZGl1c0JvdHRvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLnJhZGl1c0JvdHRvbSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnJhZGl1c0JvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2goKTogUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoIHtcbiAgcmV0dXJuIHsgdXZzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIHdyaXRlci51aW50MzIoMTApLmZvcmsoKVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnV2cykge1xuICAgICAgd3JpdGVyLmZsb2F0KHYpXG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoKCk6IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2gge1xuICByZXR1cm4ge31cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCA9IHtcbiAgZW5jb2RlKF86IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCTWVzaFJlbmRlcmVyIH0gZnJvbSAnLi9wYi9NZXNoUmVuZGVyZXIuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxOFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTWVzaFJlbmRlcmVyU2NoZW1hOiBJU2NoZW1hPFBCTWVzaFJlbmRlcmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk1lc2hSZW5kZXJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCTWVzaFJlbmRlcmVyLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk1lc2hSZW5kZXJlciB7XG4gICAgcmV0dXJuIFBCTWVzaFJlbmRlcmVyLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJNZXNoUmVuZGVyZXIge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk1lc2hSZW5kZXJlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk5GVFNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIHNyYzogc3RyaW5nXG4gIGFzc2V0SWQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgc3R5bGU/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgY29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTkZUU2hhcGUoKTogUEJORlRTaGFwZSB7XG4gIHJldHVybiB7XG4gICAgd2l0aENvbGxpc2lvbnM6IHVuZGVmaW5lZCxcbiAgICBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsXG4gICAgdmlzaWJsZTogdW5kZWZpbmVkLFxuICAgIHNyYzogJycsXG4gICAgYXNzZXRJZDogdW5kZWZpbmVkLFxuICAgIHN0eWxlOiB1bmRlZmluZWQsXG4gICAgY29sb3I6IHVuZGVmaW5lZFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTkZUU2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk5GVFNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNyYyAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzQpLnN0cmluZyhtZXNzYWdlLnNyYylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYXNzZXRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQyKS5zdHJpbmcobWVzc2FnZS5hc3NldElkKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5pbnQzMihtZXNzYWdlLnN0eWxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuY29sb3IsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTkZUU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTkZUU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5zcmMgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5hc3NldElkID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2Uuc3R5bGUgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJORlRTaGFwZSB9IGZyb20gJy4vcGIvTkZUU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA0MFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTkZUU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJORlRTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJORlRTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCTkZUU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCTkZUU2hhcGUge1xuICAgIHJldHVybiBQQk5GVFNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJORlRTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCTkZUU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tICcuL2NvbW1vbi9BY3Rpb25CdXR0b24uZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJPblBvaW50ZXJEb3duIHtcbiAgLyoqIGRlZmF1bHQ9QWN0aW9uQnV0dG9uLkFOWSAqL1xuICBidXR0b24/OiBBY3Rpb25CdXR0b24gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9J0ludGVyYWN0JyAqL1xuICBob3ZlclRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MTAgKi9cbiAgbWF4RGlzdGFuY2U/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICBzaG93RmVlZGJhY2s/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk9uUG9pbnRlckRvd24oKTogUEJPblBvaW50ZXJEb3duIHtcbiAgcmV0dXJuIHsgYnV0dG9uOiB1bmRlZmluZWQsIGhvdmVyVGV4dDogdW5kZWZpbmVkLCBtYXhEaXN0YW5jZTogdW5kZWZpbmVkLCBzaG93RmVlZGJhY2s6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCT25Qb2ludGVyRG93biA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCT25Qb2ludGVyRG93biwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmJ1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UuYnV0dG9uKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ob3ZlclRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuaG92ZXJUZXh0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXhEaXN0YW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI5KS5mbG9hdChtZXNzYWdlLm1heERpc3RhbmNlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaG93RmVlZGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMikuYm9vbChtZXNzYWdlLnNob3dGZWVkYmFjaylcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCT25Qb2ludGVyRG93biB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJPblBvaW50ZXJEb3duKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5idXR0b24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5ob3ZlclRleHQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5tYXhEaXN0YW5jZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk9uUG9pbnRlckRvd24gfSBmcm9tICcuL3BiL09uUG9pbnRlckRvd24uZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA2MFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT25Qb2ludGVyRG93blNjaGVtYTogSVNjaGVtYTxQQk9uUG9pbnRlckRvd24+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCT25Qb2ludGVyRG93biwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCT25Qb2ludGVyRG93bi5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJPblBvaW50ZXJEb3duIHtcbiAgICByZXR1cm4gUEJPblBvaW50ZXJEb3duLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJPblBvaW50ZXJEb3duIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJPblBvaW50ZXJEb3duLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSAnLi9jb21tb24vQWN0aW9uQnV0dG9uLmdlbidcbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICcuL2NvbW1vbi9WZWN0b3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCT25Qb2ludGVyRG93blJlc3VsdCB7XG4gIGJ1dHRvbjogQWN0aW9uQnV0dG9uXG4gIG1lc2hOYW1lOiBzdHJpbmdcbiAgb3JpZ2luOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGRpcmVjdGlvbjogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBwb2ludDogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBub3JtYWw6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZGlzdGFuY2U6IG51bWJlclxuICB0aW1lc3RhbXA6IG51bWJlclxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJPblBvaW50ZXJEb3duUmVzdWx0KCk6IFBCT25Qb2ludGVyRG93blJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgYnV0dG9uOiAwLFxuICAgIG1lc2hOYW1lOiAnJyxcbiAgICBvcmlnaW46IHVuZGVmaW5lZCxcbiAgICBkaXJlY3Rpb246IHVuZGVmaW5lZCxcbiAgICBwb2ludDogdW5kZWZpbmVkLFxuICAgIG5vcm1hbDogdW5kZWZpbmVkLFxuICAgIGRpc3RhbmNlOiAwLFxuICAgIHRpbWVzdGFtcDogMFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCT25Qb2ludGVyRG93blJlc3VsdCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCT25Qb2ludGVyRG93blJlc3VsdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmJ1dHRvbiAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5idXR0b24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1lc2hOYW1lICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UubWVzaE5hbWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLm9yaWdpbiwgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5kaXJlY3Rpb24sIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5wb2ludCwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ub3JtYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5ub3JtYWwsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlzdGFuY2UgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjkpLmZsb2F0KG1lc3NhZ2UuZGlzdGFuY2UpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRpbWVzdGFtcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig3MikuaW50MzIobWVzc2FnZS50aW1lc3RhbXApXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlckRvd25SZXN1bHQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCT25Qb2ludGVyRG93blJlc3VsdCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuYnV0dG9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UubWVzaE5hbWUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5vcmlnaW4gPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5kaXJlY3Rpb24gPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5wb2ludCA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLm5vcm1hbCA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLmRpc3RhbmNlID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS50aW1lc3RhbXAgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk9uUG9pbnRlckRvd25SZXN1bHQgfSBmcm9tICcuL3BiL09uUG9pbnRlckRvd25SZXN1bHQuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA2NlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYTogSVNjaGVtYTxQQk9uUG9pbnRlckRvd25SZXN1bHQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCT25Qb2ludGVyRG93blJlc3VsdCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCT25Qb2ludGVyRG93blJlc3VsdC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJPblBvaW50ZXJEb3duUmVzdWx0IHtcbiAgICByZXR1cm4gUEJPblBvaW50ZXJEb3duUmVzdWx0LmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJPblBvaW50ZXJEb3duUmVzdWx0IHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJPblBvaW50ZXJEb3duUmVzdWx0LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSAnLi9jb21tb24vQWN0aW9uQnV0dG9uLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCT25Qb2ludGVyVXAge1xuICAvKiogZGVmYXVsdD1BY3Rpb25CdXR0b24uQU5ZICovXG4gIGJ1dHRvbj86IEFjdGlvbkJ1dHRvbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0nSW50ZXJhY3QnICovXG4gIGhvdmVyVGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xMCAqL1xuICBtYXhEaXN0YW5jZT86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHNob3dGZWVkYmFjaz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCT25Qb2ludGVyVXAoKTogUEJPblBvaW50ZXJVcCB7XG4gIHJldHVybiB7IGJ1dHRvbjogdW5kZWZpbmVkLCBob3ZlclRleHQ6IHVuZGVmaW5lZCwgbWF4RGlzdGFuY2U6IHVuZGVmaW5lZCwgc2hvd0ZlZWRiYWNrOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlclVwID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJPblBvaW50ZXJVcCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmJ1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UuYnV0dG9uKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ob3ZlclRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuaG92ZXJUZXh0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXhEaXN0YW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI5KS5mbG9hdChtZXNzYWdlLm1heERpc3RhbmNlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaG93RmVlZGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMikuYm9vbChtZXNzYWdlLnNob3dGZWVkYmFjaylcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCT25Qb2ludGVyVXAge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCT25Qb2ludGVyVXAoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmJ1dHRvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmhvdmVyVGV4dCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLm1heERpc3RhbmNlID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5zaG93RmVlZGJhY2sgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCT25Qb2ludGVyVXAgfSBmcm9tICcuL3BiL09uUG9pbnRlclVwLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjFcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwU2NoZW1hOiBJU2NoZW1hPFBCT25Qb2ludGVyVXA+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCT25Qb2ludGVyVXAsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlclVwLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk9uUG9pbnRlclVwIHtcbiAgICByZXR1cm4gUEJPblBvaW50ZXJVcC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyVXAge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk9uUG9pbnRlclVwLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSAnLi9jb21tb24vQWN0aW9uQnV0dG9uLmdlbidcbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICcuL2NvbW1vbi9WZWN0b3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCT25Qb2ludGVyVXBSZXN1bHQge1xuICBidXR0b246IEFjdGlvbkJ1dHRvblxuICBtZXNoTmFtZTogc3RyaW5nXG4gIG9yaWdpbjogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXJlY3Rpb246IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgcG9pbnQ6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbm9ybWFsOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGRpc3RhbmNlOiBudW1iZXJcbiAgdGltZXN0YW1wOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCT25Qb2ludGVyVXBSZXN1bHQoKTogUEJPblBvaW50ZXJVcFJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgYnV0dG9uOiAwLFxuICAgIG1lc2hOYW1lOiAnJyxcbiAgICBvcmlnaW46IHVuZGVmaW5lZCxcbiAgICBkaXJlY3Rpb246IHVuZGVmaW5lZCxcbiAgICBwb2ludDogdW5kZWZpbmVkLFxuICAgIG5vcm1hbDogdW5kZWZpbmVkLFxuICAgIGRpc3RhbmNlOiAwLFxuICAgIHRpbWVzdGFtcDogMFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCT25Qb2ludGVyVXBSZXN1bHQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk9uUG9pbnRlclVwUmVzdWx0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYnV0dG9uICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWVzaE5hbWUgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS5tZXNoTmFtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2Uub3JpZ2luLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLmRpcmVjdGlvbiwgd3JpdGVyLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb2ludCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLnBvaW50LCB3cml0ZXIudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5vcm1hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLm5vcm1hbCwgd3JpdGVyLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXN0YW5jZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2OSkuZmxvYXQobWVzc2FnZS5kaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGltZXN0YW1wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDcyKS5pbnQzMihtZXNzYWdlLnRpbWVzdGFtcClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCT25Qb2ludGVyVXBSZXN1bHQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCT25Qb2ludGVyVXBSZXN1bHQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmJ1dHRvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLm1lc2hOYW1lID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uub3JpZ2luID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuZGlyZWN0aW9uID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UucG9pbnQgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5ub3JtYWwgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5kaXN0YW5jZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2UudGltZXN0YW1wID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJPblBvaW50ZXJVcFJlc3VsdCB9IGZyb20gJy4vcGIvT25Qb2ludGVyVXBSZXN1bHQuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA2NVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT25Qb2ludGVyVXBSZXN1bHRTY2hlbWE6IElTY2hlbWE8UEJPblBvaW50ZXJVcFJlc3VsdD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJPblBvaW50ZXJVcFJlc3VsdCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCT25Qb2ludGVyVXBSZXN1bHQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCT25Qb2ludGVyVXBSZXN1bHQge1xuICAgIHJldHVybiBQQk9uUG9pbnRlclVwUmVzdWx0LmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJPblBvaW50ZXJVcFJlc3VsdCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCT25Qb2ludGVyVXBSZXN1bHQuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlBsYW5lU2hhcGUge1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgd2l0aENvbGxpc2lvbnM/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICBpc1BvaW50ZXJCbG9ja2VyPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIEhpZGRlbkNvbXBvbmVudCBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNTMgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgdXZzOiBudW1iZXJbXVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJQbGFuZVNoYXBlKCk6IFBCUGxhbmVTaGFwZSB7XG4gIHJldHVybiB7IHdpdGhDb2xsaXNpb25zOiB1bmRlZmluZWQsIGlzUG9pbnRlckJsb2NrZXI6IHVuZGVmaW5lZCwgdmlzaWJsZTogdW5kZWZpbmVkLCB1dnM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJQbGFuZVNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJQbGFuZVNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnV2cykge1xuICAgICAgd3JpdGVyLmZsb2F0KHYpXG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlBsYW5lU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCUGxhbmVTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvc1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlBsYW5lU2hhcGUgfSBmcm9tICcuL3BiL1BsYW5lU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxNFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUGxhbmVTaGFwZVNjaGVtYTogSVNjaGVtYTxQQlBsYW5lU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCUGxhbmVTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCUGxhbmVTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJQbGFuZVNoYXBlIHtcbiAgICByZXR1cm4gUEJQbGFuZVNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJQbGFuZVNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJQbGFuZVNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJQb2ludGVyTG9jayB7XG4gIGlzUG9pbnRlckxvY2tlZDogYm9vbGVhblxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJQb2ludGVyTG9jaygpOiBQQlBvaW50ZXJMb2NrIHtcbiAgcmV0dXJuIHsgaXNQb2ludGVyTG9ja2VkOiBmYWxzZSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUG9pbnRlckxvY2sgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlBvaW50ZXJMb2NrLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyTG9ja2VkID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJMb2NrZWQpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlBvaW50ZXJMb2NrIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBvaW50ZXJMb2NrKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJMb2NrZWQgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCUG9pbnRlckxvY2sgfSBmcm9tICcuL3BiL1BvaW50ZXJMb2NrLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzRcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBvaW50ZXJMb2NrU2NoZW1hOiBJU2NoZW1hPFBCUG9pbnRlckxvY2s+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCUG9pbnRlckxvY2ssIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlBvaW50ZXJMb2NrLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlBvaW50ZXJMb2NrIHtcbiAgICByZXR1cm4gUEJQb2ludGVyTG9jay5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCUG9pbnRlckxvY2sge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlBvaW50ZXJMb2NrLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJTcGhlcmVTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJTcGhlcmVTaGFwZSgpOiBQQlNwaGVyZVNoYXBlIHtcbiAgcmV0dXJuIHsgd2l0aENvbGxpc2lvbnM6IHVuZGVmaW5lZCwgaXNQb2ludGVyQmxvY2tlcjogdW5kZWZpbmVkLCB2aXNpYmxlOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlNwaGVyZVNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJTcGhlcmVTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJTcGhlcmVTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJTcGhlcmVTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlNwaGVyZVNoYXBlIH0gZnJvbSAnLi9wYi9TcGhlcmVTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE1XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBTcGhlcmVTaGFwZVNjaGVtYTogSVNjaGVtYTxQQlNwaGVyZVNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlNwaGVyZVNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJTcGhlcmVTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJTcGhlcmVTaGFwZSB7XG4gICAgcmV0dXJuIFBCU3BoZXJlU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlNwaGVyZVNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJTcGhlcmVTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlRleHRTaGFwZSB7XG4gIHRleHQ6IHN0cmluZ1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIEhpZGRlbkNvbXBvbmVudCBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNTMgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgZm9udD86IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjBmICovXG4gIG9wYWNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MTAgKi9cbiAgZm9udFNpemU/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgZm9udEF1dG9TaXplPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0nY2VudGVyJyAqL1xuICBoVGV4dEFsaWduPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSdjZW50ZXInICovXG4gIHZUZXh0QWxpZ24/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MSAqL1xuICB3aWR0aD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xICovXG4gIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBwYWRkaW5nVG9wPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHBhZGRpbmdSaWdodD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBwYWRkaW5nQm90dG9tPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHBhZGRpbmdMZWZ0PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGxpbmVTcGFjaW5nPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGxpbmVDb3VudD86IG51bWJlciB8IHVuZGVmaW5lZFxuICB0ZXh0V3JhcHBpbmc/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIHNoYWRvd0JsdXI/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgc2hhZG93T2Zmc2V0WD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBzaGFkb3dPZmZzZXRZPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIG91dGxpbmVXaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0oMS4wLDEuMCwxLjApICovXG4gIHNoYWRvd0NvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSgxLjAsMS4wLDEuMCkgKi9cbiAgb3V0bGluZUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSgxLjAsMS4wLDEuMCkgKi9cbiAgdGV4dENvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlRleHRTaGFwZSgpOiBQQlRleHRTaGFwZSB7XG4gIHJldHVybiB7XG4gICAgdGV4dDogJycsXG4gICAgdmlzaWJsZTogdW5kZWZpbmVkLFxuICAgIGZvbnQ6IHVuZGVmaW5lZCxcbiAgICBvcGFjaXR5OiB1bmRlZmluZWQsXG4gICAgZm9udFNpemU6IHVuZGVmaW5lZCxcbiAgICBmb250QXV0b1NpemU6IHVuZGVmaW5lZCxcbiAgICBoVGV4dEFsaWduOiB1bmRlZmluZWQsXG4gICAgdlRleHRBbGlnbjogdW5kZWZpbmVkLFxuICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gICAgaGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ1RvcDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdSaWdodDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdCb3R0b206IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nTGVmdDogdW5kZWZpbmVkLFxuICAgIGxpbmVTcGFjaW5nOiB1bmRlZmluZWQsXG4gICAgbGluZUNvdW50OiB1bmRlZmluZWQsXG4gICAgdGV4dFdyYXBwaW5nOiB1bmRlZmluZWQsXG4gICAgc2hhZG93Qmx1cjogdW5kZWZpbmVkLFxuICAgIHNoYWRvd09mZnNldFg6IHVuZGVmaW5lZCxcbiAgICBzaGFkb3dPZmZzZXRZOiB1bmRlZmluZWQsXG4gICAgb3V0bGluZVdpZHRoOiB1bmRlZmluZWQsXG4gICAgc2hhZG93Q29sb3I6IHVuZGVmaW5lZCxcbiAgICBvdXRsaW5lQ29sb3I6IHVuZGVmaW5lZCxcbiAgICB0ZXh0Q29sb3I6IHVuZGVmaW5lZFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCVGV4dFNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJUZXh0U2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS50ZXh0ICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UudGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZm9udCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS5mb250KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzcpLmZsb2F0KG1lc3NhZ2Uub3BhY2l0eSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZm9udFNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0NSkuZmxvYXQobWVzc2FnZS5mb250U2l6ZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZm9udEF1dG9TaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmJvb2wobWVzc2FnZS5mb250QXV0b1NpemUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmhUZXh0QWxpZ24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKG1lc3NhZ2UuaFRleHRBbGlnbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudlRleHRBbGlnbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY2KS5zdHJpbmcobWVzc2FnZS52VGV4dEFsaWduKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDc3KS5mbG9hdChtZXNzYWdlLndpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4NSkuZmxvYXQobWVzc2FnZS5oZWlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig5MykuZmxvYXQobWVzc2FnZS5wYWRkaW5nVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nUmlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMDEpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ1JpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nQm90dG9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTA5KS5mbG9hdChtZXNzYWdlLnBhZGRpbmdCb3R0b20pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdMZWZ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTE3KS5mbG9hdChtZXNzYWdlLnBhZGRpbmdMZWZ0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5saW5lU3BhY2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyNSkuZmxvYXQobWVzc2FnZS5saW5lU3BhY2luZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGluZUNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI4KS5pbnQzMihtZXNzYWdlLmxpbmVDb3VudClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGV4dFdyYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTM2KS5ib29sKG1lc3NhZ2UudGV4dFdyYXBwaW5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaGFkb3dCbHVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTQ5KS5mbG9hdChtZXNzYWdlLnNoYWRvd0JsdXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd09mZnNldFggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNTcpLmZsb2F0KG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2NSkuZmxvYXQobWVzc2FnZS5zaGFkb3dPZmZzZXRZKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vdXRsaW5lV2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNzMpLmZsb2F0KG1lc3NhZ2Uub3V0bGluZVdpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaGFkb3dDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2Uuc2hhZG93Q29sb3IsIHdyaXRlci51aW50MzIoMTc4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm91dGxpbmVDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2Uub3V0bGluZUNvbG9yLCB3cml0ZXIudWludDMyKDE4NikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50ZXh0Q29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLnRleHRDb2xvciwgd3JpdGVyLnVpbnQzMigxOTQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVGV4dFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlRleHRTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuZm9udCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm9wYWNpdHkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmZvbnRTaXplID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5mb250QXV0b1NpemUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2UuaFRleHRBbGlnbiA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLnZUZXh0QWxpZ24gPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS53aWR0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLmhlaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBtZXNzYWdlLnBhZGRpbmdUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nUmlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0xlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgbWVzc2FnZS5saW5lU3BhY2luZyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBtZXNzYWdlLmxpbmVDb3VudCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBtZXNzYWdlLnRleHRXcmFwcGluZyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93Qmx1ciA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICBtZXNzYWdlLnNoYWRvd09mZnNldFggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgbWVzc2FnZS5zaGFkb3dPZmZzZXRZID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIG1lc3NhZ2Uub3V0bGluZVdpZHRoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgbWVzc2FnZS5vdXRsaW5lQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlRleHRTaGFwZSB9IGZyb20gJy4vcGIvVGV4dFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMzBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFRleHRTaGFwZVNjaGVtYTogSVNjaGVtYTxQQlRleHRTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJUZXh0U2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlRleHRTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJUZXh0U2hhcGUge1xuICAgIHJldHVybiBQQlRleHRTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCVGV4dFNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJUZXh0U2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDb2xvcjMgfSBmcm9tICcuL2NvbW1vbi9Db2xvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJVaVRleHQge1xuICB0ZXh0OiBzdHJpbmdcbiAgdGV4dENvbG9yOiBDb2xvcjMgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCVWlUZXh0KCk6IFBCVWlUZXh0IHtcbiAgcmV0dXJuIHsgdGV4dDogJycsIHRleHRDb2xvcjogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJVaVRleHQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlVpVGV4dCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnRleHQgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS50ZXh0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50ZXh0Q29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLnRleHRDb2xvciwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJVaVRleHQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCVWlUZXh0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0ID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dENvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJVaVRleHQgfSBmcm9tICcuL3BiL1VpVGV4dC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDUyXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBVaVRleHRTY2hlbWE6IElTY2hlbWE8UEJVaVRleHQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCVWlUZXh0LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJVaVRleHQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCVWlUZXh0IHtcbiAgICByZXR1cm4gUEJVaVRleHQuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlVpVGV4dCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCVWlUZXh0LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJWaXNpYmlsaXR5Q29tcG9uZW50IHtcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJWaXNpYmlsaXR5Q29tcG9uZW50KCk6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCB7XG4gIHJldHVybiB7IHZpc2libGU6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCVmlzaWJpbGl0eUNvbXBvbmVudCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJWaXNpYmlsaXR5Q29tcG9uZW50KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlZpc2liaWxpdHlDb21wb25lbnQgfSBmcm9tICcuL3BiL1Zpc2liaWxpdHlDb21wb25lbnQuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA4MVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYTogSVNjaGVtYTxQQlZpc2liaWxpdHlDb21wb25lbnQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCVmlzaWJpbGl0eUNvbXBvbmVudC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJWaXNpYmlsaXR5Q29tcG9uZW50IHtcbiAgICByZXR1cm4gUEJWaXNpYmlsaXR5Q29tcG9uZW50LmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJWaXNpYmlsaXR5Q29tcG9uZW50IHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJWaXNpYmlsaXR5Q29tcG9uZW50LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IElFbmdpbmUgfSBmcm9tICcuLi8uLi9lbmdpbmUvdHlwZXMnXG5pbXBvcnQgKiBhcyBUcmFuc2Zvcm1TY2hlbWEgZnJvbSAnLi4vbGVnYWN5L1RyYW5zZm9ybSdcbmltcG9ydCAqIGFzIEFuaW1hdG9yU2NoZW1hIGZyb20gJy4vQW5pbWF0b3IuZ2VuJ1xuaW1wb3J0ICogYXMgQXVkaW9Tb3VyY2VTY2hlbWEgZnJvbSAnLi9BdWRpb1NvdXJjZS5nZW4nXG5pbXBvcnQgKiBhcyBBdmF0YXJBdHRhY2hTY2hlbWEgZnJvbSAnLi9BdmF0YXJBdHRhY2guZ2VuJ1xuaW1wb3J0ICogYXMgQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hIGZyb20gJy4vQXZhdGFyTW9kaWZpZXJBcmVhLmdlbidcbmltcG9ydCAqIGFzIEF2YXRhclNoYXBlU2NoZW1hIGZyb20gJy4vQXZhdGFyU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgQmlsbGJvYXJkU2NoZW1hIGZyb20gJy4vQmlsbGJvYXJkLmdlbidcbmltcG9ydCAqIGFzIEJveFNoYXBlU2NoZW1hIGZyb20gJy4vQm94U2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgQ2FtZXJhTW9kZVNjaGVtYSBmcm9tICcuL0NhbWVyYU1vZGUuZ2VuJ1xuaW1wb3J0ICogYXMgQ2FtZXJhTW9kZUFyZWFTY2hlbWEgZnJvbSAnLi9DYW1lcmFNb2RlQXJlYS5nZW4nXG5pbXBvcnQgKiBhcyBDeWxpbmRlclNoYXBlU2NoZW1hIGZyb20gJy4vQ3lsaW5kZXJTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBHTFRGU2hhcGVTY2hlbWEgZnJvbSAnLi9HTFRGU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgTWF0ZXJpYWxTY2hlbWEgZnJvbSAnLi9NYXRlcmlhbC5nZW4nXG5pbXBvcnQgKiBhcyBNZXNoQ29sbGlkZXJTY2hlbWEgZnJvbSAnLi9NZXNoQ29sbGlkZXIuZ2VuJ1xuaW1wb3J0ICogYXMgTWVzaFJlbmRlcmVyU2NoZW1hIGZyb20gJy4vTWVzaFJlbmRlcmVyLmdlbidcbmltcG9ydCAqIGFzIE5GVFNoYXBlU2NoZW1hIGZyb20gJy4vTkZUU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgT25Qb2ludGVyRG93blNjaGVtYSBmcm9tICcuL09uUG9pbnRlckRvd24uZ2VuJ1xuaW1wb3J0ICogYXMgT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYSBmcm9tICcuL09uUG9pbnRlckRvd25SZXN1bHQuZ2VuJ1xuaW1wb3J0ICogYXMgT25Qb2ludGVyVXBTY2hlbWEgZnJvbSAnLi9PblBvaW50ZXJVcC5nZW4nXG5pbXBvcnQgKiBhcyBPblBvaW50ZXJVcFJlc3VsdFNjaGVtYSBmcm9tICcuL09uUG9pbnRlclVwUmVzdWx0LmdlbidcbmltcG9ydCAqIGFzIFBsYW5lU2hhcGVTY2hlbWEgZnJvbSAnLi9QbGFuZVNoYXBlLmdlbidcbmltcG9ydCAqIGFzIFBvaW50ZXJMb2NrU2NoZW1hIGZyb20gJy4vUG9pbnRlckxvY2suZ2VuJ1xuaW1wb3J0ICogYXMgU3BoZXJlU2hhcGVTY2hlbWEgZnJvbSAnLi9TcGhlcmVTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBUZXh0U2hhcGVTY2hlbWEgZnJvbSAnLi9UZXh0U2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgVWlUZXh0U2NoZW1hIGZyb20gJy4vVWlUZXh0LmdlbidcbmltcG9ydCAqIGFzIFZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEgZnJvbSAnLi9WaXNpYmlsaXR5Q29tcG9uZW50LmdlbidcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUxpYnJhcnlDb21wb25lbnRzKHtcbiAgZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYVxufTogUGljazxJRW5naW5lLCAnZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYSc+KSB7XG4gIHJldHVybiB7XG5cdFx0QW5pbWF0b3I6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQW5pbWF0b3JTY2hlbWEuQW5pbWF0b3JTY2hlbWEsIEFuaW1hdG9yU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0QXVkaW9Tb3VyY2U6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQXVkaW9Tb3VyY2VTY2hlbWEuQXVkaW9Tb3VyY2VTY2hlbWEsIEF1ZGlvU291cmNlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0QXZhdGFyQXR0YWNoOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEF2YXRhckF0dGFjaFNjaGVtYS5BdmF0YXJBdHRhY2hTY2hlbWEsIEF2YXRhckF0dGFjaFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEF2YXRhck1vZGlmaWVyQXJlYTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShBdmF0YXJNb2RpZmllckFyZWFTY2hlbWEuQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLCBBdmF0YXJNb2RpZmllckFyZWFTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRBdmF0YXJTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShBdmF0YXJTaGFwZVNjaGVtYS5BdmF0YXJTaGFwZVNjaGVtYSwgQXZhdGFyU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRCaWxsYm9hcmQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQmlsbGJvYXJkU2NoZW1hLkJpbGxib2FyZFNjaGVtYSwgQmlsbGJvYXJkU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0Qm94U2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQm94U2hhcGVTY2hlbWEuQm94U2hhcGVTY2hlbWEsIEJveFNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0Q2FtZXJhTW9kZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShDYW1lcmFNb2RlU2NoZW1hLkNhbWVyYU1vZGVTY2hlbWEsIENhbWVyYU1vZGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRDYW1lcmFNb2RlQXJlYTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShDYW1lcmFNb2RlQXJlYVNjaGVtYS5DYW1lcmFNb2RlQXJlYVNjaGVtYSwgQ2FtZXJhTW9kZUFyZWFTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRDeWxpbmRlclNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEN5bGluZGVyU2hhcGVTY2hlbWEuQ3lsaW5kZXJTaGFwZVNjaGVtYSwgQ3lsaW5kZXJTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEdMVEZTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShHTFRGU2hhcGVTY2hlbWEuR0xURlNoYXBlU2NoZW1hLCBHTFRGU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRNYXRlcmlhbDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShNYXRlcmlhbFNjaGVtYS5NYXRlcmlhbFNjaGVtYSwgTWF0ZXJpYWxTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRNZXNoQ29sbGlkZXI6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoTWVzaENvbGxpZGVyU2NoZW1hLk1lc2hDb2xsaWRlclNjaGVtYSwgTWVzaENvbGxpZGVyU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0TWVzaFJlbmRlcmVyOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE1lc2hSZW5kZXJlclNjaGVtYS5NZXNoUmVuZGVyZXJTY2hlbWEsIE1lc2hSZW5kZXJlclNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE5GVFNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE5GVFNoYXBlU2NoZW1hLk5GVFNoYXBlU2NoZW1hLCBORlRTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE9uUG9pbnRlckRvd246IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoT25Qb2ludGVyRG93blNjaGVtYS5PblBvaW50ZXJEb3duU2NoZW1hLCBPblBvaW50ZXJEb3duU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0T25Qb2ludGVyRG93blJlc3VsdDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShPblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLk9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEsIE9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRPblBvaW50ZXJVcDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShPblBvaW50ZXJVcFNjaGVtYS5PblBvaW50ZXJVcFNjaGVtYSwgT25Qb2ludGVyVXBTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRPblBvaW50ZXJVcFJlc3VsdDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShPblBvaW50ZXJVcFJlc3VsdFNjaGVtYS5PblBvaW50ZXJVcFJlc3VsdFNjaGVtYSwgT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRQbGFuZVNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFBsYW5lU2hhcGVTY2hlbWEuUGxhbmVTaGFwZVNjaGVtYSwgUGxhbmVTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFBvaW50ZXJMb2NrOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFBvaW50ZXJMb2NrU2NoZW1hLlBvaW50ZXJMb2NrU2NoZW1hLCBQb2ludGVyTG9ja1NjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFNwaGVyZVNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFNwaGVyZVNoYXBlU2NoZW1hLlNwaGVyZVNoYXBlU2NoZW1hLCBTcGhlcmVTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFRleHRTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShUZXh0U2hhcGVTY2hlbWEuVGV4dFNoYXBlU2NoZW1hLCBUZXh0U2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRVaVRleHQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVWlUZXh0U2NoZW1hLlVpVGV4dFNjaGVtYSwgVWlUZXh0U2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0VmlzaWJpbGl0eUNvbXBvbmVudDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLlZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEsIFZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEuQ09NUE9ORU5UX0lEKSxcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vZW5naW5lL2VudGl0eSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uLCBJRW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNmb3JtVHlwZSA9IHtcbiAgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9XG4gIHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXI7IHc6IG51bWJlciB9XG4gIHNjYWxlOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfVxuICBwYXJlbnQ/OiBFbnRpdHlcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IFRSQU5TRk9STV9MRU5HVEggPSA0NFxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgVHJhbnNmb3JtU2NoZW1hOiBJU2NoZW1hPFRyYW5zZm9ybVR5cGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFRyYW5zZm9ybVR5cGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwdHIgPSBidWlsZGVyLmluY3JlbWVudFdyaXRlT2Zmc2V0KFRSQU5TRk9STV9MRU5HVEgpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciwgdmFsdWUucG9zaXRpb24ueClcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgNCwgdmFsdWUucG9zaXRpb24ueSlcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgOCwgdmFsdWUucG9zaXRpb24ueilcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMTIsIHZhbHVlLnJvdGF0aW9uLngpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDE2LCB2YWx1ZS5yb3RhdGlvbi55KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAyMCwgdmFsdWUucm90YXRpb24ueilcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMjQsIHZhbHVlLnJvdGF0aW9uLncpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDI4LCB2YWx1ZS5zY2FsZS54KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAzMiwgdmFsdWUuc2NhbGUueSlcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMzYsIHZhbHVlLnNjYWxlLnopXG4gICAgYnVpbGRlci5zZXRVaW50MzIocHRyICsgNDAsIHZhbHVlLnBhcmVudCB8fCAwKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBUcmFuc2Zvcm1UeXBlIHtcbiAgICBjb25zdCBwdHIgPSByZWFkZXIuaW5jcmVtZW50UmVhZE9mZnNldChUUkFOU0ZPUk1fTEVOR1RIKVxuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB4OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIpLFxuICAgICAgICB5OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyA0KSxcbiAgICAgICAgejogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgOClcbiAgICAgIH0sXG4gICAgICByb3RhdGlvbjoge1xuICAgICAgICB4OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAxMiksXG4gICAgICAgIHk6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDE2KSxcbiAgICAgICAgejogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMjApLFxuICAgICAgICB3OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAyNClcbiAgICAgIH0sXG4gICAgICBzY2FsZToge1xuICAgICAgICB4OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAyOCksXG4gICAgICAgIHk6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDMyKSxcbiAgICAgICAgejogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMzYpXG4gICAgICB9LFxuICAgICAgcGFyZW50OiByZWFkZXIuZ2V0VWludDMyKHB0ciArIDQwKSBhcyBFbnRpdHlcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZSgpOiBUcmFuc2Zvcm1UeXBlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IHsgeDogMCwgeTogMCwgejogMCB9LFxuICAgICAgc2NhbGU6IHsgeDogMSwgeTogMSwgejogMSB9LFxuICAgICAgcm90YXRpb246IHsgeDogMCwgeTogMCwgejogMCwgdzogMSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVUcmFuc2Zvcm1Db21wb25lbnQoe1xuICBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hXG59OiBQaWNrPElFbmdpbmUsICdkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hJz4pOiBDb21wb25lbnREZWZpbml0aW9uPFxuICBJU2NoZW1hPFRyYW5zZm9ybVR5cGU+LFxuICBQYXJ0aWFsPFRyYW5zZm9ybVR5cGU+XG4+IHtcbiAgcmV0dXJuIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVHJhbnNmb3JtU2NoZW1hLCBDT01QT05FTlRfSUQpXG59XG4iLCJpbXBvcnQgeyBQcmVFbmdpbmUgfSBmcm9tICcuLi9lbmdpbmUnXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vc2NoZW1hcy9JU2NoZW1hJ1xuXG5pbXBvcnQgeyBkZWZpbmVMaWJyYXJ5Q29tcG9uZW50cyB9IGZyb20gJy4vZ2VuZXJhdGVkL2luZGV4LmdlbidcbmltcG9ydCAqIGFzIE1lc2hSZW5kZXJlclNjaGVtYSBmcm9tICcuL2dlbmVyYXRlZC9NZXNoUmVuZGVyZXIuZ2VuJ1xuaW1wb3J0IHsgUEJNZXNoUmVuZGVyZXIgfSBmcm9tICcuL2dlbmVyYXRlZC9wYi9NZXNoUmVuZGVyZXIuZ2VuJ1xuaW1wb3J0IHsgZGVmaW5lVHJhbnNmb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9sZWdhY3kvVHJhbnNmb3JtJ1xuXG5leHBvcnQgZW51bSBDT01QT05FTlRfSUQge1xuICBTWU5DID0gMTAwMFxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgU2RrQ29tcG9uZW50cyA9IFJldHVyblR5cGU8dHlwZW9mIGRlZmluZVNka0NvbXBvbmVudHM+XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTZGtDb21wb25lbnRzKGVuZ2luZTogUHJlRW5naW5lKSB7XG4gIGNvbnN0IGF1dG9nZW5lcmF0ZWRDb21wb25lbnRzID0gZGVmaW5lTGlicmFyeUNvbXBvbmVudHMoZW5naW5lKVxuICBlbmdpbmUucmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvbihhdXRvZ2VuZXJhdGVkQ29tcG9uZW50cy5NZXNoUmVuZGVyZXIuX2lkKVxuICByZXR1cm4ge1xuICAgIC4uLmF1dG9nZW5lcmF0ZWRDb21wb25lbnRzLFxuICAgIFRyYW5zZm9ybTogZGVmaW5lVHJhbnNmb3JtQ29tcG9uZW50KGVuZ2luZSksXG4gICAgTWVzaFJlbmRlcmVyOiBlbmdpbmUuZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYTxcbiAgICAgIElTY2hlbWE8UEJNZXNoUmVuZGVyZXI+LFxuICAgICAgUGFydGlhbDxQQk1lc2hSZW5kZXJlcj5cbiAgICA+KE1lc2hSZW5kZXJlclNjaGVtYS5NZXNoUmVuZGVyZXJTY2hlbWEsIE1lc2hSZW5kZXJlclNjaGVtYS5DT01QT05FTlRfSUQpXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElBcnJheTxUPih0eXBlOiBJU2NoZW1hPFQ+KTogSVNjaGVtYTxBcnJheTxUPj4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogQXJyYXk8VD4sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIGJ1aWxkZXIud3JpdGVVaW50MzIodmFsdWUubGVuZ3RoKVxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgIHR5cGUuc2VyaWFsaXplKGl0ZW0sIGJ1aWxkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBBcnJheTxUPiB7XG4gICAgICBjb25zdCBuZXdBcnJheTogQXJyYXk8VD4gPSBbXVxuICAgICAgY29uc3QgbGVuZ3RoID0gcmVhZGVyLnJlYWRVaW50MzIoKVxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBuZXdBcnJheS5wdXNoKHR5cGUuZGVzZXJpYWxpemUocmVhZGVyKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdBcnJheVxuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgQm9vbDogSVNjaGVtYTxib29sZWFuPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBib29sZWFuLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDgodmFsdWUgPyAxIDogMClcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50OCgpID09PSAxXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElFbnVtPFQ+KHR5cGU6IElTY2hlbWE8YW55Pik6IElTY2hlbWE8VD4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogVCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgICAgdHlwZS5zZXJpYWxpemUodmFsdWUsIGJ1aWxkZXIpXG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBUIHtcbiAgICAgIHJldHVybiB0eXBlLmRlc2VyaWFsaXplKHJlYWRlcilcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIHJldHVybiB0eXBlLmNyZWF0ZSgpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxvYXQzMjogSVNjaGVtYTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVGbG9hdDMyKHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEZsb2F0MzIoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxvYXQ2NDogSVNjaGVtYTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVGbG9hdDY0KHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEZsb2F0NjQoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50NjQ6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50NjQoQmlnSW50KHZhbHVlKSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTnVtYmVyKHJlYWRlci5yZWFkSW50NjQoKSlcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJbnQzMjogSVNjaGVtYTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVJbnQzMih2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRJbnQzMigpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50MTY6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50MTYodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50MTYoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDg6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50OCh2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRJbnQ4KClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBGbGF0U3RyaW5nOiBJU2NoZW1hPHN0cmluZz4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogc3RyaW5nLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodmFsdWUpKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocmVhZGVyLnJlYWRCdWZmZXIoKSlcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRWNzU3RyaW5nID0gRmxhdFN0cmluZ1xuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuL0lTY2hlbWEnXG5pbXBvcnQgeyBUb09wdGlvbmFsIH0gZnJvbSAnLi90eXBpbmcnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMge1xuICBba2V5OiBzdHJpbmddOiBJU2NoZW1hXG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCBleHRlbmRzIFNwZWM+ID0gVG9PcHRpb25hbDx7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgSVNjaGVtYVxuICAgID8gUmV0dXJuVHlwZTxUW0tdWydkZXNlcmlhbGl6ZSddPlxuICAgIDogVFtLXSBleHRlbmRzIFNwZWNcbiAgICA/IFJlc3VsdDxUW0tdPlxuICAgIDogbmV2ZXJcbn0+XG5cbmV4cG9ydCB0eXBlIE1hcFNjaGVtYVR5cGU8VCBleHRlbmRzIFNwZWM+ID0gSVNjaGVtYTxSZXN1bHQ8VD4+XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gSU1hcDxUIGV4dGVuZHMgU3BlYz4oc3BlYzogVCk6IElTY2hlbWE8UmVzdWx0PFQ+PiB7XG4gIHJldHVybiB7XG4gICAgc2VyaWFsaXplKHZhbHVlOiBSZXN1bHQ8VD4sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWMpIHtcbiAgICAgICAgLy8gVE9ETzogYXMgYW55XG4gICAgICAgIHNwZWNba2V5XS5zZXJpYWxpemUoKHZhbHVlIGFzIGFueSlba2V5XSwgYnVpbGRlcilcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFJlc3VsdDxUPiB7XG4gICAgICBjb25zdCBuZXdWYWx1ZTogUmVzdWx0PFQ+ID0ge30gYXMgYW55XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICA7KG5ld1ZhbHVlIGFzIGFueSlba2V5XSA9IHNwZWNba2V5XS5kZXNlcmlhbGl6ZShyZWFkZXIpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3VmFsdWVcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlOiBSZXN1bHQ8VD4gPSB7fSBhcyBhbnlcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWMpIHtcbiAgICAgICAgLy8gVE9ETzogYXMgYW55XG4gICAgICAgIDsobmV3VmFsdWUgYXMgYW55KVtrZXldID0gc3BlY1trZXldLmNyZWF0ZSgpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3VmFsdWVcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElPcHRpb25hbDxUPihzcGVjOiBJU2NoZW1hPFQ+KTogSVNjaGVtYTxUIHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiB7XG4gICAgc2VyaWFsaXplKHZhbHVlOiBUIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgYnVpbGRlci53cml0ZUludDgoMSlcbiAgICAgICAgc3BlYy5zZXJpYWxpemUodmFsdWUsIGJ1aWxkZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWlsZGVyLndyaXRlSW50OCgwKVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICBjb25zdCBleGlzdHMgPSByZWFkZXIucmVhZEludDgoKVxuICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICByZXR1cm4gc3BlYy5kZXNlcmlhbGl6ZShyZWFkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBJQXJyYXkgfSBmcm9tICcuL0FycmF5J1xuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4vYmFzaWMvQm9vbGVhbidcbmltcG9ydCB7IElFbnVtIH0gZnJvbSAnLi9iYXNpYy9FbnVtJ1xuaW1wb3J0IHsgRmxvYXQzMiwgRmxvYXQ2NCB9IGZyb20gJy4vYmFzaWMvRmxvYXQnXG5pbXBvcnQgeyBJbnQxNiwgSW50MzIsIEludDgsIEludDY0IGFzIGlJbnQ2NCB9IGZyb20gJy4vYmFzaWMvSW50ZWdlcidcbmltcG9ydCB7IEVjc1N0cmluZyB9IGZyb20gJy4vYmFzaWMvU3RyaW5nJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4vSVNjaGVtYSdcbmltcG9ydCB7IElNYXAgfSBmcm9tICcuL01hcCdcbmltcG9ydCB7IElPcHRpb25hbCB9IGZyb20gJy4vT3B0aW9uYWwnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgbmFtZXNwYWNlIFNjaGVtYXMge1xuICBleHBvcnQgdHlwZSBTY2hlbWFUeXBlID0gSVNjaGVtYVxuXG4gIGV4cG9ydCBjb25zdCBCb29sZWFuID0gQm9vbFxuXG4gIGV4cG9ydCBjb25zdCBTdHJpbmcgPSBFY3NTdHJpbmdcblxuICBleHBvcnQgY29uc3QgRmxvYXQgPSBGbG9hdDMyXG4gIGV4cG9ydCBjb25zdCBEb3VibGUgPSBGbG9hdDY0XG5cbiAgZXhwb3J0IGNvbnN0IEJ5dGUgPSBJbnQ4XG4gIGV4cG9ydCBjb25zdCBTaG9ydCA9IEludDE2XG4gIGV4cG9ydCBjb25zdCBJbnQgPSBJbnQzMlxuICBleHBvcnQgY29uc3QgSW50NjQgPSBpSW50NjRcblxuICBleHBvcnQgY29uc3QgTnVtYmVyID0gRmxvYXQzMlxuXG4gIGV4cG9ydCBjb25zdCBFbnVtID0gSUVudW1cbiAgZXhwb3J0IGNvbnN0IEFycmF5ID0gSUFycmF5XG4gIGV4cG9ydCBjb25zdCBNYXAgPSBJTWFwXG4gIGV4cG9ydCBjb25zdCBPcHRpb25hbCA9IElPcHRpb25hbFxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jcmR0UHJvdG9jb2wgPSBleHBvcnRzLnN0YXRlSXRlcmF0b3IgPSBleHBvcnRzLnNhbWVEYXRhID0gdm9pZCAwO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbi8qKlxuICogQ29tcGFyZSByYXcgZGF0YS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBzYW1lRGF0YShhLCBiKSB7XG4gICAgLy8gQXQgcmVmZXJlbmNlIGxldmVsXG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChhIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiBiIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoICE9PSBiLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGdsb2JhbFRoaXMuQnVmZmVyKSB7XG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgQnVmZmVyICYmIGIgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgICAgICAgIC8vIERlZXAgbGV2ZWxcbiAgICAgICAgICAgIHJldHVybiBhLmVxdWFscyhiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnRzLnNhbWVEYXRhID0gc2FtZURhdGE7XG4vKipcbiAqIFN0YXRlIGl0ZXJhdG9yXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24qIHN0YXRlSXRlcmF0b3Ioc3RhdGUpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXkxLCB2YWx1ZTFdIG9mIHN0YXRlLmVudHJpZXMoKSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIHZhbHVlMS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIHlpZWxkIFtrZXkxLCBrZXkyLCB2YWx1ZTJdO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5zdGF0ZUl0ZXJhdG9yID0gc3RhdGVJdGVyYXRvcjtcbi8qKlxuICogQHB1YmxpY1xuICogQ1JEVCBwcm90b2NvbC5cbiAqIFN0b3JlcyB0aGUgbGF0ZXN0IHN0YXRlLCBhbmQgZGVjaWRlcyB3aGVuZXZlciB3ZSBoYXZlXG4gKiB0byBwcm9jZXNzIGFuZCBzdG9yZSB0aGUgbmV3IGRhdGEgaW4gY2FzZSBpdHMgYW4gdXBkYXRlLCBvclxuICogdG8gZGlzY2FyZCBhbmQgc2VuZCBvdXIgbG9jYWwgdmFsdWUgY2F1c2UgcmVtb3RlIGl0J3Mgb3V0ZGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZHRQcm90b2NvbCgpIHtcbiAgICAvKipcbiAgICAgKiBMb2NhbCBzdGF0ZSB3aGVyZSB3ZSBzdG9yZSB0aGUgbGF0ZXN0IGxhbXBvcnQgdGltZXN0YW1wXG4gICAgICogYW5kIHRoZSByYXcgZGF0YSB2YWx1ZVxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0IHN0YXRlID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIFdlIHNob3VsZCBjYWxsIHRoaXMgZm4gaW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBzdGF0ZVxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVwZGF0ZVN0YXRlKGtleTEsIGtleTIsIGRhdGEsIHJlbW90ZVRpbWVzdGFtcCkge1xuICAgICAgICBjb25zdCBrZXkxVmFsdWUgPSBzdGF0ZS5nZXQoa2V5MSk7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IE1hdGgubWF4KHJlbW90ZVRpbWVzdGFtcCwga2V5MVZhbHVlPy5nZXQoa2V5Mik/LnRpbWVzdGFtcCB8fCAwKTtcbiAgICAgICAgaWYgKGtleTFWYWx1ZSkge1xuICAgICAgICAgICAga2V5MVZhbHVlLnNldChrZXkyLCB7IHRpbWVzdGFtcCwgZGF0YSB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0tleTFWYWx1ZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIG5ld0tleTFWYWx1ZS5zZXQoa2V5MiwgeyB0aW1lc3RhbXAsIGRhdGEgfSk7XG4gICAgICAgICAgICBzdGF0ZS5zZXQoa2V5MSwgbmV3S2V5MVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB0aW1lc3RhbXAsIGRhdGEgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGV2ZW50IGZvciB0aGUgc3BlY2lmaWVkIGtleSBhbmQgc3RvcmUgdGhlIG5ldyBkYXRhIGFuZFxuICAgICAqIGxhbXBvcnQgdGltZXN0bWFwIGluY3JlbWVudGVkIGJ5IG9uZSBpbiB0aGUgc3RhdGUuXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KGtleTEsIGtleTIsIGRhdGEpIHtcbiAgICAgICAgLy8gSW5jcmVtZW50IHRoZSB0aW1lc3RhbXBcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gKHN0YXRlLmdldChrZXkxKT8uZ2V0KGtleTIpPy50aW1lc3RhbXAgfHwgMCkgKyAxO1xuICAgICAgICB1cGRhdGVTdGF0ZShrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXApO1xuICAgICAgICByZXR1cm4geyBrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvY2VzcyB0aGUgcmVjZWl2ZWQgbWVzc2FnZSBvbmx5IGlmIHRoZSBsYW1wb3J0IG51bWJlciByZWNpZXZlZCBpcyBoaWdoZXJcbiAgICAgKiB0aGFuIHRoZSBzdG9yZWQgb25lLiBJZiBpdHMgbG93ZXIsIHdlIHNwcmVhZCBpdCB0byB0aGUgbmV0d29yayB0byBjb3JyZWN0IHRoZSBwZWVyLlxuICAgICAqIElmIHRoZXkgYXJlIGVxdWFsLCB0aGUgYmlnZ2VyIHJhdyBkYXRhIHdpbnMuXG4gIFxuICAgICAqIFJldHVybnMgdGhlIHJlY2lldmVkIGRhdGEgaWYgdGhlIGxhbXBvcnQgbnVtYmVyIHdhcyBiaWdnZXIgdGhhbiBvdXJzLlxuICAgICAqIElmIGl0IHdhcyBhbiBvdXRkYXRlZCBtZXNzYWdlLCB0aGVuIHdlIHJldHVybiB2b2lkXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgeyBrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXAgfSA9IG1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS5nZXQoa2V5MSk/LmdldChrZXkyKTtcbiAgICAgICAgLy8gVGhlIHJlY2VpdmVkIG1lc3NhZ2UgaXMgPiB0aGFuIG91ciBjdXJyZW50IHZhbHVlLCB1cGRhdGUgb3VyIHN0YXRlLlxuICAgICAgICBpZiAoIWN1cnJlbnQgfHwgY3VycmVudC50aW1lc3RhbXAgPCB0aW1lc3RhbXApIHtcbiAgICAgICAgICAgIHVwZGF0ZVN0YXRlKGtleTEsIGtleTIsIGRhdGEsIHRpbWVzdGFtcCk7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPdXRkYXRlZCBNZXNzYWdlLiBSZXNlbmQgb3VyIHN0YXRlIG1lc3NhZ2UgdGhyb3VnaCB0aGUgd2lyZS5cbiAgICAgICAgaWYgKGN1cnJlbnQudGltZXN0YW1wID4gdGltZXN0YW1wKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleTEsXG4gICAgICAgICAgICAgICAga2V5MixcbiAgICAgICAgICAgICAgICBkYXRhOiBjdXJyZW50LmRhdGEsXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBjdXJyZW50LnRpbWVzdGFtcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTYW1lIGRhdGEsIHNhbWUgdGltZXN0YW1wLiBXZWlyZG8gZWNobyBtZXNzYWdlLlxuICAgICAgICBpZiAoc2FtZURhdGEoY3VycmVudC5kYXRhLCBkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmFjZSBjb25kaXRpb24sIHNhbWUgdGltZXN0YW1wIGRpZmYgZGF0YS5cbiAgICAgICAgZnVuY3Rpb24gY29tcGFyZURhdGEoY3VycmVudCwgZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQgPiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wYXJlRGF0YShjdXJyZW50LmRhdGEsIGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleTEsXG4gICAgICAgICAgICAgICAga2V5MixcbiAgICAgICAgICAgICAgICBkYXRhOiBjdXJyZW50LmRhdGEsXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBjdXJyZW50LnRpbWVzdGFtcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTdGF0ZShrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXApLmRhdGE7XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGNyZWF0ZUV2ZW50LFxuICAgICAgICBwcm9jZXNzTWVzc2FnZSxcbiAgICAgICAgZ2V0U3RhdGVcbiAgICB9O1xufVxuZXhwb3J0cy5jcmR0UHJvdG9jb2wgPSBjcmR0UHJvdG9jb2w7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKipcbiAqIFRha2UgdGhlIG1heCBiZXR3ZWVuIGN1cnJlbnRTaXplIGFuZCBpbnRlbmRlZFNpemUgYW5kIHRoZW4gcGx1cyAxMDI0LiBUaGVuLFxuICogIGZpbmQgdGhlIG5leHQgbmVhcmVyIG11bHRpcGxlIG9mIDEwMjQuXG4gKiBAcGFyYW0gY3VycmVudFNpemUgLSBudW1iZXJcbiAqIEBwYXJhbSBpbnRlbmRlZFNpemUgLSBudW1iZXJcbiAqIEByZXR1cm5zIHRoZSBjYWxjdWxhdGVkIG51bWJlclxuICovXG5mdW5jdGlvbiBnZXROZXh0U2l6ZShjdXJyZW50U2l6ZTogbnVtYmVyLCBpbnRlbmRlZFNpemU6IG51bWJlcikge1xuICBjb25zdCBtaW5OZXdTaXplID0gTWF0aC5tYXgoY3VycmVudFNpemUsIGludGVuZGVkU2l6ZSkgKyAxMDI0XG4gIHJldHVybiBNYXRoLmNlaWwobWluTmV3U2l6ZSAvIDEwMjQpICogMTAyNFxufVxuXG4vKipcbiAqIEBwYXJhbSB3cml0aW5nIC0gd3JpdGluZyBvcHRpb24sIHNlZSBvYmplY3Qgc3BlY3MuXG4gKiBAcGFyYW0gcmVhZGluZyAtIHJlYWRpbmcgb3B0aW9uLCBzZWUgb2JqZWN0IHNwZWNzLlxuICogQHBhcmFtIGluaXRpYWxDYXBhY2l0eSAtIEluaXRpYWwgY2FwYWNpdHkgb2YgYnVmZmVyIHRvIGFsbG9jYXRlLCBpZ25vcmVkIGlmIHlvdSB1c2Ugd3JpdGluZyBvciByZWFkaW5nIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVCeXRlQnVmZmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gYSBidWZmZXIgYWxyZWFkeSBhbGxvY2F0ZWQgdG8gcmVhZCBmcm9tIHRoZXJlLlxuICAgKiBAcGFyYW0gY3VycmVudE9mZnNldCAtIHNldCB0aGUgY3Vyc29yIHdoZXJlIGJlZ2lucyB0byByZWFkLiBEZWZhdWx0IDBcbiAgICogQHBhcmFtIGxlbmd0aCAtIGRlbGltaXRlIHdoZXJlIHRoZSB2YWxpZCBkYXRhIGVuZHMuIERlZmF1bHQ6IGJ1ZmZlci5sZW5ndGhcbiAgICovXG4gIHJlYWRpbmc/OiB7XG4gICAgYnVmZmVyOiBVaW50OEFycmF5XG4gICAgbGVuZ3RoPzogbnVtYmVyXG4gICAgY3VycmVudE9mZnNldDogbnVtYmVyXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGJ1ZmZlciAtIGEgYnVmZmVyIGFscmVhZHkgYWxsb2NhdGVkIHRvIHdyaXRlIHRoZXJlLlxuICAgKiBAcGFyYW0gY3VycmVudE9mZnNldCAtIHNldCB0aGUgY3Vyc29yIHRvIG5vdCBzdGFydCB3cml0aW5nIGZyb20gdGhlIGJlZ2luIG9mIGl0LiBEZWZhdWx0IDBcbiAgICovXG4gIHdyaXRpbmc/OiB7XG4gICAgYnVmZmVyOiBVaW50OEFycmF5XG4gICAgY3VycmVudE9mZnNldD86IG51bWJlclxuICB9XG5cbiAgaW5pdGlhbENhcGFjaXR5PzogbnVtYmVyXG59XG5cbmNvbnN0IGRlZmF1bHRJbml0aWFsQ2FwYWNpdHkgPSAxMDI0MFxuXG4vKipcbiAqIEJ5dGVCdWZmZXIgaXMgYSB3cmFwcGVyIG9mIERhdGFWaWV3IHdoaWNoIGFsc28gYWRkcyBhIHJlYWQgYW5kIHdyaXRlIG9mZnNldC5cbiAqICBBbHNvIGluIGEgd3JpdGUgb3BlcmF0aW9uIGl0IHJlc2l6ZXMgdGhlIGJ1ZmZlciBpcyBiZWluZyB1c2VkIGlmIGl0IG5lZWRzLlxuICpcbiAqIC0gVXNlIHJlYWQgYW5kIHdyaXRlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG9yIGNvbnN1bWUgZGF0YS5cbiAqIC0gVXNlIHNldCBhbmQgZ2V0IG9ubHkgaWYgeW91IGFyZSBzdXJlIHRoYXQgeW91J3JlIGRvaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQnl0ZUJ1ZmZlcihvcHRpb25zOiBDcmVhdGVCeXRlQnVmZmVyT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGluaXRpYWxST2Zmc2V0OiBudW1iZXIgPSBvcHRpb25zLnJlYWRpbmc/LmN1cnJlbnRPZmZzZXQgfHwgMFxuICBsZXQgaW5pdGlhbEJ1ZmZlcjogVWludDhBcnJheSB8IG51bGwgPSBudWxsXG4gIGxldCBpbml0aWFsV09mZnNldDogbnVtYmVyID0gMFxuXG4gIGlmIChvcHRpb25zLndyaXRpbmcpIHtcbiAgICBpbml0aWFsQnVmZmVyID0gb3B0aW9ucy53cml0aW5nLmJ1ZmZlclxuICAgIGlmIChvcHRpb25zLndyaXRpbmcuY3VycmVudE9mZnNldCkge1xuICAgICAgaW5pdGlhbFdPZmZzZXQgPSBvcHRpb25zLndyaXRpbmcuY3VycmVudE9mZnNldFxuICAgIH1cbiAgfSBlbHNlIGlmIChvcHRpb25zLnJlYWRpbmcpIHtcbiAgICBpbml0aWFsQnVmZmVyID0gb3B0aW9ucy5yZWFkaW5nLmJ1ZmZlclxuICAgIGluaXRpYWxXT2Zmc2V0ID0gb3B0aW9ucy5yZWFkaW5nLmxlbmd0aCB8fCBvcHRpb25zLnJlYWRpbmcuYnVmZmVyLmxlbmd0aFxuICB9IGVsc2Uge1xuICAgIGluaXRpYWxCdWZmZXIgPSBuZXcgVWludDhBcnJheShcbiAgICAgIG9wdGlvbnMuaW5pdGlhbENhcGFjaXR5IHx8IGRlZmF1bHRJbml0aWFsQ2FwYWNpdHlcbiAgICApXG4gIH1cblxuICBsZXQgYnVmZmVyOiBVaW50OEFycmF5ID0gaW5pdGlhbEJ1ZmZlciFcbiAgbGV0IHZpZXc6IERhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0KVxuICBsZXQgd29mZnNldDogbnVtYmVyID0gaW5pdGlhbFdPZmZzZXRcbiAgbGV0IHJvZmZzZXQ6IG51bWJlciA9IGluaXRpYWxST2Zmc2V0XG5cbiAgLyoqXG4gICAqIEluY3JlZW1lbnQgdGhlIHdyaXRlIG9mZnNldCBhbmQgcmVzaXplIHRoZSBidWZmZXIgaWYgaXQgbmVlZHMuXG4gICAqL1xuICBjb25zdCB3b0FkZCA9IChhbW91bnQ6IG51bWJlcikgPT4ge1xuICAgIGlmICh3b2Zmc2V0ICsgYW1vdW50ID4gYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5ld3NpemUgPSBnZXROZXh0U2l6ZShidWZmZXIuYnl0ZUxlbmd0aCwgd29mZnNldCArIGFtb3VudClcbiAgICAgIGNvbnN0IG5ld0J1ZmZlciA9IG5ldyBVaW50OEFycmF5KG5ld3NpemUpXG4gICAgICBuZXdCdWZmZXIuc2V0KGJ1ZmZlcilcbiAgICAgIGJ1ZmZlciA9IG5ld0J1ZmZlclxuICAgICAgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyKVxuICAgIH1cblxuICAgIHdvZmZzZXQgKz0gYW1vdW50XG4gICAgcmV0dXJuIHdvZmZzZXQgLSBhbW91bnRcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgdGhlIHJlYWQgb2Zmc2V0IGFuZCB0aHJvdyBhbiBlcnJvciBpZiBpdCdzIHRyeWluZyB0byByZWFkXG4gICAqICBvdXRzaWRlIHRoZSBib3VuZHMuXG4gICAqL1xuICBjb25zdCByb0FkZCA9IChhbW91bnQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChyb2Zmc2V0ICsgYW1vdW50ID4gd29mZnNldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPdXRzaWRlIG9mIHRoZSBib3VuZHMgb2Ygd3JpdGVuIGRhdGEuJylcbiAgICB9XG5cbiAgICByb2Zmc2V0ICs9IGFtb3VudFxuICAgIHJldHVybiByb2Zmc2V0IC0gYW1vdW50XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSBlbnRpcmUgY3VycmVudCBVaW50OEFycmF5LlxuICAgICAqXG4gICAgICogV0FSTklORzogaWYgdGhlIGJ1ZmZlciBncm93cywgdGhlIHZpZXcgaGFkIGNoYW5nZWQgaXRzZWxmLFxuICAgICAqICBhbmQgdGhlIHJlZmVyZW5jZSB3aWxsIGJlIGEgaW52YWxpZCBvbmUuXG4gICAgICovXG4gICAgYnVmZmVyKCk6IFVpbnQ4QXJyYXkge1xuICAgICAgcmV0dXJuIGJ1ZmZlclxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGNhcGFjaXR5IG9mIHRoZSBjdXJyZW50IGJ1ZmZlclxuICAgICAqL1xuICAgIGJ1ZmZlckxlbmd0aCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5sZW5ndGhcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJlc2V0cyBieXRlQnVmZmVyIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IG9uZVxuICAgICAqL1xuICAgIHJlc2V0QnVmZmVyKCk6IHZvaWQge1xuICAgICAgcm9mZnNldCA9IDBcbiAgICAgIHdvZmZzZXQgPSAwXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCByZWFkIG9mZnNldFxuICAgICAqL1xuICAgIGN1cnJlbnRSZWFkT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gcm9mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgd3JpdGUgb2Zmc2V0XG4gICAgICovXG4gICAgY3VycmVudFdyaXRlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVhZGluZyBwdXJwb3NlXG4gICAgICogUmV0dXJucyB0aGUgcHJldml1b3Mgb2Zmc3NldCBzaXplIGJlZm9yZSBpbmNyZW1lbnRpbmdcbiAgICAgKi9cbiAgICBpbmNyZW1lbnRSZWFkT2Zmc2V0KGFtb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiByb0FkZChhbW91bnQpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBIb3cgbWFueSBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIHJlYWQuXG4gICAgICovXG4gICAgcmVtYWluaW5nQnl0ZXMoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB3b2Zmc2V0IC0gcm9mZnNldFxuICAgIH0sXG4gICAgcmVhZEZsb2F0MzIoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0MzIocm9BZGQoNCkpXG4gICAgfSxcbiAgICByZWFkRmxvYXQ2NCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQ2NChyb0FkZCg4KSlcbiAgICB9LFxuICAgIHJlYWRJbnQ4KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQ4KHJvQWRkKDEpKVxuICAgIH0sXG4gICAgcmVhZEludDE2KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQxNihyb0FkZCgyKSlcbiAgICB9LFxuICAgIHJlYWRJbnQzMigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MzIocm9BZGQoNCkpXG4gICAgfSxcbiAgICByZWFkSW50NjQoKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ0ludDY0KHJvQWRkKDgpKVxuICAgIH0sXG4gICAgcmVhZFVpbnQ4KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50OChyb0FkZCgxKSlcbiAgICB9LFxuICAgIHJlYWRVaW50MTYoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQxNihyb0FkZCgyKSlcbiAgICB9LFxuICAgIHJlYWRVaW50MzIoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQzMihyb0FkZCg0KSlcbiAgICB9LFxuICAgIHJlYWRVaW50NjQoKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ1VpbnQ2NChyb0FkZCg4KSlcbiAgICB9LFxuICAgIHJlYWRCdWZmZXIoKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSB2aWV3LmdldFVpbnQzMihyb0FkZCg0KSlcbiAgICAgIHJldHVybiBidWZmZXIuc3ViYXJyYXkocm9BZGQobGVuZ3RoKSwgcm9BZGQoMCkpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBXcml0aW5nIHB1cnBvc2VcbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnQgb2Zmc2V0XG4gICAgICogQHBhcmFtIGFtb3VudCAtIGhvdyBtYW55IGJ5dGVzXG4gICAgICogQHJldHVybnMgVGhlIG9mZnNldCB3aGVuIHRoaXMgcmVzZXJ2aW5nIHN0YXJ0cy5cbiAgICAgKi9cbiAgICBpbmNyZW1lbnRXcml0ZU9mZnNldChhbW91bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29BZGQoYW1vdW50KVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB3cml0ZW4gaW4gdGhlIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBzaXplKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogVGFrZSBjYXJlIHVzaW5nIHRoaXMgZnVuY3Rpb24sIGlmIHlvdSBtb2RpZnkgdGhlIGRhdGEgYWZ0ZXIsIHRoZVxuICAgICAqIHJldHVybmVkIHN1YmFycmF5IHdpbGwgY2hhbmdlIHRvby4gSWYgeW91J2xsIG1vZGlmeSB0aGUgY29udGVudCBvZiB0aGVcbiAgICAgKiBieXRlYnVmZmVyLCBtYXliZSB5b3Ugd2FudCB0byB1c2UgdG9Db3BpZWRCaW5hcnkoKVxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIHN1YmFycmF5IGZyb20gMCB0byBvZmZzZXQgYXMgcmVmZXJlbmNlLlxuICAgICAqL1xuICAgIHRvQmluYXJ5KCkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5zdWJhcnJheSgwLCB3b2Zmc2V0KVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTYWZlIGNvcGllZCBidWZmZXIgb2YgdGhlIGN1cnJlbnQgZGF0YSBvZiBCeXRlQnVmZmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgc3ViYXJyYXkgZnJvbSAwIHRvIG9mZnNldC5cbiAgICAgKi9cbiAgICB0b0NvcGllZEJpbmFyeSgpIHtcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0aGlzLnRvQmluYXJ5KCkpXG4gICAgfSxcblxuICAgIHdyaXRlQnVmZmVyKHZhbHVlOiBVaW50OEFycmF5LCB3cml0ZUxlbmd0aDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgIGlmICh3cml0ZUxlbmd0aCkge1xuICAgICAgICB0aGlzLndyaXRlVWludDMyKHZhbHVlLmJ5dGVMZW5ndGgpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG8gPSB3b0FkZCh2YWx1ZS5ieXRlTGVuZ3RoKVxuICAgICAgYnVmZmVyLnNldCh2YWx1ZSwgbylcbiAgICB9LFxuICAgIHdyaXRlRmxvYXQzMih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoNClcbiAgICAgIHZpZXcuc2V0RmxvYXQzMihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlRmxvYXQ2NCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoOClcbiAgICAgIHZpZXcuc2V0RmxvYXQ2NChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50OCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoMSlcbiAgICAgIHZpZXcuc2V0SW50OChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50MTYodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDIpXG4gICAgICB2aWV3LnNldEludDE2KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVJbnQzMih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoNClcbiAgICAgIHZpZXcuc2V0SW50MzIobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUludDY0KHZhbHVlOiBiaWdpbnQpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg4KVxuICAgICAgdmlldy5zZXRCaWdJbnQ2NChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDgodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDEpXG4gICAgICB2aWV3LnNldFVpbnQ4KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVVaW50MTYodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDIpXG4gICAgICB2aWV3LnNldFVpbnQxNihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDMyKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg0KVxuICAgICAgdmlldy5zZXRVaW50MzIobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZVVpbnQ2NCh2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoOClcbiAgICAgIHZpZXcuc2V0QmlnVWludDY0KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgLy8gRGF0YXZpZXcgUHJveHlcbiAgICBnZXRGbG9hdDMyKG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0MzIob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NChvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDY0KG9mZnNldClcbiAgICB9LFxuICAgIGdldEludDgob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50OChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQxNihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQxNihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQzMihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQzMihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQ2NChvZmZzZXQ6IG51bWJlcik6IGJpZ2ludCB7XG4gICAgICByZXR1cm4gdmlldy5nZXRCaWdJbnQ2NChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50OChvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50OChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50MTYob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDE2KG9mZnNldClcbiAgICB9LFxuICAgIGdldFVpbnQzMihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50MzIob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0VWludDY0KG9mZnNldDogbnVtYmVyKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ1VpbnQ2NChvZmZzZXQpXG4gICAgfSxcbiAgICBzZXRGbG9hdDMyKG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEZsb2F0MzIob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEZsb2F0NjQob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0RmxvYXQ2NChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50OChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRJbnQ4KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRJbnQxNihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRJbnQxNihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50MzIob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEludDY0KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICB2aWV3LnNldEJpZ0ludDY0KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRVaW50OChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRVaW50OChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDE2KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldFVpbnQxNihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDMyKG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldFVpbnQzMihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDY0KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICB2aWV3LnNldEJpZ1VpbnQ2NChvZmZzZXQsIHZhbHVlKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQnl0ZUJ1ZmZlciA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUJ5dGVCdWZmZXI+XG4iLCIvKipcbiAqIFRoZSB3aXJlIG1lc3NhZ2UgaXMgdGhlIHRvcC1sZXZlbCBtZXNzYWdlIHRoYXQgY2FuIGJlIHBhY2tlZFxuICogIGluc2lkZSBpdCBjYW4gY29udGFpbiBhIGRhdGEgd2l0aCBhbm90aGVyIHN0cnVjdHVyZSBvciBwcm90b2NvbFxuICpcbiAqIEVhY2ggd2lyZSBtZXNzYWdlIGhhcyB0aHJlZSBwcmltaXRpdmUgcHJvcGVydHkgdGhhdCBpdCdsbCBuZXZlciBjaGFuZ2VcbiAqICAgLS0tPiBsZW5ndGggICAgICAgIHVpbnQzMiAobWVzc2FnZSBzaXplIHVwIHRvIDQsMjk0LDk2NywyOTUpXG4gKiAgIC0tLT4gdmVyc2lvbiAgICAgICB1aW50MzIgKGZvciBub3cganVzdCBhIG51bWJlciB3aGljaCBpcyB6ZXJvKVxuICogICAtLS0+IG1lc3NhZ2UgdHlwZSAgdWludDMyXG4gKiBUaGUgbGVuZ3RoIGluZGljYXRlcyBob3cgbWFueSBieXRlcyBhcmUgYWJvdmUgc2VsZiwgdGhlIHZlcnNpb24gaW5cbiAqIGNvbWJpbmF0aW9uIHdpdGggbWVzc2FnZSB0eXBlIGRlZmluZXMgdGhlIHNldCBvZiBoYW5kbGVycyB0aGF0IHdpbGwgYmVcbiAqIGF2YWlsYWJsZSB0byBwcm9jZXNzIHRoZSBtZXNzYWdlXG4gKlxuICovXG5cbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuL0J5dGVCdWZmZXInXG5cbnR5cGUgVWludDMyID0gbnVtYmVyXG5cbmV4cG9ydCBuYW1lc3BhY2UgV2lyZU1lc3NhZ2Uge1xuICBleHBvcnQgZW51bSBFbnVtIHtcbiAgICBSRVNFUlZFRCA9IDAsXG5cbiAgICAvLyBDb21wb25lbnQgT3BlcmF0aW9uXG4gICAgUFVUX0NPTVBPTkVOVCA9IDEsXG4gICAgREVMRVRFX0NPTVBPTkVOVCA9IDIsXG5cbiAgICBNQVhfTUVTU0FHRV9UWVBFXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGxlbmd0aCAtIFVpbnQzMiB0aGUgbGVuZ3RoIG9mIGFsbCBtZXNzYWdlIChpbmNsdWRpbmcgdGhlIGhlYWRlcilcbiAgICogQHBhcmFtIHR5cGUgLSBkZWZpbmUgdGhlIGZ1bmN0aW9uIHdoaWNoIGhhbmRsZXMgdGhlIGRhdGFcbiAgICovXG4gIGV4cG9ydCB0eXBlIEhlYWRlciA9IHtcbiAgICBsZW5ndGg6IFVpbnQzMlxuICAgIHR5cGU6IFVpbnQzMlxuICB9XG5cbiAgZXhwb3J0IGNvbnN0IEhFQURFUl9MRU5HVEggPSA4XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBpZiB0aGUgbWVzc2FnZSBpbmNvbWluZyBpcyBjb21wbGV0ZWRcbiAgICogQHBhcmFtIGJ1ZiAtIEJ5dGVCdWZmZXJcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZShidWY6IEJ5dGVCdWZmZXIpIHtcbiAgICBjb25zdCByZW0gPSBidWYucmVtYWluaW5nQnl0ZXMoKVxuICAgIGlmIChyZW0gPCBIRUFERVJfTEVOR1RIKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlTGVuZ3RoID0gYnVmLmdldFVpbnQzMihidWYuY3VycmVudFJlYWRPZmZzZXQoKSlcbiAgICBpZiAocmVtIDwgbWVzc2FnZUxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZWFkSGVhZGVyKGJ1ZjogQnl0ZUJ1ZmZlcik6IEhlYWRlciB8IG51bGwge1xuICAgIGlmICghdmFsaWRhdGUoYnVmKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGVuZ3RoOiBidWYucmVhZFVpbnQzMigpLFxuICAgICAgdHlwZTogYnVmLnJlYWRVaW50MzIoKSBhcyBFbnVtXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdpcmVNZXNzYWdlXG4iLCJpbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZW5naW5lL2NvbXBvbmVudCdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vQnl0ZUJ1ZmZlcidcbmltcG9ydCBXaXJlTWVzc2FnZSBmcm9tICcuLi93aXJlTWVzc2FnZSdcblxuZXhwb3J0IG5hbWVzcGFjZSBDb21wb25lbnRPcGVyYXRpb24ge1xuICAvKipcbiAgICogQHBhcmFtIGVudGl0eSAtIFVpbnQzMiBudW1iZXIgb2YgdGhlIGVudGl0eVxuICAgKiBAcGFyYW0gY29tcG9uZW50SWQgLSBVaW50MzIgbnVtYmVyIG9mIGlkXG4gICAqIEBwYXJhbSB0aW1lc3RhbXAgLSBVaW50NjQgTGFtcG9ydCB0aW1lc3RhbXBcbiAgICogQHBhcmFtIGRhdGEgLSBVaW50OFtdIGRhdGEgb2YgY29tcG9uZW50XG4gICAqL1xuICBleHBvcnQgdHlwZSBJUHV0Q29tcG9uZW50ID0ge1xuICAgIGVudGl0eTogRW50aXR5XG4gICAgY29tcG9uZW50SWQ6IG51bWJlclxuICAgIHRpbWVzdGFtcDogbnVtYmVyXG4gICAgZGF0YTogVWludDhBcnJheVxuICB9XG4gIGV4cG9ydCB0eXBlIElEZWxldGVDb21wb25lbnQgPSB7XG4gICAgZW50aXR5OiBFbnRpdHlcbiAgICBjb21wb25lbnRJZDogbnVtYmVyXG4gICAgdGltZXN0YW1wOiBudW1iZXJcbiAgICBkYXRhPzogdW5kZWZpbmVkXG4gIH1cblxuICBleHBvcnQgY29uc3QgTUVTU0FHRV9IRUFERVJfTEVOR1RIID0gMjBcbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiBmb3IgYW4gb3B0aW1hbCB3cml0aW5nIGRhdGEgcGFzc2luZyB0aGUgQnl0ZUJ1ZmZlclxuICAgKiAgYWxyZWFkeSBhbGxvY2F0ZWRcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB3cml0ZShcbiAgICB0eXBlOiBXaXJlTWVzc2FnZS5FbnVtLFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHRpbWVzdGFtcDogbnVtYmVyLFxuICAgIGNvbXBvbmVudERlZmluaXRpb246IENvbXBvbmVudERlZmluaXRpb24sXG4gICAgYnVmOiBCeXRlQnVmZmVyXG4gICkge1xuICAgIC8vIHJlc2VydmUgdGhlIGJlZ2lubmluZ1xuICAgIGNvbnN0IHN0YXJ0TWVzc2FnZU9mZnNldCA9IGJ1Zi5pbmNyZW1lbnRXcml0ZU9mZnNldChcbiAgICAgIFdpcmVNZXNzYWdlLkhFQURFUl9MRU5HVEggKyBNRVNTQUdFX0hFQURFUl9MRU5HVEhcbiAgICApXG5cbiAgICAvLyB3cml0ZSBib2R5XG4gICAgaWYgKHR5cGUgPT09IFdpcmVNZXNzYWdlLkVudW0uUFVUX0NPTVBPTkVOVCkge1xuICAgICAgY29tcG9uZW50RGVmaW5pdGlvbi53cml0ZVRvQnl0ZUJ1ZmZlcihlbnRpdHksIGJ1ZilcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZUxlbmd0aCA9IGJ1Zi5zaXplKCkgLSBzdGFydE1lc3NhZ2VPZmZzZXRcblxuICAgIC8vIFdyaXRlIFdpcmVNZXNzYWdlIGhlYWRlclxuICAgIGJ1Zi5zZXRVaW50MzIoc3RhcnRNZXNzYWdlT2Zmc2V0LCBtZXNzYWdlTGVuZ3RoKVxuICAgIGJ1Zi5zZXRVaW50MzIoc3RhcnRNZXNzYWdlT2Zmc2V0ICsgNCwgdHlwZSlcblxuICAgIC8vIFdyaXRlIENvbXBvbmVudE9wZXJhdGlvbiBoZWFkZXJcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCArIDgsIGVudGl0eSlcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCArIDEyLCBjb21wb25lbnREZWZpbml0aW9uLl9pZClcbiAgICBidWYuc2V0VWludDY0KHN0YXJ0TWVzc2FnZU9mZnNldCArIDE2LCBCaWdJbnQodGltZXN0YW1wKSlcbiAgICBidWYuc2V0VWludDMyKFxuICAgICAgc3RhcnRNZXNzYWdlT2Zmc2V0ICsgMjQsXG4gICAgICBtZXNzYWdlTGVuZ3RoIC0gTUVTU0FHRV9IRUFERVJfTEVOR1RIIC0gV2lyZU1lc3NhZ2UuSEVBREVSX0xFTkdUSFxuICAgIClcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZWFkKFxuICAgIGJ1ZjogQnl0ZUJ1ZmZlclxuICApOiAoV2lyZU1lc3NhZ2UuSGVhZGVyICYgKElQdXRDb21wb25lbnQgfCBJRGVsZXRlQ29tcG9uZW50KSkgfCBudWxsIHtcbiAgICBjb25zdCBoZWFkZXIgPSBXaXJlTWVzc2FnZS5yZWFkSGVhZGVyKGJ1ZilcblxuICAgIGlmICghaGVhZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IGNvbW1vbiA9IHtcbiAgICAgIC4uLmhlYWRlcixcbiAgICAgIGVudGl0eTogYnVmLnJlYWRVaW50MzIoKSBhcyBFbnRpdHksXG4gICAgICBjb21wb25lbnRJZDogYnVmLnJlYWRJbnQzMigpLFxuICAgICAgdGltZXN0YW1wOiBOdW1iZXIoYnVmLnJlYWRVaW50NjQoKSlcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyLnR5cGUgPT09IFdpcmVNZXNzYWdlLkVudW0uREVMRVRFX0NPTVBPTkVOVCkge1xuICAgICAgcmV0dXJuIGNvbW1vblxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb21tb24sXG4gICAgICBkYXRhOiBidWYucmVhZEJ1ZmZlcigpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBjcmR0UHJvdG9jb2wsIE1lc3NhZ2UgYXMgQ3JkdE1lc3NhZ2UgfSBmcm9tICdAZGNsL2NyZHQnXG5cbmltcG9ydCB0eXBlIHsgUHJlRW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lJ1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vZW5naW5lL2VudGl0eSdcbmltcG9ydCB7IGNyZWF0ZUJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBDb21wb25lbnRPcGVyYXRpb24gYXMgTWVzc2FnZSB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vY3JkdC9jb21wb25lbnRPcGVyYXRpb24nXG5pbXBvcnQgV2lyZU1lc3NhZ2UgZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi93aXJlTWVzc2FnZSdcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0cy90eXBlcydcbmltcG9ydCB7IFJlY2VpdmVNZXNzYWdlLCBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZHRTY2VuZVN5c3RlbSh7XG4gIGVuZ2luZSxcbiAgdHJhbnNwb3J0c1xufToge1xuICBlbmdpbmU6IFByZUVuZ2luZVxuICB0cmFuc3BvcnRzOiBUcmFuc3BvcnRbXVxufSkge1xuICAvLyBDUkRUIENsaWVudFxuICBjb25zdCBjcmR0Q2xpZW50ID0gY3JkdFByb3RvY29sPFVpbnQ4QXJyYXk+KClcbiAgLy8gTWVzc2FnZXMgdGhhdCB3ZSByZWNlaXZlZCBhdCB0cmFuc3BvcnQub25NZXNzYWdlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkXG4gIGNvbnN0IHJlY2VpdmVkTWVzc2FnZXM6IFJlY2VpdmVNZXNzYWdlW10gPSBbXVxuICAvLyBNZXNzYWdlcyBhbHJlYWR5IHByb2Nlc3NlZCBieSB0aGUgZW5naW5lIGJ1dCB0aGF0IHdlIG5lZWQgdG8gYnJvYWRjYXN0IHRvIG90aGVyIHRyYW5zcG9ydHMuXG4gIGNvbnN0IHRyYW5zcG9ydE1lc3NhZ2VzOiBUcmFuc3BvcnRNZXNzYWdlW10gPSBbXVxuICAvLyBNYXAgb2YgZW50aXRpZXMgYWxyZWFkeSBwcm9jZXNzZWQgYXQgbGVhc3Qgb25jZVxuXG4gIHRyYW5zcG9ydHMuZm9yRWFjaChcbiAgICAodHJhbnNwb3J0KSA9PiAodHJhbnNwb3J0Lm9ubWVzc2FnZSA9IHBhcnNlQ2h1bmtNZXNzYWdlKHRyYW5zcG9ydC50eXBlKSlcbiAgKVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gdHJhbnNwb3J0VHlwZSB0cmFucG9ydCBpZCB0byBpZGVudGl5IG1lc3NhZ2VzXG4gICAqIEByZXR1cm5zIGEgZnVuY3Rpb24gdG8gcHJvY2VzcyByZWNlaXZlZCBtZXNzYWdlc1xuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2VDaHVua01lc3NhZ2UodHJhbnNwb3J0VHlwZTogc3RyaW5nKSB7XG4gICAgLyoqXG4gICAgICogUmVjZWl2ZXMgYSBjaHVuayBvZiBiaW5hcnkgbWVzc2FnZXMgYW5kIHN0b3JlcyBhbGwgdGhlIHZhbGlkXG4gICAgICogQ29tcG9uZW50IE9wZXJhdGlvbiBNZXNzYWdlcyBhdCBtZXNzYWdlcyBxdWV1ZVxuICAgICAqIEBwYXJhbSBjaHVua01lc3NhZ2UgQSBjaHVuayBvZiBiaW5hcnkgbWVzc2FnZXNcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gcGFyc2VDaHVua01lc3NhZ2UoY2h1bmtNZXNzYWdlOiBVaW50OEFycmF5KSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKHtcbiAgICAgICAgcmVhZGluZzogeyBidWZmZXI6IGNodW5rTWVzc2FnZSwgY3VycmVudE9mZnNldDogMCB9XG4gICAgICB9KVxuXG4gICAgICB3aGlsZSAoV2lyZU1lc3NhZ2UudmFsaWRhdGUoYnVmZmVyKSkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBidWZmZXIuY3VycmVudFJlYWRPZmZzZXQoKVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5yZWFkKGJ1ZmZlcikhXG5cbiAgICAgICAgY29uc3QgeyB0eXBlLCBlbnRpdHksIGNvbXBvbmVudElkLCBkYXRhLCB0aW1lc3RhbXAgfSA9IG1lc3NhZ2VcbiAgICAgICAgcmVjZWl2ZWRNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICBjb21wb25lbnRJZCxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgICB0cmFuc3BvcnRUeXBlLFxuICAgICAgICAgIG1lc3NhZ2VCdWZmZXI6IGJ1ZmZlclxuICAgICAgICAgICAgLmJ1ZmZlcigpXG4gICAgICAgICAgICAuc3ViYXJyYXkob2Zmc2V0LCBidWZmZXIuY3VycmVudFJlYWRPZmZzZXQoKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuZCBjbGVhciB0aGUgbWVzc2FlcyBxdWV1ZVxuICAgKiBAcmV0dXJucyBtZXNzYWdlcyByZWNpZXZlZCBieSB0aGUgdHJhbnNwb3J0IHRvIHByb2Nlc3Mgb24gdGhlIG5leHQgdGlja1xuICAgKi9cbiAgZnVuY3Rpb24gZ2V0TWVzc2FnZXM8VCA9IHVua25vd24+KHZhbHVlOiBUW10pIHtcbiAgICBjb25zdCBtZXNzYWdlc1RvUHJvY2VzcyA9IEFycmF5LmZyb20odmFsdWUpXG4gICAgdmFsdWUubGVuZ3RoID0gMFxuICAgIHJldHVybiBtZXNzYWdlc1RvUHJvY2Vzc1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZm4gd2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgdGljay5cbiAgICogUHJvY2VzcyBhbGwgdGhlIG1lc3NhZ2VzIHF1ZXVlIHJlY2VpdmVkIGJ5IHRoZSB0cmFuc3BvcnRcbiAgICovXG4gIGZ1bmN0aW9uIHJlY2VpdmVNZXNzYWdlcygpIHtcbiAgICBjb25zdCBtZXNzYWdlc1RvUHJvY2VzcyA9IGdldE1lc3NhZ2VzKHJlY2VpdmVkTWVzc2FnZXMpXG4gICAgZm9yIChjb25zdCB0cmFuc3BvcnQgb2YgdHJhbnNwb3J0cykge1xuICAgICAgY29uc3QgYnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXNUb1Byb2Nlc3MpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCB0aW1lc3RhbXAsIGNvbXBvbmVudElkLCBlbnRpdHksIHR5cGUgfSA9IG1lc3NhZ2VcbiAgICAgICAgY29uc3QgY3JkdE1lc3NhZ2U6IENyZHRNZXNzYWdlPFVpbnQ4QXJyYXk+ID0ge1xuICAgICAgICAgIGtleTE6IGVudGl0eSxcbiAgICAgICAgICBrZXkyOiBjb21wb25lbnRJZCxcbiAgICAgICAgICBkYXRhOiBkYXRhIHx8IG51bGwsXG4gICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBlbmdpbmUuZ2V0Q29tcG9uZW50KGNvbXBvbmVudElkKVxuICAgICAgICBjb25zdCBjdXJyZW50ID0gY3JkdENsaWVudC5wcm9jZXNzTWVzc2FnZShjcmR0TWVzc2FnZSlcblxuICAgICAgICAvLyBDUkRUIG91dGRhdGVkIG1lc3NhZ2UuIFJlc2VuZCB0aGlzIG1lc3NhZ2UgdGhyb3VnaCB0aGUgd2lyZVxuICAgICAgICBpZiAoY3JkdE1lc3NhZ2UgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gY29tcG9uZW50LmhhcyhlbnRpdHkpXG4gICAgICAgICAgICA/IFdpcmVNZXNzYWdlLkVudW0uUFVUX0NPTVBPTkVOVFxuICAgICAgICAgICAgOiBXaXJlTWVzc2FnZS5FbnVtLkRFTEVURV9DT01QT05FTlRcbiAgICAgICAgICBNZXNzYWdlLndyaXRlKHR5cGUsIGVudGl0eSwgY3VycmVudC50aW1lc3RhbXAsIGNvbXBvbmVudCwgYnVmZmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFByb2Nlc3MgQ1JEVCBNZXNzYWdlXG4gICAgICAgICAgaWYgKHR5cGUgPT09IFdpcmVNZXNzYWdlLkVudW0uREVMRVRFX0NPTVBPTkVOVCkge1xuICAgICAgICAgICAgY29tcG9uZW50LmRlbGV0ZUZyb20oZW50aXR5KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgICByZWFkaW5nOiB7IGJ1ZmZlcjogbWVzc2FnZS5kYXRhISwgY3VycmVudE9mZnNldDogMCB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYiA9IGNyZWF0ZUJ5dGVCdWZmZXIob3B0cylcblxuICAgICAgICAgICAgLy8gVXBkYXRlIGVuZ2luZSBjb21wb25lbnRcbiAgICAgICAgICAgIGNvbXBvbmVudC51cHNlcnRGcm9tQmluYXJ5KG1lc3NhZ2UuZW50aXR5LCBiYilcbiAgICAgICAgICAgIGNvbXBvbmVudC5jbGVhckRpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQWRkIG1lc3NhZ2UgdG8gdHJhbnNwb3J0IHF1ZXVlIHRvIGJlIHByb2Nlc3NlZCBieSBvdGhlcnMgdHJhbnNwb3J0c1xuICAgICAgICAgIHRyYW5zcG9ydE1lc3NhZ2VzLnB1c2gobWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnVmZmVyLnNpemUoKSkge1xuICAgICAgICB0cmFuc3BvcnQuc2VuZChidWZmZXIudG9CaW5hcnkoKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZXMgdGhlIGRpcnR5IG1hcCBhbmQgZ2VuZXJhdGVzIGNyZHQgbWVzc2FnZXMgdG8gYmUgc2VuZFxuICAgKiBAcGFyYW0gZGlydHlNYXAgYSBtYXAgb2YgeyBlbnRpdGllczogW2NvbXBvbmVudElkXSB9XG4gICAqL1xuICBmdW5jdGlvbiBjcmVhdGVNZXNzYWdlcyhkaXJ0eU1hcDogTWFwPEVudGl0eSwgU2V0PG51bWJlcj4+KSB7XG4gICAgLy8gQ1JEVCBNZXNzYWdlcyB3aWxsIGJlIHRoZSBtZXJnZSBiZXR3ZWVuIHRoZSByZWNpZXZlZCB0cmFuc3BvcnQgbWVzc2FnZXMgYW5kIHRoZSBuZXcgY3JkdCBtZXNzYWdlc1xuICAgIGNvbnN0IGNyZHRNZXNzYWdlcyA9IGdldE1lc3NhZ2VzKHRyYW5zcG9ydE1lc3NhZ2VzKVxuICAgIGNvbnN0IGJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuXG4gICAgZm9yIChjb25zdCBbZW50aXR5LCBjb21wb25lbnRzSWRdIG9mIGRpcnR5TWFwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudElkIG9mIGNvbXBvbmVudHNJZCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBlbmdpbmUuZ2V0Q29tcG9uZW50KGNvbXBvbmVudElkKVxuICAgICAgICBjb25zdCBlbnRpdHlDb21wb25lbnQgPSBjb21wb25lbnQuaGFzKGVudGl0eSlcbiAgICAgICAgICA/IGNvbXBvbmVudC50b0JpbmFyeShlbnRpdHkpLnRvQmluYXJ5KClcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgY29uc3QgZXZlbnQgPSBjcmR0Q2xpZW50LmNyZWF0ZUV2ZW50KFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICBjb21wb25lbnRJZCxcbiAgICAgICAgICBlbnRpdHlDb21wb25lbnRcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBvZmZzZXQgPSBidWZmZXIuY3VycmVudFdyaXRlT2Zmc2V0KClcbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbXBvbmVudC5oYXMoZW50aXR5KVxuICAgICAgICAgID8gV2lyZU1lc3NhZ2UuRW51bS5QVVRfQ09NUE9ORU5UXG4gICAgICAgICAgOiBXaXJlTWVzc2FnZS5FbnVtLkRFTEVURV9DT01QT05FTlRcbiAgICAgICAgY29uc3QgdHJhbnNwb3J0TWVzc2FnZTogT21pdDxUcmFuc3BvcnRNZXNzYWdlLCAnbWVzc2FnZUJ1ZmZlcic+ID0ge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgY29tcG9uZW50SWQsXG4gICAgICAgICAgZW50aXR5LFxuICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYW5zcG9ydHMuc29tZSgodCkgPT4gdC5maWx0ZXIodHJhbnNwb3J0TWVzc2FnZSkpKSB7XG4gICAgICAgICAgTWVzc2FnZS53cml0ZSh0eXBlLCBlbnRpdHksIGV2ZW50LnRpbWVzdGFtcCwgY29tcG9uZW50LCBidWZmZXIpXG4gICAgICAgICAgY3JkdE1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgICAgLi4udHJhbnNwb3J0TWVzc2FnZSxcbiAgICAgICAgICAgIG1lc3NhZ2VCdWZmZXI6IGJ1ZmZlclxuICAgICAgICAgICAgICAuYnVmZmVyKClcbiAgICAgICAgICAgICAgLnN1YmFycmF5KG9mZnNldCwgYnVmZmVyLmN1cnJlbnRXcml0ZU9mZnNldCgpKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZW5kIG1lc3NhZ2VzIHRvIHRyYW5zcG9ydHNcbiAgICBjb25zdCB0cmFuc3BvcnRCdWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKClcbiAgICBmb3IgKGNvbnN0IHRyYW5zcG9ydCBvZiB0cmFuc3BvcnRzKSB7XG4gICAgICB0cmFuc3BvcnRCdWZmZXIucmVzZXRCdWZmZXIoKVxuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIGNyZHRNZXNzYWdlcykge1xuICAgICAgICBpZiAodHJhbnNwb3J0LmZpbHRlcihtZXNzYWdlKSkge1xuICAgICAgICAgIHRyYW5zcG9ydEJ1ZmZlci53cml0ZUJ1ZmZlcihtZXNzYWdlLm1lc3NhZ2VCdWZmZXIsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNwb3J0QnVmZmVyLnNpemUoKSkge1xuICAgICAgICB0cmFuc3BvcnQuc2VuZCh0cmFuc3BvcnRCdWZmZXIudG9CaW5hcnkoKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZU1lc3NhZ2VzLFxuICAgIHJlY2VpdmVNZXNzYWdlc1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi9jb21wb25lbnQnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBEZWVwUmVhZG9ubHlNYXA8SywgVj4gPSBSZWFkb25seU1hcDxcbiAgRGVlcFJlYWRvbmx5PEs+LFxuICBEZWVwUmVhZG9ubHk8Vj5cbj5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBEZWVwUmVhZG9ubHlTZXQ8VD4gPSBSZWFkb25seVNldDxEZWVwUmVhZG9ubHk8VD4+XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlYWRvbmx5T2JqZWN0PFQ+ID0ge1xuICByZWFkb25seSBbSyBpbiBrZXlvZiBUXTogRGVlcFJlYWRvbmx5PFRbS10+XG59XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUmVhZG9ubHlQcmltaXRpdmUgPVxuICB8IG51bWJlclxuICB8IHN0cmluZ1xuICB8IG51bWJlcltdXG4gIHwgc3RyaW5nW11cbiAgfCBib29sZWFuXG4gIHwgYm9vbGVhbltdXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBSZWFkb25seUNvbXBvbmVudFNjaGVtYTxcbiAgVCBleHRlbmRzIFtDb21wb25lbnREZWZpbml0aW9uLCAuLi5Db21wb25lbnREZWZpbml0aW9uW11dXG4+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIENvbXBvbmVudERlZmluaXRpb25cbiAgICA/IFJldHVyblR5cGU8VFtLXVsnZ2V0J10+XG4gICAgOiBuZXZlclxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlYWRvbmx5PFQ+ID0gVCBleHRlbmRzIFJlYWRvbmx5UHJpbWl0aXZlXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBEZWVwUmVhZG9ubHlNYXA8SywgVj5cbiAgOiBUIGV4dGVuZHMgU2V0PGluZmVyIE0+XG4gID8gRGVlcFJlYWRvbmx5U2V0PE0+XG4gIDogRGVlcFJlYWRvbmx5T2JqZWN0PFQ+XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwUmVhZG9ubHk8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgdmFsOiBUXG4pOiBEZWVwUmVhZG9ubHk8VD4ge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLnZhbCB9KSBhcyBEZWVwUmVhZG9ubHk8VD5cbn1cbiIsImltcG9ydCB0eXBlIHsgSVNjaGVtYSB9IGZyb20gJy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIsIGNyZWF0ZUJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eSdcbmltcG9ydCB7IGRlZXBSZWFkb25seSwgRGVlcFJlYWRvbmx5IH0gZnJvbSAnLi9yZWFkb25seSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEVjc1Jlc3VsdDxUIGV4dGVuZHMgSVNjaGVtYT4gPSBUIGV4dGVuZHMgSVNjaGVtYVxuICA/IFJldHVyblR5cGU8VFsnZGVzZXJpYWxpemUnXT5cbiAgOiBuZXZlclxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQ29tcG9uZW50VHlwZTxUIGV4dGVuZHMgSVNjaGVtYT4gPSBFY3NSZXN1bHQ8VD5cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIENvbXBvbmVudERlZmluaXRpb248XG4gIFQgZXh0ZW5kcyBJU2NoZW1hID0gSVNjaGVtYTxhbnk+LFxuICBDb25zdHJ1Y3RvclR5cGUgPSBDb21wb25lbnRUeXBlPFQ+XG4+ID0ge1xuICBfaWQ6IG51bWJlclxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50XG4gICAqL1xuICBkZWZhdWx0KCk6IERlZXBSZWFkb25seTxDb21wb25lbnRUeXBlPFQ+PlxuXG4gIC8qKlxuICAgKiBHZXQgaWYgdGhlIGVudGl0eSBoYXMgdGhpcyBjb21wb25lbnRcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uaGFzKG15RW50aXR5KSAvLyByZXR1cm4gZmFsc2VcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSlcbiAgICogVHJhbnNmb3JtLmhhcyhteUVudGl0eSkgLy8gcmV0dXJuIHRydWVcbiAgICogYGBgXG4gICAqL1xuICBoYXMoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVhZG9ubHkgY29tcG9uZW50IG9mIHRoZSBlbnRpdHkgKHRvIG11dGF0ZSBpdCwgdXNlIGdldE11dGFibGUgaW5zdGVhZCksIHRocm93IGFuIGVycm9yIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIHRoZSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHJldHVyblxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5KVxuICAgKiBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KG15RW50aXR5KSAvLyByZXR1cm4gdHJ1ZVxuICAgKiBsb2codHJhbnNmb3JtLnBvc2l0aW9uLnggPT09IDApIC8vIGxvZyAndHJ1ZSdcbiAgICpcbiAgICogdHJhbnNmb3JtLnBvc2l0aW9uLnkgPSAxMCAvLyBpbGxlZ2FsIHN0YXRlbWVudCwgdG8gbXV0YXRlIHRoZSBjb21wb25lbnQgdXNlIGdldE11dGFibGVcbiAgICogYGBgXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG90aGVyRW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5nZXQob3RoZXJFbnRpdHkpIC8vIHRocm93IGFuIGVycm9yISFcbiAgICogYGBgXG4gICAqL1xuICBnZXQoZW50aXR5OiBFbnRpdHkpOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj5cblxuICAvKipcbiAgICogR2V0IHRoZSByZWFkb25seSBjb21wb25lbnQgb2YgdGhlIGVudGl0eSAodG8gbXV0YXRlIGl0LCB1c2UgZ2V0TXV0YWJsZSBpbnN0ZWFkKSwgb3IgbnVsbCBpZiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSB0aGUgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEByZXR1cm5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3Qgb3RoZXJFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogbG9nKFRyYW5zZm9ybS5nZXQob3RoZXJFbnRpdHkpID09PSBudWxsKSAvLyBsb2cgJ3RydWUnXG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0T3JOdWxsKGVudGl0eTogRW50aXR5KTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+IHwgbnVsbFxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGN1cnJlbnQgY29tcG9uZW50IHRvIGFuIGVudGl0eSwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGNvbXBvbmVudCBhbHJlYWR5IGV4aXN0cyAodXNlIGBjcmVhdGVPclJlcGxhY2VgIGluc3RlYWQpLlxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIHZhbCBUaGUgaW5pdGlhbCB2YWx1ZVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5LCB7IC4uLlRyYW5zZm9ybS5kZWZhdWx0KCksIHBvc2l0aW9uOiB7eDogNCwgeTogMCwgejogNH0gfSkgLy8gb2shXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpIC8vIHRocm93IGFuIGVycm9yLCB0aGUgYFRyYW5zZm9ybWAgY29tcG9uZW50IGFscmVhZHkgZXhpc3RzIGluIGBteUVudGl0eWBcbiAgICogYGBgYFxuICAgKi9cbiAgY3JlYXRlKGVudGl0eTogRW50aXR5LCB2YWw/OiBDb25zdHJ1Y3RvclR5cGUpOiBDb21wb25lbnRUeXBlPFQ+XG4gIC8qKlxuICAgKiBBZGQgdGhlIGN1cnJlbnQgY29tcG9uZW50IHRvIGFuIGVudGl0eSBvciByZXBsYWNlIHRoZSBjb250ZW50IGlmIHRoZSBlbnRpdHkgYWxyZWFkeSBoYXMgdGhlIGNvbXBvbmVudFxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIHZhbCBUaGUgaW5pdGlhbCBvciBuZXcgdmFsdWVcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSkgLy8gb2shXG4gICAqIFRyYW5zZm9ybS5jcmVhdGVPclJlcGxhY2UobXlFbnRpdHksIHsgLi4uVHJhbnNmb3JtLmRlZmF1bHQoKSwgcG9zaXRpb246IHt4OiA0LCB5OiAwLCB6OiA0fSB9KSAvLyBvayFcbiAgICogYGBgYFxuICAgKi9cbiAgY3JlYXRlT3JSZXBsYWNlKGVudGl0eTogRW50aXR5LCB2YWw/OiBDb21wb25lbnRUeXBlPFQ+KTogQ29tcG9uZW50VHlwZTxUPlxuXG4gIC8qKlxuICAgKiBEZWxldGUgdGhlIGN1cnJlbnQgY29tcG9uZW50IHRvIGFuIGVudGl0eSwgcmV0dXJuIG51bGwgaWYgdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgdGhlIGN1cnJlbnQgY29tcG9uZW50LlxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSkgLy8gb2shXG4gICAqIFRyYW5zZm9ybS5kZWxldGVGcm9tKG15RW50aXR5KSAvLyByZXR1cm4gdGhlIGNvbXBvbmVudFxuICAgKiBUcmFuc2Zvcm0uZGVsZXRlRnJvbShteUVudGl0eSkgLy8gcmV0dXJuIG51bGxcbiAgICogYGBgYFxuICAgKi9cbiAgZGVsZXRlRnJvbShlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbXV0YWJsZSBjb21wb25lbnQgb2YgdGhlIGVudGl0eSwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgdGhlIGNvbXBvbmVudC5cbiAgICogLSBJbnRlcm5hbCBjb21tZW50OiBUaGlzIG1ldGhvZCBhZGRzIHRoZSA8ZW50aXR5LGNvbXBvbmVudD4gdG8gdGhlIGxpc3QgdG8gYmUgcmV2aWV3ZWQgbmV4dCBmcmFtZVxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG15RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpXG4gICAqIFRyYW5zZm9ybS5nZXRNdXRhYmxlKG15RW50aXR5KS5wb3NpdGlvbiA9IHt4OiA0LCB5OiAwLCB6OiA0fVxuICAgKiBgYGBgXG4gICAqL1xuICBnZXRNdXRhYmxlKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPlxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG11dGFibGUgY29tcG9uZW50IG9mIHRoZSBlbnRpdHksIHJldHVybiBudWxsIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIHRoZSBjb21wb25lbnQuXG4gICAqIC0gSW50ZXJuYWwgY29tbWVudDogVGhpcyBtZXRob2QgYWRkcyB0aGUgPGVudGl0eSxjb21wb25lbnQ+IHRvIHRoZSBsaXN0IHRvIGJlIHJldmlld2VkIG5leHQgZnJhbWVcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChteUVudGl0eSlcbiAgICogaWYgKHRyYW5zZm9ybSkge1xuICAgKiAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHt4OiA0LCB5OiAwLCB6OiA0fVxuICAgKiB9XG4gICAqIGBgYGBcbiAgICovXG4gIGdldE11dGFibGVPck51bGwoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbFxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgdXBzZXJ0RnJvbUJpbmFyeShlbnRpdHk6IEVudGl0eSwgZGF0YTogQnl0ZUJ1ZmZlcik6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgdXBkYXRlRnJvbUJpbmFyeShlbnRpdHk6IEVudGl0eSwgZGF0YTogQnl0ZUJ1ZmZlcik6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsXG5cbiAgLy8gYWxsb2NhdGVzIGEgYnVmZmVyIGFuZCByZXR1cm5zIG5ldyBidWZmZXJcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqL1xuICB0b0JpbmFyeShlbnRpdHk6IEVudGl0eSk6IEJ5dGVCdWZmZXJcblxuICAvLyB3cml0ZXMgdG8gYSBwcmUtYWxsb2NhdGVkIGJ1ZmZlclxuICB3cml0ZVRvQnl0ZUJ1ZmZlcihlbnRpdHk6IEVudGl0eSwgYnVmZmVyOiBCeXRlQnVmZmVyKTogdm9pZFxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgVXNlIGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQ29tcG9uZW50KSBpbnN0ZWFkLlxuICAgKiBHZXQgdGhlIGl0ZXJhdG9yIHRvIGV2ZXJ5IGVudGl0eSBoYXMgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgaXRlcmF0b3IoKTogSXRlcmFibGU8W0VudGl0eSwgQ29tcG9uZW50VHlwZTxUPl0+XG5cbiAgLy8gRGlydHlcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGlydHlJdGVyYXRvcigpOiBJdGVyYWJsZTxFbnRpdHk+XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNsZWFyRGlydHkoKTogdm9pZFxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBpc0RpcnR5KGVudGl0eTogRW50aXR5KTogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50PFxuICBUIGV4dGVuZHMgSVNjaGVtYSxcbiAgQ29uc3RydWN0b3JUeXBlID0gQ29tcG9uZW50VHlwZTxUPlxuPihcbiAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgc3BlYzogVCxcbiAgY29uc3RydWN0b3JEZWZhdWx0PzogQ29uc3RydWN0b3JUeXBlXG4gIC8vIG1ldGE6IHsgc3luY0ZsYWdzIH1cbik6IENvbXBvbmVudERlZmluaXRpb248VCwgQ29uc3RydWN0b3JUeXBlPiB7XG4gIGNvbnN0IGRhdGEgPSBuZXcgTWFwPEVudGl0eSwgQ29tcG9uZW50VHlwZTxUPj4oKVxuICBjb25zdCBkaXJ0eUl0ZXJhdG9yID0gbmV3IFNldDxFbnRpdHk+KClcblxuICBjb25zdCBkZWZhdWx0QnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gIGlmIChjb25zdHJ1Y3RvckRlZmF1bHQpIHtcbiAgICBzcGVjLnNlcmlhbGl6ZShjb25zdHJ1Y3RvckRlZmF1bHQsIGRlZmF1bHRCdWZmZXIpXG4gIH1cblxuICBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgaWYgKGNvbnN0cnVjdG9yRGVmYXVsdCkge1xuICAgICAgcmV0dXJuIHNwZWMuZGVzZXJpYWxpemUoXG4gICAgICAgIGNyZWF0ZUJ5dGVCdWZmZXIoe1xuICAgICAgICAgIHdyaXRpbmc6IHtcbiAgICAgICAgICAgIGJ1ZmZlcjogZGVmYXVsdEJ1ZmZlci5idWZmZXIoKSxcbiAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQ6IGRlZmF1bHRCdWZmZXIuY3VycmVudFdyaXRlT2Zmc2V0KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzcGVjLmNyZWF0ZSgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlZmlsbFZhbHVlKHZhbHVlOiBDb25zdHJ1Y3RvclR5cGUpIHtcbiAgICByZXR1cm4geyAuLi5nZXREZWZhdWx0VmFsdWUoKSwgLi4udmFsdWUgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBfaWQ6IGNvbXBvbmVudElkLFxuICAgIGRlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXREZWZhdWx0VmFsdWUoKVxuICAgIH0sXG4gICAgaXNEaXJ0eTogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gZGlydHlJdGVyYXRvci5oYXMoZW50aXR5KVxuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBkYXRhLmhhcyhlbnRpdHkpXG4gICAgfSxcbiAgICBkZWxldGVGcm9tOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBkYXRhLmRlbGV0ZShlbnRpdHkpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gY29tcG9uZW50IHx8IG51bGxcbiAgICB9LFxuICAgIGdldE9yTnVsbDogZnVuY3Rpb24gKFxuICAgICAgZW50aXR5OiBFbnRpdHlcbiAgICApOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj4gfCBudWxsIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIHJldHVybiBjb21wb25lbnQgPyBkZWVwUmVhZG9ubHkoY29tcG9uZW50KSA6IG51bGxcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW2dldEZyb21dIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZXBSZWFkb25seShjb21wb25lbnQpXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgdmFsdWU/OiBDb25zdHJ1Y3RvclR5cGVcbiAgICApOiBDb21wb25lbnRUeXBlPFQ+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbY3JlYXRlXSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBhbHJlYWR5IGV4aXN0c2BcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY29uc3QgdXNlZFZhbHVlID1cbiAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCA/IGdldERlZmF1bHRWYWx1ZSgpIDogcHJlZmlsbFZhbHVlKHZhbHVlKVxuICAgICAgZGF0YS5zZXQoZW50aXR5LCB1c2VkVmFsdWUpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gdXNlZFZhbHVlXG4gICAgfSxcbiAgICBjcmVhdGVPclJlcGxhY2U6IGZ1bmN0aW9uIChcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgdmFsdWU/OiBDb25zdHJ1Y3RvclR5cGVcbiAgICApOiBDb21wb25lbnRUeXBlPFQ+IHtcbiAgICAgIGNvbnN0IHVzZWRWYWx1ZSA9XG4gICAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0VmFsdWUoKSA6IHByZWZpbGxWYWx1ZSh2YWx1ZSlcbiAgICAgIGRhdGEuc2V0KGVudGl0eSwgdXNlZFZhbHVlISlcbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiB1c2VkVmFsdWUhXG4gICAgfSxcbiAgICBnZXRNdXRhYmxlT3JOdWxsOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIGNvbXBvbmVudFxuICAgIH0sXG4gICAgZ2V0TXV0YWJsZTogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFttdXRhYmxlXSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICB9LFxuICAgIGl0ZXJhdG9yOiBmdW5jdGlvbiogKCk6IEl0ZXJhYmxlPFtFbnRpdHksIENvbXBvbmVudFR5cGU8VD5dPiB7XG4gICAgICBmb3IgKGNvbnN0IFtlbnRpdHksIGNvbXBvbmVudF0gb2YgZGF0YSkge1xuICAgICAgICB5aWVsZCBbZW50aXR5LCBjb21wb25lbnRdXG4gICAgICB9XG4gICAgfSxcbiAgICBkaXJ0eUl0ZXJhdG9yOiBmdW5jdGlvbiogKCk6IEl0ZXJhYmxlPEVudGl0eT4ge1xuICAgICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZGlydHlJdGVyYXRvcikge1xuICAgICAgICB5aWVsZCBlbnRpdHlcbiAgICAgIH1cbiAgICB9LFxuICAgIHRvQmluYXJ5KGVudGl0eTogRW50aXR5KTogQnl0ZUJ1ZmZlciB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFt0b0JpbmFyeV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyaXRlQnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gICAgICBzcGVjLnNlcmlhbGl6ZShjb21wb25lbnQsIHdyaXRlQnVmZmVyKVxuICAgICAgcmV0dXJuIHdyaXRlQnVmZmVyXG4gICAgfSxcbiAgICB3cml0ZVRvQnl0ZUJ1ZmZlcihlbnRpdHk6IEVudGl0eSwgYnVmZmVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFt3cml0ZVRvQnl0ZUJ1ZmZlcl0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHNwZWMuc2VyaWFsaXplKGNvbXBvbmVudCwgYnVmZmVyKVxuICAgIH0sXG4gICAgdXBkYXRlRnJvbUJpbmFyeShcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgYnVmZmVyOiBCeXRlQnVmZmVyXG4gICAgKTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGwge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbdXBkYXRlRnJvbUJpbmFyeV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy51cHNlcnRGcm9tQmluYXJ5KGVudGl0eSwgYnVmZmVyKVxuICAgIH0sXG4gICAgdXBzZXJ0RnJvbUJpbmFyeShcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgYnVmZmVyOiBCeXRlQnVmZmVyXG4gICAgKTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGwge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBzcGVjLmRlc2VyaWFsaXplKGJ1ZmZlcilcbiAgICAgIGRhdGEuc2V0KGVudGl0eSwgbmV3VmFsdWUpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gbmV3VmFsdWVcbiAgICB9LFxuICAgIGNsZWFyRGlydHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRpcnR5SXRlcmF0b3IuY2xlYXIoKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHknXG5cbmV4cG9ydCBuYW1lc3BhY2UgRW50aXR5VXRpbHMge1xuICAvKipcbiAgICogUmFuZ2UgaXMgdGhlIGZpcnN0IGVsZW1lbnQgYW5kIHRoZSBsYXN0IHBvc3NpYmxlIGVsZW1lbnQsIHRoZXkgYm90aCBhcmUgaW5jbHVkZWQgaW4gdGhlIGludGVydmFsLlxuICAgKiBbc3RhcnQsIGVuZF1cbiAgICovXG4gIGV4cG9ydCB0eXBlIEVudGl0eVJhbmdlID0gcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXVxuXG4gIGV4cG9ydCBjb25zdCBNQVhfRU5USVRJRVMgPSAweGZmZmZmZmZmXG4gIGV4cG9ydCBjb25zdCBEWU5BTUlDX0VOVElUSUVTX1NUQVJUX0FUID0gMTAwZTNcbiAgZXhwb3J0IGNvbnN0IFJFU0VSVkVEX1NUQVRJQ19FTlRJVElFUyA9IDUxMlxuXG4gIGV4cG9ydCBjb25zdCBSRVNFUlZFRF9FTlRJVElFU19SQU5HRTogRW50aXR5UmFuZ2UgPSBbXG4gICAgMCxcbiAgICBSRVNFUlZFRF9TVEFUSUNfRU5USVRJRVMgLSAxXG4gIF1cblxuICBleHBvcnQgY29uc3QgU1RBVElDX0VOVElUSUVTX1JBTkdFOiBFbnRpdHlSYW5nZSA9IFtcbiAgICBSRVNFUlZFRF9TVEFUSUNfRU5USVRJRVMsXG4gICAgRFlOQU1JQ19FTlRJVElFU19TVEFSVF9BVCAtIDFcbiAgXVxuXG4gIGV4cG9ydCBjb25zdCBEWU5BTUlDX0VOVElUSUVTX1JBTkdFOiBFbnRpdHlSYW5nZSA9IFtcbiAgICBEWU5BTUlDX0VOVElUSUVTX1NUQVJUX0FULFxuICAgIE1BWF9FTlRJVElFU1xuICBdXG5cbiAgZnVuY3Rpb24gaXNJblJhbmdlKGVudGl0eTogRW50aXR5LCByYW5nZTogRW50aXR5UmFuZ2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZW50aXR5ID49IHJhbmdlWzBdICYmIGVudGl0eSA8PSByYW5nZVsxXVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzRHluYW1pY0VudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIHJldHVybiBpc0luUmFuZ2UoZW50aXR5LCBEWU5BTUlDX0VOVElUSUVTX1JBTkdFKVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzU3RhdGljRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgcmV0dXJuIGlzSW5SYW5nZShlbnRpdHksIFNUQVRJQ19FTlRJVElFU19SQU5HRSlcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1Jlc2VydmVkRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgcmV0dXJuIGlzSW5SYW5nZShlbnRpdHksIFJFU0VSVkVEX0VOVElUSUVTX1JBTkdFKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVudGl0eVV0aWxzXG4iLCJpbXBvcnQgeyBFbnRpdHlVdGlscyB9IGZyb20gJy4vZW50aXR5LXV0aWxzJ1xuXG5kZWNsYXJlIGNvbnN0IGVudGl0eVN5bWJvbDogdW5pcXVlIHN5bWJvbFxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eSA9IG51bWJlciAmIHsgW2VudGl0eVN5bWJvbF06IHRydWUgfVxuXG5leHBvcnQgZnVuY3Rpb24gRW50aXR5Q29udGFpbmVyKCkge1xuICBjb25zdCBzdGF0aWNFbnRpdHkgPSBFbnRpdHkoRW50aXR5VXRpbHMuU1RBVElDX0VOVElUSUVTX1JBTkdFKVxuICBjb25zdCBkeW5hbWljRW50aXR5ID0gRW50aXR5KEVudGl0eVV0aWxzLkRZTkFNSUNfRU5USVRJRVNfUkFOR0UpXG4gIHJldHVybiB7XG4gICAgZ2VuZXJhdGVFbnRpdHkoZHluYW1pYzogYm9vbGVhbiA9IGZhbHNlKTogRW50aXR5IHtcbiAgICAgIGlmIChkeW5hbWljKSB7XG4gICAgICAgIHJldHVybiBkeW5hbWljRW50aXR5LmdlbmVyYXRlRW50aXR5KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdGF0aWNFbnRpdHkuZ2VuZXJhdGVFbnRpdHkoKVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzdGF0aWNFbnRpdHkucmVtb3ZlRW50aXR5KGVudGl0eSkgfHwgZHluYW1pY0VudGl0eS5yZW1vdmVFbnRpdHkoZW50aXR5KVxuICAgICAgKVxuICAgIH0sXG4gICAgaXNFbnRpdHlFeGlzdHMoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIEVudGl0eVV0aWxzLmlzUmVzZXJ2ZWRFbnRpdHkoZW50aXR5KSB8fFxuICAgICAgICBzdGF0aWNFbnRpdHkuZ2V0RXhpc3RpbmdFbnRpdGllcygpLmhhcyhlbnRpdHkpIHx8XG4gICAgICAgIGR5bmFtaWNFbnRpdHkuZ2V0RXhpc3RpbmdFbnRpdGllcygpLmhhcyhlbnRpdHkpXG4gICAgICApXG4gICAgfSxcbiAgICBnZXRFeGlzdGluZ0VudGl0aWVzKCk6IFNldDxFbnRpdHk+IHtcbiAgICAgIHJldHVybiBuZXcgU2V0KFtcbiAgICAgICAgLi4uc3RhdGljRW50aXR5LmdldEV4aXN0aW5nRW50aXRpZXMoKSxcbiAgICAgICAgLi4uZHluYW1pY0VudGl0eS5nZXRFeGlzdGluZ0VudGl0aWVzKClcbiAgICAgIF0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIEVudGl0eShyYW5nZTogRW50aXR5VXRpbHMuRW50aXR5UmFuZ2UpIHtcbiAgZnVuY3Rpb24gY3JlYXRlRW50aXR5KGVudGl0eTogbnVtYmVyKTogRW50aXR5IHtcbiAgICByZXR1cm4gZW50aXR5IGFzIEVudGl0eVxuICB9XG5cbiAgbGV0IGVudGl0eUNvdW50ZXIgPSByYW5nZVswXVxuICBjb25zdCB1c2VkRW50aXRpZXM6IFNldDxFbnRpdHk+ID0gbmV3IFNldCgpXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVFbnRpdHkoKTogRW50aXR5IHtcbiAgICBpZiAoZW50aXR5Q291bnRlciA+PSByYW5nZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSXQgZmFpbHMgdHJ5aW5nIHRvIGdlbmVyYXRlIGFuIGVudGl0eSBvdXQgb2YgcmFuZ2UgWyR7cmFuZ2VbMF19LCAke3JhbmdlWzFdfV0uYFxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eSA9IGNyZWF0ZUVudGl0eShlbnRpdHlDb3VudGVyKVxuICAgIGVudGl0eUNvdW50ZXIrK1xuXG4gICAgdXNlZEVudGl0aWVzLmFkZChlbnRpdHkpXG4gICAgcmV0dXJuIGVudGl0eVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgcmV0dXJuIHVzZWRFbnRpdGllcy5kZWxldGUoZW50aXR5KVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBnZXRFeGlzdGluZ0VudGl0aWVzKCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQodXNlZEVudGl0aWVzKVxuICAgIH0sXG4gICAgZ2VuZXJhdGVFbnRpdHksXG4gICAgcmVtb3ZlRW50aXR5XG4gIH1cbn1cbiIsIi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBVcGRhdGUgPSAoZHQ6IG51bWJlcikgPT4gdm9pZFxuXG5leHBvcnQgY29uc3QgU1lTVEVNU19SRUdVTEFSX1BSSU9SSVRZID0gMTAwZTNcblxudHlwZSBTeXN0ZW1JdGVtID0ge1xuICBmbjogVXBkYXRlXG4gIHByaW9yaXR5OiBudW1iZXJcbiAgbmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3lzdGVtQ29udGFpbmVyKCkge1xuICBjb25zdCBzeXN0ZW1zOiBTeXN0ZW1JdGVtW10gPSBbXVxuXG4gIGZ1bmN0aW9uIHNvcnQoKSB7XG4gICAgc3lzdGVtcy5zb3J0KChhLCBiKSA9PiBiLnByaW9yaXR5IC0gYS5wcmlvcml0eSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZChmbjogVXBkYXRlLCBwcmlvcml0eTogbnVtYmVyLCBuYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHN5c3RlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5mbiA9PT0gZm4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbSBhbHJlYWR5IGFkZGVkJylcbiAgICB9IGVsc2UgaWYgKG5hbWUgJiYgc3lzdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbSBuYW1lIGFscmVhZHkgdXNlZCcpXG4gICAgfVxuXG4gICAgc3lzdGVtcy5wdXNoKHtcbiAgICAgIGZuLFxuICAgICAgcHJpb3JpdHksXG4gICAgICBuYW1lXG4gICAgfSlcbiAgICBzb3J0KClcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZShzZWxlY3Rvcjogc3RyaW5nIHwgVXBkYXRlKSB7XG4gICAgbGV0IGluZGV4ID0gLTFcblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbmRleCA9IHN5c3RlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHNlbGVjdG9yKVxuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IHN5c3RlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmZuID09PSBzZWxlY3RvcilcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBzeXN0ZW1zLnNwbGljZShpbmRleCwgMSlcbiAgICBzb3J0KClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhZGQsXG4gICAgcmVtb3ZlLFxuICAgIGdldFN5c3RlbXMoKSB7XG4gICAgICByZXR1cm4gc3lzdGVtc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgZGVmaW5lU2RrQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBTY2hlbWFzIH0gZnJvbSAnLi4vc2NoZW1hcydcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBSZXN1bHQsIFNwZWMgfSBmcm9tICcuLi9zY2hlbWFzL01hcCdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBjcmR0U2NlbmVTeXN0ZW0gfSBmcm9tICcuLi9zeXN0ZW1zL2NyZHQnXG5pbXBvcnQge1xuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBDb21wb25lbnRUeXBlLFxuICBkZWZpbmVDb21wb25lbnQgYXMgZGVmQ29tcG9uZW50XG59IGZyb20gJy4vY29tcG9uZW50J1xuaW1wb3J0IHsgRW50aXR5LCBFbnRpdHlDb250YWluZXIgfSBmcm9tICcuL2VudGl0eSdcbmltcG9ydCB7IFN5c3RlbUNvbnRhaW5lciwgU1lTVEVNU19SRUdVTEFSX1BSSU9SSVRZLCBVcGRhdGUgfSBmcm9tICcuL3N5c3RlbXMnXG5pbXBvcnQgdHlwZSB7IElFbmdpbmVQYXJhbXMgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgSUVuZ2luZSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBSZWFkb25seUNvbXBvbmVudFNjaGVtYSB9IGZyb20gJy4vcmVhZG9ubHknXG5cbmV4cG9ydCAqIGZyb20gJy4vcmVhZG9ubHknXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJ1xuZXhwb3J0IHsgQ29tcG9uZW50VHlwZSwgRW50aXR5LCBCeXRlQnVmZmVyLCBDb21wb25lbnREZWZpbml0aW9uIH1cblxuZnVuY3Rpb24gcHJlRW5naW5lKCkge1xuICBjb25zdCBlbnRpdHlDb250YWluZXIgPSBFbnRpdHlDb250YWluZXIoKVxuICBjb25zdCBjb21wb25lbnRzRGVmaW5pdGlvbiA9IG5ldyBNYXA8bnVtYmVyLCBDb21wb25lbnREZWZpbml0aW9uPGFueT4+KClcbiAgLy8gVE9ETzogZmluZCBhIHdheSB0byBtYWtlIHRoaXMgd29yay5cbiAgLy8gTWF5YmUgYSBwcm94eS9jYWxsYmFjayB0byBiZSB1cC10by1kYXRlXG4gIGNvbnN0IGVudGl0aWVzQ29tcG9uZW50ID0gbmV3IE1hcDxcbiAgICBudW1iZXIsXG4gICAgU2V0PENvbXBvbmVudERlZmluaXRpb248YW55PlsnX2lkJ10+XG4gID4oKVxuICBjb25zdCBzeXN0ZW1zID0gU3lzdGVtQ29udGFpbmVyKClcblxuICBmdW5jdGlvbiBhZGRTeXN0ZW0oXG4gICAgZm46IFVwZGF0ZSxcbiAgICBwcmlvcml0eTogbnVtYmVyID0gU1lTVEVNU19SRUdVTEFSX1BSSU9SSVRZLFxuICAgIG5hbWU/OiBzdHJpbmdcbiAgKSB7XG4gICAgc3lzdGVtcy5hZGQoZm4sIHByaW9yaXR5LCBuYW1lKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlU3lzdGVtKHNlbGVjdG9yOiBzdHJpbmcgfCBVcGRhdGUpIHtcbiAgICByZXR1cm4gc3lzdGVtcy5yZW1vdmUoc2VsZWN0b3IpXG4gIH1cblxuICBmdW5jdGlvbiBhZGRFbnRpdHkoZHluYW1pYzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgLy8gZW50aXRpZXNDb21wbm9uZW50LnNldChlbnRpdHksIG5ldyBTZXQoKSlcbiAgICBjb25zdCBlbnRpdHkgPSBlbnRpdHlDb250YWluZXIuZ2VuZXJhdGVFbnRpdHkoZHluYW1pYylcbiAgICByZXR1cm4gZW50aXR5XG4gIH1cblxuICBmdW5jdGlvbiBhZGREeW5hbWljRW50aXR5KCkge1xuICAgIHJldHVybiBhZGRFbnRpdHkodHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUVudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIGZvciAoY29uc3QgWywgY29tcG9uZW50XSBvZiBjb21wb25lbnRzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKGNvbXBvbmVudC5oYXMoZW50aXR5KSkge1xuICAgICAgICBjb21wb25lbnQuZGVsZXRlRnJvbShlbnRpdHkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eUNvbnRhaW5lci5yZW1vdmVFbnRpdHkoZW50aXR5KVxuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYTxcbiAgICBUIGV4dGVuZHMgSVNjaGVtYSxcbiAgICBDb25zdHJ1Y3RvclR5cGUgPSBDb21wb25lbnRUeXBlPFQ+XG4gID4oXG4gICAgc3BlYzogVCxcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGNvbnN0cnVjdG9yRGVmYXVsdD86IENvbnN0cnVjdG9yVHlwZVxuICApOiBDb21wb25lbnREZWZpbml0aW9uPFQsIENvbnN0cnVjdG9yVHlwZT4ge1xuICAgIGlmIChjb21wb25lbnRzRGVmaW5pdGlvbi5nZXQoY29tcG9uZW50SWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCAke2NvbXBvbmVudElkfSBhbHJlYWR5IGRlY2xhcmVkYClcbiAgICB9XG4gICAgY29uc3QgbmV3Q29tcG9uZW50ID0gZGVmQ29tcG9uZW50PFQsIENvbnN0cnVjdG9yVHlwZT4oXG4gICAgICBjb21wb25lbnRJZCxcbiAgICAgIHNwZWMsXG4gICAgICBjb25zdHJ1Y3RvckRlZmF1bHRcbiAgICApXG4gICAgY29tcG9uZW50c0RlZmluaXRpb24uc2V0KGNvbXBvbmVudElkLCBuZXdDb21wb25lbnQpXG4gICAgcmV0dXJuIG5ld0NvbXBvbmVudFxuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50PFxuICAgIFQgZXh0ZW5kcyBTcGVjLFxuICAgIENvbnN0cnVjdG9yVHlwZSA9IFBhcnRpYWw8UmVzdWx0PFQ+PlxuICA+KFxuICAgIHNwZWM6IFQsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBjb25zdHJ1Y3RvckRlZmF1bHQ/OiBDb25zdHJ1Y3RvclR5cGVcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbjxJU2NoZW1hPFJlc3VsdDxUPj4sIENvbnN0cnVjdG9yVHlwZT4ge1xuICAgIHJldHVybiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFxuICAgICAgU2NoZW1hcy5NYXAoc3BlYyksXG4gICAgICBjb21wb25lbnRJZCxcbiAgICAgIGNvbnN0cnVjdG9yRGVmYXVsdFxuICAgIClcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbXBvbmVudDxUIGV4dGVuZHMgSVNjaGVtYT4oXG4gICAgY29tcG9uZW50SWQ6IG51bWJlclxuICApOiBDb21wb25lbnREZWZpbml0aW9uPFQ+IHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBjb21wb25lbnRzRGVmaW5pdGlvbi5nZXQoY29tcG9uZW50SWQpXG4gICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvbXBvbmVudCBub3QgZm91bmQuIFlvdSBuZWVkIHRvIGRlY2xhcmUgdGhlIGNvbXBvbmVudHMgYXQgdGhlIGJlZ2lubmlnIG9mIHRoZSBlbmdpbmUgZGVjbGFyYXRpb24nXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uKiBnZXRFbnRpdGllc1dpdGg8XG4gICAgVCBleHRlbmRzIFtDb21wb25lbnREZWZpbml0aW9uLCAuLi5Db21wb25lbnREZWZpbml0aW9uW11dXG4gID4oLi4uY29tcG9uZW50czogVCk6IEl0ZXJhYmxlPFtFbnRpdHksIC4uLlJlYWRvbmx5Q29tcG9uZW50U2NoZW1hPFQ+XT4ge1xuICAgIGZvciAoY29uc3QgW2VudGl0eSwgLi4uZ3JvdXBDb21wXSBvZiBnZXRDb21wb25lbnREZWZHcm91cCguLi5jb21wb25lbnRzKSkge1xuICAgICAgeWllbGQgW2VudGl0eSwgLi4uZ3JvdXBDb21wLm1hcCgoYykgPT4gYy5nZXQoZW50aXR5KSldIGFzIFtcbiAgICAgICAgRW50aXR5LFxuICAgICAgICAuLi5SZWFkb25seUNvbXBvbmVudFNjaGVtYTxUPlxuICAgICAgXVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uKiBnZXRDb21wb25lbnREZWZHcm91cDxUIGV4dGVuZHMgQ29tcG9uZW50RGVmaW5pdGlvbltdPihcbiAgICAuLi5hcmdzOiBUXG4gICk6IEl0ZXJhYmxlPFtFbnRpdHksIC4uLlRdPiB7XG4gICAgY29uc3QgW2ZpcnN0Q29tcG9uZW50RGVmLCAuLi5jb21wb25lbnREZWZpbml0aW9uc10gPSBhcmdzXG4gICAgZm9yIChjb25zdCBbZW50aXR5XSBvZiBmaXJzdENvbXBvbmVudERlZi5pdGVyYXRvcigpKSB7XG4gICAgICBsZXQgbWF0Y2hlcyA9IHRydWVcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50RGVmIG9mIGNvbXBvbmVudERlZmluaXRpb25zKSB7XG4gICAgICAgIGlmICghY29tcG9uZW50RGVmLmhhcyhlbnRpdHkpKSB7XG4gICAgICAgICAgbWF0Y2hlcyA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICB5aWVsZCBbZW50aXR5LCAuLi5hcmdzXVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN5c3RlbXMoKSB7XG4gICAgcmV0dXJuIHN5c3RlbXMuZ2V0U3lzdGVtcygpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVDb21wb25lbnREZWZpbml0aW9uKGNvbXBvbmVudElkOiBudW1iZXIpIHtcbiAgICBjb21wb25lbnRzRGVmaW5pdGlvbi5kZWxldGUoY29tcG9uZW50SWQpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVudGl0aWVzQ29tcG9uZW50LFxuICAgIGNvbXBvbmVudHNEZWZpbml0aW9uLFxuICAgIGFkZEVudGl0eSxcbiAgICBhZGREeW5hbWljRW50aXR5LFxuICAgIHJlbW92ZUVudGl0eSxcbiAgICBhZGRTeXN0ZW0sXG4gICAgZ2V0U3lzdGVtcyxcbiAgICByZW1vdmVTeXN0ZW0sXG4gICAgZGVmaW5lQ29tcG9uZW50LFxuICAgIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEsXG4gICAgZ2V0RW50aXRpZXNXaXRoLFxuICAgIGdldENvbXBvbmVudCxcbiAgICByZW1vdmVDb21wb25lbnREZWZpbml0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFByZUVuZ2luZSA9IFJldHVyblR5cGU8dHlwZW9mIHByZUVuZ2luZT5cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbmdpbmUoeyB0cmFuc3BvcnRzIH06IElFbmdpbmVQYXJhbXMgPSB7fSk6IElFbmdpbmUge1xuICBjb25zdCBlbmdpbmUgPSBwcmVFbmdpbmUoKVxuICBjb25zdCBjcmR0U3lzdGVtID0gY3JkdFNjZW5lU3lzdGVtKHsgZW5naW5lLCB0cmFuc3BvcnRzOiB0cmFuc3BvcnRzIHx8IFtdIH0pXG4gIGNvbnN0IGJhc2VDb21wb25lbnRzID0gZGVmaW5lU2RrQ29tcG9uZW50cyhlbmdpbmUpXG5cbiAgZnVuY3Rpb24gdXBkYXRlKGR0OiBudW1iZXIpIHtcbiAgICBjcmR0U3lzdGVtLnJlY2VpdmVNZXNzYWdlcygpXG5cbiAgICBmb3IgKGNvbnN0IHN5c3RlbSBvZiBlbmdpbmUuZ2V0U3lzdGVtcygpKSB7XG4gICAgICBzeXN0ZW0uZm4oZHQpXG4gICAgfVxuXG4gICAgLy8gU2VsZWN0ZWQgY29tcG9uZW50cyB0aGF0IG9ubHkgZXhpc3Qgb25lIGZyYW1lXG4gICAgLy8gIHRoZW4sIHRoZXkgYXJlIGRlbGV0ZWQgYnV0IHRoZWlyIGNyZHQgc3RhdGUga2VlcHNcbiAgICBjb25zdCByZW1vdmVTZWxlY3RlZENvbXBvbmVudHMgPSBbXG4gICAgICBiYXNlQ29tcG9uZW50cy5PblBvaW50ZXJEb3duUmVzdWx0LFxuICAgICAgYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyVXBSZXN1bHRcbiAgICBdXG4gICAgY29uc3QgZXhjbHVkZUNvbXBvbmVudElkcyA9IHJlbW92ZVNlbGVjdGVkQ29tcG9uZW50cy5tYXAoKGl0ZW0pID0+IGl0ZW0uX2lkKVxuICAgIGZvciAoY29uc3QgY29tcG9uZW50RGVmIG9mIHJlbW92ZVNlbGVjdGVkQ29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbZW50aXR5XSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKGNvbXBvbmVudERlZikpIHtcbiAgICAgICAgY29tcG9uZW50RGVmLmRlbGV0ZUZyb20oZW50aXR5KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFBlcmYgdGlwXG4gICAgLy8gU2hvdWxkIHdlIGFkZCBzb21lIGRpcnR5SXRlcmF0b3JTZXQgYXQgZW5naW5lIGxldmVsIHNvIHdlIGRvbnQgaGF2ZVxuICAgIC8vIHRvIGl0ZXJhdGUgYWxsIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbnMgdG8gZ2V0IHRoZSBkaXJ0eSBvbmVzID9cbiAgICBjb25zdCBkaXJ0eVNldCA9IG5ldyBNYXA8RW50aXR5LCBTZXQ8bnVtYmVyPj4oKVxuICAgIGZvciAoY29uc3QgW2NvbXBvbmVudElkLCBkZWZpbml0aW9uXSBvZiBlbmdpbmUuY29tcG9uZW50c0RlZmluaXRpb24pIHtcbiAgICAgIGlmIChleGNsdWRlQ29tcG9uZW50SWRzLmluY2x1ZGVzKGNvbXBvbmVudElkKSkgY29udGludWVcblxuICAgICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZGVmaW5pdGlvbi5kaXJ0eUl0ZXJhdG9yKCkpIHtcbiAgICAgICAgaWYgKCFkaXJ0eVNldC5oYXMoZW50aXR5KSkge1xuICAgICAgICAgIGRpcnR5U2V0LnNldChlbnRpdHksIG5ldyBTZXQoKSlcbiAgICAgICAgfVxuICAgICAgICBkaXJ0eVNldC5nZXQoZW50aXR5KSEuYWRkKGNvbXBvbmVudElkKVxuICAgICAgfVxuICAgIH1cbiAgICBjcmR0U3lzdGVtLmNyZWF0ZU1lc3NhZ2VzKGRpcnR5U2V0KVxuXG4gICAgZm9yIChjb25zdCBbX2NvbXBvbmVudElkLCBkZWZpbml0aW9uXSBvZiBlbmdpbmUuY29tcG9uZW50c0RlZmluaXRpb24pIHtcbiAgICAgIGRlZmluaXRpb24uY2xlYXJEaXJ0eSgpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRFbnRpdHk6IGVuZ2luZS5hZGRFbnRpdHksXG4gICAgYWRkRHluYW1pY0VudGl0eTogZW5naW5lLmFkZER5bmFtaWNFbnRpdHksXG4gICAgcmVtb3ZlRW50aXR5OiBlbmdpbmUucmVtb3ZlRW50aXR5LFxuICAgIGFkZFN5c3RlbTogZW5naW5lLmFkZFN5c3RlbSxcbiAgICByZW1vdmVTeXN0ZW06IGVuZ2luZS5yZW1vdmVTeXN0ZW0sXG4gICAgZGVmaW5lQ29tcG9uZW50OiBlbmdpbmUuZGVmaW5lQ29tcG9uZW50LFxuICAgIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWE6IGVuZ2luZS5kZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hLFxuICAgIGdldEVudGl0aWVzV2l0aDogZW5naW5lLmdldEVudGl0aWVzV2l0aCxcbiAgICBnZXRDb21wb25lbnQ6IGVuZ2luZS5nZXRDb21wb25lbnQsXG4gICAgcmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvbjogZW5naW5lLnJlbW92ZUNvbXBvbmVudERlZmluaXRpb24sXG4gICAgdXBkYXRlLFxuICAgIGJhc2VDb21wb25lbnRzXG4gIH1cbn1cbiIsIi8qKiBAcHVibGljICovXG5leHBvcnQgZW51bSBFQ1NDb21wb25lbnRJRHMge1xuXHRUcmFuc2Zvcm0gPSAxLFxuXHRBbmltYXRvciA9IDEwNDIsXG5cdEF1ZGlvU291cmNlID0gMTAyMCxcblx0QXZhdGFyQXR0YWNoID0gMTA3Myxcblx0QXZhdGFyTW9kaWZpZXJBcmVhID0gMTA3MCxcblx0QXZhdGFyU2hhcGUgPSAxMDgwLFxuXHRCaWxsYm9hcmQgPSAxMDkwLFxuXHRCb3hTaGFwZSA9IDEwMTMsXG5cdENhbWVyYU1vZGUgPSAxMDcyLFxuXHRDYW1lcmFNb2RlQXJlYSA9IDEwNzEsXG5cdEN5bGluZGVyU2hhcGUgPSAxMDE2LFxuXHRHTFRGU2hhcGUgPSAxMDQxLFxuXHRNYXRlcmlhbCA9IDEwMTcsXG5cdE1lc2hDb2xsaWRlciA9IDEwMTksXG5cdE1lc2hSZW5kZXJlciA9IDEwMTgsXG5cdE5GVFNoYXBlID0gMTA0MCxcblx0T25Qb2ludGVyRG93biA9IDEwNjAsXG5cdE9uUG9pbnRlckRvd25SZXN1bHQgPSAxMDY2LFxuXHRPblBvaW50ZXJVcCA9IDEwNjEsXG5cdE9uUG9pbnRlclVwUmVzdWx0ID0gMTA2NSxcblx0UGxhbmVTaGFwZSA9IDEwMTQsXG5cdFBvaW50ZXJMb2NrID0gMTA3NCxcblx0U3BoZXJlU2hhcGUgPSAxMDE1LFxuXHRUZXh0U2hhcGUgPSAxMDMwLFxuXHRVaVRleHQgPSAxMDUyLFxuXHRWaXNpYmlsaXR5Q29tcG9uZW50ID0gMTA4MSxcbn1cbiIsImltcG9ydCB7IFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBFQ1NDb21wb25lbnRJRHMgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2dlbmVyYXRlZC9pZHMuZ2VuJ1xuXG5jb25zdCBjb21wb25lbnRJZHMgPSBPYmplY3QudmFsdWVzKEVDU0NvbXBvbmVudElEcylcbiAgLmZpbHRlcigoYSkgPT4gdHlwZW9mIGEgPT09ICdudW1iZXInKVxuICAubWFwKE51bWJlcilcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gIGlmICh0eXBlb2YgZGNsID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCBuZXcgcnBjXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBjcmVhdGUgY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQgd2l0aG91dCBnbG9iYWwgZGNsIG9iamVjdCdcbiAgICApXG4gIH1cblxuICBjb25zdCB0eXBlID0gJ3JlbmRlcmVyJ1xuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgc2VuZChtZXNzYWdlOiBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgICAvLyBUT0RPOiByZXBsYWNlIHdpdGggbmV3IHJwY1xuICAgICAgZGNsXG4gICAgICAgIC5jYWxsUnBjKCdAZGVjZW50cmFsYW5kL0V4cGVyaW1lbnRhbEFQSScsICdzZW5kVG9SZW5kZXJlcicsIFtcbiAgICAgICAgICB7IGRhdGE6IG5ldyBVaW50OEFycmF5KG1lc3NhZ2UpIH1cbiAgICAgICAgXSlcbiAgICAgICAgLmNhdGNoKGRjbC5lcnJvcilcbiAgICB9LFxuICAgIGZpbHRlcihtZXNzYWdlOiBUcmFuc3BvcnRNZXNzYWdlKTogYm9vbGVhbiB7XG4gICAgICAvLyBFY2hvIG1lc3NhZ2UsIGlnbm9yZSB0aGVtXG4gICAgICBpZiAobWVzc2FnZS50cmFuc3BvcnRUeXBlID09PSB0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHNlbmQgcmVuZGVyZXIgY29tcG9uZW50cyAoUHJvdG8gR2VuZXJhdGVkKVxuICAgICAgaWYgKCFjb21wb25lbnRJZHMuaW5jbHVkZXMobWVzc2FnZS5jb21wb25lbnRJZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIW1lc3NhZ2VcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXR3b3JrVHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gIC8vIGNvbnN0IHJwYyA9IG5ldyBScGNUcmFuc3BvcnQoKVxuICBmdW5jdGlvbiBzZW5kKC4uLl9hcmdzOiBhbnlbXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdOZXR3b3JrTWVzc2FnZSBTZW50OiAnLCAuLi5hcmdzKVxuICB9XG5cbiAgY29uc3QgdHlwZSA9ICduZXR3b3JrLXRyYW5zcG9ydCdcbiAgcmV0dXJuIHtcbiAgICBzZW5kLFxuICAgIHR5cGUsXG4gICAgZmlsdGVyKG1lc3NhZ2U6IFRyYW5zcG9ydE1lc3NhZ2UpOiBib29sZWFuIHtcbiAgICAgIC8vIEVjaG8gbWVzc2FnZSwgaWdub3JlIHRoZW1cbiAgICAgIGlmIChtZXNzYWdlLnRyYW5zcG9ydFR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IFN0YXRpYyBlbnRpdGllcyAmIE5ldHdvcmsgY29tcG9uZW50c1xuXG4gICAgICByZXR1cm4gISFtZXNzYWdlIC8vIHZhbGlkQ29tcG9uZW50cy5pbmNsdWRlcyhjb21wb25lbnRJZClcbiAgICB9XG4gIH1cbn1cbiIsIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiQGRjbC9wb3NpeFwiIC8+XG5cbi8qKlxuICogQGFscGhhICogVGhpcyBmaWxlIGluaXRpYWxpemF0aW9uIGlzIGFuIGFscGhhIG9uZS4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgb2xkLWVjc1xuICogaW5pdCBhbmQgaXQnbGwgYmUgY2hhbmdpbmcuXG4gKi9cblxuaW1wb3J0IHsgRW5naW5lIH0gZnJvbSAnLi4vZW5naW5lJ1xuaW1wb3J0IHsgY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQgfSBmcm9tICcuLi9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydCdcbmltcG9ydCB7IGNyZWF0ZU5ldHdvcmtUcmFuc3BvcnQgfSBmcm9tICcuLi9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9uZXR3b3JrVHJhbnNwb3J0J1xuXG5jb25zdCByZW5kZXJlclRyYW5zcG9ydCA9IGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0KClcbmV4cG9ydCBjb25zdCBlbmdpbmUgPSBFbmdpbmUoe1xuICB0cmFuc3BvcnRzOiBbcmVuZGVyZXJUcmFuc3BvcnQsIGNyZWF0ZU5ldHdvcmtUcmFuc3BvcnQoKV1cbn0pXG5cbmlmICh0eXBlb2YgZGNsICE9PSAndW5kZWZpbmVkJykge1xuICBkY2wubG9hZE1vZHVsZSgnQGRlY2VudHJhbGFuZC9FeHBlcmltZW50YWxBUEknLCB7fSkuY2F0Y2goZGNsLmVycm9yKVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHB1bGxSZW5kZXJlck1lc3NhZ2VzKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZGNsLmNhbGxScGMoXG4gICAgICAnQGRlY2VudHJhbGFuZC9FeHBlcmltZW50YWxBUEknLFxuICAgICAgJ21lc3NhZ2VGcm9tUmVuZGVyZXInLFxuICAgICAgW11cbiAgICApXG5cbiAgICBpZiAocmVzcG9uc2UuZGF0YT8ubGVuZ3RoKSB7XG4gICAgICBpZiAocmVuZGVyZXJUcmFuc3BvcnQub25tZXNzYWdlKSB7XG4gICAgICAgIGZvciAoY29uc3QgYnl0ZUFycmF5IG9mIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICByZW5kZXJlclRyYW5zcG9ydC5vbm1lc3NhZ2UoYnl0ZUFycmF5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGNsLm9uVXBkYXRlKChkdDogbnVtYmVyKSA9PiB7XG4gICAgcHVsbFJlbmRlcmVyTWVzc2FnZXMoKVxuICAgICAgLmNhdGNoKGRjbC5lcnJvcilcbiAgICAgIC5maW5hbGx5KCgpID0+IGVuZ2luZS51cGRhdGUoZHQpKVxuICB9KVxufVxuXG5leHBvcnQgY29uc3QgbG9nID0gZGNsLmxvZ1xuZXhwb3J0IGNvbnN0IGVycm9yID0gZGNsLmVycm9yXG4iLCJpbXBvcnQgeyBlbmdpbmUgfSBmcm9tICcuLi8uLi9ydW50aW1lL2luaXRpYWxpemF0aW9uJ1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFRyYW5zZm9ybSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5UcmFuc2Zvcm1cbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQW5pbWF0b3IgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQW5pbWF0b3Jcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQXVkaW9Tb3VyY2UgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXVkaW9Tb3VyY2Vcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQXZhdGFyQXR0YWNoID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhckF0dGFjaFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBBdmF0YXJNb2RpZmllckFyZWEgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyTW9kaWZpZXJBcmVhXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhclNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhclNoYXBlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEJpbGxib2FyZCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5CaWxsYm9hcmRcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQm94U2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQm94U2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQ2FtZXJhTW9kZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5DYW1lcmFNb2RlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IENhbWVyYU1vZGVBcmVhID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkNhbWVyYU1vZGVBcmVhXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEN5bGluZGVyU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ3lsaW5kZXJTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBHTFRGU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuR0xURlNoYXBlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE1hdGVyaWFsID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk1hdGVyaWFsXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE1lc2hDb2xsaWRlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoQ29sbGlkZXJcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgTWVzaFJlbmRlcmVyID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk1lc2hSZW5kZXJlclxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBORlRTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5ORlRTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJEb3duID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlckRvd25cbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgT25Qb2ludGVyRG93blJlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJEb3duUmVzdWx0XG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwUmVzdWx0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwUmVzdWx0XG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFBsYW5lU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUGxhbmVTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBQb2ludGVyTG9jayA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5Qb2ludGVyTG9ja1xuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBTcGhlcmVTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5TcGhlcmVTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBUZXh0U2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVGV4dFNoYXBlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFVpVGV4dCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5VaVRleHRcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbXBvbmVudCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5WaXNpYmlsaXR5Q29tcG9uZW50XG4iLCJpbXBvcnQgeyBlbmdpbmUgfSBmcm9tICcuLi8uLi9ydW50aW1lL2luaXRpYWxpemF0aW9uJ1xuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBuYW1lc3BhY2UgQ29tcG9uZW50cyB7XG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBUcmFuc2Zvcm0gPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVHJhbnNmb3JtXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBbmltYXRvciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BbmltYXRvclxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQXVkaW9Tb3VyY2UgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXVkaW9Tb3VyY2Vcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEF2YXRhckF0dGFjaCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJBdHRhY2hcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEF2YXRhck1vZGlmaWVyQXJlYSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJNb2RpZmllckFyZWFcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEF2YXRhclNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhclNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBCaWxsYm9hcmQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQmlsbGJvYXJkXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBCb3hTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5Cb3hTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQ2FtZXJhTW9kZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5DYW1lcmFNb2RlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBDYW1lcmFNb2RlQXJlYSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5DYW1lcmFNb2RlQXJlYVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQ3lsaW5kZXJTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5DeWxpbmRlclNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBHTFRGU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuR0xURlNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBNYXRlcmlhbCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NYXRlcmlhbFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgTWVzaENvbGxpZGVyID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk1lc2hDb2xsaWRlclxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgTWVzaFJlbmRlcmVyID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk1lc2hSZW5kZXJlclxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgTkZUU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTkZUU2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd24gPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgT25Qb2ludGVyRG93blJlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJEb3duUmVzdWx0XG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBPblBvaW50ZXJVcCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJVcFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgT25Qb2ludGVyVXBSZXN1bHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyVXBSZXN1bHRcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IFBsYW5lU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUGxhbmVTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgUG9pbnRlckxvY2sgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUG9pbnRlckxvY2tcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IFNwaGVyZVNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlNwaGVyZVNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBUZXh0U2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVGV4dFNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBVaVRleHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVWlUZXh0XG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBWaXNpYmlsaXR5Q29tcG9uZW50ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlZpc2liaWxpdHlDb21wb25lbnRcbn1cbiJdLCJuYW1lcyI6WyJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJ0aGlzIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJnbG9iYWwiLCJfbTAiLCJDT01QT05FTlRfSUQiLCJnbG9iYWxUaGlzIiwiTG9uZyIsIkFuaW1hdG9yU2NoZW1hLkFuaW1hdG9yU2NoZW1hIiwiQW5pbWF0b3JTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQXVkaW9Tb3VyY2VTY2hlbWEuQXVkaW9Tb3VyY2VTY2hlbWEiLCJBdWRpb1NvdXJjZVNjaGVtYS5DT01QT05FTlRfSUQiLCJBdmF0YXJBdHRhY2hTY2hlbWEuQXZhdGFyQXR0YWNoU2NoZW1hIiwiQXZhdGFyQXR0YWNoU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYS5BdmF0YXJNb2RpZmllckFyZWFTY2hlbWEiLCJBdmF0YXJNb2RpZmllckFyZWFTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQXZhdGFyU2hhcGVTY2hlbWEuQXZhdGFyU2hhcGVTY2hlbWEiLCJBdmF0YXJTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQiLCJCaWxsYm9hcmRTY2hlbWEuQmlsbGJvYXJkU2NoZW1hIiwiQmlsbGJvYXJkU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkJveFNoYXBlU2NoZW1hLkJveFNoYXBlU2NoZW1hIiwiQm94U2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQ2FtZXJhTW9kZVNjaGVtYS5DYW1lcmFNb2RlU2NoZW1hIiwiQ2FtZXJhTW9kZVNjaGVtYS5DT01QT05FTlRfSUQiLCJDYW1lcmFNb2RlQXJlYVNjaGVtYS5DYW1lcmFNb2RlQXJlYVNjaGVtYSIsIkNhbWVyYU1vZGVBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkN5bGluZGVyU2hhcGVTY2hlbWEuQ3lsaW5kZXJTaGFwZVNjaGVtYSIsIkN5bGluZGVyU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiR0xURlNoYXBlU2NoZW1hLkdMVEZTaGFwZVNjaGVtYSIsIkdMVEZTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQiLCJNYXRlcmlhbFNjaGVtYS5NYXRlcmlhbFNjaGVtYSIsIk1hdGVyaWFsU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk1lc2hDb2xsaWRlclNjaGVtYS5NZXNoQ29sbGlkZXJTY2hlbWEiLCJNZXNoQ29sbGlkZXJTY2hlbWEuQ09NUE9ORU5UX0lEIiwiTWVzaFJlbmRlcmVyU2NoZW1hLk1lc2hSZW5kZXJlclNjaGVtYSIsIk1lc2hSZW5kZXJlclNjaGVtYS5DT01QT05FTlRfSUQiLCJORlRTaGFwZVNjaGVtYS5ORlRTaGFwZVNjaGVtYSIsIk5GVFNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk9uUG9pbnRlckRvd25TY2hlbWEuT25Qb2ludGVyRG93blNjaGVtYSIsIk9uUG9pbnRlckRvd25TY2hlbWEuQ09NUE9ORU5UX0lEIiwiT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYS5PblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hIiwiT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYS5DT01QT05FTlRfSUQiLCJPblBvaW50ZXJVcFNjaGVtYS5PblBvaW50ZXJVcFNjaGVtYSIsIk9uUG9pbnRlclVwU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk9uUG9pbnRlclVwUmVzdWx0U2NoZW1hLk9uUG9pbnRlclVwUmVzdWx0U2NoZW1hIiwiT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEuQ09NUE9ORU5UX0lEIiwiUGxhbmVTaGFwZVNjaGVtYS5QbGFuZVNoYXBlU2NoZW1hIiwiUGxhbmVTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQiLCJQb2ludGVyTG9ja1NjaGVtYS5Qb2ludGVyTG9ja1NjaGVtYSIsIlBvaW50ZXJMb2NrU2NoZW1hLkNPTVBPTkVOVF9JRCIsIlNwaGVyZVNoYXBlU2NoZW1hLlNwaGVyZVNoYXBlU2NoZW1hIiwiU3BoZXJlU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiVGV4dFNoYXBlU2NoZW1hLlRleHRTaGFwZVNjaGVtYSIsIlRleHRTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQiLCJVaVRleHRTY2hlbWEuVWlUZXh0U2NoZW1hIiwiVWlUZXh0U2NoZW1hLkNPTVBPTkVOVF9JRCIsIlZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEuVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYSIsIlZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEuQ09NUE9ORU5UX0lEIiwiU2NoZW1hcyIsImlJbnQ2NCIsIldpcmVNZXNzYWdlIiwiY3JkdFByb3RvY29sIiwiTWVzc2FnZSIsImRlZkNvbXBvbmVudCIsImRlZmluZUNvbXBvbmVudCIsIkNvbXBvbmVudHMi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QUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QyxVQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzVDLFVBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDNUMsVUFBUSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzdDO0NBQ0EsVUFBUSxPQUFPO0NBQ2YsY0FBWSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7Q0FDdkQsY0FBWSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7Q0FDdkQsY0FBWSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7Q0FDdkQsV0FBUyxDQUFDO1FBQ0w7Q0FDTCxNQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0NBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO09BQ0ksU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7V0FDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDL0IsU0FBUyxDQUFDLEtB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QUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDL0MsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2VBQ25GLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RjtDQUNULFVBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO0NBQ2pDLFVBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO0NBQ2pDLFVBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO0NBQ2pDO0NBQ0EsVUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDbkQsVUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDbkQsVUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDM0MsT0FBTyxHQUFHLENBQUM7UUFDZDtDQUNMLE1BQUksVUFBVSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7Q0FDekM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtDQUNqRTtDQUNBLFVBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztDQUN0QyxVQUFRLE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDbEMsVUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO1dBQzVCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7V0FDL0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztXQUM3QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQzlCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7V0FDL0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztXQUM3QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQ3RDLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvQyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0MsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9DLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUMxQztDQUNMLE1BQUksVUFBVSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO0NBQ3JFO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLFNBQVMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtDQUNyRCxVQUFRLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDL0I7V0FDUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ2xELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDbEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUMzRDtXQUNRLE1BQU0sS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1dBQzlCLElBQUksQ0FBQyxDQUFDO0NBQ2QsVUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Q0FDdkIsY0FBWSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJ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R0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQ2xELFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUNsRCxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDbEQsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdDO0NBQ0wsTUFBSSxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztDQUN2QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7Q0FDaEMsVUFBUSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDcEMsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7V0FDaEMsT0FBTyxNQUFNLENBQUM7UUFDakI7Q0FDTCxNQUFJLFVBQVUsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0NBQ25DO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO09BQ0ksU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7Q0FDN0MsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFD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QyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDekI7QUFDVDtVQUNRLFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7Q0FDcEQsYUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2NBQ2IsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FB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LEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtDQUNyQyxjQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksT0FBTyxDQUFDO0NBQzlILGNBQVksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztDQUM1QyxjQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDcEM7Q0FDVCxjQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM3RixVQUFRLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRTtlQUNWLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7ZUFDdkUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNUO1FBQ0o7T0FDRCxJQUFJLEtBQUssRUFBRTtD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O0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRTtDQUN0QixTQUFRLElBQUksQ0FBQyxFQUFFLFVBQVUsR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFO0NBQ3RCLE1BQUssQ0FBQztDQUNOLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxHQUFHO01BQzlDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO01BQzNCLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUM7Q0FDOUQsS0FBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLE1BQU0sQ0FBQyxDQUFDO01BQzFELE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxHQUFHO01BQzlDLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUMxQixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0NBQzlELEtBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxNQUFNLENBQUMsQ0FBQztNQUMxRCxPQUFPLElBQUksQ0FBQztDQUNoQixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLE1BQU0sR0FBRztDQUM5QyxLQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFO0NBQ3hCLFNBQVEsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztDQUNyRCxTQUFRLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztNQUM1QixPQUFPLEtBQUssS0FBSyxDQUFDO2FBQ1gsS0FBSyxLQUFLLENBQUM7ZUFDVCxLQUFLLEdBQUcsS0FBSztDQUMxQixnQkFBZSxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO0NBQ2xDLGdCQUFlLEtBQUssR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7ZUFDekIsS0FBSyxHQUFHLEtBQUs7Q0FDMUIsZ0JBQWUsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztDQUNsQyxnQkFBZSxLQUFLLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO0NBQ3RDLFlBQVcsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0dBQy9CLENBQUE7Ozs7Ozs7Ozs7R0N0TUQsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxTQUFTLEdBQUdBLGdCQUFBLEVBQWdDLENBQUM7QUFDbEQ7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLE1BQU0sR0FBR0MsYUFBQSxFQUE2QixDQUFDO0FBQzVDO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxZQUFZLEdBQUdDLG1CQUFBLEVBQW1DLENBQUM7QUFDeEQ7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLEtBQUssR0FBR0UsWUFBQSxFQUE0QixDQUFDO0FBQzFDO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxPQUFPLEdBQUdDLGNBQUEsRUFBOEIsQ0FBQztBQUM5QztDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHQyxXQUFBLEVBQTJCLENBQUM7QUFDeEM7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLElBQUksR0FBR0MsV0FBQSxFQUEyQixDQUFDO0FBQ3hDO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxRQUFRLEdBQUdDLGVBQUEsRUFBcUIsQ0FBQztBQUN0QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7R0FDQSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPQyxjQUFNLEtBQUssV0FBVztDQUNuRCx3QkFBc0JBLGNBQU07eUJBQ05BLGNBQU0sQ0FBQyxPQUFPO0NBQ3BDLHdCQUFzQkEsY0FBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRO3lCQUN2QkEsY0FBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEQ7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUlBLGNBQU07Q0FDbkMsZ0JBQWMsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU07Q0FDckQsZ0JBQWMsT0FBTyxJQUFJLE9BQU8sV0FBVyxJQUFJLElBQUk7Q0FDbkQsZ0JBQWNOLGNBQUksQ0FBQztBQUNuQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLDhCQUE4QixFQUFFLENBQUM7QUFDcEY7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsOEJBQThCLEVBQUUsQ0FBQztBQUNyRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNBLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsK0JBQStCLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRTtDQUMxRixNQUFJLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQztDQUN2RixHQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO09BQ3JDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLENBQUM7Q0FDaEUsR0FBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtDQUN6QyxNQUFJLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztDQUM5QyxHQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxLQUFLO0FBQ1Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7R0FDQSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7Q0FDdkMsTUFBSSxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDdEIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO0NBQ2pELFVBQVEsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO09BQzlHLE9BQU8sS0FBSyxDQUFDO0NBQ2pCLEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVc7Q0FDMUIsTUFBSSxJQUFJO1dBQ0EsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7Q0FDbkQ7V0FDUSxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLE1BQU0sOEJBQThCLElBQUksQ0FBQztRQUNoRixDQUFDLE9BQU8sQ0FBQyxFQUFFO0NBQ2hCO1dBQ1EsT0FBTyxJQUFJLENBQUM7UUFDZjtDQUNMLEdBQUMsR0FBRyxDQUFDO0FBQ0w7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekI7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNoQztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxTQUFTLENBQUMsV0FBVyxFQUFFO0NBQ2pEO0NBQ0EsTUFBSSxPQUFPLE9BQU8sV0FBVyxLQUFLLFFBQVE7YUFDaEMsSUFBSSxDQUFDLE1BQU07Q0FDckIsZ0JBQWMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztDQUNuRCxnQkFBYyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO2FBQy9CLElBQUksQ0FBQyxNQUFNO0NBQ3JCLGdCQUFjLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO2lCQUM5QixPQUFPLFVBQVUsS0FBSyxXQUFXO0NBQy9DLG9CQUFrQixXQUFXO0NBQzdCLG9CQUFrQixJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztDQUM5QyxHQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0dBQ0EsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLFVBQVUsS0FBSyxXQUFXLEdBQUcsVUFBVSw4QkFBOEIsS0FBSyxDQUFDO0FBQy9GO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxJQUFJLDhCQUE4QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sK0JBQStCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUk7Q0FDakgseUNBQXVDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtDQUN2RCxjQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDO0FBQ2pDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQztBQUN2QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsNENBQTRDLENBQUM7QUFDNUQ7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtDQUM3QyxNQUFJLE9BQU8sS0FBSzthQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUM1QyxZQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO0NBQ2pDLEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0dBQ0EsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO09BQ3RELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3hDLElBQUksSUFBSSxDQUFDLElBQUk7Q0FDakIsVUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztPQUMxRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsR0FBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtPQUMvQixLQUFLLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDakUsVUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxRQUFRO0NBQ25ELGNBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNwQyxPQUFPLEdBQUcsQ0FBQztJQUNkO0FBQ0Q7Q0FDQSxFQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUU7Q0FDckMsTUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRCxHQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNBLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRTtBQUN4QjtDQUNBLE1BQUksU0FBUyxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRTtBQUM5QztDQUNBLFVBQVEsSUFBSSxFQUFFLElBQUksWUFBWSxXQUFXLENBQUM7ZUFDOUIsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDeEQ7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxVQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4RjtDQUNBO1dBQ1EsSUFBSSxLQUFLLENBQUMsaUJBQWlCO2VBQ3ZCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7Q0FDdkQ7ZUFDWSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyRjtDQUNBLFVBQVEsSUFBSSxVQUFVO0NBQ3RCLGNBQVksS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvQjtBQUNMO0NBQ0EsTUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUN2RjtPQUNJLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0Y7T0FDSSxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsR0FBRztXQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7Q0FDL0MsT0FBSyxDQUFDO0FBQ047T0FDSSxPQUFPLFdBQVcsQ0FBQztJQUN0QjtBQUNEO0NBQ0EsRUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQy9DO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsUUFBUSxDQUFDLFVBQVUsRUFBRTtDQUNqRCxNQUFJLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztDQUN0QixNQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztXQUN0QyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksT0FBTyxXQUFXO1dBQ2QsS0FBSyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQzNFLGNBQVksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7Q0FDaEcsa0JBQWdCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLE9BQUssQ0FBQztDQUNOLEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxRQUFRLENBQUMsVUFBVSxFQUFFO0FBQ2pEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO09BQ0ksT0FBTyxTQUFTLElBQUksRUFBRTtDQUMxQixVQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUNsRCxjQUFZLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7bUJBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzNDLE9BQUssQ0FBQztDQUNOLEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7R0FDQSxJQUFJLENBQUMsYUFBYSxHQUFHO09BQ2pCLEtBQUssRUFBRSxNQUFNO09BQ2IsS0FBSyxFQUFFLE1BQU07T0FDYixLQUFLLEVBQUUsTUFBTTtPQUNiLElBQUksRUFBRSxJQUFJO0NBQ2QsR0FBQyxDQUFDO0FBQ0Y7Q0FDQTtHQUNBLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVztDQUM3QixNQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDN0I7T0FDSSxJQUFJLENBQUMsTUFBTSxFQUFFO1dBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0NBQzVELFVBQVEsT0FBTztRQUNWO0NBQ0w7Q0FDQTtDQUNBLE1BQUksSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUk7Q0FDdEU7Q0FDQSxVQUFRLFNBQVMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7ZUFDbEMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7Q0FDL0MsV0FBUyxDQUFDO0NBQ1YsTUFBSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLFdBQVc7Q0FDakQ7Q0FDQSxVQUFRLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO0NBQzFDLGNBQVksT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNwQyxXQUFTLENBQUM7SUFDVCxDQUFBOzs7Ozs7Ozs7OztDQ25hRCxDQUFjLE1BQUEsR0FBRyxNQUFNLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksUUFBUUgsZ0JBQUEsRUFBeUIsQ0FBQztBQUMxQztDQUNBLENBQUEsSUFBSSxZQUFZLENBQUM7QUFDakI7Q0FDQSxDQUFBLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRO0NBQzdCLEtBQUksTUFBTSxNQUFNLElBQUksQ0FBQyxNQUFNO0NBQzNCLEtBQUksSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ25CO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0dBQ2xCO0FBQ0Q7Q0FDQTtFQUNBLFNBQVMsSUFBSSxHQUFHLEVBQUU7QUFDbEI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsU0FBUyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ3ZCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM1QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDNUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztHQUM3QjtBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxNQUFNLEdBQUc7QUFDbEI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDakI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtB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LFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxXQUFXLEdBQUc7Q0FDakQsS0FBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDOUIsS0FBSSxPQUFPLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzFDLEVBQUMsQ0FBQztBQUNGO0NBQ0E7QUFDQTtDQUNBLENBQUEsU0FBUyxjQUFjLEdBQUc7Q0FDMUI7TUFDSSxJQUFJLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDbEMsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDVixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUU7Q0FDakMsU0FBUSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7Q0FDM0I7Y0FDWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztjQUNoRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRztrQkFDMUIsT0FBTyxJQUFJLENBQUM7V0FDbkI7Q0FDVDtVQUNRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDN0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztVQUM3RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRztjQUMxQixPQUFPLElBQUksQ0FBQztVQUNoQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2QsTUFBSyxNQUFNO0NBQ1gsU0FBUSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7Q0FDM0I7Q0FDQSxhQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRztDQUNwQyxpQkFBZ0IsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDNUM7Y0FDWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztjQUNoRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRztrQkFDMUIsT0FBTyxJQUFJLENBQUM7V0FDbkI7Q0FDVDtVQUNRLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDbEUsT0FBTyxJQUFJLENBQUM7T0FDZjtNQUNELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTtDQUNqQyxTQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtDQUMzQjtDQUNBLGFBQVksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHO2tCQUMxQixPQUFPLElBQUksQ0FBQztXQUNuQjtDQUNULE1BQUssTUFBTTtDQUNYLFNBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0NBQzNCO0NBQ0EsYUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUc7Q0FDcEMsaUJBQWdCLE1BQU0sZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVDO0NBQ0EsYUFBWSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Y0FDcEUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUc7a0JBQzFCLE9BQU8sSUFBSSxDQUFDO1dBQ25CO09BQ0o7Q0FDTDtDQUNBLEtBQUksTUFBTSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztHQUMxQztBQUNEO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxTQUFTLFNBQVMsR0FBRztDQUM3QyxLQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztDQUMvQixFQUFDLENBQUM7QUFDRjtDQUNBLENBQUEsU0FBUyxlQUFlLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtDQUNuQyxLQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN4QixhQUFZLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztDQUM3QixhQUFZLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRTtjQUNsQixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDckM7QUFDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLFlBQVksR0FBRztBQUNuRDtDQUNBO01BQ0ksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztDQUMvQixTQUFRLE1BQU0sZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QztDQUNBLEtBQUksT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3BELEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsYUFBYSxHQUFHO0FBQ3JEO0NBQ0E7TUFDSSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHO0NBQy9CLFNBQVEsTUFBTSxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDO0NBQ0EsS0FBSSxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3hELEVBQUMsQ0FBQztBQUNGO0NBQ0E7QUFDQTtDQUNBLENBQUEsU0FBUyxXQUFXLHFCQUFxQjtBQUN6QztDQUNBO01BQ0ksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztDQUMvQixTQUFRLE1BQU0sZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QztDQUNBLEtBQUksT0FBTyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUMzRztBQUNEO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLFVBQVUsR0FBRztBQUMvQztDQUNBO01BQ0ksSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRztDQUMvQixTQUFRLE1BQU0sZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QztDQUNBLEtBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDM0QsS0FBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztNQUNkLE9BQU8sS0FBSyxDQUFDO0NBQ2pCLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxXQUFXLEdBQUc7QUFDakQ7Q0FDQTtNQUNJLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUc7Q0FDL0IsU0FBUSxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkM7Q0FDQSxLQUFJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQzVELEtBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7TUFDZCxPQUFPLEtBQUssQ0FBQztDQUNqQixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLFVBQVUsR0FBRztDQUMvQyxLQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDOUIsU0FBUSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUc7Q0FDekIsU0FBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDbkM7Q0FDQTtDQUNBLEtBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUc7Q0FDdEIsU0FBUSxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUM7Q0FDQSxLQUFJLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO01BQ25CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1VBQ3ZCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3RDLE9BQU8sS0FBSyxLQUFLLEdBQUc7WUFDZCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztDQUNyQyxXQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2pELEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsV0FBVyxHQUFHO0NBQ2pELEtBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQzdCLEtBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQzdDLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRTtDQUM5QyxLQUFJLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO0NBQ3BDO1VBQ1EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRztDQUN4QyxhQUFZLE1BQU0sZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNoRCxTQUFRLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO0NBQzNCLE1BQUssTUFBTTtDQUNYLFNBQVEsR0FBRztDQUNYO0NBQ0EsYUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUc7Q0FDcEMsaUJBQWdCLE1BQU0sZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVDLFVBQVMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRTtPQUN4QztNQUNELE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLEVBQUU7Q0FDL0MsS0FBSSxRQUFRLFFBQVE7Q0FDcEIsU0FBUSxLQUFLLENBQUM7Q0FDZCxhQUFZLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUN4QixhQUFZLE1BQU07Q0FDbEIsU0FBUSxLQUFLLENBQUM7Q0FDZCxhQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekIsYUFBWSxNQUFNO0NBQ2xCLFNBQVEsS0FBSyxDQUFDO2NBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztDQUNyQyxhQUFZLE1BQU07Q0FDbEIsU0FBUSxLQUFLLENBQUM7Q0FDZCxhQUFZLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Q0FDekQsaUJBQWdCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7ZUFDM0I7Q0FDYixhQUFZLE1BQU07Q0FDbEIsU0FBUSxLQUFLLENBQUM7Q0FDZCxhQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDekIsYUFBWSxNQUFNO0FBQ2xCO0NBQ0E7VUFDUTtDQUNSLGFBQVksTUFBTSxLQUFLLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDL0U7TUFDRCxPQUFPLElBQUksQ0FBQztDQUNoQixFQUFDLENBQUM7QUFDRjtDQUNBLENBQUEsTUFBTSxDQUFDLFVBQVUsR0FBRyxTQUFTLGFBQWEsRUFBRTtNQUN4QyxZQUFZLEdBQUcsYUFBYSxDQUFDO0NBQ2pDLEtBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQztDQUM3QixLQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5QjtNQUNJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSw4QkFBOEIsVUFBVSxDQUFDO0NBQzFFLEtBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO0FBQ2pDO0NBQ0EsU0FBUSxLQUFLLEVBQUUsU0FBUyxVQUFVLEdBQUc7Q0FDckMsYUFBWSxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7V0FDL0M7QUFDVDtDQUNBLFNBQVEsTUFBTSxFQUFFLFNBQVMsV0FBVyxHQUFHO0NBQ3ZDLGFBQVksT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQzlDO0FBQ1Q7Q0FDQSxTQUFRLE1BQU0sRUFBRSxTQUFTLFdBQVcsR0FBRztDQUN2QyxhQUFZLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztXQUMxRDtBQUNUO0NBQ0EsU0FBUSxPQUFPLEVBQUUsU0FBUyxZQUFZLEdBQUc7Q0FDekMsYUFBWSxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDM0M7QUFDVDtDQUNBLFNBQVEsUUFBUSxFQUFFLFNBQVMsYUFBYSxHQUFHO0NBQzNDLGFBQVksT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1dBQzVDO0FBQ1Q7Q0FDQSxNQUFLLENBQUMsQ0FBQztHQUNOLENBQUE7Ozs7Ozs7Ozs7Q0N6WkQsQ0FBYyxhQUFBLEdBQUcsWUFBWSxDQUFDO0FBQzlCO0NBQ0E7RUFDQSxJQUFJLE1BQU0sR0FBR0EsYUFBQSxFQUFtQixDQUFDO0NBQ2pDLENBQUEsQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVcsR0FBRyxZQUFZLENBQUM7QUFDdEY7RUFDQSxJQUFJLElBQUksR0FBR0MsZ0JBQUEsRUFBeUIsQ0FBQztBQUNyQztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsU0FBUyxZQUFZLENBQUMsTUFBTSxFQUFFO01BQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNDO0FBQ0Q7RUFDQSxZQUFZLENBQUMsVUFBVSxHQUFHLFlBQVk7Q0FDdEM7TUFDSSxJQUFJLElBQUksQ0FBQyxNQUFNO0NBQ25CLFNBQVEsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0NBQ3BFLEVBQUMsQ0FBQztBQUNGO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsa0JBQWtCLEdBQUc7Q0FDOUQsS0FBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDNUIsS0FBSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUztDQUM3QixXQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNyRixXQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM5RixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0VBQ0EsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFBOzs7Ozs7Ozs7Ozs7Q0NqRHpCLENBQWMsT0FBQSxHQUFHLE9BQU8sQ0FBQztBQUN6QjtFQUNBLElBQUksSUFBSSxHQUFHRCxnQkFBQSxFQUEwQixDQUFDO0FBQ3RDO0NBQ0E7Q0FDQSxDQUFBLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUN2RjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxPQUFPLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFO0FBQy9EO0NBQ0EsS0FBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVU7Q0FDckMsU0FBUSxNQUFNLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQ3REO01BQ0ksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtNQUNJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN0RDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO01BQ0ksSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0dBQ3ZEO0FBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO0FBQ25HO01BQ0ksSUFBSSxDQUFDLE9BQU87Q0FDaEIsU0FBUSxNQUFNLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQ3JEO0NBQ0EsS0FBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7TUFDaEIsSUFBSSxDQUFDLFFBQVE7Q0FDakIsU0FBUSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6RjtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Q0FDdkIsU0FBUSxVQUFVLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDaEUsT0FBTyxTQUFTLENBQUM7T0FDcEI7QUFDTDtDQUNBLEtBQUksSUFBSTtVQUNBLE9BQU8sSUFBSSxDQUFDLE9BQU87Q0FDM0IsYUFBWSxNQUFNO0NBQ2xCLGFBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDL0YsYUFBWSxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFO0FBQ2hEO2tCQUNnQixJQUFJLEdBQUcsRUFBRTtzQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDcEQscUJBQW9CLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO21CQUN4QjtBQUNqQjtDQUNBLGlCQUFnQixJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7Q0FDdkMscUJBQW9CLElBQUksQ0FBQyxHQUFHLGtCQUFrQixJQUFJLENBQUMsQ0FBQztzQkFDaEMsT0FBTyxTQUFTLENBQUM7bUJBQ3BCO0FBQ2pCO0NBQ0EsaUJBQWdCLElBQUksRUFBRSxRQUFRLFlBQVksWUFBWSxDQUFDLEVBQUU7Q0FDekQscUJBQW9CLElBQUk7Q0FDeEIseUJBQXdCLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3VCQUM1RixDQUFDLE9BQU8sR0FBRyxFQUFFOzBCQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztDQUN4RCx5QkFBd0IsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7dUJBQ3hCO21CQUNKO0FBQ2pCO2tCQUNnQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDcEQsaUJBQWdCLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztlQUNuQztDQUNiLFVBQVMsQ0FBQztPQUNMLENBQUMsT0FBTyxHQUFHLEVBQUU7VUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDeEMsU0FBUSxVQUFVLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDN0MsT0FBTyxTQUFTLENBQUM7T0FDcEI7Q0FDTCxFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Q0FDakQsS0FBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7VUFDZCxJQUFJLENBQUMsVUFBVTtjQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztDQUMzQyxTQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1VBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDMUI7TUFDRCxPQUFPLElBQUksQ0FBQztHQUNmLENBQUE7Ozs7Ozs7Ozs7QUM1SUQ7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNBLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNsQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtHQUNBLEdBQUcsQ0FBQyxPQUFPLEdBQUdBLGNBQXdCLEVBQUEsQ0FBQTs7Ozs7Ozs7Ozs7Q0NsQ3RDLENBQWMsS0FBQSxHQUFHLEVBQUUsQ0FBQztBQUNwQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTs7Ozs7Ozs7OztHQ2hCQSxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDdkI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQzNCO0NBQ0E7Q0FDQSxFQUFBLFFBQVEsQ0FBQyxNQUFNLFNBQVNBLGFBQUEsRUFBbUIsQ0FBQztDQUM1QyxFQUFBLFFBQVEsQ0FBQyxZQUFZLEdBQUdDLG9CQUFBLEVBQTBCLENBQUM7Q0FDbkQsRUFBQSxRQUFRLENBQUMsTUFBTSxTQUFTQyxhQUFBLEVBQW1CLENBQUM7Q0FDNUMsRUFBQSxRQUFRLENBQUMsWUFBWSxHQUFHRSxvQkFBQSxFQUEwQixDQUFDO0FBQ25EO0NBQ0E7Q0FDQSxFQUFBLFFBQVEsQ0FBQyxJQUFJLFdBQVdDLGdCQUFBLEVBQXlCLENBQUM7Q0FDbEQsRUFBQSxRQUFRLENBQUMsR0FBRyxZQUFZQyxVQUFBLEVBQWdCLENBQUM7Q0FDekMsRUFBQSxRQUFRLENBQUMsS0FBSyxVQUFVQyxZQUFBLEVBQWtCLENBQUM7Q0FDM0MsRUFBQSxRQUFRLENBQUMsU0FBUyxNQUFNLFNBQVMsQ0FBQztBQUNsQztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLFNBQVMsU0FBUyxHQUFHO0NBQ3JCLE1BQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztPQUMzQixRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7T0FDbEQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JEO0FBQ0Q7Q0FDQTtDQUNBLEVBQUEsU0FBUyxFQUFFLENBQUE7Ozs7Ozs7Ozs7O0NDaENYLEVBQUEsTUFBQSxDQUFBLE9BQUEsR0FBaUJQLG1CQUE4QixFQUFBLENBQUE7Ozs7Ozs7Q0NIL0M7Q0EwQkEsU0FBUyxvQkFBb0IsR0FBQTtDQUMzQixJQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUE7Q0FDdkIsQ0FBQztDQUdEOztDQUVHO0NBQ0ksTUFBTSxVQUFVLEdBQUc7S0FDeEIsTUFBTSxDQUFDLE9BQW1CLEVBQUUsTUFBQSxHQUFxQlUsY0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBQTtDQUNsRSxRQUFBLEtBQUssTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtDQUM5QixZQUFBLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0NBQy9ELFNBQUE7Q0FDRCxRQUFBLE9BQU8sTUFBTSxDQUFBO01BQ2Q7S0FFRCxNQUFNLENBQUMsS0FBOEIsRUFBRSxNQUFlLEVBQUE7U0FDcEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZQSxjQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJQSxjQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0NBQzFFLFFBQUEsSUFBSSxHQUFHLEdBQUcsTUFBTSxLQUFLLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFBO0NBQ2pFLFFBQUEsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQTtDQUN0QyxRQUFBLE9BQU8sTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUU7Q0FDdkIsWUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUE7YUFDM0IsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUNmLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQTtxQkFDckUsTUFBSztDQUNQLGdCQUFBO0NBQ0Usb0JBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUE7cUJBQ3hCLE1BQUs7Q0FDUixhQUFBO0NBQ0YsU0FBQTtDQUNELFFBQUEsT0FBTyxPQUFPLENBQUE7TUFDZjtFQUNGLENBQUE7Q0FFRCxTQUFTLDBCQUEwQixHQUFBO0tBQ2pDLE9BQU87Q0FDTCxRQUFBLElBQUksRUFBRSxFQUFFO0NBQ1IsUUFBQSxJQUFJLEVBQUUsRUFBRTtDQUNSLFFBQUEsT0FBTyxFQUFFLFNBQVM7Q0FDbEIsUUFBQSxNQUFNLEVBQUUsU0FBUztDQUNqQixRQUFBLEtBQUssRUFBRSxTQUFTO0NBQ2hCLFFBQUEsSUFBSSxFQUFFLFNBQVM7Q0FDZixRQUFBLFdBQVcsRUFBRSxTQUFTO01BQ3ZCLENBQUE7Q0FDSCxDQUFDO0NBR0Q7O0NBRUc7Q0FDSSxNQUFNLGdCQUFnQixHQUFHO0tBQzlCLE1BQU0sQ0FBQyxPQUF5QixFQUFFLE1BQUEsR0FBcUJBLGNBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUE7Q0FDeEUsUUFBQSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFO0NBQ3ZCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0NBQ3ZDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUU7Q0FDdkIsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7Q0FDdkMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtDQUNqQyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtDQUN4QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO0NBQ2hDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0NBQ3hDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7Q0FDL0IsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7Q0FDdkMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtDQUM5QixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtDQUNyQyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO0NBQ3JDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0NBQzVDLFNBQUE7Q0FDRCxRQUFBLE9BQU8sTUFBTSxDQUFBO01BQ2Q7S0FFRCxNQUFNLENBQUMsS0FBOEIsRUFBRSxNQUFlLEVBQUE7U0FDcEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZQSxjQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJQSxjQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0NBQzFFLFFBQUEsSUFBSSxHQUFHLEdBQUcsTUFBTSxLQUFLLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFBO0NBQ2pFLFFBQUEsTUFBTSxPQUFPLEdBQUcsMEJBQTBCLEVBQUUsQ0FBQTtDQUM1QyxRQUFBLE9BQU8sTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUU7Q0FDdkIsWUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUE7YUFDM0IsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUNmLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFBO3FCQUM5QixNQUFLO0NBQ1AsZ0JBQUEsS0FBSyxDQUFDO0NBQ0osb0JBQUEsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUE7cUJBQzlCLE1BQUs7Q0FDUCxnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtxQkFDL0IsTUFBSztDQUNQLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFBO3FCQUMvQixNQUFLO0NBQ1AsZ0JBQUEsS0FBSyxDQUFDO0NBQ0osb0JBQUEsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7cUJBQzlCLE1BQUs7Q0FDUCxnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtxQkFDNUIsTUFBSztDQUNQLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO3FCQUNuQyxNQUFLO0NBQ1AsZ0JBQUE7Q0FDRSxvQkFBQSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQTtxQkFDeEIsTUFBSztDQUNSLGFBQUE7Q0FDRixTQUFBO0NBQ0QsUUFBQSxPQUFPLE9BQU8sQ0FBQTtNQUNmO0VBQ0Y7O0NDdElEOztDQUVHO0NBQ0ksTUFBTUMsY0FBWSxHQUFHLElBQUksQ0FBQTtDQUVoQzs7Q0FFRztDQUNJLE1BQU0sY0FBYyxHQUF3QjtLQUNqRCxTQUFTLENBQUMsS0FBaUIsRUFBRSxPQUFtQixFQUFBO1NBQzlDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7Q0FDdkMsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtDQUM3RCxRQUFBLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO01BQ25DO0NBQ0QsSUFBQSxXQUFXLENBQUMsTUFBa0IsRUFBQTtDQUM1QixRQUFBLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUE7TUFDbkU7S0FDRCxNQUFNLEdBQUE7O1NBRUosT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQTtNQUMzQztFQUNGOztDQ3pCRDtDQW1CQSxTQUFTLHVCQUF1QixHQUFBO0tBQzlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQTtDQUN2RyxDQUFDO0NBR0Q7O0NBRUc7Q0FDSSxNQUFNLGFBQWEsR0FBRztLQUMzQixNQUFNLENBQUMsT0FBc0IsRUFBRSxNQUFBLEdBQXFCRCxjQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFBO0NBQ3JFLFFBQUEsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtDQUNqQyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtDQUN2QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO0NBQ2hDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0NBQ3hDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7Q0FDOUIsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7Q0FDckMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtDQUMvQixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUN2QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssRUFBRSxFQUFFO0NBQy9CLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO0NBQy9DLFNBQUE7Q0FDRCxRQUFBLE9BQU8sTUFBTSxDQUFBO01BQ2Q7S0FFRCxNQUFNLENBQUMsS0FBOEIsRUFBRSxNQUFlLEVBQUE7U0FDcEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZQSxjQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJQSxjQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0NBQzFFLFFBQUEsSUFBSSxHQUFHLEdBQUcsTUFBTSxLQUFLLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFBO0NBQ2pFLFFBQUEsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQTtDQUN6QyxRQUFBLE9BQU8sTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUU7Q0FDdkIsWUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUE7YUFDM0IsUUFBUSxHQUFHLEtBQUssQ0FBQztDQUNmLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO3FCQUMvQixNQUFLO0NBQ1AsZ0JBQUEsS0FBSyxDQUFDO0NBQ0osb0JBQUEsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7cUJBQy9CLE1BQUs7Q0FDUCxnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtxQkFDNUIsTUFBSztDQUNQLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFBO3FCQUM5QixNQUFLO0NBQ1AsZ0JBQUEsS0FBSyxDQUFDO0NBQ0osb0JBQUEsT0FBTyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUE7cUJBQ3RDLE1BQUs7Q0FDUCxnQkFBQTtDQUNFLG9CQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFBO3FCQUN4QixNQUFLO0NBQ1IsYUFBQTtDQUNGLFNBQUE7Q0FDRCxRQUFBLE9BQU8sT0FBTyxDQUFBO01BQ2Y7RUFDRjs7Q0N4RUQ7O0NBRUc7Q0FDSSxNQUFNQyxjQUFZLEdBQUcsSUFBSSxDQUFBO0NBRWhDOztDQUVHO0NBQ0ksTUFBTSxpQkFBaUIsR0FBMkI7S0FDdkQsU0FBUyxDQUFDLEtBQW9CLEVBQUUsT0FBbUIsRUFBQTtTQUNqRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0NBQzFDLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7Q0FDN0QsUUFBQSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtNQUNuQztDQUNELElBQUEsV0FBVyxDQUFDLE1BQWtCLEVBQUE7Q0FDNUIsUUFBQSxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFBO01BQ3RFO0tBQ0QsTUFBTSxHQUFBOztTQUVKLE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUE7TUFDOUM7RUFDRjs7Q0N6QkQ7Q0FTQSxJQUFrQixpQkFNakIsQ0FBQTtDQU5ELENBQUEsVUFBa0IsaUJBQWlCLEVBQUE7Q0FDakMsSUFBQSxpQkFBQSxDQUFBLGlCQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsVUFBWSxDQUFBO0NBQ1osSUFBQSxpQkFBQSxDQUFBLGlCQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsVUFBWSxDQUFBO0NBQ1osSUFBQSxpQkFBQSxDQUFBLGlCQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsV0FBYSxDQUFBO0NBQ2IsSUFBQSxpQkFBQSxDQUFBLGlCQUFBLENBQUEsWUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsWUFBYyxDQUFBO0NBQ2QsSUFBQSxpQkFBQSxDQUFBLGlCQUFBLENBQUEsY0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxjQUFpQixDQUFBO0NBQ25CLENBQUMsRUFOaUIsaUJBQWlCLEtBQWpCLGlCQUFpQixHQU1sQyxFQUFBLENBQUEsQ0FBQSxDQUFBO0NBT0QsU0FBUyx3QkFBd0IsR0FBQTtLQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUE7Q0FDM0MsQ0FBQztDQUdEOztDQUVHO0NBQ0ksTUFBTSxjQUFjLEdBQUc7S0FDNUIsTUFBTSxDQUFDLE9BQXVCLEVBQUUsTUFBQSxHQUFxQkQsY0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBQTtDQUN0RSxRQUFBLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxFQUFFLEVBQUU7Q0FDM0IsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7Q0FDM0MsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRTtDQUMvQixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtDQUMvQyxTQUFBO0NBQ0QsUUFBQSxPQUFPLE1BQU0sQ0FBQTtNQUNkO0tBRUQsTUFBTSxDQUFDLEtBQThCLEVBQUUsTUFBZSxFQUFBO1NBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWUEsY0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSUEsY0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUMxRSxRQUFBLElBQUksR0FBRyxHQUFHLE1BQU0sS0FBSyxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQTtDQUNqRSxRQUFBLE1BQU0sT0FBTyxHQUFHLHdCQUF3QixFQUFFLENBQUE7Q0FDMUMsUUFBQSxPQUFPLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFO0NBQ3ZCLFlBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFBO2FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDZixnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtxQkFDbEMsTUFBSztDQUNQLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBUyxDQUFBO3FCQUM3QyxNQUFLO0NBQ1AsZ0JBQUE7Q0FDRSxvQkFBQSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQTtxQkFDeEIsTUFBSztDQUNSLGFBQUE7Q0FDRixTQUFBO0NBQ0QsUUFBQSxPQUFPLE9BQU8sQ0FBQTtNQUNmO0VBQ0Y7O0NDekREOztDQUVHO0NBQ0ksTUFBTUMsY0FBWSxHQUFHLElBQUksQ0FBQTtDQUVoQzs7Q0FFRztDQUNJLE1BQU0sa0JBQWtCLEdBQTRCO0tBQ3pELFNBQVMsQ0FBQyxLQUFxQixFQUFFLE9BQW1CLEVBQUE7U0FDbEQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUMzQyxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0NBQzdELFFBQUEsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7TUFDbkM7Q0FDRCxJQUFBLFdBQVcsQ0FBQyxNQUFrQixFQUFBO0NBQzVCLFFBQUEsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQTtNQUN2RTtLQUNELE1BQU0sR0FBQTs7U0FFSixPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFBO01BQy9DO0VBQ0Y7O0NDekJEO0NBZUEsU0FBUyxpQkFBaUIsR0FBQTtDQUN4QixJQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO0NBQzdCLENBQUM7Q0FHRDs7Q0FFRztDQUNJLE1BQU0sT0FBTyxHQUFHO0tBQ3JCLE1BQU0sQ0FBQyxPQUFnQixFQUFFLE1BQUEsR0FBcUJELGNBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUE7Q0FDL0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0NBQ25CLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQ25DLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Q0FDbkIsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDbkMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtDQUNuQixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUNuQyxTQUFBO0NBQ0QsUUFBQSxPQUFPLE1BQU0sQ0FBQTtNQUNkO0tBRUQsTUFBTSxDQUFDLEtBQThCLEVBQUUsTUFBZSxFQUFBO1NBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWUEsY0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSUEsY0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUMxRSxRQUFBLElBQUksR0FBRyxHQUFHLE1BQU0sS0FBSyxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQTtDQUNqRSxRQUFBLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixFQUFFLENBQUE7Q0FDbkMsUUFBQSxPQUFPLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFO0NBQ3ZCLFlBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFBO2FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDZixnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtxQkFDMUIsTUFBSztDQUNQLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFBO3FCQUMxQixNQUFLO0NBQ1AsZ0JBQUEsS0FBSyxDQUFDO0NBQ0osb0JBQUEsT0FBTyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7cUJBQzFCLE1BQUs7Q0FDUCxnQkFBQTtDQUNFLG9CQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFBO3FCQUN4QixNQUFLO0NBQ1IsYUFBQTtDQUNGLFNBQUE7Q0FDRCxRQUFBLE9BQU8sT0FBTyxDQUFBO01BQ2Y7RUFDRjs7Q0M1REQ7Q0FVQSxJQUFrQixjQUlqQixDQUFBO0NBSkQsQ0FBQSxVQUFrQixjQUFjLEVBQUE7Q0FDOUIsSUFBQSxjQUFBLENBQUEsY0FBQSxDQUFBLGNBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLGNBQWdCLENBQUE7Q0FDaEIsSUFBQSxjQUFBLENBQUEsY0FBQSxDQUFBLG1CQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxtQkFBcUIsQ0FBQTtDQUNyQixJQUFBLGNBQUEsQ0FBQSxjQUFBLENBQUEsY0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsR0FBQSxjQUFpQixDQUFBO0NBQ25CLENBQUMsRUFKaUIsY0FBYyxLQUFkLGNBQWMsR0FJL0IsRUFBQSxDQUFBLENBQUEsQ0FBQTtDQVFELFNBQVMsOEJBQThCLEdBQUE7Q0FDckMsSUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQTtDQUMzRCxDQUFDO0NBR0Q7O0NBRUc7Q0FDSSxNQUFNLG9CQUFvQixHQUFHO0tBQ2xDLE1BQU0sQ0FBQyxPQUE2QixFQUFFLE1BQUEsR0FBcUJBLGNBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUE7Q0FDNUUsUUFBQSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO2FBQzlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Q0FDaEUsU0FBQTtDQUNELFFBQUEsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFO2FBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUUsQ0FBQyxDQUFBO0NBQzdCLFNBQUE7U0FDRCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0NBQ3hCLFFBQUEsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO0NBQ2pDLFlBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUNoQixTQUFBO1NBQ0QsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFBO0NBQ2YsUUFBQSxPQUFPLE1BQU0sQ0FBQTtNQUNkO0tBRUQsTUFBTSxDQUFDLEtBQThCLEVBQUUsTUFBZSxFQUFBO1NBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWUEsY0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSUEsY0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUMxRSxRQUFBLElBQUksR0FBRyxHQUFHLE1BQU0sS0FBSyxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQTtDQUNqRSxRQUFBLE1BQU0sT0FBTyxHQUFHLDhCQUE4QixFQUFFLENBQUE7Q0FDaEQsUUFBQSxPQUFPLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFO0NBQ3ZCLFlBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFBO2FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDZixnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO3FCQUN0RCxNQUFLO0NBQ1AsZ0JBQUEsS0FBSyxDQUFDO3FCQUNKLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO3FCQUN4QyxNQUFLO0NBQ1AsZ0JBQUEsS0FBSyxDQUFDO0NBQ0osb0JBQUEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3lCQUNuQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQTtDQUN6Qyx3QkFBQSxPQUFPLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFOzZCQUN4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFTLENBQUMsQ0FBQTtDQUM5Qyx5QkFBQTtDQUNGLHFCQUFBO0NBQU0seUJBQUE7eUJBQ0wsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBUyxDQUFDLENBQUE7Q0FDOUMscUJBQUE7cUJBQ0QsTUFBSztDQUNQLGdCQUFBO0NBQ0Usb0JBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUE7cUJBQ3hCLE1BQUs7Q0FDUixhQUFBO0NBQ0YsU0FBQTtDQUNELFFBQUEsT0FBTyxPQUFPLENBQUE7TUFDZjtFQUNGOztDQ3hFRDs7Q0FFRztDQUNJLE1BQU1DLGNBQVksR0FBRyxJQUFJLENBQUE7Q0FFaEM7O0NBRUc7Q0FDSSxNQUFNLHdCQUF3QixHQUFrQztLQUNyRSxTQUFTLENBQUMsS0FBMkIsRUFBRSxPQUFtQixFQUFBO1NBQ3hELE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUNqRCxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0NBQzdELFFBQUEsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7TUFDbkM7Q0FDRCxJQUFBLFdBQVcsQ0FBQyxNQUFrQixFQUFBO0NBQzVCLFFBQUEsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFBO01BQzdFO0tBQ0QsTUFBTSxHQUFBOztTQUVKLE9BQU8sb0JBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQTtNQUNyRDtFQUNGOzs7Ozs7OztDQ3pCRCxDQUFjLElBQUEsR0FBRyxJQUFJLENBQUM7QUFDdEI7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDaEI7RUFDQSxJQUFJO0NBQ0osR0FBRSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQztDQUN4RSxLQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7Q0FDaG9DLElBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO0dBQ2xCLENBQUMsT0FBTyxDQUFDLEVBQUU7Q0FDWjtHQUNDO0FBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDbkM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN6QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FB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QTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDZjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN2QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzNCO0NB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QUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUMzQyxLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO01BQ3JELEdBQUcsSUFBSSxNQUFNLENBQUM7TUFDZCxPQUFPLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVB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LEtBQUssU0FBUyxFQUFFO2FBQ2hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Q0FDbEUsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTthQUNuQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0NBQ3JFLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7YUFDL0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtDQUNqRSxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO2FBQ2hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Q0FDbEUsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRTtDQUMxQixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtDQUMxQyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFO0NBQzNCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FB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QUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtDQUN6QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO0NBQ2xDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0NBQzFDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7Q0FDdEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7Q0FDN0MsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtDQUNwQyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtDQUM3QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO0NBQ3BDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0NBQzdDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7Q0FDL0IsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7Q0FDdkMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtDQUNoQyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUN4QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxVQUFV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
|