@magic-xpa/gui 4.1000.0-dev4100.21 → 4.1000.0-dev4100.211
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/esm2020/src/Commands.mjs +3 -3
- package/esm2020/src/Events.mjs +3 -3
- package/esm2020/src/management/data/DcValues.mjs +4 -4
- package/esm2020/src/management/data/FieldDef.mjs +7 -7
- package/esm2020/src/management/data/NUM_TYPE.mjs +7 -7
- package/esm2020/src/management/data/RecordUtils.mjs +4 -4
- package/esm2020/src/management/exp/ExpressionInterface.mjs +2 -1
- package/esm2020/src/management/gui/DisplayConvertor.mjs +6 -6
- package/esm2020/src/management/gui/Helps.mjs +16 -16
- package/esm2020/src/management/gui/MgControlBase.mjs +11 -11
- package/esm2020/src/management/gui/Property.mjs +4 -4
- package/esm2020/src/management/gui/ValidationDetails.mjs +10 -10
- package/esm2020/src/management/tasks/GuiTaskBase.mjs +16 -16
- package/fesm2015/magic-xpa-gui.mjs +80 -79
- package/fesm2015/magic-xpa-gui.mjs.map +1 -1
- package/fesm2020/magic-xpa-gui.mjs +80 -79
- package/fesm2020/magic-xpa-gui.mjs.map +1 -1
- package/package.json +4 -4
- package/src/management/exp/ExpressionInterface.d.ts +1 -0
- package/magic-xpa-gui.d.ts +0 -2
|
@@ -4,6 +4,12 @@ import { PIC } from '../gui/PIC';
|
|
|
4
4
|
import { Events } from '../../Events';
|
|
5
5
|
import { GuiEnvironment } from '../../GuiEnvironment';
|
|
6
6
|
export class NUM_TYPE {
|
|
7
|
+
set Data(value) {
|
|
8
|
+
this._data = value;
|
|
9
|
+
}
|
|
10
|
+
get Data() {
|
|
11
|
+
return this._data;
|
|
12
|
+
}
|
|
7
13
|
constructor(recordHexStrOrByteValOrDecStrOrNumFrom, offsetOrPic, lengthOrCompIdx) {
|
|
8
14
|
this.COMMACHAR = ',';
|
|
9
15
|
this.DECIMALCHAR = '.';
|
|
@@ -31,12 +37,6 @@ export class NUM_TYPE {
|
|
|
31
37
|
}
|
|
32
38
|
this.constructor_5(recordHexStrOrByteValOrDecStrOrNumFrom);
|
|
33
39
|
}
|
|
34
|
-
set Data(value) {
|
|
35
|
-
this._data = value;
|
|
36
|
-
}
|
|
37
|
-
get Data() {
|
|
38
|
-
return this._data;
|
|
39
|
-
}
|
|
40
40
|
constructor_0() {
|
|
41
41
|
this.initConst();
|
|
42
42
|
this.NUM_ZERO();
|
|
@@ -1738,4 +1738,4 @@ export class OperData {
|
|
|
1738
1738
|
this.NUM_Exp2_ = 0;
|
|
1739
1739
|
}
|
|
1740
1740
|
}
|
|
1741
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTlVNX1RZUEUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9OVU1fVFlQRS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBYXRELE1BQU0sT0FBTyxRQUFRO0lBbUNuQixZQUFZLHNDQUE0QyxFQUFFLFdBQWlCLEVBQUUsZUFBd0I7UUF2QnJHLGNBQVMsR0FBVyxHQUFHLENBQUM7UUFDeEIsZ0JBQVcsR0FBVyxHQUFHLENBQUM7UUFDbEIseUJBQW9CLEdBQVcsQ0FBQyxDQUFDO1FBQ2pDLFVBQUssR0FBYyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFxQjFELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLE9BQU87U0FDUjtRQUNELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsS0FBSyxJQUFJLElBQUksc0NBQXNDLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxFQUFFO1lBQ2hKLElBQUksQ0FBQyxhQUFhLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUMzRCxPQUFPO1NBQ1I7UUFD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b0IsR0FBRyxDQUFDLEVBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUN0QixJQUFJLEVBQUUsRUFBRTtTQUNaO1FBRUQsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDOUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVsQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUU7WUFDdkIsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4QyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUU7WUFDdkIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVyQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN4RixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxR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LEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO2dCQUNyQixRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoSixJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUU7Z0JBQ3BELEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUM1RixHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQy9CO1NBQ0E7UUFDTCxLQUFLLEdBQUcsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDN0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFL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Q0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDcEQ7U0FDSTtRQUNULEtBQUssR0FBRyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM3QyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQzFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkM7U0FDRjtRQUNQLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtTQUMxQztRQUNMLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtZQUNkLFFBQVEsQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUM3QixJQUFJLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtvQkFDM0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7b0JBQ3JDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNuRDtZQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDNUY7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFPRCxPQUFPLENBQUMsTUFBYztRQUNwQixJQUFJLEdBQVcsQ0FBQztRQUNoQixJQUFJLFFBQWdCLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFFaEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDNUMsT0FBTztRQUNULElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ2pGLFFBQVEsRUFBRSxDQUFDO1NBQ1o7UUFDSCxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPO1NBQ047UUFDSCxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFTLENBQUM7WUFDZCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRTtnQkFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRW5ELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDOUU7SUFDSCxDQUFDO0lBU0QsWUFBWSxDQUFDLEdBQVc7UUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQVFPLE9BQU8sQ0FBQyxNQUFlO1FBQzdCLElBQUksQ0FBUyxDQUFDO1FBRWQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQixJQUFJLE1BQU07WUFDUixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7SUFDekMsQ0FBQztJQWVLLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBYyxFQUFFLElBQVksRUFBRSxJQUFjLEVBQUUsSUFBWSxFQUFFLEdBQVc7UUFDM0YsSUFBSSxDQUFDLEdBQVcsQ0FBQyxDQUFDO1FBRWxCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDL0csQ0FBQyxFQUFFLENBQUM7WUFDSixJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDO1NBQ1I7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsT0FBTyxDQUFDLENBQUM7YUFDTixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RSxPQUFPLENBQUMsQ0FBQyxDQUFDOztZQUVWLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBZTtRQUM1QixJQUFJLEdBQUcsR0FBVyxPQUFPLENBQUM7UUFFMUIsSUFBSSxPQUFPLEdBQUcsQ0FBQztZQUNiLEdBQUcsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBRXRCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQVNELE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBbUI7UUFDaEMsSUFBSSxHQUFHLEdBQVcsQ0FBQyxDQUFDO1FBRXBCLElBQUksV0FBVyxHQUFHLFNBQVMsQ0FBQyxhQUFhO1lBQ3ZDLEdBQUcsR0FBRyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQzs7WUFFMUIsR0FBRyxHQUFHLFdBQVcsQ0FBQztRQUVwQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFLRCxNQUFNLENBQUMsT0FBTztRQUNaLElBQUksUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDeEMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUQsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUtELE1BQU0sQ0FBQyxPQUFPO1FBQ1osSUFBSSxHQUFHLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNuQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RCxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFLRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQU9PLGtCQUFrQixDQUFDLEdBQVc7UUFDcEMsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLElBQUksSUFBWSxDQUFDO1FBQ2pCLElBQUksT0FBTyxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDdkMsSUFBSSxNQUFNLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN0QyxJQUFJLE1BQU0sR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLElBQUksR0FBVyxDQUFDO1FBQ2hCLElBQUksSUFBWSxDQUFDO1FBQ2pCLElBQUksR0FBVyxDQUFDO1FBQ2hCLElBQUksS0FBSyxHQUFXLENBQUMsQ0FBQztRQUN0QixJQUFJLEtBQUssR0FBVyxDQUFDLENBQUM7UUFDdEIsSUFBSSxNQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxHQUFjLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxVQUFVLEdBQWMsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRyxJQUFJLFVBQVUsR0FBYyxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuSCxJQUFJLGNBQWMsR0FBZ0I7WUFDaEMsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUQsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNsRixJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxD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LFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNsRixJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRixJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEYsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDNUYsQ0FBQztRQUVGLElBQUksYUFBYSxH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QUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDekMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMzQyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBS08sTUFBTSxDQUFDLFNBQVM7UUFDdEIsT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztJQU1yRSxDQUFDOztBQS82RU0scUJBQVksR0FBVyxVQUFVLENBQUM7QUFDbEMsZ0JBQU8sR0FBVyxDQUFDLENBQUMsQ0FBQztBQUNyQixrQkFBUyxHQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLGlCQUFRLEdBQVcsRUFBRSxDQUFDO0FBQ3RCLHNCQUFhLEdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDM0IsaUJBQVEsR0FBVyxFQUFFLENBQUM7QUFDdEIsa0JBQVMsR0FBVyxDQUFDLEdBQUcsQ0FBQztBQTQ2RWxDLE1BQU0sT0FBTyxRQUFRO0lBQXJCO1FBQ0UsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLGNBQVMsR0FBVyxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgIEludDMyLCBOTnVtYmVyLCBOU3RyaW5nLCBOdW1iZXJTdHlsZXMsIFN0cmluZ0J1aWxkZXIgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IENvbnN0YW50cywgUElDSW50ZXJmYWNlLCBSYW5kb21pemVyLCBTdG9yYWdlQXR0cmlidXRlLCBVdGlsU3RyQnl0ZU1vZGUgfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHsgUElDIH0gZnJvbSAnLi4vZ3VpL1BJQyc7XHJcbmltcG9ydCB7IElFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudi9JRW52aXJvbm1lbnQnO1xyXG5pbXBvcnQgeyBFdmVudHMgfSBmcm9tICcuLi8uLi9FdmVudHMnO1xyXG5pbXBvcnQgeyBHdWlFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL0d1aUVudmlyb25tZW50JztcclxuXHJcbi8vLyAgIFRoaXMgY2xhc3MgaGFuZGxlcyBhIE1hZ2ljIE51bWJlciB0aGUgaWRlbnRpY2FsIHdheSBpdCdzIHJlcHJlc2VudGVkIGluIE1hZ2ljLlxyXG4vLy8gICBNb3N0IG9mIHRoZSBtZXRob2RzIGluIHRoaXMgY2xhc3Mgd2VyZSBjb3BpZWQgZnJvbSB0aGUgQysrIHNvdXJjZXMgb2YgTWFnaWMsXHJcbi8vLyAgIGluIG9yZGVyIHRvIGtlZXAgdGhlIGV4YWN0IGxvZ2ljIHVzZWQgaW4gb3JkZXIgdG8gaW1wbGVtZW50IGFsbCB0aGUgZnVuY3Rpb25hbGl0eVxyXG4vLy8gICBleHBlY3RlZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZXhhY3QgbWV0aG9kcyBuYW1lcyBhbmQgdmFyaWFibGVzIG5hbWVzIHdoZXJlIHVzZWRcclxuLy8vICAgaW4gb3JkZXIgdG8gbWFrZSBmdXR1cmUgZGVidWdnaW5nIG1vcmUgZWFzeWVyLlxyXG4vLy8gICBOb3RpY2UgYSBsb25nIGRhdGEgdHlwZSB0aGF0IGlzIHVzZWQgaW4gTWFnaWMgQysrIHNvdXJjZXMsIGlzIHJlcHJlc2VudGVkIGluIGphdmFcclxuLy8vICAgYnkgdGhlIGludCBkYXRhIHR5cGUuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8YXV0aG9yPiAgQWxvbiBCYXItTmVzXHJcbi8vLyA8L2F1dGhvcj5cclxuXHJcbmV4cG9ydCBjbGFzcyBOVU1fVFlQRSB7XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBDb25zdGFudHNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHN0YXRpYyBJTlRfWkVST19IRVg6IHN0cmluZyA9IFwiMDAwMDAwMDBcIjtcclxuICBzdGF0aWMgTk9fUk9PTTogbnVtYmVyID0gLTE7XHJcbiAgc3RhdGljIFpFUk9fRklMTDogbnVtYmVyID0gLTI7XHJcbiAgc3RhdGljIE5VTV9TSVpFOiBudW1iZXIgPSAyMDtcclxuICBzdGF0aWMgTlVNX0xPTkdfVFlQRTogbnVtYmVyID0gLTE7XHJcbiAgc3RhdGljIEVYUF9CSUFTOiBudW1iZXIgPSA2NDtcclxuICBzdGF0aWMgU0lHTl9NQVNLOiBudW1iZXIgPSAtMTI4O1xyXG5cclxuICBDT01NQUNIQVI6IHN0cmluZyA9ICcsJztcclxuICBERUNJTUFMQ0hBUjogc3RyaW5nID0gJy4nO1xyXG4gIHByaXZhdGUgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfZGF0YTogSW50OEFycmF5ID0gbmV3IEludDhBcnJheShOVU1fVFlQRS5OVU1fU0laRSk7XHJcblxyXG4gIHNldCBEYXRhKHZhbHVlOiBJbnQ4QXJyYXkpIHtcclxuICAgIHRoaXMuX2RhdGEgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBEYXRhKCk6IEludDhBcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gQ29uc3RydWN0b3IgbGlzdFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGNvbnN0cnVjdG9yKCk7XHJcbiAgY29uc3RydWN0b3IocmVjb3JkSGV4U3RyOiBzdHJpbmcpO1xyXG4gIGNvbnN0cnVjdG9yKGJ5dGVWYWw6IEludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3RvcihieXRlVmFsOiBJbnQ4QXJyYXkpO1xyXG4gIGNvbnN0cnVjdG9yKGRlY1N0cjogc3RyaW5nLCBwaWM6IFBJQywgY29tcElkeDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3RvcihudW1Gcm9tOiBOVU1fVFlQRSk7XHJcbiAgY29uc3RydWN0b3IocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20/OiBhbnksIG9mZnNldE9yUGljPzogYW55LCBsZW5ndGhPckNvbXBJZHg/OiBudW1iZXIpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20gPT09IG51bGwgfHwgcmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20uY29uc3RydWN0b3IgPT09IFN0cmluZykpIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tID09PSBudWxsIHx8IHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tIGluc3RhbmNlb2YgSW50OEFycmF5KSAmJiAob2Zmc2V0T3JQaWMgPT09IG51bGwgfHwgb2Zmc2V0T3JQaWMuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKGxlbmd0aE9yQ29tcElkeCA9PT0gbnVsbCB8fCBsZW5ndGhPckNvbXBJZHguY29uc3RydWN0b3IgPT09IE51bWJlcikpIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8yKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tLCBvZmZzZXRPclBpYywgbGVuZ3RoT3JDb21wSWR4KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tID09PSBudWxsIHx8IHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tIGluc3RhbmNlb2YgSW50OEFycmF5KSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzMocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20gPT09IG51bGwgfHwgcmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20uY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKG9mZnNldE9yUGljID09PSBudWxsIHx8IG9mZnNldE9yUGljIGluc3RhbmNlb2YgUElDKSAmJiAobGVuZ3RoT3JDb21wSWR4ID09PSBudWxsIHx8IGxlbmd0aE9yQ29tcElkeC5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzQocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20sIG9mZnNldE9yUGljLCBsZW5ndGhPckNvbXBJZHgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzUocmVjb3JkSGV4U3RyT3JCeXRlVmFsT3JEZWNTdHJPck51bUZyb20pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIERlZmF1bHQgY29uc3RydWN0b3IuIFNldCB2YWx1ZSB0byAwXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRDb25zdCgpO1xyXG4gICAgdGhpcy5OVU1fWkVSTygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENyZWF0ZXMgYSBNYWdpYyBOdW1iZXIgZnJvbSBhIHN0cmluZyBnb3QgZnJvbSB0aGUgWE1MIHJlY29yZCB2YWx1ZS4gVGhlXHJcbiAgLy8vICAgU3RyaW5nIGlzIDQwIGNoYXJhY3RlcnMgbG9uZyBpbiBhbiBoZXhhIHJlcHJlc2VudGF0aW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZWNvcmRIZXhTdHJcIj4gIE1hZ2ljIG51bWJlciBpbiBoZXggZm9ybWF0LCA0MCBjaGFyYWN0ZXJzIGxvbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEocmVjb3JkSGV4U3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHR3b0RpZ2l0czogc3RyaW5nO1xyXG4gICAgdGhpcy5pbml0Q29uc3QoKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgdHdvRGlnaXRzID0gcmVjb3JkSGV4U3RyLnN1YnN0ciggaSAqIDIsIDIpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFbaV0gPSBOVU1fVFlQRS50b1NCeXRlKE5OdW1iZXIuUGFyc2UodHdvRGlnaXRzLCBOdW1iZXJTdHlsZXMuSGV4TnVtYmVyKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleCkge1xyXG4gICAgICBFdmVudHMuV3JpdGVXYXJuaW5nVG9Mb2coZXgpO1xyXG5cclxuICAgICAgdGhpcy5OVU1fWkVSTygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENyZWF0ZXMgYSBNYWdpYyBOdW1iZXIgZnJvbSBhcnJheSBvZiBieXRlcy4gVXNlZCBmcm9tIHRoZSBleHByZXNzaW9uIGV2YWx1YXRvclxyXG4gIC8vLyAgIHdoZW4gYSBNYWdpYyBOdW1iZXIgdmFsdWUgYXBlYXJzIHdpdGhpbiBhbiBleHByZXNzaW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJieXRlVmFsXCI+ICBBcnJheSBvZiBieXRlcyByZXByZXNlbnRpbmcgYSBNYWdpYyBOdW1iZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib2Zmc2V0XCI+ICAgSW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlbmd0aFwiPiAgIE51bWJlciBvZiBieXRlcyB0byB1c2UgPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzIoYnl0ZVZhbDogSW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIHRoaXMuX2RhdGFbaV0gPSBieXRlVmFsW2kgKyBvZmZzZXRdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENyZWF0ZXMgYSBNYWdpYyBOdW1iZXIgZnJvbSBhcnJheSBvZiBieXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8zKGJ5dGVWYWw6IEludDhBcnJheSk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8yKGJ5dGVWYWwsIDAsIGJ5dGVWYWwubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDcmVhdGVzIGEgTWFnaWMgTnVtYmVyIGZyb20gYSBkZWNpbWFsIGZvciBudW1iZXIgYW5kIGl0cyBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlY1N0clwiPiAgVGhlIG51bWJlciBpbiBhIHN0cmluZyBkZWNpbWFsIGZvcm1hdCA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgICBUaGUgcGljdHVyZSBmb3JtYXQgdG8gYmUgdXNlZCA8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfNChkZWNTdHI6IHN0cmluZywgcGljOiBQSUMsIGNvbXBJZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICB0aGlzLmZyb21fYShkZWNTdHIsIHBpYywgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ3JlYXRlcyBhIE1hZ2ljIE51bWJlciBmcm9tIGEgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bUZyb21cIj4gIFRoZSBzb3VyY2UgTWFnaWMgTnVtYmVyIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl81KG51bUZyb206IE5VTV9UWVBFKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRDb25zdCgpO1xyXG4gICAgdGhpcy5fZGF0YSA9IG5ldyBJbnQ4QXJyYXkobnVtRnJvbS5fZGF0YS5sZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCB0aGlzLl9kYXRhLmxlbmd0aDsgKytfYWkpXHJcbiAgICAgIHRoaXMuX2RhdGFbX2FpXSA9IG51bUZyb20uX2RhdGFbX2FpXTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRlY2ltYWwgc3RyaW5nIGZyb20gdGhlIG51bWJlciBzdG9yZWQgaW4gYSBNYWdpYyBOdW1iZXIuXHJcbiAgLy8vICAgVGhlIHN0cmluZyBpcyBidWlsZCBmcm9tIHRoZSBwaWN0dXJlIHByb3ZpZGVkIGFzIGEgcGFyYW1ldGVyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj5UaGUgcGljdHVyZSB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoZSBkaXNwbGF5IHN0cmluZ1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gVGhlIGRlY2ltYWwgZm9ybSBvZiB0aGUgTWFnaWMgTnVtYmVyIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICB0b0Rpc3BsYXlWYWx1ZShwaWM6IFBJQyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50b19hKHBpYyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5pdCBjb25zdGFudHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGluaXRDb25zdCgpOiB2b2lkIHtcclxuICAgIGxldCBlbnY6IElFbnZpcm9ubWVudCA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50O1xyXG4gICAgdGhpcy5ERUNJTUFMQ0hBUiA9IGVudi5HZXREZWNpbWFsKCk7XHJcbiAgICB0aGlzLkNPTU1BQ0hBUiA9IGVudi5HZXRUaG91c2FuZHMoKTtcclxuICAgIHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBlbnYuR2V0U2lnbmlmaWNhbnROdW1TaXplKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYW4gaGV4YWRlY2ltYWwgc3RyaW5nIGZyb20gdGhlIE1hZ2ljIE51bWJlciBmb3IgdGhlIGRhdGEgcmVjb3JkIGluXHJcbiAgLy8vICAgdGhlIFhNTCB0YWcgKHRvIGJlIHNlbnQgdG8gdGhlIE1hZ2ljIFNlcnZlcikuIFRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmdcclxuICAvLy8gICB3aWxsIGFsbHdheXMgYmUgdHdvIHRpbWVzIHRoZSBsZW5ndGggb2YgdGhlIE1hZ2ljIE51bWJlcnMgKGluIGJ5dGVzKVxyXG4gIC8vLyAgIGJlY2F1c2UgZXZlcnkgYnl0ZSBpbiB0aGUgTWFnaWMgTnVtYmVyIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0d29cclxuICAvLy8gICBjaGFyYWN0ZXIgaGV4YWRlY2ltYWwgc3RyaW5nLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgaGV4YWRlY2ltYWwgc3RyaW5nXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICB0b1hNTHJlY29yZCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGhleFN0cjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgKiAyKTtcclxuICAgIGxldCBudW06IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0gPSA1O1xyXG4gICAgZWxzZVxyXG4gICAgICBudW0gPSB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFOyBpKyspIHtcclxuICAgICAgaWYgKGkgPCBudW0pXHJcbiAgICAgICAgaGV4U3RyLkFwcGVuZCgoJzAnICsgKHRoaXMuX2RhdGFbaV0gJiAweEZGKS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBoZXhTdHIuQXBwZW5kKFwiMDBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhleFN0ci5Ub1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJhbnNmb3JtaW5nIGEgZGVjaW1hbCBzdHJpbmcgbnVtYmVyIHRvIGEgTWFnaWMgTnVtYmVyIHVzaW5nIHRoZSBmb3JtYXRcclxuICAvLy8gICBwcm92aWRlZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiQWxwaGFcIj4gIFRoZSBudW1iZXIgaXMgZGVjaW1hbCBzdHJpbmcgZm9ybVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgIFRoZSBwaWN0dXJlIGZvbWF0IHRvIHVzZSBmb3IgdGhlIGV4dHJhY3RpbmcgdGhlIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgZnJvbV9hKEFscGhhOiBzdHJpbmcsIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgaWR4OiBudW1iZXI7XHJcbiAgICBsZXQgZGVjOiBib29sZWFuO1xyXG4gICAgbGV0IGRlY3M6IG51bWJlcjtcclxuICAgIGxldCBkaWdpdDogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IG5vX3BpYzogYm9vbGVhbjtcclxuICAgIGxldCBQb3M6IG51bWJlcjtcclxuICAgIGxldCBTVHlwZTogYm9vbGVhbjtcclxuICAgIGxldCBTUGFydDogYm9vbGVhbjtcclxuICAgIGxldCBTaWduZWQ6IG51bWJlcjtcclxuICAgIGxldCBidWY6IHN0cmluZztcclxuICAgIGxldCBtYXNrOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IGM6IHN0cmluZztcclxuICAgIGxldCBOZ3R2UHJtdDogYm9vbGVhbjtcclxuICAgIGxldCBTY2FuOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IFBidWY6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgaXNfbmVnYXRpdmU6IGJvb2xlYW47XHJcbiAgICBsZXQgbmVnU3RyOiBzdHJpbmc7XHJcbiAgICBsZXQgbmVnUHJlZjogc3RyaW5nO1xyXG4gICAgbGV0IHBvc1ByZWY6IHN0cmluZztcclxuICAgIGxldCBuZWdTdWZmOiBzdHJpbmc7XHJcbiAgICBsZXQgcG9zU3VmZjogc3RyaW5nO1xyXG4gICAgbGV0IHNwZWNpYWxWYWxOZXdQb2xpY3k6IGJvb2xlYW4gPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTcGVjaWFsVmFsTmV3UG9saWN5KCk7XHJcblxyXG4gICAgLy8gUGFyc2UgdGhlIHBpY3R1cmUgZm9ybWF0XHJcbiAgICBub19waWMgPSAocGljID09IG51bGwpO1xyXG4gICAgbGVuID0gMDtcclxuICAgIFNUeXBlID0gZmFsc2U7ICAvLyBQSUNfUFNUViA6IHRydWUsIFBJQ19OR1RWOiBmYWxzZVxyXG4gICAgU1BhcnQgPSBmYWxzZTsgIC8vIFBJQ19QUkVGIDogdHJ1ZSwgUElDX1NVRiA6IGZhbHNlXHJcblxyXG4gICAgaWYgKCFub19waWMpIHtcclxuICAgICAgbWFzayA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICAgIGlmICghc3BlY2lhbFZhbE5ld1BvbGljeSlcclxuICAgICAgICBpZiAoQWxwaGEubGVuZ3RoID4gcGljLmdldE1hc2tTaXplKCkpXHJcbiAgICAgICAgICBBbHBoYSA9IEFscGhhLnN1YnN0cigwLCBwaWMuZ2V0TWFza1NpemUoKSk7XHJcbiAgICAgIE5ndHZQcm10ID0gcGljLmlzTmVnYXRpdmUoKTtcclxuICAgICAgaWYgKE5ndHZQcm10KSB7XHJcbiAgICAgICAgbmVnUHJlZiA9IHBpYy5nZXROZWdQcmVmXygpO1xyXG4gICAgICAgIHBvc1ByZWYgPSBwaWMuZ2V0UG9zUHJlZl8oKTtcclxuICAgICAgICBuZWdTdWZmID0gcGljLmdldE5lZ1N1ZmZfKCk7XHJcbiAgICAgICAgcG9zU3VmZiA9IHBpYy5nZXRQb3NTdWZmXygpO1xyXG5cclxuICAgICAgICBpZiAobmVnUHJlZi5sZW5ndGggPT09IHBvc1ByZWYubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAobmVnUHJlZi5sZW5ndGggPT09IDAgfHwgbmVnUHJlZiA9PT0gcG9zUHJlZilcclxuICAgICAgICAgICAgU1BhcnQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIFBJQ19TVUZcclxuICAgICAgICAgIGVsc2UgU1BhcnQgPSB0cnVlOyAvLyBQSUNfUFJFRlxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIFNQYXJ0ID0gdHJ1ZTsgLy8gUElDX1BSRUZcclxuXHJcbiAgICAgICAgaWYgKFNQYXJ0KVxyXG4gICAgICAgICAgbmVnU3RyID0gbmVnUHJlZjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBuZWdTdHIgPSBuZWdTdWZmO1xyXG5cclxuICAgICAgICBpZiAobmVnU3RyLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgIFNUeXBlID0gdHJ1ZTtcclxuICAgICAgICAvLyBQSUNfUE9TSVRJVkVcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBTVHlwZSA9IGZhbHNlOyAvLyBQSUNfTkVHQVRJVkVcclxuXHJcbiAgICAgICAgaWYgKFNUeXBlKVxyXG4gICAgICAgICAgU2NhbiA9IChTUGFydCA/IHBvc1ByZWYgOiBwb3NTdWZmKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBTY2FuID0gKFNQYXJ0ID8gbmVnUHJlZiA6IG5lZ1N1ZmYpO1xyXG4gICAgICAgIGxlbiA9IFNjYW4ubGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcGljID0gbmV3IFBJQyhcIlwiLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIGNvbXBJZHgpO1xyXG4gICAgICBOZ3R2UHJtdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExvY2FsaXplIHZhcmlhYmxlcyBhbmQgZmxhZ3NcclxuICAgIGRlYyA9IGZhbHNlO1xyXG4gICAgZGVjcyA9IDA7XHJcbiAgICBkaWdpdCA9IDA7XHJcbiAgICBTaWduZWQgPSAwO1xyXG5cclxuICAgIC8vIFNwZWNpYWxWYWxOZXdQb2xpY3kgPSBZXHJcbiAgICAvLyBMb29wIG9uIGlucHV0IHN0cmluZyBvZiBudW1iZXJzIGFuZCBtYXRjaCB0aGVtIGFnYWluc3QgdGhlIHBpY3R1cmUgbWFza1xyXG4gICAgLy8gSXQgbWF5IGhhcHBlbiB0aGF0IHRoZSBwaWN0dXJlIG1hc2sgaXMgc21hbGxlciB0aGFuIHJlY2VpdmVkIG51bWJlciBzdHJpbmdcclxuICAgIC8vIEZvciBleGFtcGxlLCBpZiB0aGUgc3RyaW5nIHJlY2VpdmVkIGlzICcxMjM0LjU2JyB3aGVyZWFzIHBpY3R1cmUgaXMgJzIuMSdcclxuICAgIC8vIHRoZW4gdGhlIGNoYXJhY3RlcnMgdG8gcGFyc2UgZnJvbSB0aGUgaW5wdXQgc3RyaW5nIGlzICcxMjM0LjUnIGkuZS4gIyBkaWdpdHNcclxuICAgIC8vIHNwZWNpZmllZCBpbiBwaWN0dXJlIGJlZm9yZSB0aGUgZGVjaW1hbCBzaG91bGQgYmUgaWdub3JlZC4gUGFyc2luZyBzaG91bGRcclxuICAgIC8vIGNvbnRpbnVlIHRpbGwgIyBvZiBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCBpbiBwaWN0dXJlIG1hdGNoIHdpdGggdGhvc2UgaW5cclxuICAgIC8vIHRoZSBpbnB1dCBzdHJpbmcgb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nXHJcbiAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IEFscGhhLmxlbmd0aDsgKSB7XHJcbiAgICAgIC8vIEFzIG1lbnRpb25lZCBhYm92ZSwgY29udGludWUgcGFyc2luZyBldmVuIGlmIG1hc2sgbGVuZ3RoIGFzIGV4aGF1c3RlZCBieSBjaGVja2luZ1xyXG4gICAgICAvLyBpZHggPj0gcGljLm1hc2tfc2l6ZS4gSG93ZXZlciwgYXMgbG9uZyBhcyBtYXNrIGxlbmd0aCBpcyB2YWxpZCwgbWF0Y2ggdGhlIG1hc2tcclxuICAgICAgaWYgKG5vX3BpYyB8fCAoc3BlY2lhbFZhbE5ld1BvbGljeSAmJiBpZHggPj0gcGljLmdldE1hc2tTaXplKCkpICB8fCBtYXNrW2lkeF0gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKSkge1xyXG4gICAgICAgIGMgPSBBbHBoYVtpZHhdO1xyXG4gICAgICAgIGlmIChzcGVjaWFsVmFsTmV3UG9saWN5KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIC8vIHN0b3AgcGFyc2luZyBpZiAjIG9mIGRlY3MgYWxyZWFkeSByZWFjaGVkXHJcbiAgICAgICAgICBpZiAoZGVjICYmIGRlY3MgPT09IHBpYy5nZXREZWMoKSlcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gRmluYWxseSwgc3RvcCBwYXJzaW5nIG9uIG1hdGNoaW5nIHJlcXVpcmVkIG5vLiBvZiBkZWNpbWFsIGRpZ2l0c1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGMpKSB7XHJcbiAgICAgICAgICBkaWdpdCsrO1xyXG4gICAgICAgICAgUGJ1ZiArPSBjO1xyXG4gICAgICAgICAgaWYgKGRlYylcclxuICAgICAgICAgICAgZGVjcysrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjID09PSB0aGlzLkRFQ0lNQUxDSEFSKSB7XHJcbiAgICAgICAgICBQYnVmICs9IHRoaXMuREVDSU1BTENIQVI7XHJcbiAgICAgICAgICBkZWMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjICE9PSB0aGlzLkNPTU1BQ0hBUikge1xyXG4gICAgICAgICAgaWYgKE5ndHZQcm10ICYmIFNpZ25lZCA9PT0gMCkge1xyXG4gICAgICAgICAgICBTaWduZWQgPSAxO1xyXG4gICAgICAgICAgICBmb3IgKGkgPSBpZHgsIFBvcyA9IDA7IGkgPD0gQWxwaGEubGVuZ3RoICYmIFBvcyA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5vX3BpYyB8fCBtYXNrW2ldID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTikpIHtcclxuICAgICAgICAgICAgICAgIGMgPSBBbHBoYVtpXTtcclxuICAgICAgICAgICAgICAgIGlmIChjICE9PSBTY2FuW1Bvc10pIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICctJyAmJiAhU1R5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnKycgJiYgU1R5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIFNpZ25lZCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFBvcysrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoUG9zID4gMCAmJiBQb3MgPCBsZW4pXHJcbiAgICAgICAgICAgICAgU2lnbmVkID0gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gUUNSICMgMzA5NjIzIDogSWYgcHJlZml4L3N1ZmZpeCBzdHJpbmdzIGNvbnRhaW5zIGRpZ2l0cyBpbiBpdCwgaXQgaXMgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIGRhdGEuXHJcbiAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGl0IHNraXAgdGhlIHByZWZpeCAvIHN1ZmZpeCBzdHJpbmdzIHdoaWxlIGV4dHJhY3RpbmcgdGhlIGRhdGEgcGFydCB0byBidWlsZCBOVU1fVFlQRS5cclxuICAgICAgICAgICAgaWYgKGlkeCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGlmIChwaWMuZ2V0TmVnUHJlZl8oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgaWYgKEFscGhhLnN0YXJ0c1dpdGgocGljLmdldE5lZ1ByZWZfKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlkeCArPSBwaWMuZ2V0TmVnUHJlZl8oKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChwaWMuZ2V0UG9zUHJlZl8oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgaWYgKEFscGhhLnN0YXJ0c1dpdGgocGljLmdldFBvc1ByZWZfKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlkeCArPSBwaWMuZ2V0UG9zUHJlZl8oKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChwaWMuZ2V0TmVnU3VmZl8oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgaWYgKEFscGhhLmVuZHNXaXRoKHBpYy5nZXROZWdTdWZmXygpKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZHggKz0gcGljLmdldE5lZ1N1ZmZfKCkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocGljLmdldFBvc1N1ZmZfKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIGlmIChBbHBoYS5lbmRzV2l0aChwaWMuZ2V0UG9zU3VmZl8oKSkpIHtcclxuICAgICAgICAgICAgICAgICAgaWR4ICs9IHBpYy5nZXRQb3NTdWZmXygpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWR4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFNpZ25lZCA9PT0gMCAmJiBTVHlwZSlcclxuICAgICAgU2lnbmVkID0gMTtcclxuXHJcbiAgICAvLyBSZXR1cm4gcmVzdWx0IG9mIGRlY29kZWQgZGlnaXRzXHJcbiAgICBpc19uZWdhdGl2ZSA9IChTaWduZWQgPT09IDEgJiYgIVNUeXBlKSB8fCAoU2lnbmVkICE9PSAxICYmIFNUeXBlKTtcclxuICAgIGlmIChkZWNzID4gMCB8fCBkaWdpdCA+IDkpIHtcclxuICAgICAgYnVmID0gKGlzX25lZ2F0aXZlID8gJy0nIDogJyAnKSArIFBidWY7XHJcbiAgICAgIHRoaXMubnVtXzRfYV9zdGQoYnVmKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5OVU1fNF9MT05HKChpc19uZWdhdGl2ZSA/IC0xIDogMSkgKiB0aGlzLmFfMl9sb25nKFBidWYpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBFeHRyYWN0aW5nIGEgbm9uIGxvbmcgbnVtYmVyIGZyb20gYSBkZWNpbWFsIHN0cmluZyBudW1iZXIgKG51bWJlcnMgd2l0aFxyXG4gIC8vLyAgIGRlY2ltYWwgcG9pbnQsIGV0Yy4uLilcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+ICBUaGUgZGVjaW1hbCBzdHJpbmcgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgbnVtXzRfYV9zdGQoc3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBkaWdzdHI6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgZGlnbGVuOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHdob2xlczogbnVtYmVyID0gMDtcclxuICAgIGxldCBkZWNzOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGlzRGVjOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaXNtaW51czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG5cclxuICAgIGZvciAocG9zID0gMDsgcG9zIDwgc3RyLmxlbmd0aDsgcG9zKyspIHtcclxuICAgICAgbGV0IGM6IHN0cmluZyA9IHN0ci5jaGFyQXQocG9zKTtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGMpKSB7XHJcbiAgICAgICAgaWYgKGRpZ2xlbiA+IDAgfHwgYyAhPT0gJzAnKSB7XHJcbiAgICAgICAgICBkaWdsZW4rKztcclxuICAgICAgICAgIGRpZ3N0ciA9IGRpZ3N0ciArIGM7XHJcbiAgICAgICAgICBpZiAoIWlzRGVjKVxyXG4gICAgICAgICAgICB3aG9sZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNEZWMpXHJcbiAgICAgICAgICBkZWNzID0gZGVjcyArIDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYyA9PT0gdGhpcy5ERUNJTUFMQ0hBUilcclxuICAgICAgICBpc0RlYyA9IHRydWU7XHJcbiAgICAgIGVsc2UgaWYgKGMgPT09ICctJylcclxuICAgICAgICBpc21pbnVzID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLk5VTV9aRVJPKCk7XHJcbiAgICBpZiAoZGlnbGVuID09PSAwKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKCgod2hvbGVzICsgZGVjcykgJiAxKSA+IDApIHtcclxuICAgICAgdGhpcy5fZGF0YVsxXSA9IE5VTV9UWVBFLnRvU0J5dGUoZGlnc3RyLmNoYXJDb2RlQXQoMCkgLSAnMCcuY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgIHBvcyA9IDE7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHBvcyA9IDA7XHJcblxyXG4gICAgbGV0IG51bXB0cjogbnVtYmVyID0gMSArIHBvcztcclxuICAgIGRpZ2xlbiA9IE1hdGgubWluKGRpZ2xlbiwgKHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSAqIDIgLSBwb3MpO1xyXG4gICAgd2hpbGUgKHBvcyA8IGRpZ2xlbikge1xyXG4gICAgICBsZXQgZGlnaXQxOiBudW1iZXIgPSBOVU1fVFlQRS50b1NCeXRlKChkaWdzdHIuY2hhckNvZGVBdChwb3MrKykgLSAnMCcuY2hhckNvZGVBdCgwKSkpO1xyXG4gICAgICBsZXQgZGlnaXQyOiBudW1iZXIgPSBOVU1fVFlQRS50b1NCeXRlKCgocG9zIDwgZGlnbGVuKVxyXG4gICAgICAgID8gKGRpZ3N0ci5jaGFyQ29kZUF0KHBvcysrKSAtICcwJy5jaGFyQ29kZUF0KDApKVxyXG4gICAgICAgIDogJ1xcMCcuY2hhckNvZGVBdCgwKSkpO1xyXG4gICAgICB0aGlzLl9kYXRhW251bXB0cisrXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaWdpdDEpICogMTAgKyBOVU1fVFlQRS50b1VCeXRlKGRpZ2l0MikpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aG9sZXMgPiAwKVxyXG4gICAgICB0aGlzLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZSg8bnVtYmVyPk5VTV9UWVBFLkVYUF9CSUFTICsgKCh3aG9sZXMgKyAxKSA+PiAxKSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKDxudW1iZXI+TlVNX1RZUEUuRVhQX0JJQVMgLSAoZGVjcyA+PiAxKSk7XHJcblxyXG4gICAgaWYgKGlzbWludXMpXHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gfD0gTlVNX1RZUEUuU0lHTl9NQVNLO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zbGF0aW5nIGEgbG9uZyB2YWx1ZSBpbnRvIGFuIGludGVybmFsIE1hZ2ljIE51bWJlciBmb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxvbmdWYWxcIj4gIFRoZSBudW1iZXIgdG8gYmUga2VwdFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIE5VTV80X0xPTkcobG9uZ1ZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgaGV4U3RyOiBzdHJpbmc7XHJcbiAgICB0aGlzLk5VTV9aRVJPKCk7XHJcblxyXG4gICAgaWYgKGxvbmdWYWwgIT09IDApIHtcclxuICAgICAgaWYgKGxvbmdWYWwgPCAwKVxyXG4gICAgICAgIGxvbmdWYWwgPSAoMHhGRkZGRkZGRiArIGxvbmdWYWwgKyAxKTtcclxuXHJcbiAgICAgIGhleFN0ciA9IGxvbmdWYWwudG9TdHJpbmcoMTYpO1xyXG4gICAgICBpZiAobG9uZ1ZhbCA+IDApXHJcbiAgICAgICAgaGV4U3RyID0gTlVNX1RZUEUuSU5UX1pFUk9fSEVYLnN1YnN0cihoZXhTdHIubGVuZ3RoKSArIGhleFN0cjtcclxuXHJcbiAgICAgIHRoaXMuX2RhdGFbMV0gPSBOVU1fVFlQRS50b1NCeXRlKHBhcnNlSW50KGhleFN0ci5zdWJzdHIoNiwgKDgpIC0gKDYpKSwgMTYpKTtcclxuICAgICAgdGhpcy5fZGF0YVsyXSA9IE5VTV9UWVBFLnRvU0J5dGUocGFyc2VJbnQoaGV4U3RyLnN1YnN0cig0LCAoNikgLSAoNCkpLCAxNikpO1xyXG4gICAgICB0aGlzLl9kYXRhWzNdID0gTlVNX1RZUEUudG9TQnl0ZShwYXJzZUludChoZXhTdHIuc3Vic3RyKDIsICg0KSAtICgyKSksIDE2KSk7XHJcbiAgICAgIHRoaXMuX2RhdGFbNF0gPSBOVU1fVFlQRS50b1NCeXRlKHBhcnNlSW50KGhleFN0ci5zdWJzdHIoMCwgKDIpIC0gKDApKSwgMTYpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXR0aW5nIGEgbG9uZyB2YWx1ZSBmcm9tIGEgZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbG9uZyB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbG9uZyB2YWx1ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxvbmcgbnVtYmVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBhXzJfbG9uZyhzdHI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgbjogbnVtYmVyID0gMDtcclxuICAgIGZvciAobGV0IHBvczogbnVtYmVyID0gMDsgcG9zIDwgc3RyLmxlbmd0aDsgcG9zKyspIHtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHN0ci5jaGFyQXQocG9zKSkpIHtcclxuICAgICAgICBuID0gbiAqIDEwO1xyXG4gICAgICAgIG4gPSBuICsgc3RyLmNoYXJDb2RlQXQocG9zKSAtICcwJy5jaGFyQ29kZUF0KDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBBY3RpdmF0aW5nIHRoZSBwcm9jZXNzIG9mIGJ1aWxkaW5nIGEgZGVjaW1hbCBzdHJpbmcgYnkgdGhlIGZvcm1hdCBpbmRpY2F0ZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+YSBudW1lcmljIHBpY3R1cmUgdG8gdXNlIGZvciBidWlsZGluZyB0aGUgZGlzcGxheSBzdHJpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICB0b19hKHBpYzogUElDKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRvX2FfcGljKHBpYyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybXMgdGhlIHByb2Nlc3Mgb2YgYnVpbGRpbmcgYSBkZWNpbWFsIHN0cmluZyBieSB0aGUgcGljdHVyZSBwcm92aWRlZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj4gIHRoZSBwaWN0dXJlIGNsYXNzIGhvbGRpbmcgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIGZvcm0gb2YgdGhlIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIHRvX2FfcGljKHBpYzogUElDKTogc3RyaW5nIHtcclxuICAgIGxldCBidWY6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oMTI4KTtcclxuICAgIGxldCByZW1haW5zOiBudW1iZXI7XHJcbiAgICBsZXQgc2lnbl9uOiBib29sZWFuO1xyXG4gICAgbGV0IHByZWZfbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgc3VmZl9sZW46IG51bWJlcjtcclxuICAgIGxldCBwcmVmX3N0cjogU3RyaW5nO1xyXG4gICAgbGV0IHN1ZmZfc3RyOiBTdHJpbmc7XHJcbiAgICBsZXQgc3RyX3BvczogbnVtYmVyO1xyXG4gICAgbGV0IHN0cl9sZW46IG51bWJlcjtcclxuICAgIGxldCBvdXRfcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgb3V0X2J1Zjogc3RyaW5nW107XHJcbiAgICBsZXQgdG1wX291dF9idWY6IHN0cmluZ1tdO1xyXG4gICAgbGV0IHBhZDogc3RyaW5nO1xyXG4gICAgbGV0IGxlZnQ6IGJvb2xlYW47XHJcbiAgICBsZXQgcGZpbGw6IGJvb2xlYW47XHJcbiAgICBsZXQgbWFza19jaGFyczogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IHJlczogc3RyaW5nW107XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IGlzT3V0OiBib29sZWFuO1xyXG4gICAgbGV0IG91dFZhbDogc3RyaW5nW107XHJcblxyXG4gICAgbGVuID0gcGljLmdldE1hc2tTaXplKCk7XHJcblxyXG4gICAgLy8gU2V0IHNpZ25zIG9mIG51bWJlclxyXG4gICAgc2lnbl9uID0gKHBpYy5pc05lZ2F0aXZlKCkgJiYgdGhpcy5udW1faXNfbmVnKCkgPyBmYWxzZSA6IHRydWUpO1xyXG5cclxuICAgIHByZWZfbGVuID0gKHNpZ25fbiA/IHBpYy5nZXRQb3NQcmVmXygpLmxlbmd0aCA6IHBpYy5nZXROZWdQcmVmXygpLmxlbmd0aCk7IC8vIHBpY19zaWduW1BJQ19QUkVGXS5sZW47XHJcbiAgICBzdWZmX2xlbiA9IChzaWduX24gPyBwaWMuZ2V0UG9zU3VmZl8oKS5sZW5ndGggOiBwaWMuZ2V0TmVnU3VmZl8oKS5sZW5ndGgpOyAvLyBwaWNfc2lnbltQSUNfU1VGRl0ubGVuO1xyXG5cclxuICAgIGxlZnQgPSBwaWMuaXNMZWZ0KCk7XHJcbiAgICBwZmlsbCA9IHBpYy5wYWRGaWxsKCk7XHJcbiAgICBtYXNrX2NoYXJzID0gcGljLmdldE1hc2tDaGFycygpO1xyXG4gICAgb3V0VmFsID0gTlN0cmluZy5Ub0NoYXJBcnJheShwaWMuZ2V0TWFzaygpLnN1YnN0cigwLCBsZW4pKTtcclxuICAgIG91dF9idWYgPSAoKGxlZnQgfHwgKG1hc2tfY2hhcnMgPiAwKSkgPyBidWYgOiBvdXRWYWwpO1xyXG4gICAgaWYgKGxlZnQpXHJcbiAgICB7XHJcbiAgICAgIGZvciAoaT0wOyBpIDwgb3V0X2J1Zi5sZW5ndGg7IGkrKyApXHJcbiAgICAgICAgb3V0X2J1ZltpXSA9ICg8c3RyaW5nPicwJy50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH1cclxuICAgIGlzT3V0ID0gKChsZWZ0IHx8IChtYXNrX2NoYXJzID4gMCkpID8gZmFsc2UgOiB0cnVlKTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRvIHN0cmluZ1xyXG4gICAgc3RyX3BvcyA9IHByZWZfbGVuO1xyXG4gICAgc3RyX2xlbiA9IGxlbiAtIHByZWZfbGVuIC0gc3VmZl9sZW47XHJcbiAgICB0bXBfb3V0X2J1ZiA9IG91dF9idWYuc2xpY2Uoc3RyX3Bvcywgb3V0X2J1Zi5sZW5ndGgpO1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmVtYWlucyA9IHRoaXMubnVtX2xfMl9zdHIodGhpcy5OVU1fTE9ORygpLCB0bXBfb3V0X2J1Ziwgc3RyX2xlbiwgcGljKTtcclxuICAgIGVsc2VcclxuICAgICAgICByZW1haW5zID0gdGhpcy50b19zdHIodG1wX291dF9idWYsIHN0cl9sZW4sIHBpYyk7XHJcblxyXG4gICAgZm9yIChpID0gc3RyX3BvczsgaSA8IG91dF9idWYubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgb3V0X2J1ZltpXSA9IHRtcF9vdXRfYnVmW2kgLSBzdHJfcG9zXTtcclxuICAgIHRtcF9vdXRfYnVmID0gbnVsbDtcclxuXHJcbiAgICBpZiAocmVtYWlucyA8IG1hc2tfY2hhcnMpIHtcclxuICAgICAgICByZXMgPSBuZXcgQXJyYXkobGVuKTtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgIHJlc1tpXSA9IChyZW1haW5zID09PSBOVU1fVFlQRS5aRVJPX0ZJTEwgPyBwaWMuZ2V0WmVyb1BhZCgpIDogJyonKTtcclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKHJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1hc2tfY2hhcnMgPiAwKSB7XHJcbiAgICAgIHJlbWFpbnMgLT0gbWFza19jaGFycztcclxuICAgICAgc3RyX3BvcyArPSBtYXNrX2NoYXJzO1xyXG4gICAgICBzdHJfbGVuIC09IG1hc2tfY2hhcnM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGFrZSBjYXJlIG9mIHBhZCBhZnRlciBhbmQgYmVmb3JlIG51bWJlclxyXG4gICAgaWYgKHBmaWxsKSB7XHJcbiAgICAgIHBhZCA9IHBpYy5nZXRQYWQoKTtcclxuICAgICAgaWYgKGxlZnQpIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtYWluczsgaSsrKVxyXG4gICAgICAgICAgb3V0X2J1ZiBbc3RyX3BvcyArIHN0cl9sZW4gKyBpXSA9IHBhZDtcclxuICAgICAgICBzdHJfcG9zICs9IHJlbWFpbnM7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbWFpbnM7IGkrKylcclxuICAgICAgICAgIG91dF9idWZbc3RyX3BvcyArIGldID0gcGFkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcGFkID0gJyAnO1xyXG4gICAgICBzdHJfcG9zICs9IHJlbWFpbnM7XHJcbiAgICAgIHN0cl9sZW4gLT0gcmVtYWlucztcclxuICAgIH1cclxuXHJcbiAgICAvLyB0YWtlIGNhcmUgb2Ygc3VmZml4IGFuZCBwcmVmaXhcclxuICAgIGlmIChzdWZmX2xlbiA+IDApIHtcclxuICAgICAgc3VmZl9zdHIgPSBzaWduX24gPyBwaWMuZ2V0UG9zU3VmZl8oKSA6IHBpYy5nZXROZWdTdWZmXygpO1xyXG4gICAgICBpZiAoc3VmZl9sZW4gPT09IDEpXHJcbiAgICAgICAgb3V0X2J1ZltzdHJfcG9zICsgc3RyX2xlbl0gPSBzdWZmX3N0clswXTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHN1ZmZfbGVuOyBpKyspXHJcbiAgICAgICAgICBvdXRfYnVmW3N0cl9wb3MgKyBzdHJfbGVuICsgaV0gPSBzdWZmX3N0cltpXTtcclxuICAgICAgfVxyXG4gICAgICBzdHJfbGVuICs9IHN1ZmZfbGVuO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZWZfbGVuID4gMCkge1xyXG4gICAgICBzdHJfcG9zIC09IHByZWZfbGVuO1xyXG4gICAgICBzdHJfbGVuICs9IHByZWZfbGVuO1xyXG4gICAgICBwcmVmX3N0ciA9IHNpZ25fbiA/IHBpYy5nZXRQb3NQcmVmXygpIDogcGljLmdldE5lZ1ByZWZfKCk7XHJcbiAgICAgIGlmIChwcmVmX2xlbiA9PT0gMSlcclxuICAgICAgICAgIG91dF9idWZbc3RyX3Bvc10gPSBwcmVmX3N0clswXTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmVmX2xlbjsgaSsrKVxyXG4gICAgICAgICAgb3V0X2J1ZltzdHJfcG9zICsgaV0gPSBwcmVmX3N0cltpXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzdHJfcG9zIG5vdyBwb2ludHMgdG8gYmVnaW5uaW5nIG9mIHJlc3VsdCBzdHJcclxuICAgIC8vIHRha2UgY2FyZSBvZiBmaW5hbCBwYWQgYWZ0ZXIgYW5kIGJlZm9yZSBudW1iZXJcclxuICAgIGlmICghcGZpbGwpIHtcclxuICAgICAgbGV0IG91dEJ1ZkxlbjogbnVtYmVyID0gb3V0X2J1Zi5sZW5ndGg7XHJcblxyXG4gICAgICBpZiAobGVmdCkge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1haW5zICYmIChzdHJfcG9zICsgc3RyX2xlbiArIGkgPCBvdXRCdWZMZW4pOyBpKyspXHJcbiAgICAgICAgICBvdXRfYnVmW3N0cl9wb3MgKyBzdHJfbGVuICsgaV0gPSBwYWQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc3RyX3BvcyAtPSByZW1haW5zO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtYWlucyAmJiAoc3RyX3BvcyArIGkgPCBvdXRCdWZMZW4pOyBpKyspXHJcbiAgICAgICAgICBvdXRfYnVmW3N0cl9wb3MgKyBpXSA9IHBhZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlc3VsdCBidWlsdCwgZmluaXNoXHJcbiAgICBpZiAoaXNPdXQpXHJcbiAgICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhvdXRfYnVmKTtcclxuXHJcbiAgICAvLyBDb3B5IHJlc3VsdCB0byBvdXRwdXQgYnVmZmVyXHJcbiAgICBpZiAobWFza19jaGFycyA9PT0gMCkge1xyXG4gICAgICBpZiAoc3RyX3BvcyArIGxlbiA+IG91dF9idWYubGVuZ3RoKVxyXG4gICAgICAgIGxlbiA9IG91dF9idWYubGVuZ3RoIC0gc3RyX3BvcztcclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKG91dF9idWYsIHN0cl9wb3MsICBsZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAob3V0X3BvcyA9IDA7IG91dF9wb3MgPCBsZW4gJiYgc3RyX3BvcyA8IG91dF9idWYubGVuZ3RoOyBvdXRfcG9zKyspXHJcbiAgICAgIGlmIChvdXRWYWxbb3V0X3Bvc10gPT09IFN0cmluZy5mcm9tQ2hhckNvZGUoUElDSW50ZXJmYWNlLlBJQ19OKSlcclxuICAgICAgICBvdXRWYWxbb3V0X3Bvc10gPSBvdXRfYnVmW3N0cl9wb3MrK107XHJcblxyXG4gICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKG91dFZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVsZGluZyB0aGUgYmFzaWMgZGVjaW1hbCBzdHJpbmcgbnVtYmVyIGZyb20gYSBsb25nIHZhbHVlICh3aXRob3V0XHJcbiAgLy8vICAgdGhlIHNwZWNpYWwgcGljdHVyZSBmZWF0dXJlcykuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bVwiPiAgVGhlIG51bWJlciB0byBiZSB0cmFuc2xhdGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gIFRoZSBtYXNrIHRvIHVzZSBmb3IgYnVpbGRpbmcgdGhlIHN0cmluZyBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPGxlbj4gICAgbGVuICAgdGhlIGxlbiB0byB1c2UgaW4gdGhlIHN0ciBjaGFyIGFycmF5IDwvbGVuPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICBUaGUgcGljdHVyZSBjbGFzcyBob2xkaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZ1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIG51bV9sXzJfc3RyKG51bTogbnVtYmVyLCBzdHI6IHN0cmluZ1tdLCBsZW46IG51bWJlciwgcGljOiBQSUMpOiBudW1iZXIge1xyXG4gICAgbGV0IGNvbW1hczogYm9vbGVhbjtcclxuICAgIGxldCBkaWdpdHM6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgZGVjczogbnVtYmVyO1xyXG4gICAgbGV0IGo6IG51bWJlcjtcclxuXHJcbiAgICBpZiAobnVtIDwgMClcclxuICAgICAgbnVtID0gLW51bTtcclxuICAgIGNvbW1hcyA9IHBpYy53aXRoQ29tYSgpO1xyXG4gICAgZGVjcyA9IE1hdGgubWluKHBpYy5nZXREZWMoKSwgbGVuIC0gMSk7XHJcbiAgICBpZiAoZGVjcyA+IDApXHJcbiAgICAgIGxlbiAtPSAoZGVjcyArIDEpO1xyXG4gICAgaSA9IGxlbjtcclxuXHJcbiAgICAvLyAyNi8xMS85NyBTaGF5IFouIEJ1ZyAjNzcwNTI2IC0gSWYgVGhlIGRlY2ltYWwgcG9pbnQgaXMgdGhlIGZpcnN0XHJcbiAgICAvLyBpbiB0aGUgcGljdHVyZSdzIGZvcm1hdCAtIGFzc3VtZSB0aGF0IHRoZSBpbnB1dCB2YWx1ZSBpcyBsZWdhbCAhIVxyXG4gICAgaWYgKG51bSA9PT0gMCAmJiAhcGljLmRlY0luRmlyc3RQb3MoKSkge1xyXG4gICAgICBpZiAocGljLnplcm9GaWxsKCkpXHJcbiAgICAgICAgcmV0dXJuIChOVU1fVFlQRS5aRVJPX0ZJTEwpO1xyXG4gICAgICBpZiAobGVuID09PSAwKVxyXG4gICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcblxyXG4gICAgICBpZiAoaSA+IHN0ci5sZW5ndGgpXHJcbiAgICAgICAgaSA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICBzdHJbLS1pXSA9ICcwJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGVjcyA+IDApIHtcclxuICAgICAgICBzdHJbbGVuXSA9IHRoaXMuREVDSU1BTENIQVI7XHJcbiAgICAgIGZvciAoaiA9IDA7IGogPCBkZWNzOyBqKyspXHJcbiAgICAgICAgc3RyW2xlbiArIDEgKyBqXSA9ICcwJztcclxuICAgIH1cclxuXHJcbiAgICBkaWdpdHMgPSAwO1xyXG4gICAgZm9yICg7IG51bSA+IDA7IG51bSA9IE1hdGguZmxvb3IobnVtIC8gMTApKSB7XHJcbiAgICAgIGktLTtcclxuICAgICAgaWYgKGNvbW1hcykge1xyXG4gICAgICAgIGlmIChkaWdpdHMgPT09IDMpIHtcclxuICAgICAgICAgIGlmIChpIDwgMClcclxuICAgICAgICAgICAgcmV0dXJuIChOVU1fVFlQRS5OT19ST09NKTtcclxuICAgICAgICAgIGRpZ2l0cyA9IDA7XHJcbiAgICAgICAgICBzdHJbaS0tXSA9IHRoaXMuQ09NTUFDSEFSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkaWdpdHMrKztcclxuICAgICAgfVxyXG4gICAgICBpZiAoaSA8IDApXHJcbiAgICAgICAgcmV0dXJuIChOVU1fVFlQRS5OT19ST09NKTtcclxuICAgICAgc3RyW2ldID0gKChudW0gJSAxMCkudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVsZGluZyB0aGUgYmFzaWMgZGVjaW1hbCBzdHJpbmcgbnVtYmVyIGZyb20gYSBub24gbG9uZyB2YWx1ZSAod2l0aG91dFxyXG4gIC8vLyAgIHRoZSBzcGVjaWFsIHBpY3R1cmUgZmVhdHVyZXMpLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gIFRoZSBtYXNrIHRvIHVzZSBmb3IgYnVpbGRpbmcgdGhlIHN0cmluZyBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPGxlbj4gICAgbGVuICAgdGhlIGxlbiB0byB1c2UgaW4gdGhlIHN0ciBjaGFyIGFycmF5IDwvbGVuPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICBUaGUgcGljdHVyZSBjbGFzcyBob2xkaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZ1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIHRvX3N0cihzdHI6IHN0cmluZ1tdLCBsZW46IG51bWJlciwgcGljOiBQSUMpOiBudW1iZXIge1xyXG4gICAgbGV0IHRtcDogTlVNX1RZUEU7XHJcbiAgICBsZXQgY29tbWFzOiBib29sZWFuO1xyXG4gICAgbGV0IGRpZ2l0czogbnVtYmVyO1xyXG4gICAgbGV0IGRlY3BvczogbnVtYmVyO1xyXG4gICAgbGV0IGxhc3Q6IG51bWJlcjtcclxuICAgIGxldCBmaXJzdDogbnVtYmVyO1xyXG4gICAgbGV0IGo6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgZGVjczogbnVtYmVyO1xyXG4gICAgbGV0IG51bV9jaGFyOiBudW1iZXI7XHJcblxyXG4gICAgY29tbWFzID0gcGljLndpdGhDb21hKCk7XHJcbiAgICBkZWNzID0gcGljLmdldERlYygpO1xyXG4gICAgaWYgKGRlY3MgPj0gbGVuKVxyXG4gICAgICBkZWNzID0gbGVuIC0gMTtcclxuXHJcbiAgICB0bXAgPSBuZXcgTlVNX1RZUEUodGhpcyk7XHJcbiAgICB0bXAucm91bmQoZGVjcyk7XHJcbiAgICBpZiAodG1wLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJldHVybiB0bXAubnVtX2xfMl9zdHIodG1wLk5VTV9MT05HKCksIHN0ciwgbGVuLCBwaWMpO1xyXG5cclxuICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiB0bXAuX2RhdGFbMF0gPT09IDApXHJcbiAgICAgIHJldHVybiAoTlVNX1RZUEUuWkVST19GSUxMKTtcclxuXHJcbiAgICBpID0gbGVuIC0gMTtcclxuICAgIGRpZ2l0cyA9IDA7XHJcbiAgICBkZWNwb3MgPSAoKHRtcC5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spIC0gTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSAqIDI7XHJcbiAgICBsYXN0ID0gZGVjcG9zIC0gMSArIGRlY3M7XHJcbiAgICBmaXJzdCA9IGRlY3BvcyAtIDE7XHJcbiAgICBpZiAoZmlyc3QgPiAyKVxyXG4gICAgICBmaXJzdCA9ICh0bXAuX2RhdGFbMV0gPCAxMCkgPyAzIDogMjtcclxuXHJcbiAgICBmb3IgKGogPSBsYXN0OyBqID49IGZpcnN0OyBqLS0pIHtcclxuICAgICAgaWYgKGkgPCAwKVxyXG4gICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcblxyXG4gICAgICBpZiAoY29tbWFzICYmIChqIDwgZGVjcG9zKSkge1xyXG4gICAgICAgIGlmIChkaWdpdHMgPT09IDMpIHtcclxuICAgICAgICAgIGRpZ2l0cyA9IDA7XHJcbiAgICAgICAgICBzdHJbaS0tXSA9IHRoaXMuQ09NTUFDSEFSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkaWdpdHMrKztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSlBOOjE1LzA4LzE5OTYgWWFtYSAoSnBuSUQ6WkEwODE1MDAxKVxyXG4gICAgICAvLyBXaGVuIEZvcm1hdD1cIk4xMkNcIiBhbmQgbnVtIGlzIGJpZ2dlciB0aGFuIDEyIGRpZ2l0cy5cclxuICAgICAgLy8gTUFHSUMgY3J1c2hlcy4gQmVjYXVzZSB0aGUgdmFyIGkgYmVjb21lcyBuZWdhdGl2ZS5cclxuICAgICAgaWYgKGkgPCAwKVxyXG4gICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcblxyXG4gICAgICBpZiAoKGogPCAyKSB8fCAoaiA+PSB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFICogMikpXHJcbiAgICAgICAgc3RyW2ktLV0gPSAnMCc7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChpIDwgMClcclxuICAgICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcbiAgICAgICAgbnVtX2NoYXIgPSB0bXAuX2RhdGFbaiA+PiAxXTtcclxuICAgICAgICBzdHJbaS0tXSA9ICgoKGogJiAxKSAhPT0gMCkgPyAobnVtX2NoYXIgJSAxMCkgOiAoTWF0aC5mbG9vcihudW1fY2hhciAvIDEwKSkpLnRvU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChqID09PSBkZWNwb3MpIHtcclxuICAgICAgICBpZiAoaSA8IDApXHJcbiAgICAgICAgICByZXR1cm4gKE5VTV9UWVBFLk5PX1JPT00pO1xyXG4gICAgICAgIHN0cltpLS1dID0gdGhpcy5ERUNJTUFMQ0hBUjtcclxuXHJcbiAgICAgICAgLy8gMjYvMTEvOTcgU2hheSBaLiBCdWcgIzc3MDUyNiAtIElmIFRoZSBkZWNpbWFsIHBvaW50IGlzIHRoZSBmaXJzdFxyXG4gICAgICAgIC8vIGluIHRoZSBwaWN0dXJlJ3MgZm9ybWF0IC0gYXNzdW1lIHRoYXQgdGhlIGlucHV0IHZhbHVlIGlzIGxlZ2FsICFcclxuICAgICAgICBpZiAoaSA8IDAgJiYgcGljLmRlY0luRmlyc3RQb3MoKSlcclxuICAgICAgICAgIHJldHVybiAoMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKGkgKyAxKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtaW5nIGFuIEFkZCBvcGVyYXRpb24gb24gdHdvIG1hZ2ljIG51bWJlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMVwiPiAgdGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMlwiPiAgdGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHJlc3VsdFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGFkZChudW0xOiBOVU1fVFlQRSwgbnVtMjogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgc2lnbjE6IG51bWJlcjtcclxuICAgIGxldCBzaWduMjogbnVtYmVyO1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuICAgIGxldCBsMTogbnVtYmVyO1xyXG4gICAgbGV0IGwyOiBudW1iZXI7XHJcbiAgICBsZXQgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlcjtcclxuICAgIC8vIG51bGwgdmFsdWVzXHJcbiAgICBpZiAobnVtMSA9PT0gbnVsbCB8fCBudW0yID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBTSUdOSUZJQ0FOVF9OVU1fU0laRSA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG4gICAgbGV0IHRtcHJlczogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgb3BlckRhdGE6IE9wZXJEYXRhID0gbmV3IE9wZXJEYXRhKCk7XHJcbiAgICBpZiAobnVtMS5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgIGlmIChudW0yLk5VTV9JU19MT05HKCkpIHtcclxuXHJcbiAgICAgICAgbCA9IGwxID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgIGwgPSAtbDtcclxuXHJcbiAgICAgICAgaWYgKGwgPCAweDQwMDAwMDAwKSB7XHJcbiAgICAgICAgICBsID0gbDIgPSBudW0yLk5VTV9MT05HKCk7XHJcbiAgICAgICAgICBpZiAobCA8IDApXHJcbiAgICAgICAgICAgIGwgPSAtbDtcclxuICAgICAgICAgIGlmIChsIDwgMHg0MDAwMDAwMCkge1xyXG4gICAgICAgICAgICBsMSArPSBsMjtcclxuICAgICAgICAgICAgcmVzLk5VTV80X0xPTkcobDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICAgIH1cclxuICAgICAgbnVtMS5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobnVtMi5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcblxyXG4gICAgc2lnbjEgPSBOVU1fVFlQRS50b1NCeXRlKG51bTEuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0V4cDFfID0gTlVNX1RZUEUudG9TQnl0ZShudW0xLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBzaWduMiA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMi5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBvcGVyRGF0YS5OVU1fRXhwMl8gPSBOVU1fVFlQRS50b1NCeXRlKG51bTIuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIG9wZXJEYXRhLk5VTV9EaWZmXyA9IDxudW1iZXI+KG9wZXJEYXRhLk5VTV9FeHAxXyAtIG9wZXJEYXRhLk5VTV9FeHAyXyk7XHJcblxyXG4gICAgbGV0IGNtcHZhbDogbnVtYmVyID0gb3BlckRhdGEuTlVNX0RpZmZfO1xyXG4gICAgaWYgKGNtcHZhbCA9PT0gMCkge1xyXG4gICAgICBjbXB2YWwgPSBOVU1fVFlQRS50b1VCeXRlKG51bTEuX2RhdGFbMV0pIC0gTlVNX1RZUEUudG9VQnl0ZShudW0yLl9kYXRhWzFdKTtcclxuICAgICAgaWYgKGNtcHZhbCA9PT0gMClcclxuICAgICAgICBjbXB2YWwgPSBOVU1fVFlQRS5tZW1jbXAobnVtMSwgMiwgbnVtMiwgMiwgU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAyKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY21wdmFsID49IDApIHtcclxuICAgICAgaWYgKHNpZ24xID09PSBzaWduMilcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5hZGRfcG9zKG51bTEsIG51bTIsIG9wZXJEYXRhKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRtcHJlcyA9IE5VTV9UWVBFLnN1Yl9wb3MobnVtMSwgbnVtMiwgb3BlckRhdGEpO1xyXG5cclxuICAgICAgaWYgKHRtcHJlcy5fZGF0YVswXSAhPT0gMClcclxuICAgICAgICB0bXByZXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHRtcHJlcy5fZGF0YVswXSB8IHNpZ24xKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgZXhwOiBudW1iZXIgPSBvcGVyRGF0YS5OVU1fRXhwMV87XHJcbiAgICAgIG9wZXJEYXRhLk5VTV9FeHAxXyA9IG9wZXJEYXRhLk5VTV9FeHAyXztcclxuICAgICAgb3BlckRhdGEuTlVNX0V4cDJfID0gZXhwO1xyXG4gICAgICBvcGVyRGF0YS5OVU1fRGlmZl8gPSAtb3BlckRhdGEuTlVNX0RpZmZfO1xyXG5cclxuICAgICAgaWYgKHNpZ24xID09PSBzaWduMilcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5hZGRfcG9zKG51bTIsIG51bTEsIG9wZXJEYXRhKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRtcHJlcyA9IE5VTV9UWVBFLnN1Yl9wb3MobnVtMiwgbnVtMSwgb3BlckRhdGEpO1xyXG5cclxuICAgICAgaWYgKHRtcHJlcy5fZGF0YVswXSAhPT0gMClcclxuICAgICAgICB0bXByZXMuX2RhdGFbMF0gfD0gc2lnbjI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRtcHJlcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtaW5nIGEgU3VidHJhY3Qgb3BlcmF0aW9uIG9uIHR3byBtYWdpYyBudW1iZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXN1bHRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBzdWIobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09PSBudWxsIHx8IG51bTIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCB0bXByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG9wZXJEYXRhOiBPcGVyRGF0YSA9IG5ldyBPcGVyRGF0YSgpO1xyXG5cclxuICAgIGlmIChudW0xLk5VTV9JU19MT05HKCkpIHtcclxuICAgICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICAgIGxldCBsOiBudW1iZXI7XHJcbiAgICAgICAgbGV0IGwxOiBudW1iZXIgPSBsID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgIGwgPSAtbDtcclxuICAgICAgICBpZiAobCA8IDB4NDAwMDAwMDApIHtcclxuICAgICAgICAgIGxldCBsMjogbnVtYmVyID0gbCA9IG51bTIuTlVNX0xPTkcoKTtcclxuICAgICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgICAgbCA9IC1sO1xyXG4gICAgICAgICAgaWYgKGwgPCAweDQwMDAwMDAwKSB7XHJcbiAgICAgICAgICAgIGwxIC09IGwyO1xyXG4gICAgICAgICAgICByZXMuTlVNXzRfTE9ORyhsMSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG51bTIubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBudW0xLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChudW0yLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIG51bTIubnVtXzRfc3RkX2xvbmcoKTtcclxuXHJcbiAgICBsZXQgc2lnbjE6IG51bWJlciA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMS5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBvcGVyRGF0YS5OVU1fRXhwMV8gPSBOVU1fVFlQRS50b1NCeXRlKG51bTEuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIGxldCBzaWduMjogbnVtYmVyID0gTlVNX1RZUEUudG9TQnl0ZShudW0yLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIG9wZXJEYXRhLk5VTV9FeHAyXyA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMi5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0RpZmZfID0gPG51bWJlcj4ob3BlckRhdGEuTlVNX0V4cDFfIC0gb3BlckRhdGEuTlVNX0V4cDJfKTtcclxuXHJcbiAgICBsZXQgY21wdmFsOiBudW1iZXIgPSBvcGVyRGF0YS5OVU1fRGlmZl87XHJcbiAgICBpZiAoY21wdmFsID09PSAwKSB7XHJcbiAgICAgIGNtcHZhbCA9IE5VTV9UWVBFLnRvVUJ5dGUobnVtMS5fZGF0YVsxXSkgLSBOVU1fVFlQRS50b1VCeXRlKG51bTIuX2RhdGFbMV0pO1xyXG4gICAgICBpZiAoY21wdmFsID09PSAwKVxyXG4gICAgICAgIGNtcHZhbCA9IE5VTV9UWVBFLm1lbWNtcChudW0xLCAyLCBudW0yLCAyLCBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKSAtIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjbXB2YWwgPj0gMCkge1xyXG4gICAgICBpZiAoc2lnbjEgPT09IHNpZ24yKVxyXG4gICAgICAgIHRtcHJlcyA9IE5VTV9UWVBFLnN1Yl9wb3MobnVtMSwgbnVtMiwgb3BlckRhdGEpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdG1wcmVzID0gTlVNX1RZUEUuYWRkX3BvcyhudW0xLCBudW0yLCBvcGVyRGF0YSk7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBleHA6IG51bWJlciA9IG9wZXJEYXRhLk5VTV9FeHAxXztcclxuICAgICAgb3BlckRhdGEuTlVNX0V4cDFfID0gb3BlckRhdGEuTlVNX0V4cDJfO1xyXG4gICAgICBvcGVyRGF0YS5OVU1fRXhwMl8gPSBleHA7XHJcbiAgICAgIG9wZXJEYXRhLk5VTV9EaWZmXyA9IC1vcGVyRGF0YS5OVU1fRGlmZl87XHJcbiAgICAgIGlmIChzaWduMSA9PT0gc2lnbjIpIHtcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5zdWJfcG9zKG51bTIsIG51bTEsIG9wZXJEYXRhKTtcclxuICAgICAgICBzaWduMSBePSAoTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdG1wcmVzID0gTlVNX1RZUEUuYWRkX3BvcyhudW0yLCBudW0xLCBvcGVyRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRtcHJlcy5fZGF0YVswXSAhPT0gMClcclxuICAgICAgdG1wcmVzLl9kYXRhWzBdIHw9IHNpZ24xO1xyXG5cclxuICAgIHJldHVybiB0bXByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybWluZyBhIE11bHRpcGx5IG9wZXJhdGlvbiBvbiB0d28gbWFnaWMgbnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgbXVsKG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuXHJcbiAgICBsZXQgZnVsbHJlczogSW50OEFycmF5ID0gbmV3IEludDhBcnJheSgzOCk7XHJcbiAgICBsZXQgcHdyOiBudW1iZXI7XHJcbiAgICBsZXQgbGVuMTogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjI6IG51bWJlcjtcclxuICAgIGxldCBwb3MxOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zMjogbnVtYmVyO1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG4gICAgbGV0IGRpZ2l0MTogbnVtYmVyO1xyXG4gICAgbGV0IHByb2Q6IG51bWJlcjtcclxuICAgIGxldCBjYXJyeTogbnVtYmVyO1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuICAgIGxldCBsMTogbnVtYmVyO1xyXG4gICAgbGV0IGwyOiBudW1iZXI7XHJcbiAgICBsZXQgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBudWxsIHZhbHVlc1xyXG4gICAgaWYgKG51bTEgPT09IG51bGwgfHwgbnVtMiA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKTtcclxuXHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG9wZXJEYXRhOiBPcGVyRGF0YSA9IG5ldyBPcGVyRGF0YSgpO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCB0bXBCeXRlOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKG51bTEuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICBpZiAobnVtMi5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgICAgbCA9IGwxID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgIGwgPSAtbDtcclxuICAgICAgICBpZiAobCA8IDB4QjAwMCkge1xyXG4gICAgICAgICAgbCA9IGwyID0gbnVtMi5OVU1fTE9ORygpO1xyXG4gICAgICAgICAgaWYgKGwgPCAwKVxyXG4gICAgICAgICAgICBsID0gLWw7XHJcbiAgICAgICAgICBpZiAobCA8IDB4QjAwMCkge1xyXG4gICAgICAgICAgICBsMSA9IGwxICogbDI7XHJcbiAgICAgICAgICAgIHJlcy5OVU1fNF9MT05HKGwxKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgICB9XHJcbiAgICAgIG51bTEubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcblxyXG4gICAgb3BlckRhdGEuTlVNX0V4cDFfID0gTlVNX1RZUEUudG9TQnl0ZShudW0xLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBvcGVyRGF0YS5OVU1fRXhwMl8gPSBOVU1fVFlQRS50b1NCeXRlKG51bTIuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIGlmIChvcGVyRGF0YS5OVU1fRXhwMV8gPT09IDAgfHwgb3BlckRhdGEuTlVNX0V4cDJfID09PSAwKSB7XHJcbiAgICAgIHJlcy5OVU1fWkVSTygpO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGVuMSA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMTtcclxuICAgICAgICAgbnVtMS5fZGF0YVtsZW4xXSA9PT0gMDtcclxuICAgICAgICAgbGVuMS0tKSB7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxlbjIgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDE7XHJcbiAgICAgICAgIG51bTIuX2RhdGFbbGVuMl0gPT09IDA7XHJcbiAgICAgICAgIGxlbjItLSkge1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCAoTlVNX1RZUEUuTlVNX1NJWkUgLSAxKSAqIDI7IGkrKylcclxuICAgICAgZnVsbHJlc1tpXSA9IDA7XHJcblxyXG4gICAgcG9zID0gMDtcclxuICAgIGZvciAocG9zMSA9IGxlbjE7IHBvczEgPiAwOyBwb3MxLS0pIHtcclxuICAgICAgcG9zID0gcG9zMSArIGxlbjIgLSAxO1xyXG4gICAgICBkaWdpdDEgPSBudW0xLl9kYXRhW3BvczFdO1xyXG4gICAgICBjYXJyeSA9IDA7XHJcblxyXG4gICAgICBmb3IgKHBvczIgPSBsZW4yOyBwb3MyID4gMDsgcG9zMi0tKSB7XHJcbiAgICAgICAgcHJvZCA9IE5VTV9UWVBFLnRvVUJ5dGUoZGlnaXQxKSAqIE5VTV9UWVBFLnRvVUJ5dGUobnVtMi5fZGF0YVtwb3MyXSkgKyBjYXJyeTtcclxuICAgICAgICBjYXJyeSA9IE1hdGguZmxvb3IocHJvZCAvIDEwMCk7XHJcbiAgICAgICAgZnVsbHJlc1twb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKGZ1bGxyZXNbcG9zXSkgKyBwcm9kICUgMTAwKTtcclxuICAgICAgICB0bXBCeXRlID0gZnVsbHJlc1twb3NdO1xyXG4gICAgICAgIHBvcy0tO1xyXG4gICAgICAgIGlmIChOVU1fVFlQRS50b1VCeXRlKHRtcEJ5dGUpID49IDEwMCkge1xyXG4gICAgICAgICAgZnVsbHJlc1twb3MgKyAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShmdWxscmVzW3BvcyArIDFdKSAtIDEwMCk7XHJcbiAgICAgICAgICBjYXJyeSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmdWxscmVzW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKGNhcnJ5KTtcclxuICAgIH1cclxuXHJcbiAgICBwd3IgPSBOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAxXykgLSBOVU1fVFlQRS5FWFBfQklBUyArIChOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAyXykgLSBOVU1fVFlQRS5FWFBfQklBUyk7XHJcbiAgICBpZiAoZnVsbHJlc1swXSA9PT0gMCkge1xyXG4gICAgICBwb3MrKztcclxuICAgICAgcHdyLS07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKChudW0xLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKSA9PT0gKG51bTIuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spKVxyXG4gICAgICByZXMuX2RhdGFbMF0gPSAwO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXMuX2RhdGFbMF0gPSBOVU1fVFlQRS5TSUdOX01BU0s7XHJcblxyXG4gICAgcmVzLl9kYXRhWzBdIHw9IE5VTV9UWVBFLnRvU0J5dGUocHdyICsgTlVNX1RZUEUuRVhQX0JJQVMpO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMTsgaSsrKVxyXG4gICAgICByZXMuX2RhdGFbMSArIGldID0gZnVsbHJlc1twb3MgKyBpXTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBlcmZvcm1pbmcgYSBNb2Qgb3BlcmF0aW9uIG9uIHR3byBtYWdpYyBudW1iZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXN1bHRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBtb2QobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09PSBudWxsIHx8IG51bTIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBpZiAobnVtMi5udW1faXNfemVybygpKSB7XHJcbiAgICAgIHJlcy5OVU1fWkVSTygpO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChudW0xLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIG51bTEubnVtXzRfc3RkX2xvbmcoKTtcclxuXHJcbiAgICBpZiAobnVtMi5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcblxyXG4gICAgcmVzID0gTlVNX1RZUEUuZGl2KG51bTEsIG51bTIpO1xyXG4gICAgcmVzLm51bV90cnVuYygwKTtcclxuICAgIHJlcyA9IE5VTV9UWVBFLm11bChyZXMsIG51bTIpO1xyXG4gICAgcmVzID0gTlVNX1RZUEUuc3ViKG51bTEsIHJlcyk7XHJcblxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtaW5nIGEgRGl2aWRlIG9wZXJhdGlvbiBvbiB0d28gbWFnaWMgbnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgZGl2KG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGxldCBkaXZpZGVuZDogSW50OEFycmF5ID0gbmV3IEludDhBcnJheSgoTlVNX1RZUEUuTlVNX1NJWkUgLSAxKSAqIDIpO1xyXG4gICAgbGV0IGRpdmlzb3I6IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoTlVNX1RZUEUuTlVNX1NJWkUpO1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjE6IG51bWJlcjtcclxuICAgIGxldCBsZW4yOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zMTogbnVtYmVyO1xyXG4gICAgbGV0IHBvczI6IG51bWJlcjtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBxdW90OiBudW1iZXI7XHJcbiAgICBsZXQgcHJvZDogbnVtYmVyO1xyXG4gICAgbGV0IGNhcnJ5OiBudW1iZXI7XHJcbiAgICBsZXQgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBudWxsIHZhbHVlc1xyXG4gICAgaWYgKG51bTEgPT09IG51bGwgfHwgbnVtMiA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKTtcclxuXHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG9wZXJEYXRhOiBPcGVyRGF0YSA9IG5ldyBPcGVyRGF0YSgpO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCB0bXBCeXRlOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKG51bTEuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgbnVtMS5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG5cclxuICAgIG9wZXJEYXRhLk5VTV9FeHAxXyA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMS5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0V4cDJfID0gTlVNX1RZUEUudG9TQnl0ZShudW0yLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBpZiAob3BlckRhdGEuTlVNX0V4cDFfID09PSAwIHx8IG9wZXJEYXRhLk5VTV9FeHAyXyA9PT0gMCkge1xyXG4gICAgICByZXMuTlVNX1pFUk8oKTtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxlbjEgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDE7XHJcbiAgICAgICAgIG51bTEuX2RhdGFbbGVuMV0gPT09IDA7XHJcbiAgICAgICAgIGxlbjEtLSkge1xyXG4gICAgfVxyXG4gICAgZm9yIChsZW4yID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxO1xyXG4gICAgICAgICBudW0yLl9kYXRhW2xlbjJdID09PSAwO1xyXG4gICAgICAgICBsZW4yLS0pIHtcclxuICAgIH1cclxuXHJcbiAgICBwb3MgPSAoTlVNX1RZUEUubWVtY21wKG51bTEsIDEsIG51bTIsIDEsIGxlbjIpIDwgMCkgPyAwIDogMTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCAoTlVNX1RZUEUuTlVNX1NJWkUgLSAxKSAqIDI7IGkrKylcclxuICAgICAgZGl2aWRlbmRbaV0gPSAwO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW4xOyBpKyspXHJcbiAgICAgIGRpdmlkZW5kW3BvcyArIGldID0gbnVtMS5fZGF0YVsxICsgaV07XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjI7IGkrKylcclxuICAgICAgZGl2aXNvclsxICsgaV0gPSBudW0yLl9kYXRhWzEgKyBpXTtcclxuXHJcbiAgICByZXMuTlVNX1NFVF9aRVJPKCk7XHJcbiAgICBwd3IgPSBOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAxXykgLSBOVU1fVFlQRS50b1VCeXRlKG9wZXJEYXRhLk5VTV9FeHAyXykgKyBwb3M7XHJcbiAgICByZXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHB3ciArIE5VTV9UWVBFLkVYUF9CSUFTKTtcclxuICAgIGlmICgobnVtMS5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSykgIT09IChudW0yLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKSlcclxuICAgICAgcmVzLl9kYXRhWzBdIHw9IE5VTV9UWVBFLlNJR05fTUFTSztcclxuXHJcbiAgICAvLyBub3JtYWxpemUgZGl2aWRlbmQgJiBkaXZpc29yXHJcbiAgICBxdW90ID0gTWF0aC5mbG9vcigxMDAgLyAoTlVNX1RZUEUudG9VQnl0ZShkaXZpc29yWzFdKSArIDEpKTtcclxuICAgIGlmIChxdW90ID4gMSkge1xyXG4gICAgICBjYXJyeSA9IDA7XHJcbiAgICAgIGZvciAocG9zMiA9IGxlbjI7IHBvczIgPiAwOyBwb3MyLS0pIHtcclxuICAgICAgICBwcm9kID0gcXVvdCAqIE5VTV9UWVBFLnRvVUJ5dGUoZGl2aXNvcltwb3MyXSkgKyBjYXJyeTtcclxuICAgICAgICBjYXJyeSA9IE1hdGguZmxvb3IocHJvZCAvIDEwMCk7XHJcbiAgICAgICAgZGl2aXNvcltwb3MyXSA9IE5VTV9UWVBFLnRvU0J5dGUocHJvZCAlIDEwMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhcnJ5ID0gMDtcclxuICAgICAgZm9yIChwb3MxID0gbGVuMSArIHBvcyAtIDE7IHBvczEgPj0gMDsgcG9zMS0tKSB7XHJcbiAgICAgICAgcHJvZCA9IHF1b3QgKiBOVU1fVFlQRS50b1VCeXRlKGRpdmlkZW5kW3BvczFdKSArIGNhcnJ5O1xyXG4gICAgICAgIGNhcnJ5ID0gTWF0aC5mbG9vcihwcm9kIC8gMTAwKTtcclxuICAgICAgICBkaXZpZGVuZFtwb3MxXSA9IE5VTV9UWVBFLnRvU0J5dGUocHJvZCAlIDEwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBkaXZpZGUgZGl2aWRlbmQgYnkgZGl2aXNvclxyXG4gICAgZm9yIChwb3MxID0gMTsgcG9zMSA8IFNJR05JRklDQU5UX05VTV9TSVpFOyBwb3MxKyspIHtcclxuICAgICAgcXVvdCA9IE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zMSAtIDFdKSAqIDEwMCArIE1hdGguZmxvb3IoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3MxXSkgLyBOVU1fVFlQRS50b1VCeXRlKGRpdmlzb3JbMV0pKTtcclxuICAgICAgaWYgKHF1b3QgPj0gMTAwKVxyXG4gICAgICAgIHF1b3QgPSA5OTtcclxuXHJcbiAgICAgIGlmIChxdW90ICE9PSAwKSB7XHJcbiAgICAgICAgLy8gbXVsdGlwbHkgZGl2aXNvciBieSBxdW90aWVudCwgYW5kIHN1YnRyYWN0IGZyb20gZGl2aWRlbmRcclxuICAgICAgICBwb3MgPSBwb3MxICsgbGVuMiAtIDE7XHJcbiAgICAgICAgY2FycnkgPSAwO1xyXG4gICAgICAgIGZvciAocG9zMiA9IGxlbjI7IHBvczIgPiAwOyBwb3MyLS0pIHtcclxuICAgICAgICAgIHByb2QgPSBxdW90ICogTlVNX1RZUEUudG9VQnl0ZShkaXZpc29yW3BvczJdKSArIGNhcnJ5O1xyXG4gICAgICAgICAgY2FycnkgPSBNYXRoLmZsb29yKHByb2QgLyAxMDApO1xyXG4gICAgICAgICAgZGl2aWRlbmRbcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3NdKSAtIHByb2QgJSAxMDApO1xyXG4gICAgICAgICAgdG1wQnl0ZSA9IGRpdmlkZW5kW3Bvc107XHJcbiAgICAgICAgICBwb3MtLTtcclxuICAgICAgICAgIGlmICh0bXBCeXRlIDwgMCkge1xyXG4gICAgICAgICAgICBkaXZpZGVuZFtwb3MgKyAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3MgKyAxXSkgKyAxMDApO1xyXG4gICAgICAgICAgICBjYXJyeSsrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkaXZpZGVuZFtwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKGRpdmlkZW5kW3Bvc10pIC0gY2FycnkpO1xyXG5cclxuICAgICAgICAvLyBkZWNyZW1lbnQgcXVvdGllbnQsIGFuZCBhZGQgYmFjayBkaXZpc29yIHRvIGRpdmlkZW5kXHJcbiAgICAgICAgd2hpbGUgKGRpdmlkZW5kW3Bvc10gPCAwKSB7XHJcbiAgICAgICAgICBxdW90LS07XHJcbiAgICAgICAgICBwb3MgPSBwb3MxICsgbGVuMiAtIDE7XHJcbiAgICAgICAgICBmb3IgKHBvczIgPSBsZW4yOyBwb3MyID4gMDsgcG9zMi0tKSB7XHJcbiAgICAgICAgICAgIGRpdmlkZW5kW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zXSkgKyBOVU1fVFlQRS50b1VCeXRlKGRpdmlzb3JbcG9zMl0pKTtcclxuICAgICAgICAgICAgdG1wQnl0ZSA9IGRpdmlkZW5kW3Bvc107XHJcbiAgICAgICAgICAgIHBvcy0tO1xyXG4gICAgICAgICAgICBpZiAoTlVNX1RZUEUudG9VQnl0ZSh0bXBCeXRlKSA+PSAxMDApIHtcclxuICAgICAgICAgICAgICBkaXZpZGVuZFtwb3MgKyAxXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3MgKyAxXSkgLSAxMDApO1xyXG4gICAgICAgICAgICAgIGRpdmlkZW5kW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zXSkgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXMuX2RhdGFbcG9zMV0gPSBOVU1fVFlQRS50b1NCeXRlKHF1b3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29tcGFyZSB0d28gbWFnaWMgbnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICBUaGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICBUaGUgc2Vjb25kIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gMCBpZiBudW0xPW51bTIsIDEgaWYgbnVtMT5udW0yIG9yIC0xIGlmIG51bTE8bnVtMlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIG51bV9jbXAobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFKTogbnVtYmVyIHtcclxuICAgIGxldCBzaWduMTogbnVtYmVyO1xyXG4gICAgbGV0IHNpZ24yOiBudW1iZXI7XHJcbiAgICBsZXQgY21wdmFsOiBudW1iZXI7XHJcbiAgICBsZXQgbDE6IG51bWJlcjtcclxuICAgIGxldCBsMjogbnVtYmVyO1xyXG4gICAgbGV0IHRtcDogbnVtYmVyO1xyXG4gICAgbGV0IFNJR05JRklDQU5UX05VTV9TSVpFOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKG51bTEgPT0gbnVsbCB8fCBudW0yID09IG51bGwpXHJcbiAgICAgIHJldHVybiBJbnQzMi5NaW5WYWx1ZTtcclxuXHJcbiAgICBTSUdOSUZJQ0FOVF9OVU1fU0laRSA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG5cclxuICAgIGlmIChudW0xLk5VTV9JU19MT05HKCkpIHtcclxuICAgICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICAgIGwxID0gbnVtMS5OVU1fTE9ORygpO1xyXG4gICAgICAgIGwyID0gbnVtMi5OVU1fTE9ORygpO1xyXG4gICAgICAgIGlmIChsMSA+PSAwICYmIGwyID49IDApIHtcclxuICAgICAgICAgIHRtcCA9IGwxIC0gbDI7XHJcbiAgICAgICAgICBpZiAodG1wID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gKDApO1xyXG4gICAgICAgICAgaWYgKHRtcCA+IDApXHJcbiAgICAgICAgICAgIHJldHVybiAoMSk7XHJcbiAgICAgICAgICByZXR1cm4gKC0xKTtcclxuICAgIH1cclxuICAgICAgICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIG51bTEubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgICAgfVxyXG4gICAgZWxzZSBpZiAobnVtMi5OVU1fSVNfTE9ORygpKVxyXG4gICAgICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG5cclxuICAgIHNpZ24xID0gTlVNX1RZUEUudG9TQnl0ZShudW0xLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIHNpZ24yID0gTlVNX1RZUEUudG9TQnl0ZShudW0yLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIGNtcHZhbCA9IChzaWduMSA9PT0gc2lnbjIpXHJcbiAgICAgID8gTlVNX1RZUEUubWVtY21wKG51bTEsIDAsIG51bTIsIDAsIFNJR05JRklDQU5UX05VTV9TSVpFKVxyXG4gICAgICA6IDE7XHJcbiAgICBpZiAoc2lnbjEgIT09IDApXHJcbiAgICAgIGNtcHZhbCA9IC1jbXB2YWw7XHJcbiAgICByZXR1cm4gKGNtcHZhbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2sgaWYgdGhlIGdpdmVuIGhleCBzdHJpbmcgcmVwcmVzZW50cyBhIGxvbmcgbnVtYmVyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW1IZXhTdHJcIj4gIFRoZSBoZXggc3RyaW5nIHRvIGNoZWNrLlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSwgaWYgdGhlIHN0cmluZyByZXByZXNlbnRzIGEgJ2xvbmcnIG51bWJlciBpbiBOVU1fVFlQRS5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBudW1IZXhTdHJJc0xvbmcobnVtSGV4U3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBudW1IZXhTdHIuc3Vic3RyKDAsIDIpID09PSBcIkZGXCI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgWmVyb2VzIHRoZSBNYWdpYyBOdW1iZXIgYXMgYSBsb25nIHplcm9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIE5VTV9aRVJPKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRaZXJvKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFplcm9lcyB0aGUgTWFnaWMgTnVtYmVyIChhbGwgYnl0ZXMgd2lsbCBzZXQgdG8gMClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIE5VTV9TRVRfWkVSTygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0WmVybyhmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0dGluZyBpbmRpY2F0aW9uIGZvciB0aGUgc2lnbiBvZiB0aGUgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaW4gdGhlIG51bWJlciBpcyBuZWdhdGl2ZSwgZmFsc2UgaWYgcG9zaXRpdmVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIG51bV9pc19uZWcoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICByZXR1cm4gKCh0aGlzLl9kYXRhWzRdICYgMHg4MCkgIT09IDApO1xyXG4gICAgcmV0dXJuICgodGhpcy5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSykgIT09IDApO1xyXG4gICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0dGluZyBpbmRpY2F0aW9uIGlmIHRoZSBNYWdpYyBOdW1iZXIgaXMgWkVSTyAoYWxsIGJ5dGVzIGVxdWFscyB0byAwKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGluIHRoZSBudW1iZXIgaXMgWkVSTywgZmFsc2UgaWYgcG9zaXRpdmVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIG51bV9pc196ZXJvKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmV0dXJuICh0aGlzLk5VTV9MT05HKCkgPT09IDApO1xyXG4gICAgcmV0dXJuICh0aGlzLl9kYXRhWzBdID09PSAwKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENoYW5naW5nIHNpZ24gb2YgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBudW1fbmVnKCk6IHZvaWQge1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgIGwgPSAtdGhpcy5OVU1fTE9ORygpO1xyXG4gICAgICB0aGlzLk5VTV80X0xPTkcobCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9kYXRhWzBdICE9PSAwKVxyXG4gICAgICB0aGlzLl9kYXRhWzBdIF49IE5VTV9UWVBFLlNJR05fTUFTSztcclxuICAgICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSXMgdGhlIG51bWJlciBrZXB0IGluIGluIHRoZSBOVU1fVFlQRSBpcyBhIGxvbmcgbnVtYmVyP1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGluIHRoZSBudW1iZXIgaXMgbG9uZywgZmFsc2UgaWYgbm90XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBOVU1fSVNfTE9ORygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhWzBdID09PSBOVU1fVFlQRS5OVU1fTE9OR19UWVBFO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbG9uZyB2YWx1ZSBmcm9tIHRoZSBOVU1fVFlQRS5cclxuICAvLy8gICBUSElTIEZVTkNUSU9OIE1VU1QgQkUgV1JJVFRFTiBESUZFUkVOVExZIVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbG9uZyBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIE5VTV9MT05HKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5fZGF0YVsxXSA9PT0gMCAmJiB0aGlzLl9kYXRhWzJdID09PSAwICYmIHRoaXMuX2RhdGFbM10gPT09IDAgJiYgdGhpcy5fZGF0YVs0XSA9PT0gLTEyOClcclxuICAgICAgcmV0dXJuIEludDMyLk1pblZhbHVlO1xyXG5cclxuICAgIGxldCBkYXRhdmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLl9kYXRhLmJ1ZmZlcik7XHJcbiAgICByZXR1cm4gZGF0YXZpZXcuZ2V0SW50MzIoMSwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUm91bmRzIHRoZSBOVU1fVFlQRSBudW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGVjc1wiPiAgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0byBkZWNpbWFsIHBvaW50IHRvIHJvdW5kIHRvXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcm91bmQoZGVjczogbnVtYmVyKTogdm9pZCB7XHJcblxyXG4gICAgbGV0IGFkZHZhbDogTlVNX1RZUEU7XHJcblxyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGFkZHZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgYWRkdmFsLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZSgodGhpcy5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSykgfCAoTlVNX1RZUEUuRVhQX0JJQVMgLSAoZGVjcyA+PiAxKSkpO1xyXG4gICAgYWRkdmFsLl9kYXRhWzFdID0gTlVNX1RZUEUudG9TQnl0ZSgoZGVjcyAmIDEpICE9PSAwID8gNSA6IDUwKTtcclxuXHJcbiAgICBsZXQgdGVtcDogTlVNX1RZUEUgPSBOVU1fVFlQRS5hZGQodGhpcywgYWRkdmFsKTtcclxuICAgIHRoaXMuX2RhdGEgPSBuZXcgSW50OEFycmF5KHRlbXAuX2RhdGEubGVuZ3RoKTtcclxuXHJcbiAgICB0aGlzLl9kYXRhID0gdGVtcC5fZGF0YTtcclxuICAgICAgdGhpcy5udW1fdHJ1bmMoZGVjcyk7XHJcbiAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZXR1cm5zIGEgbnVtZXJpYyBleHByZXNzaW9uLCByb3VuZGVkIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIndob2xlXCI+dGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byB3aGljaCB0aGUgbnVtZXJpYyBleHByZXNzaW9uIGlzIHJvdW5kZWRcclxuICAvLy8gPC9wYXJhbT5cclxuICBkYlJvdW5kKHdob2xlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBhZGR2YWw6IE5VTV9UWVBFO1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IG51bV9kaWZmOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICAvLyBBZGQgNSAoaW4gdGhlIGNvcnJlc3BvbmRpbmcgdG8gd2hvbGUgcG9zaXRpb24pXHJcbiAgICBhZGR2YWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGFkZHZhbC5fZGF0YVswXSA9IE5VTV9UWVBFLnRvU0J5dGUoKHRoaXMuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spIHwgKE5VTV9UWVBFLkVYUF9CSUFTICsgKCh3aG9sZSArIDEpID4+IDEpKSk7XHJcbiAgICBhZGR2YWwuX2RhdGFbMV0gPSBOVU1fVFlQRS50b1NCeXRlKCgod2hvbGUgJiAxKSAhPT0gMCkgPyA1IDogNTApO1xyXG5cclxuICAgIGxldCB0ZW1wOiBOVU1fVFlQRSA9IE5VTV9UWVBFLmFkZCh0aGlzLCBhZGR2YWwpO1xyXG4gICAgdGhpcy5fZGF0YSA9IG5ldyBJbnQ4QXJyYXkodGVtcC5fZGF0YS5sZW5ndGgpO1xyXG5cclxuICAgICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCB0aGlzLl9kYXRhLmxlbmd0aDsgKytfYWkpXHJcbiAgICAgIHRoaXMuX2RhdGFbX2FpXSA9IHRlbXAuX2RhdGFbX2FpXTtcclxuXHJcbiAgICAvLyBQdXQgMCBpbiB0aGUgZW5kIG9mIHRoZSBudW1iZXJcclxuICAgIHB3ciA9ICh0aGlzLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSykgLSBOVU1fVFlQRS5FWFBfQklBUztcclxuXHJcbiAgICBpZiAoKG51bV9kaWZmID0gcHdyIC0gKCh3aG9sZSArIDEpID4+IDEpKSA+PSAwKSB7XHJcbiAgICAgIGlmICgod2hvbGUgJiAxKSAhPT0gMCkge1xyXG4gICAgICAgIHRoaXMuX2RhdGFbMSArIG51bV9kaWZmXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5fZGF0YVsxICsgbnVtX2RpZmZdIC0gdGhpcy5fZGF0YVsxICsgbnVtX2RpZmZdICUgMTApO1xyXG4gICAgICAgIG51bV9kaWZmKys7XHJcbiAgICAgICAgfVxyXG4gICAgICBmb3IgKGkgPSAwO1xyXG4gICAgICAgICAgIGkgPCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gKDEgKyBudW1fZGlmZik7XHJcbiAgICAgICAgICAgaSsrKVxyXG4gICAgICAgIHRoaXMuX2RhdGFbMSArIG51bV9kaWZmICsgaV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLk5VTV9TRVRfWkVSTygpO1xyXG4gICAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcnVuY2F0ZXMgdGhlIE5VTV9UWVBFIG51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZWNzXCI+ICBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRvIGRlY2ltYWwgcG9pbnQgdG8gaGF2ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIG51bV90cnVuYyhkZWNzOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBwd3I6IG51bWJlcjtcclxuICAgIGxldCBudW1fZGlmZjogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgcHdyID0gKHRoaXMuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKSAtIE5VTV9UWVBFLkVYUF9CSUFTO1xyXG4gICAgaWYgKChudW1fZGlmZiA9IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxIC0gcHdyIC0gKChkZWNzICsgMSkgPj4gMSkpIDwgMClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYgKChudW1fZGlmZiA8IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSAmJiAoKGRlY3MgJiAxKSAhPT0gMCkpIHtcclxuICAgICAgdGhpcy5fZGF0YVt0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSAtIG51bV9kaWZmXSA9XHJcbiAgICAgICAgTlVNX1RZUEUudG9TQnl0ZSh0aGlzLl9kYXRhW3RoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxIC0gbnVtX2RpZmZdIC0gdGhpcy5fZGF0YVt0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSAtIG51bV9kaWZmXSAlIDEwKTtcclxuICAgICAgaWYgKHRoaXMuX2RhdGFbdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEgLSBudW1fZGlmZl0gPT09IDApXHJcbiAgICAgICAgbnVtX2RpZmYrKztcclxuICAgICAgICAgIH1cclxuICAgIGlmIChudW1fZGlmZiA+PSB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSkge1xyXG4gICAgICAgICAgdGhpcy5OVU1fWkVSTygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgZm9yIChpID0gMDtcclxuICAgICAgICAgaSA8IG51bV9kaWZmO1xyXG4gICAgICAgICBpKyspXHJcbiAgICAgIHRoaXMuX2RhdGFbdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIG51bV9kaWZmICsgaV0gPSAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29udmVydHMgYSBNYWdpYyBudW1iZXIgZnJvbSBzdGQgbG9uZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW1cIj4gIFRoZSBudW1iZXIgdG8gYmUgdHJhbnNsYXRlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIG51bV80X3N0ZF9sb25nKCk6IHZvaWQge1xyXG4gICAgbGV0IHNsb25nOiBudW1iZXI7XHJcblxyXG4gICAgc2xvbmcgPSB0aGlzLk5VTV9MT05HKCk7XHJcbiAgICBpZiAoc2xvbmcgPj0gMClcclxuICAgICAgdGhpcy5udW1fNF91bG9uZyhzbG9uZyk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5udW1fNF91bG9uZygtc2xvbmcpO1xyXG4gICAgICB0aGlzLl9kYXRhWzBdIHw9IE5VTV9UWVBFLlNJR05fTUFTSztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0cyBhIE1hZ2ljIG51bWJlciBmcm9tIHVsb25nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bVwiPiAgVGhlIG51bWJlciB0byBiZSB0cmFuc2xhdGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgbnVtXzRfdWxvbmcoZGF0YTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgcHdyOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgIHRoaXMuTlVNX1NFVF9aRVJPKCk7XHJcbiAgICBwb3MgPSBwd3IgPSA1O1xyXG4gICAgd2hpbGUgKGRhdGEgPiAwKSB7XHJcbiAgICAgIHRoaXMuX2RhdGFbcG9zLS1dID0gTlVNX1RZUEUudG9TQnl0ZShkYXRhICUgMTAwKTtcclxuICAgICAgZGF0YSA9IE1hdGguZmxvb3IoZGF0YSAvIDEwMCk7XHJcbiAgICB9XHJcbiAgICBpZiAocG9zIDwgcHdyKSB7XHJcbiAgICAgIGlmIChwb3MgPiAwKSB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHB3ciAtIHBvczsgaSsrKVxyXG4gICAgICAgICAgdGhpcy5fZGF0YVsxICsgaV0gPSB0aGlzLl9kYXRhWzEgKyBwb3MgKyBpXTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG9zOyBpKyspXHJcbiAgICAgICAgICB0aGlzLl9kYXRhW3B3ciAtIHBvcyArIDEgKyBpXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB0aGlzLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZShwd3IgLSBwb3MgKyBOVU1fVFlQRS5FWFBfQklBUyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIGxvbmcgdmFsdWUgZnJvbSBhIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbG9uZyB2YWx1ZSBvZiB0aGUgbnVtYmVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBOVU1fMl9MT05HKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICByZXR1cm4gdGhpcy5OVU1fTE9ORygpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5udW1fMl9sb25nKCk7XHJcbiAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIFVsb25nIHZhbHVlIGZyb20gYSBNYWdpYyBOdW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxvbmcgdmFsdWUgb2YgdGhlIG51bWJlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgTlVNXzJfVUxPTkcoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJldHVybiB0aGlzLk5VTV9MT05HKCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLm51bV8yX3Vsb25nKCk7XHJcbiAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIGxvbmcgdmFsdWUgZnJvbSBhIG5vbiBsb25nIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbG9uZyB2YWx1ZSBvZiB0aGUgbnVtYmVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBudW1fMl9sb25nKCk6IG51bWJlciB7XHJcbiAgICBsZXQgc2xvbmc6IG51bWJlcjtcclxuICAgIGxldCBzaWduOiBudW1iZXI7XHJcblxyXG4gICAgc2lnbiA9IHRoaXMuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0s7XHJcbiAgICB0aGlzLl9kYXRhWzBdICY9IE5VTV9UWVBFLnRvU0J5dGUofk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBpZiAoc2lnbiAhPT0gMCkge1xyXG4gICAgICBpZiAoTlVNX1RZUEUubWVtY21wKHRoaXMsIDAsIE5VTV9UWVBFLk1pbkxPTkcoKSwgMCwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSkgPiAwKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKE5VTV9UWVBFLm1lbWNtcCh0aGlzLCAwLCBOVU1fVFlQRS5NYXhMT05HKCksIDAsIHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUpID4gMClcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgc2xvbmcgPSB0aGlzLm51bV8yX3Vsb25nKCk7XHJcbiAgICBpZiAoc2lnbiAhPT0gMCkge1xyXG4gICAgICBzbG9uZyA9IC1zbG9uZztcclxuICAgICAgdGhpcy5fZGF0YVswXSB8PSBOVU1fVFlQRS50b1NCeXRlKHNpZ24pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChzbG9uZyk7XHJcbiAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIHVsb25nIHZhbHVlIGZyb20gYSBub24gbG9uZyBNYWdpYyBOdW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHVsb25nIHZhbHVlIG9mIHRoZSBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIG51bV8yX3Vsb25nKCk6IG51bWJlciB7XHJcbiAgICBsZXQgdmFsOiBudW1iZXI7XHJcbiAgICBsZXQgcHdyOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgbGFzdDogYm9vbGVhbjtcclxuXHJcbiAgICBwd3IgPSB0aGlzLl9kYXRhWzBdIC0gTlVNX1RZUEUuRVhQX0JJQVM7XHJcbiAgICBpZiAocHdyID4gNSlcclxuICAgICAgcmV0dXJuICgwKTtcclxuICAgIGxhc3QgPSAocHdyID09PSA1KTtcclxuICAgIGlmIChsYXN0KVxyXG4gICAgICBwd3IgPSA0O1xyXG5cclxuICAgIHZhbCA9IDA7XHJcbiAgICBmb3IgKHBvcyA9IDE7IHBvcyA8PSBwd3I7IHBvcysrKVxyXG4gICAgICB2YWwgPSB2YWwgKiAxMDAgKyBOVU1fVFlQRS50b1VCeXRlKHRoaXMuX2RhdGFbcG9zXSk7XHJcblxyXG4gICAgaWYgKGxhc3QpXHJcbiAgICAgIGlmICh2YWwgPD0gTWF0aC5mbG9vcigoMHhGRkZGRkZGRiAtIE5VTV9UWVBFLnRvVUJ5dGUodGhpcy5fZGF0YVs1XSkpIC8gMTAwKSlcclxuICAgICAgICB2YWwgPSB2YWwgKiAxMDAgKyBOVU1fVFlQRS50b1VCeXRlKHRoaXMuX2RhdGFbNV0pO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdmFsID0gMDtcclxuICAgIHJldHVybiAodmFsKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBlcmZvcm0gdGhlIGFjdHVhbGwgYWRkIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICAgICAgVGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMlwiPiAgICAgIFRoZSBzZWNvbmQgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvcGVyRGF0YVwiPiAgSW5mb3JtYXRpb24gZm9yIHBlcmZvcm1pbmcgdGhlIG9wZXJhdGlvblxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gVGhlIHR3byBudW1iZXJzIGFkZGVkXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgYWRkX3BvcyhudW0xOiBOVU1fVFlQRSwgbnVtMjogTlVNX1RZUEUsIG9wZXJEYXRhOiBPcGVyRGF0YSk6IE5VTV9UWVBFIHtcclxuICAgIGxldCBsZW4xOiBudW1iZXI7XHJcbiAgICBsZXQgbGVuMjogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG4gICAgbGV0IG51bTFwdHI6IG51bWJlcjtcclxuICAgIGxldCByZXNwdHI6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBudWxsIHZhbHVlc1xyXG4gICAgaWYgKG51bTEgPT0gbnVsbCB8fCBudW0yID09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKTtcclxuXHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG5cclxuICAgIGlmIChvcGVyRGF0YS5OVU1fRXhwMl8gPT09IDAgfHwgKG9wZXJEYXRhLk5VTV9EaWZmXyA+PSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpKSB7XHJcbiAgICAgIHJlcyA9IG5ldyBOVU1fVFlQRShudW0xKTtcclxuICAgICAgcmVzLl9kYXRhWzBdID0gb3BlckRhdGEuTlVNX0V4cDFfO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGxlbjEgPSAxO1xyXG4gICAgZm9yIChpID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAyOyBpID4gMDsgaSAtPSAyKSB7XHJcbiAgICAgIGlmIChudW0xLlNIUlRfSVNfWkVSTyhpKSlcclxuICAgICAgICBjb250aW51ZTtcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxlbjEgPSBpICsgMTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGlmIChudW0xLl9kYXRhW2xlbjFdID09PSAwKVxyXG4gICAgICBsZW4xLS07XHJcblxyXG4gICAgbGVuMiA9IDE7XHJcbiAgICBmb3IgKGkgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDI7IGkgPiAwOyBpIC09IDIpIHtcclxuICAgICAgaWYgKG51bTIuU0hSVF9JU19aRVJPKGkpKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZW4yID0gaSArIDE7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICBpZiAobnVtMi5fZGF0YVtsZW4yXSA9PT0gMClcclxuICAgICAgbGVuMi0tO1xyXG5cclxuICAgIGlmICgobGVuID0gTWF0aC5tYXgobGVuMSwgbGVuMiArIG9wZXJEYXRhLk5VTV9EaWZmXykpID4gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKVxyXG4gICAgICBsZW4gPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDE7XHJcblxyXG4gICAgcmVzLk5VTV9TRVRfWkVSTygpO1xyXG4gICAgbnVtMXB0ciA9IG9wZXJEYXRhLk5VTV9EaWZmXztcclxuICAgIHJlc3B0ciA9IG9wZXJEYXRhLk5VTV9EaWZmXztcclxuICAgIGZvciAocG9zID0gbGVuIC0gb3BlckRhdGEuTlVNX0RpZmZfOyBwb3MgPiAwOyBwb3MtLSkge1xyXG4gICAgICByZXMuX2RhdGFbcmVzcHRyICsgcG9zXSA9XHJcbiAgICAgICAgTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdKSArIE5VTV9UWVBFLnRvVUJ5dGUobnVtMS5fZGF0YVtudW0xcHRyICsgcG9zXSkgKyBOVU1fVFlQRS50b1VCeXRlKG51bTIuX2RhdGFbcG9zXSkpO1xyXG4gICAgICBpZiAoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcmVzcHRyICsgcG9zXSkgPj0gMTAwKSB7XHJcbiAgICAgICAgcmVzLl9kYXRhW3Jlc3B0ciArIHBvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Jlc3B0ciArIHBvc10pIC0gMTAwKTtcclxuICAgICAgICByZXMuX2RhdGFbcmVzcHRyICsgcG9zIC0gMV0gPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICBmb3IgKHBvcyA9IG9wZXJEYXRhLk5VTV9EaWZmXzsgcG9zID4gMDsgcG9zLS0pIHtcclxuICAgICAgcmVzLl9kYXRhW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Bvc10pICsgTlVNX1RZUEUudG9VQnl0ZShudW0xLl9kYXRhW3Bvc10pKTtcclxuICAgICAgaWYgKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Bvc10pID49IDEwMCkge1xyXG4gICAgICAgIHJlcy5fZGF0YVtwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtwb3NdKSAtIDEwMCk7XHJcbiAgICAgICAgcmVzLl9kYXRhW3BvcyAtIDFdID0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICBpZiAocmVzLl9kYXRhWzBdICE9PSAwKSB7XHJcbiAgICAgIGZvciAocG9zID0gTWF0aC5taW4obGVuLCBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDIpOyBwb3MgPj0gMDsgcG9zLS0pXHJcbiAgICAgICAgcmVzLl9kYXRhW3BvcyArIDFdID0gcmVzLl9kYXRhW3Bvc107XHJcbiAgICAgIG9wZXJEYXRhLk5VTV9FeHAxXysrO1xyXG4gICAgICAgICAgfVxyXG4gICAgcmVzLl9kYXRhWzBdID0gb3BlckRhdGEuTlVNX0V4cDFfO1xyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybSB0aGUgYWN0dWFsbCBzdWIgb3BlcmF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gICAgICBUaGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICAgICAgVGhlIHNlY29uZCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9wZXJEYXRhXCI+ICBJbmZvcm1hdGlvbiBmb3IgcGVyZm9ybWluZyB0aGUgb3BlcmF0aW9uXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBUaGUgcmVzdWx0IG9mIHRoZSBzdWJ0cmFjdGlvbiBvcGVyYXRpb25cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBzdWJfcG9zKG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSwgb3BlckRhdGE6IE9wZXJEYXRhKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IGxlbjE6IG51bWJlcjtcclxuICAgIGxldCBsZW4yOiBudW1iZXI7XHJcbiAgICBsZXQgbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgbnVtMXB0cjogbnVtYmVyO1xyXG4gICAgbGV0IHJlc3B0cjogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBTSUdOSUZJQ0FOVF9OVU1fU0laRTogbnVtYmVyO1xyXG5cclxuICAgIC8vIG51bGwgdmFsdWVzXHJcbiAgICBpZiAobnVtMSA9PSBudWxsIHx8IG51bTIgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKTtcclxuXHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGo6IG51bWJlcjtcclxuXHJcbiAgICBpZiAob3BlckRhdGEuTlVNX0V4cDJfID09PSAwIHx8IChvcGVyRGF0YS5OVU1fRGlmZl8gPj0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSkge1xyXG4gICAgICByZXMgPSBuZXcgTlVNX1RZUEUobnVtMSk7XHJcbiAgICAgIHJlcy5fZGF0YVswXSA9IG9wZXJEYXRhLk5VTV9FeHAxXztcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBsZW4xID0gMTtcclxuICAgIGZvciAoaSA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMjsgaSA+IDA7IGkgLT0gMikge1xyXG4gICAgICBpZiAobnVtMS5TSFJUX0lTX1pFUk8oaSkpXHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBsZW4xID0gaSArIDE7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICBpZiAobnVtMS5fZGF0YVtsZW4xXSA9PT0gMClcclxuICAgICAgbGVuMS0tO1xyXG5cclxuICAgIGxlbjIgPSAxO1xyXG4gICAgZm9yIChpID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAyOyBpID4gMDsgaSAtPSAyKSB7XHJcbiAgICAgIGlmIChudW0yLlNIUlRfSVNfWkVSTyhpKSlcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGVuMiA9IGkgKyAxO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgaWYgKG51bTIuX2RhdGFbbGVuMl0gPT09IDApXHJcbiAgICAgIGxlbjItLTtcclxuXHJcbiAgICBpZiAoKGxlbiA9IE1hdGgubWF4KGxlbjEsIGxlbjIgKyBvcGVyRGF0YS5OVU1fRGlmZl8pKSA+IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMSlcclxuICAgICAgbGVuID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxO1xyXG5cclxuICAgIHJlcy5OVU1fU0VUX1pFUk8oKTtcclxuICAgIG51bTFwdHIgPSBvcGVyRGF0YS5OVU1fRGlmZl87XHJcbiAgICByZXNwdHIgPSBvcGVyRGF0YS5OVU1fRGlmZl87XHJcbiAgICBmb3IgKHBvcyA9IGxlbiAtIG9wZXJEYXRhLk5VTV9EaWZmXzsgcG9zID4gMDsgcG9zLS0pIHtcclxuXHJcbiAgICAgIHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdKSArIE5VTV9UWVBFLnRvVUJ5dGUobnVtMS5fZGF0YVtudW0xcHRyICsgcG9zXSkgLSBOVU1fVFlQRS50b1VCeXRlKG51bTIuX2RhdGFbcG9zXSkpO1xyXG4gICAgICBpZiAocmVzLl9kYXRhW3Jlc3B0ciArIHBvc10gPCAwKSB7XHJcbiAgICAgICAgcmVzLl9kYXRhW3Jlc3B0ciArIHBvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Jlc3B0ciArIHBvc10pICsgMTAwKTtcclxuICAgICAgICByZXMuX2RhdGFbcmVzcHRyICsgcG9zIC0gMV0gPSBOVU1fVFlQRS50b1NCeXRlKDB4RkYpOyAvLyAyNTVcclxuICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgIGZvciAocG9zID0gb3BlckRhdGEuTlVNX0RpZmZfOyBwb3MgPiAwOyBwb3MtLSkge1xyXG4gICAgICByZXMuX2RhdGFbcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcG9zXSkgKyBOVU1fVFlQRS50b1VCeXRlKG51bTEuX2RhdGFbcG9zXSkpO1xyXG4gICAgICBpZiAocmVzLl9kYXRhW3Bvc10gPCAwKSB7XHJcbiAgICAgICAgcmVzLl9kYXRhW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Bvc10pICsgMTAwKTtcclxuICAgICAgICByZXMuX2RhdGFbcG9zIC0gMV0gPSBOVU1fVFlQRS50b1NCeXRlKDB4RkYpOyAvLyAyNTVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgd2hpbGUgKCgrK3BvcyA8PSBsZW4pICYmIHJlcy5fZGF0YVtwb3NdID09PSAwKSB7XHJcbiAgICAgICAgfVxyXG4gICAgaWYgKHBvcyA8PSBsZW4pIHtcclxuICAgICAgb3BlckRhdGEuTlVNX0RpZmZfID0gcG9zIC0gMTtcclxuICAgICAgaWYgKG9wZXJEYXRhLk5VTV9EaWZmXyA+IDApIHtcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuIC0gb3BlckRhdGEuTlVNX0RpZmZfOyBqKyspXHJcbiAgICAgICAgICByZXMuX2RhdGFbMSArIGpdID0gcmVzLl9kYXRhW3BvcyArIGpdO1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBvcGVyRGF0YS5OVU1fRGlmZl87IGorKylcclxuICAgICAgICAgIHJlcy5fZGF0YVtsZW4gLSBvcGVyRGF0YS5OVU1fRGlmZl8gKyAxICsgal0gPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIHJlcy5fZGF0YVswXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShvcGVyRGF0YS5OVU1fRXhwMV8pIC0gb3BlckRhdGEuTlVNX0RpZmZfKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBlcmZvcm0gdGhlIGFjdHVhbCAgRklYIG9wZXJhdGlvbiB3aXRoIHdob2xlIHBhcnQgb2YgdGhlIG51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ3aG9sZXNcIj5udW1iZXIgb2YgbmVlZGVkIHdob2xlIGRpZ2l0c1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIG51bV9maXgod2hvbGVzOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBwd3I6IG51bWJlcjtcclxuICAgIGxldCBudW1fZGlmZjogbnVtYmVyO1xyXG5cclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHRoaXMubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgIHB3ciA9ICh0aGlzLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSykgLSBOVU1fVFlQRS5FWFBfQklBUztcclxuXHJcbiAgICBpZiAoKG51bV9kaWZmID0gcHdyIC0gKCh3aG9sZXMgKyAxKSA+PiAxKSkgPCAwKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBpZiAobnVtX2RpZmYgPCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSkge1xyXG4gICAgICBpZiAoKHdob2xlcyAmIDEpID09PSAxKVxyXG4gICAgICAgIHRoaXMuX2RhdGFbMSArIG51bV9kaWZmXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5fZGF0YVsxICsgbnVtX2RpZmZdICUgMTApO1xyXG4gICAgICB3aGlsZSAoKG51bV9kaWZmIDwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpICYmIHRoaXMuX2RhdGFbMSArIG51bV9kaWZmXSA9PT0gMClcclxuICAgICAgICBudW1fZGlmZisrO1xyXG4gICAgICB9XHJcbiAgICBpZiAobnVtX2RpZmYgPj0gdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpIHtcclxuICAgICAgICB0aGlzLk5VTV9aRVJPKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgaWYgKG51bV9kaWZmID4gMCkge1xyXG4gICAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEgLSBudW1fZGlmZjsgaSsrKVxyXG4gICAgICAgIHRoaXMuX2RhdGFbMSArIGldID0gdGhpcy5fZGF0YVsxICsgbnVtX2RpZmYgKyBpXTtcclxuXHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZGlmZjsgaSsrKVxyXG4gICAgICAgIHRoaXMuX2RhdGFbdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIG51bV9kaWZmICsgaV0gPSAwO1xyXG4gICAgICB0aGlzLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLl9kYXRhWzBdIC0gTlVNX1RZUEUudG9TQnl0ZShudW1fZGlmZikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNoZWNrIGlmIGJ5dGUgb24gc3BlY2lmaWMgcG9zaXRpb24gaXMgemVybyBvciAweEZGXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBvc2l0aW9uXCI+aW4gTlVNIHRvIGJlIGNoZWNrZWRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGlzIHRoZSBieXRlIHplcm9cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIFNIUlRfSVNfWkVSTyhwb3M6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGFbcG9zXSA9PT0gMCAmJiB0aGlzLl9kYXRhW3BvcyArIDFdID09PSAwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFplcm8gYSBNYWdpYyBOdW1iZXIuIElmIHRoZSBudW1iZXIgc2hvdWxkIGNvbnRhaW4gYSBsb25nIHplcm8sIHRoZSBmaXJzdFxyXG4gIC8vLyAgIGJ5dGUgaXMgc2V0IHRvIE5VTV9MT05HX1RZUEUuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFzTG9uZ1wiPiAgc2V0IHRoZSBNYWdpYyBOdW1iZXIgdG8gY29udGFpbiBhIGxvbmcgemVybyB2YWx1ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgc2V0WmVybyhhc0xvbmc6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IE5VTV9UWVBFLk5VTV9TSVpFOyBpKyspXHJcbiAgICAgIHRoaXMuX2RhdGFbaV0gPSAwO1xyXG5cclxuICAgIGlmIChhc0xvbmcpXHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gPSBOVU1fVFlQRS5OVU1fTE9OR19UWVBFO1xyXG4gICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29tcGFyZSB0d28gTWFnaWMgTnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICBUaGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwb3MxXCI+ICBUaGUgcG9zaXRpb24gb2YgbnVtMSB0byBjb21wYXJlIGZyb21cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gIFRoZSBzZWNvbmQgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwb3MzXCI+ICBUaGUgcG9zaXRpb24gb2YgbnVtMiB0byBjb21wYXJlIGZyb21cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IDAgaWYgaWRlbnRpY2FsLCAxIGlmIG51bTE+bnVtMiwgLTEgaWYgbnVtMTxudW0yXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBtZW1jbXAobnVtMTogTlVNX1RZUEUsIHBvczE6IG51bWJlciwgbnVtMjogTlVNX1RZUEUsIHBvczI6IG51bWJlciwgbGVuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGkgPCBsZW4gJiYgbnVtMS5fZGF0YVtwb3MxXSA9PT0gbnVtMi5fZGF0YVtwb3MyXSAmJiBwb3MxIDwgTlVNX1RZUEUuTlVNX1NJWkUgJiYgcG9zMiA8IE5VTV9UWVBFLk5VTV9TSVpFKSB7XHJcbiAgICAgIGkrKztcclxuICAgICAgcG9zMSsrO1xyXG4gICAgICBwb3MyKys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGkgPT09IGxlbilcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICBlbHNlIGlmICh0aGlzLnRvVUJ5dGUobnVtMS5fZGF0YVtwb3MxXSkgPCB0aGlzLnRvVUJ5dGUobnVtMi5fZGF0YVtwb3MyXSkpXHJcbiAgICAgIHJldHVybiAtMTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIDE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IGEgdW5zaWduZWQgdmFsdWUgZnJvbSBhIGJ5dGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYnl0ZVZhbFwiPiAgQSBzaWduZWQgYnl0ZSB2YWx1ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHVuc2lnbmVkIHZhbHVlIG9mIHRoZSBieXRlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgdG9VQnl0ZShieXRlVmFsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHZhbDogbnVtYmVyID0gYnl0ZVZhbDtcclxuXHJcbiAgICBpZiAoYnl0ZVZhbCA8IDApXHJcbiAgICAgIHZhbCA9IDI1NiArIGJ5dGVWYWw7XHJcblxyXG4gICAgcmV0dXJuIHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgYSBzaWduZWQgYnl0ZSB2YWx1ZSBmcm9tIGEgdW5zaWduZWQgdmFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNpZ25lZFZhbFwiPiAgQW4gdW5zaWduZWQgYnl0ZSB2YWx1ZSAoYXMgYW4gaW50ZWdlcilcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzaWduZWQgdmFsdWUgYXMgYSBieXRlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgdG9TQnl0ZSh1bnNpZ25lZFZhbDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCB2YWw6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaWYgKHVuc2lnbmVkVmFsID4gQ29uc3RhbnRzLlNCeXRlTWF4VmFsdWUpXHJcbiAgICAgIHZhbCA9ICh1bnNpZ25lZFZhbCAtIDI1Nik7XHJcbiAgICBlbHNlXHJcbiAgICAgIHZhbCA9IHVuc2lnbmVkVmFsO1xyXG5cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBtYXhpbXVtIGxvbmcgbnVtYmVyIGluIE5VTV9UWVBFIHN0ZCBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBNYXhMT05HKCk6IE5VTV9UWVBFIHtcclxuICAgIGxldCBuVU1fVFlQRTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIG5VTV9UWVBFLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDUpO1xyXG4gICAgblVNX1RZUEUuX2RhdGFbMV0gPSAyMTtcclxuICAgIG5VTV9UWVBFLl9kYXRhWzJdID0gNDc7XHJcbiAgICBuVU1fVFlQRS5fZGF0YVszXSA9IDQ4O1xyXG4gICAgblVNX1RZUEUuX2RhdGFbNF0gPSAzNjtcclxuICAgIG5VTV9UWVBFLl9kYXRhWzVdID0gNDc7XHJcbiAgICByZXR1cm4gblVNX1RZUEU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBtaW5pbXVtIGxvbmcgbnVtYmVyIGluIE5VTV9UWVBFIHN0ZCBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBNaW5MT05HKCk6IE5VTV9UWVBFIHtcclxuICAgIGxldCBudW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBudW0uX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNSk7XHJcbiAgICBudW0uX2RhdGFbMV0gPSAyMTtcclxuICAgIG51bS5fZGF0YVsyXSA9IDQ3O1xyXG4gICAgbnVtLl9kYXRhWzNdID0gNDg7XHJcbiAgICBudW0uX2RhdGFbNF0gPSAzNjtcclxuICAgIG51bS5fZGF0YVs1XSA9IDQ4O1xyXG4gICAgcmV0dXJuIG51bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgZG91YmxlIG51bWJlciBmcm9tIE1hZ2ljIE5VTV9UWVBFXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICB0b19kb3VibGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VfbWdfMl9mbG9hdCg4KTsgLy8gTGVuZ3RoIG9mIGRvdWJsZSBpcyA4IGJ5dGVcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgZG91YmxlIG51bWJlciBmcm9tIE1hZ2ljIE5VTV9UWVBFXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlblwiPm9mIGJ5dGUgb2YgbmVlZGVkIG51bWJlciAtIFVTRSA4XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzdG9yYWdlX21nXzJfZmxvYXQobGVuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHNpZ25fcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgc2lnbjogbnVtYmVyO1xyXG4gICAgbGV0IGNvbXBudW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgdG1wbnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGRpdm51bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBwd3I6IG51bWJlcjtcclxuICAgIGxldCBiaXRzOiBudW1iZXI7XHJcbiAgICBsZXQgZXhwOiBudW1iZXI7XHJcbiAgICBsZXQgbG9uZzE6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbG9uZzI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZmx0T3V0OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGNvdXQ6IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdKTtcclxuICAgIGxldCBOdW0yUHdyMjNfOiBJbnQ4QXJyYXkgPSBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNCksIDgsIDM4LCA4NiwgOF0pO1xyXG4gICAgbGV0IE51bTJQd3I1Ml86IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA4KSwgNDUsIDMsIDU5LCA5NiwgMjcsIDM3LCA0LCA5Nl0pO1xyXG4gICAgbGV0IGJhc2VfTnVtMTZQd3JzOiBJbnQ4QXJyYXlbXSA9IFtcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAxXSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgMTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDIpLCAyLCA1Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMiksIDQwLCA5Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMyksIDYsIDU1LCAzNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNCksIDEsIDQsIDg1LCA3Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNCksIDE2LCA3NywgNzIsIDE2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA1KSwgMiwgNjgsIDQzLCA1NCwgNTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDUpLCA0MiwgOTQsIDk2LCA3MiwgOTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDYpLCA2LCA4NywgMTksIDQ3LCA2NywgMzZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDcpLCAxLCA5LCA5NSwgMTEsIDYyLCA3NywgNzZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDcpLCAxNywgNTksIDIxLCA4NiwgNCwgNDQsIDE2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA4KSwgMiwgODEsIDQ3LCA0OSwgNzYsIDcxLCA2LCA1Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgOCksIDQ1LCAzLCA1OSwgOTYsIDI3LCAzNywgNCwgOTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDkpLCA3LCAyMCwgNTcsIDU5LCA0MCwgMzcsIDkyLCA3OSwgMzZdKVxyXG4gICAgXTtcclxuXHJcbiAgICBsZXQgYmFzZV9OdW0yUHdyczogSW50OEFycmF5W10gPSBbXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgMV0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDJdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCA0XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgOF0pXHJcbiAgICAgIF07XHJcblxyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgdGhpcy5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgaWYgKHRoaXMuX2RhdGFbMF0gPT09IDApXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgc2lnbiA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICB0aGlzLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLl9kYXRhWzBdICYgPG51bWJlcj4ofk5VTV9UWVBFLlNJR05fTUFTSykpO1xyXG4gICAgaWYgKGxlbiA9PT0gNCkge1xyXG4gICAgICBiaXRzID0gMjQ7XHJcbiAgICAgIGNvbXBudW0gPSBuZXcgTlVNX1RZUEUoTnVtMlB3cjIzXyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYml0cyA9IDUzO1xyXG4gICAgICBjb21wbnVtID0gbmV3IE5VTV9UWVBFKE51bTJQd3I1Ml8pO1xyXG4gICAgfVxyXG4gICAgcHdyID0gKHRoaXMuX2RhdGFbMF0gLSBOVU1fVFlQRS5FWFBfQklBUykgPDwgMTtcclxuICAgIGlmIChwd3IgPCAwKVxyXG4gICAgICBleHAgPSBwd3IgKiAzICsgTWF0aC5mbG9vcigocHdyICsgMSkgLyAzKTtcclxuICAgIGVsc2UgZXhwID0gcHdyICogMyArIE1hdGguZmxvb3IoKHB3ciArIDIpIC8gMyk7XHJcbiAgICBwd3IgPSBiaXRzIC0gZXhwO1xyXG4gICAgaWYgKHB3ciA8IDApIHtcclxuICAgICAgcHdyID0gLXB3cjtcclxuICAgICAgdG1wbnVtID0gTlVNX1RZUEUuZGl2KHRoaXMsIG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1twd3IgPj4gMl0pKTtcclxuICAgICAgdG1wbnVtID0gTlVNX1RZUEUuZGl2KHRtcG51bSwgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMlB3cnNbcHdyICYgM10pKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0bXBudW0gPSB0aGlzO1xyXG4gICAgICB3aGlsZSAocHdyID49IDYwKSB7XHJcbiAgICAgICAgdG1wbnVtID0gTlVNX1RZUEUubXVsKHRtcG51bSwgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzWzE0XSkpO1xyXG4gICAgICAgIHB3ciAtPSA1NjtcclxuICAgICAgfVxyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5tdWwodG1wbnVtLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0xNlB3cnNbcHdyID4+IDJdKSk7XHJcbiAgICAgIHRtcG51bSA9IE5VTV9UWVBFLm11bCh0bXBudW0sIG5ldyBOVU1fVFlQRShiYXNlX051bTJQd3JzW3B3ciAmIDNdKSk7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoTlVNX1RZUEUubnVtX2NtcCh0bXBudW0sIGNvbXBudW0pIDwgMCkge1xyXG4gICAgICBleHAtLTtcclxuICAgICAgdG1wbnVtID0gTlVNX1RZUEUuYWRkKHRtcG51bSwgdG1wbnVtKTtcclxuICAgIH1cclxuICAgIGlmIChsZW4gPT09IDQpIHtcclxuICAgICAgbG9uZzEgPSB0bXBudW0ubnVtXzJfdWxvbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBkaXZudW0gPSBOVU1fVFlQRS5kaXYodG1wbnVtLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0xNlB3cnNbOF0pKTtcclxuICAgICAgZGl2bnVtLm51bV90cnVuYygwKTtcclxuICAgICAgbG9uZzEgPSBkaXZudW0ubnVtXzJfdWxvbmcoKTtcclxuICAgICAgZGl2bnVtID0gTlVNX1RZUEUubXVsKGRpdm51bSwgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzWzhdKSk7XHJcbiAgICAgIGRpdm51bSA9IE5VTV9UWVBFLnN1Yih0bXBudW0sIGRpdm51bSk7XHJcbiAgICAgIGxvbmcyID0gZGl2bnVtLm51bV8yX3Vsb25nKCk7XHJcbiAgICB9XHJcbiAgICBzaWduX3BvcyA9IGxlbiAtIDE7XHJcbiAgICBpZiAobGVuID09PSA0KSB7XHJcbiAgICAgIGV4cCArPSAxMjY7XHJcbiAgICAgIGNvdXRbM10gPSBOVU1fVFlQRS50b1NCeXRlKGV4cCA+PiAxKTtcclxuICAgICAgY291dFsyXSA9IE5VTV9UWVBFLnRvU0J5dGUoKHRoaXMuTE9fQ0hBUih0aGlzLkhJX1NIUlQobG9uZzEpKSAmIDB4N0YpIHwgKChleHAgJiAweDAxKSA8PCA3KSk7XHJcbiAgICAgIGNvdXRbMV0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuSElfQ0hBUih0aGlzLkxPX1NIUlQobG9uZzEpKSk7XHJcbiAgICAgIGNvdXRbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuTE9fQ0hBUih0aGlzLkxPX1NIUlQobG9uZzEpKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZXhwICs9IDEwMjI7XHJcbiAgICAgIGNvdXRbN10gPSBOVU1fVFlQRS50b1NCeXRlKGV4cCA+PiA0KTtcclxuXHJcbiAgICAgIGNvdXRbNl0gPSBOVU1fVFlQRS50b1NCeXRlKCh0aGlzLkxPX0NIQVIodGhpcy5ISV9TSFJUKGxvbmcxKSkgJiAweDBGKSB8ICgoZXhwICYgMHgwRikgPDwgNCkpO1xyXG5cclxuICAgICAgY291dFs1XSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5ISV9DSEFSKHRoaXMuTE9fU0hSVChsb25nMSkpKTtcclxuXHJcbiAgICAgIGNvdXRbNF0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuTE9fQ0hBUih0aGlzLkxPX1NIUlQobG9uZzEpKSk7XHJcbiAgICAgIGNvdXRbM10gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuSElfQ0hBUih0aGlzLkhJX1NIUlQobG9uZzIpKSk7XHJcbiAgICAgIGNvdXRbMl0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuTE9fQ0hBUih0aGlzLkhJX1NIUlQobG9uZzIpKSk7XHJcbiAgICAgIGNvdXRbMV0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuSElfQ0hBUih0aGlzLkxPX1NIUlQobG9uZzIpKSk7XHJcbiAgICAgIGNvdXRbMF0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuTE9fQ0hBUih0aGlzLkxPX1NIUlQobG9uZzIpKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2lnbiAhPT0gMCkge1xyXG4gICAgICBjb3V0W3NpZ25fcG9zXSB8PSBOVU1fVFlQRS5TSUdOX01BU0s7XHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gfD0gTlVNX1RZUEUuU0lHTl9NQVNLO1xyXG4gICAgfVxyXG4gICAgZmx0T3V0ID0gdGhpcy5zYnl0ZUFycl8yX0RvdWJsZShjb3V0KTtcclxuICAgIHJldHVybiBmbHRPdXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQml0X1dpc2UgbWFzayA6IExlYXZlIGxhc3QgYnl0ZSBpbiBudW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgTE9fQ0hBUihuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIG4gJiAyNTU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQml0X1dpc2UgbWFzayA6IExlYXZlIGJ5dGUgYmVmb3JlIGxhc3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgSElfQ0hBUihuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIChuICYgNjUyODApID4+IDg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQml0X1dpc2UgbWFzayA6IExlYXZlIDIgbGFzdCBieXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBMT19TSFJUKG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gPG51bWJlcj4obiAmIDY1NTM1KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCaXRfV2lzZSBtYXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIEhJX1NIUlQobjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiA8bnVtYmVyPigobiAmIC02NTUzNikgPj4gMTYpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJpdF9XaXNlIG1hc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc3RhdGljIE1LX1NIUlQoYzE6IG51bWJlciwgYzI6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgc3RySW50OiBzdHJpbmcgPSAoYzEgPDwgOCB8IGMyKS50b1N0cmluZygpO1xyXG4gICAgcmV0dXJuIE5OdW1iZXIuUGFyc2Uoc3RySW50KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCaXRfV2lzZSBtYXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHN0YXRpYyBNS19MT05HKHMxOiBudW1iZXIsIHMyOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGwxOiBudW1iZXIgPSA8bnVtYmVyPnMxO1xyXG4gICAgbGV0IGwyOiBudW1iZXIgPSA8bnVtYmVyPnMyO1xyXG4gICAgbGV0IHN0ckxuZzogc3RyaW5nID0gKGwxIDw8IDE2IHwgbDIpLnRvU3RyaW5nKCk7XHJcbiAgICByZXR1cm4gTk51bWJlci5QYXJzZShzdHJMbmcpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgZG91YmxlIGZyb20gYXJyYXkgb2YgYnl0ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYXJyYXlcIj5vZiBieXRlcywgaW5uZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvdWJsZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gZG91YmxlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHNieXRlQXJyXzJfRG91YmxlKGFycmF5OiBJbnQ4QXJyYXkpOiBudW1iZXIge1xyXG4gICAgbGV0IGRhdGF2aWV3ID0gbmV3IERhdGFWaWV3KGFycmF5LmJ1ZmZlcik7XHJcbiAgICByZXR1cm4gZGF0YXZpZXcuZ2V0RmxvYXQ2NCgwLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYnl0ZSBhcnJheSBmb3IgZG91YmxlICg4IGJ5dGVzIGluIEphdmEpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRvdWJsZVwiPnRvIGdldCBpdHMgYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYnl0ZSBhcnJheVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZG91YmxlXzJfc2J5dGVBcnJheShkOiBudW1iZXIpOiBJbnQ4QXJyYXkge1xyXG4gICAgbGV0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcclxuICAgIGxldCBkYXRhdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpO1xyXG4gICAgZGF0YXZpZXcuc2V0RmxvYXQ2NCgwLCBkLCB0cnVlKTtcclxuICAgIHJldHVybiAobmV3IEludDhBcnJheShkYXRhdmlldy5idWZmZXIpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtaW5nIGFuIFBvd2VyIG9wZXJhdGlvbiBvbiB0d28gbWFnaWMgbnVtYmVycyBWYWwxXlZhbDJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMVwiPiAgdGhlIGZpcnN0IG51bWJlciAtIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMlwiPiAgdGhlIGZpcnN0IG51bWJlciAtIHBvd2VyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgZXZhbF9vcF9wd3IobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IGQwOiBudW1iZXI7XHJcbiAgICBsZXQgZDE6IG51bWJlcjtcclxuXHJcbiAgICAvLyBudWxsIHZhbHVlc1xyXG4gICAgaWYgKG51bTEgPT0gbnVsbCB8fCBudW0yID09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIC8vIElmIHNlY29uZCBvcGVyYXRvciBpcyBhbiBpbnRlZ2VyICh3aGljaCBpcyBzbyBpbiBtb3N0IG9mIHRoZSBjYXNlcylcclxuICAgIC8vIGFuZCBpdCBpcyBub3QgLXZlLCB0aGVuIGNhbGN1bGF0ZSBwb3dlciB1c2luZyBzaW1wbGUgbXVsdGlwbGljYXRpb25cclxuICAgIC8vIFRoZXJlIGlzIGEgcHJvYmxlbSBpbiBmcm9tX2RvdWJsZSBhcyBpdCBkb2Vzbid0IHJldHVybiBleGFjdFxyXG4gICAgLy8gdmFsdWVzIChmb3IgZXhhbXBsZSwgcGFzc2luZyAxLjAwMjQ0MSBpbiBudW0gdG8gZnJvbV9kb3VibGUgd291bGRcclxuICAgIC8vIHJldHVybiAxLjAwMjQ0MDk5OTk5OTk5KS4gYnR3LCB0aGlzIHByb2JsZW0gZXhpc3RzIGV2ZW4gaW4gVmlzdWFsIHN0dWRpbydzXHJcbiAgICAvLyB3YXRjaCB3aW5kb3cgKHRyeSB0eXBpbmcgMS4wMDI0NDEgaW4gTmFtZSBjb2x1bW4gb2Ygd2F0Y2ggd2luZG93KS5cclxuICAgIGlmIChudW0yLk5VTV9JU19MT05HKCkgJiYgIW51bTIubnVtX2lzX25lZygpKSB7XHJcbiAgICAgIGQxID0gbnVtMi50b19kb3VibGUoKTtcclxuICAgICAgbGV0IHJlc3VsdDogTlVNX1RZUEUgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZSgxKTtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGQxOyBpKyspXHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5tdWwocmVzdWx0LCBudW0xKTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgIGQwID0gbnVtMS50b19kb3VibGUoKTtcclxuICAgICAgZDEgPSBudW0yLnRvX2RvdWJsZSgpO1xyXG4gICAgICBpZiAoZDAgPCAwLjAgJiYgZDEgIT09IDxudW1iZXI+IGQxKVxyXG4gICAgICAgIGQwID0gMC4wO1xyXG4gICAgICAvKiBwd3IgKDAuMCwgMC4wKSAtPiBlcnJvciAqL1xyXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gICAgICBlbHNlIGlmIChkMCAhPT0gMC4wKVxyXG4gICAgICAgIGQwID0gTWF0aC5wb3coZDAsIGQxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTlVNX1RZUEUuZnJvbV9kb3VibGUoZDApO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSBkb3VibGUgdG8gTlVNX1RZUEVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZG91YmxlXCI+dG8gdHJhbnNsYXRlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBOVU1fVFlQRSBvZiB0aGUgZG91YmxlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgZnJvbV9kb3VibGUoZDA6IG51bWJlcik6IE5VTV9UWVBFIHtcclxuICAgIGxldCBhcnJheTogSW50OEFycmF5ID0gTlVNX1RZUEUuZG91YmxlXzJfc2J5dGVBcnJheShkMCk7XHJcbiAgICByZXR1cm4gTlVNX1RZUEUuc3RvcmFnZV9tZ180X2Zsb2F0KDgsIGFycmF5KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cmFuc2xhdGUgYnl0ZSBhcnJheSAgdG8gTlVNX1RZUEVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGVuXCI+b2YgdGhlIG5lZWRlZCBudW1iZXIoOClcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJ5dGVcIj5hcnJheSBtYXNrXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBOVU1fVFlQRSBmb3IgdGhlIG5lZWRlZCBhdHRyaWJ1dGVzXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBzdG9yYWdlX21nXzRfZmxvYXQobGVuOiBudW1iZXIsIGlucDogSW50OEFycmF5KTogTlVNX1RZUEUge1xyXG4gICAgbGV0IGNpbnA6IG51bWJlcltdO1xyXG4gICAgbGV0IHNpZ246IG51bWJlcjtcclxuICAgIGxldCB0bXAxOiBudW1iZXI7XHJcbiAgICBsZXQgZXhwOiBudW1iZXI7XHJcbiAgICBsZXQgYmlhczogbnVtYmVyO1xyXG4gICAgbGV0IGxvbmcxOiBudW1iZXI7XHJcbiAgICBsZXQgbG9uZzI6IG51bWJlcjtcclxuXHJcbiAgICBjaW5wID0gbmV3IEFycmF5PG51bWJlcj4oaW5wLmxlbmd0aCk7XHJcbiAgICBmb3IgKHRtcDEgPSAwO1xyXG4gICAgICAgICB0bXAxIDwgaW5wLmxlbmd0aDtcclxuICAgICAgICAgdG1wMSsrKVxyXG4gICAgICBjaW5wW3RtcDFdID0gTlVNX1RZUEUudG9VQnl0ZShpbnBbdG1wMV0pO1xyXG5cclxuICAgIHNpZ24gPSBjaW5wW2xlbiAtIDFdO1xyXG4gICAgaWYgKGxlbiA9PT0gNCkge1xyXG4gICAgICBleHAgPSA8bnVtYmVyPigoY2lucFsyXSA+PiA3KSB8ICgoY2lucFszXSAmIDB4N0YpIDw8IDEpKTtcclxuICAgICAgYmlhcyA9IDE1MDsgLy8gMTI2ICsgKDEgKyAyMyk7XHJcbiAgICAgIGxvbmcxID0gMDtcclxuICAgICAgbG9uZzIgPSBOVU1fVFlQRS5NS19MT05HKE5VTV9UWVBFLk1LX1NIUlQoMCwgY2lucFsyXSB8IDB4ODApLCBOVU1fVFlQRS5NS19TSFJUKGNpbnBbMV0sIGNpbnBbMF0pKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBleHAgPSA8bnVtYmVyPigoKGNpbnBbN10gJiAweDdGKSA8PCA0KSB8IChjaW5wWzZdID4+IDQpKTtcclxuICAgICAgYmlhcyA9IDEwNzU7IC8vIDEwMjIgKyAoMSArIDIwICsgMzIpO1xyXG4gICAgICBsb25nMSA9IE5VTV9UWVBFLk1LX0xPTkcoTlVNX1RZUEUuTUtfU0hSVCgwLCAoY2lucFs2XSAmIDB4MEYpIHwgMHgxMCksIE5VTV9UWVBFLk1LX1NIUlQoY2lucFs1XSwgY2lucFs0XSkpO1xyXG4gICAgICBsb25nMiA9IE5VTV9UWVBFLk1LX0xPTkcoTlVNX1RZUEUuTUtfU0hSVChjaW5wWzNdLCBjaW5wWzJdKSwgTlVNX1RZUEUuTUtfU0hSVChjaW5wWzFdLCBjaW5wWzBdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTlVNX1RZUEUuc3RvcmFnZV9udW1fNF9mbGRfZmx0KGxvbmcxLCBsb25nMiwgMTgsIHNpZ24sIGJpYXMsIGV4cCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJhbnNsYXRlIGJ5dGUgYXJyYXkgIHRvIE5VTV9UWVBFIChsaWtlIGluIE1hZ2ljIFNvdWNlIGNvZGUpLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgc3RvcmFnZV9udW1fNF9mbGRfZmx0KGxvbmcxOiBudW1iZXIsIGxvbmcyOiBudW1iZXIsIGRlYzogbnVtYmVyLCBzaWduOiBudW1iZXIsIGJpYXM6IG51bWJlciwgZXhwcjogbnVtYmVyKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IGJhc2VfTnVtMTZQd3JzOiBJbnQ4QXJyYXlbXSA9IFtcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAxXSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgMTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDIpLCAyLCA1Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMiksIDQwLCA5Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMyksIDYsIDU1LCAzNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNCksIDEsIDQsIDg1LCA3Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNCksIDE2LCA3NywgNzIsIDE2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA1KSwgMiwgNjgsIDQzLCA1NCwgNTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDUpLCA0MiwgOTQsIDk2LCA3MiwgOTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDYpLCA2LCA4NywgMTksIDQ3LCA2NywgMzZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDcpLCAxLCA5LCA5NSwgMTEsIDYyLCA3NywgNzZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDcpLCAxNywgNTksIDIxLCA4NiwgNCwgNDQsIDE2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA4KSwgMiwgODEsIDQ3LCA0OSwgNzYsIDcxLCA2LCA1Nl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgOCksIDQ1LCAzLCA1OSwgOTYsIDI3LCAzNywgNCwgOTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDkpLCA3LCAyMCwgNTcsIDU5LCA0MCwgMzcsIDkyLCA3OSwgMzZdKVxyXG4gICAgXTtcclxuXHJcbiAgICBsZXQgYmFzZV9OdW0yUHdyczogSW50OEFycmF5W10gPSBbXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgMV0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDJdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCA0XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgOF0pXHJcbiAgICBdO1xyXG4gICAgbGV0IHRtcG51bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBvdXRWYWw6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgZXhwOiBudW1iZXIgPSA8bnVtYmVyPmV4cHI7XHJcbiAgICBpZiAoZXhwID09PSAwKSB7XHJcbiAgICAgIG91dFZhbC5OVU1fWkVSTygpO1xyXG4gICAgICByZXR1cm4gb3V0VmFsO1xyXG4gICAgfVxyXG4gICAgb3V0VmFsLm51bV80X3Vsb25nKGxvbmcyKTtcclxuICAgIGlmIChsb25nMSAhPT0gMCkge1xyXG4gICAgICB0bXBudW0ubnVtXzRfdWxvbmcobG9uZzEpO1xyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5tdWwodG1wbnVtLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0xNlB3cnNbOF0pKTtcclxuICAgICAgb3V0VmFsID0gTlVNX1RZUEUuYWRkKHRtcG51bSwgb3V0VmFsKTtcclxuICAgIH1cclxuICAgIGV4cCA9IDxudW1iZXI+KGV4cCAtIGJpYXMpO1xyXG4gICAgaWYgKGV4cCA8IDApIHtcclxuICAgICAgZXhwID0gLWV4cDtcclxuICAgICAgd2hpbGUgKGV4cCA+PSA2MCkge1xyXG4gICAgICAgIG91dFZhbCA9IE5VTV9UWVBFLmRpdihvdXRWYWwsIG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1sxNF0pKTtcclxuICAgICAgICBleHAgLT0gNTY7XHJcbiAgICAgIH1cclxuICAgICAgdG1wbnVtID0gTlVNX1RZUEUubXVsKG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1tleHAgPj4gMl0pLFxyXG4gICAgICAgIG5ldyBOVU1fVFlQRShiYXNlX051bTJQd3JzW2V4cCAmIDNdKSk7XHJcbiAgICAgIG91dFZhbCA9IE5VTV9UWVBFLmRpdihvdXRWYWwsIHRtcG51bSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGV4cCA+PSA2MCkge1xyXG4gICAgICAgIG91dFZhbC5OVU1fWkVSTygpO1xyXG4gICAgICAgIHJldHVybiBvdXRWYWw7XHJcbiAgICAgIH1cclxuICAgICAgdG1wbnVtID0gTlVNX1RZUEUubXVsKG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1tleHAgPj4gMl0pLFxyXG4gICAgICAgIG5ldyBOVU1fVFlQRShiYXNlX051bTJQd3JzW2V4cCAmIDNdKSk7XHJcbiAgICAgIG91dFZhbCA9IE5VTV9UWVBFLm11bChvdXRWYWwsIHRtcG51bSk7XHJcbiAgICB9XHJcbiAgICBpZiAoKHNpZ24gJiAweDgwKSAhPT0gMClcclxuICAgICAgb3V0VmFsLl9kYXRhWzBdID0gb3V0VmFsLl9kYXRhWzBdIHwgTlVNX1RZUEUuU0lHTl9NQVNLO1xyXG4gICAgb3V0VmFsLnJvdW5kKGRlYyk7XHJcbiAgICByZXR1cm4gb3V0VmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE1hdGhlbWF0aWNhbCBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBldmFsX29wX2xvZyh2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGlmICh2YWwxID09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLnRvX2RvdWJsZSgpO1xyXG5cclxuICAgIGlmIChkID4gMC4wKVxyXG4gICAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShNYXRoLmxvZyhkKSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc1ZhbC5OVU1fWkVSTygpO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX2V4cCh2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGxldCByZXNWYWw6IE5VTV9UWVBFO1xyXG5cclxuICAgIGlmICh2YWwxID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcbiAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShNYXRoLmV4cChkKSk7XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV2YWxfb3BfYWJzKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUodmFsMSk7XHJcbiAgICByZXNWYWwubnVtX2FicygpO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX3Npbih2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGlmICh2YWwxID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIGxldCByZXNWYWw6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgZDogbnVtYmVyID0gdmFsMS50b19kb3VibGUoKTtcclxuICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKE1hdGguc2luKGQpKTtcclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXZhbF9vcF9jb3ModmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICBsZXQgZDogbnVtYmVyID0gdmFsMS50b19kb3VibGUoKTtcclxuICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKE1hdGguY29zKGQpKTtcclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXZhbF9vcF90YW4odmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIGxldCByZXNWYWw6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgZDogbnVtYmVyID0gdmFsMS50b19kb3VibGUoKTtcclxuICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKE1hdGgudGFuKGQpKTtcclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXZhbF9vcF9hc2luKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLnRvX2RvdWJsZSgpO1xyXG4gICAgaWYgKGQgPD0gMS4wICYmIGQgPj0gLTEuMClcclxuICAgICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC5hc2luKGQpKTtcclxuICAgIGVsc2VcclxuICAgICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoMC4wKTtcclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXZhbF9vcF9hY29zKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLnRvX2RvdWJsZSgpO1xyXG5cclxuICAgIGlmIChkIDw9IDEuMCAmJiBkID49IC0xLjApXHJcbiAgICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKE1hdGguYWNvcyhkKSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKDAuMCk7XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV2YWxfb3BfYXRhbih2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGlmICh2YWwxID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIGxldCByZXNWYWw6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLnRvX2RvdWJsZSgpO1xyXG4gICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC5hdGFuKGQpKTtcclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICBudW1fYWJzKCk6IHZvaWQge1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpIHtcclxuICAgICAgbCA9IHRoaXMuTlVNX0xPTkcoKTtcclxuICAgICAgaWYgKGwgPCAwKVxyXG4gICAgICAgIGwgPSAtbDtcclxuICAgICAgdGhpcy5OVU1fNF9MT05HKGwpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kYXRhWzBdICY9IE5VTV9UWVBFLnRvU0J5dGUofk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmFuZG9tYWwgTWF0aCBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGV2YWxfb3BfcmFuZCh2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGlmICh2YWwxID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBsZXQgcmFuZF9pbml0aWFsaXplZDogYm9vbGVhbiA9IFJhbmRvbWl6ZXIuZ2V0X2luaXRpYWxpemVkKCk7XHJcbiAgICBsZXQgcmFuZF9tb2Q6IE5VTV9UWVBFO1xyXG4gICAgbGV0IHJhbmRfbXVsOiBOVU1fVFlQRTtcclxuICAgIGxldCByYW5kX3NlZWQ6IE5VTV9UWVBFO1xyXG5cclxuICAgIGxldCB0bXBfbnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG5cclxuICAgIGlmICghcmFuZF9pbml0aWFsaXplZCkge1xyXG4gICAgICBSYW5kb21pemVyLnNldF9pbml0aWFsaXplZCgpOyAvLyBzZXQgdG8gdHJ1ZVxyXG4gICAgICByYW5kX21vZCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICByYW5kX211bCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICByYW5kX3NlZWQgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgcmFuZF9tb2QubnVtXzRfYV9zdGQoXCIxMDAwMDAwMDdcIik7XHJcbiAgICAgIHJhbmRfbXVsLm51bV80X2Ffc3RkKFwiNzUwMDAwMDdcIik7XHJcbiAgICAgIHJhbmRfc2VlZC5udW1fNF9hX3N0ZChcIjEyMzQ1Njc4XCIpO1xyXG5cclxuICAgICAgUmFuZG9taXplci5zZXRfbW9kKHJhbmRfbW9kLnRvX2RvdWJsZSgpKTtcclxuICAgICAgUmFuZG9taXplci5zZXRfbXVsKHJhbmRfbXVsLnRvX2RvdWJsZSgpKTtcclxuICAgICAgUmFuZG9taXplci5zZXRfc2VlZChyYW5kX3NlZWQudG9fZG91YmxlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgcmFuZF9tb2QgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShSYW5kb21pemVyLmdldF9tb2QoKSk7XHJcbiAgICAgIHJhbmRfbXVsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoUmFuZG9taXplci5nZXRfbXVsKCkpO1xyXG4gICAgICByYW5kX3NlZWQgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShSYW5kb21pemVyLmdldF9zZWVkKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbDEubnVtX2lzX3plcm8oKSkge1xyXG4gICAgICBpZiAodmFsMS5udW1faXNfbmVnKCkpXHJcbiAgICAgICAgcmFuZF9zZWVkLk5VTV80X0xPTkcoTlVNX1RZUEUuaGFzaF9yYW5kKCkpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmFuZF9zZWVkID0gbmV3IE5VTV9UWVBFKHZhbDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICBpZiAocmFuZF9zZWVkLm51bV9pc19uZWcoKSkge1xyXG4gICAgICAgIHRtcF9udW0uTlVNXzRfTE9ORygtMSk7XHJcbiAgICAgICAgcmFuZF9zZWVkID0gTlVNX1RZUEUubXVsKHJhbmRfc2VlZCwgdG1wX251bSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByYW5kX3NlZWQgPSBOVU1fVFlQRS5tdWwocmFuZF9zZWVkLCByYW5kX211bCk7XHJcbiAgICByYW5kX3NlZWQgPSBOVU1fVFlQRS5tb2QocmFuZF9zZWVkLCByYW5kX21vZCk7XHJcbiAgICB0bXBfbnVtID0gTlVNX1RZUEUuZGl2KHJhbmRfc2VlZCwgcmFuZF9tb2QpO1xyXG4gICAgLy8gcmVzZXQgZ2xvYmFscyB2YXJpYWJsZXNcclxuICAgIFJhbmRvbWl6ZXIuc2V0X21vZChyYW5kX21vZC50b19kb3VibGUoKSk7XHJcbiAgICBSYW5kb21pemVyLnNldF9tdWwocmFuZF9tdWwudG9fZG91YmxlKCkpO1xyXG4gICAgUmFuZG9taXplci5zZXRfc2VlZChyYW5kX3NlZWQudG9fZG91YmxlKCkpO1xyXG4gICAgcmV0dXJuIHRtcF9udW07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGEgcmFuZG9tIHZhbHVlIHRvIHVzZSBhcyB0aGUgY3RsIGVuY3JpcHRpb24gIGtleVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgaGFzaF9yYW5kKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKChuZXcgRGF0ZSgpLmdldE1pbGxpc2Vjb25kcygpKSBeIE1hdGgucmFuZG9tKCkgKiAxMjM0NTY3OCk7XHJcbiAgICAvLyBsZXQgYXJyYXk6IG51bWJlcltdID0gbmV3IEFycmF5PG51bWJlcj4oMTAwKTtcclxuICAgIC8vIGZvciAobGV0IF9haTogbnVtYmVyID0gMDsgX2FpIDwgYXJyYXkubGVuZ3RoOyArK19haSlcclxuICAgIC8vICAgYXJyYXlbX2FpXSA9IDA7XHJcbiAgICAvLyBuZXcgUmFuZG9tKCkuTmV4dEJ5dGVzKGFycmF5KTtcclxuICAgIC8vIHJldHVybiA8bnVtYmVyPihNaXNjLmdldFN5c3RlbU1pbGxpc2Vjb25kcygpIF4gTlVNX1RZUEUuaGFzaF9zdHJfbmV3KGFycmF5KSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgT3BlckRhdGEge1xyXG4gIE5VTV9EaWZmXzogbnVtYmVyID0gMDtcclxuICBOVU1fRXhwMV86IG51bWJlciA9IDA7XHJcbiAgTlVNX0V4cDJfOiBudW1iZXIgPSAwO1xyXG59XHJcblxyXG4iXX0=
|
|
1741
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTlVNX1RZUEUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZGF0YS9OVU1fVFlQRS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBYXRELE1BQU0sT0FBTyxRQUFRO0lBaUJuQixJQUFJLElBQUksQ0FBQyxLQUFnQjtRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFZRCxZQUFZLHNDQUE0QyxFQUFFLFdBQWlCLEVBQUUsZUFBd0I7UUF2QnJHLGNBQVMsR0FBVyxHQUFHLENBQUM7UUFDeEIsZ0JBQVcsR0FBVyxHQUFHLENBQUM7UUFDbEIseUJBQW9CLEdBQVcsQ0FBQyxDQUFDO1FBQ2pDLFVBQUssR0FBYyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFxQjFELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLE9BQU87U0FDUjtRQUNELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElB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QUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BEO1NBQ0k7UUFDVCxLQUFLLEdBQUcsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDN0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUMxRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0Y7UUFDUCxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7U0FDMUM7UUFDTCxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7WUFDZCxRQUFRLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtnQkFDMUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcs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RUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0UsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0UsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEYsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkYsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RixJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzVGLENBQUM7UUFFRixJQUFJLGFBQWEsR0FBZ0I7WUFDL0IsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDMUQsQ0FBQztRQUVKLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDckIsT0FBTyxDQUFDLENBQUM7UUFDWCxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1lBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNWLE9BQU8sR0FBRyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQzthQUNJO1lBQ0gsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNWLE9BQU8sR0FBRyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQztRQUNELEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ1QsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs7WUFDdkMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDWCxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDWCxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JFO2FBQ0k7WUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2QsT0FBTyxHQUFHLElBQUksRUFBRSxFQUFFO2dCQUNoQixNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsR0FBRyxJQUFJLEVBQUUsQ0FBQzthQUNYO1lBQ0QsTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyRTtRQUNELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLEdBQUcsRUFBRSxDQUFDO1lBQ04sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1lBQ2IsS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM5QjthQUNJO1lBQ0gsTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdCLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0QyxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzlCO1FBQ0QsUUFBUSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1lBQ2IsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUNYLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7YUFDSTtZQUNILEdBQUcsSUFBSSxJQUFJLENBQUM7WUFDWixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFckMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFN0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU5RCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFH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QUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEUsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0UsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0UsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEYsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkYsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLElBQUksU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RixJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzVGLENBQUM7UUFFRixJQUFJLGFBQWEsR0FB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LFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDM0MsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUtPLE1BQU0sQ0FBQyxTQUFTO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFNckUsQ0FBQzs7QUEvNkVNLHFCQUFZLEdBQVcsVUFBVSxDQUFDO0FBQ2xDLGdCQUFPLEdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDckIsa0JBQVMsR0FBVyxDQUFDLENBQUMsQ0FBQztBQUN2QixpQkFBUSxHQUFXLEVBQUUsQ0FBQztBQUN0QixzQkFBYSxHQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzNCLGlCQUFRLEdBQVcsRUFBRSxDQUFDO0FBQ3RCLGtCQUFTLEdBQVcsQ0FBQyxHQUFHLENBQUM7QUE0NkVsQyxNQUFNLE9BQU8sUUFBUTtJQUFyQjtRQUNFLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixjQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ICBJbnQzMiwgTk51bWJlciwgTlN0cmluZywgTnVtYmVyU3R5bGVzLCBTdHJpbmdCdWlsZGVyIH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQgeyBDb25zdGFudHMsIFBJQ0ludGVyZmFjZSwgUmFuZG9taXplciwgU3RvcmFnZUF0dHJpYnV0ZSwgVXRpbFN0ckJ5dGVNb2RlIH0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7IFBJQyB9IGZyb20gJy4uL2d1aS9QSUMnO1xyXG5pbXBvcnQgeyBJRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnYvSUVudmlyb25tZW50JztcclxuaW1wb3J0IHsgRXZlbnRzIH0gZnJvbSAnLi4vLi4vRXZlbnRzJztcclxuaW1wb3J0IHsgR3VpRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9HdWlFbnZpcm9ubWVudCc7XHJcblxyXG4vLy8gICBUaGlzIGNsYXNzIGhhbmRsZXMgYSBNYWdpYyBOdW1iZXIgdGhlIGlkZW50aWNhbCB3YXkgaXQncyByZXByZXNlbnRlZCBpbiBNYWdpYy5cclxuLy8vICAgTW9zdCBvZiB0aGUgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIHdlcmUgY29waWVkIGZyb20gdGhlIEMrKyBzb3VyY2VzIG9mIE1hZ2ljLFxyXG4vLy8gICBpbiBvcmRlciB0byBrZWVwIHRoZSBleGFjdCBsb2dpYyB1c2VkIGluIG9yZGVyIHRvIGltcGxlbWVudCBhbGwgdGhlIGZ1bmN0aW9uYWxpdHlcclxuLy8vICAgZXhwZWN0ZWQsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGV4YWN0IG1ldGhvZHMgbmFtZXMgYW5kIHZhcmlhYmxlcyBuYW1lcyB3aGVyZSB1c2VkXHJcbi8vLyAgIGluIG9yZGVyIHRvIG1ha2UgZnV0dXJlIGRlYnVnZ2luZyBtb3JlIGVhc3llci5cclxuLy8vICAgTm90aWNlIGEgbG9uZyBkYXRhIHR5cGUgdGhhdCBpcyB1c2VkIGluIE1hZ2ljIEMrKyBzb3VyY2VzLCBpcyByZXByZXNlbnRlZCBpbiBqYXZhXHJcbi8vLyAgIGJ5IHRoZSBpbnQgZGF0YSB0eXBlLlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPGF1dGhvcj4gIEFsb24gQmFyLU5lc1xyXG4vLy8gPC9hdXRob3I+XHJcblxyXG5leHBvcnQgY2xhc3MgTlVNX1RZUEUge1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gQ29uc3RhbnRzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBzdGF0aWMgSU5UX1pFUk9fSEVYOiBzdHJpbmcgPSBcIjAwMDAwMDAwXCI7XHJcbiAgc3RhdGljIE5PX1JPT006IG51bWJlciA9IC0xO1xyXG4gIHN0YXRpYyBaRVJPX0ZJTEw6IG51bWJlciA9IC0yO1xyXG4gIHN0YXRpYyBOVU1fU0laRTogbnVtYmVyID0gMjA7XHJcbiAgc3RhdGljIE5VTV9MT05HX1RZUEU6IG51bWJlciA9IC0xO1xyXG4gIHN0YXRpYyBFWFBfQklBUzogbnVtYmVyID0gNjQ7XHJcbiAgc3RhdGljIFNJR05fTUFTSzogbnVtYmVyID0gLTEyODtcclxuXHJcbiAgQ09NTUFDSEFSOiBzdHJpbmcgPSAnLCc7XHJcbiAgREVDSU1BTENIQVI6IHN0cmluZyA9ICcuJztcclxuICBwcml2YXRlIFNJR05JRklDQU5UX05VTV9TSVpFOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2RhdGE6IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoTlVNX1RZUEUuTlVNX1NJWkUpO1xyXG5cclxuICBzZXQgRGF0YSh2YWx1ZTogSW50OEFycmF5KSB7XHJcbiAgICB0aGlzLl9kYXRhID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgRGF0YSgpOiBJbnQ4QXJyYXkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIENvbnN0cnVjdG9yIGxpc3RcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKHJlY29yZEhleFN0cjogc3RyaW5nKTtcclxuICBjb25zdHJ1Y3RvcihieXRlVmFsOiBJbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik7XHJcbiAgY29uc3RydWN0b3IoYnl0ZVZhbDogSW50OEFycmF5KTtcclxuICBjb25zdHJ1Y3RvcihkZWNTdHI6IHN0cmluZywgcGljOiBQSUMsIGNvbXBJZHg6IG51bWJlcik7XHJcbiAgY29uc3RydWN0b3IobnVtRnJvbTogTlVNX1RZUEUpO1xyXG4gIGNvbnN0cnVjdG9yKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tPzogYW55LCBvZmZzZXRPclBpYz86IGFueSwgbGVuZ3RoT3JDb21wSWR4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tID09PSBudWxsIHx8IHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMShyZWNvcmRIZXhTdHJPckJ5dGVWYWxPckRlY1N0ck9yTnVtRnJvbSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIChyZWNvcmRIZXhTdHJPckJ5dGVWYWxPckRlY1N0ck9yTnVtRnJvbSA9PT0gbnVsbCB8fCByZWNvcmRIZXhTdHJPckJ5dGVWYWxPckRlY1N0ck9yTnVtRnJvbSBpbnN0YW5jZW9mIEludDhBcnJheSkgJiYgKG9mZnNldE9yUGljID09PSBudWxsIHx8IG9mZnNldE9yUGljLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChsZW5ndGhPckNvbXBJZHggPT09IG51bGwgfHwgbGVuZ3RoT3JDb21wSWR4LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMihyZWNvcmRIZXhTdHJPckJ5dGVWYWxPckRlY1N0ck9yTnVtRnJvbSwgb2Zmc2V0T3JQaWMsIGxlbmd0aE9yQ29tcElkeCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIChyZWNvcmRIZXhTdHJPckJ5dGVWYWxPckRlY1N0ck9yTnVtRnJvbSA9PT0gbnVsbCB8fCByZWNvcmRIZXhTdHJPckJ5dGVWYWxPckRlY1N0ck9yTnVtRnJvbSBpbnN0YW5jZW9mIEludDhBcnJheSkpIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8zKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tID09PSBudWxsIHx8IHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpICYmIChvZmZzZXRPclBpYyA9PT0gbnVsbCB8fCBvZmZzZXRPclBpYyBpbnN0YW5jZW9mIFBJQykgJiYgKGxlbmd0aE9yQ29tcElkeCA9PT0gbnVsbCB8fCBsZW5ndGhPckNvbXBJZHguY29uc3RydWN0b3IgPT09IE51bWJlcikpIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl80KHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tLCBvZmZzZXRPclBpYywgbGVuZ3RoT3JDb21wSWR4KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl81KHJlY29yZEhleFN0ck9yQnl0ZVZhbE9yRGVjU3RyT3JOdW1Gcm9tKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBEZWZhdWx0IGNvbnN0cnVjdG9yLiBTZXQgdmFsdWUgdG8gMFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8wKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0Q29uc3QoKTtcclxuICAgIHRoaXMuTlVNX1pFUk8oKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDcmVhdGVzIGEgTWFnaWMgTnVtYmVyIGZyb20gYSBzdHJpbmcgZ290IGZyb20gdGhlIFhNTCByZWNvcmQgdmFsdWUuIFRoZVxyXG4gIC8vLyAgIFN0cmluZyBpcyA0MCBjaGFyYWN0ZXJzIGxvbmcgaW4gYW4gaGV4YSByZXByZXNlbnRhdGlvbi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVjb3JkSGV4U3RyXCI+ICBNYWdpYyBudW1iZXIgaW4gaGV4IGZvcm1hdCwgNDAgY2hhcmFjdGVycyBsb25nXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKHJlY29yZEhleFN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMDtcclxuICAgIGxldCB0d29EaWdpdHM6IHN0cmluZztcclxuICAgIHRoaXMuaW5pdENvbnN0KCk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkU7IGkgPSBpICsgMSkge1xyXG4gICAgICAgIHR3b0RpZ2l0cyA9IHJlY29yZEhleFN0ci5zdWJzdHIoIGkgKiAyLCAyKTtcclxuICAgICAgICB0aGlzLl9kYXRhW2ldID0gTlVNX1RZUEUudG9TQnl0ZShOTnVtYmVyLlBhcnNlKHR3b0RpZ2l0cywgTnVtYmVyU3R5bGVzLkhleE51bWJlcikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgRXZlbnRzLldyaXRlV2FybmluZ1RvTG9nKGV4KTtcclxuXHJcbiAgICAgIHRoaXMuTlVNX1pFUk8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDcmVhdGVzIGEgTWFnaWMgTnVtYmVyIGZyb20gYXJyYXkgb2YgYnl0ZXMuIFVzZWQgZnJvbSB0aGUgZXhwcmVzc2lvbiBldmFsdWF0b3JcclxuICAvLy8gICB3aGVuIGEgTWFnaWMgTnVtYmVyIHZhbHVlIGFwZWFycyB3aXRoaW4gYW4gZXhwcmVzc2lvbi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYnl0ZVZhbFwiPiAgQXJyYXkgb2YgYnl0ZXMgcmVwcmVzZW50aW5nIGEgTWFnaWMgTnVtYmVyPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9mZnNldFwiPiAgIEluZGV4IG9mIHRoZSBmaXJzdCBieXRlIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZW5ndGhcIj4gICBOdW1iZXIgb2YgYnl0ZXMgdG8gdXNlIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8yKGJ5dGVWYWw6IEludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzAoKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICB0aGlzLl9kYXRhW2ldID0gYnl0ZVZhbFtpICsgb2Zmc2V0XTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDcmVhdGVzIGEgTWFnaWMgTnVtYmVyIGZyb20gYXJyYXkgb2YgYnl0ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMyhieXRlVmFsOiBJbnQ4QXJyYXkpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfMihieXRlVmFsLCAwLCBieXRlVmFsLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ3JlYXRlcyBhIE1hZ2ljIE51bWJlciBmcm9tIGEgZGVjaW1hbCBmb3IgbnVtYmVyIGFuZCBpdHMgcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZWNTdHJcIj4gIFRoZSBudW1iZXIgaW4gYSBzdHJpbmcgZGVjaW1hbCBmb3JtYXQgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPiAgICAgVGhlIHBpY3R1cmUgZm9ybWF0IHRvIGJlIHVzZWQgPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzQoZGVjU3RyOiBzdHJpbmcsIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgdGhpcy5mcm9tX2EoZGVjU3RyLCBwaWMsIGNvbXBJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENyZWF0ZXMgYSBNYWdpYyBOdW1iZXIgZnJvbSBhIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW1Gcm9tXCI+ICBUaGUgc291cmNlIE1hZ2ljIE51bWJlciA8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfNShudW1Gcm9tOiBOVU1fVFlQRSk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0Q29uc3QoKTtcclxuICAgIHRoaXMuX2RhdGEgPSBuZXcgSW50OEFycmF5KG51bUZyb20uX2RhdGEubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IF9haTogbnVtYmVyID0gMDsgX2FpIDwgdGhpcy5fZGF0YS5sZW5ndGg7ICsrX2FpKVxyXG4gICAgICB0aGlzLl9kYXRhW19haV0gPSBudW1Gcm9tLl9kYXRhW19haV07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkZWNpbWFsIHN0cmluZyBmcm9tIHRoZSBudW1iZXIgc3RvcmVkIGluIGEgTWFnaWMgTnVtYmVyLlxyXG4gIC8vLyAgIFRoZSBzdHJpbmcgaXMgYnVpbGQgZnJvbSB0aGUgcGljdHVyZSBwcm92aWRlZCBhcyBhIHBhcmFtZXRlci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+VGhlIHBpY3R1cmUgdG8gdXNlIGZvciBidWlsZGluZyB0aGUgZGlzcGxheSBzdHJpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IFRoZSBkZWNpbWFsIGZvcm0gb2YgdGhlIE1hZ2ljIE51bWJlciBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgdG9EaXNwbGF5VmFsdWUocGljOiBQSUMpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudG9fYShwaWMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluaXQgY29uc3RhbnRzIG9mIHRoZSBjbGFzc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBpbml0Q29uc3QoKTogdm9pZCB7XHJcbiAgICBsZXQgZW52OiBJRW52aXJvbm1lbnQgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudDtcclxuICAgIHRoaXMuREVDSU1BTENIQVIgPSBlbnYuR2V0RGVjaW1hbCgpO1xyXG4gICAgdGhpcy5DT01NQUNIQVIgPSBlbnYuR2V0VGhvdXNhbmRzKCk7XHJcbiAgICB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFID0gZW52LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGFuIGhleGFkZWNpbWFsIHN0cmluZyBmcm9tIHRoZSBNYWdpYyBOdW1iZXIgZm9yIHRoZSBkYXRhIHJlY29yZCBpblxyXG4gIC8vLyAgIHRoZSBYTUwgdGFnICh0byBiZSBzZW50IHRvIHRoZSBNYWdpYyBTZXJ2ZXIpLiBUaGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nXHJcbiAgLy8vICAgd2lsbCBhbGx3YXlzIGJlIHR3byB0aW1lcyB0aGUgbGVuZ3RoIG9mIHRoZSBNYWdpYyBOdW1iZXJzIChpbiBieXRlcylcclxuICAvLy8gICBiZWNhdXNlIGV2ZXJ5IGJ5dGUgaW4gdGhlIE1hZ2ljIE51bWJlciB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHdvXHJcbiAgLy8vICAgY2hhcmFjdGVyIGhleGFkZWNpbWFsIHN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGhleGFkZWNpbWFsIHN0cmluZ1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgdG9YTUxyZWNvcmQoKTogc3RyaW5nIHtcclxuICAgIGxldCBoZXhTdHI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcih0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFICogMik7XHJcbiAgICBsZXQgbnVtOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgbnVtID0gNTtcclxuICAgIGVsc2VcclxuICAgICAgbnVtID0gdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRTtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRTsgaSsrKSB7XHJcbiAgICAgIGlmIChpIDwgbnVtKVxyXG4gICAgICAgIGhleFN0ci5BcHBlbmQoKCcwJyArICh0aGlzLl9kYXRhW2ldICYgMHhGRikudG9TdHJpbmcoMTYpKS5zbGljZSgtMikpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaGV4U3RyLkFwcGVuZChcIjAwXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoZXhTdHIuVG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zZm9ybWluZyBhIGRlY2ltYWwgc3RyaW5nIG51bWJlciB0byBhIE1hZ2ljIE51bWJlciB1c2luZyB0aGUgZm9ybWF0XHJcbiAgLy8vICAgcHJvdmlkZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIkFscGhhXCI+ICBUaGUgbnVtYmVyIGlzIGRlY2ltYWwgc3RyaW5nIGZvcm1cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPiAgICBUaGUgcGljdHVyZSBmb21hdCB0byB1c2UgZm9yIHRoZSBleHRyYWN0aW5nIHRoZSBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGZyb21fYShBbHBoYTogc3RyaW5nLCBwaWM6IFBJQywgY29tcElkeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IGlkeDogbnVtYmVyO1xyXG4gICAgbGV0IGRlYzogYm9vbGVhbjtcclxuICAgIGxldCBkZWNzOiBudW1iZXI7XHJcbiAgICBsZXQgZGlnaXQ6IG51bWJlcjtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCBub19waWM6IGJvb2xlYW47XHJcbiAgICBsZXQgUG9zOiBudW1iZXI7XHJcbiAgICBsZXQgU1R5cGU6IGJvb2xlYW47XHJcbiAgICBsZXQgU1BhcnQ6IGJvb2xlYW47XHJcbiAgICBsZXQgU2lnbmVkOiBudW1iZXI7XHJcbiAgICBsZXQgYnVmOiBzdHJpbmc7XHJcbiAgICBsZXQgbWFzazogc3RyaW5nID0gXCJcIjtcclxuICAgIGxldCBjOiBzdHJpbmc7XHJcbiAgICBsZXQgTmd0dlBybXQ6IGJvb2xlYW47XHJcbiAgICBsZXQgU2Nhbjogc3RyaW5nID0gXCJcIjtcclxuICAgIGxldCBQYnVmOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IGlzX25lZ2F0aXZlOiBib29sZWFuO1xyXG4gICAgbGV0IG5lZ1N0cjogc3RyaW5nO1xyXG4gICAgbGV0IG5lZ1ByZWY6IHN0cmluZztcclxuICAgIGxldCBwb3NQcmVmOiBzdHJpbmc7XHJcbiAgICBsZXQgbmVnU3VmZjogc3RyaW5nO1xyXG4gICAgbGV0IHBvc1N1ZmY6IHN0cmluZztcclxuICAgIGxldCBzcGVjaWFsVmFsTmV3UG9saWN5OiBib29sZWFuID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U3BlY2lhbFZhbE5ld1BvbGljeSgpO1xyXG5cclxuICAgIC8vIFBhcnNlIHRoZSBwaWN0dXJlIGZvcm1hdFxyXG4gICAgbm9fcGljID0gKHBpYyA9PSBudWxsKTtcclxuICAgIGxlbiA9IDA7XHJcbiAgICBTVHlwZSA9IGZhbHNlOyAgLy8gUElDX1BTVFYgOiB0cnVlLCBQSUNfTkdUVjogZmFsc2VcclxuICAgIFNQYXJ0ID0gZmFsc2U7ICAvLyBQSUNfUFJFRiA6IHRydWUsIFBJQ19TVUYgOiBmYWxzZVxyXG5cclxuICAgIGlmICghbm9fcGljKSB7XHJcbiAgICAgIG1hc2sgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgICBpZiAoIXNwZWNpYWxWYWxOZXdQb2xpY3kpXHJcbiAgICAgICAgaWYgKEFscGhhLmxlbmd0aCA+IHBpYy5nZXRNYXNrU2l6ZSgpKVxyXG4gICAgICAgICAgQWxwaGEgPSBBbHBoYS5zdWJzdHIoMCwgcGljLmdldE1hc2tTaXplKCkpO1xyXG4gICAgICBOZ3R2UHJtdCA9IHBpYy5pc05lZ2F0aXZlKCk7XHJcbiAgICAgIGlmIChOZ3R2UHJtdCkge1xyXG4gICAgICAgIG5lZ1ByZWYgPSBwaWMuZ2V0TmVnUHJlZl8oKTtcclxuICAgICAgICBwb3NQcmVmID0gcGljLmdldFBvc1ByZWZfKCk7XHJcbiAgICAgICAgbmVnU3VmZiA9IHBpYy5nZXROZWdTdWZmXygpO1xyXG4gICAgICAgIHBvc1N1ZmYgPSBwaWMuZ2V0UG9zU3VmZl8oKTtcclxuXHJcbiAgICAgICAgaWYgKG5lZ1ByZWYubGVuZ3RoID09PSBwb3NQcmVmLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKG5lZ1ByZWYubGVuZ3RoID09PSAwIHx8IG5lZ1ByZWYgPT09IHBvc1ByZWYpXHJcbiAgICAgICAgICAgIFNQYXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyBQSUNfU1VGXHJcbiAgICAgICAgICBlbHNlIFNQYXJ0ID0gdHJ1ZTsgLy8gUElDX1BSRUZcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBTUGFydCA9IHRydWU7IC8vIFBJQ19QUkVGXHJcblxyXG4gICAgICAgIGlmIChTUGFydClcclxuICAgICAgICAgIG5lZ1N0ciA9IG5lZ1ByZWY7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgbmVnU3RyID0gbmVnU3VmZjtcclxuXHJcbiAgICAgICAgaWYgKG5lZ1N0ci5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICBTVHlwZSA9IHRydWU7XHJcbiAgICAgICAgLy8gUElDX1BPU0lUSVZFXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgU1R5cGUgPSBmYWxzZTsgLy8gUElDX05FR0FUSVZFXHJcblxyXG4gICAgICAgIGlmIChTVHlwZSlcclxuICAgICAgICAgIFNjYW4gPSAoU1BhcnQgPyBwb3NQcmVmIDogcG9zU3VmZik7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgU2NhbiA9IChTUGFydCA/IG5lZ1ByZWYgOiBuZWdTdWZmKTtcclxuICAgICAgICBsZW4gPSBTY2FuLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHBpYyA9IG5ldyBQSUMoXCJcIiwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDLCBjb21wSWR4KTtcclxuICAgICAgTmd0dlBybXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMb2NhbGl6ZSB2YXJpYWJsZXMgYW5kIGZsYWdzXHJcbiAgICBkZWMgPSBmYWxzZTtcclxuICAgIGRlY3MgPSAwO1xyXG4gICAgZGlnaXQgPSAwO1xyXG4gICAgU2lnbmVkID0gMDtcclxuXHJcbiAgICAvLyBTcGVjaWFsVmFsTmV3UG9saWN5ID0gWVxyXG4gICAgLy8gTG9vcCBvbiBpbnB1dCBzdHJpbmcgb2YgbnVtYmVycyBhbmQgbWF0Y2ggdGhlbSBhZ2FpbnN0IHRoZSBwaWN0dXJlIG1hc2tcclxuICAgIC8vIEl0IG1heSBoYXBwZW4gdGhhdCB0aGUgcGljdHVyZSBtYXNrIGlzIHNtYWxsZXIgdGhhbiByZWNlaXZlZCBudW1iZXIgc3RyaW5nXHJcbiAgICAvLyBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cmluZyByZWNlaXZlZCBpcyAnMTIzNC41Nicgd2hlcmVhcyBwaWN0dXJlIGlzICcyLjEnXHJcbiAgICAvLyB0aGVuIHRoZSBjaGFyYWN0ZXJzIHRvIHBhcnNlIGZyb20gdGhlIGlucHV0IHN0cmluZyBpcyAnMTIzNC41JyBpLmUuICMgZGlnaXRzXHJcbiAgICAvLyBzcGVjaWZpZWQgaW4gcGljdHVyZSBiZWZvcmUgdGhlIGRlY2ltYWwgc2hvdWxkIGJlIGlnbm9yZWQuIFBhcnNpbmcgc2hvdWxkXHJcbiAgICAvLyBjb250aW51ZSB0aWxsICMgb2YgZGlnaXRzIGFmdGVyIGRlY2ltYWwgcG9pbnQgaW4gcGljdHVyZSBtYXRjaCB3aXRoIHRob3NlIGluXHJcbiAgICAvLyB0aGUgaW5wdXQgc3RyaW5nIG9yIHRoZSBlbmQgb2YgdGhlIHN0cmluZ1xyXG4gICAgZm9yIChpZHggPSAwOyBpZHggPCBBbHBoYS5sZW5ndGg7ICkge1xyXG4gICAgICAvLyBBcyBtZW50aW9uZWQgYWJvdmUsIGNvbnRpbnVlIHBhcnNpbmcgZXZlbiBpZiBtYXNrIGxlbmd0aCBhcyBleGhhdXN0ZWQgYnkgY2hlY2tpbmdcclxuICAgICAgLy8gaWR4ID49IHBpYy5tYXNrX3NpemUuIEhvd2V2ZXIsIGFzIGxvbmcgYXMgbWFzayBsZW5ndGggaXMgdmFsaWQsIG1hdGNoIHRoZSBtYXNrXHJcbiAgICAgIGlmIChub19waWMgfHwgKHNwZWNpYWxWYWxOZXdQb2xpY3kgJiYgaWR4ID49IHBpYy5nZXRNYXNrU2l6ZSgpKSAgfHwgbWFza1tpZHhdID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTikpIHtcclxuICAgICAgICBjID0gQWxwaGFbaWR4XTtcclxuICAgICAgICBpZiAoc3BlY2lhbFZhbE5ld1BvbGljeSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAvLyBzdG9wIHBhcnNpbmcgaWYgIyBvZiBkZWNzIGFscmVhZHkgcmVhY2hlZFxyXG4gICAgICAgICAgaWYgKGRlYyAmJiBkZWNzID09PSBwaWMuZ2V0RGVjKCkpXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIEZpbmFsbHksIHN0b3AgcGFyc2luZyBvbiBtYXRjaGluZyByZXF1aXJlZCBuby4gb2YgZGVjaW1hbCBkaWdpdHNcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjKSkge1xyXG4gICAgICAgICAgZGlnaXQrKztcclxuICAgICAgICAgIFBidWYgKz0gYztcclxuICAgICAgICAgIGlmIChkZWMpXHJcbiAgICAgICAgICAgIGRlY3MrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYyA9PT0gdGhpcy5ERUNJTUFMQ0hBUikge1xyXG4gICAgICAgICAgUGJ1ZiArPSB0aGlzLkRFQ0lNQUxDSEFSO1xyXG4gICAgICAgICAgZGVjID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYyAhPT0gdGhpcy5DT01NQUNIQVIpIHtcclxuICAgICAgICAgIGlmIChOZ3R2UHJtdCAmJiBTaWduZWQgPT09IDApIHtcclxuICAgICAgICAgICAgU2lnbmVkID0gMTtcclxuICAgICAgICAgICAgZm9yIChpID0gaWR4LCBQb3MgPSAwOyBpIDw9IEFscGhhLmxlbmd0aCAmJiBQb3MgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChub19waWMgfHwgbWFza1tpXSA9PT0gU3RyaW5nLmZyb21DaGFyQ29kZShQSUNJbnRlcmZhY2UuUElDX04pKSB7XHJcbiAgICAgICAgICAgICAgICBjID0gQWxwaGFbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoYyAhPT0gU2NhbltQb3NdKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnLScgJiYgIVNUeXBlKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJysnICYmIFNUeXBlKVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBTaWduZWQgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBQb3MrKztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKFBvcyA+IDAgJiYgUG9zIDwgbGVuKVxyXG4gICAgICAgICAgICAgIFNpZ25lZCA9IC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFFDUiAjIDMwOTYyMyA6IElmIHByZWZpeC9zdWZmaXggc3RyaW5ncyBjb250YWlucyBkaWdpdHMgaW4gaXQsIGl0IGlzIGNvbnNpZGVyZWQgYXMgcGFydCBvZiBkYXRhLlxyXG4gICAgICAgICAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBpdCBza2lwIHRoZSBwcmVmaXggLyBzdWZmaXggc3RyaW5ncyB3aGlsZSBleHRyYWN0aW5nIHRoZSBkYXRhIHBhcnQgdG8gYnVpbGQgTlVNX1RZUEUuXHJcbiAgICAgICAgICAgIGlmIChpZHggPT09IDApIHtcclxuICAgICAgICAgICAgICBpZiAocGljLmdldE5lZ1ByZWZfKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIGlmIChBbHBoYS5zdGFydHNXaXRoKHBpYy5nZXROZWdQcmVmXygpKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZHggKz0gcGljLmdldE5lZ1ByZWZfKCkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocGljLmdldFBvc1ByZWZfKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIGlmIChBbHBoYS5zdGFydHNXaXRoKHBpYy5nZXRQb3NQcmVmXygpKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZHggKz0gcGljLmdldFBvc1ByZWZfKCkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAocGljLmdldE5lZ1N1ZmZfKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIGlmIChBbHBoYS5lbmRzV2l0aChwaWMuZ2V0TmVnU3VmZl8oKSkpIHtcclxuICAgICAgICAgICAgICAgICAgaWR4ICs9IHBpYy5nZXROZWdTdWZmXygpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHBpYy5nZXRQb3NTdWZmXygpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICBpZiAoQWxwaGEuZW5kc1dpdGgocGljLmdldFBvc1N1ZmZfKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlkeCArPSBwaWMuZ2V0UG9zU3VmZl8oKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlkeCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChTaWduZWQgPT09IDAgJiYgU1R5cGUpXHJcbiAgICAgIFNpZ25lZCA9IDE7XHJcblxyXG4gICAgLy8gUmV0dXJuIHJlc3VsdCBvZiBkZWNvZGVkIGRpZ2l0c1xyXG4gICAgaXNfbmVnYXRpdmUgPSAoU2lnbmVkID09PSAxICYmICFTVHlwZSkgfHwgKFNpZ25lZCAhPT0gMSAmJiBTVHlwZSk7XHJcbiAgICBpZiAoZGVjcyA+IDAgfHwgZGlnaXQgPiA5KSB7XHJcbiAgICAgIGJ1ZiA9IChpc19uZWdhdGl2ZSA/ICctJyA6ICcgJykgKyBQYnVmO1xyXG4gICAgICB0aGlzLm51bV80X2Ffc3RkKGJ1Zik7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuTlVNXzRfTE9ORygoaXNfbmVnYXRpdmUgPyAtMSA6IDEpICogdGhpcy5hXzJfbG9uZyhQYnVmKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRXh0cmFjdGluZyBhIG5vbiBsb25nIG51bWJlciBmcm9tIGEgZGVjaW1hbCBzdHJpbmcgbnVtYmVyIChudW1iZXJzIHdpdGhcclxuICAvLy8gICBkZWNpbWFsIHBvaW50LCBldGMuLi4pXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clwiPiAgVGhlIGRlY2ltYWwgc3RyaW5nIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIG51bV80X2Ffc3RkKHN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgZGlnc3RyOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgbGV0IGRpZ2xlbjogbnVtYmVyID0gMDtcclxuICAgIGxldCB3aG9sZXM6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZGVjczogbnVtYmVyID0gMDtcclxuICAgIGxldCBpc0RlYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGlzbWludXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuXHJcbiAgICBmb3IgKHBvcyA9IDA7IHBvcyA8IHN0ci5sZW5ndGg7IHBvcysrKSB7XHJcbiAgICAgIGxldCBjOiBzdHJpbmcgPSBzdHIuY2hhckF0KHBvcyk7XHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjKSkge1xyXG4gICAgICAgIGlmIChkaWdsZW4gPiAwIHx8IGMgIT09ICcwJykge1xyXG4gICAgICAgICAgZGlnbGVuKys7XHJcbiAgICAgICAgICBkaWdzdHIgPSBkaWdzdHIgKyBjO1xyXG4gICAgICAgICAgaWYgKCFpc0RlYylcclxuICAgICAgICAgICAgd2hvbGVzKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzRGVjKVxyXG4gICAgICAgICAgZGVjcyA9IGRlY3MgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGMgPT09IHRoaXMuREVDSU1BTENIQVIpXHJcbiAgICAgICAgaXNEZWMgPSB0cnVlO1xyXG4gICAgICBlbHNlIGlmIChjID09PSAnLScpXHJcbiAgICAgICAgaXNtaW51cyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5OVU1fWkVSTygpO1xyXG4gICAgaWYgKGRpZ2xlbiA9PT0gMClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmICgoKHdob2xlcyArIGRlY3MpICYgMSkgPiAwKSB7XHJcbiAgICAgIHRoaXMuX2RhdGFbMV0gPSBOVU1fVFlQRS50b1NCeXRlKGRpZ3N0ci5jaGFyQ29kZUF0KDApIC0gJzAnLmNoYXJDb2RlQXQoMCkpO1xyXG4gICAgICBwb3MgPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICBwb3MgPSAwO1xyXG5cclxuICAgIGxldCBudW1wdHI6IG51bWJlciA9IDEgKyBwb3M7XHJcbiAgICBkaWdsZW4gPSBNYXRoLm1pbihkaWdsZW4sICh0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSkgKiAyIC0gcG9zKTtcclxuICAgIHdoaWxlIChwb3MgPCBkaWdsZW4pIHtcclxuICAgICAgbGV0IGRpZ2l0MTogbnVtYmVyID0gTlVNX1RZUEUudG9TQnl0ZSgoZGlnc3RyLmNoYXJDb2RlQXQocG9zKyspIC0gJzAnLmNoYXJDb2RlQXQoMCkpKTtcclxuICAgICAgbGV0IGRpZ2l0MjogbnVtYmVyID0gTlVNX1RZUEUudG9TQnl0ZSgoKHBvcyA8IGRpZ2xlbilcclxuICAgICAgICA/IChkaWdzdHIuY2hhckNvZGVBdChwb3MrKykgLSAnMCcuY2hhckNvZGVBdCgwKSlcclxuICAgICAgICA6ICdcXDAnLmNoYXJDb2RlQXQoMCkpKTtcclxuICAgICAgdGhpcy5fZGF0YVtudW1wdHIrK10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUoZGlnaXQxKSAqIDEwICsgTlVNX1RZUEUudG9VQnl0ZShkaWdpdDIpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2hvbGVzID4gMClcclxuICAgICAgdGhpcy5fZGF0YVswXSA9IE5VTV9UWVBFLnRvU0J5dGUoPG51bWJlcj5OVU1fVFlQRS5FWFBfQklBUyArICgod2hvbGVzICsgMSkgPj4gMSkpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZSg8bnVtYmVyPk5VTV9UWVBFLkVYUF9CSUFTIC0gKGRlY3MgPj4gMSkpO1xyXG5cclxuICAgIGlmIChpc21pbnVzKVxyXG4gICAgICB0aGlzLl9kYXRhWzBdIHw9IE5VTV9UWVBFLlNJR05fTUFTSztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcmFuc2xhdGluZyBhIGxvbmcgdmFsdWUgaW50byBhbiBpbnRlcm5hbCBNYWdpYyBOdW1iZXIgZm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsb25nVmFsXCI+ICBUaGUgbnVtYmVyIHRvIGJlIGtlcHRcclxuICAvLy8gPC9wYXJhbT5cclxuICBOVU1fNF9MT05HKGxvbmdWYWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGhleFN0cjogc3RyaW5nO1xyXG4gICAgdGhpcy5OVU1fWkVSTygpO1xyXG5cclxuICAgIGlmIChsb25nVmFsICE9PSAwKSB7XHJcbiAgICAgIGlmIChsb25nVmFsIDwgMClcclxuICAgICAgICBsb25nVmFsID0gKDB4RkZGRkZGRkYgKyBsb25nVmFsICsgMSk7XHJcblxyXG4gICAgICBoZXhTdHIgPSBsb25nVmFsLnRvU3RyaW5nKDE2KTtcclxuICAgICAgaWYgKGxvbmdWYWwgPiAwKVxyXG4gICAgICAgIGhleFN0ciA9IE5VTV9UWVBFLklOVF9aRVJPX0hFWC5zdWJzdHIoaGV4U3RyLmxlbmd0aCkgKyBoZXhTdHI7XHJcblxyXG4gICAgICB0aGlzLl9kYXRhWzFdID0gTlVNX1RZUEUudG9TQnl0ZShwYXJzZUludChoZXhTdHIuc3Vic3RyKDYsICg4KSAtICg2KSksIDE2KSk7XHJcbiAgICAgIHRoaXMuX2RhdGFbMl0gPSBOVU1fVFlQRS50b1NCeXRlKHBhcnNlSW50KGhleFN0ci5zdWJzdHIoNCwgKDYpIC0gKDQpKSwgMTYpKTtcclxuICAgICAgdGhpcy5fZGF0YVszXSA9IE5VTV9UWVBFLnRvU0J5dGUocGFyc2VJbnQoaGV4U3RyLnN1YnN0cigyLCAoNCkgLSAoMikpLCAxNikpO1xyXG4gICAgICB0aGlzLl9kYXRhWzRdID0gTlVNX1RZUEUudG9TQnl0ZShwYXJzZUludChoZXhTdHIuc3Vic3RyKDAsICgyKSAtICgwKSksIDE2KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0dGluZyBhIGxvbmcgdmFsdWUgZnJvbSBhIGRlY2ltYWwgc3RyaW5nIHJlcHJlc2VudGluZyBhIGxvbmcgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+ICB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGxvbmcgdmFsdWVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBsb25nIG51bWJlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgYV8yX2xvbmcoc3RyOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IG46IG51bWJlciA9IDA7XHJcbiAgICBmb3IgKGxldCBwb3M6IG51bWJlciA9IDA7IHBvcyA8IHN0ci5sZW5ndGg7IHBvcysrKSB7XHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChzdHIuY2hhckF0KHBvcykpKSB7XHJcbiAgICAgICAgbiA9IG4gKiAxMDtcclxuICAgICAgICBuID0gbiArIHN0ci5jaGFyQ29kZUF0KHBvcykgLSAnMCcuY2hhckNvZGVBdCgwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQWN0aXZhdGluZyB0aGUgcHJvY2VzcyBvZiBidWlsZGluZyBhIGRlY2ltYWwgc3RyaW5nIGJ5IHRoZSBmb3JtYXQgaW5kaWNhdGVkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPmEgbnVtZXJpYyBwaWN0dXJlIHRvIHVzZSBmb3IgYnVpbGRpbmcgdGhlIGRpc3BsYXkgc3RyaW5nXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgdG9fYShwaWM6IFBJQyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50b19hX3BpYyhwaWMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBlcmZvcm1zIHRoZSBwcm9jZXNzIG9mIGJ1aWxkaW5nIGEgZGVjaW1hbCBzdHJpbmcgYnkgdGhlIHBpY3R1cmUgcHJvdmlkZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICB0aGUgcGljdHVyZSBjbGFzcyBob2xkaW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyBmb3JtIG9mIHRoZSBNYWdpYyBOdW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByb3RlY3RlZCB0b19hX3BpYyhwaWM6IFBJQyk6IHN0cmluZyB7XHJcbiAgICBsZXQgYnVmOiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KDEyOCk7XHJcbiAgICBsZXQgcmVtYWluczogbnVtYmVyO1xyXG4gICAgbGV0IHNpZ25fbjogYm9vbGVhbjtcclxuICAgIGxldCBwcmVmX2xlbjogbnVtYmVyO1xyXG4gICAgbGV0IHN1ZmZfbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgcHJlZl9zdHI6IFN0cmluZztcclxuICAgIGxldCBzdWZmX3N0cjogU3RyaW5nO1xyXG4gICAgbGV0IHN0cl9wb3M6IG51bWJlcjtcclxuICAgIGxldCBzdHJfbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgb3V0X3BvczogbnVtYmVyO1xyXG4gICAgbGV0IG91dF9idWY6IHN0cmluZ1tdO1xyXG4gICAgbGV0IHRtcF9vdXRfYnVmOiBzdHJpbmdbXTtcclxuICAgIGxldCBwYWQ6IHN0cmluZztcclxuICAgIGxldCBsZWZ0OiBib29sZWFuO1xyXG4gICAgbGV0IHBmaWxsOiBib29sZWFuO1xyXG4gICAgbGV0IG1hc2tfY2hhcnM6IG51bWJlcjtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCByZXM6IHN0cmluZ1tdO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBpc091dDogYm9vbGVhbjtcclxuICAgIGxldCBvdXRWYWw6IHN0cmluZ1tdO1xyXG5cclxuICAgIGxlbiA9IHBpYy5nZXRNYXNrU2l6ZSgpO1xyXG5cclxuICAgIC8vIFNldCBzaWducyBvZiBudW1iZXJcclxuICAgIHNpZ25fbiA9IChwaWMuaXNOZWdhdGl2ZSgpICYmIHRoaXMubnVtX2lzX25lZygpID8gZmFsc2UgOiB0cnVlKTtcclxuXHJcbiAgICBwcmVmX2xlbiA9IChzaWduX24gPyBwaWMuZ2V0UG9zUHJlZl8oKS5sZW5ndGggOiBwaWMuZ2V0TmVnUHJlZl8oKS5sZW5ndGgpOyAvLyBwaWNfc2lnbltQSUNfUFJFRl0ubGVuO1xyXG4gICAgc3VmZl9sZW4gPSAoc2lnbl9uID8gcGljLmdldFBvc1N1ZmZfKCkubGVuZ3RoIDogcGljLmdldE5lZ1N1ZmZfKCkubGVuZ3RoKTsgLy8gcGljX3NpZ25bUElDX1NVRkZdLmxlbjtcclxuXHJcbiAgICBsZWZ0ID0gcGljLmlzTGVmdCgpO1xyXG4gICAgcGZpbGwgPSBwaWMucGFkRmlsbCgpO1xyXG4gICAgbWFza19jaGFycyA9IHBpYy5nZXRNYXNrQ2hhcnMoKTtcclxuICAgIG91dFZhbCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkocGljLmdldE1hc2soKS5zdWJzdHIoMCwgbGVuKSk7XHJcbiAgICBvdXRfYnVmID0gKChsZWZ0IHx8IChtYXNrX2NoYXJzID4gMCkpID8gYnVmIDogb3V0VmFsKTtcclxuICAgIGlmIChsZWZ0KVxyXG4gICAge1xyXG4gICAgICBmb3IgKGk9MDsgaSA8IG91dF9idWYubGVuZ3RoOyBpKysgKVxyXG4gICAgICAgIG91dF9idWZbaV0gPSAoPHN0cmluZz4nMCcudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcbiAgICBpc091dCA9ICgobGVmdCB8fCAobWFza19jaGFycyA+IDApKSA/IGZhbHNlIDogdHJ1ZSk7XHJcblxyXG4gICAgLy8gQ29udmVydCB0byBzdHJpbmdcclxuICAgIHN0cl9wb3MgPSBwcmVmX2xlbjtcclxuICAgIHN0cl9sZW4gPSBsZW4gLSBwcmVmX2xlbiAtIHN1ZmZfbGVuO1xyXG4gICAgdG1wX291dF9idWYgPSBvdXRfYnVmLnNsaWNlKHN0cl9wb3MsIG91dF9idWYubGVuZ3RoKTtcclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJlbWFpbnMgPSB0aGlzLm51bV9sXzJfc3RyKHRoaXMuTlVNX0xPTkcoKSwgdG1wX291dF9idWYsIHN0cl9sZW4sIHBpYyk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmVtYWlucyA9IHRoaXMudG9fc3RyKHRtcF9vdXRfYnVmLCBzdHJfbGVuLCBwaWMpO1xyXG5cclxuICAgIGZvciAoaSA9IHN0cl9wb3M7IGkgPCBvdXRfYnVmLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIG91dF9idWZbaV0gPSB0bXBfb3V0X2J1ZltpIC0gc3RyX3Bvc107XHJcbiAgICB0bXBfb3V0X2J1ZiA9IG51bGw7XHJcblxyXG4gICAgaWYgKHJlbWFpbnMgPCBtYXNrX2NoYXJzKSB7XHJcbiAgICAgICAgcmVzID0gbmV3IEFycmF5KGxlbik7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICByZXNbaV0gPSAocmVtYWlucyA9PT0gTlVNX1RZUEUuWkVST19GSUxMID8gcGljLmdldFplcm9QYWQoKSA6ICcqJyk7XHJcbiAgICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhyZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXNrX2NoYXJzID4gMCkge1xyXG4gICAgICByZW1haW5zIC09IG1hc2tfY2hhcnM7XHJcbiAgICAgIHN0cl9wb3MgKz0gbWFza19jaGFycztcclxuICAgICAgc3RyX2xlbiAtPSBtYXNrX2NoYXJzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRha2UgY2FyZSBvZiBwYWQgYWZ0ZXIgYW5kIGJlZm9yZSBudW1iZXJcclxuICAgIGlmIChwZmlsbCkge1xyXG4gICAgICBwYWQgPSBwaWMuZ2V0UGFkKCk7XHJcbiAgICAgIGlmIChsZWZ0KSB7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbWFpbnM7IGkrKylcclxuICAgICAgICAgIG91dF9idWYgW3N0cl9wb3MgKyBzdHJfbGVuICsgaV0gPSBwYWQ7XHJcbiAgICAgICAgc3RyX3BvcyArPSByZW1haW5zO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByZW1haW5zOyBpKyspXHJcbiAgICAgICAgICBvdXRfYnVmW3N0cl9wb3MgKyBpXSA9IHBhZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHBhZCA9ICcgJztcclxuICAgICAgc3RyX3BvcyArPSByZW1haW5zO1xyXG4gICAgICBzdHJfbGVuIC09IHJlbWFpbnM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGFrZSBjYXJlIG9mIHN1ZmZpeCBhbmQgcHJlZml4XHJcbiAgICBpZiAoc3VmZl9sZW4gPiAwKSB7XHJcbiAgICAgIHN1ZmZfc3RyID0gc2lnbl9uID8gcGljLmdldFBvc1N1ZmZfKCkgOiBwaWMuZ2V0TmVnU3VmZl8oKTtcclxuICAgICAgaWYgKHN1ZmZfbGVuID09PSAxKVxyXG4gICAgICAgIG91dF9idWZbc3RyX3BvcyArIHN0cl9sZW5dID0gc3VmZl9zdHJbMF07XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdWZmX2xlbjsgaSsrKVxyXG4gICAgICAgICAgb3V0X2J1ZltzdHJfcG9zICsgc3RyX2xlbiArIGldID0gc3VmZl9zdHJbaV07XHJcbiAgICAgIH1cclxuICAgICAgc3RyX2xlbiArPSBzdWZmX2xlbjtcclxuICAgIH1cclxuICAgIGlmIChwcmVmX2xlbiA+IDApIHtcclxuICAgICAgc3RyX3BvcyAtPSBwcmVmX2xlbjtcclxuICAgICAgc3RyX2xlbiArPSBwcmVmX2xlbjtcclxuICAgICAgcHJlZl9zdHIgPSBzaWduX24gPyBwaWMuZ2V0UG9zUHJlZl8oKSA6IHBpYy5nZXROZWdQcmVmXygpO1xyXG4gICAgICBpZiAocHJlZl9sZW4gPT09IDEpXHJcbiAgICAgICAgICBvdXRfYnVmW3N0cl9wb3NdID0gcHJlZl9zdHJbMF07XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZl9sZW47IGkrKylcclxuICAgICAgICAgIG91dF9idWZbc3RyX3BvcyArIGldID0gcHJlZl9zdHJbaV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc3RyX3BvcyBub3cgcG9pbnRzIHRvIGJlZ2lubmluZyBvZiByZXN1bHQgc3RyXHJcbiAgICAvLyB0YWtlIGNhcmUgb2YgZmluYWwgcGFkIGFmdGVyIGFuZCBiZWZvcmUgbnVtYmVyXHJcbiAgICBpZiAoIXBmaWxsKSB7XHJcbiAgICAgIGxldCBvdXRCdWZMZW46IG51bWJlciA9IG91dF9idWYubGVuZ3RoO1xyXG5cclxuICAgICAgaWYgKGxlZnQpIHtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVtYWlucyAmJiAoc3RyX3BvcyArIHN0cl9sZW4gKyBpIDwgb3V0QnVmTGVuKTsgaSsrKVxyXG4gICAgICAgICAgb3V0X2J1ZltzdHJfcG9zICsgc3RyX2xlbiArIGldID0gcGFkO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHN0cl9wb3MgLT0gcmVtYWlucztcclxuXHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlbWFpbnMgJiYgKHN0cl9wb3MgKyBpIDwgb3V0QnVmTGVuKTsgaSsrKVxyXG4gICAgICAgICAgb3V0X2J1ZltzdHJfcG9zICsgaV0gPSBwYWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyByZXN1bHQgYnVpbHQsIGZpbmlzaFxyXG4gICAgaWYgKGlzT3V0KVxyXG4gICAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnMob3V0X2J1Zik7XHJcblxyXG4gICAgLy8gQ29weSByZXN1bHQgdG8gb3V0cHV0IGJ1ZmZlclxyXG4gICAgaWYgKG1hc2tfY2hhcnMgPT09IDApIHtcclxuICAgICAgaWYgKHN0cl9wb3MgKyBsZW4gPiBvdXRfYnVmLmxlbmd0aClcclxuICAgICAgICBsZW4gPSBvdXRfYnVmLmxlbmd0aCAtIHN0cl9wb3M7XHJcbiAgICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhvdXRfYnVmLCBzdHJfcG9zLCAgbGVuKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKG91dF9wb3MgPSAwOyBvdXRfcG9zIDwgbGVuICYmIHN0cl9wb3MgPCBvdXRfYnVmLmxlbmd0aDsgb3V0X3BvcysrKVxyXG4gICAgICBpZiAob3V0VmFsW291dF9wb3NdID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTikpXHJcbiAgICAgICAgb3V0VmFsW291dF9wb3NdID0gb3V0X2J1ZltzdHJfcG9zKytdO1xyXG5cclxuICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhvdXRWYWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1bGRpbmcgdGhlIGJhc2ljIGRlY2ltYWwgc3RyaW5nIG51bWJlciBmcm9tIGEgbG9uZyB2YWx1ZSAod2l0aG91dFxyXG4gIC8vLyAgIHRoZSBzcGVjaWFsIHBpY3R1cmUgZmVhdHVyZXMpLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW1cIj4gIFRoZSBudW1iZXIgdG8gYmUgdHJhbnNsYXRlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+ICBUaGUgbWFzayB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoZSBzdHJpbmcgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxsZW4+ICAgIGxlbiAgIHRoZSBsZW4gdG8gdXNlIGluIHRoZSBzdHIgY2hhciBhcnJheSA8L2xlbj5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPiAgVGhlIHBpY3R1cmUgY2xhc3MgaG9sZGluZyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBpY3R1cmVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBzdHJpbmdcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByb3RlY3RlZCBudW1fbF8yX3N0cihudW06IG51bWJlciwgc3RyOiBzdHJpbmdbXSwgbGVuOiBudW1iZXIsIHBpYzogUElDKTogbnVtYmVyIHtcclxuICAgIGxldCBjb21tYXM6IGJvb2xlYW47XHJcbiAgICBsZXQgZGlnaXRzOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IGRlY3M6IG51bWJlcjtcclxuICAgIGxldCBqOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKG51bSA8IDApXHJcbiAgICAgIG51bSA9IC1udW07XHJcbiAgICBjb21tYXMgPSBwaWMud2l0aENvbWEoKTtcclxuICAgIGRlY3MgPSBNYXRoLm1pbihwaWMuZ2V0RGVjKCksIGxlbiAtIDEpO1xyXG4gICAgaWYgKGRlY3MgPiAwKVxyXG4gICAgICBsZW4gLT0gKGRlY3MgKyAxKTtcclxuICAgIGkgPSBsZW47XHJcblxyXG4gICAgLy8gMjYvMTEvOTcgU2hheSBaLiBCdWcgIzc3MDUyNiAtIElmIFRoZSBkZWNpbWFsIHBvaW50IGlzIHRoZSBmaXJzdFxyXG4gICAgLy8gaW4gdGhlIHBpY3R1cmUncyBmb3JtYXQgLSBhc3N1bWUgdGhhdCB0aGUgaW5wdXQgdmFsdWUgaXMgbGVnYWwgISFcclxuICAgIGlmIChudW0gPT09IDAgJiYgIXBpYy5kZWNJbkZpcnN0UG9zKCkpIHtcclxuICAgICAgaWYgKHBpYy56ZXJvRmlsbCgpKVxyXG4gICAgICAgIHJldHVybiAoTlVNX1RZUEUuWkVST19GSUxMKTtcclxuICAgICAgaWYgKGxlbiA9PT0gMClcclxuICAgICAgICByZXR1cm4gKE5VTV9UWVBFLk5PX1JPT00pO1xyXG5cclxuICAgICAgaWYgKGkgPiBzdHIubGVuZ3RoKVxyXG4gICAgICAgIGkgPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgc3RyWy0taV0gPSAnMCc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRlY3MgPiAwKSB7XHJcbiAgICAgICAgc3RyW2xlbl0gPSB0aGlzLkRFQ0lNQUxDSEFSO1xyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgZGVjczsgaisrKVxyXG4gICAgICAgIHN0cltsZW4gKyAxICsgal0gPSAnMCc7XHJcbiAgICB9XHJcblxyXG4gICAgZGlnaXRzID0gMDtcclxuICAgIGZvciAoOyBudW0gPiAwOyBudW0gPSBNYXRoLmZsb29yKG51bSAvIDEwKSkge1xyXG4gICAgICBpLS07XHJcbiAgICAgIGlmIChjb21tYXMpIHtcclxuICAgICAgICBpZiAoZGlnaXRzID09PSAzKSB7XHJcbiAgICAgICAgICBpZiAoaSA8IDApXHJcbiAgICAgICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcbiAgICAgICAgICBkaWdpdHMgPSAwO1xyXG4gICAgICAgICAgc3RyW2ktLV0gPSB0aGlzLkNPTU1BQ0hBUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlnaXRzKys7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGkgPCAwKVxyXG4gICAgICAgIHJldHVybiAoTlVNX1RZUEUuTk9fUk9PTSk7XHJcbiAgICAgIHN0cltpXSA9ICgobnVtICUgMTApLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1bGRpbmcgdGhlIGJhc2ljIGRlY2ltYWwgc3RyaW5nIG51bWJlciBmcm9tIGEgbm9uIGxvbmcgdmFsdWUgKHdpdGhvdXRcclxuICAvLy8gICB0aGUgc3BlY2lhbCBwaWN0dXJlIGZlYXR1cmVzKS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+ICBUaGUgbWFzayB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoZSBzdHJpbmcgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxsZW4+ICAgIGxlbiAgIHRoZSBsZW4gdG8gdXNlIGluIHRoZSBzdHIgY2hhciBhcnJheSA8L2xlbj5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPiAgVGhlIHBpY3R1cmUgY2xhc3MgaG9sZGluZyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBpY3R1cmVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBzdHJpbmdcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByb3RlY3RlZCB0b19zdHIoc3RyOiBzdHJpbmdbXSwgbGVuOiBudW1iZXIsIHBpYzogUElDKTogbnVtYmVyIHtcclxuICAgIGxldCB0bXA6IE5VTV9UWVBFO1xyXG4gICAgbGV0IGNvbW1hczogYm9vbGVhbjtcclxuICAgIGxldCBkaWdpdHM6IG51bWJlcjtcclxuICAgIGxldCBkZWNwb3M6IG51bWJlcjtcclxuICAgIGxldCBsYXN0OiBudW1iZXI7XHJcbiAgICBsZXQgZmlyc3Q6IG51bWJlcjtcclxuICAgIGxldCBqOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IGRlY3M6IG51bWJlcjtcclxuICAgIGxldCBudW1fY2hhcjogbnVtYmVyO1xyXG5cclxuICAgIGNvbW1hcyA9IHBpYy53aXRoQ29tYSgpO1xyXG4gICAgZGVjcyA9IHBpYy5nZXREZWMoKTtcclxuICAgIGlmIChkZWNzID49IGxlbilcclxuICAgICAgZGVjcyA9IGxlbiAtIDE7XHJcblxyXG4gICAgdG1wID0gbmV3IE5VTV9UWVBFKHRoaXMpO1xyXG4gICAgdG1wLnJvdW5kKGRlY3MpO1xyXG4gICAgaWYgKHRtcC5OVU1fSVNfTE9ORygpKVxyXG4gICAgICByZXR1cm4gdG1wLm51bV9sXzJfc3RyKHRtcC5OVU1fTE9ORygpLCBzdHIsIGxlbiwgcGljKTtcclxuXHJcbiAgICBpZiAocGljLnplcm9GaWxsKCkgJiYgdG1wLl9kYXRhWzBdID09PSAwKVxyXG4gICAgICByZXR1cm4gKE5VTV9UWVBFLlpFUk9fRklMTCk7XHJcblxyXG4gICAgaSA9IGxlbiAtIDE7XHJcbiAgICBkaWdpdHMgPSAwO1xyXG4gICAgZGVjcG9zID0gKCh0bXAuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKSAtIE5VTV9UWVBFLkVYUF9CSUFTICsgMSkgKiAyO1xyXG4gICAgbGFzdCA9IGRlY3BvcyAtIDEgKyBkZWNzO1xyXG4gICAgZmlyc3QgPSBkZWNwb3MgLSAxO1xyXG4gICAgaWYgKGZpcnN0ID4gMilcclxuICAgICAgZmlyc3QgPSAodG1wLl9kYXRhWzFdIDwgMTApID8gMyA6IDI7XHJcblxyXG4gICAgZm9yIChqID0gbGFzdDsgaiA+PSBmaXJzdDsgai0tKSB7XHJcbiAgICAgIGlmIChpIDwgMClcclxuICAgICAgICByZXR1cm4gKE5VTV9UWVBFLk5PX1JPT00pO1xyXG5cclxuICAgICAgaWYgKGNvbW1hcyAmJiAoaiA8IGRlY3BvcykpIHtcclxuICAgICAgICBpZiAoZGlnaXRzID09PSAzKSB7XHJcbiAgICAgICAgICBkaWdpdHMgPSAwO1xyXG4gICAgICAgICAgc3RyW2ktLV0gPSB0aGlzLkNPTU1BQ0hBUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlnaXRzKys7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEpQTjoxNS8wOC8xOTk2IFlhbWEgKEpwbklEOlpBMDgxNTAwMSlcclxuICAgICAgLy8gV2hlbiBGb3JtYXQ9XCJOMTJDXCIgYW5kIG51bSBpcyBiaWdnZXIgdGhhbiAxMiBkaWdpdHMuXHJcbiAgICAgIC8vIE1BR0lDIGNydXNoZXMuIEJlY2F1c2UgdGhlIHZhciBpIGJlY29tZXMgbmVnYXRpdmUuXHJcbiAgICAgIGlmIChpIDwgMClcclxuICAgICAgICByZXR1cm4gKE5VTV9UWVBFLk5PX1JPT00pO1xyXG5cclxuICAgICAgaWYgKChqIDwgMikgfHwgKGogPj0gdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAqIDIpKVxyXG4gICAgICAgIHN0cltpLS1dID0gJzAnO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoaSA8IDApXHJcbiAgICAgICAgICByZXR1cm4gKE5VTV9UWVBFLk5PX1JPT00pO1xyXG4gICAgICAgIG51bV9jaGFyID0gdG1wLl9kYXRhW2ogPj4gMV07XHJcbiAgICAgICAgc3RyW2ktLV0gPSAoKChqICYgMSkgIT09IDApID8gKG51bV9jaGFyICUgMTApIDogKE1hdGguZmxvb3IobnVtX2NoYXIgLyAxMCkpKS50b1N0cmluZygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaiA9PT0gZGVjcG9zKSB7XHJcbiAgICAgICAgaWYgKGkgPCAwKVxyXG4gICAgICAgICAgcmV0dXJuIChOVU1fVFlQRS5OT19ST09NKTtcclxuICAgICAgICBzdHJbaS0tXSA9IHRoaXMuREVDSU1BTENIQVI7XHJcblxyXG4gICAgICAgIC8vIDI2LzExLzk3IFNoYXkgWi4gQnVnICM3NzA1MjYgLSBJZiBUaGUgZGVjaW1hbCBwb2ludCBpcyB0aGUgZmlyc3RcclxuICAgICAgICAvLyBpbiB0aGUgcGljdHVyZSdzIGZvcm1hdCAtIGFzc3VtZSB0aGF0IHRoZSBpbnB1dCB2YWx1ZSBpcyBsZWdhbCAhXHJcbiAgICAgICAgaWYgKGkgPCAwICYmIHBpYy5kZWNJbkZpcnN0UG9zKCkpXHJcbiAgICAgICAgICByZXR1cm4gKDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChpICsgMSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybWluZyBhbiBBZGQgb3BlcmF0aW9uIG9uIHR3byBtYWdpYyBudW1iZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gIHRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXN1bHRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBhZGQobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IHNpZ24xOiBudW1iZXI7XHJcbiAgICBsZXQgc2lnbjI6IG51bWJlcjtcclxuICAgIGxldCBsOiBudW1iZXI7XHJcbiAgICBsZXQgbDE6IG51bWJlcjtcclxuICAgIGxldCBsMjogbnVtYmVyO1xyXG4gICAgbGV0IFNJR05JRklDQU5UX05VTV9TSVpFOiBudW1iZXI7XHJcbiAgICAvLyBudWxsIHZhbHVlc1xyXG4gICAgaWYgKG51bTEgPT09IG51bGwgfHwgbnVtMiA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKTtcclxuICAgIGxldCB0bXByZXM6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG9wZXJEYXRhOiBPcGVyRGF0YSA9IG5ldyBPcGVyRGF0YSgpO1xyXG4gICAgaWYgKG51bTEuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICBpZiAobnVtMi5OVU1fSVNfTE9ORygpKSB7XHJcblxyXG4gICAgICAgIGwgPSBsMSA9IG51bTEuTlVNX0xPTkcoKTtcclxuICAgICAgICBpZiAobCA8IDApXHJcbiAgICAgICAgICBsID0gLWw7XHJcblxyXG4gICAgICAgIGlmIChsIDwgMHg0MDAwMDAwMCkge1xyXG4gICAgICAgICAgbCA9IGwyID0gbnVtMi5OVU1fTE9ORygpO1xyXG4gICAgICAgICAgaWYgKGwgPCAwKVxyXG4gICAgICAgICAgICBsID0gLWw7XHJcbiAgICAgICAgICBpZiAobCA8IDB4NDAwMDAwMDApIHtcclxuICAgICAgICAgICAgbDEgKz0gbDI7XHJcbiAgICAgICAgICAgIHJlcy5OVU1fNF9MT05HKGwxKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgICB9XHJcbiAgICAgIG51bTEubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG5cclxuICAgIHNpZ24xID0gTlVNX1RZUEUudG9TQnl0ZShudW0xLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIG9wZXJEYXRhLk5VTV9FeHAxXyA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMS5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgc2lnbjIgPSBOVU1fVFlQRS50b1NCeXRlKG51bTIuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0V4cDJfID0gTlVNX1RZUEUudG9TQnl0ZShudW0yLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBvcGVyRGF0YS5OVU1fRGlmZl8gPSA8bnVtYmVyPihvcGVyRGF0YS5OVU1fRXhwMV8gLSBvcGVyRGF0YS5OVU1fRXhwMl8pO1xyXG5cclxuICAgIGxldCBjbXB2YWw6IG51bWJlciA9IG9wZXJEYXRhLk5VTV9EaWZmXztcclxuICAgIGlmIChjbXB2YWwgPT09IDApIHtcclxuICAgICAgY21wdmFsID0gTlVNX1RZUEUudG9VQnl0ZShudW0xLl9kYXRhWzFdKSAtIE5VTV9UWVBFLnRvVUJ5dGUobnVtMi5fZGF0YVsxXSk7XHJcbiAgICAgIGlmIChjbXB2YWwgPT09IDApXHJcbiAgICAgICAgY21wdmFsID0gTlVNX1RZUEUubWVtY21wKG51bTEsIDIsIG51bTIsIDIsIFNJR05JRklDQU5UX05VTV9TSVpFIC0gMik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNtcHZhbCA+PSAwKSB7XHJcbiAgICAgIGlmIChzaWduMSA9PT0gc2lnbjIpXHJcbiAgICAgICAgdG1wcmVzID0gTlVNX1RZUEUuYWRkX3BvcyhudW0xLCBudW0yLCBvcGVyRGF0YSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5zdWJfcG9zKG51bTEsIG51bTIsIG9wZXJEYXRhKTtcclxuXHJcbiAgICAgIGlmICh0bXByZXMuX2RhdGFbMF0gIT09IDApXHJcbiAgICAgICAgdG1wcmVzLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZSh0bXByZXMuX2RhdGFbMF0gfCBzaWduMSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGV4cDogbnVtYmVyID0gb3BlckRhdGEuTlVNX0V4cDFfO1xyXG4gICAgICBvcGVyRGF0YS5OVU1fRXhwMV8gPSBvcGVyRGF0YS5OVU1fRXhwMl87XHJcbiAgICAgIG9wZXJEYXRhLk5VTV9FeHAyXyA9IGV4cDtcclxuICAgICAgb3BlckRhdGEuTlVNX0RpZmZfID0gLW9wZXJEYXRhLk5VTV9EaWZmXztcclxuXHJcbiAgICAgIGlmIChzaWduMSA9PT0gc2lnbjIpXHJcbiAgICAgICAgdG1wcmVzID0gTlVNX1RZUEUuYWRkX3BvcyhudW0yLCBudW0xLCBvcGVyRGF0YSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5zdWJfcG9zKG51bTIsIG51bTEsIG9wZXJEYXRhKTtcclxuXHJcbiAgICAgIGlmICh0bXByZXMuX2RhdGFbMF0gIT09IDApXHJcbiAgICAgICAgdG1wcmVzLl9kYXRhWzBdIHw9IHNpZ24yO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0bXByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybWluZyBhIFN1YnRyYWN0IG9wZXJhdGlvbiBvbiB0d28gbWFnaWMgbnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgc3ViKG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIC8vIG51bGwgdmFsdWVzXHJcbiAgICBpZiAobnVtMSA9PT0gbnVsbCB8fCBudW0yID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBsZXQgdG1wcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IHJlczogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBvcGVyRGF0YTogT3BlckRhdGEgPSBuZXcgT3BlckRhdGEoKTtcclxuXHJcbiAgICBpZiAobnVtMS5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgIGlmIChudW0yLk5VTV9JU19MT05HKCkpIHtcclxuICAgICAgICBsZXQgbDogbnVtYmVyO1xyXG4gICAgICAgIGxldCBsMTogbnVtYmVyID0gbCA9IG51bTEuTlVNX0xPTkcoKTtcclxuICAgICAgICBpZiAobCA8IDApXHJcbiAgICAgICAgICBsID0gLWw7XHJcbiAgICAgICAgaWYgKGwgPCAweDQwMDAwMDAwKSB7XHJcbiAgICAgICAgICBsZXQgbDI6IG51bWJlciA9IGwgPSBudW0yLk5VTV9MT05HKCk7XHJcbiAgICAgICAgICBpZiAobCA8IDApXHJcbiAgICAgICAgICAgIGwgPSAtbDtcclxuICAgICAgICAgIGlmIChsIDwgMHg0MDAwMDAwMCkge1xyXG4gICAgICAgICAgICBsMSAtPSBsMjtcclxuICAgICAgICAgICAgcmVzLk5VTV80X0xPTkcobDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICAgIH1cclxuICAgICAgbnVtMS5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobnVtMi5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0yLm51bV80X3N0ZF9sb25nKCk7XHJcblxyXG4gICAgbGV0IHNpZ24xOiBudW1iZXIgPSBOVU1fVFlQRS50b1NCeXRlKG51bTEuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0V4cDFfID0gTlVNX1RZUEUudG9TQnl0ZShudW0xLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBsZXQgc2lnbjI6IG51bWJlciA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMi5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBvcGVyRGF0YS5OVU1fRXhwMl8gPSBOVU1fVFlQRS50b1NCeXRlKG51bTIuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIG9wZXJEYXRhLk5VTV9EaWZmXyA9IDxudW1iZXI+KG9wZXJEYXRhLk5VTV9FeHAxXyAtIG9wZXJEYXRhLk5VTV9FeHAyXyk7XHJcblxyXG4gICAgbGV0IGNtcHZhbDogbnVtYmVyID0gb3BlckRhdGEuTlVNX0RpZmZfO1xyXG4gICAgaWYgKGNtcHZhbCA9PT0gMCkge1xyXG4gICAgICBjbXB2YWwgPSBOVU1fVFlQRS50b1VCeXRlKG51bTEuX2RhdGFbMV0pIC0gTlVNX1RZUEUudG9VQnl0ZShudW0yLl9kYXRhWzFdKTtcclxuICAgICAgaWYgKGNtcHZhbCA9PT0gMClcclxuICAgICAgICBjbXB2YWwgPSBOVU1fVFlQRS5tZW1jbXAobnVtMSwgMiwgbnVtMiwgMiwgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U2lnbmlmaWNhbnROdW1TaXplKCkgLSAyKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY21wdmFsID49IDApIHtcclxuICAgICAgaWYgKHNpZ24xID09PSBzaWduMilcclxuICAgICAgICB0bXByZXMgPSBOVU1fVFlQRS5zdWJfcG9zKG51bTEsIG51bTIsIG9wZXJEYXRhKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRtcHJlcyA9IE5VTV9UWVBFLmFkZF9wb3MobnVtMSwgbnVtMiwgb3BlckRhdGEpO1xyXG5cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgZXhwOiBudW1iZXIgPSBvcGVyRGF0YS5OVU1fRXhwMV87XHJcbiAgICAgIG9wZXJEYXRhLk5VTV9FeHAxXyA9IG9wZXJEYXRhLk5VTV9FeHAyXztcclxuICAgICAgb3BlckRhdGEuTlVNX0V4cDJfID0gZXhwO1xyXG4gICAgICBvcGVyRGF0YS5OVU1fRGlmZl8gPSAtb3BlckRhdGEuTlVNX0RpZmZfO1xyXG4gICAgICBpZiAoc2lnbjEgPT09IHNpZ24yKSB7XHJcbiAgICAgICAgdG1wcmVzID0gTlVNX1RZUEUuc3ViX3BvcyhudW0yLCBudW0xLCBvcGVyRGF0YSk7XHJcbiAgICAgICAgc2lnbjEgXj0gKE5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRtcHJlcyA9IE5VTV9UWVBFLmFkZF9wb3MobnVtMiwgbnVtMSwgb3BlckRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0bXByZXMuX2RhdGFbMF0gIT09IDApXHJcbiAgICAgIHRtcHJlcy5fZGF0YVswXSB8PSBzaWduMTtcclxuXHJcbiAgICByZXR1cm4gdG1wcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBlcmZvcm1pbmcgYSBNdWx0aXBseSBvcGVyYXRpb24gb24gdHdvIG1hZ2ljIG51bWJlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMVwiPiAgdGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMlwiPiAgdGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHJlc3VsdFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIG11bChudW0xOiBOVU1fVFlQRSwgbnVtMjogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcblxyXG4gICAgbGV0IGZ1bGxyZXM6IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoMzgpO1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjE6IG51bWJlcjtcclxuICAgIGxldCBsZW4yOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zMTogbnVtYmVyO1xyXG4gICAgbGV0IHBvczI6IG51bWJlcjtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBkaWdpdDE6IG51bWJlcjtcclxuICAgIGxldCBwcm9kOiBudW1iZXI7XHJcbiAgICBsZXQgY2Fycnk6IG51bWJlcjtcclxuICAgIGxldCBsOiBudW1iZXI7XHJcbiAgICBsZXQgbDE6IG51bWJlcjtcclxuICAgIGxldCBsMjogbnVtYmVyO1xyXG4gICAgbGV0IFNJR05JRklDQU5UX05VTV9TSVpFOiBudW1iZXI7XHJcblxyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09PSBudWxsIHx8IG51bTIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIFNJR05JRklDQU5UX05VTV9TSVpFID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U2lnbmlmaWNhbnROdW1TaXplKCk7XHJcblxyXG4gICAgbGV0IHJlczogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBvcGVyRGF0YTogT3BlckRhdGEgPSBuZXcgT3BlckRhdGEoKTtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgdG1wQnl0ZTogbnVtYmVyO1xyXG5cclxuICAgIGlmIChudW0xLk5VTV9JU19MT05HKCkpIHtcclxuICAgICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICAgIGwgPSBsMSA9IG51bTEuTlVNX0xPTkcoKTtcclxuICAgICAgICBpZiAobCA8IDApXHJcbiAgICAgICAgICBsID0gLWw7XHJcbiAgICAgICAgaWYgKGwgPCAweEIwMDApIHtcclxuICAgICAgICAgIGwgPSBsMiA9IG51bTIuTlVNX0xPTkcoKTtcclxuICAgICAgICAgIGlmIChsIDwgMClcclxuICAgICAgICAgICAgbCA9IC1sO1xyXG4gICAgICAgICAgaWYgKGwgPCAweEIwMDApIHtcclxuICAgICAgICAgICAgbDEgPSBsMSAqIGwyO1xyXG4gICAgICAgICAgICByZXMuTlVNXzRfTE9ORyhsMSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG51bTIubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBudW0xLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChudW0yLk5VTV9JU19MT05HKCkpXHJcbiAgICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG5cclxuICAgIG9wZXJEYXRhLk5VTV9FeHAxXyA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMS5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgb3BlckRhdGEuTlVNX0V4cDJfID0gTlVNX1RZUEUudG9TQnl0ZShudW0yLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBpZiAob3BlckRhdGEuTlVNX0V4cDFfID09PSAwIHx8IG9wZXJEYXRhLk5VTV9FeHAyXyA9PT0gMCkge1xyXG4gICAgICByZXMuTlVNX1pFUk8oKTtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxlbjEgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDE7XHJcbiAgICAgICAgIG51bTEuX2RhdGFbbGVuMV0gPT09IDA7XHJcbiAgICAgICAgIGxlbjEtLSkge1xyXG4gICAgfVxyXG4gICAgZm9yIChsZW4yID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxO1xyXG4gICAgICAgICBudW0yLl9kYXRhW2xlbjJdID09PSAwO1xyXG4gICAgICAgICBsZW4yLS0pIHtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgKE5VTV9UWVBFLk5VTV9TSVpFIC0gMSkgKiAyOyBpKyspXHJcbiAgICAgIGZ1bGxyZXNbaV0gPSAwO1xyXG5cclxuICAgIHBvcyA9IDA7XHJcbiAgICBmb3IgKHBvczEgPSBsZW4xOyBwb3MxID4gMDsgcG9zMS0tKSB7XHJcbiAgICAgIHBvcyA9IHBvczEgKyBsZW4yIC0gMTtcclxuICAgICAgZGlnaXQxID0gbnVtMS5fZGF0YVtwb3MxXTtcclxuICAgICAgY2FycnkgPSAwO1xyXG5cclxuICAgICAgZm9yIChwb3MyID0gbGVuMjsgcG9zMiA+IDA7IHBvczItLSkge1xyXG4gICAgICAgIHByb2QgPSBOVU1fVFlQRS50b1VCeXRlKGRpZ2l0MSkgKiBOVU1fVFlQRS50b1VCeXRlKG51bTIuX2RhdGFbcG9zMl0pICsgY2Fycnk7XHJcbiAgICAgICAgY2FycnkgPSBNYXRoLmZsb29yKHByb2QgLyAxMDApO1xyXG4gICAgICAgIGZ1bGxyZXNbcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShmdWxscmVzW3Bvc10pICsgcHJvZCAlIDEwMCk7XHJcbiAgICAgICAgdG1wQnl0ZSA9IGZ1bGxyZXNbcG9zXTtcclxuICAgICAgICBwb3MtLTtcclxuICAgICAgICBpZiAoTlVNX1RZUEUudG9VQnl0ZSh0bXBCeXRlKSA+PSAxMDApIHtcclxuICAgICAgICAgIGZ1bGxyZXNbcG9zICsgMV0gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUoZnVsbHJlc1twb3MgKyAxXSkgLSAxMDApO1xyXG4gICAgICAgICAgY2FycnkrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZnVsbHJlc1twb3NdID0gTlVNX1RZUEUudG9TQnl0ZShjYXJyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHdyID0gTlVNX1RZUEUudG9VQnl0ZShvcGVyRGF0YS5OVU1fRXhwMV8pIC0gTlVNX1RZUEUuRVhQX0JJQVMgKyAoTlVNX1RZUEUudG9VQnl0ZShvcGVyRGF0YS5OVU1fRXhwMl8pIC0gTlVNX1RZUEUuRVhQX0JJQVMpO1xyXG4gICAgaWYgKGZ1bGxyZXNbMF0gPT09IDApIHtcclxuICAgICAgcG9zKys7XHJcbiAgICAgIHB3ci0tO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgobnVtMS5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSykgPT09IChudW0yLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKSlcclxuICAgICAgcmVzLl9kYXRhWzBdID0gMDtcclxuICAgIGVsc2VcclxuICAgICAgcmVzLl9kYXRhWzBdID0gTlVNX1RZUEUuU0lHTl9NQVNLO1xyXG5cclxuICAgIHJlcy5fZGF0YVswXSB8PSBOVU1fVFlQRS50b1NCeXRlKHB3ciArIE5VTV9UWVBFLkVYUF9CSUFTKTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDE7IGkrKylcclxuICAgICAgcmVzLl9kYXRhWzEgKyBpXSA9IGZ1bGxyZXNbcG9zICsgaV07XHJcblxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtaW5nIGEgTW9kIG9wZXJhdGlvbiBvbiB0d28gbWFnaWMgbnVtYmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICB0aGUgZmlyc3QgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgbW9kKG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIC8vIG51bGwgdmFsdWVzXHJcbiAgICBpZiAobnVtMSA9PT0gbnVsbCB8fCBudW0yID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBsZXQgcmVzOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgaWYgKG51bTIubnVtX2lzX3plcm8oKSkge1xyXG4gICAgICByZXMuTlVNX1pFUk8oKTtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAobnVtMS5OVU1fSVNfTE9ORygpKVxyXG4gICAgICBudW0xLm51bV80X3N0ZF9sb25nKCk7XHJcblxyXG4gICAgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgbnVtMi5udW1fNF9zdGRfbG9uZygpO1xyXG5cclxuICAgIHJlcyA9IE5VTV9UWVBFLmRpdihudW0xLCBudW0yKTtcclxuICAgIHJlcy5udW1fdHJ1bmMoMCk7XHJcbiAgICByZXMgPSBOVU1fVFlQRS5tdWwocmVzLCBudW0yKTtcclxuICAgIHJlcyA9IE5VTV9UWVBFLnN1YihudW0xLCByZXMpO1xyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybWluZyBhIERpdmlkZSBvcGVyYXRpb24gb24gdHdvIG1hZ2ljIG51bWJlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMVwiPiAgdGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMlwiPiAgdGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHJlc3VsdFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGRpdihudW0xOiBOVU1fVFlQRSwgbnVtMjogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgZGl2aWRlbmQ6IEludDhBcnJheSA9IG5ldyBJbnQ4QXJyYXkoKE5VTV9UWVBFLk5VTV9TSVpFIC0gMSkgKiAyKTtcclxuICAgIGxldCBkaXZpc29yOiBJbnQ4QXJyYXkgPSBuZXcgSW50OEFycmF5KE5VTV9UWVBFLk5VTV9TSVpFKTtcclxuICAgIGxldCBwd3I6IG51bWJlcjtcclxuICAgIGxldCBsZW4xOiBudW1iZXI7XHJcbiAgICBsZXQgbGVuMjogbnVtYmVyO1xyXG4gICAgbGV0IHBvczE6IG51bWJlcjtcclxuICAgIGxldCBwb3MyOiBudW1iZXI7XHJcbiAgICBsZXQgcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgcXVvdDogbnVtYmVyO1xyXG4gICAgbGV0IHByb2Q6IG51bWJlcjtcclxuICAgIGxldCBjYXJyeTogbnVtYmVyO1xyXG4gICAgbGV0IFNJR05JRklDQU5UX05VTV9TSVpFOiBudW1iZXI7XHJcblxyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09PSBudWxsIHx8IG51bTIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIFNJR05JRklDQU5UX05VTV9TSVpFID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U2lnbmlmaWNhbnROdW1TaXplKCk7XHJcblxyXG4gICAgbGV0IHJlczogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBvcGVyRGF0YTogT3BlckRhdGEgPSBuZXcgT3BlckRhdGEoKTtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgdG1wQnl0ZTogbnVtYmVyO1xyXG5cclxuICAgIGlmIChudW0xLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIG51bTEubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgIGlmIChudW0yLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIG51bTIubnVtXzRfc3RkX2xvbmcoKTtcclxuXHJcbiAgICBvcGVyRGF0YS5OVU1fRXhwMV8gPSBOVU1fVFlQRS50b1NCeXRlKG51bTEuX2RhdGFbMF0gJiB+TlVNX1RZUEUuU0lHTl9NQVNLKTtcclxuICAgIG9wZXJEYXRhLk5VTV9FeHAyXyA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMi5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgaWYgKG9wZXJEYXRhLk5VTV9FeHAxXyA9PT0gMCB8fCBvcGVyRGF0YS5OVU1fRXhwMl8gPT09IDApIHtcclxuICAgICAgcmVzLk5VTV9aRVJPKCk7XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZW4xID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxO1xyXG4gICAgICAgICBudW0xLl9kYXRhW2xlbjFdID09PSAwO1xyXG4gICAgICAgICBsZW4xLS0pIHtcclxuICAgIH1cclxuICAgIGZvciAobGVuMiA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMTtcclxuICAgICAgICAgbnVtMi5fZGF0YVtsZW4yXSA9PT0gMDtcclxuICAgICAgICAgbGVuMi0tKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zID0gKE5VTV9UWVBFLm1lbWNtcChudW0xLCAxLCBudW0yLCAxLCBsZW4yKSA8IDApID8gMCA6IDE7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgKE5VTV9UWVBFLk5VTV9TSVpFIC0gMSkgKiAyOyBpKyspXHJcbiAgICAgIGRpdmlkZW5kW2ldID0gMDtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuMTsgaSsrKVxyXG4gICAgICBkaXZpZGVuZFtwb3MgKyBpXSA9IG51bTEuX2RhdGFbMSArIGldO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW4yOyBpKyspXHJcbiAgICAgIGRpdmlzb3JbMSArIGldID0gbnVtMi5fZGF0YVsxICsgaV07XHJcblxyXG4gICAgcmVzLk5VTV9TRVRfWkVSTygpO1xyXG4gICAgcHdyID0gTlVNX1RZUEUudG9VQnl0ZShvcGVyRGF0YS5OVU1fRXhwMV8pIC0gTlVNX1RZUEUudG9VQnl0ZShvcGVyRGF0YS5OVU1fRXhwMl8pICsgcG9zO1xyXG4gICAgcmVzLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZShwd3IgKyBOVU1fVFlQRS5FWFBfQklBUyk7XHJcbiAgICBpZiAoKG51bTEuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spICE9PSAobnVtMi5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSykpXHJcbiAgICAgIHJlcy5fZGF0YVswXSB8PSBOVU1fVFlQRS5TSUdOX01BU0s7XHJcblxyXG4gICAgLy8gbm9ybWFsaXplIGRpdmlkZW5kICYgZGl2aXNvclxyXG4gICAgcXVvdCA9IE1hdGguZmxvb3IoMTAwIC8gKE5VTV9UWVBFLnRvVUJ5dGUoZGl2aXNvclsxXSkgKyAxKSk7XHJcbiAgICBpZiAocXVvdCA+IDEpIHtcclxuICAgICAgY2FycnkgPSAwO1xyXG4gICAgICBmb3IgKHBvczIgPSBsZW4yOyBwb3MyID4gMDsgcG9zMi0tKSB7XHJcbiAgICAgICAgcHJvZCA9IHF1b3QgKiBOVU1fVFlQRS50b1VCeXRlKGRpdmlzb3JbcG9zMl0pICsgY2Fycnk7XHJcbiAgICAgICAgY2FycnkgPSBNYXRoLmZsb29yKHByb2QgLyAxMDApO1xyXG4gICAgICAgIGRpdmlzb3JbcG9zMl0gPSBOVU1fVFlQRS50b1NCeXRlKHByb2QgJSAxMDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYXJyeSA9IDA7XHJcbiAgICAgIGZvciAocG9zMSA9IGxlbjEgKyBwb3MgLSAxOyBwb3MxID49IDA7IHBvczEtLSkge1xyXG4gICAgICAgIHByb2QgPSBxdW90ICogTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3MxXSkgKyBjYXJyeTtcclxuICAgICAgICBjYXJyeSA9IE1hdGguZmxvb3IocHJvZCAvIDEwMCk7XHJcbiAgICAgICAgZGl2aWRlbmRbcG9zMV0gPSBOVU1fVFlQRS50b1NCeXRlKHByb2QgJSAxMDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZGl2aWRlIGRpdmlkZW5kIGJ5IGRpdmlzb3JcclxuICAgIGZvciAocG9zMSA9IDE7IHBvczEgPCBTSUdOSUZJQ0FOVF9OVU1fU0laRTsgcG9zMSsrKSB7XHJcbiAgICAgIHF1b3QgPSBOVU1fVFlQRS50b1VCeXRlKGRpdmlkZW5kW3BvczEgLSAxXSkgKiAxMDAgKyBNYXRoLmZsb29yKE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zMV0pIC8gTlVNX1RZUEUudG9VQnl0ZShkaXZpc29yWzFdKSk7XHJcbiAgICAgIGlmIChxdW90ID49IDEwMClcclxuICAgICAgICBxdW90ID0gOTk7XHJcblxyXG4gICAgICBpZiAocXVvdCAhPT0gMCkge1xyXG4gICAgICAgIC8vIG11bHRpcGx5IGRpdmlzb3IgYnkgcXVvdGllbnQsIGFuZCBzdWJ0cmFjdCBmcm9tIGRpdmlkZW5kXHJcbiAgICAgICAgcG9zID0gcG9zMSArIGxlbjIgLSAxO1xyXG4gICAgICAgIGNhcnJ5ID0gMDtcclxuICAgICAgICBmb3IgKHBvczIgPSBsZW4yOyBwb3MyID4gMDsgcG9zMi0tKSB7XHJcbiAgICAgICAgICBwcm9kID0gcXVvdCAqIE5VTV9UWVBFLnRvVUJ5dGUoZGl2aXNvcltwb3MyXSkgKyBjYXJyeTtcclxuICAgICAgICAgIGNhcnJ5ID0gTWF0aC5mbG9vcihwcm9kIC8gMTAwKTtcclxuICAgICAgICAgIGRpdmlkZW5kW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zXSkgLSBwcm9kICUgMTAwKTtcclxuICAgICAgICAgIHRtcEJ5dGUgPSBkaXZpZGVuZFtwb3NdO1xyXG4gICAgICAgICAgcG9zLS07XHJcbiAgICAgICAgICBpZiAodG1wQnl0ZSA8IDApIHtcclxuICAgICAgICAgICAgZGl2aWRlbmRbcG9zICsgMV0gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zICsgMV0pICsgMTAwKTtcclxuICAgICAgICAgICAgY2FycnkrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZGl2aWRlbmRbcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShkaXZpZGVuZFtwb3NdKSAtIGNhcnJ5KTtcclxuXHJcbiAgICAgICAgLy8gZGVjcmVtZW50IHF1b3RpZW50LCBhbmQgYWRkIGJhY2sgZGl2aXNvciB0byBkaXZpZGVuZFxyXG4gICAgICAgIHdoaWxlIChkaXZpZGVuZFtwb3NdIDwgMCkge1xyXG4gICAgICAgICAgcXVvdC0tO1xyXG4gICAgICAgICAgcG9zID0gcG9zMSArIGxlbjIgLSAxO1xyXG4gICAgICAgICAgZm9yIChwb3MyID0gbGVuMjsgcG9zMiA+IDA7IHBvczItLSkge1xyXG4gICAgICAgICAgICBkaXZpZGVuZFtwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKGRpdmlkZW5kW3Bvc10pICsgTlVNX1RZUEUudG9VQnl0ZShkaXZpc29yW3BvczJdKSk7XHJcbiAgICAgICAgICAgIHRtcEJ5dGUgPSBkaXZpZGVuZFtwb3NdO1xyXG4gICAgICAgICAgICBwb3MtLTtcclxuICAgICAgICAgICAgaWYgKE5VTV9UWVBFLnRvVUJ5dGUodG1wQnl0ZSkgPj0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgZGl2aWRlbmRbcG9zICsgMV0gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUoZGl2aWRlbmRbcG9zICsgMV0pIC0gMTAwKTtcclxuICAgICAgICAgICAgICBkaXZpZGVuZFtwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKGRpdmlkZW5kW3Bvc10pICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmVzLl9kYXRhW3BvczFdID0gTlVNX1RZUEUudG9TQnl0ZShxdW90KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbXBhcmUgdHdvIG1hZ2ljIG51bWJlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMVwiPiAgVGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMlwiPiAgVGhlIHNlY29uZCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IDAgaWYgbnVtMT1udW0yLCAxIGlmIG51bTE+bnVtMiBvciAtMSBpZiBudW0xPG51bTJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBudW1fY21wKG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSk6IG51bWJlciB7XHJcbiAgICBsZXQgc2lnbjE6IG51bWJlcjtcclxuICAgIGxldCBzaWduMjogbnVtYmVyO1xyXG4gICAgbGV0IGNtcHZhbDogbnVtYmVyO1xyXG4gICAgbGV0IGwxOiBudW1iZXI7XHJcbiAgICBsZXQgbDI6IG51bWJlcjtcclxuICAgIGxldCB0bXA6IG51bWJlcjtcclxuICAgIGxldCBTSUdOSUZJQ0FOVF9OVU1fU0laRTogbnVtYmVyO1xyXG5cclxuICAgIGlmIChudW0xID09IG51bGwgfHwgbnVtMiA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gSW50MzIuTWluVmFsdWU7XHJcblxyXG4gICAgU0lHTklGSUNBTlRfTlVNX1NJWkUgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKTtcclxuXHJcbiAgICBpZiAobnVtMS5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgIGlmIChudW0yLk5VTV9JU19MT05HKCkpIHtcclxuICAgICAgICBsMSA9IG51bTEuTlVNX0xPTkcoKTtcclxuICAgICAgICBsMiA9IG51bTIuTlVNX0xPTkcoKTtcclxuICAgICAgICBpZiAobDEgPj0gMCAmJiBsMiA+PSAwKSB7XHJcbiAgICAgICAgICB0bXAgPSBsMSAtIGwyO1xyXG4gICAgICAgICAgaWYgKHRtcCA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuICgwKTtcclxuICAgICAgICAgIGlmICh0bXAgPiAwKVxyXG4gICAgICAgICAgICByZXR1cm4gKDEpO1xyXG4gICAgICAgICAgcmV0dXJuICgtMSk7XHJcbiAgICB9XHJcbiAgICAgICAgICAgIG51bTIubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICBudW0xLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICAgIH1cclxuICAgIGVsc2UgaWYgKG51bTIuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgICAgIG51bTIubnVtXzRfc3RkX2xvbmcoKTtcclxuXHJcbiAgICBzaWduMSA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMS5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBzaWduMiA9IE5VTV9UWVBFLnRvU0J5dGUobnVtMi5fZGF0YVswXSAmIE5VTV9UWVBFLlNJR05fTUFTSyk7XHJcbiAgICBjbXB2YWwgPSAoc2lnbjEgPT09IHNpZ24yKVxyXG4gICAgICA/IE5VTV9UWVBFLm1lbWNtcChudW0xLCAwLCBudW0yLCAwLCBTSUdOSUZJQ0FOVF9OVU1fU0laRSlcclxuICAgICAgOiAxO1xyXG4gICAgaWYgKHNpZ24xICE9PSAwKVxyXG4gICAgICBjbXB2YWwgPSAtY21wdmFsO1xyXG4gICAgcmV0dXJuIChjbXB2YWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENoZWNrIGlmIHRoZSBnaXZlbiBoZXggc3RyaW5nIHJlcHJlc2VudHMgYSBsb25nIG51bWJlci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtSGV4U3RyXCI+ICBUaGUgaGV4IHN0cmluZyB0byBjaGVjay5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUsIGlmIHRoZSBzdHJpbmcgcmVwcmVzZW50cyBhICdsb25nJyBudW1iZXIgaW4gTlVNX1RZUEUuXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgbnVtSGV4U3RySXNMb25nKG51bUhleFN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbnVtSGV4U3RyLnN1YnN0cigwLCAyKSA9PT0gXCJGRlwiO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFplcm9lcyB0aGUgTWFnaWMgTnVtYmVyIGFzIGEgbG9uZyB6ZXJvXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBOVU1fWkVSTygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0WmVybyh0cnVlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBaZXJvZXMgdGhlIE1hZ2ljIE51bWJlciAoYWxsIGJ5dGVzIHdpbGwgc2V0IHRvIDApXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBOVU1fU0VUX1pFUk8oKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFplcm8oZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldHRpbmcgaW5kaWNhdGlvbiBmb3IgdGhlIHNpZ24gb2YgdGhlIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGluIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUsIGZhbHNlIGlmIHBvc2l0aXZlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBudW1faXNfbmVnKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmV0dXJuICgodGhpcy5fZGF0YVs0XSAmIDB4ODApICE9PSAwKTtcclxuICAgIHJldHVybiAoKHRoaXMuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spICE9PSAwKTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldHRpbmcgaW5kaWNhdGlvbiBpZiB0aGUgTWFnaWMgTnVtYmVyIGlzIFpFUk8gKGFsbCBieXRlcyBlcXVhbHMgdG8gMClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpbiB0aGUgbnVtYmVyIGlzIFpFUk8sIGZhbHNlIGlmIHBvc2l0aXZlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBudW1faXNfemVybygpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJldHVybiAodGhpcy5OVU1fTE9ORygpID09PSAwKTtcclxuICAgIHJldHVybiAodGhpcy5fZGF0YVswXSA9PT0gMCk7XHJcbiAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDaGFuZ2luZyBzaWduIG9mIE1hZ2ljIE51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgbnVtX25lZygpOiB2b2lkIHtcclxuICAgIGxldCBsOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSkge1xyXG4gICAgICBsID0gLXRoaXMuTlVNX0xPTkcoKTtcclxuICAgICAgdGhpcy5OVU1fNF9MT05HKGwpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fZGF0YVswXSAhPT0gMClcclxuICAgICAgdGhpcy5fZGF0YVswXSBePSBOVU1fVFlQRS5TSUdOX01BU0s7XHJcbiAgICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIElzIHRoZSBudW1iZXIga2VwdCBpbiBpbiB0aGUgTlVNX1RZUEUgaXMgYSBsb25nIG51bWJlcj9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpbiB0aGUgbnVtYmVyIGlzIGxvbmcsIGZhbHNlIGlmIG5vdFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgTlVNX0lTX0xPTkcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YVswXSA9PT0gTlVNX1RZUEUuTlVNX0xPTkdfVFlQRTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIGxvbmcgdmFsdWUgZnJvbSB0aGUgTlVNX1RZUEUuXHJcbiAgLy8vICAgVEhJUyBGVU5DVElPTiBNVVNUIEJFIFdSSVRURU4gRElGRVJFTlRMWSFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxvbmcgbnVtYmVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBOVU1fTE9ORygpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuX2RhdGFbMV0gPT09IDAgJiYgdGhpcy5fZGF0YVsyXSA9PT0gMCAmJiB0aGlzLl9kYXRhWzNdID09PSAwICYmIHRoaXMuX2RhdGFbNF0gPT09IC0xMjgpXHJcbiAgICAgIHJldHVybiBJbnQzMi5NaW5WYWx1ZTtcclxuXHJcbiAgICBsZXQgZGF0YXZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5fZGF0YS5idWZmZXIpO1xyXG4gICAgcmV0dXJuIGRhdGF2aWV3LmdldEludDMyKDEsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJvdW5kcyB0aGUgTlVNX1RZUEUgbnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlY3NcIj4gIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdG8gZGVjaW1hbCBwb2ludCB0byByb3VuZCB0b1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHJvdW5kKGRlY3M6IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgIGxldCBhZGR2YWw6IE5VTV9UWVBFO1xyXG5cclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBhZGR2YWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGFkZHZhbC5fZGF0YVswXSA9IE5VTV9UWVBFLnRvU0J5dGUoKHRoaXMuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spIHwgKE5VTV9UWVBFLkVYUF9CSUFTIC0gKGRlY3MgPj4gMSkpKTtcclxuICAgIGFkZHZhbC5fZGF0YVsxXSA9IE5VTV9UWVBFLnRvU0J5dGUoKGRlY3MgJiAxKSAhPT0gMCA/IDUgOiA1MCk7XHJcblxyXG4gICAgbGV0IHRlbXA6IE5VTV9UWVBFID0gTlVNX1RZUEUuYWRkKHRoaXMsIGFkZHZhbCk7XHJcbiAgICB0aGlzLl9kYXRhID0gbmV3IEludDhBcnJheSh0ZW1wLl9kYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgdGhpcy5fZGF0YSA9IHRlbXAuX2RhdGE7XHJcbiAgICAgIHRoaXMubnVtX3RydW5jKGRlY3MpO1xyXG4gICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmV0dXJucyBhIG51bWVyaWMgZXhwcmVzc2lvbiwgcm91bmRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ3aG9sZVwiPnRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gd2hpY2ggdGhlIG51bWVyaWMgZXhwcmVzc2lvbiBpcyByb3VuZGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgZGJSb3VuZCh3aG9sZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgYWRkdmFsOiBOVU1fVFlQRTtcclxuICAgIGxldCBwd3I6IG51bWJlcjtcclxuICAgIGxldCBudW1fZGlmZjogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgLy8gQWRkIDUgKGluIHRoZSBjb3JyZXNwb25kaW5nIHRvIHdob2xlIHBvc2l0aW9uKVxyXG4gICAgYWRkdmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBhZGR2YWwuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKCh0aGlzLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLKSB8IChOVU1fVFlQRS5FWFBfQklBUyArICgod2hvbGUgKyAxKSA+PiAxKSkpO1xyXG4gICAgYWRkdmFsLl9kYXRhWzFdID0gTlVNX1RZUEUudG9TQnl0ZSgoKHdob2xlICYgMSkgIT09IDApID8gNSA6IDUwKTtcclxuXHJcbiAgICBsZXQgdGVtcDogTlVNX1RZUEUgPSBOVU1fVFlQRS5hZGQodGhpcywgYWRkdmFsKTtcclxuICAgIHRoaXMuX2RhdGEgPSBuZXcgSW50OEFycmF5KHRlbXAuX2RhdGEubGVuZ3RoKTtcclxuXHJcbiAgICAgIGZvciAobGV0IF9haTogbnVtYmVyID0gMDsgX2FpIDwgdGhpcy5fZGF0YS5sZW5ndGg7ICsrX2FpKVxyXG4gICAgICB0aGlzLl9kYXRhW19haV0gPSB0ZW1wLl9kYXRhW19haV07XHJcblxyXG4gICAgLy8gUHV0IDAgaW4gdGhlIGVuZCBvZiB0aGUgbnVtYmVyXHJcbiAgICBwd3IgPSAodGhpcy5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spIC0gTlVNX1RZUEUuRVhQX0JJQVM7XHJcblxyXG4gICAgaWYgKChudW1fZGlmZiA9IHB3ciAtICgod2hvbGUgKyAxKSA+PiAxKSkgPj0gMCkge1xyXG4gICAgICBpZiAoKHdob2xlICYgMSkgIT09IDApIHtcclxuICAgICAgICB0aGlzLl9kYXRhWzEgKyBudW1fZGlmZl0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuX2RhdGFbMSArIG51bV9kaWZmXSAtIHRoaXMuX2RhdGFbMSArIG51bV9kaWZmXSAlIDEwKTtcclxuICAgICAgICBudW1fZGlmZisrO1xyXG4gICAgICAgIH1cclxuICAgICAgZm9yIChpID0gMDtcclxuICAgICAgICAgICBpIDwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtICgxICsgbnVtX2RpZmYpO1xyXG4gICAgICAgICAgIGkrKylcclxuICAgICAgICB0aGlzLl9kYXRhWzEgKyBudW1fZGlmZiArIGldID0gMDtcclxuICAgICAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5OVU1fU0VUX1pFUk8oKTtcclxuICAgICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJ1bmNhdGVzIHRoZSBOVU1fVFlQRSBudW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGVjc1wiPiAgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0byBkZWNpbWFsIHBvaW50IHRvIGhhdmVcclxuICAvLy8gPC9wYXJhbT5cclxuICBudW1fdHJ1bmMoZGVjczogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgcHdyOiBudW1iZXI7XHJcbiAgICBsZXQgbnVtX2RpZmY6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHB3ciA9ICh0aGlzLl9kYXRhWzBdICYgfk5VTV9UWVBFLlNJR05fTUFTSykgLSBOVU1fVFlQRS5FWFBfQklBUztcclxuICAgIGlmICgobnVtX2RpZmYgPSB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSAtIHB3ciAtICgoZGVjcyArIDEpID4+IDEpKSA8IDApXHJcbiAgICAgIHJldHVybjtcclxuICAgIGlmICgobnVtX2RpZmYgPCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSkgJiYgKChkZWNzICYgMSkgIT09IDApKSB7XHJcbiAgICAgIHRoaXMuX2RhdGFbdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEgLSBudW1fZGlmZl0gPVxyXG4gICAgICAgIE5VTV9UWVBFLnRvU0J5dGUodGhpcy5fZGF0YVt0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFIC0gMSAtIG51bV9kaWZmXSAtIHRoaXMuX2RhdGFbdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEgLSBudW1fZGlmZl0gJSAxMCk7XHJcbiAgICAgIGlmICh0aGlzLl9kYXRhW3RoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxIC0gbnVtX2RpZmZdID09PSAwKVxyXG4gICAgICAgIG51bV9kaWZmKys7XHJcbiAgICAgICAgICB9XHJcbiAgICBpZiAobnVtX2RpZmYgPj0gdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpIHtcclxuICAgICAgICAgIHRoaXMuTlVNX1pFUk8oKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIGZvciAoaSA9IDA7XHJcbiAgICAgICAgIGkgPCBudW1fZGlmZjtcclxuICAgICAgICAgaSsrKVxyXG4gICAgICB0aGlzLl9kYXRhW3RoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSBudW1fZGlmZiArIGldID0gMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnRzIGEgTWFnaWMgbnVtYmVyIGZyb20gc3RkIGxvbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtXCI+ICBUaGUgbnVtYmVyIHRvIGJlIHRyYW5zbGF0ZWRcclxuICAvLy8gPC9wYXJhbT5cclxuICBudW1fNF9zdGRfbG9uZygpOiB2b2lkIHtcclxuICAgIGxldCBzbG9uZzogbnVtYmVyO1xyXG5cclxuICAgIHNsb25nID0gdGhpcy5OVU1fTE9ORygpO1xyXG4gICAgaWYgKHNsb25nID49IDApXHJcbiAgICAgIHRoaXMubnVtXzRfdWxvbmcoc2xvbmcpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMubnVtXzRfdWxvbmcoLXNsb25nKTtcclxuICAgICAgdGhpcy5fZGF0YVswXSB8PSBOVU1fVFlQRS5TSUdOX01BU0s7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29udmVydHMgYSBNYWdpYyBudW1iZXIgZnJvbSB1bG9uZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW1cIj4gIFRoZSBudW1iZXIgdG8gYmUgdHJhbnNsYXRlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIG51bV80X3Vsb25nKGRhdGE6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuXHJcbiAgICB0aGlzLk5VTV9TRVRfWkVSTygpO1xyXG4gICAgcG9zID0gcHdyID0gNTtcclxuICAgIHdoaWxlIChkYXRhID4gMCkge1xyXG4gICAgICB0aGlzLl9kYXRhW3Bvcy0tXSA9IE5VTV9UWVBFLnRvU0J5dGUoZGF0YSAlIDEwMCk7XHJcbiAgICAgIGRhdGEgPSBNYXRoLmZsb29yKGRhdGEgLyAxMDApO1xyXG4gICAgfVxyXG4gICAgaWYgKHBvcyA8IHB3cikge1xyXG4gICAgICBpZiAocG9zID4gMCkge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwd3IgLSBwb3M7IGkrKylcclxuICAgICAgICAgIHRoaXMuX2RhdGFbMSArIGldID0gdGhpcy5fZGF0YVsxICsgcG9zICsgaV07XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvczsgaSsrKVxyXG4gICAgICAgICAgdGhpcy5fZGF0YVtwd3IgLSBwb3MgKyAxICsgaV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgdGhpcy5fZGF0YVswXSA9IE5VTV9UWVBFLnRvU0J5dGUocHdyIC0gcG9zICsgTlVNX1RZUEUuRVhQX0JJQVMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBsb25nIHZhbHVlIGZyb20gYSBNYWdpYyBOdW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxvbmcgdmFsdWUgb2YgdGhlIG51bWJlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgTlVNXzJfTE9ORygpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuTlVNX0lTX0xPTkcoKSlcclxuICAgICAgcmV0dXJuIHRoaXMuTlVNX0xPTkcoKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMubnVtXzJfbG9uZygpO1xyXG4gICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBVbG9uZyB2YWx1ZSBmcm9tIGEgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBsb25nIHZhbHVlIG9mIHRoZSBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIE5VTV8yX1VMT05HKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICByZXR1cm4gdGhpcy5OVU1fTE9ORygpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5udW1fMl91bG9uZygpO1xyXG4gICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBsb25nIHZhbHVlIGZyb20gYSBub24gbG9uZyBNYWdpYyBOdW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxvbmcgdmFsdWUgb2YgdGhlIG51bWJlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgbnVtXzJfbG9uZygpOiBudW1iZXIge1xyXG4gICAgbGV0IHNsb25nOiBudW1iZXI7XHJcbiAgICBsZXQgc2lnbjogbnVtYmVyO1xyXG5cclxuICAgIHNpZ24gPSB0aGlzLl9kYXRhWzBdICYgTlVNX1RZUEUuU0lHTl9NQVNLO1xyXG4gICAgdGhpcy5fZGF0YVswXSAmPSBOVU1fVFlQRS50b1NCeXRlKH5OVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgaWYgKHNpZ24gIT09IDApIHtcclxuICAgICAgaWYgKE5VTV9UWVBFLm1lbWNtcCh0aGlzLCAwLCBOVU1fVFlQRS5NaW5MT05HKCksIDAsIHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUpID4gMClcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChOVU1fVFlQRS5tZW1jbXAodGhpcywgMCwgTlVNX1RZUEUuTWF4TE9ORygpLCAwLCB0aGlzLlNJR05JRklDQU5UX05VTV9TSVpFKSA+IDApXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgIHNsb25nID0gdGhpcy5udW1fMl91bG9uZygpO1xyXG4gICAgaWYgKHNpZ24gIT09IDApIHtcclxuICAgICAgc2xvbmcgPSAtc2xvbmc7XHJcbiAgICAgIHRoaXMuX2RhdGFbMF0gfD0gTlVNX1RZUEUudG9TQnl0ZShzaWduKTtcclxuICAgIH1cclxuICAgIHJldHVybiAoc2xvbmcpO1xyXG4gICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSB1bG9uZyB2YWx1ZSBmcm9tIGEgbm9uIGxvbmcgTWFnaWMgTnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSB1bG9uZyB2YWx1ZSBvZiB0aGUgbnVtYmVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBudW1fMl91bG9uZygpOiBudW1iZXIge1xyXG4gICAgbGV0IHZhbDogbnVtYmVyO1xyXG4gICAgbGV0IHB3cjogbnVtYmVyO1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG4gICAgbGV0IGxhc3Q6IGJvb2xlYW47XHJcblxyXG4gICAgcHdyID0gdGhpcy5fZGF0YVswXSAtIE5VTV9UWVBFLkVYUF9CSUFTO1xyXG4gICAgaWYgKHB3ciA+IDUpXHJcbiAgICAgIHJldHVybiAoMCk7XHJcbiAgICBsYXN0ID0gKHB3ciA9PT0gNSk7XHJcbiAgICBpZiAobGFzdClcclxuICAgICAgcHdyID0gNDtcclxuXHJcbiAgICB2YWwgPSAwO1xyXG4gICAgZm9yIChwb3MgPSAxOyBwb3MgPD0gcHdyOyBwb3MrKylcclxuICAgICAgdmFsID0gdmFsICogMTAwICsgTlVNX1RZUEUudG9VQnl0ZSh0aGlzLl9kYXRhW3Bvc10pO1xyXG5cclxuICAgIGlmIChsYXN0KVxyXG4gICAgICBpZiAodmFsIDw9IE1hdGguZmxvb3IoKDB4RkZGRkZGRkYgLSBOVU1fVFlQRS50b1VCeXRlKHRoaXMuX2RhdGFbNV0pKSAvIDEwMCkpXHJcbiAgICAgICAgdmFsID0gdmFsICogMTAwICsgTlVNX1RZUEUudG9VQnl0ZSh0aGlzLl9kYXRhWzVdKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHZhbCA9IDA7XHJcbiAgICByZXR1cm4gKHZhbCk7XHJcbiAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtIHRoZSBhY3R1YWxsIGFkZCBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMVwiPiAgICAgIFRoZSBmaXJzdCBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gICAgICBUaGUgc2Vjb25kIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3BlckRhdGFcIj4gIEluZm9ybWF0aW9uIGZvciBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb25cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IFRoZSB0d28gbnVtYmVycyBhZGRlZFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGFkZF9wb3MobnVtMTogTlVNX1RZUEUsIG51bTI6IE5VTV9UWVBFLCBvcGVyRGF0YTogT3BlckRhdGEpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgbGVuMTogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjI6IG51bWJlcjtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBudW0xcHRyOiBudW1iZXI7XHJcbiAgICBsZXQgcmVzcHRyOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IFNJR05JRklDQU5UX05VTV9TSVpFOiBudW1iZXI7XHJcblxyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09IG51bGwgfHwgbnVtMiA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIFNJR05JRklDQU5UX05VTV9TSVpFID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U2lnbmlmaWNhbnROdW1TaXplKCk7XHJcblxyXG4gICAgbGV0IHJlczogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuXHJcbiAgICBpZiAob3BlckRhdGEuTlVNX0V4cDJfID09PSAwIHx8IChvcGVyRGF0YS5OVU1fRGlmZl8gPj0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSkge1xyXG4gICAgICByZXMgPSBuZXcgTlVNX1RZUEUobnVtMSk7XHJcbiAgICAgIHJlcy5fZGF0YVswXSA9IG9wZXJEYXRhLk5VTV9FeHAxXztcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBsZW4xID0gMTtcclxuICAgIGZvciAoaSA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMjsgaSA+IDA7IGkgLT0gMikge1xyXG4gICAgICBpZiAobnVtMS5TSFJUX0lTX1pFUk8oaSkpXHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBsZW4xID0gaSArIDE7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICBpZiAobnVtMS5fZGF0YVtsZW4xXSA9PT0gMClcclxuICAgICAgbGVuMS0tO1xyXG5cclxuICAgIGxlbjIgPSAxO1xyXG4gICAgZm9yIChpID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAyOyBpID4gMDsgaSAtPSAyKSB7XHJcbiAgICAgIGlmIChudW0yLlNIUlRfSVNfWkVSTyhpKSlcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGVuMiA9IGkgKyAxO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgaWYgKG51bTIuX2RhdGFbbGVuMl0gPT09IDApXHJcbiAgICAgIGxlbjItLTtcclxuXHJcbiAgICBpZiAoKGxlbiA9IE1hdGgubWF4KGxlbjEsIGxlbjIgKyBvcGVyRGF0YS5OVU1fRGlmZl8pKSA+IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMSlcclxuICAgICAgbGVuID0gU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxO1xyXG5cclxuICAgIHJlcy5OVU1fU0VUX1pFUk8oKTtcclxuICAgIG51bTFwdHIgPSBvcGVyRGF0YS5OVU1fRGlmZl87XHJcbiAgICByZXNwdHIgPSBvcGVyRGF0YS5OVU1fRGlmZl87XHJcbiAgICBmb3IgKHBvcyA9IGxlbiAtIG9wZXJEYXRhLk5VTV9EaWZmXzsgcG9zID4gMDsgcG9zLS0pIHtcclxuICAgICAgcmVzLl9kYXRhW3Jlc3B0ciArIHBvc10gPVxyXG4gICAgICAgIE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcmVzcHRyICsgcG9zXSkgKyBOVU1fVFlQRS50b1VCeXRlKG51bTEuX2RhdGFbbnVtMXB0ciArIHBvc10pICsgTlVNX1RZUEUudG9VQnl0ZShudW0yLl9kYXRhW3Bvc10pKTtcclxuICAgICAgaWYgKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Jlc3B0ciArIHBvc10pID49IDEwMCkge1xyXG4gICAgICAgIHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdKSAtIDEwMCk7XHJcbiAgICAgICAgcmVzLl9kYXRhW3Jlc3B0ciArIHBvcyAtIDFdID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgZm9yIChwb3MgPSBvcGVyRGF0YS5OVU1fRGlmZl87IHBvcyA+IDA7IHBvcy0tKSB7XHJcbiAgICAgIHJlcy5fZGF0YVtwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtwb3NdKSArIE5VTV9UWVBFLnRvVUJ5dGUobnVtMS5fZGF0YVtwb3NdKSk7XHJcbiAgICAgIGlmIChOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtwb3NdKSA+PSAxMDApIHtcclxuICAgICAgICByZXMuX2RhdGFbcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcG9zXSkgLSAxMDApO1xyXG4gICAgICAgIHJlcy5fZGF0YVtwb3MgLSAxXSA9IDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgaWYgKHJlcy5fZGF0YVswXSAhPT0gMCkge1xyXG4gICAgICBmb3IgKHBvcyA9IE1hdGgubWluKGxlbiwgU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAyKTsgcG9zID49IDA7IHBvcy0tKVxyXG4gICAgICAgIHJlcy5fZGF0YVtwb3MgKyAxXSA9IHJlcy5fZGF0YVtwb3NdO1xyXG4gICAgICBvcGVyRGF0YS5OVU1fRXhwMV8rKztcclxuICAgICAgICAgIH1cclxuICAgIHJlcy5fZGF0YVswXSA9IG9wZXJEYXRhLk5VTV9FeHAxXztcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBlcmZvcm0gdGhlIGFjdHVhbGwgc3ViIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0xXCI+ICAgICAgVGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMlwiPiAgICAgIFRoZSBzZWNvbmQgbnVtYmVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvcGVyRGF0YVwiPiAgSW5mb3JtYXRpb24gZm9yIHBlcmZvcm1pbmcgdGhlIG9wZXJhdGlvblxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gVGhlIHJlc3VsdCBvZiB0aGUgc3VidHJhY3Rpb24gb3BlcmF0aW9uXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgc3ViX3BvcyhudW0xOiBOVU1fVFlQRSwgbnVtMjogTlVNX1RZUEUsIG9wZXJEYXRhOiBPcGVyRGF0YSk6IE5VTV9UWVBFIHtcclxuICAgIGxldCBsZW4xOiBudW1iZXI7XHJcbiAgICBsZXQgbGVuMjogbnVtYmVyO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyO1xyXG4gICAgbGV0IHBvczogbnVtYmVyO1xyXG4gICAgbGV0IG51bTFwdHI6IG51bWJlcjtcclxuICAgIGxldCByZXNwdHI6IG51bWJlcjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgU0lHTklGSUNBTlRfTlVNX1NJWkU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBudWxsIHZhbHVlc1xyXG4gICAgaWYgKG51bTEgPT0gbnVsbCB8fCBudW0yID09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIFNJR05JRklDQU5UX05VTV9TSVpFID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0U2lnbmlmaWNhbnROdW1TaXplKCk7XHJcblxyXG4gICAgbGV0IHJlczogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBqOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKG9wZXJEYXRhLk5VTV9FeHAyXyA9PT0gMCB8fCAob3BlckRhdGEuTlVNX0RpZmZfID49IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMSkpIHtcclxuICAgICAgcmVzID0gbmV3IE5VTV9UWVBFKG51bTEpO1xyXG4gICAgICByZXMuX2RhdGFbMF0gPSBvcGVyRGF0YS5OVU1fRXhwMV87XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgbGVuMSA9IDE7XHJcbiAgICBmb3IgKGkgPSBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDI7IGkgPiAwOyBpIC09IDIpIHtcclxuICAgICAgaWYgKG51bTEuU0hSVF9JU19aRVJPKGkpKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbGVuMSA9IGkgKyAxO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgaWYgKG51bTEuX2RhdGFbbGVuMV0gPT09IDApXHJcbiAgICAgIGxlbjEtLTtcclxuXHJcbiAgICBsZW4yID0gMTtcclxuICAgIGZvciAoaSA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMjsgaSA+IDA7IGkgLT0gMikge1xyXG4gICAgICBpZiAobnVtMi5TSFJUX0lTX1pFUk8oaSkpXHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxlbjIgPSBpICsgMTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGlmIChudW0yLl9kYXRhW2xlbjJdID09PSAwKVxyXG4gICAgICBsZW4yLS07XHJcblxyXG4gICAgaWYgKChsZW4gPSBNYXRoLm1heChsZW4xLCBsZW4yICsgb3BlckRhdGEuTlVNX0RpZmZfKSkgPiBTSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpXHJcbiAgICAgIGxlbiA9IFNJR05JRklDQU5UX05VTV9TSVpFIC0gMTtcclxuXHJcbiAgICByZXMuTlVNX1NFVF9aRVJPKCk7XHJcbiAgICBudW0xcHRyID0gb3BlckRhdGEuTlVNX0RpZmZfO1xyXG4gICAgcmVzcHRyID0gb3BlckRhdGEuTlVNX0RpZmZfO1xyXG4gICAgZm9yIChwb3MgPSBsZW4gLSBvcGVyRGF0YS5OVU1fRGlmZl87IHBvcyA+IDA7IHBvcy0tKSB7XHJcblxyXG4gICAgICByZXMuX2RhdGFbcmVzcHRyICsgcG9zXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUudG9VQnl0ZShyZXMuX2RhdGFbcmVzcHRyICsgcG9zXSkgKyBOVU1fVFlQRS50b1VCeXRlKG51bTEuX2RhdGFbbnVtMXB0ciArIHBvc10pIC0gTlVNX1RZUEUudG9VQnl0ZShudW0yLl9kYXRhW3Bvc10pKTtcclxuICAgICAgaWYgKHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdIDwgMCkge1xyXG4gICAgICAgIHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtyZXNwdHIgKyBwb3NdKSArIDEwMCk7XHJcbiAgICAgICAgcmVzLl9kYXRhW3Jlc3B0ciArIHBvcyAtIDFdID0gTlVNX1RZUEUudG9TQnl0ZSgweEZGKTsgLy8gMjU1XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICBmb3IgKHBvcyA9IG9wZXJEYXRhLk5VTV9EaWZmXzsgcG9zID4gMDsgcG9zLS0pIHtcclxuICAgICAgcmVzLl9kYXRhW3Bvc10gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUocmVzLl9kYXRhW3Bvc10pICsgTlVNX1RZUEUudG9VQnl0ZShudW0xLl9kYXRhW3Bvc10pKTtcclxuICAgICAgaWYgKHJlcy5fZGF0YVtwb3NdIDwgMCkge1xyXG4gICAgICAgIHJlcy5fZGF0YVtwb3NdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS50b1VCeXRlKHJlcy5fZGF0YVtwb3NdKSArIDEwMCk7XHJcbiAgICAgICAgcmVzLl9kYXRhW3BvcyAtIDFdID0gTlVNX1RZUEUudG9TQnl0ZSgweEZGKTsgLy8gMjU1XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgIHdoaWxlICgoKytwb3MgPD0gbGVuKSAmJiByZXMuX2RhdGFbcG9zXSA9PT0gMCkge1xyXG4gICAgICAgIH1cclxuICAgIGlmIChwb3MgPD0gbGVuKSB7XHJcbiAgICAgIG9wZXJEYXRhLk5VTV9EaWZmXyA9IHBvcyAtIDE7XHJcbiAgICAgIGlmIChvcGVyRGF0YS5OVU1fRGlmZl8gPiAwKSB7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbiAtIG9wZXJEYXRhLk5VTV9EaWZmXzsgaisrKVxyXG4gICAgICAgICAgcmVzLl9kYXRhWzEgKyBqXSA9IHJlcy5fZGF0YVtwb3MgKyBqXTtcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgb3BlckRhdGEuTlVNX0RpZmZfOyBqKyspXHJcbiAgICAgICAgICByZXMuX2RhdGFbbGVuIC0gb3BlckRhdGEuTlVNX0RpZmZfICsgMSArIGpdID0gMDtcclxuICAgICAgfVxyXG4gICAgICByZXMuX2RhdGFbMF0gPSBOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLnRvVUJ5dGUob3BlckRhdGEuTlVNX0V4cDFfKSAtIG9wZXJEYXRhLk5VTV9EaWZmXyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQZXJmb3JtIHRoZSBhY3R1YWwgIEZJWCBvcGVyYXRpb24gd2l0aCB3aG9sZSBwYXJ0IG9mIHRoZSBudW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwid2hvbGVzXCI+bnVtYmVyIG9mIG5lZWRlZCB3aG9sZSBkaWdpdHNcclxuICAvLy8gPC9wYXJhbT5cclxuICBudW1fZml4KHdob2xlczogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgcHdyOiBudW1iZXI7XHJcbiAgICBsZXQgbnVtX2RpZmY6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKVxyXG4gICAgICB0aGlzLm51bV80X3N0ZF9sb25nKCk7XHJcbiAgICBwd3IgPSAodGhpcy5fZGF0YVswXSAmIH5OVU1fVFlQRS5TSUdOX01BU0spIC0gTlVNX1RZUEUuRVhQX0JJQVM7XHJcblxyXG4gICAgaWYgKChudW1fZGlmZiA9IHB3ciAtICgod2hvbGVzICsgMSkgPj4gMSkpIDwgMClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYgKG51bV9kaWZmIDwgdGhpcy5TSUdOSUZJQ0FOVF9OVU1fU0laRSAtIDEpIHtcclxuICAgICAgaWYgKCh3aG9sZXMgJiAxKSA9PT0gMSlcclxuICAgICAgICB0aGlzLl9kYXRhWzEgKyBudW1fZGlmZl0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuX2RhdGFbMSArIG51bV9kaWZmXSAlIDEwKTtcclxuICAgICAgd2hpbGUgKChudW1fZGlmZiA8IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSAmJiB0aGlzLl9kYXRhWzEgKyBudW1fZGlmZl0gPT09IDApXHJcbiAgICAgICAgbnVtX2RpZmYrKztcclxuICAgICAgfVxyXG4gICAgaWYgKG51bV9kaWZmID49IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxKSB7XHJcbiAgICAgICAgdGhpcy5OVU1fWkVSTygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIGlmIChudW1fZGlmZiA+IDApIHtcclxuICAgICAgbGV0IGk6IG51bWJlcjtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSAxIC0gbnVtX2RpZmY7IGkrKylcclxuICAgICAgICB0aGlzLl9kYXRhWzEgKyBpXSA9IHRoaXMuX2RhdGFbMSArIG51bV9kaWZmICsgaV07XHJcblxyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2RpZmY7IGkrKylcclxuICAgICAgICB0aGlzLl9kYXRhW3RoaXMuU0lHTklGSUNBTlRfTlVNX1NJWkUgLSBudW1fZGlmZiArIGldID0gMDtcclxuICAgICAgdGhpcy5fZGF0YVswXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5fZGF0YVswXSAtIE5VTV9UWVBFLnRvU0J5dGUobnVtX2RpZmYpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjaGVjayBpZiBieXRlIG9uIHNwZWNpZmljIHBvc2l0aW9uIGlzIHplcm8gb3IgMHhGRlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NpdGlvblwiPmluIE5VTSB0byBiZSBjaGVja2VkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBpcyB0aGUgYnl0ZSB6ZXJvXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBTSFJUX0lTX1pFUk8ocG9zOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhW3Bvc10gPT09IDAgJiYgdGhpcy5fZGF0YVtwb3MgKyAxXSA9PT0gMDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBaZXJvIGEgTWFnaWMgTnVtYmVyLiBJZiB0aGUgbnVtYmVyIHNob3VsZCBjb250YWluIGEgbG9uZyB6ZXJvLCB0aGUgZmlyc3RcclxuICAvLy8gICBieXRlIGlzIHNldCB0byBOVU1fTE9OR19UWVBFLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhc0xvbmdcIj4gIHNldCB0aGUgTWFnaWMgTnVtYmVyIHRvIGNvbnRhaW4gYSBsb25nIHplcm8gdmFsdWVcclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIHNldFplcm8oYXNMb25nOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fVFlQRS5OVU1fU0laRTsgaSsrKVxyXG4gICAgICB0aGlzLl9kYXRhW2ldID0gMDtcclxuXHJcbiAgICBpZiAoYXNMb25nKVxyXG4gICAgICB0aGlzLl9kYXRhWzBdID0gTlVNX1RZUEUuTlVNX0xPTkdfVFlQRTtcclxuICAgIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbXBhcmUgdHdvIE1hZ2ljIE51bWJlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtMVwiPiAgVGhlIGZpcnN0IG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicG9zMVwiPiAgVGhlIHBvc2l0aW9uIG9mIG51bTEgdG8gY29tcGFyZSBmcm9tXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW0yXCI+ICBUaGUgc2Vjb25kIG51bWJlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicG9zM1wiPiAgVGhlIHBvc2l0aW9uIG9mIG51bTIgdG8gY29tcGFyZSBmcm9tXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiAwIGlmIGlkZW50aWNhbCwgMSBpZiBudW0xPm51bTIsIC0xIGlmIG51bTE8bnVtMlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWVtY21wKG51bTE6IE5VTV9UWVBFLCBwb3MxOiBudW1iZXIsIG51bTI6IE5VTV9UWVBFLCBwb3MyOiBudW1iZXIsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHdoaWxlIChpIDwgbGVuICYmIG51bTEuX2RhdGFbcG9zMV0gPT09IG51bTIuX2RhdGFbcG9zMl0gJiYgcG9zMSA8IE5VTV9UWVBFLk5VTV9TSVpFICYmIHBvczIgPCBOVU1fVFlQRS5OVU1fU0laRSkge1xyXG4gICAgICBpKys7XHJcbiAgICAgIHBvczErKztcclxuICAgICAgcG9zMisrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpID09PSBsZW4pXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgZWxzZSBpZiAodGhpcy50b1VCeXRlKG51bTEuX2RhdGFbcG9zMV0pIDwgdGhpcy50b1VCeXRlKG51bTIuX2RhdGFbcG9zMl0pKVxyXG4gICAgICByZXR1cm4gLTE7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiAxO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIHVuc2lnbmVkIHZhbHVlIGZyb20gYSBieXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJ5dGVWYWxcIj4gIEEgc2lnbmVkIGJ5dGUgdmFsdWVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSB1bnNpZ25lZCB2YWx1ZSBvZiB0aGUgYnl0ZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIHRvVUJ5dGUoYnl0ZVZhbDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCB2YWw6IG51bWJlciA9IGJ5dGVWYWw7XHJcblxyXG4gICAgaWYgKGJ5dGVWYWwgPCAwKVxyXG4gICAgICB2YWwgPSAyNTYgKyBieXRlVmFsO1xyXG5cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IGEgc2lnbmVkIGJ5dGUgdmFsdWUgZnJvbSBhIHVuc2lnbmVkIHZhbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzaWduZWRWYWxcIj4gIEFuIHVuc2lnbmVkIGJ5dGUgdmFsdWUgKGFzIGFuIGludGVnZXIpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc2lnbmVkIHZhbHVlIGFzIGEgYnl0ZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIHRvU0J5dGUodW5zaWduZWRWYWw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgdmFsOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmICh1bnNpZ25lZFZhbCA+IENvbnN0YW50cy5TQnl0ZU1heFZhbHVlKVxyXG4gICAgICB2YWwgPSAodW5zaWduZWRWYWwgLSAyNTYpO1xyXG4gICAgZWxzZVxyXG4gICAgICB2YWwgPSB1bnNpZ25lZFZhbDtcclxuXHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbWF4aW11bSBsb25nIG51bWJlciBpbiBOVU1fVFlQRSBzdGQgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgTWF4TE9ORygpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgblVNX1RZUEU6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBuVU1fVFlQRS5fZGF0YVswXSA9IE5VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA1KTtcclxuICAgIG5VTV9UWVBFLl9kYXRhWzFdID0gMjE7XHJcbiAgICBuVU1fVFlQRS5fZGF0YVsyXSA9IDQ3O1xyXG4gICAgblVNX1RZUEUuX2RhdGFbM10gPSA0ODtcclxuICAgIG5VTV9UWVBFLl9kYXRhWzRdID0gMzY7XHJcbiAgICBuVU1fVFlQRS5fZGF0YVs1XSA9IDQ3O1xyXG4gICAgcmV0dXJuIG5VTV9UWVBFO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbWluaW11bSBsb25nIG51bWJlciBpbiBOVU1fVFlQRSBzdGQgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgTWluTE9ORygpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgbnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbnVtLl9kYXRhWzBdID0gTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDUpO1xyXG4gICAgbnVtLl9kYXRhWzFdID0gMjE7XHJcbiAgICBudW0uX2RhdGFbMl0gPSA0NztcclxuICAgIG51bS5fZGF0YVszXSA9IDQ4O1xyXG4gICAgbnVtLl9kYXRhWzRdID0gMzY7XHJcbiAgICBudW0uX2RhdGFbNV0gPSA0ODtcclxuICAgIHJldHVybiBudW07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IGRvdWJsZSBudW1iZXIgZnJvbSBNYWdpYyBOVU1fVFlQRVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgdG9fZG91YmxlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlX21nXzJfZmxvYXQoOCk7IC8vIExlbmd0aCBvZiBkb3VibGUgaXMgOCBieXRlXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IGRvdWJsZSBudW1iZXIgZnJvbSBNYWdpYyBOVU1fVFlQRVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZW5cIj5vZiBieXRlIG9mIG5lZWRlZCBudW1iZXIgLSBVU0UgOFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgc3RvcmFnZV9tZ18yX2Zsb2F0KGxlbjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBzaWduX3BvczogbnVtYmVyO1xyXG4gICAgbGV0IHNpZ246IG51bWJlcjtcclxuICAgIGxldCBjb21wbnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IHRtcG51bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBkaXZudW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgcHdyOiBudW1iZXI7XHJcbiAgICBsZXQgYml0czogbnVtYmVyO1xyXG4gICAgbGV0IGV4cDogbnVtYmVyO1xyXG4gICAgbGV0IGxvbmcxOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGxvbmcyOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGZsdE91dDogbnVtYmVyID0gMDtcclxuICAgIGxldCBjb3V0OiBJbnQ4QXJyYXkgPSBuZXcgSW50OEFycmF5KFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSk7XHJcbiAgICBsZXQgTnVtMlB3cjIzXzogSW50OEFycmF5ID0gbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDQpLCA4LCAzOCwgODYsIDhdKTtcclxuICAgIGxldCBOdW0yUHdyNTJfOiBJbnQ4QXJyYXkgPSBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgOCksIDQ1LCAzLCA1OSwgOTYsIDI3LCAzNywgNCwgOTZdKTtcclxuICAgIGxldCBiYXNlX051bTE2UHdyczogSW50OEFycmF5W10gPSBbXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgMV0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDE2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAyKSwgMiwgNTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDIpLCA0MCwgOTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDMpLCA2LCA1NSwgMzZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDQpLCAxLCA0LCA4NSwgNzZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDQpLCAxNiwgNzcsIDcyLCAxNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNSksIDIsIDY4LCA0MywgNTQsIDU2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA1KSwgNDIsIDk0LCA5NiwgNzIsIDk2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA2KSwgNiwgODcsIDE5LCA0NywgNjcsIDM2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA3KSwgMSwgOSwgOTUsIDExLCA2MiwgNzcsIDc2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA3KSwgMTcsIDU5LCAyMSwgODYsIDQsIDQ0LCAxNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgOCksIDIsIDgxLCA0NywgNDksIDc2LCA3MSwgNiwgNTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDgpLCA0NSwgMywgNTksIDk2LCAyNywgMzcsIDQsIDk2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA5KSwgNywgMjAsIDU3LCA1OSwgNDAsIDM3LCA5MiwgNzksIDM2XSlcclxuICAgIF07XHJcblxyXG4gICAgbGV0IGJhc2VfTnVtMlB3cnM6IEludDhBcnJheVtdID0gW1xyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDFdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAyXSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgNF0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDhdKVxyXG4gICAgICBdO1xyXG5cclxuICAgIGlmICh0aGlzLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIHRoaXMubnVtXzRfc3RkX2xvbmcoKTtcclxuICAgIGlmICh0aGlzLl9kYXRhWzBdID09PSAwKVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIHNpZ24gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuX2RhdGFbMF0gJiBOVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gICAgdGhpcy5fZGF0YVswXSA9IE5VTV9UWVBFLnRvU0J5dGUodGhpcy5fZGF0YVswXSAmIDxudW1iZXI+KH5OVU1fVFlQRS5TSUdOX01BU0spKTtcclxuICAgIGlmIChsZW4gPT09IDQpIHtcclxuICAgICAgYml0cyA9IDI0O1xyXG4gICAgICBjb21wbnVtID0gbmV3IE5VTV9UWVBFKE51bTJQd3IyM18pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGJpdHMgPSA1MztcclxuICAgICAgY29tcG51bSA9IG5ldyBOVU1fVFlQRShOdW0yUHdyNTJfKTtcclxuICAgIH1cclxuICAgIHB3ciA9ICh0aGlzLl9kYXRhWzBdIC0gTlVNX1RZUEUuRVhQX0JJQVMpIDw8IDE7XHJcbiAgICBpZiAocHdyIDwgMClcclxuICAgICAgZXhwID0gcHdyICogMyArIE1hdGguZmxvb3IoKHB3ciArIDEpIC8gMyk7XHJcbiAgICBlbHNlIGV4cCA9IHB3ciAqIDMgKyBNYXRoLmZsb29yKChwd3IgKyAyKSAvIDMpO1xyXG4gICAgcHdyID0gYml0cyAtIGV4cDtcclxuICAgIGlmIChwd3IgPCAwKSB7XHJcbiAgICAgIHB3ciA9IC1wd3I7XHJcbiAgICAgIHRtcG51bSA9IE5VTV9UWVBFLmRpdih0aGlzLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0xNlB3cnNbcHdyID4+IDJdKSk7XHJcbiAgICAgIHRtcG51bSA9IE5VTV9UWVBFLmRpdih0bXBudW0sIG5ldyBOVU1fVFlQRShiYXNlX051bTJQd3JzW3B3ciAmIDNdKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdG1wbnVtID0gdGhpcztcclxuICAgICAgd2hpbGUgKHB3ciA+PSA2MCkge1xyXG4gICAgICAgIHRtcG51bSA9IE5VTV9UWVBFLm11bCh0bXBudW0sIG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1sxNF0pKTtcclxuICAgICAgICBwd3IgLT0gNTY7XHJcbiAgICAgIH1cclxuICAgICAgdG1wbnVtID0gTlVNX1RZUEUubXVsKHRtcG51bSwgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzW3B3ciA+PiAyXSkpO1xyXG4gICAgICB0bXBudW0gPSBOVU1fVFlQRS5tdWwodG1wbnVtLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0yUHdyc1twd3IgJiAzXSkpO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKE5VTV9UWVBFLm51bV9jbXAodG1wbnVtLCBjb21wbnVtKSA8IDApIHtcclxuICAgICAgZXhwLS07XHJcbiAgICAgIHRtcG51bSA9IE5VTV9UWVBFLmFkZCh0bXBudW0sIHRtcG51bSk7XHJcbiAgICB9XHJcbiAgICBpZiAobGVuID09PSA0KSB7XHJcbiAgICAgIGxvbmcxID0gdG1wbnVtLm51bV8yX3Vsb25nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZGl2bnVtID0gTlVNX1RZUEUuZGl2KHRtcG51bSwgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzWzhdKSk7XHJcbiAgICAgIGRpdm51bS5udW1fdHJ1bmMoMCk7XHJcbiAgICAgIGxvbmcxID0gZGl2bnVtLm51bV8yX3Vsb25nKCk7XHJcbiAgICAgIGRpdm51bSA9IE5VTV9UWVBFLm11bChkaXZudW0sIG5ldyBOVU1fVFlQRShiYXNlX051bTE2UHdyc1s4XSkpO1xyXG4gICAgICBkaXZudW0gPSBOVU1fVFlQRS5zdWIodG1wbnVtLCBkaXZudW0pO1xyXG4gICAgICBsb25nMiA9IGRpdm51bS5udW1fMl91bG9uZygpO1xyXG4gICAgfVxyXG4gICAgc2lnbl9wb3MgPSBsZW4gLSAxO1xyXG4gICAgaWYgKGxlbiA9PT0gNCkge1xyXG4gICAgICBleHAgKz0gMTI2O1xyXG4gICAgICBjb3V0WzNdID0gTlVNX1RZUEUudG9TQnl0ZShleHAgPj4gMSk7XHJcbiAgICAgIGNvdXRbMl0gPSBOVU1fVFlQRS50b1NCeXRlKCh0aGlzLkxPX0NIQVIodGhpcy5ISV9TSFJUKGxvbmcxKSkgJiAweDdGKSB8ICgoZXhwICYgMHgwMSkgPDwgNykpO1xyXG4gICAgICBjb3V0WzFdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLkhJX0NIQVIodGhpcy5MT19TSFJUKGxvbmcxKSkpO1xyXG4gICAgICBjb3V0WzBdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLkxPX0NIQVIodGhpcy5MT19TSFJUKGxvbmcxKSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGV4cCArPSAxMDIyO1xyXG4gICAgICBjb3V0WzddID0gTlVNX1RZUEUudG9TQnl0ZShleHAgPj4gNCk7XHJcblxyXG4gICAgICBjb3V0WzZdID0gTlVNX1RZUEUudG9TQnl0ZSgodGhpcy5MT19DSEFSKHRoaXMuSElfU0hSVChsb25nMSkpICYgMHgwRikgfCAoKGV4cCAmIDB4MEYpIDw8IDQpKTtcclxuXHJcbiAgICAgIGNvdXRbNV0gPSBOVU1fVFlQRS50b1NCeXRlKHRoaXMuSElfQ0hBUih0aGlzLkxPX1NIUlQobG9uZzEpKSk7XHJcblxyXG4gICAgICBjb3V0WzRdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLkxPX0NIQVIodGhpcy5MT19TSFJUKGxvbmcxKSkpO1xyXG4gICAgICBjb3V0WzNdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLkhJX0NIQVIodGhpcy5ISV9TSFJUKGxvbmcyKSkpO1xyXG4gICAgICBjb3V0WzJdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLkxPX0NIQVIodGhpcy5ISV9TSFJUKGxvbmcyKSkpO1xyXG4gICAgICBjb3V0WzFdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLkhJX0NIQVIodGhpcy5MT19TSFJUKGxvbmcyKSkpO1xyXG4gICAgICBjb3V0WzBdID0gTlVNX1RZUEUudG9TQnl0ZSh0aGlzLkxPX0NIQVIodGhpcy5MT19TSFJUKGxvbmcyKSkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNpZ24gIT09IDApIHtcclxuICAgICAgY291dFtzaWduX3Bvc10gfD0gTlVNX1RZUEUuU0lHTl9NQVNLO1xyXG4gICAgICB0aGlzLl9kYXRhWzBdIHw9IE5VTV9UWVBFLlNJR05fTUFTSztcclxuICAgIH1cclxuICAgIGZsdE91dCA9IHRoaXMuc2J5dGVBcnJfMl9Eb3VibGUoY291dCk7XHJcbiAgICByZXR1cm4gZmx0T3V0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJpdF9XaXNlIG1hc2sgOiBMZWF2ZSBsYXN0IGJ5dGUgaW4gbnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIExPX0NIQVIobjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBuICYgMjU1O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJpdF9XaXNlIG1hc2sgOiBMZWF2ZSBieXRlIGJlZm9yZSBsYXN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIEhJX0NIQVIobjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAobiAmIDY1MjgwKSA+PiA4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJpdF9XaXNlIG1hc2sgOiBMZWF2ZSAyIGxhc3QgYnl0ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgTE9fU0hSVChuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDxudW1iZXI+KG4gJiA2NTUzNSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQml0X1dpc2UgbWFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBISV9TSFJUKG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gPG51bWJlcj4oKG4gJiAtNjU1MzYpID4+IDE2KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCaXRfV2lzZSBtYXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHN0YXRpYyBNS19TSFJUKGMxOiBudW1iZXIsIGMyOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHN0ckludDogc3RyaW5nID0gKGMxIDw8IDggfCBjMikudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBOTnVtYmVyLlBhcnNlKHN0ckludCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQml0X1dpc2UgbWFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTUtfTE9ORyhzMTogbnVtYmVyLCBzMjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBsMTogbnVtYmVyID0gPG51bWJlcj5zMTtcclxuICAgIGxldCBsMjogbnVtYmVyID0gPG51bWJlcj5zMjtcclxuICAgIGxldCBzdHJMbmc6IHN0cmluZyA9IChsMSA8PCAxNiB8IGwyKS50b1N0cmluZygpO1xyXG4gICAgcmV0dXJuIE5OdW1iZXIuUGFyc2Uoc3RyTG5nKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGRvdWJsZSBmcm9tIGFycmF5IG9mIGJ5dGVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFycmF5XCI+b2YgYnl0ZXMsIGlubmVyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkb3VibGVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGRvdWJsZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzYnl0ZUFycl8yX0RvdWJsZShhcnJheTogSW50OEFycmF5KTogbnVtYmVyIHtcclxuICAgIGxldCBkYXRhdmlldyA9IG5ldyBEYXRhVmlldyhhcnJheS5idWZmZXIpO1xyXG4gICAgcmV0dXJuIGRhdGF2aWV3LmdldEZsb2F0NjQoMCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGJ5dGUgYXJyYXkgZm9yIGRvdWJsZSAoOCBieXRlcyBpbiBKYXZhKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkb3VibGVcIj50byBnZXQgaXRzIGJ5dGUgcmVwcmVzZW50YXRpb25cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGJ5dGUgYXJyYXlcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGRvdWJsZV8yX3NieXRlQXJyYXkoZDogbnVtYmVyKTogSW50OEFycmF5IHtcclxuICAgIGxldCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XHJcbiAgICBsZXQgZGF0YXZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTtcclxuICAgIGRhdGF2aWV3LnNldEZsb2F0NjQoMCwgZCwgdHJ1ZSk7XHJcbiAgICByZXR1cm4gKG5ldyBJbnQ4QXJyYXkoZGF0YXZpZXcuYnVmZmVyKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGVyZm9ybWluZyBhbiBQb3dlciBvcGVyYXRpb24gb24gdHdvIG1hZ2ljIG51bWJlcnMgVmFsMV5WYWwyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTFcIj4gIHRoZSBmaXJzdCBudW1iZXIgLSBudW1iZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bTJcIj4gIHRoZSBmaXJzdCBudW1iZXIgLSBwb3dlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHJlc3VsdFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGV2YWxfb3BfcHdyKG51bTE6IE5VTV9UWVBFLCBudW0yOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGxldCBkMDogbnVtYmVyO1xyXG4gICAgbGV0IGQxOiBudW1iZXI7XHJcblxyXG4gICAgLy8gbnVsbCB2YWx1ZXNcclxuICAgIGlmIChudW0xID09IG51bGwgfHwgbnVtMiA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAvLyBJZiBzZWNvbmQgb3BlcmF0b3IgaXMgYW4gaW50ZWdlciAod2hpY2ggaXMgc28gaW4gbW9zdCBvZiB0aGUgY2FzZXMpXHJcbiAgICAvLyBhbmQgaXQgaXMgbm90IC12ZSwgdGhlbiBjYWxjdWxhdGUgcG93ZXIgdXNpbmcgc2ltcGxlIG11bHRpcGxpY2F0aW9uXHJcbiAgICAvLyBUaGVyZSBpcyBhIHByb2JsZW0gaW4gZnJvbV9kb3VibGUgYXMgaXQgZG9lc24ndCByZXR1cm4gZXhhY3RcclxuICAgIC8vIHZhbHVlcyAoZm9yIGV4YW1wbGUsIHBhc3NpbmcgMS4wMDI0NDEgaW4gbnVtIHRvIGZyb21fZG91YmxlIHdvdWxkXHJcbiAgICAvLyByZXR1cm4gMS4wMDI0NDA5OTk5OTk5OSkuIGJ0dywgdGhpcyBwcm9ibGVtIGV4aXN0cyBldmVuIGluIFZpc3VhbCBzdHVkaW8nc1xyXG4gICAgLy8gd2F0Y2ggd2luZG93ICh0cnkgdHlwaW5nIDEuMDAyNDQxIGluIE5hbWUgY29sdW1uIG9mIHdhdGNoIHdpbmRvdykuXHJcbiAgICBpZiAobnVtMi5OVU1fSVNfTE9ORygpICYmICFudW0yLm51bV9pc19uZWcoKSkge1xyXG4gICAgICBkMSA9IG51bTIudG9fZG91YmxlKCk7XHJcbiAgICAgIGxldCByZXN1bHQ6IE5VTV9UWVBFID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoMSk7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBkMTsgaSsrKVxyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMubXVsKHJlc3VsdCwgbnVtMSk7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICBkMCA9IG51bTEudG9fZG91YmxlKCk7XHJcbiAgICAgIGQxID0gbnVtMi50b19kb3VibGUoKTtcclxuICAgICAgaWYgKGQwIDwgMC4wICYmIGQxICE9PSA8bnVtYmVyPiBkMSlcclxuICAgICAgICBkMCA9IDAuMDtcclxuICAgICAgLyogcHdyICgwLjAsIDAuMCkgLT4gZXJyb3IgKi9cclxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICAgICAgZWxzZSBpZiAoZDAgIT09IDAuMClcclxuICAgICAgICBkMCA9IE1hdGgucG93KGQwLCBkMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE5VTV9UWVBFLmZyb21fZG91YmxlKGQwKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cmFuc2xhdGUgZG91YmxlIHRvIE5VTV9UWVBFXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRvdWJsZVwiPnRvIHRyYW5zbGF0ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gTlVNX1RZUEUgb2YgdGhlIGRvdWJsZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIGZyb21fZG91YmxlKGQwOiBudW1iZXIpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgYXJyYXk6IEludDhBcnJheSA9IE5VTV9UWVBFLmRvdWJsZV8yX3NieXRlQXJyYXkoZDApO1xyXG4gICAgcmV0dXJuIE5VTV9UWVBFLnN0b3JhZ2VfbWdfNF9mbG9hdCg4LCBhcnJheSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJhbnNsYXRlIGJ5dGUgYXJyYXkgIHRvIE5VTV9UWVBFXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlblwiPm9mIHRoZSBuZWVkZWQgbnVtYmVyKDgpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJieXRlXCI+YXJyYXkgbWFza1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gTlVNX1RZUEUgZm9yIHRoZSBuZWVkZWQgYXR0cmlidXRlc1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgc3RvcmFnZV9tZ180X2Zsb2F0KGxlbjogbnVtYmVyLCBpbnA6IEludDhBcnJheSk6IE5VTV9UWVBFIHtcclxuICAgIGxldCBjaW5wOiBudW1iZXJbXTtcclxuICAgIGxldCBzaWduOiBudW1iZXI7XHJcbiAgICBsZXQgdG1wMTogbnVtYmVyO1xyXG4gICAgbGV0IGV4cDogbnVtYmVyO1xyXG4gICAgbGV0IGJpYXM6IG51bWJlcjtcclxuICAgIGxldCBsb25nMTogbnVtYmVyO1xyXG4gICAgbGV0IGxvbmcyOiBudW1iZXI7XHJcblxyXG4gICAgY2lucCA9IG5ldyBBcnJheTxudW1iZXI+KGlucC5sZW5ndGgpO1xyXG4gICAgZm9yICh0bXAxID0gMDtcclxuICAgICAgICAgdG1wMSA8IGlucC5sZW5ndGg7XHJcbiAgICAgICAgIHRtcDErKylcclxuICAgICAgY2lucFt0bXAxXSA9IE5VTV9UWVBFLnRvVUJ5dGUoaW5wW3RtcDFdKTtcclxuXHJcbiAgICBzaWduID0gY2lucFtsZW4gLSAxXTtcclxuICAgIGlmIChsZW4gPT09IDQpIHtcclxuICAgICAgZXhwID0gPG51bWJlcj4oKGNpbnBbMl0gPj4gNykgfCAoKGNpbnBbM10gJiAweDdGKSA8PCAxKSk7XHJcbiAgICAgIGJpYXMgPSAxNTA7IC8vIDEyNiArICgxICsgMjMpO1xyXG4gICAgICBsb25nMSA9IDA7XHJcbiAgICAgIGxvbmcyID0gTlVNX1RZUEUuTUtfTE9ORyhOVU1fVFlQRS5NS19TSFJUKDAsIGNpbnBbMl0gfCAweDgwKSwgTlVNX1RZUEUuTUtfU0hSVChjaW5wWzFdLCBjaW5wWzBdKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZXhwID0gPG51bWJlcj4oKChjaW5wWzddICYgMHg3RikgPDwgNCkgfCAoY2lucFs2XSA+PiA0KSk7XHJcbiAgICAgIGJpYXMgPSAxMDc1OyAvLyAxMDIyICsgKDEgKyAyMCArIDMyKTtcclxuICAgICAgbG9uZzEgPSBOVU1fVFlQRS5NS19MT05HKE5VTV9UWVBFLk1LX1NIUlQoMCwgKGNpbnBbNl0gJiAweDBGKSB8IDB4MTApLCBOVU1fVFlQRS5NS19TSFJUKGNpbnBbNV0sIGNpbnBbNF0pKTtcclxuICAgICAgbG9uZzIgPSBOVU1fVFlQRS5NS19MT05HKE5VTV9UWVBFLk1LX1NIUlQoY2lucFszXSwgY2lucFsyXSksIE5VTV9UWVBFLk1LX1NIUlQoY2lucFsxXSwgY2lucFswXSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE5VTV9UWVBFLnN0b3JhZ2VfbnVtXzRfZmxkX2ZsdChsb25nMSwgbG9uZzIsIDE4LCBzaWduLCBiaWFzLCBleHApO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSBieXRlIGFycmF5ICB0byBOVU1fVFlQRSAobGlrZSBpbiBNYWdpYyBTb3VjZSBjb2RlKS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc3RhdGljIHN0b3JhZ2VfbnVtXzRfZmxkX2ZsdChsb25nMTogbnVtYmVyLCBsb25nMjogbnVtYmVyLCBkZWM6IG51bWJlciwgc2lnbjogbnVtYmVyLCBiaWFzOiBudW1iZXIsIGV4cHI6IG51bWJlcik6IE5VTV9UWVBFIHtcclxuICAgIGxldCBiYXNlX051bTE2UHdyczogSW50OEFycmF5W10gPSBbXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgMV0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDE2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAyKSwgMiwgNTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDIpLCA0MCwgOTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDMpLCA2LCA1NSwgMzZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDQpLCAxLCA0LCA4NSwgNzZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDQpLCAxNiwgNzcsIDcyLCAxNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgNSksIDIsIDY4LCA0MywgNTQsIDU2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA1KSwgNDIsIDk0LCA5NiwgNzIsIDk2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA2KSwgNiwgODcsIDE5LCA0NywgNjcsIDM2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA3KSwgMSwgOSwgOTUsIDExLCA2MiwgNzcsIDc2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA3KSwgMTcsIDU5LCAyMSwgODYsIDQsIDQ0LCAxNl0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgOCksIDIsIDgxLCA0NywgNDksIDc2LCA3MSwgNiwgNTZdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDgpLCA0NSwgMywgNTksIDk2LCAyNywgMzcsIDQsIDk2XSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyA5KSwgNywgMjAsIDU3LCA1OSwgNDAsIDM3LCA5MiwgNzksIDM2XSlcclxuICAgIF07XHJcblxyXG4gICAgbGV0IGJhc2VfTnVtMlB3cnM6IEludDhBcnJheVtdID0gW1xyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDFdKSxcclxuICAgICAgbmV3IEludDhBcnJheShbTlVNX1RZUEUudG9TQnl0ZShOVU1fVFlQRS5FWFBfQklBUyArIDEpLCAyXSksXHJcbiAgICAgIG5ldyBJbnQ4QXJyYXkoW05VTV9UWVBFLnRvU0J5dGUoTlVNX1RZUEUuRVhQX0JJQVMgKyAxKSwgNF0pLFxyXG4gICAgICBuZXcgSW50OEFycmF5KFtOVU1fVFlQRS50b1NCeXRlKE5VTV9UWVBFLkVYUF9CSUFTICsgMSksIDhdKVxyXG4gICAgXTtcclxuICAgIGxldCB0bXBudW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgb3V0VmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGV4cDogbnVtYmVyID0gPG51bWJlcj5leHByO1xyXG4gICAgaWYgKGV4cCA9PT0gMCkge1xyXG4gICAgICBvdXRWYWwuTlVNX1pFUk8oKTtcclxuICAgICAgcmV0dXJuIG91dFZhbDtcclxuICAgIH1cclxuICAgIG91dFZhbC5udW1fNF91bG9uZyhsb25nMik7XHJcbiAgICBpZiAobG9uZzEgIT09IDApIHtcclxuICAgICAgdG1wbnVtLm51bV80X3Vsb25nKGxvbmcxKTtcclxuICAgICAgdG1wbnVtID0gTlVNX1RZUEUubXVsKHRtcG51bSwgbmV3IE5VTV9UWVBFKGJhc2VfTnVtMTZQd3JzWzhdKSk7XHJcbiAgICAgIG91dFZhbCA9IE5VTV9UWVBFLmFkZCh0bXBudW0sIG91dFZhbCk7XHJcbiAgICB9XHJcbiAgICBleHAgPSA8bnVtYmVyPihleHAgLSBiaWFzKTtcclxuICAgIGlmIChleHAgPCAwKSB7XHJcbiAgICAgIGV4cCA9IC1leHA7XHJcbiAgICAgIHdoaWxlIChleHAgPj0gNjApIHtcclxuICAgICAgICBvdXRWYWwgPSBOVU1fVFlQRS5kaXYob3V0VmFsLCBuZXcgTlVNX1RZUEUoYmFzZV9OdW0xNlB3cnNbMTRdKSk7XHJcbiAgICAgICAgZXhwIC09IDU2O1xyXG4gICAgICB9XHJcbiAgICAgIHRtcG51bSA9IE5VTV9UWVBFLm11bChuZXcgTlVNX1RZUEUoYmFzZV9OdW0xNlB3cnNbZXhwID4+IDJdKSxcclxuICAgICAgICBuZXcgTlVNX1RZUEUoYmFzZV9OdW0yUHdyc1tleHAgJiAzXSkpO1xyXG4gICAgICBvdXRWYWwgPSBOVU1fVFlQRS5kaXYob3V0VmFsLCB0bXBudW0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChleHAgPj0gNjApIHtcclxuICAgICAgICBvdXRWYWwuTlVNX1pFUk8oKTtcclxuICAgICAgICByZXR1cm4gb3V0VmFsO1xyXG4gICAgICB9XHJcbiAgICAgIHRtcG51bSA9IE5VTV9UWVBFLm11bChuZXcgTlVNX1RZUEUoYmFzZV9OdW0xNlB3cnNbZXhwID4+IDJdKSxcclxuICAgICAgICBuZXcgTlVNX1RZUEUoYmFzZV9OdW0yUHdyc1tleHAgJiAzXSkpO1xyXG4gICAgICBvdXRWYWwgPSBOVU1fVFlQRS5tdWwob3V0VmFsLCB0bXBudW0pO1xyXG4gICAgfVxyXG4gICAgaWYgKChzaWduICYgMHg4MCkgIT09IDApXHJcbiAgICAgIG91dFZhbC5fZGF0YVswXSA9IG91dFZhbC5fZGF0YVswXSB8IE5VTV9UWVBFLlNJR05fTUFTSztcclxuICAgIG91dFZhbC5yb3VuZChkZWMpO1xyXG4gICAgcmV0dXJuIG91dFZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNYXRoZW1hdGljYWwgZnVuY3Rpb25zIGltcGxlbWVudGF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgZXZhbF9vcF9sb2codmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIGxldCByZXNWYWw6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgZDogbnVtYmVyID0gdmFsMS50b19kb3VibGUoKTtcclxuXHJcbiAgICBpZiAoZCA+IDAuMClcclxuICAgICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC5sb2coZCkpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXNWYWwuTlVNX1pFUk8oKTtcclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXZhbF9vcF9leHAodmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRTtcclxuXHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGxldCBkOiBudW1iZXIgPSB2YWwxLnRvX2RvdWJsZSgpO1xyXG4gICAgcmVzVmFsID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoTWF0aC5leHAoZCkpO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX2Ficyh2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGlmICh2YWwxID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIGxldCByZXNWYWw6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKHZhbDEpO1xyXG4gICAgcmVzVmFsLm51bV9hYnMoKTtcclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXZhbF9vcF9zaW4odmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcbiAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShNYXRoLnNpbihkKSk7XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV2YWxfb3BfY29zKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHJlc1ZhbDogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcbiAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShNYXRoLmNvcyhkKSk7XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV2YWxfb3BfdGFuKHZhbDE6IE5VTV9UWVBFKTogTlVNX1RZUEUge1xyXG4gICAgaWYgKHZhbDEgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IGQ6IG51bWJlciA9IHZhbDEudG9fZG91YmxlKCk7XHJcbiAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShNYXRoLnRhbihkKSk7XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV2YWxfb3BfYXNpbih2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGlmICh2YWwxID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIGxldCByZXNWYWw6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgZDogbnVtYmVyID0gdmFsMS50b19kb3VibGUoKTtcclxuICAgIGlmIChkIDw9IDEuMCAmJiBkID49IC0xLjApXHJcbiAgICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKE1hdGguYXNpbihkKSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKDAuMCk7XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV2YWxfb3BfYWNvcyh2YWwxOiBOVU1fVFlQRSk6IE5VTV9UWVBFIHtcclxuICAgIGlmICh2YWwxID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIGxldCByZXNWYWw6IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgZDogbnVtYmVyID0gdmFsMS50b19kb3VibGUoKTtcclxuXHJcbiAgICBpZiAoZCA8PSAxLjAgJiYgZCA+PSAtMS4wKVxyXG4gICAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZShNYXRoLmFjb3MoZCkpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXNWYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZSgwLjApO1xyXG4gICAgcmV0dXJuIHJlc1ZhbDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBldmFsX29wX2F0YW4odmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzVmFsOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICBsZXQgZDogbnVtYmVyID0gdmFsMS50b19kb3VibGUoKTtcclxuICAgIHJlc1ZhbCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKE1hdGguYXRhbihkKSk7XHJcbiAgICByZXR1cm4gcmVzVmFsO1xyXG4gIH1cclxuXHJcbiAgbnVtX2FicygpOiB2b2lkIHtcclxuICAgIGxldCBsOiBudW1iZXI7XHJcbiAgICBpZiAodGhpcy5OVU1fSVNfTE9ORygpKSB7XHJcbiAgICAgIGwgPSB0aGlzLk5VTV9MT05HKCk7XHJcbiAgICAgIGlmIChsIDwgMClcclxuICAgICAgICBsID0gLWw7XHJcbiAgICAgIHRoaXMuTlVNXzRfTE9ORyhsKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGF0YVswXSAmPSBOVU1fVFlQRS50b1NCeXRlKH5OVU1fVFlQRS5TSUdOX01BU0spO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJhbmRvbWFsIE1hdGggZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBldmFsX29wX3JhbmQodmFsMTogTlVNX1RZUEUpOiBOVU1fVFlQRSB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgbGV0IHJhbmRfaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBSYW5kb21pemVyLmdldF9pbml0aWFsaXplZCgpO1xyXG4gICAgbGV0IHJhbmRfbW9kOiBOVU1fVFlQRTtcclxuICAgIGxldCByYW5kX211bDogTlVNX1RZUEU7XHJcbiAgICBsZXQgcmFuZF9zZWVkOiBOVU1fVFlQRTtcclxuXHJcbiAgICBsZXQgdG1wX251bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuXHJcbiAgICBpZiAoIXJhbmRfaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgUmFuZG9taXplci5zZXRfaW5pdGlhbGl6ZWQoKTsgLy8gc2V0IHRvIHRydWVcclxuICAgICAgcmFuZF9tb2QgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgcmFuZF9tdWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgcmFuZF9zZWVkID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgIHJhbmRfbW9kLm51bV80X2Ffc3RkKFwiMTAwMDAwMDA3XCIpO1xyXG4gICAgICByYW5kX211bC5udW1fNF9hX3N0ZChcIjc1MDAwMDA3XCIpO1xyXG4gICAgICByYW5kX3NlZWQubnVtXzRfYV9zdGQoXCIxMjM0NTY3OFwiKTtcclxuXHJcbiAgICAgIFJhbmRvbWl6ZXIuc2V0X21vZChyYW5kX21vZC50b19kb3VibGUoKSk7XHJcbiAgICAgIFJhbmRvbWl6ZXIuc2V0X211bChyYW5kX211bC50b19kb3VibGUoKSk7XHJcbiAgICAgIFJhbmRvbWl6ZXIuc2V0X3NlZWQocmFuZF9zZWVkLnRvX2RvdWJsZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgIHJhbmRfbW9kID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoUmFuZG9taXplci5nZXRfbW9kKCkpO1xyXG4gICAgICByYW5kX211bCA9IE5VTV9UWVBFLmZyb21fZG91YmxlKFJhbmRvbWl6ZXIuZ2V0X211bCgpKTtcclxuICAgICAgcmFuZF9zZWVkID0gTlVNX1RZUEUuZnJvbV9kb3VibGUoUmFuZG9taXplci5nZXRfc2VlZCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgaWYgKCF2YWwxLm51bV9pc196ZXJvKCkpIHtcclxuICAgICAgaWYgKHZhbDEubnVtX2lzX25lZygpKVxyXG4gICAgICAgIHJhbmRfc2VlZC5OVU1fNF9MT05HKE5VTV9UWVBFLmhhc2hfcmFuZCgpKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJhbmRfc2VlZCA9IG5ldyBOVU1fVFlQRSh2YWwxKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgaWYgKHJhbmRfc2VlZC5udW1faXNfbmVnKCkpIHtcclxuICAgICAgICB0bXBfbnVtLk5VTV80X0xPTkcoLTEpO1xyXG4gICAgICAgIHJhbmRfc2VlZCA9IE5VTV9UWVBFLm11bChyYW5kX3NlZWQsIHRtcF9udW0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmFuZF9zZWVkID0gTlVNX1RZUEUubXVsKHJhbmRfc2VlZCwgcmFuZF9tdWwpO1xyXG4gICAgcmFuZF9zZWVkID0gTlVNX1RZUEUubW9kKHJhbmRfc2VlZCwgcmFuZF9tb2QpO1xyXG4gICAgdG1wX251bSA9IE5VTV9UWVBFLmRpdihyYW5kX3NlZWQsIHJhbmRfbW9kKTtcclxuICAgIC8vIHJlc2V0IGdsb2JhbHMgdmFyaWFibGVzXHJcbiAgICBSYW5kb21pemVyLnNldF9tb2QocmFuZF9tb2QudG9fZG91YmxlKCkpO1xyXG4gICAgUmFuZG9taXplci5zZXRfbXVsKHJhbmRfbXVsLnRvX2RvdWJsZSgpKTtcclxuICAgIFJhbmRvbWl6ZXIuc2V0X3NlZWQocmFuZF9zZWVkLnRvX2RvdWJsZSgpKTtcclxuICAgIHJldHVybiB0bXBfbnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhIHJhbmRvbSB2YWx1ZSB0byB1c2UgYXMgdGhlIGN0bCBlbmNyaXB0aW9uICBrZXlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc3RhdGljIGhhc2hfcmFuZCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICgobmV3IERhdGUoKS5nZXRNaWxsaXNlY29uZHMoKSkgXiBNYXRoLnJhbmRvbSgpICogMTIzNDU2NzgpO1xyXG4gICAgLy8gbGV0IGFycmF5OiBudW1iZXJbXSA9IG5ldyBBcnJheTxudW1iZXI+KDEwMCk7XHJcbiAgICAvLyBmb3IgKGxldCBfYWk6IG51bWJlciA9IDA7IF9haSA8IGFycmF5Lmxlbmd0aDsgKytfYWkpXHJcbiAgICAvLyAgIGFycmF5W19haV0gPSAwO1xyXG4gICAgLy8gbmV3IFJhbmRvbSgpLk5leHRCeXRlcyhhcnJheSk7XHJcbiAgICAvLyByZXR1cm4gPG51bWJlcj4oTWlzYy5nZXRTeXN0ZW1NaWxsaXNlY29uZHMoKSBeIE5VTV9UWVBFLmhhc2hfc3RyX25ldyhhcnJheSkpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE9wZXJEYXRhIHtcclxuICBOVU1fRGlmZl86IG51bWJlciA9IDA7XHJcbiAgTlVNX0V4cDFfOiBudW1iZXIgPSAwO1xyXG4gIE5VTV9FeHAyXzogbnVtYmVyID0gMDtcclxufVxyXG5cclxuIl19
|