@magic-xpa/utils 4.801.0-dev481.309 → 4.801.0-dev481.312

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.
@@ -396,7 +396,6 @@ export class StrUtil {
396
396
  static SearchAndReplaceWildChars(buf, len, filler) {
397
397
  buf = NString.PadRight(buf, len);
398
398
  let escChar = false;
399
- let stopSearch = false;
400
399
  let tmpBuf = new StringBuilder(len);
401
400
  for (let i = 0; i < len; i = i + 1) {
402
401
  switch (buf[i]) {
@@ -415,7 +414,6 @@ export class StrUtil {
415
414
  tmpBuf.Append(buf[i]);
416
415
  else {
417
416
  tmpBuf.Append(filler, len - tmpBuf.Length);
418
- stopSearch = true;
419
417
  }
420
418
  escChar = false;
421
419
  break;
@@ -452,4 +450,4 @@ export class StrUtil {
452
450
  }
453
451
  }
454
452
  StrUtil._paddingSpaces = null;
455
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9TdHJVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBTyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQy9GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE1BQU0sY0FBYyxHQUFXLFFBQVEsQ0FBQztBQUN4QyxNQUFNLFVBQVUsR0FBVyxRQUFRLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQVcsUUFBUSxDQUFDO0FBQ3JDLE1BQU0sVUFBVSxHQUFXLENBQUMsQ0FBQztBQUM3QixNQUFNLG1CQUFtQixHQUFXLFFBQVEsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQVcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBVyxDQUFDLENBQUM7QUFDcEMsTUFBTSxVQUFVLEdBQVcsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBVyxDQUFDLENBQUM7QUFFbkMsTUFBTSxPQUFPLE9BQU87SUFJbEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUN0QyxJQUFJLE1BQWMsQ0FBQztRQUNuQixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDWCxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUNwQixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osT0FBTyxNQUFNLENBQUM7YUFDZjtZQUNELE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtnQkFDdEMsR0FBRyxH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bUJBQW1CLENBQUMsQ0FBQztZQUVwRCxLQUFLLElBQUksQ0FBQyxHQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFDN0M7Z0JBQ0UsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLEVBQUUsQ0FBQzthQUNMO1NBQ0Y7UUFJRCxPQUFPLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JDLENBQUM7O0FBNXJCYyxzQkFBYyxHQUFXLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdCwgTlN0cmluZywgUmVmUGFyYW0sIFN0cmluZ0J1aWxkZXIsIGlzTnVsbE9yVW5kZWZpbmVkfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtVdGlsU3RyQnl0ZU1vZGV9IGZyb20gXCIuL1V0aWxTdHJCeXRlTW9kZVwiO1xyXG5pbXBvcnQge1J0Zn0gZnJvbSBcIi4vUnRmXCI7XHJcblxyXG5jb25zdCBIVE1MX0JBQ0tTTEFTSDogc3RyaW5nID0gXCImIzA5MjtcIjtcclxuY29uc3QgSFRNTF9DT01NQTogc3RyaW5nID0gXCImIzA0NDtcIjtcclxuY29uc3QgSFRNTF9IWVBIRU46IHN0cmluZyA9IFwiJiMwNDU7XCI7XHJcbmNvbnN0IFNUUl8yX0hUTUw6IG51bWJlciA9IDE7XHJcbmNvbnN0IFRBU0tfUEFUSF9ERUxJTUlURVI6IHN0cmluZyA9IFwiQEB8fEBAXCI7XHJcbmV4cG9ydCBjb25zdCBTRVFfMl9IVE1MOiBudW1iZXIgPSAyO1xyXG5leHBvcnQgY29uc3QgSFRNTF8yX1NUUjogbnVtYmVyID0gMztcclxuY29uc3QgSFRNTF8yX1NFUTogbnVtYmVyID0gNDtcclxuZXhwb3J0IGNvbnN0IFNFUV8yX1NUUjogbnVtYmVyID0gNTtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdHJVdGlsIHtcclxuICBwcml2YXRlIHN0YXRpYyBfcGFkZGluZ1NwYWNlczogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiB0cmltIHRoZSBlbmQgb2YgdGhlIHN0cmluZzwvc3VtbWFyeT5cclxuICBzdGF0aWMgbWVtX3RyaW0oc3RyOiBzdHJpbmcsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCByZXN1bHQ6IG51bWJlcjtcclxuICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgIGlmIChsZW4gPiBzdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gLTE7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgICB3aGlsZSAobGVuID4gMCAmJiBzdHJbbGVuIC0gMV0gPT09ICcgJykge1xyXG4gICAgICAgIGxlbiA9IGxlbiAtIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc3VsdCA9IGxlbjtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbWVtbW92ZShkZXN0OiBzdHJpbmcsIGRlc3RDb3VudDogbnVtYmVyLCBzcmM6IHN0cmluZywgc3JjQ291bnQ6IG51bWJlciwgbGVuOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHN0cmluZ0J1aWxkZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihkZXN0Lmxlbmd0aCArIGxlbik7XHJcbiAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpICYmIGRlc3QubGVuZ3RoIDwgZGVzdENvdW50KSB7XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKE5TdHJpbmcuRnJvbUNoYXIoJyAnLCBkZXN0Q291bnQpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChkZXN0LnN1YnN0cigwLCBkZXN0Q291bnQpKTtcclxuICAgIH1cclxuICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHNyYy5zdWJzdHIoc3JjQ291bnQsIGxlbikpO1xyXG5cclxuICAgIGlmIChzdHJpbmdCdWlsZGVyLkxlbmd0aCA8IGRlc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoZGVzdC5zdWJzdHIoc3RyaW5nQnVpbGRlci5MZW5ndGgpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbWVtY3B5KGRlc3Q6IHN0cmluZywgZGVzdENvdW50OiBudW1iZXIsIHNyYzogc3RyaW5nLCBzY3JDb3VudDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBtZW1jcHkoZGVzdDogc3RyaW5nW10sIGRlc3RDb3VudDogbnVtYmVyLCBzcmM6IHN0cmluZ1tdLCBzcmNDb3VudDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogdm9pZDtcclxuICBzdGF0aWMgbWVtY3B5KGRlc3Q6IGFueSwgZGVzdENvdW50OiBudW1iZXIsIHNyYzogYW55LCBzY3JDb3VudE9yU3JjQ291bnQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNSAmJiAoZGVzdCA9PT0gbnVsbCB8fCBkZXN0LmNvbnN0cnVjdG9yID09PSBTdHJpbmcpICYmIChkZXN0Q291bnQgPT09IG51bGwgfHwgZGVzdENvdW50LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChzcmMgPT09IG51bGwgfHwgc3JjLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpICYmIChzY3JDb3VudE9yU3JjQ291bnQgPT09IG51bGwgfHwgc2NyQ291bnRPclNyY0NvdW50LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChjb3VudCA9PT0gbnVsbCB8fCBjb3VudC5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICByZXR1cm4gU3RyVXRpbC5tZW1jcHlfMChkZXN0LCBkZXN0Q291bnQsIHNyYywgc2NyQ291bnRPclNyY0NvdW50LCBjb3VudCk7XHJcbiAgICB9XHJcbiAgICBTdHJVdGlsLm1lbWNweV8xKGRlc3QsIGRlc3RDb3VudCwgc3JjLCBzY3JDb3VudE9yU3JjQ291bnQsIGNvdW50KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb3B5IHBhcnQgb2Ygc3RyaW5nIGludG8gYW5vdGhlciBzdHJpbmcsIGxpa2UgbWVtY3B5IG9mIEMsIGJ1dCA0IHN0cmluZyBvbmx5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlc3RcIj5zdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGVzdENvdW50XCI+b2YgY291bnRlciBzdGFydCBmcm9tIGluIGRlc3RpZ25hdGlvbiBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3JjXCI+c3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNjckNvdW50XCI+b2YgY291bnRlciBzdGFydCBmcm9tIGluIHNvdXJjZSBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY291bnRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbmV3IHZhbHVlIG9mIGRlc3RpZ25hdGlvbiBzdHJpbmc8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWVtY3B5XzAoZGVzdDogc3RyaW5nLCBkZXN0Q291bnQ6IG51bWJlciwgc3JjOiBzdHJpbmcsIHNjckNvdW50OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHN0cmluZ0J1aWxkZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihkZXN0LnN1YnN0cigwLCBkZXN0Q291bnQpKTtcclxuXHJcbiAgICBpZiAoc2NyQ291bnQgKyBjb3VudCA8IHNyYy5sZW5ndGgpIHtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3JjLnN1YnN0cihzY3JDb3VudCwgY291bnQgLSBzY3JDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHNyYy5zdWJzdHIoc2NyQ291bnQpKTtcclxuICAgIH1cclxuICAgIGxldCBzaXplOiBudW1iZXIgPSBkZXN0Lmxlbmd0aCAtIGRlc3RDb3VudCAtIGNvdW50O1xyXG4gICAgaWYgKHNpemUgPiAwKSB7XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKGRlc3Quc3Vic3RyKGRlc3RDb3VudCArIGNvdW50KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWVtY3B5XzEoZGVzdDogc3RyaW5nW10sIGRlc3RDb3VudDogbnVtYmVyLCBzcmM6IHN0cmluZ1tdLCBzcmNDb3VudDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB3aGlsZSAoY291bnQgPiAwICYmIGRlc3RDb3VudCA8IGRlc3QubGVuZ3RoICYmIHNyY0NvdW50IDwgc3JjLmxlbmd0aCkge1xyXG4gICAgICBkZXN0W2Rlc3RDb3VudCsrXSA9IHNyY1tzcmNDb3VudCsrXTtcclxuICAgICAgY291bnQgPSBjb3VudCAtIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbWVtc2V0KGRlc3Q6IHN0cmluZywgZGVzdENvdW50OiBudW1iZXIsIGluVmFsOiBzdHJpbmcsIGNvdW50ZXI6IG51bWJlcik6IHN0cmluZztcclxuICBzdGF0aWMgbWVtc2V0KGRlc3Q6IHN0cmluZ1tdLCBkZXN0Q291bnQ6IG51bWJlciwgaW5WYWw6IHN0cmluZywgY291bnRlcjogbnVtYmVyKTogdm9pZDtcclxuICBzdGF0aWMgbWVtc2V0KGRlc3Q6IGFueSwgZGVzdENvdW50OiBudW1iZXIsIGluVmFsOiBzdHJpbmcsIGNvdW50ZXI6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiAoZGVzdCA9PT0gbnVsbCB8fCBkZXN0LmNvbnN0cnVjdG9yID09PSBTdHJpbmcpICYmIChkZXN0Q291bnQgPT09IG51bGwgfHwgZGVzdENvdW50LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChpblZhbCA9PT0gbnVsbCB8fCBpblZhbC5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAoY291bnRlciA9PT0gbnVsbCB8fCBjb3VudGVyLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiBTdHJVdGlsLm1lbXNldF8wKGRlc3QsIGRlc3RDb3VudCwgaW5WYWwsIGNvdW50ZXIpO1xyXG4gICAgfVxyXG4gICAgU3RyVXRpbC5tZW1zZXRfMShkZXN0LCBkZXN0Q291bnQsIGluVmFsLCBjb3VudGVyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbnNlcnQgdG8gc3RyaW5nIGNoYXJzIG4gdGltZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGVzdFwiPnN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZXN0Q291bnRcIj5vZiBjb3VudGVyIHN0YXJ0IGZyb20gaW4gZGVzdGlnbmF0aW9uIHN0cmluZyB0byBzdGFydCBpbnNlcnRpb24gb2YgY2hhciBmcm9tPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImluVmFsXCI+MiBpbnNlcnQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY291bnRlclwiPi0gbnVtYmVyIG9mIHRpbWVzIHRvIGluc2VydCB0aGUgY2hhcjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBuZXcgdmFsdWUgb2YgZGVzdGlnbmF0aW9uIHN0cmluZzwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBtZW1zZXRfMChkZXN0OiBzdHJpbmcsIGRlc3RDb3VudDogbnVtYmVyLCBpblZhbDogc3RyaW5nLCBjb3VudGVyOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZpcnN0OiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoZGVzdC5zdWJzdHIoMCwgZGVzdENvdW50KSk7XHJcbiAgICB3aGlsZSAoY291bnRlciA+IDApIHtcclxuICAgICAgZmlyc3QuQXBwZW5kKGluVmFsKTtcclxuICAgICAgY291bnRlciA9IGNvdW50ZXIgLSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaXJzdC5MZW5ndGggPCBkZXN0Lmxlbmd0aCkge1xyXG4gICAgICBmaXJzdC5BcHBlbmQoZGVzdC5zdWJzdHIoZmlyc3QuTGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlyc3QuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG1lbXNldF8xKGRlc3Q6IHN0cmluZ1tdLCBkZXN0Q291bnQ6IG51bWJlciwgaW5WYWw6IHN0cmluZywgY291bnRlcjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB3aGlsZSAoY291bnRlciA+IDAgJiYgZGVzdENvdW50IDwgZGVzdC5sZW5ndGgpIHtcclxuICAgICAgZGVzdFtkZXN0Q291bnQrK10gPSBpblZhbDtcclxuICAgICAgY291bnRlciA9IGNvdW50ZXIgLSAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHN0cnN0cihzdHI6IHN0cmluZywgc3Vic3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZyb206IG51bWJlciA9IHN0ci5pbmRleE9mKHN1YnN0cik7XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBpZiAoZnJvbSA8IDApIHtcclxuICAgICAgcmVzdWx0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXN1bHQgPSBzdHIuc3Vic3RyKGZyb20pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV2ZXJzZXMgc3RyaW5nIHZhbHVlcy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRleHRcIj5UaGUgU3RyaW5nQnVpbGRlciBvYmplY3QgY29udGFpbmluZyB0aGUgc3RyaW5nIHRvIGJlIHJldmVyc2VkLjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlRoZSByZXZlcnNlZCBzdHJpbmcgY29udGFpbmVkIGluIGEgU3RyaW5nQnVpbGRlciBvYmplY3QuPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBSZXZlcnNlU3RyaW5nKHRleHQ6IFN0cmluZ0J1aWxkZXIpOiBTdHJpbmdCdWlsZGVyIHtcclxuICAgIC8vIFRPRE86IHVzZSBzdHJpbmcuUmV2ZXJzZSgpXHJcbiAgICBsZXQgYXJyYXk6IHN0cmluZ1tdID0gTlN0cmluZy5Ub0NoYXJBcnJheSh0ZXh0LlRvU3RyaW5nKCkpO1xyXG4gICAgYXJyYXkucmV2ZXJzZSgpO1xyXG4gICAgcmV0dXJuIG5ldyBTdHJpbmdCdWlsZGVyKE5TdHJpbmcuRnJvbUNoYXJzKGFycmF5KSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlbW92ZSBzcGFjZXMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzdHJpbmc8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+dGhlIHN0cmluZyB0byB0cmltXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgc3RhdGljIHJ0cmltKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBTdHJVdGlsLnJ0cmltV2l0aE51bGwoc3RyLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlbW92ZSBzcGFjZXMgYW5kL29yIE51bGwgY2hhcnMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzdHJpbmc8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+dGhlIHN0cmluZyB0byB0cmltXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidHJpbU51bGxDaGFyc1wiPldoZXRoZXIgdG8gcmVtb3ZlIE5VTEwgY2hhcmFjdGVycyBvciBub3RcclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgcnRyaW1XaXRoTnVsbChzdHI6IHN0cmluZywgdHJpbU51bGxDaGFyczogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBpZiAodHlwZW9mIHN0ciA9PT0gXCJ1bmRlZmluZWRcIiB8fCBzdHIgPT09IG51bGwgfHwgc3RyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXN1bHQgPSBzdHI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGlkeDogbnVtYmVyID0gc3RyLmxlbmd0aCAtIDE7XHJcbiAgICAgIGlmICh0cmltTnVsbENoYXJzKSB7XHJcblxyXG4gICAgICAgIHdoaWxlIChpZHggPj0gMCAmJiAoc3RyW2lkeF0gPT09ICcgJyB8fCBzdHJbaWR4XSA9PT0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKS8qJ1x1MDAwMCcqLykpIHtcclxuICAgICAgICAgIGlkeCA9IGlkeCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHdoaWxlIChpZHggPj0gMCAmJiBzdHJbaWR4XSA9PT0gJyAnKSB7XHJcbiAgICAgICAgICBpZHggPSBpZHggLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZHggPSBpZHggKyAxO1xyXG5cclxuICAgICAgaWYgKGlkeCA8IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICByZXN1bHQgPSBzdHIuc3Vic3RyKDAsIGlkeCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZW1vdmUgc3BhY2VzIGZyb20gdGhlIGxlZnQgc2lkZSBvZiBzdHJpbmc8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+dGhlIHN0cmluZyB0byB0cmltXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgc3RhdGljIGx0cmltKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBsZW5ndGg6IG51bWJlciA9IHN0ci5sZW5ndGg7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMDtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmIChzdHIgPT09IG51bGwgfHwgbGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJlc3VsdCA9IHN0cjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiBzdHJbaV0gPT09ICcgJy8qJyAnKi8pIHtcclxuICAgICAgICBpID0gaSArIDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoaSk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5UaGlzIGZ1bmN0aW9uIGZvciBEZWxldGluZyBTdHJpbmcgZnJvbSBlbmQgJiBzdGFydCBvZiBpbnB1dFxyXG4gIC8vLyBTdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPlN0cmluZyAsIHdoaWNoIGNhbiBpbmNsdWRlIHN0clRvRGVsZXRlIHNwYWNlcyBvbiBpbnB1dFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clRvRGVsZXRlXCI+bmVlZCBkZWxldGUgdGhpcyBTdHJpbmcgZnJvbSBzdGFydC9lbmQgb2Ygc3RyLlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gU3RyaW5nIHdpdGhvdXQgc3RyVG9EZWxldGUgb24gZW5kICYgc3RhcnQsXHJcbiAgLy8vIG9yICdudWxsJyBpZiBTdGluZyBoYXNuJ3Qgbm90ICBjaGFyYWN0ZXJzIGluc2lkZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIERlbGV0ZVN0cmluZ3NGcm9tRW5kcyhzdHI6IHN0cmluZywgc3RyVG9EZWxldGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoc3RyLnN0YXJ0c1dpdGgoc3RyVG9EZWxldGUpKSB7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHIoc3RyVG9EZWxldGUubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIGlmIChzdHIuZW5kc1dpdGgoc3RyVG9EZWxldGUpKSB7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgc3RyLmxlbmd0aCAtIHN0clRvRGVsZXRlLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXN1bHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IHN0cjtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHBhZCBhIHN0cmluZyB3aXRoIHRyYWlsaW5nIHNwYWNlcyB1cCB0byB0aGUgZ2l2ZW4gbGVuZ3RoPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPnRoZSBzdHJpbmcgdG8gcGFkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGVuXCI+dGhlIGV4cGVjdGVkIGxlbmd0aCBhZnRlciBwYWRkaW5nXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgc3RhdGljIHBhZFN0cihzdHI6IHN0cmluZywgbGVuOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHBhZExlbjogbnVtYmVyID0gbGVuIC0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICBpZiAocGFkTGVuID4gMCkge1xyXG4gICAgICBpZiAoU3RyVXRpbC5fcGFkZGluZ1NwYWNlcyA9PT0gbnVsbCB8fCBTdHJVdGlsLl9wYWRkaW5nU3BhY2VzLmxlbmd0aCA8IHBhZExlbikge1xyXG4gICAgICAgIFN0clV0aWwuX3BhZGRpbmdTcGFjZXMgPSBOU3RyaW5nLkZyb21DaGFyKCcgJywgcGFkTGVuKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGxlbik7XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHN0cik7XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKFN0clV0aWwuX3BhZGRpbmdTcGFjZXMsIDAsIHBhZExlbik7XHJcbiAgICAgIHN0ciA9IHN0cmluZ0J1aWxkZXIuVG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHRoaXMgbWV0aG9kIHdpbGwgc2VydmUgYXMgYSBzdHJpbmcgdG9rZW5pemVyIGluc3RlYWQgb2YgdXNpbmcgdGhlIGMjIHNwbGl0IG1ldGhvZFxyXG4gIC8vLyBzaW5jZSB0aGVyZSBhcmUgZGlmZnJlbmNlcyBidHdlZW4gamF2YSB0b2tlbml6ZXIgYW5kIGMjIHNwbGl0XHJcbiAgLy8vIHRoZSBpbXBsaW1lbnRhdGlvbiBnaXZlbiBieSB0aGUgY29udmVyc2lvbiB0b29sIGlzIG5vdCBTdWZmaWNpZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzb3VyY2VcIj4tIHRoZSBzb3VyY2Ugc3RyaW5nIHRvIGJlIGNvbnZlcnRlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRlbGltXCI+LSB0aGUgc3RyaW5nIG9mIGRlbGltaXRlcnMgdXNlZCB0byBzcGxpdCB0aGUgc3RyaW5nIChlYWNoIGNoYXJhY3RlciBpbiB0aGUgU3RyaW5nIGlzIGEgZGVsaW1pdGVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBhcnJheSBvZiB0b2tlbiBhY2NvcmRpbmcgd2hpY2ggaXMgdGhlIHNhbWUgYXMgc3RyaW5nIHRva2VuaXplciBpbiBqYXZhXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgdG9rZW5pemUoc291cmNlOiBzdHJpbmcsIGRlbGltOiBzdHJpbmd8UmVnRXhwKTogc3RyaW5nW10ge1xyXG4gICAgLy8gSXQgaXMgbWVudGlvbmVkIGluIHRoZSBjb21tZW50IHRoYXQgd2Ugc2hvdWxkIG5vdCB1c2UgU3RyaW5nLlNwbGl0KClcclxuICAgIC8vIGJlY2F1c2UgaXRzIGJlaGF2aW9yIGlzIGRpZmZlcmVudCB0aGFuIEphdmEncyB0b2tlbml6ZXIuXHJcbiAgICAvLyBTbywgd2Ugd2VyZSBzdXBwb3NlIHRvIHVzZSBvdXIgb3duIGltcGxlbWVudGF0aW9uICh0aGUgY29tbWVudGVkIGNvZGUgYmVsb3cpLlxyXG4gICAgLy8gQnV0IGFsbCB0aGVzZSB5ZWFycywgd2Ugd2VyZSBjYWxsaW5nIFhtbFBhcnNlci5nZXRUb2tlbigpIHdoaWNoIHdhcyBhY3R1YWxseVxyXG4gICAgLy8gdXNpbmcgU3RyaW5nLlNwbGl0KCkuIEFuZCB3ZSBkaWRuJ3QgZmFjZSBhbnkgcHJvYmxlbS5cclxuICAgIC8vIFNvLCBpdCBzZWVtcyB0aGF0IHdlIGRvIG5vdCBoYXZlIHByb2JsZW0gaW4gdXNpbmcgU3RyaW5nLlNwbGl0KCkuXHJcbiAgICAvLyBCdXQgbm93LCB3ZSBjYW4gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2UgaGVyZS4uLlxyXG4gICAgLy8gWG1sUGFyc2VyLmdldFRva2VucygpIHdhcyBnZXR0aW5nIGEgU3RyaW5nW10gdXNpbmcgU3RyaW5nLlNwbGl0KCkuXHJcbiAgICAvLyBJdCB3YXMgdGhlbiBjcmVhdGluZyBhIExpc3Q8U3RyaW5nPiBmcm9tIHRoaXMgU3RyaW5nW10gYW5kIHdhcyByZXR1cm5pbmcgaXQgdG9cclxuICAgIC8vIHRva2VuaXplKCkuXHJcbiAgICAvLyB0b2tlbml6ZSgpIHdhcyBhZ2FpbiBjb252ZXJ0aW5nIHRoaXMgTGlzdDxTdHJpbmc+IGJhY2sgdG8gU3RyaW5nW10uXHJcbiAgICAvLyBTbyB3aHkgbm90IGNhbGwgU3RyaW5nLlNwbGl0KCkgZGlyZWN0bHk/XHJcbiAgICByZXR1cm4gc291cmNlLnNwbGl0KGRlbGltKTtcclxuICAgIC8qXHJcblN0cmluZyBbXSB0b2tlbnMgPSBudWxsO1xyXG5cclxuY2hhciBbXSBkZWxpbUFycnkgPSBkZWxpbS50b0NoYXJBcnJheSgpO1xyXG5cclxuLy9zaW5jZSBqYXZhIGRpc2NhcmRzIGRlbGltaXRlcnMgZnJvbSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc3RyaW5nIGFuZCBjIyBkb2VzIG5vdFxyXG4vL3dlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gbWFudWFsbHlcclxuLy8gICAgICAgc291cmNlID0gc291cmNlLlRyaW1FbmQoZGVsaW1BcnJ5KTtcclxuLy8gICAgIHNvdXJjZSA9IHNvdXJjZS5UcmltU3RhcnQoZGVsaW1BcnJ5KTtcclxuc291cmNlID0gc291cmNlLnRyaW0oKTtcclxuXHJcbi8vbm93IHRoYXQgd2UgaGF2ZSByZW1vdmUgc3RhcnRpbmcgYW5kIGVuZGluZyBkZWxpbWl0ZXJzIHdlIGNhbiBzcGxpdFxyXG50b2tlbnMgPSBzb3VyY2UuU3BsaXQoZGVsaW1BcnJ5KTtcclxuXHJcbi8qXHJcbiogb25seSBvbmUgcHJvYmxlbTogaWYgd2UgaGF2ZSB0d28gU3Vic2VxdWVudCBkZWxpbWl0ZXJzIGZvciBleGFtcGxlIDpcclxuKiB0aGUgZGVsaW1pdGVyIGlzICc7JyBhbmQgdGhlIHN0cmluZyBpczogXCJmaXJzdDs7c2Vjb25kO3RoaXJkXCJcclxuKiB0aGVuIGluIGphdmEgU3RyaW5nIHRva2VuaXplciB3aWxsIGdpdmUgdXMgb25seSAzIHRva2VucyA6Zmlyc3Qsc2Vjb25kIGFuZCB0aGlyZFxyXG4qIHdoaWxlIGlzIGMjIHNwbGl0IHdldGhvZCB3aWxsIHJldHVybiA0IHRva2VuczogZmlyc3QsZW1wdHkgc3RyaW5nLHNlY29uZCBhbmQgdGhpcmRcclxuKiB3ZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGF0XHJcbiovXHJcbiAgICAvKlxyXG4gICAgTGlzdCByZXMgID0gbmV3IExpc3QoKTtcclxuICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgIGlmICh0b2tlbnNbaV0gIT0gXCJcIiApXHJcbiAgICByZXMuYWRkSXRlbSh0b2tlbnNbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoU3RyaW5nIFtdKShyZXMuZ2V0QWxsSXRlbXMgKFN0cmluZy5jbGFzcykpOyovXHJcblxyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cmFuc2xhdGUgZnJvbSBzdHJpbmcgdG8gaGV4YSBkdW1wIGNoYXIgYnkgY2hhclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJpbmdcIj50byB0cmFuc2xhdGUgaXQgdG8gdGhlIGJ5dGUgc3RyZWFtPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1pbkxlbmd0aFwiPnRoZSBtaW5pbWFsIGxlbmd0aCBvZiBoZXhhIGRpZ2l0cyBmb3IgZWFjaCBjaGFyPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBieXRlIHN0cmVhbSBpbiBmb3JtIG9mIHN0cmluZzwvcmV0dXJucz5cclxuICBzdGF0aWMgc3RyaW5nVG9IZXhhRHVtcChzdHI6IHN0cmluZywgbWluTGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHN0cmluZ0J1aWxkZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihzdHIubGVuZ3RoICogbWluTGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGluZHg6IG51bWJlciA9IDA7IGluZHggPCBzdHIubGVuZ3RoOyBpbmR4ID0gaW5keCArIDEpIHtcclxuICAgICAgbGV0IGN1cnJJbnQ6IG51bWJlciA9IHN0ci5jaGFyQ29kZUF0KGluZHgpO1xyXG4gICAgICBsZXQgaGV4U3RyOiBzdHJpbmcgPSBjdXJySW50LnRvU3RyaW5nKDE2KTtcclxuICAgICAgd2hpbGUgKGhleFN0ci5sZW5ndGggPCBtaW5MZW5ndGgpIHtcclxuICAgICAgICBoZXhTdHIgPSBcIjBcIiArIGhleFN0cjtcclxuICAgICAgfVxyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChoZXhTdHIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIuVG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHNlYXJjaEFuZFJlcGxhY2Uoc3RyOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZztcclxuICBzdGF0aWMgc2VhcmNoQW5kUmVwbGFjZShzdHI6IHN0cmluZywgZnJvbTogc3RyaW5nW10sIHRvOiBzdHJpbmdbXSk6IHN0cmluZztcclxuICBzdGF0aWMgc2VhcmNoQW5kUmVwbGFjZShzdHI6IHN0cmluZywgZnJvbTogYW55LCB0bzogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIChzdHIgPT09IG51bGwgfHwgc3RyLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpICYmIChmcm9tID09PSBudWxsIHx8IGZyb20uY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKHRvID09PSBudWxsIHx8IHRvLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpKSB7XHJcbiAgICAgIHJldHVybiBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2VfMChzdHIsIGZyb20sIHRvKTtcclxuICAgIH1cclxuICAgIHJldHVybiBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2VfMShzdHIsIGZyb20sIHRvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVwbGFjZSBldmVyeSBhcHBlYXJhbmNlIG9mICdmcm9tJyBpbiAnc3RyJyB3aXRoICd0byc8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+dGhlIHdvcmtpbmcgYmFzZSBzb3VyY2Ugc3RyaW5nIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZnJvbVwiPnRoZSBzdHJpbmcgdG8gcmVwbGFjZSA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRvXCI+dGhlIHN0cmluZyB1c2UgaW5zdGVhZCAnZnJvbScgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG1vZGlmaWVkIFN0cmluZyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgc2VhcmNoQW5kUmVwbGFjZV8wKHN0cjogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxhc3RTdWJTdHI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgc3RhcnRTdWJTdHI6IG51bWJlcjtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuXHJcbiAgICBpZiAoKHN0YXJ0U3ViU3RyID0gc3RyLmluZGV4T2YoZnJvbSkpID09PSAtMSkge1xyXG4gICAgICByZXN1bHQgPSBzdHI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHN0cmluZ0J1aWxkZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihzdHIubGVuZ3RoKTtcclxuICAgICAgd2hpbGUgKHN0YXJ0U3ViU3RyICE9PSAtMSkge1xyXG4gICAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKHN0ci5zdWJzdHIobGFzdFN1YlN0ciwgc3RhcnRTdWJTdHIgLSBsYXN0U3ViU3RyKSArIHRvKTtcclxuICAgICAgICBzdGFydFN1YlN0ciA9IHN0YXJ0U3ViU3RyICsgZnJvbS5sZW5ndGg7XHJcbiAgICAgICAgbGFzdFN1YlN0ciA9IHN0YXJ0U3ViU3RyO1xyXG4gICAgICAgIHN0YXJ0U3ViU3RyID0gc3RyLmluZGV4T2YoZnJvbSwgbGFzdFN1YlN0cik7XHJcbiAgICAgIH1cclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3RyLnN1YnN0cihsYXN0U3ViU3RyKSk7XHJcbiAgICAgIHJlc3VsdCA9IHN0cmluZ0J1aWxkZXIuVG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlcGxhY2UgZXZlcnkgYXBwZWFyYW5jZSBvZiBzdHJpbmdzIG9mICdmcm9tJyBpbiAnc3RyJyB3aXRoIHRoZSBhY2NvcmRpbmcgc3RyaW5nIGluICd0byc8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+dGhlIHdvcmtpbmcgYmFzZSBzb3VyY2Ugc3RyaW5nIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZnJvbVwiPnRoZSBzdHJpbmcgdG8gcmVwbGFjZSA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRvXCI+dGhlIHN0cmluZyB1c2UgaW5zdGVhZCAnZnJvbScgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG1vZGlmaWVkIFN0cmluZyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgc2VhcmNoQW5kUmVwbGFjZV8xKHN0cjogc3RyaW5nLCBmcm9tOiBzdHJpbmdbXSwgdG86IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIGxldCBsYXN0U3ViU3RyOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHNhckluZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGZyb21Db3B5OiBzdHJpbmdbXSA9IGZyb20uc2xpY2UoKTtcclxuICAgIGxldCBzdGFydFN1YlN0cjogbnVtYmVyO1xyXG4gICAgbGV0IFNBUmluZGV4OiBSZWZQYXJhbTxudW1iZXI+ID0gbmV3IFJlZlBhcmFtKDApO1xyXG4gICAgc3RhcnRTdWJTdHIgPSBTdHJVdGlsLmluZGV4T2Yoc3RyLCBmcm9tQ29weSwgbGFzdFN1YlN0ciwgU0FSaW5kZXgpO1xyXG4gICAgc2FySW5kZXggPSBTQVJpbmRleC52YWx1ZTtcclxuICAgIGlmIChzdGFydFN1YlN0ciA9PT0gLTEpXHJcbiAgICAgIHJldHVybiBzdHI7XHJcblxyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgbGV0IHRtcEJ1ZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHN0ci5sZW5ndGgpO1xyXG4gICAgd2hpbGUgKHN0YXJ0U3ViU3RyICE9PSAtMSkge1xyXG4gICAgICB0bXBCdWYuQXBwZW5kKHN0ci5zdWJzdHIobGFzdFN1YlN0ciwgc3RhcnRTdWJTdHIgLSBsYXN0U3ViU3RyKSArIHRvW3NhckluZGV4XSk7XHJcbiAgICAgIHN0YXJ0U3ViU3RyICs9IGZyb21Db3B5W3NhckluZGV4XS5sZW5ndGg7XHJcbiAgICAgIGxhc3RTdWJTdHIgPSBzdGFydFN1YlN0cjtcclxuICAgICAgc3RhcnRTdWJTdHIgPSBTdHJVdGlsLmluZGV4T2Yoc3RyLCBmcm9tQ29weSwgbGFzdFN1YlN0ciwgU0FSaW5kZXgpO1xyXG4gICAgICBzYXJJbmRleCA9IFNBUmluZGV4LnZhbHVlO1xyXG4gICAgICB9O1xyXG4gICAgdG1wQnVmLkFwcGVuZChzdHIuc3Vic3RyKGxhc3RTdWJTdHIpKTtcclxuICAgIHJlc3VsdCA9IHRtcEJ1Zi5Ub1N0cmluZygpO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHRoaXMgZnVuY3Rpb25zIGlzIGZvciB1c2UgYnkgdGhlIHNlYXJjaEFuZFJlcGxhY2UoKSBmdW5jdGlvbiAtXHJcbiAgLy8vIHNlYXJjaGVzIHRoZSBvZmZzZXQgb2YgdGhlIHN0cmluZ3MgZnJvbSB0aGUgYXJyYXkgaW4gdGhlIGdpdmVuIHN0cmluZ1xyXG4gIC8vLyBhbmQgcmV0dXJucyB0aGUgbWluaW11bSBvZmZzZXQgZm91bmQgYW5kIHNldHMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBzdHJpbmdcclxuICAvLy8gdG8gU0FSaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0clwiPnRoZSBzdHJpbmcgdG8gc2VhcmNoIGluIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyaW5nc1wiPmFuIGFycmF5IG9mIHN0cmluZ3MgdG8gc2VhcmNoIGZvciA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm9mZnNldFwiPndoZXJlIHRvIHN0YXJ0IHRoZSBzZWFyY2ggPC9wYXJhbT5cclxuICBwcml2YXRlIHN0YXRpYyBpbmRleE9mKHN0cjogc3RyaW5nLCBzdHJpbmdzOiBzdHJpbmdbXSwgb2Zmc2V0OiBudW1iZXIsIFNBUmluZGV4OiBSZWZQYXJhbTxudW1iZXI+KTogbnVtYmVyIHtcclxuICAgIGxldCBtaW5PZmZzZXQ6IG51bWJlciA9IC0xO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgaWYgKCEoc3RyaW5nc1tpXSA9PT0gbnVsbCkpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0OiBudW1iZXIgPSBzdHIuaW5kZXhPZihzdHJpbmdzW2ldLCBvZmZzZXQpO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgc3RyaW5nc1tpXSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA8IG1pbk9mZnNldCB8fCBtaW5PZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIG1pbk9mZnNldCA9IHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgU0FSaW5kZXgudmFsdWUgPSBpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXN1bHQ6IG51bWJlcjtcclxuICAgIGlmIChtaW5PZmZzZXQgPiAtMSkge1xyXG4gICAgICByZXN1bHQgPSBtaW5PZmZzZXQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgU0FSaW5kZXgudmFsdWUgPSAtMTtcclxuICAgICAgcmVzdWx0ID0gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXBsYWNlIHRva2VucyBpbiB1c2VyIHN0cmluZyBieSB2ZWN0b3IgdmFsdWVzIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ1c2VyU3RyaW5nXCI+LSB1c2VyIGJ1ZmZlciBsaWtlIFwiVXNlciAlZCwgJWQgc3RyaW5nXCJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0b2tlblwiPi0gdG9rZW4gdXNlZCBpbiB1c2VyIHN0cmluZyAtIGkuZS4gXCIlZFwiXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib2NjdXJyZW5jZVwiPi0gbnVtYmVyIG9mIHRva2VuIHdoZXJlIHJlcGxhY2Ugd2lsbCB0YWtlIHBhcnQgKDEgZm9yIGZpcnN0IG9jY3VycmVuY2UpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVcIj4tIHZhbHVlIHRvIGJlIGluc2VydGVkIGluc3RlZCBvZiB0b2tlblxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHN0YXRpYyByZXBsYWNlU3RyaW5nVG9rZW5zKHVzZXJTdHJpbmc6IHN0cmluZywgdG9rZW46IHN0cmluZywgb2NjdXJyZW5jZTogbnVtYmVyLCB2YWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdG9rZW5MZW46IG51bWJlciA9IHRva2VuLmxlbmd0aDtcclxuICAgIGxldCBjdXJyUG9zaXRpb246IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbmV3U3RyaW5nOiBzdHJpbmcgPSB1c2VyU3RyaW5nO1xyXG5cclxuICAgIGlmICh2YWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IG51bTI6IG51bWJlciA9IDA7XHJcbiAgICAgIHdoaWxlIChudW0yIDwgb2NjdXJyZW5jZSAmJiBjdXJyUG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgY3VyclBvc2l0aW9uID0gdXNlclN0cmluZy5pbmRleE9mKHRva2VuLCBjdXJyUG9zaXRpb24gKyAoKG51bTIgPT09IDApID8gMCA6IHRva2VuTGVuKSk7XHJcbiAgICAgICAgbnVtMiA9IG51bTIgKyAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY3VyclBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgIG5ld1N0cmluZyA9IHVzZXJTdHJpbmcuc3Vic3RyKDAsIGN1cnJQb3NpdGlvbikgKyB2YWwgKyB1c2VyU3RyaW5nLnN1YnN0cihjdXJyUG9zaXRpb24gKyB0b2tlbkxlbiwgdXNlclN0cmluZy5sZW5ndGggLSAoY3VyclBvc2l0aW9uICsgdG9rZW5MZW4pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld1N0cmluZztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlVG9rZW5zKHNvdXJjZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgc3RhdGljIG1ha2VQcmludGFibGVUb2tlbnMoc291cmNlOiBzdHJpbmcsIHR5cGU6IG51bWJlcik6IHN0cmluZztcclxuICBzdGF0aWMgbWFrZVByaW50YWJsZVRva2Vucyhzb3VyY2U6IExpc3Q8c3RyaW5nPiwgdHlwZTogbnVtYmVyKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlVG9rZW5zKHNvdXJjZTogYW55LCB0eXBlOiBhbnkpOiBzdHJpbmcgfCB2b2lke1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKHR5cGUgPT09IG51bGwgfHwgdHlwZS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICByZXR1cm4gU3RyVXRpbC5tYWtlUHJpbnRhYmxlVG9rZW5zXzAoc291cmNlLCB0eXBlKTtcclxuICAgIH1cclxuICAgIFN0clV0aWwubWFrZVByaW50YWJsZVRva2Vuc18xKHNvdXJjZSwgdHlwZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29udmVydHMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgdG9rZW4gdG8gYSBwcmludGFibGUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVwiPmEgdG9rZW4gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVcIj50eXBlIG9mIGNvbnZlcnNpb246IFNUUl8yX0hUTUwsIFNFUV8yX0hUTUwsIEhUTUxfMl9TRVEsIEhUTUxfMl9TVFIsIFNFUV8yX1NUUiA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdG9rZW4gd2l0aCBjb252ZXJ0ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzIDwvcmV0dXJucz5cclxuICBzdGF0aWMgbWFrZVByaW50YWJsZVRva2Vuc18wKHNvdXJjZTogc3RyaW5nLCB0eXBlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGVzY1N0cjogc3RyaW5nW10gPSBbXHJcbiAgICAgIFwiXFxcXFwiLCBcIi1cIiwgXCIsXCJcclxuICAgIF07XHJcbiAgICBsZXQgZXNjU2VxOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJcXFxcXFxcXFwiLCBcIlxcXFwtXCIsIFwiXFxcXCxcIlxyXG4gICAgXTtcclxuICAgIGxldCBlc2NIdG06IHN0cmluZ1tdID0gW1xyXG4gICAgICBIVE1MX0JBQ0tTTEFTSCwgSFRNTF9IWVBIRU4sIEhUTUxfQ09NTUFcclxuICAgIF07XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBTVFJfMl9IVE1MOlxyXG4gICAgICAgIHJlc3VsdCA9IFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGVzY1N0ciwgZXNjSHRtKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTRVFfMl9IVE1MOlxyXG4gICAgICAgIHJlc3VsdCA9IFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGVzY1NlcSwgZXNjSHRtKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBIVE1MXzJfU0VROlxyXG4gICAgICAgIHJlc3VsdCA9IFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGVzY0h0bSwgZXNjU2VxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBIVE1MXzJfU1RSOlxyXG4gICAgICAgIHJlc3VsdCA9IFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGVzY0h0bSwgZXNjU3RyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTRVFfMl9TVFI6XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZXNjU2VxLCBlc2NTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJlc3VsdCA9IHNvdXJjZTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbnZlcnRzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHRva2VucyBjb2xsZWN0aW9uIHRvIGEgcHJpbnRhYmxlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj52ZWN0b3Igb2Ygc3RyaW5ncyBiZWZvcmUgdG9rZW5haXplciA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPnR5cGUgb2YgY29udmVyc2lvbjogU1RSXzJfSFRNTCwgU0VRXzJfSFRNTCwgSFRNTF8yX1NFUSwgSFRNTF8yX1NUUiA8L3BhcmFtPlxyXG4gIHByaXZhdGUgc3RhdGljIG1ha2VQcmludGFibGVUb2tlbnNfMShzb3VyY2U6IExpc3Q8c3RyaW5nPiwgdHlwZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBsZW5ndGg6IG51bWJlciA9IHNvdXJjZS5sZW5ndGg7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgIGxldCBjdXJyRWxtOiBzdHJpbmcgPSBzb3VyY2UuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgc291cmNlLnNldF9JdGVtKGksIFN0clV0aWwubWFrZVByaW50YWJsZVRva2Vuc18wKGN1cnJFbG0sIHR5cGUpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNoYW5nZSBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgbGlrZSBcIm5ldyBsaW5lXCIgYW5kIFwibGluZSBmZWVkXCIgdG8gdGhlaXJcclxuICAvLy8gICBwcmludGFibGUgcmVwcmVzZW50YXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlXCI+aXMgdGhlIHN0cmluZyB3aXRoIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG5ldyBzdHJpbmcgd2hlcmUgYWxsIHRoZSBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIGNvbnZlcnRlZCA8L3JldHVybnM+XHJcbiAgc3RhdGljIG1ha2VQcmludGFibGUoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZyb206IHN0cmluZ1tdID0gW1xyXG4gICAgICBcIlxcblwiLCBcIlxcclwiLCBcIidcIiwgXCJcXFxcXCIsIFwiXFxcIlwiLCBcIlxcMFwiXHJcbiAgICBdO1xyXG4gICAgbGV0IHRvOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJcXFxcblwiLCBcIlxcXFxyXCIsIFwiXFxcXCdcIiwgXCJcXFxcXFxcXFwiLCBcIlxcXFxcXFwiXCIsIFwiXFxcXDBcIlxyXG4gICAgXTtcclxuICAgIHJldHVybiBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2Uoc291cmNlLCBmcm9tLCB0byk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hhbmdlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBsaWtlIFwibmV3IGxpbmVcIiBhbmQgXCJsaW5lIGZlZWRcIiB0byB0aGVpclxyXG4gIC8vLyAgIHByaW50YWJsZSByZXByZXNlbnRhdGlvbiAoc2ltcGxpZmllZCB2ZXJzaW9uIGZvciByYW5nZSBlcnJvciBtZXNzYWdlKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj5pcyB0aGUgc3RyaW5nIHdpdGggbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbmV3IHN0cmluZyB3aGVyZSBhbGwgdGhlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBhcmUgY29udmVydGVkIDwvcmV0dXJucz5cclxuICBzdGF0aWMgbWFrZVByaW50YWJsZTIoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZyb206IHN0cmluZ1tdID0gW1xyXG4gICAgICBcIlxcblwiLCBcIlxcclwiLCBcIlxcMFwiXHJcbiAgICBdO1xyXG4gICAgbGV0IHRvOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJcXFxcblwiLCBcIlxcXFxyXCIsIFwiXFxcXDBcIlxyXG4gICAgXTtcclxuICAgIHJldHVybiBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2Uoc291cmNlLCBmcm9tLCB0byk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZW5cIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIFpzdHJpbmdNYWtlKHM6IHN0cmluZywgbGVuOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGVuID0gU3RyVXRpbC5tZW1fdHJpbShzLCBsZW4pO1xyXG4gICAgcmV0dXJuIHMuc3Vic3RyKDAsIGxlbik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHB1YmxpYylcclxuICAvLy8gcmV0dXJucyBwbGFpbiB0ZXh0IGZyb20gcnRmIHRleHRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJ0ZlRleHRcIj5yZWZlciB0byB0aGUgc3VtbWFyeTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPnJlZmVyIHRvIHRoZSBzdW1tYXJ5PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRQbGFpblRleHRmcm9tUnRmKHJ0ZlRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoUnRmLmlzUnRmKHJ0ZlRleHQpKSB7XHJcbiAgICAgIGxldCBydGY6IFJ0ZiA9IG5ldyBSdGYoKTtcclxuICAgICAgbGV0IG91dHB1dFR4dDogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKFwiXCIpO1xyXG4gICAgICBydGYudG9UeHQocnRmVGV4dCwgb3V0cHV0VHh0KTtcclxuICAgICAgcnRmVGV4dCA9IG91dHB1dFR4dC5Ub1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJ0ZlRleHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGFycmF5cyBzdHIxICYgc3RyMiBhcmUgZXF1YWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0cjFcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0cjJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIFN0cmluZ3NBcnJheXNFcXVhbChzdHIxOiBzdHJpbmdbXSwgc3RyMjogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW47XHJcbiAgICBpZiAoc3RyMSA9PT0gbnVsbCAmJiBzdHIyID09PSBudWxsKSB7XHJcbiAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHN0cjEgPT09IG51bGwgfHwgc3RyMiA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChzdHIxLmxlbmd0aCAhPT0gc3RyMi5sZW5ndGgpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGZvciAobGV0IGluZGV4OiBudW1iZXIgPSAwOyBpbmRleCA8IDxudW1iZXI+c3RyMS5sZW5ndGg7IGluZGV4ID0gaW5kZXggKyAxKSB7XHJcbiAgICAgICAgICAgIGlmICgoc3RyMVtpbmRleF0gIT09IHN0cjJbaW5kZXhdKSkge1xyXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBUaGUgY29kZSBpcyBjb3BpZWQgZnJvbSB0c2tfb3Blbl9ibmRfd2lsZCBhbmQgU2VhcmNoQW5kUmVwbGFjZVdpbGRDaGFyc1xyXG4gIC8vLyBUaGUgcmVmYWN0b3JpbmcgaXMgbm90IHBlcmZvcm1lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcclxuICAvLy8gVGhlIGNvZGUgcmVwbGFjZXMgc3BlY2lhbCBjaGFyYWNodGVycyA6KiA/IHdpdGggcmVjaWV2ZWQgZmlsbGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBTZWFyY2hBbmRSZXBsYWNlV2lsZENoYXJzKGJ1Zjogc3RyaW5nLCBsZW46IG51bWJlciwgZmlsbGVyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgYnVmID0gTlN0cmluZy5QYWRSaWdodChidWYsIGxlbik7XHJcblxyXG4gICAgbGV0IGVzY0NoYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBzdG9wU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgdG1wQnVmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIobGVuKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkgPSBpICsgMSkge1xyXG4gICAgICBzd2l0Y2ggKGJ1ZltpXSkge1xyXG4gICAgICAgIGNhc2UgKCdcXFxcJyk6IHtcclxuICAgICAgICAgIGxldCBpc05leHRDaGFyV2lsZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgICAgICAgLy9JZiBuZXh0IGNoYXIgaXMgbm90IHdpbGQgLCB0aGVuIGNvcHkgJ1xcJywgaWYgdGhpcyBpcyBmaXJzdCBjaGFyLlxyXG4gICAgICAgICAgaWYgKChpICsgMSA8IGxlbikgJiYgKGJ1ZltpICsgMV0gIT0gJyonICYmIGJ1ZltpICsgMV0gIT0gJ1xcXFwnKSlcclxuICAgICAgICAgICAgaXNOZXh0Q2hhcldpbGQgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlc2NDaGFyIHx8ICFpc05leHRDaGFyV2lsZClcclxuICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChidWZbaV0pO1xyXG4gICAgICAgICAgZXNjQ2hhciA9ICFlc2NDaGFyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgKCcqJyk6XHJcbiAgICAgICAgICBpZiAoZXNjQ2hhcilcclxuICAgICAgICAgICAgdG1wQnVmLkFwcGVuZChidWZbaV0pO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoZmlsbGVyLCBsZW4gLSB0bXBCdWYuTGVuZ3RoKTtcclxuICAgICAgICAgICAgc3RvcFNlYXJjaCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlc2NDaGFyID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICc/JzpcclxuICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoZmlsbGVyKTtcclxuICAgICAgICAgIGVzY0NoYXIgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0bXBCdWYuQXBwZW5kKGJ1ZltpXSk7XHJcbiAgICAgICAgICBlc2NDaGFyID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB0ZXh0OiBzdHJpbmcgPSB0bXBCdWYuVG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBOU3RyaW5nLlRyaW1FbmQoTlN0cmluZy5UcmltRW5kKHRleHQsIFsnXFwwJ10pKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVtb3ZlIHRoZSB0YXNrIHBhdGggZGVsaW1pdGVyIGZyb20gdGhlIGVycm9yIHN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlXCI+c3RyaW5nIHdpdGggZGVsaW1pdGVyIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgZm9yIGNvbnNvbGUgZXJyb3IgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRDb25zb2xlRXJvclN0cmluZyhzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29uc29sZUVyb3JTdHJpbmc6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChzb3VyY2UpKVxyXG4gICAgICBjb25zb2xlRXJvclN0cmluZyA9IHRoaXMuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIFRBU0tfUEFUSF9ERUxJTUlURVIsIFwiXCIpO1xyXG5cclxuICAgIHJldHVybiBjb25zb2xlRXJvclN0cmluZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVtb3ZlIHRoZSB0YXNrIHBhdGggZnJvbSB0aGUgZXJyb3Igc3RyaW5nLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj5zdHJpbmcgd2l0aCBkZWxpbWl0ZXIgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0cmluZyBmb3IgY29uc29sZSBlcnJvciA8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldE1zZ0JveEVyb3JTdHJpbmcoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRva2Vuczogc3RyaW5nIFtdO1xyXG4gICAgbGV0IG1zZ0JveEVyb3JTdHJpbmc6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihcIlwiKTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHNvdXJjZSkpe1xyXG4gICAgICB0b2tlbnMgPSB0aGlzLnRva2VuaXplKHNvdXJjZSwgVEFTS19QQVRIX0RFTElNSVRFUik7XHJcblxyXG4gICAgICBmb3IgKGxldCBpOm51bWJlciA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgIHtcclxuICAgICAgICBtc2dCb3hFcm9yU3RyaW5nLkFwcGVuZCh0b2tlbnNbaV0pO1xyXG4gICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcmV0dXJuIG1zZ0JveEVyb3JTdHJpbmcudG9TdHJpbmcoKTtcclxuICB9XHJcbn1cclxuIl19
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9TdHJVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBTyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQy9GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE1BQU0sY0FBYyxHQUFXLFFBQVEsQ0FBQztBQUN4QyxNQUFNLFVBQVUsR0FBVyxRQUFRLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQVcsUUFBUSxDQUFDO0FBQ3JDLE1BQU0sVUFBVSxHQUFXLENBQUMsQ0FBQztBQUM3QixNQUFNLG1CQUFtQixHQUFXLFFBQVEsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQVcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBVyxDQUFDLENBQUM7QUFDcEMsTUFBTSxVQUFVLEdBQVcsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBVyxDQUFDLENBQUM7QUFFbkMsTUFBTSxPQUFPLE9BQU87SUFJbEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUN0QyxJQUFJLE1BQWMsQ0FBQztRQUNuQixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDWCxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUNwQixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osT0FBTyxNQUFNLENBQUM7YUFDZjtZQUNELE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtnQkFDdEMsR0FBRyxH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R0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUM3QztnQkFDRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsRUFBRSxDQUFDO2FBQ0w7U0FDRjtRQUlELE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckMsQ0FBQzs7QUExckJjLHNCQUFjLEdBQVcsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0LCBOU3RyaW5nLCBSZWZQYXJhbSwgU3RyaW5nQnVpbGRlciwgaXNOdWxsT3JVbmRlZmluZWR9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1V0aWxTdHJCeXRlTW9kZX0gZnJvbSBcIi4vVXRpbFN0ckJ5dGVNb2RlXCI7XHJcbmltcG9ydCB7UnRmfSBmcm9tIFwiLi9SdGZcIjtcclxuXHJcbmNvbnN0IEhUTUxfQkFDS1NMQVNIOiBzdHJpbmcgPSBcIiYjMDkyO1wiO1xyXG5jb25zdCBIVE1MX0NPTU1BOiBzdHJpbmcgPSBcIiYjMDQ0O1wiO1xyXG5jb25zdCBIVE1MX0hZUEhFTjogc3RyaW5nID0gXCImIzA0NTtcIjtcclxuY29uc3QgU1RSXzJfSFRNTDogbnVtYmVyID0gMTtcclxuY29uc3QgVEFTS19QQVRIX0RFTElNSVRFUjogc3RyaW5nID0gXCJAQHx8QEBcIjtcclxuZXhwb3J0IGNvbnN0IFNFUV8yX0hUTUw6IG51bWJlciA9IDI7XHJcbmV4cG9ydCBjb25zdCBIVE1MXzJfU1RSOiBudW1iZXIgPSAzO1xyXG5jb25zdCBIVE1MXzJfU0VROiBudW1iZXIgPSA0O1xyXG5leHBvcnQgY29uc3QgU0VRXzJfU1RSOiBudW1iZXIgPSA1O1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0clV0aWwge1xyXG4gIHByaXZhdGUgc3RhdGljIF9wYWRkaW5nU3BhY2VzOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IHRyaW0gdGhlIGVuZCBvZiB0aGUgc3RyaW5nPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBtZW1fdHJpbShzdHI6IHN0cmluZywgbGVuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyO1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgaWYgKGxlbiA+IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICByZXN1bHQgPSAtMTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlIChsZW4gPiAwICYmIHN0cltsZW4gLSAxXSA9PT0gJyAnKSB7XHJcbiAgICAgICAgbGVuID0gbGVuIC0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzdWx0ID0gbGVuO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZW1tb3ZlKGRlc3Q6IHN0cmluZywgZGVzdENvdW50OiBudW1iZXIsIHNyYzogc3RyaW5nLCBzcmNDb3VudDogbnVtYmVyLCBsZW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGRlc3QubGVuZ3RoICsgbGVuKTtcclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkgJiYgZGVzdC5sZW5ndGggPCBkZXN0Q291bnQpIHtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoTlN0cmluZy5Gcm9tQ2hhcignICcsIGRlc3RDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKGRlc3Quc3Vic3RyKDAsIGRlc3RDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3JjLnN1YnN0cihzcmNDb3VudCwgbGVuKSk7XHJcblxyXG4gICAgaWYgKHN0cmluZ0J1aWxkZXIuTGVuZ3RoIDwgZGVzdC5sZW5ndGgpIHtcclxuICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChkZXN0LnN1YnN0cihzdHJpbmdCdWlsZGVyLkxlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZW1jcHkoZGVzdDogc3RyaW5nLCBkZXN0Q291bnQ6IG51bWJlciwgc3JjOiBzdHJpbmcsIHNjckNvdW50OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiBzdHJpbmc7XHJcbiAgc3RhdGljIG1lbWNweShkZXN0OiBzdHJpbmdbXSwgZGVzdENvdW50OiBudW1iZXIsIHNyYzogc3RyaW5nW10sIHNyY0NvdW50OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkO1xyXG4gIHN0YXRpYyBtZW1jcHkoZGVzdDogYW55LCBkZXN0Q291bnQ6IG51bWJlciwgc3JjOiBhbnksIHNjckNvdW50T3JTcmNDb3VudDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA1ICYmIChkZXN0ID09PSBudWxsIHx8IGRlc3QuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKGRlc3RDb3VudCA9PT0gbnVsbCB8fCBkZXN0Q291bnQuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKHNyYyA9PT0gbnVsbCB8fCBzcmMuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKHNjckNvdW50T3JTcmNDb3VudCA9PT0gbnVsbCB8fCBzY3JDb3VudE9yU3JjQ291bnQuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKGNvdW50ID09PSBudWxsIHx8IGNvdW50LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiBTdHJVdGlsLm1lbWNweV8wKGRlc3QsIGRlc3RDb3VudCwgc3JjLCBzY3JDb3VudE9yU3JjQ291bnQsIGNvdW50KTtcclxuICAgIH1cclxuICAgIFN0clV0aWwubWVtY3B5XzEoZGVzdCwgZGVzdENvdW50LCBzcmMsIHNjckNvdW50T3JTcmNDb3VudCwgY291bnQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvcHkgcGFydCBvZiBzdHJpbmcgaW50byBhbm90aGVyIHN0cmluZywgbGlrZSBtZW1jcHkgb2YgQywgYnV0IDQgc3RyaW5nIG9ubHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGVzdFwiPnN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZXN0Q291bnRcIj5vZiBjb3VudGVyIHN0YXJ0IGZyb20gaW4gZGVzdGlnbmF0aW9uIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzcmNcIj5zdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic2NyQ291bnRcIj5vZiBjb3VudGVyIHN0YXJ0IGZyb20gaW4gc291cmNlIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb3VudFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBuZXcgdmFsdWUgb2YgZGVzdGlnbmF0aW9uIHN0cmluZzwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBtZW1jcHlfMChkZXN0OiBzdHJpbmcsIGRlc3RDb3VudDogbnVtYmVyLCBzcmM6IHN0cmluZywgc2NyQ291bnQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGRlc3Quc3Vic3RyKDAsIGRlc3RDb3VudCkpO1xyXG5cclxuICAgIGlmIChzY3JDb3VudCArIGNvdW50IDwgc3JjLmxlbmd0aCkge1xyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChzcmMuc3Vic3RyKHNjckNvdW50LCBjb3VudCAtIHNjckNvdW50KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3JjLnN1YnN0cihzY3JDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgbGV0IHNpemU6IG51bWJlciA9IGRlc3QubGVuZ3RoIC0gZGVzdENvdW50IC0gY291bnQ7XHJcbiAgICBpZiAoc2l6ZSA+IDApIHtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoZGVzdC5zdWJzdHIoZGVzdENvdW50ICsgY291bnQpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBtZW1jcHlfMShkZXN0OiBzdHJpbmdbXSwgZGVzdENvdW50OiBudW1iZXIsIHNyYzogc3RyaW5nW10sIHNyY0NvdW50OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHdoaWxlIChjb3VudCA+IDAgJiYgZGVzdENvdW50IDwgZGVzdC5sZW5ndGggJiYgc3JjQ291bnQgPCBzcmMubGVuZ3RoKSB7XHJcbiAgICAgIGRlc3RbZGVzdENvdW50KytdID0gc3JjW3NyY0NvdW50KytdO1xyXG4gICAgICBjb3VudCA9IGNvdW50IC0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZW1zZXQoZGVzdDogc3RyaW5nLCBkZXN0Q291bnQ6IG51bWJlciwgaW5WYWw6IHN0cmluZywgY291bnRlcjogbnVtYmVyKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBtZW1zZXQoZGVzdDogc3RyaW5nW10sIGRlc3RDb3VudDogbnVtYmVyLCBpblZhbDogc3RyaW5nLCBjb3VudGVyOiBudW1iZXIpOiB2b2lkO1xyXG4gIHN0YXRpYyBtZW1zZXQoZGVzdDogYW55LCBkZXN0Q291bnQ6IG51bWJlciwgaW5WYWw6IHN0cmluZywgY291bnRlcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIChkZXN0ID09PSBudWxsIHx8IGRlc3QuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKGRlc3RDb3VudCA9PT0gbnVsbCB8fCBkZXN0Q291bnQuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKGluVmFsID09PSBudWxsIHx8IGluVmFsLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChjb3VudGVyID09PSBudWxsIHx8IGNvdW50ZXIuY29uc3RydWN0b3IgPT09IE51bWJlcikpIHtcclxuICAgICAgcmV0dXJuIFN0clV0aWwubWVtc2V0XzAoZGVzdCwgZGVzdENvdW50LCBpblZhbCwgY291bnRlcik7XHJcbiAgICB9XHJcbiAgICBTdHJVdGlsLm1lbXNldF8xKGRlc3QsIGRlc3RDb3VudCwgaW5WYWwsIGNvdW50ZXIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluc2VydCB0byBzdHJpbmcgY2hhcnMgbiB0aW1lc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZXN0XCI+c3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlc3RDb3VudFwiPm9mIGNvdW50ZXIgc3RhcnQgZnJvbSBpbiBkZXN0aWduYXRpb24gc3RyaW5nIHRvIHN0YXJ0IGluc2VydGlvbiBvZiBjaGFyIGZyb208L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5WYWxcIj4yIGluc2VydDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb3VudGVyXCI+LSBudW1iZXIgb2YgdGltZXMgdG8gaW5zZXJ0IHRoZSBjaGFyPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG5ldyB2YWx1ZSBvZiBkZXN0aWduYXRpb24gc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIG1lbXNldF8wKGRlc3Q6IHN0cmluZywgZGVzdENvdW50OiBudW1iZXIsIGluVmFsOiBzdHJpbmcsIGNvdW50ZXI6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgZmlyc3Q6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihkZXN0LnN1YnN0cigwLCBkZXN0Q291bnQpKTtcclxuICAgIHdoaWxlIChjb3VudGVyID4gMCkge1xyXG4gICAgICBmaXJzdC5BcHBlbmQoaW5WYWwpO1xyXG4gICAgICBjb3VudGVyID0gY291bnRlciAtIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpcnN0Lkxlbmd0aCA8IGRlc3QubGVuZ3RoKSB7XHJcbiAgICAgIGZpcnN0LkFwcGVuZChkZXN0LnN1YnN0cihmaXJzdC5MZW5ndGgpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaXJzdC5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWVtc2V0XzEoZGVzdDogc3RyaW5nW10sIGRlc3RDb3VudDogbnVtYmVyLCBpblZhbDogc3RyaW5nLCBjb3VudGVyOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHdoaWxlIChjb3VudGVyID4gMCAmJiBkZXN0Q291bnQgPCBkZXN0Lmxlbmd0aCkge1xyXG4gICAgICBkZXN0W2Rlc3RDb3VudCsrXSA9IGluVmFsO1xyXG4gICAgICBjb3VudGVyID0gY291bnRlciAtIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc3Ryc3RyKHN0cjogc3RyaW5nLCBzdWJzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgZnJvbTogbnVtYmVyID0gc3RyLmluZGV4T2Yoc3Vic3RyKTtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmIChmcm9tIDwgMCkge1xyXG4gICAgICByZXN1bHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IHN0ci5zdWJzdHIoZnJvbSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXZlcnNlcyBzdHJpbmcgdmFsdWVzLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGV4dFwiPlRoZSBTdHJpbmdCdWlsZGVyIG9iamVjdCBjb250YWluaW5nIHRoZSBzdHJpbmcgdG8gYmUgcmV2ZXJzZWQuPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+VGhlIHJldmVyc2VkIHN0cmluZyBjb250YWluZWQgaW4gYSBTdHJpbmdCdWlsZGVyIG9iamVjdC48L3JldHVybnM+XHJcbiAgc3RhdGljIFJldmVyc2VTdHJpbmcodGV4dDogU3RyaW5nQnVpbGRlcik6IFN0cmluZ0J1aWxkZXIge1xyXG4gICAgLy8gVE9ETzogdXNlIHN0cmluZy5SZXZlcnNlKClcclxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBOU3RyaW5nLlRvQ2hhckFycmF5KHRleHQuVG9TdHJpbmcoKSk7XHJcbiAgICBhcnJheS5yZXZlcnNlKCk7XHJcbiAgICByZXR1cm4gbmV3IFN0cmluZ0J1aWxkZXIoTlN0cmluZy5Gcm9tQ2hhcnMoYXJyYXkpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVtb3ZlIHNwYWNlcyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHN0cmluZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgc3RyaW5nIHRvIHRyaW1cclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgcnRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFN0clV0aWwucnRyaW1XaXRoTnVsbChzdHIsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVtb3ZlIHNwYWNlcyBhbmQvb3IgTnVsbCBjaGFycyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHN0cmluZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgc3RyaW5nIHRvIHRyaW1cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0cmltTnVsbENoYXJzXCI+V2hldGhlciB0byByZW1vdmUgTlVMTCBjaGFyYWN0ZXJzIG9yIG5vdFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHN0YXRpYyBydHJpbVdpdGhOdWxsKHN0cjogc3RyaW5nLCB0cmltTnVsbENoYXJzOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmICh0eXBlb2Ygc3RyID09PSBcInVuZGVmaW5lZFwiIHx8IHN0ciA9PT0gbnVsbCB8fCBzdHIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJlc3VsdCA9IHN0cjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgaWR4OiBudW1iZXIgPSBzdHIubGVuZ3RoIC0gMTtcclxuICAgICAgaWYgKHRyaW1OdWxsQ2hhcnMpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKGlkeCA+PSAwICYmIChzdHJbaWR4XSA9PT0gJyAnIHx8IHN0cltpZHhdID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApLyonXHUwMDAwJyovKSkge1xyXG4gICAgICAgICAgaWR4ID0gaWR4IC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2hpbGUgKGlkeCA+PSAwICYmIHN0cltpZHhdID09PSAnICcpIHtcclxuICAgICAgICAgIGlkeCA9IGlkeCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlkeCA9IGlkeCArIDE7XHJcblxyXG4gICAgICBpZiAoaWR4IDwgc3RyLmxlbmd0aCkge1xyXG4gICAgICAgIHJlc3VsdCA9IHN0ci5zdWJzdHIoMCwgaWR4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSBzdHI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlbW92ZSBzcGFjZXMgZnJvbSB0aGUgbGVmdCBzaWRlIG9mIHN0cmluZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgc3RyaW5nIHRvIHRyaW1cclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgbHRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxlbmd0aDogbnVtYmVyID0gc3RyLmxlbmd0aDtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgaWYgKHN0ciA9PT0gbnVsbCB8fCBsZW5ndGggPT09IDApIHtcclxuICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHdoaWxlIChpIDwgbGVuZ3RoICYmIHN0cltpXSA9PT0gJyAnLyonICcqLykge1xyXG4gICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cihpKTtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQgPSBzdHI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlRoaXMgZnVuY3Rpb24gZm9yIERlbGV0aW5nIFN0cmluZyBmcm9tIGVuZCAmIHN0YXJ0IG9mIGlucHV0XHJcbiAgLy8vIFN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+U3RyaW5nICwgd2hpY2ggY2FuIGluY2x1ZGUgc3RyVG9EZWxldGUgc3BhY2VzIG9uIGlucHV0XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyVG9EZWxldGVcIj5uZWVkIGRlbGV0ZSB0aGlzIFN0cmluZyBmcm9tIHN0YXJ0L2VuZCBvZiBzdHIuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBTdHJpbmcgd2l0aG91dCBzdHJUb0RlbGV0ZSBvbiBlbmQgJiBzdGFydCxcclxuICAvLy8gb3IgJ251bGwnIGlmIFN0aW5nIGhhc24ndCBub3QgIGNoYXJhY3RlcnMgaW5zaWRlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgRGVsZXRlU3RyaW5nc0Zyb21FbmRzKHN0cjogc3RyaW5nLCBzdHJUb0RlbGV0ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChzdHIuc3RhcnRzV2l0aChzdHJUb0RlbGV0ZSkpIHtcclxuICAgICAgc3RyID0gc3RyLnN1YnN0cihzdHJUb0RlbGV0ZS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0ci5lbmRzV2l0aChzdHJUb0RlbGV0ZSkpIHtcclxuICAgICAgc3RyID0gc3RyLnN1YnN0cigwLCBzdHIubGVuZ3RoIC0gc3RyVG9EZWxldGUubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJlc3VsdCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcGFkIGEgc3RyaW5nIHdpdGggdHJhaWxpbmcgc3BhY2VzIHVwIHRvIHRoZSBnaXZlbiBsZW5ndGg8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+dGhlIHN0cmluZyB0byBwYWRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZW5cIj50aGUgZXhwZWN0ZWQgbGVuZ3RoIGFmdGVyIHBhZGRpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgcGFkU3RyKHN0cjogc3RyaW5nLCBsZW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgcGFkTGVuOiBudW1iZXIgPSBsZW4gLSBzdHIubGVuZ3RoO1xyXG5cclxuICAgIGlmIChwYWRMZW4gPiAwKSB7XHJcbiAgICAgIGlmIChTdHJVdGlsLl9wYWRkaW5nU3BhY2VzID09PSBudWxsIHx8IFN0clV0aWwuX3BhZGRpbmdTcGFjZXMubGVuZ3RoIDwgcGFkTGVuKSB7XHJcbiAgICAgICAgU3RyVXRpbC5fcGFkZGluZ1NwYWNlcyA9IE5TdHJpbmcuRnJvbUNoYXIoJyAnLCBwYWRMZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIobGVuKTtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3RyKTtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoU3RyVXRpbC5fcGFkZGluZ1NwYWNlcywgMCwgcGFkTGVuKTtcclxuICAgICAgc3RyID0gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gdGhpcyBtZXRob2Qgd2lsbCBzZXJ2ZSBhcyBhIHN0cmluZyB0b2tlbml6ZXIgaW5zdGVhZCBvZiB1c2luZyB0aGUgYyMgc3BsaXQgbWV0aG9kXHJcbiAgLy8vIHNpbmNlIHRoZXJlIGFyZSBkaWZmcmVuY2VzIGJ0d2VlbiBqYXZhIHRva2VuaXplciBhbmQgYyMgc3BsaXRcclxuICAvLy8gdGhlIGltcGxpbWVudGF0aW9uIGdpdmVuIGJ5IHRoZSBjb252ZXJzaW9uIHRvb2wgaXMgbm90IFN1ZmZpY2llbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNvdXJjZVwiPi0gdGhlIHNvdXJjZSBzdHJpbmcgdG8gYmUgY29udmVydGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVsaW1cIj4tIHRoZSBzdHJpbmcgb2YgZGVsaW1pdGVycyB1c2VkIHRvIHNwbGl0IHRoZSBzdHJpbmcgKGVhY2ggY2hhcmFjdGVyIGluIHRoZSBTdHJpbmcgaXMgYSBkZWxpbWl0ZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGFycmF5IG9mIHRva2VuIGFjY29yZGluZyB3aGljaCBpcyB0aGUgc2FtZSBhcyBzdHJpbmcgdG9rZW5pemVyIGluIGphdmFcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyB0b2tlbml6ZShzb3VyY2U6IHN0cmluZywgZGVsaW06IHN0cmluZ3xSZWdFeHApOiBzdHJpbmdbXSB7XHJcbiAgICAvLyBJdCBpcyBtZW50aW9uZWQgaW4gdGhlIGNvbW1lbnQgdGhhdCB3ZSBzaG91bGQgbm90IHVzZSBTdHJpbmcuU3BsaXQoKVxyXG4gICAgLy8gYmVjYXVzZSBpdHMgYmVoYXZpb3IgaXMgZGlmZmVyZW50IHRoYW4gSmF2YSdzIHRva2VuaXplci5cclxuICAgIC8vIFNvLCB3ZSB3ZXJlIHN1cHBvc2UgdG8gdXNlIG91ciBvd24gaW1wbGVtZW50YXRpb24gKHRoZSBjb21tZW50ZWQgY29kZSBiZWxvdykuXHJcbiAgICAvLyBCdXQgYWxsIHRoZXNlIHllYXJzLCB3ZSB3ZXJlIGNhbGxpbmcgWG1sUGFyc2VyLmdldFRva2VuKCkgd2hpY2ggd2FzIGFjdHVhbGx5XHJcbiAgICAvLyB1c2luZyBTdHJpbmcuU3BsaXQoKS4gQW5kIHdlIGRpZG4ndCBmYWNlIGFueSBwcm9ibGVtLlxyXG4gICAgLy8gU28sIGl0IHNlZW1zIHRoYXQgd2UgZG8gbm90IGhhdmUgcHJvYmxlbSBpbiB1c2luZyBTdHJpbmcuU3BsaXQoKS5cclxuICAgIC8vIEJ1dCBub3csIHdlIGNhbiBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBoZXJlLi4uXHJcbiAgICAvLyBYbWxQYXJzZXIuZ2V0VG9rZW5zKCkgd2FzIGdldHRpbmcgYSBTdHJpbmdbXSB1c2luZyBTdHJpbmcuU3BsaXQoKS5cclxuICAgIC8vIEl0IHdhcyB0aGVuIGNyZWF0aW5nIGEgTGlzdDxTdHJpbmc+IGZyb20gdGhpcyBTdHJpbmdbXSBhbmQgd2FzIHJldHVybmluZyBpdCB0b1xyXG4gICAgLy8gdG9rZW5pemUoKS5cclxuICAgIC8vIHRva2VuaXplKCkgd2FzIGFnYWluIGNvbnZlcnRpbmcgdGhpcyBMaXN0PFN0cmluZz4gYmFjayB0byBTdHJpbmdbXS5cclxuICAgIC8vIFNvIHdoeSBub3QgY2FsbCBTdHJpbmcuU3BsaXQoKSBkaXJlY3RseT9cclxuICAgIHJldHVybiBzb3VyY2Uuc3BsaXQoZGVsaW0pO1xyXG4gICAgLypcclxuU3RyaW5nIFtdIHRva2VucyA9IG51bGw7XHJcblxyXG5jaGFyIFtdIGRlbGltQXJyeSA9IGRlbGltLnRvQ2hhckFycmF5KCk7XHJcblxyXG4vL3NpbmNlIGphdmEgZGlzY2FyZHMgZGVsaW1pdGVycyBmcm9tIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBzdHJpbmcgYW5kIGMjIGRvZXMgbm90XHJcbi8vd2UgbmVlZCB0byByZW1vdmUgdGhlbSBtYW51YWxseVxyXG4vLyAgICAgICBzb3VyY2UgPSBzb3VyY2UuVHJpbUVuZChkZWxpbUFycnkpO1xyXG4vLyAgICAgc291cmNlID0gc291cmNlLlRyaW1TdGFydChkZWxpbUFycnkpO1xyXG5zb3VyY2UgPSBzb3VyY2UudHJpbSgpO1xyXG5cclxuLy9ub3cgdGhhdCB3ZSBoYXZlIHJlbW92ZSBzdGFydGluZyBhbmQgZW5kaW5nIGRlbGltaXRlcnMgd2UgY2FuIHNwbGl0XHJcbnRva2VucyA9IHNvdXJjZS5TcGxpdChkZWxpbUFycnkpO1xyXG5cclxuLypcclxuKiBvbmx5IG9uZSBwcm9ibGVtOiBpZiB3ZSBoYXZlIHR3byBTdWJzZXF1ZW50IGRlbGltaXRlcnMgZm9yIGV4YW1wbGUgOlxyXG4qIHRoZSBkZWxpbWl0ZXIgaXMgJzsnIGFuZCB0aGUgc3RyaW5nIGlzOiBcImZpcnN0OztzZWNvbmQ7dGhpcmRcIlxyXG4qIHRoZW4gaW4gamF2YSBTdHJpbmcgdG9rZW5pemVyIHdpbGwgZ2l2ZSB1cyBvbmx5IDMgdG9rZW5zIDpmaXJzdCxzZWNvbmQgYW5kIHRoaXJkXHJcbiogd2hpbGUgaXMgYyMgc3BsaXQgd2V0aG9kIHdpbGwgcmV0dXJuIDQgdG9rZW5zOiBmaXJzdCxlbXB0eSBzdHJpbmcsc2Vjb25kIGFuZCB0aGlyZFxyXG4qIHdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoYXRcclxuKi9cclxuICAgIC8qXHJcbiAgICBMaXN0IHJlcyAgPSBuZXcgTGlzdCgpO1xyXG4gICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgaWYgKHRva2Vuc1tpXSAhPSBcIlwiIClcclxuICAgIHJlcy5hZGRJdGVtKHRva2Vuc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChTdHJpbmcgW10pKHJlcy5nZXRBbGxJdGVtcyAoU3RyaW5nLmNsYXNzKSk7Ki9cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSBmcm9tIHN0cmluZyB0byBoZXhhIGR1bXAgY2hhciBieSBjaGFyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cmluZ1wiPnRvIHRyYW5zbGF0ZSBpdCB0byB0aGUgYnl0ZSBzdHJlYW08L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWluTGVuZ3RoXCI+dGhlIG1pbmltYWwgbGVuZ3RoIG9mIGhleGEgZGlnaXRzIGZvciBlYWNoIGNoYXI8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGJ5dGUgc3RyZWFtIGluIGZvcm0gb2Ygc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBzdHJpbmdUb0hleGFEdW1wKHN0cjogc3RyaW5nLCBtaW5MZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHN0ci5sZW5ndGggKiBtaW5MZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaW5keDogbnVtYmVyID0gMDsgaW5keCA8IHN0ci5sZW5ndGg7IGluZHggPSBpbmR4ICsgMSkge1xyXG4gICAgICBsZXQgY3VyckludDogbnVtYmVyID0gc3RyLmNoYXJDb2RlQXQoaW5keCk7XHJcbiAgICAgIGxldCBoZXhTdHI6IHN0cmluZyA9IGN1cnJJbnQudG9TdHJpbmcoMTYpO1xyXG4gICAgICB3aGlsZSAoaGV4U3RyLmxlbmd0aCA8IG1pbkxlbmd0aCkge1xyXG4gICAgICAgIGhleFN0ciA9IFwiMFwiICsgaGV4U3RyO1xyXG4gICAgICB9XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKGhleFN0cik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2VhcmNoQW5kUmVwbGFjZShzdHI6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlKHN0cjogc3RyaW5nLCBmcm9tOiBzdHJpbmdbXSwgdG86IHN0cmluZ1tdKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlKHN0cjogc3RyaW5nLCBmcm9tOiBhbnksIHRvOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHN0ciA9PT0gbnVsbCB8fCBzdHIuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKGZyb20gPT09IG51bGwgfHwgZnJvbS5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSAmJiAodG8gPT09IG51bGwgfHwgdG8uY29uc3RydWN0b3IgPT09IFN0cmluZykpIHtcclxuICAgICAgcmV0dXJuIFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZV8wKHN0ciwgZnJvbSwgdG8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZV8xKHN0ciwgZnJvbSwgdG8pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXBsYWNlIGV2ZXJ5IGFwcGVhcmFuY2Ugb2YgJ2Zyb20nIGluICdzdHInIHdpdGggJ3RvJzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgd29ya2luZyBiYXNlIHNvdXJjZSBzdHJpbmcgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmcm9tXCI+dGhlIHN0cmluZyB0byByZXBsYWNlIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9cIj50aGUgc3RyaW5nIHVzZSBpbnN0ZWFkICdmcm9tJyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbW9kaWZpZWQgU3RyaW5nIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlXzAoc3RyOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFzdFN1YlN0cjogbnVtYmVyID0gMDtcclxuICAgIGxldCBzdGFydFN1YlN0cjogbnVtYmVyO1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG5cclxuICAgIGlmICgoc3RhcnRTdWJTdHIgPSBzdHIuaW5kZXhPZihmcm9tKSkgPT09IC0xKSB7XHJcbiAgICAgIHJlc3VsdCA9IHN0cjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHN0ci5sZW5ndGgpO1xyXG4gICAgICB3aGlsZSAoc3RhcnRTdWJTdHIgIT09IC0xKSB7XHJcbiAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3RyLnN1YnN0cihsYXN0U3ViU3RyLCBzdGFydFN1YlN0ciAtIGxhc3RTdWJTdHIpICsgdG8pO1xyXG4gICAgICAgIHN0YXJ0U3ViU3RyID0gc3RhcnRTdWJTdHIgKyBmcm9tLmxlbmd0aDtcclxuICAgICAgICBsYXN0U3ViU3RyID0gc3RhcnRTdWJTdHI7XHJcbiAgICAgICAgc3RhcnRTdWJTdHIgPSBzdHIuaW5kZXhPZihmcm9tLCBsYXN0U3ViU3RyKTtcclxuICAgICAgfVxyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChzdHIuc3Vic3RyKGxhc3RTdWJTdHIpKTtcclxuICAgICAgcmVzdWx0ID0gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVwbGFjZSBldmVyeSBhcHBlYXJhbmNlIG9mIHN0cmluZ3Mgb2YgJ2Zyb20nIGluICdzdHInIHdpdGggdGhlIGFjY29yZGluZyBzdHJpbmcgaW4gJ3RvJzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgd29ya2luZyBiYXNlIHNvdXJjZSBzdHJpbmcgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmcm9tXCI+dGhlIHN0cmluZyB0byByZXBsYWNlIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9cIj50aGUgc3RyaW5nIHVzZSBpbnN0ZWFkICdmcm9tJyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbW9kaWZpZWQgU3RyaW5nIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlXzEoc3RyOiBzdHJpbmcsIGZyb206IHN0cmluZ1tdLCB0bzogc3RyaW5nW10pOiBzdHJpbmcge1xyXG4gICAgbGV0IGxhc3RTdWJTdHI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgc2FySW5kZXg6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZnJvbUNvcHk6IHN0cmluZ1tdID0gZnJvbS5zbGljZSgpO1xyXG4gICAgbGV0IHN0YXJ0U3ViU3RyOiBudW1iZXI7XHJcbiAgICBsZXQgU0FSaW5kZXg6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0oMCk7XHJcbiAgICBzdGFydFN1YlN0ciA9IFN0clV0aWwuaW5kZXhPZihzdHIsIGZyb21Db3B5LCBsYXN0U3ViU3RyLCBTQVJpbmRleCk7XHJcbiAgICBzYXJJbmRleCA9IFNBUmluZGV4LnZhbHVlO1xyXG4gICAgaWYgKHN0YXJ0U3ViU3RyID09PSAtMSlcclxuICAgICAgcmV0dXJuIHN0cjtcclxuXHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBsZXQgdG1wQnVmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoc3RyLmxlbmd0aCk7XHJcbiAgICB3aGlsZSAoc3RhcnRTdWJTdHIgIT09IC0xKSB7XHJcbiAgICAgIHRtcEJ1Zi5BcHBlbmQoc3RyLnN1YnN0cihsYXN0U3ViU3RyLCBzdGFydFN1YlN0ciAtIGxhc3RTdWJTdHIpICsgdG9bc2FySW5kZXhdKTtcclxuICAgICAgc3RhcnRTdWJTdHIgKz0gZnJvbUNvcHlbc2FySW5kZXhdLmxlbmd0aDtcclxuICAgICAgbGFzdFN1YlN0ciA9IHN0YXJ0U3ViU3RyO1xyXG4gICAgICBzdGFydFN1YlN0ciA9IFN0clV0aWwuaW5kZXhPZihzdHIsIGZyb21Db3B5LCBsYXN0U3ViU3RyLCBTQVJpbmRleCk7XHJcbiAgICAgIHNhckluZGV4ID0gU0FSaW5kZXgudmFsdWU7XHJcbiAgICAgIH07XHJcbiAgICB0bXBCdWYuQXBwZW5kKHN0ci5zdWJzdHIobGFzdFN1YlN0cikpO1xyXG4gICAgcmVzdWx0ID0gdG1wQnVmLlRvU3RyaW5nKCk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gdGhpcyBmdW5jdGlvbnMgaXMgZm9yIHVzZSBieSB0aGUgc2VhcmNoQW5kUmVwbGFjZSgpIGZ1bmN0aW9uIC1cclxuICAvLy8gc2VhcmNoZXMgdGhlIG9mZnNldCBvZiB0aGUgc3RyaW5ncyBmcm9tIHRoZSBhcnJheSBpbiB0aGUgZ2l2ZW4gc3RyaW5nXHJcbiAgLy8vIGFuZCByZXR1cm5zIHRoZSBtaW5pbXVtIG9mZnNldCBmb3VuZCBhbmQgc2V0cyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHN0cmluZ1xyXG4gIC8vLyB0byBTQVJpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+dGhlIHN0cmluZyB0byBzZWFyY2ggaW4gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJpbmdzXCI+YW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBzZWFyY2ggZm9yIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib2Zmc2V0XCI+d2hlcmUgdG8gc3RhcnQgdGhlIHNlYXJjaCA8L3BhcmFtPlxyXG4gIHByaXZhdGUgc3RhdGljIGluZGV4T2Yoc3RyOiBzdHJpbmcsIHN0cmluZ3M6IHN0cmluZ1tdLCBvZmZzZXQ6IG51bWJlciwgU0FSaW5kZXg6IFJlZlBhcmFtPG51bWJlcj4pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbk9mZnNldDogbnVtYmVyID0gLTE7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICBpZiAoIShzdHJpbmdzW2ldID09PSBudWxsKSkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQ6IG51bWJlciA9IHN0ci5pbmRleE9mKHN0cmluZ3NbaV0sIG9mZnNldCk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICBzdHJpbmdzW2ldID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0IDwgbWluT2Zmc2V0IHx8IG1pbk9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgbWluT2Zmc2V0ID0gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICBTQVJpbmRleC52YWx1ZSA9IGk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyO1xyXG4gICAgaWYgKG1pbk9mZnNldCA+IC0xKSB7XHJcbiAgICAgIHJlc3VsdCA9IG1pbk9mZnNldDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBTQVJpbmRleC52YWx1ZSA9IC0xO1xyXG4gICAgICByZXN1bHQgPSAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlcGxhY2UgdG9rZW5zIGluIHVzZXIgc3RyaW5nIGJ5IHZlY3RvciB2YWx1ZXMgPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInVzZXJTdHJpbmdcIj4tIHVzZXIgYnVmZmVyIGxpa2UgXCJVc2VyICVkLCAlZCBzdHJpbmdcIlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRva2VuXCI+LSB0b2tlbiB1c2VkIGluIHVzZXIgc3RyaW5nIC0gaS5lLiBcIiVkXCJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvY2N1cnJlbmNlXCI+LSBudW1iZXIgb2YgdG9rZW4gd2hlcmUgcmVwbGFjZSB3aWxsIHRha2UgcGFydCAoMSBmb3IgZmlyc3Qgb2NjdXJyZW5jZSlcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVwiPi0gdmFsdWUgdG8gYmUgaW5zZXJ0ZWQgaW5zdGVkIG9mIHRva2VuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgc3RhdGljIHJlcGxhY2VTdHJpbmdUb2tlbnModXNlclN0cmluZzogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBvY2N1cnJlbmNlOiBudW1iZXIsIHZhbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCB0b2tlbkxlbjogbnVtYmVyID0gdG9rZW4ubGVuZ3RoO1xyXG4gICAgbGV0IGN1cnJQb3NpdGlvbjogbnVtYmVyID0gMDtcclxuICAgIGxldCBuZXdTdHJpbmc6IHN0cmluZyA9IHVzZXJTdHJpbmc7XHJcblxyXG4gICAgaWYgKHZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgbnVtMjogbnVtYmVyID0gMDtcclxuICAgICAgd2hpbGUgKG51bTIgPCBvY2N1cnJlbmNlICYmIGN1cnJQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICBjdXJyUG9zaXRpb24gPSB1c2VyU3RyaW5nLmluZGV4T2YodG9rZW4sIGN1cnJQb3NpdGlvbiArICgobnVtMiA9PT0gMCkgPyAwIDogdG9rZW5MZW4pKTtcclxuICAgICAgICBudW0yID0gbnVtMiArIDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjdXJyUG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgbmV3U3RyaW5nID0gdXNlclN0cmluZy5zdWJzdHIoMCwgY3VyclBvc2l0aW9uKSArIHZhbCArIHVzZXJTdHJpbmcuc3Vic3RyKGN1cnJQb3NpdGlvbiArIHRva2VuTGVuLCB1c2VyU3RyaW5nLmxlbmd0aCAtIChjdXJyUG9zaXRpb24gKyB0b2tlbkxlbikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3U3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1ha2VQcmludGFibGVUb2tlbnMoc291cmNlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IHN0cmluZztcclxuICBzdGF0aWMgbWFrZVByaW50YWJsZVRva2Vucyhzb3VyY2U6IHN0cmluZywgdHlwZTogbnVtYmVyKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlVG9rZW5zKHNvdXJjZTogTGlzdDxzdHJpbmc+LCB0eXBlOiBudW1iZXIpOiBzdHJpbmc7XHJcbiAgc3RhdGljIG1ha2VQcmludGFibGVUb2tlbnMoc291cmNlOiBhbnksIHR5cGU6IGFueSk6IHN0cmluZyB8IHZvaWR7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiAoc291cmNlID09PSBudWxsIHx8IHNvdXJjZS5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSAmJiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiBTdHJVdGlsLm1ha2VQcmludGFibGVUb2tlbnNfMChzb3VyY2UsIHR5cGUpO1xyXG4gICAgfVxyXG4gICAgU3RyVXRpbC5tYWtlUHJpbnRhYmxlVG9rZW5zXzEoc291cmNlLCB0eXBlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb252ZXJ0cyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSB0b2tlbiB0byBhIHByaW50YWJsZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlXCI+YSB0b2tlbiA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPnR5cGUgb2YgY29udmVyc2lvbjogU1RSXzJfSFRNTCwgU0VRXzJfSFRNTCwgSFRNTF8yX1NFUSwgSFRNTF8yX1NUUiwgU0VRXzJfU1RSIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0b2tlbiB3aXRoIGNvbnZlcnRlZCBzcGVjaWFsIGNoYXJhY3RlcnMgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlVG9rZW5zXzAoc291cmNlOiBzdHJpbmcsIHR5cGU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgZXNjU3RyOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJcXFxcXCIsIFwiLVwiLCBcIixcIlxyXG4gICAgXTtcclxuICAgIGxldCBlc2NTZXE6IHN0cmluZ1tdID0gW1xyXG4gICAgICBcIlxcXFxcXFxcXCIsIFwiXFxcXC1cIiwgXCJcXFxcLFwiXHJcbiAgICBdO1xyXG4gICAgbGV0IGVzY0h0bTogc3RyaW5nW10gPSBbXHJcbiAgICAgIEhUTUxfQkFDS1NMQVNILCBIVE1MX0hZUEhFTiwgSFRNTF9DT01NQVxyXG4gICAgXTtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFNUUl8yX0hUTUw6XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZXNjU3RyLCBlc2NIdG0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNFUV8yX0hUTUw6XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZXNjU2VxLCBlc2NIdG0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEhUTUxfMl9TRVE6XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZXNjSHRtLCBlc2NTZXEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEhUTUxfMl9TVFI6XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZXNjSHRtLCBlc2NTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNFUV8yX1NUUjpcclxuICAgICAgICByZXN1bHQgPSBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2Uoc291cmNlLCBlc2NTZXEsIGVzY1N0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmVzdWx0ID0gc291cmNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29udmVydHMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgdG9rZW5zIGNvbGxlY3Rpb24gdG8gYSBwcmludGFibGUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVwiPnZlY3RvciBvZiBzdHJpbmdzIGJlZm9yZSB0b2tlbmFpemVyIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlXCI+dHlwZSBvZiBjb252ZXJzaW9uOiBTVFJfMl9IVE1MLCBTRVFfMl9IVE1MLCBIVE1MXzJfU0VRLCBIVE1MXzJfU1RSIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWFrZVByaW50YWJsZVRva2Vuc18xKHNvdXJjZTogTGlzdDxzdHJpbmc+LCB0eXBlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGxlbmd0aDogbnVtYmVyID0gc291cmNlLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgbGV0IGN1cnJFbG06IHN0cmluZyA9IHNvdXJjZS5nZXRfSXRlbShpKTtcclxuICAgICAgICBzb3VyY2Uuc2V0X0l0ZW0oaSwgU3RyVXRpbC5tYWtlUHJpbnRhYmxlVG9rZW5zXzAoY3VyckVsbSwgdHlwZSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hhbmdlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBsaWtlIFwibmV3IGxpbmVcIiBhbmQgXCJsaW5lIGZlZWRcIiB0byB0aGVpclxyXG4gIC8vLyAgIHByaW50YWJsZSByZXByZXNlbnRhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj5pcyB0aGUgc3RyaW5nIHdpdGggbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbmV3IHN0cmluZyB3aGVyZSBhbGwgdGhlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBhcmUgY29udmVydGVkIDwvcmV0dXJucz5cclxuICBzdGF0aWMgbWFrZVByaW50YWJsZShzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgZnJvbTogc3RyaW5nW10gPSBbXHJcbiAgICAgIFwiXFxuXCIsIFwiXFxyXCIsIFwiJ1wiLCBcIlxcXFxcIiwgXCJcXFwiXCIsIFwiXFwwXCJcclxuICAgIF07XHJcbiAgICBsZXQgdG86IHN0cmluZ1tdID0gW1xyXG4gICAgICBcIlxcXFxuXCIsIFwiXFxcXHJcIiwgXCJcXFxcJ1wiLCBcIlxcXFxcXFxcXCIsIFwiXFxcXFxcXCJcIiwgXCJcXFxcMFwiXHJcbiAgICBdO1xyXG4gICAgcmV0dXJuIFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGZyb20sIHRvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjaGFuZ2Ugbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGxpa2UgXCJuZXcgbGluZVwiIGFuZCBcImxpbmUgZmVlZFwiIHRvIHRoZWlyXHJcbiAgLy8vICAgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uIChzaW1wbGlmaWVkIHZlcnNpb24gZm9yIHJhbmdlIGVycm9yIG1lc3NhZ2UpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVwiPmlzIHRoZSBzdHJpbmcgd2l0aCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBuZXcgc3RyaW5nIHdoZXJlIGFsbCB0aGUgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0ZWQgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlMihzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgZnJvbTogc3RyaW5nW10gPSBbXHJcbiAgICAgIFwiXFxuXCIsIFwiXFxyXCIsIFwiXFwwXCJcclxuICAgIF07XHJcbiAgICBsZXQgdG86IHN0cmluZ1tdID0gW1xyXG4gICAgICBcIlxcXFxuXCIsIFwiXFxcXHJcIiwgXCJcXFxcMFwiXHJcbiAgICBdO1xyXG4gICAgcmV0dXJuIFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGZyb20sIHRvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxlblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgWnN0cmluZ01ha2Uoczogc3RyaW5nLCBsZW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZW4gPSBTdHJVdGlsLm1lbV90cmltKHMsIGxlbik7XHJcbiAgICByZXR1cm4gcy5zdWJzdHIoMCwgbGVuKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHVibGljKVxyXG4gIC8vLyByZXR1cm5zIHBsYWluIHRleHQgZnJvbSBydGYgdGV4dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicnRmVGV4dFwiPnJlZmVyIHRvIHRoZSBzdW1tYXJ5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+cmVmZXIgdG8gdGhlIHN1bW1hcnk8L3JldHVybnM+XHJcbiAgc3RhdGljIEdldFBsYWluVGV4dGZyb21SdGYocnRmVGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChSdGYuaXNSdGYocnRmVGV4dCkpIHtcclxuICAgICAgbGV0IHJ0ZjogUnRmID0gbmV3IFJ0ZigpO1xyXG4gICAgICBsZXQgb3V0cHV0VHh0OiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoXCJcIik7XHJcbiAgICAgIHJ0Zi50b1R4dChydGZUZXh0LCBvdXRwdXRUeHQpO1xyXG4gICAgICBydGZUZXh0ID0gb3V0cHV0VHh0LlRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcnRmVGV4dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJpbmcgYXJyYXlzIHN0cjEgJiBzdHIyIGFyZSBlcXVhbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyMVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyMlwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgU3RyaW5nc0FycmF5c0VxdWFsKHN0cjE6IHN0cmluZ1tdLCBzdHIyOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbjtcclxuICAgIGlmIChzdHIxID09PSBudWxsICYmIHN0cjIgPT09IG51bGwpIHtcclxuICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoc3RyMSA9PT0gbnVsbCB8fCBzdHIyID09PSBudWxsKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHN0cjEubGVuZ3RoICE9PSBzdHIyLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZm9yIChsZXQgaW5kZXg6IG51bWJlciA9IDA7IGluZGV4IDwgPG51bWJlcj5zdHIxLmxlbmd0aDsgaW5kZXggPSBpbmRleCArIDEpIHtcclxuICAgICAgICAgICAgaWYgKChzdHIxW2luZGV4XSAhPT0gc3RyMltpbmRleF0pKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRoZSBjb2RlIGlzIGNvcGllZCBmcm9tIHRza19vcGVuX2JuZF93aWxkIGFuZCBTZWFyY2hBbmRSZXBsYWNlV2lsZENoYXJzXHJcbiAgLy8vIFRoZSByZWZhY3RvcmluZyBpcyBub3QgcGVyZm9ybWVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxyXG4gIC8vLyBUaGUgY29kZSByZXBsYWNlcyBzcGVjaWFsIGNoYXJhY2h0ZXJzIDoqID8gd2l0aCByZWNpZXZlZCBmaWxsZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIFNlYXJjaEFuZFJlcGxhY2VXaWxkQ2hhcnMoYnVmOiBzdHJpbmcsIGxlbjogbnVtYmVyLCBmaWxsZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBidWYgPSBOU3RyaW5nLlBhZFJpZ2h0KGJ1ZiwgbGVuKTtcclxuXHJcbiAgICBsZXQgZXNjQ2hhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHRtcEJ1ZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGxlbik7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpID0gaSArIDEpIHtcclxuICAgICAgc3dpdGNoIChidWZbaV0pIHtcclxuICAgICAgICBjYXNlICgnXFxcXCcpOiB7XHJcbiAgICAgICAgICBsZXQgaXNOZXh0Q2hhcldpbGQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICAgIC8vSWYgbmV4dCBjaGFyIGlzIG5vdCB3aWxkICwgdGhlbiBjb3B5ICdcXCcsIGlmIHRoaXMgaXMgZmlyc3QgY2hhci5cclxuICAgICAgICAgIGlmICgoaSArIDEgPCBsZW4pICYmIChidWZbaSArIDFdICE9ICcqJyAmJiBidWZbaSArIDFdICE9ICdcXFxcJykpXHJcbiAgICAgICAgICAgIGlzTmV4dENoYXJXaWxkID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZXNjQ2hhciB8fCAhaXNOZXh0Q2hhcldpbGQpXHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoYnVmW2ldKTtcclxuICAgICAgICAgIGVzY0NoYXIgPSAhZXNjQ2hhcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICgnKicpOlxyXG4gICAgICAgICAgaWYgKGVzY0NoYXIpXHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoYnVmW2ldKTtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKGZpbGxlciwgbGVuIC0gdG1wQnVmLkxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlc2NDaGFyID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICc/JzpcclxuICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoZmlsbGVyKTtcclxuICAgICAgICAgIGVzY0NoYXIgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0bXBCdWYuQXBwZW5kKGJ1ZltpXSk7XHJcbiAgICAgICAgICBlc2NDaGFyID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB0ZXh0OiBzdHJpbmcgPSB0bXBCdWYuVG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBOU3RyaW5nLlRyaW1FbmQoTlN0cmluZy5UcmltRW5kKHRleHQsIFsnXFwwJ10pKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVtb3ZlIHRoZSB0YXNrIHBhdGggZGVsaW1pdGVyIGZyb20gdGhlIGVycm9yIHN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlXCI+c3RyaW5nIHdpdGggZGVsaW1pdGVyIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgZm9yIGNvbnNvbGUgZXJyb3IgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRDb25zb2xlRXJvclN0cmluZyhzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29uc29sZUVyb3JTdHJpbmc6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChzb3VyY2UpKVxyXG4gICAgICBjb25zb2xlRXJvclN0cmluZyA9IHRoaXMuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIFRBU0tfUEFUSF9ERUxJTUlURVIsIFwiXCIpO1xyXG5cclxuICAgIHJldHVybiBjb25zb2xlRXJvclN0cmluZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVtb3ZlIHRoZSB0YXNrIHBhdGggZnJvbSB0aGUgZXJyb3Igc3RyaW5nLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj5zdHJpbmcgd2l0aCBkZWxpbWl0ZXIgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0cmluZyBmb3IgY29uc29sZSBlcnJvciA8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldE1zZ0JveEVyb3JTdHJpbmcoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRva2Vuczogc3RyaW5nIFtdO1xyXG4gICAgbGV0IG1zZ0JveEVyb3JTdHJpbmc6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihcIlwiKTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHNvdXJjZSkpe1xyXG4gICAgICB0b2tlbnMgPSB0aGlzLnRva2VuaXplKHNvdXJjZSwgVEFTS19QQVRIX0RFTElNSVRFUik7XHJcblxyXG4gICAgICBmb3IgKGxldCBpOm51bWJlciA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgIHtcclxuICAgICAgICBtc2dCb3hFcm9yU3RyaW5nLkFwcGVuZCh0b2tlbnNbaV0pO1xyXG4gICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcmV0dXJuIG1zZ0JveEVyb3JTdHJpbmcudG9TdHJpbmcoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -2,13 +2,6 @@ import { PICInterface } from "./PICInterface";
2
2
  import { UtilStrByteMode } from "./UtilStrByteMode";
3
3
  import { NNumber } from "@magic-xpa/mscorelib";
4
4
  const MAX_GENGO = 6;
5
- const IDX_UPPERCASE_ALPHA = 0;
6
- const IDX_LOWERCASE_ALPHA = 1;
7
- const IDX_KANJI = 2;
8
- const IDX_YEAR = 0;
9
- const IDX_MONTH = 1;
10
- const IDX_DAY = 2;
11
- const IDX_DOY = 3;
12
5
  export class UtilDateJpn {
13
6
  constructor() {
14
7
  this.MaxGengo = MAX_GENGO;
@@ -238,4 +231,4 @@ UtilDateJpn.StartDayOfGengo = [
238
231
  [0, 0, 0, 0],
239
232
  [0, 0, 0, 0]
240
233
  ];
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXRpbERhdGVKcG4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91dGlscy9zcmMvVXRpbERhdGVKcG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQVUsT0FBTyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsTUFBTSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sbUJBQW1CLEdBQVcsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sbUJBQW1CLEdBQVcsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sU0FBUyxHQUFXLENBQUMsQ0FBQztBQUM1QixNQUFNLFFBQVEsR0FBVyxDQUFDLENBQUM7QUFDM0IsTUFBTSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sT0FBTyxHQUFXLENBQUMsQ0FBQztBQUMxQixNQUFNLE9BQU8sR0FBVyxDQUFDLENBQUM7QUFHMUIsTUFBTSxPQUFPLFdBQVc7SUFBeEI7UUF3Q1UsYUFBUSxHQUFXLFNBQVMsQ0FBQztJQXdSdkMsQ0FBQztJQXRSQyxNQUFNLENBQUMsV0FBVztRQUNoQixJQUFJLFdBQVcsQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFO1lBQ2xDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztTQUMzQztRQUNELE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVc7UUFDaEIsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQWM7UUFDN0IsSUFBSSxJQUFJLEdBQVksTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQzdDLElB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QUFHLENBQUMsRUFBRyxDQUFDLEVBQUksQ0FBQyxDQUFDO0lBQ25CLENBQUMsSUFBSSxFQUFHLENBQUMsRUFBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxFQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDYixDQUFDLENBQUMsRUFBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BJQ0ludGVyZmFjZX0gZnJvbSBcIi4vUElDSW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7VXRpbFN0ckJ5dGVNb2RlfSBmcm9tIFwiLi9VdGlsU3RyQnl0ZU1vZGVcIjtcclxuaW1wb3J0IHtOU3RyaW5nLCBOTnVtYmVyfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuXHJcbmNvbnN0IE1BWF9HRU5HTzogbnVtYmVyID0gNjtcclxuY29uc3QgSURYX1VQUEVSQ0FTRV9BTFBIQTogbnVtYmVyID0gMDtcclxuY29uc3QgSURYX0xPV0VSQ0FTRV9BTFBIQTogbnVtYmVyID0gMTtcclxuY29uc3QgSURYX0tBTkpJOiBudW1iZXIgPSAyO1xyXG5jb25zdCBJRFhfWUVBUjogbnVtYmVyID0gMDtcclxuY29uc3QgSURYX01PTlRIOiBudW1iZXIgPSAxO1xyXG5jb25zdCBJRFhfREFZOiBudW1iZXIgPSAyO1xyXG5jb25zdCBJRFhfRE9ZOiBudW1iZXIgPSAzO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBVdGlsRGF0ZUpwbiB7XHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAvLy8gICBVdGlsaXR5IENsYXNzIGZvciBKYXBhbmVzZSBkYXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPGF1dGhvcj4gIFRvc2hpcm8gTmFrYXlvc2hpIChNU0opXHJcbiAgLy8vIDwvYXV0aG9yPlxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFV0aWxEYXRlSnBuID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgSndlZWtTdHI6IHN0cmluZ1tdID0gW1xyXG4gICAgXCIgICBcIiwgXCLml6Xmm5zml6VcIiwgXCLmnIjmm5zml6VcIiwgXCLngavmm5zml6VcIiwgXCLmsLTmm5zml6VcIiwgXCLmnKjmm5zml6VcIiwgXCLph5Hmm5zml6VcIiwgXCLlnJ/mm5zml6VcIlxyXG4gIF07XHJcbiAgcHJpdmF0ZSBzdGF0aWMgSm1vbnRoU3RyOiBzdHJpbmdbXSA9IFtcclxuICAgIFwiXCIsIFwiIDHmnIhcIiwgXCIgMuaciFwiLCBcIiAz5pyIXCIsIFwiIDTmnIhcIiwgXCIgNeaciFwiLCBcIiA25pyIXCIsIFwiIDfmnIhcIiwgXCIgOOaciFwiLCBcIiA55pyIXCIsIFwiMTDmnIhcIiwgXCIxMeaciFwiLCBcIjEy5pyIXCJcclxuICBdO1xyXG4gIHByaXZhdGUgc3RhdGljIEdlbmdvU3RyOiBzdHJpbmdbXVtdID0gW1xyXG4gICAgW1wiP1wiLCBcIj9cIiwgXCI/Pz8/XCJdLFxyXG4gICAgW1wiTVwiLCBcIm1cIiwgXCLmmI7msrtcIl0sXHJcbiAgICBbXCJUXCIsIFwidFwiLCBcIuWkp+ato1wiXSxcclxuICAgIFtcIlNcIiwgXCJzXCIsIFwi5pit5ZKMXCJdLFxyXG4gICAgW1wiSFwiLCBcImhcIiwgXCLlubPmiJBcIl0sXHJcbiAgICBbXCJSXCIsIFwiclwiLCBcIuS7pOWSjFwiXSxcclxuICAgIFtcIj9cIiwgXCI/XCIsIFwi77yf77yfXCJdLFxyXG4gICAgW1wiP1wiLCBcIj9cIiwgXCLvvJ/vvJ9cIl0sXHJcbiAgICBbXCI/XCIsIFwiP1wiLCBcIu+8n++8n1wiXVxyXG4gIF07XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU3RhcnREYXlPZkdlbmdvOiBudW1iZXJbXVtdID0gW1xyXG4gICAgWyAgIDEsICAxLCAgMSwgICAxXSxcclxuICAgIFsxODY4LCAgOSwgIDgsIDI1Ml0sXHJcbiAgICBbMTkxMiwgIDYsIDMwLCAyMTJdLFxyXG4gICAgWzE5MjYsIDEyLCAyNSwgMzU5XSxcclxuICAgIFsxOTg5LCAgMSwgIDgsICAgOF0sXHJcbiAgICBbMjAxOSwgIDUsICAxLCAxMjFdLFxyXG4gICAgWzAsICAwLCAwLCAwXSwgLy8gcmVzZXJ2ZSBmb3IgZXh0cmEgZ2VuZ28geCAzXHJcbiAgICBbMCwgIDAsIDAsIDBdLFxyXG4gICAgWzAsICAwLCAwLCAwXVxyXG4gIF07XHJcblxyXG4gIC8vIC0tLS0gZ2VuZ28gKHRoZSBuYW1lIG9mIGFuIGVyYSkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHByaXZhdGUgTWF4R2VuZ286IG51bWJlciA9IE1BWF9HRU5HTztcclxuXHJcbiAgc3RhdGljIGdldEluc3RhbmNlKCk6IFV0aWxEYXRlSnBuIHtcclxuICAgIGlmIChVdGlsRGF0ZUpwbi5faW5zdGFuY2UgPT09IG51bGwpIHtcclxuICAgICAgVXRpbERhdGVKcG4uX2luc3RhbmNlID0gbmV3IFV0aWxEYXRlSnBuKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXRpbERhdGVKcG4uX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldEFycmF5RG93KCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBVdGlsRGF0ZUpwbi5Kd2Vla1N0cjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRTdHJEb3coaW50SWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZsYWc6IGJvb2xlYW4gPSBpbnRJZHggPCAwIHx8IDcgPCBpbnRJZHg7XHJcbiAgICBpZiAoZmxhZykge1xyXG4gICAgICBpbnRJZHggPSAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFV0aWxEYXRlSnBuLkp3ZWVrU3RyW2ludElkeF07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29udmVydFN0ck1vbnRoKG1vbnRoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZsYWc6IGJvb2xlYW4gPSBtb250aCA8IDAgfHwgMTIgPCBtb250aDtcclxuICAgIGlmIChmbGFnKSB7XHJcbiAgICAgIG1vbnRoID0gMDtcclxuICAgIH1cclxuICAgIHJldHVybiBVdGlsRGF0ZUpwbi5KbW9udGhTdHJbbW9udGhdO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnQgYSB5ZWFyIChBLkQuKSBpbnRvIEphcGFuZXNlIHllYXIgb2YgYW4gZXJhXHJcbiAgLy8vICAgVGhpcyBtZXRob2QgaXMgbW9kZWxlZCBhZnRlciBcImRhdGVfanBuX3llYXJfb2ZzXCIgZnVuY3Rpb24gaW5cclxuICAvLy8gICBcIlxcbWdsb2NhbFxcanBuXFxqcG5kYXRlX2pwbi5jcHBcIi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50WWVhcjpcIj55ZWFyIChBLkQuKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50RG95OlwiPkRPWVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4geWVhciBvZiBhbiBlcmEuXHJcbiAgLy8vICAgaWYgZWl0aGVyIHBhcmFtIGlzIGludmFsaWQsIGl0IHJldHVybnMgMC5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGRhdGVfanBuX3llYXJfb2ZzKGludFllYXI6IG51bWJlciwgaW50RG95OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyO1xyXG4gICAgaWYgKGludFllYXIgPCAxIHx8IGludERveSA8IDEpIHtcclxuICAgICAgcmVzdWx0ID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgbnVtOiBudW1iZXIgPSB0aGlzLk1heEdlbmdvIC0gMTtcclxuICAgICAgd2hpbGUgKGludFllYXIgPCBVdGlsRGF0ZUpwbi5TdGFydERheU9mR2VuZ29bbnVtXVswXSkge1xyXG4gICAgICAgIG51bSA9IG51bSAtIDE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGludFllYXIgPT09IFV0aWxEYXRlSnBuLlN0YXJ0RGF5T2ZHZW5nb1tudW1dWzBdICYmIGludERveSA8IFV0aWxEYXRlSnBuLlN0YXJ0RGF5T2ZHZW5nb1tudW1dWzNdKSB7XHJcbiAgICAgICAgbnVtID0gbnVtIC0gMTtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQgPSBpbnRZZWFyIC0gVXRpbERhdGVKcG4uU3RhcnREYXlPZkdlbmdvW251bV1bMF0gKyAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IGEgeWVhciAoQS5ELikgaW50byBhIG5hbWUgb2YgYSBKYXBhbmVzZSBlcmFcclxuICAvLy8gICBUaGlzIG1ldGhvZCBpcyBtb2RlbGVkIGFmdGVyIFwiZGF0ZV9qcG5feXJfMl9hXCIgZnVuY3Rpb24gaW5cclxuICAvLy8gICBcIlxcbWdsb2NhbFxcanBuXFxqcG5kYXRlX2pwbi5jcHBcIi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50WWVhcjpcIj55ZWFyIChBLkQuKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50RG95OlwiPkRPWVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaXNLYW5qaTpcIj5yZXR1cm4gYSBmdWxsIG5hbWUgKHRydWUpIG9yIHRoZSBmaXJzdCBsZXR0ZXIgKGZhbHNlKS5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG5hbWUgb2YgYW4gZXJhXHJcbiAgLy8vICAgaWYgZWl0aGVyIHBhcmFtIGlzIGludmFsaWQsIGl0IHJldHVybnMgXCI/XCIuXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBkYXRlX2pwbl95cl8yX2EoaW50WWVhcjogbnVtYmVyLCBpbnREb3k6IG51bWJlciwgaXNLYW5qaTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgbnVtOiBudW1iZXI7XHJcbiAgICBpZiAoaW50WWVhciA8IDEgfHwgaW50RG95IDwgMSkge1xyXG4gICAgICBudW0gPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIG51bSA9IHRoaXMuTWF4R2VuZ28gLSAxO1xyXG4gICAgICB3aGlsZSAoaW50WWVhciA8IFV0aWxEYXRlSnBuLlN0YXJ0RGF5T2ZHZW5nb1tudW1dWzBdKSB7XHJcbiAgICAgICAgbnVtID0gbnVtIC0gMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaW50WWVhciA9PT0gVXRpbERhdGVKcG4uU3RhcnREYXlPZkdlbmdvW251bV1bMF0gJiYgaW50RG95IDwgVXRpbERhdGVKcG4uU3RhcnREYXlPZkdlbmdvW251bV1bM10pIHtcclxuICAgICAgICBudW0gPSBudW0gLSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBpZiAoaXNLYW5qaSkge1xyXG4gICAgICByZXN1bHQgPSBVdGlsRGF0ZUpwbi5HZW5nb1N0cltudW1dWzJdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IFV0aWxEYXRlSnBuLkdlbmdvU3RyW251bV1bMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgZmlyc3QgeWVhciAoQS5ELikgb2YgYSBzcGVjaWZpZWQgSmFwYW5lc2UgZXJhXHJcbiAgLy8vICAgVGhpcyBtZXRob2QgaXMgbW9kZWxlZCBhZnRlciBcImRhdGVfanBuX3lyXzRfYVwiIGZ1bmN0aW9uIGluXHJcbiAgLy8vICAgXCJcXG1nbG9jYWxcXGpwblxcanBuZGF0ZV9qcG4uY3BwXCIuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInVjcF9zdHI6XCI+bmFtZSBvZiBhIHNwZWNpZmllZCBKYXBhbmVzZSBlcmFcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNfbGVuOlwiPmxlbmd0aCAodGhlIG51bWJlciBvZiBieXRlcykgb2YgdWNwX3N0clxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4geWVhciAoQS5ELilcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZGF0ZV9qcG5feXJfNF9hKHVjcF9zdHI6IHN0cmluZywgc19sZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gdGhpcy5NYXhHZW5nbyAtIDE7XHJcbiAgICBpZiAoc19sZW4gPiAwKSB7XHJcbiAgICAgIGlmIChzX2xlbiA+IDEpIHtcclxuICAgICAgICB1Y3Bfc3RyID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKHVjcF9zdHIsIHNfbGVuKTtcclxuICAgICAgfVxyXG4gICAgICB3aGlsZSAoaSA+IDApIHtcclxuICAgICAgICBpZiAoc19sZW4gPT09IDEpIHtcclxuICAgICAgICAgIGlmICh1Y3Bfc3RyID09PSBVdGlsRGF0ZUpwbi5HZW5nb1N0cltpXVswXSB8fCB1Y3Bfc3RyID09PSBVdGlsRGF0ZUpwbi5HZW5nb1N0cltpXVsxXSkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoc19sZW4gPiAxKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZXh0OiBzdHJpbmcgPSBVdGlsU3RyQnl0ZU1vZGUubGVmdEIoVXRpbERhdGVKcG4uR2VuZ29TdHJbaV1bMl0sIHNfbGVuKTtcclxuICAgICAgICAgICAgaWYgKHVjcF9zdHIgPT09IHRleHQpIHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpID0gaSAtIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCByZXN1bHQ6IG51bWJlcjtcclxuICAgIGlmIChpID4gMCkge1xyXG4gICAgICByZXN1bHQgPSBVdGlsRGF0ZUpwbi5TdGFydERheU9mR2VuZ29baV1bMF07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3QgdGV4dDogc3RyaW5nID0gdWNwX3N0ci5zdWJzdHIoMCwgMSk7XHJcbiAgICAgIGlmICh0ZXh0ID09PSBcIiBcIiB8fCB0ZXh0ID09PSBcIj9cIikge1xyXG4gICAgICAgIHJlc3VsdCA9IDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0ID0gMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIG5hbWUgb2YgYW4gZXJhIGluIGRhdGUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0ckRhdGU6XCI+c3RyaW5nIG9mIGlucHV0IHN0ckRhdGVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clBpY3R1cmU6XCI+c3RyaW5nIG9mIHBpY3R1cmVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImludFN0YXJ0UG9zOlwiPnN0YXJ0IHBvc2l0aW9uIHRvIHNlYXJjaFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbmFtZSBvZiBhbiBlcmFcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGdldEVyYU5hbWVTdHJJbkRhdGUoc3RyRGF0ZTogc3RyaW5nLCBzdHJQaWN0dXJlOiBzdHJpbmcsIGludFN0YXJ0UG9zOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcclxuICAgIGxldCBpbnRQaWNJZHhPZnM6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gaW50U3RhcnRQb3M7XHJcbiAgICB3aGlsZSAoaSArIGludFBpY0lkeE9mcyA8IHN0clBpY3R1cmUubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBpbnRMZXR0ZXJzOiBudW1iZXI7XHJcbiAgICAgIGlmIChzdHJQaWN0dXJlLmNoYXJDb2RlQXQoaSArIGludFBpY0lkeE9mcykgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlkxKSB7XHJcbiAgICAgICAgaW50TGV0dGVycyA9IDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHN0clBpY3R1cmUuY2hhckNvZGVBdChpICsgaW50UGljSWR4T2ZzKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTIpIHtcclxuICAgICAgICAgIGludExldHRlcnMgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChzdHJQaWN0dXJlLmNoYXJDb2RlQXQoaSArIGludFBpY0lkeE9mcykgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlk0KSB7XHJcbiAgICAgICAgICAgIGludExldHRlcnMgPSAyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gSWYgXCJzdHJEYXRlXCIgY29udGFpbnMgREJDUywgdGhlIHBvc2l0aW9uIG9mIFwic3RyUGljdHVyZVwiIGhhcyB0byBza2lwIG5leHQgaW5kZXguXHJcbiAgICAgICAgICAgIGlmIChpIDwgc3RyRGF0ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBpZiAoIVV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChzdHJEYXRlW2ldKSAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoc3RyUGljdHVyZVtpICsgaW50UGljSWR4T2ZzXSkpIHtcclxuICAgICAgICAgICAgICAgIGludFBpY0lkeE9mcyA9IGludFBpY0lkeE9mcyArIDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCA9IHN0ckRhdGUuc3Vic3RyKGksIGludExldHRlcnMpO1xyXG4gICAgICBicmVhazsgLy8gZXhpdCBsb29wXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIG9mIGFuIGVyYSBpbiBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clBpY3R1cmVcIj5zdHJpbmcgb2YgcGljdHVyZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50U3RhcnRQb3NcIj5zdGFydCBwb3NpdGlvbiB0byBzZWFyY2hcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGxlbmd0aCBvZiB0aGUgbmFtZSAodGhlIG51bWJlciBvZiBieXRlcylcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGdldEVyYU5hbWVMZW5JblBpY3R1cmUoc3RyUGljdHVyZTogc3RyaW5nLCBpbnRTdGFydFBvczogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBpbnRMZXR0ZXJzOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gaW50U3RhcnRQb3M7IGkgPCBzdHJQaWN0dXJlLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGlmIChzdHJQaWN0dXJlLmNoYXJDb2RlQXQoaSkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlkxKSB7XHJcbiAgICAgICAgaW50TGV0dGVycyA9IDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHN0clBpY3R1cmUuY2hhckNvZGVBdChpKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTIpIHtcclxuICAgICAgICAgIGludExldHRlcnMgPSAyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChzdHJQaWN0dXJlLmNoYXJDb2RlQXQoaSkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlk0KSB7XHJcbiAgICAgICAgICAgIGludExldHRlcnMgPSA0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaW50TGV0dGVycyA+IDApIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGludExldHRlcnM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBzdGFydCB5ZWFyIG9mIGFuIGVyYSBpbiBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0ckRhdGU6XCI+c3RyaW5nIG9mIGlucHV0IHN0ckRhdGVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clBpY3R1cmU6XCI+c3RyaW5nIG9mIHBpY3R1cmVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0YXJ0IHllYXIgb2YgdGhlIGVyYVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZ2V0U3RhcnRZZWFyT2ZFcmEoc3RyRGF0ZTogc3RyaW5nLCBzdHJQaWN0dXJlOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IGVyYU5hbWVTdHJJbkRhdGU6IHN0cmluZyA9IFV0aWxEYXRlSnBuLmdldEVyYU5hbWVTdHJJbkRhdGUoc3RyRGF0ZSwgc3RyUGljdHVyZSwgMCk7XHJcbiAgICBsZXQgcmVzdWx0OiBudW1iZXI7XHJcbiAgICBpZiAoZXJhTmFtZVN0ckluRGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXN1bHQgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBlcmFOYW1lTGVuSW5QaWN0dXJlOiBudW1iZXIgPSBVdGlsRGF0ZUpwbi5nZXRFcmFOYW1lTGVuSW5QaWN0dXJlKHN0clBpY3R1cmUsIDApO1xyXG4gICAgICBpZiAoZXJhTmFtZUxlbkluUGljdHVyZSA9PT0gMCkge1xyXG4gICAgICAgIHJlc3VsdCA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGludFN0YXJ0WWVhck9mRXJhOiBudW1iZXIgPSB0aGlzLmRhdGVfanBuX3lyXzRfYShlcmFOYW1lU3RySW5EYXRlLCBlcmFOYW1lTGVuSW5QaWN0dXJlKTtcclxuICAgICAgICByZXN1bHQgPSBpbnRTdGFydFllYXJPZkVyYTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQWRkIGV4dHJhIEdlbmdvIGRhdGEgaW50byB0aGUgR2VuZ28gdGFibGVzPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0ckV4dHJhR2VuZ286XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgYWRkRXh0cmFHZW5nbyhzdHJFeHRyYUdlbmdvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIGUuZy4gc3RyRXh0cmFHZW5nbyA9IFwiMjAxMi8wNC8wMSwwOTIsQWFBQkNEOzIwMTMvMDQvMDEsMDkxLFd3V1hZWjtcIlxyXG4gICAgbGV0IHN0ckdlbmdvSW5mbzogc3RyaW5nW10gPSBzdHJFeHRyYUdlbmdvLnNwbGl0KCc7Jyk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3RyR2VuZ29JbmZvLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGlmIChzdHJHZW5nb0luZm9baV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCBzdHJUb2s6IHN0cmluZ1tdID0gc3RyR2VuZ29JbmZvW2ldLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgaWYgKHN0clRvay5sZW5ndGggPT09IDMgJiYgc3RyVG9rWzBdLmxlbmd0aCA+IDAgJiYgc3RyVG9rWzFdLmxlbmd0aCA+IDAgJiYgc3RyVG9rWzJdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCBzdHJEYXRlOiBzdHJpbmdbXSA9IHN0clRva1swXS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgaWYgKHN0ckRhdGUubGVuZ3RoID09PSAzICYmIHN0ckRhdGVbMF0ubGVuZ3RoID4gMCAmJiBzdHJEYXRlWzFdLmxlbmd0aCA+IDAgJiYgc3RyRGF0ZVsyXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIFV0aWxEYXRlSnBuLkdlbmdvU3RyW01BWF9HRU5HTyArIGldWzBdID0gc3RyVG9rWzJdLnN1YnN0cigwLCAxKTsgLy8gc3ltYm9sIG5hbWUgKHVwcGVyIGNhc2UpOiBBXHJcbiAgICAgICAgICAgIFV0aWxEYXRlSnBuLkdlbmdvU3RyW01BWF9HRU5HTyArIGldWzFdID0gc3RyVG9rWzJdLnN1YnN0cigxLCAxKTsgLy8gc3ltYm9sIG5hbWUgKGxvd2VyIGNhc2UpOiBhXHJcbiAgICAgICAgICAgIFV0aWxEYXRlSnBuLkdlbmdvU3RyW01BWF9HRU5HTyArIGldWzJdID0gc3RyVG9rWzJdLnN1YnN0cigyKTsgICAgLy8gZ2VuZ28gbmFtZTogQUJDRFxyXG5cclxuICAgICAgICAgICAgVXRpbERhdGVKcG4uU3RhcnREYXlPZkdlbmdvW01BWF9HRU5HTyArIGldWzBdID0gTk51bWJlci5QYXJzZShzdHJEYXRlWzBdKTsgICAgLy8gc3RhcnQgeWVhcjogMjAxMlxyXG4gICAgICAgICAgICBVdGlsRGF0ZUpwbi5TdGFydERheU9mR2VuZ29bTUFYX0dFTkdPICsgaV1bMV0gPSBOTnVtYmVyLlBhcnNlKHN0ckRhdGVbMV0pOyAgICAvLyBzdGFydCBtb250aDogNFxyXG4gICAgICAgICAgICBVdGlsRGF0ZUpwbi5TdGFydERheU9mR2VuZ29bTUFYX0dFTkdPICsgaV1bMl0gPSBOTnVtYmVyLlBhcnNlKHN0ckRhdGVbMl0pOyAgICAvLyBzdGFydCBkYXk6IDFcclxuICAgICAgICAgICAgVXRpbERhdGVKcG4uU3RhcnREYXlPZkdlbmdvW01BWF9HRU5HTyArIGldWzNdID0gTk51bWJlci5QYXJzZShzdHJUb2tbMV0pOyAgICAgLy8gZGF5cyBzaW5jZSBKYW51YXJ5IDE6IDkyXHJcbiAgICAgICAgICAgIHRoaXMuTWF4R2VuZ28rKztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXRpbERhdGVKcG4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91dGlscy9zcmMvVXRpbERhdGVKcG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFN0MsTUFBTSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBSTVCLE1BQU0sT0FBTyxXQUFXO0lBQXhCO1FBd0NVLGFBQVEsR0FBVyxTQUFTLENBQUM7SUF3UnZDLENBQUM7SUF0UkMsTUFBTSxDQUFDLFdBQVc7UUFDaEIsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtZQUNsQyxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7U0FDM0M7UUFDRCxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXO1FBQ2hCLE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFjO1FBQzdCLElBQUksSUFBSSxHQUFZLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUM3QyxJQUFJLElBQUksRUFBRTtZQUNSLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDWjtRQUNELE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFhO1FBQ2xDLElBQUksSUFBSSxHQUFZLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztRQUM1QyxJQUFJLElBQUksRUFBRTtZQUNSLEtBQUss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RUFBRSxDQUFDLENBQUM7Q0FDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQSUNJbnRlcmZhY2V9IGZyb20gXCIuL1BJQ0ludGVyZmFjZVwiO1xyXG5pbXBvcnQge1V0aWxTdHJCeXRlTW9kZX0gZnJvbSBcIi4vVXRpbFN0ckJ5dGVNb2RlXCI7XHJcbmltcG9ydCB7Tk51bWJlcn0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcblxyXG5jb25zdCBNQVhfR0VOR086IG51bWJlciA9IDY7XHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBVdGlsRGF0ZUpwbiB7XHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuICAvLy8gICBVdGlsaXR5IENsYXNzIGZvciBKYXBhbmVzZSBkYXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPGF1dGhvcj4gIFRvc2hpcm8gTmFrYXlvc2hpIChNU0opXHJcbiAgLy8vIDwvYXV0aG9yPlxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFV0aWxEYXRlSnBuID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgSndlZWtTdHI6IHN0cmluZ1tdID0gW1xyXG4gICAgXCIgICBcIiwgXCLml6Xmm5zml6VcIiwgXCLmnIjmm5zml6VcIiwgXCLngavmm5zml6VcIiwgXCLmsLTmm5zml6VcIiwgXCLmnKjmm5zml6VcIiwgXCLph5Hmm5zml6VcIiwgXCLlnJ/mm5zml6VcIlxyXG4gIF07XHJcbiAgcHJpdmF0ZSBzdGF0aWMgSm1vbnRoU3RyOiBzdHJpbmdbXSA9IFtcclxuICAgIFwiXCIsIFwiIDHmnIhcIiwgXCIgMuaciFwiLCBcIiAz5pyIXCIsIFwiIDTmnIhcIiwgXCIgNeaciFwiLCBcIiA25pyIXCIsIFwiIDfmnIhcIiwgXCIgOOaciFwiLCBcIiA55pyIXCIsIFwiMTDmnIhcIiwgXCIxMeaciFwiLCBcIjEy5pyIXCJcclxuICBdO1xyXG4gIHByaXZhdGUgc3RhdGljIEdlbmdvU3RyOiBzdHJpbmdbXVtdID0gW1xyXG4gICAgW1wiP1wiLCBcIj9cIiwgXCI/Pz8/XCJdLFxyXG4gICAgW1wiTVwiLCBcIm1cIiwgXCLmmI7msrtcIl0sXHJcbiAgICBbXCJUXCIsIFwidFwiLCBcIuWkp+ato1wiXSxcclxuICAgIFtcIlNcIiwgXCJzXCIsIFwi5pit5ZKMXCJdLFxyXG4gICAgW1wiSFwiLCBcImhcIiwgXCLlubPmiJBcIl0sXHJcbiAgICBbXCJSXCIsIFwiclwiLCBcIuS7pOWSjFwiXSxcclxuICAgIFtcIj9cIiwgXCI/XCIsIFwi77yf77yfXCJdLFxyXG4gICAgW1wiP1wiLCBcIj9cIiwgXCLvvJ/vvJ9cIl0sXHJcbiAgICBbXCI/XCIsIFwiP1wiLCBcIu+8n++8n1wiXVxyXG4gIF07XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU3RhcnREYXlPZkdlbmdvOiBudW1iZXJbXVtdID0gW1xyXG4gICAgWyAgIDEsICAxLCAgMSwgICAxXSxcclxuICAgIFsxODY4LCAgOSwgIDgsIDI1Ml0sXHJcbiAgICBbMTkxMiwgIDYsIDMwLCAyMTJdLFxyXG4gICAgWzE5MjYsIDEyLCAyNSwgMzU5XSxcclxuICAgIFsxOTg5LCAgMSwgIDgsICAgOF0sXHJcbiAgICBbMjAxOSwgIDUsICAxLCAxMjFdLFxyXG4gICAgWzAsICAwLCAwLCAwXSwgLy8gcmVzZXJ2ZSBmb3IgZXh0cmEgZ2VuZ28geCAzXHJcbiAgICBbMCwgIDAsIDAsIDBdLFxyXG4gICAgWzAsICAwLCAwLCAwXVxyXG4gIF07XHJcblxyXG4gIC8vIC0tLS0gZ2VuZ28gKHRoZSBuYW1lIG9mIGFuIGVyYSkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHByaXZhdGUgTWF4R2VuZ286IG51bWJlciA9IE1BWF9HRU5HTztcclxuXHJcbiAgc3RhdGljIGdldEluc3RhbmNlKCk6IFV0aWxEYXRlSnBuIHtcclxuICAgIGlmIChVdGlsRGF0ZUpwbi5faW5zdGFuY2UgPT09IG51bGwpIHtcclxuICAgICAgVXRpbERhdGVKcG4uX2luc3RhbmNlID0gbmV3IFV0aWxEYXRlSnBuKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXRpbERhdGVKcG4uX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldEFycmF5RG93KCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBVdGlsRGF0ZUpwbi5Kd2Vla1N0cjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRTdHJEb3coaW50SWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZsYWc6IGJvb2xlYW4gPSBpbnRJZHggPCAwIHx8IDcgPCBpbnRJZHg7XHJcbiAgICBpZiAoZmxhZykge1xyXG4gICAgICBpbnRJZHggPSAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFV0aWxEYXRlSnBuLkp3ZWVrU3RyW2ludElkeF07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29udmVydFN0ck1vbnRoKG1vbnRoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZsYWc6IGJvb2xlYW4gPSBtb250aCA8IDAgfHwgMTIgPCBtb250aDtcclxuICAgIGlmIChmbGFnKSB7XHJcbiAgICAgIG1vbnRoID0gMDtcclxuICAgIH1cclxuICAgIHJldHVybiBVdGlsRGF0ZUpwbi5KbW9udGhTdHJbbW9udGhdO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnQgYSB5ZWFyIChBLkQuKSBpbnRvIEphcGFuZXNlIHllYXIgb2YgYW4gZXJhXHJcbiAgLy8vICAgVGhpcyBtZXRob2QgaXMgbW9kZWxlZCBhZnRlciBcImRhdGVfanBuX3llYXJfb2ZzXCIgZnVuY3Rpb24gaW5cclxuICAvLy8gICBcIlxcbWdsb2NhbFxcanBuXFxqcG5kYXRlX2pwbi5jcHBcIi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50WWVhcjpcIj55ZWFyIChBLkQuKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50RG95OlwiPkRPWVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4geWVhciBvZiBhbiBlcmEuXHJcbiAgLy8vICAgaWYgZWl0aGVyIHBhcmFtIGlzIGludmFsaWQsIGl0IHJldHVybnMgMC5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGRhdGVfanBuX3llYXJfb2ZzKGludFllYXI6IG51bWJlciwgaW50RG95OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyO1xyXG4gICAgaWYgKGludFllYXIgPCAxIHx8IGludERveSA8IDEpIHtcclxuICAgICAgcmVzdWx0ID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgbnVtOiBudW1iZXIgPSB0aGlzLk1heEdlbmdvIC0gMTtcclxuICAgICAgd2hpbGUgKGludFllYXIgPCBVdGlsRGF0ZUpwbi5TdGFydERheU9mR2VuZ29bbnVtXVswXSkge1xyXG4gICAgICAgIG51bSA9IG51bSAtIDE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGludFllYXIgPT09IFV0aWxEYXRlSnBuLlN0YXJ0RGF5T2ZHZW5nb1tudW1dWzBdICYmIGludERveSA8IFV0aWxEYXRlSnBuLlN0YXJ0RGF5T2ZHZW5nb1tudW1dWzNdKSB7XHJcbiAgICAgICAgbnVtID0gbnVtIC0gMTtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQgPSBpbnRZZWFyIC0gVXRpbERhdGVKcG4uU3RhcnREYXlPZkdlbmdvW251bV1bMF0gKyAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IGEgeWVhciAoQS5ELikgaW50byBhIG5hbWUgb2YgYSBKYXBhbmVzZSBlcmFcclxuICAvLy8gICBUaGlzIG1ldGhvZCBpcyBtb2RlbGVkIGFmdGVyIFwiZGF0ZV9qcG5feXJfMl9hXCIgZnVuY3Rpb24gaW5cclxuICAvLy8gICBcIlxcbWdsb2NhbFxcanBuXFxqcG5kYXRlX2pwbi5jcHBcIi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50WWVhcjpcIj55ZWFyIChBLkQuKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50RG95OlwiPkRPWVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaXNLYW5qaTpcIj5yZXR1cm4gYSBmdWxsIG5hbWUgKHRydWUpIG9yIHRoZSBmaXJzdCBsZXR0ZXIgKGZhbHNlKS5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG5hbWUgb2YgYW4gZXJhXHJcbiAgLy8vICAgaWYgZWl0aGVyIHBhcmFtIGlzIGludmFsaWQsIGl0IHJldHVybnMgXCI/XCIuXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBkYXRlX2pwbl95cl8yX2EoaW50WWVhcjogbnVtYmVyLCBpbnREb3k6IG51bWJlciwgaXNLYW5qaTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgbnVtOiBudW1iZXI7XHJcbiAgICBpZiAoaW50WWVhciA8IDEgfHwgaW50RG95IDwgMSkge1xyXG4gICAgICBudW0gPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIG51bSA9IHRoaXMuTWF4R2VuZ28gLSAxO1xyXG4gICAgICB3aGlsZSAoaW50WWVhciA8IFV0aWxEYXRlSnBuLlN0YXJ0RGF5T2ZHZW5nb1tudW1dWzBdKSB7XHJcbiAgICAgICAgbnVtID0gbnVtIC0gMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaW50WWVhciA9PT0gVXRpbERhdGVKcG4uU3RhcnREYXlPZkdlbmdvW251bV1bMF0gJiYgaW50RG95IDwgVXRpbERhdGVKcG4uU3RhcnREYXlPZkdlbmdvW251bV1bM10pIHtcclxuICAgICAgICBudW0gPSBudW0gLSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBpZiAoaXNLYW5qaSkge1xyXG4gICAgICByZXN1bHQgPSBVdGlsRGF0ZUpwbi5HZW5nb1N0cltudW1dWzJdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IFV0aWxEYXRlSnBuLkdlbmdvU3RyW251bV1bMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgZmlyc3QgeWVhciAoQS5ELikgb2YgYSBzcGVjaWZpZWQgSmFwYW5lc2UgZXJhXHJcbiAgLy8vICAgVGhpcyBtZXRob2QgaXMgbW9kZWxlZCBhZnRlciBcImRhdGVfanBuX3lyXzRfYVwiIGZ1bmN0aW9uIGluXHJcbiAgLy8vICAgXCJcXG1nbG9jYWxcXGpwblxcanBuZGF0ZV9qcG4uY3BwXCIuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInVjcF9zdHI6XCI+bmFtZSBvZiBhIHNwZWNpZmllZCBKYXBhbmVzZSBlcmFcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNfbGVuOlwiPmxlbmd0aCAodGhlIG51bWJlciBvZiBieXRlcykgb2YgdWNwX3N0clxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4geWVhciAoQS5ELilcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZGF0ZV9qcG5feXJfNF9hKHVjcF9zdHI6IHN0cmluZywgc19sZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gdGhpcy5NYXhHZW5nbyAtIDE7XHJcbiAgICBpZiAoc19sZW4gPiAwKSB7XHJcbiAgICAgIGlmIChzX2xlbiA+IDEpIHtcclxuICAgICAgICB1Y3Bfc3RyID0gVXRpbFN0ckJ5dGVNb2RlLmxlZnRCKHVjcF9zdHIsIHNfbGVuKTtcclxuICAgICAgfVxyXG4gICAgICB3aGlsZSAoaSA+IDApIHtcclxuICAgICAgICBpZiAoc19sZW4gPT09IDEpIHtcclxuICAgICAgICAgIGlmICh1Y3Bfc3RyID09PSBVdGlsRGF0ZUpwbi5HZW5nb1N0cltpXVswXSB8fCB1Y3Bfc3RyID09PSBVdGlsRGF0ZUpwbi5HZW5nb1N0cltpXVsxXSkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoc19sZW4gPiAxKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZXh0OiBzdHJpbmcgPSBVdGlsU3RyQnl0ZU1vZGUubGVmdEIoVXRpbERhdGVKcG4uR2VuZ29TdHJbaV1bMl0sIHNfbGVuKTtcclxuICAgICAgICAgICAgaWYgKHVjcF9zdHIgPT09IHRleHQpIHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpID0gaSAtIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCByZXN1bHQ6IG51bWJlcjtcclxuICAgIGlmIChpID4gMCkge1xyXG4gICAgICByZXN1bHQgPSBVdGlsRGF0ZUpwbi5TdGFydERheU9mR2VuZ29baV1bMF07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3QgdGV4dDogc3RyaW5nID0gdWNwX3N0ci5zdWJzdHIoMCwgMSk7XHJcbiAgICAgIGlmICh0ZXh0ID09PSBcIiBcIiB8fCB0ZXh0ID09PSBcIj9cIikge1xyXG4gICAgICAgIHJlc3VsdCA9IDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0ID0gMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIG5hbWUgb2YgYW4gZXJhIGluIGRhdGUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0ckRhdGU6XCI+c3RyaW5nIG9mIGlucHV0IHN0ckRhdGVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clBpY3R1cmU6XCI+c3RyaW5nIG9mIHBpY3R1cmVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImludFN0YXJ0UG9zOlwiPnN0YXJ0IHBvc2l0aW9uIHRvIHNlYXJjaFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbmFtZSBvZiBhbiBlcmFcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGdldEVyYU5hbWVTdHJJbkRhdGUoc3RyRGF0ZTogc3RyaW5nLCBzdHJQaWN0dXJlOiBzdHJpbmcsIGludFN0YXJ0UG9zOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcclxuICAgIGxldCBpbnRQaWNJZHhPZnM6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gaW50U3RhcnRQb3M7XHJcbiAgICB3aGlsZSAoaSArIGludFBpY0lkeE9mcyA8IHN0clBpY3R1cmUubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBpbnRMZXR0ZXJzOiBudW1iZXI7XHJcbiAgICAgIGlmIChzdHJQaWN0dXJlLmNoYXJDb2RlQXQoaSArIGludFBpY0lkeE9mcykgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlkxKSB7XHJcbiAgICAgICAgaW50TGV0dGVycyA9IDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHN0clBpY3R1cmUuY2hhckNvZGVBdChpICsgaW50UGljSWR4T2ZzKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTIpIHtcclxuICAgICAgICAgIGludExldHRlcnMgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChzdHJQaWN0dXJlLmNoYXJDb2RlQXQoaSArIGludFBpY0lkeE9mcykgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlk0KSB7XHJcbiAgICAgICAgICAgIGludExldHRlcnMgPSAyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gSWYgXCJzdHJEYXRlXCIgY29udGFpbnMgREJDUywgdGhlIHBvc2l0aW9uIG9mIFwic3RyUGljdHVyZVwiIGhhcyB0byBza2lwIG5leHQgaW5kZXguXHJcbiAgICAgICAgICAgIGlmIChpIDwgc3RyRGF0ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBpZiAoIVV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChzdHJEYXRlW2ldKSAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoc3RyUGljdHVyZVtpICsgaW50UGljSWR4T2ZzXSkpIHtcclxuICAgICAgICAgICAgICAgIGludFBpY0lkeE9mcyA9IGludFBpY0lkeE9mcyArIDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCA9IHN0ckRhdGUuc3Vic3RyKGksIGludExldHRlcnMpO1xyXG4gICAgICBicmVhazsgLy8gZXhpdCBsb29wXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIG9mIGFuIGVyYSBpbiBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clBpY3R1cmVcIj5zdHJpbmcgb2YgcGljdHVyZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW50U3RhcnRQb3NcIj5zdGFydCBwb3NpdGlvbiB0byBzZWFyY2hcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGxlbmd0aCBvZiB0aGUgbmFtZSAodGhlIG51bWJlciBvZiBieXRlcylcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGdldEVyYU5hbWVMZW5JblBpY3R1cmUoc3RyUGljdHVyZTogc3RyaW5nLCBpbnRTdGFydFBvczogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBpbnRMZXR0ZXJzOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gaW50U3RhcnRQb3M7IGkgPCBzdHJQaWN0dXJlLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGlmIChzdHJQaWN0dXJlLmNoYXJDb2RlQXQoaSkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlkxKSB7XHJcbiAgICAgICAgaW50TGV0dGVycyA9IDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHN0clBpY3R1cmUuY2hhckNvZGVBdChpKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTIpIHtcclxuICAgICAgICAgIGludExldHRlcnMgPSAyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChzdHJQaWN0dXJlLmNoYXJDb2RlQXQoaSkgPT09IFBJQ0ludGVyZmFjZS5QSUNfSlk0KSB7XHJcbiAgICAgICAgICAgIGludExldHRlcnMgPSA0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaW50TGV0dGVycyA+IDApIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGludExldHRlcnM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBzdGFydCB5ZWFyIG9mIGFuIGVyYSBpbiBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0ckRhdGU6XCI+c3RyaW5nIG9mIGlucHV0IHN0ckRhdGVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clBpY3R1cmU6XCI+c3RyaW5nIG9mIHBpY3R1cmVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0YXJ0IHllYXIgb2YgdGhlIGVyYVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZ2V0U3RhcnRZZWFyT2ZFcmEoc3RyRGF0ZTogc3RyaW5nLCBzdHJQaWN0dXJlOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IGVyYU5hbWVTdHJJbkRhdGU6IHN0cmluZyA9IFV0aWxEYXRlSnBuLmdldEVyYU5hbWVTdHJJbkRhdGUoc3RyRGF0ZSwgc3RyUGljdHVyZSwgMCk7XHJcbiAgICBsZXQgcmVzdWx0OiBudW1iZXI7XHJcbiAgICBpZiAoZXJhTmFtZVN0ckluRGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXN1bHQgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBlcmFOYW1lTGVuSW5QaWN0dXJlOiBudW1iZXIgPSBVdGlsRGF0ZUpwbi5nZXRFcmFOYW1lTGVuSW5QaWN0dXJlKHN0clBpY3R1cmUsIDApO1xyXG4gICAgICBpZiAoZXJhTmFtZUxlbkluUGljdHVyZSA9PT0gMCkge1xyXG4gICAgICAgIHJlc3VsdCA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGludFN0YXJ0WWVhck9mRXJhOiBudW1iZXIgPSB0aGlzLmRhdGVfanBuX3lyXzRfYShlcmFOYW1lU3RySW5EYXRlLCBlcmFOYW1lTGVuSW5QaWN0dXJlKTtcclxuICAgICAgICByZXN1bHQgPSBpbnRTdGFydFllYXJPZkVyYTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQWRkIGV4dHJhIEdlbmdvIGRhdGEgaW50byB0aGUgR2VuZ28gdGFibGVzPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0ckV4dHJhR2VuZ286XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgYWRkRXh0cmFHZW5nbyhzdHJFeHRyYUdlbmdvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIGUuZy4gc3RyRXh0cmFHZW5nbyA9IFwiMjAxMi8wNC8wMSwwOTIsQWFBQkNEOzIwMTMvMDQvMDEsMDkxLFd3V1hZWjtcIlxyXG4gICAgbGV0IHN0ckdlbmdvSW5mbzogc3RyaW5nW10gPSBzdHJFeHRyYUdlbmdvLnNwbGl0KCc7Jyk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3RyR2VuZ29JbmZvLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGlmIChzdHJHZW5nb0luZm9baV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCBzdHJUb2s6IHN0cmluZ1tdID0gc3RyR2VuZ29JbmZvW2ldLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgaWYgKHN0clRvay5sZW5ndGggPT09IDMgJiYgc3RyVG9rWzBdLmxlbmd0aCA+IDAgJiYgc3RyVG9rWzFdLmxlbmd0aCA+IDAgJiYgc3RyVG9rWzJdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCBzdHJEYXRlOiBzdHJpbmdbXSA9IHN0clRva1swXS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgaWYgKHN0ckRhdGUubGVuZ3RoID09PSAzICYmIHN0ckRhdGVbMF0ubGVuZ3RoID4gMCAmJiBzdHJEYXRlWzFdLmxlbmd0aCA+IDAgJiYgc3RyRGF0ZVsyXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIFV0aWxEYXRlSnBuLkdlbmdvU3RyW01BWF9HRU5HTyArIGldWzBdID0gc3RyVG9rWzJdLnN1YnN0cigwLCAxKTsgLy8gc3ltYm9sIG5hbWUgKHVwcGVyIGNhc2UpOiBBXHJcbiAgICAgICAgICAgIFV0aWxEYXRlSnBuLkdlbmdvU3RyW01BWF9HRU5HTyArIGldWzFdID0gc3RyVG9rWzJdLnN1YnN0cigxLCAxKTsgLy8gc3ltYm9sIG5hbWUgKGxvd2VyIGNhc2UpOiBhXHJcbiAgICAgICAgICAgIFV0aWxEYXRlSnBuLkdlbmdvU3RyW01BWF9HRU5HTyArIGldWzJdID0gc3RyVG9rWzJdLnN1YnN0cigyKTsgICAgLy8gZ2VuZ28gbmFtZTogQUJDRFxyXG5cclxuICAgICAgICAgICAgVXRpbERhdGVKcG4uU3RhcnREYXlPZkdlbmdvW01BWF9HRU5HTyArIGldWzBdID0gTk51bWJlci5QYXJzZShzdHJEYXRlWzBdKTsgICAgLy8gc3RhcnQgeWVhcjogMjAxMlxyXG4gICAgICAgICAgICBVdGlsRGF0ZUpwbi5TdGFydERheU9mR2VuZ29bTUFYX0dFTkdPICsgaV1bMV0gPSBOTnVtYmVyLlBhcnNlKHN0ckRhdGVbMV0pOyAgICAvLyBzdGFydCBtb250aDogNFxyXG4gICAgICAgICAgICBVdGlsRGF0ZUpwbi5TdGFydERheU9mR2VuZ29bTUFYX0dFTkdPICsgaV1bMl0gPSBOTnVtYmVyLlBhcnNlKHN0ckRhdGVbMl0pOyAgICAvLyBzdGFydCBkYXk6IDFcclxuICAgICAgICAgICAgVXRpbERhdGVKcG4uU3RhcnREYXlPZkdlbmdvW01BWF9HRU5HTyArIGldWzNdID0gTk51bWJlci5QYXJzZShzdHJUb2tbMV0pOyAgICAgLy8gZGF5cyBzaW5jZSBKYW51YXJ5IDE6IDkyXHJcbiAgICAgICAgICAgIHRoaXMuTWF4R2VuZ28rKztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -6,49 +6,8 @@ export class UtilImeJpn {
6
6
  isValid(imeMode) {
7
7
  return (0 <= imeMode && imeMode <= 9) || imeMode === 15 || imeMode === 10;
8
8
  }
9
- static imeMode2imeConvMode(imeMode) {
10
- let result;
11
- switch (imeMode) {
12
- case 1:
13
- result = 25;
14
- break;
15
- case 2:
16
- result = 9;
17
- break;
18
- case 3:
19
- result = 27;
20
- break;
21
- case 4:
22
- result = 11;
23
- break;
24
- case 5:
25
- result = 19;
26
- break;
27
- case 6:
28
- result = 3;
29
- break;
30
- case 7:
31
- result = 8;
32
- break;
33
- case 8:
34
- case 9:
35
- result = 0;
36
- break;
37
- default:
38
- result = 256;
39
- break;
40
- }
41
- return result;
42
- }
43
9
  }
44
- UtilImeJpn.IME_CMODE_ALPHANUMERIC = 0;
45
- UtilImeJpn.IME_CMODE_NATIVE = 1;
46
- UtilImeJpn.IME_CMODE_KATAKANA = 2;
47
- UtilImeJpn.IME_CMODE_FULLSHAPE = 8;
48
- UtilImeJpn.IME_CMODE_ROMAN = 16;
49
- UtilImeJpn.IME_CMODE_NOCONVERSION = 256;
50
- UtilImeJpn.IME_NOT_INITIALIZED = -1;
51
10
  UtilImeJpn.IME_ZEN_HIRAGANA_ROMAN = 1;
52
11
  UtilImeJpn.IME_FORCE_OFF = 15;
53
12
  UtilImeJpn.IME_DISABLE = 10;
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXRpbEltZUpwbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9VdGlsSW1lSnBuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sT0FBTyxVQUFVO0lBcUZyQjtRQXpFQSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGVBQVUsR0FBVyxJQUFJLENBQUM7SUEwRTFCLENBQUM7SUFsRUQsT0FBTyxDQUFDLE9BQWU7UUFDckIsT0FBTyxDQUFDLENBQUMsSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksT0FBTyxLQUFLLEVBQUUsQ0FBQztJQUM1RSxDQUFDO0lBUU8sTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQWU7UUFDaEQsSUFBSSxNQUFjLENBQUM7UUFDbkIsUUFBUSxPQUFPLEVBQUU7WUFFZixLQUFLLENBQUM7Z0JBQ0osTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDWixNQUFNO1lBR1IsS0FBSyxDQUFDO2dCQUNKLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ1gsTUFBTTtZQUdSLEtBQUssQ0FBQztnQkFDSixNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNaLE1BQU07WUFHUixLQUFLLENBQUM7Z0JBQ0osTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDWixNQUFNO1lBR1IsS0FBSyxDQUFDO2dCQUNKLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ1osTUFBTTtZQUdSLEtBQUssQ0FBQztnQkFDSixNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNYLE1BQU07WUFHUixLQUFLLENBQUM7Z0JBQ0osTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDWCxNQUFNO1lBR1IsS0FBSyxDQUFDLENBQUM7WUFDUCxLQUFLLENBQUM7Z0JBQ0osTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDWCxNQUFNO1lBS1I7Z0JBQ0UsTUFBTSxHQUFHLEdBQUcsQ0FBQztnQkFDYixNQUFNO1NBQ1Q7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztBQWxGYyxpQ0FBc0IsR0FBVyxDQUFDLENBQUM7QUFDbkMsMkJBQWdCLEdBQVcsQ0FBQyxDQUFDO0FBQzdCLDZCQUFrQixHQUFXLENBQUMsQ0FBQztBQUMvQiw4QkFBbUIsR0FBVyxDQUFDLENBQUM7QUFDaEMsMEJBQWUsR0FBVyxFQUFFLENBQUM7QUFDN0IsaUNBQXNCLEdBQVcsR0FBRyxDQUFDO0FBQ3JDLDhCQUFtQixHQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLGlDQUFzQixHQUFXLENBQUMsQ0FBQztBQUNuQyx3QkFBYSxHQUFXLEVBQUUsQ0FBQztBQUUzQixzQkFBVyxHQUFXLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8c3VtbWFyeT5KUE46IElNRSBzdXBwb3J0XHJcbi8vLyBVdGlsaXR5IENsYXNzIGZvciBJbnB1dCBNZXRob2QgRWRpdG9yXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8YXV0aG9yPiAgVG9zaGlybyBOYWtheW9zaGkgKE1TSilcclxuLy8vIDwvYXV0aG9yPlxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBVdGlsSW1lSnBuIHtcclxuICBwcml2YXRlIHN0YXRpYyBJTUVfQ01PREVfQUxQSEFOVU1FUklDOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgc3RhdGljIElNRV9DTU9ERV9OQVRJVkU6IG51bWJlciA9IDE7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgSU1FX0NNT0RFX0tBVEFLQU5BOiBudW1iZXIgPSAyO1xyXG4gIHByaXZhdGUgc3RhdGljIElNRV9DTU9ERV9GVUxMU0hBUEU6IG51bWJlciA9IDg7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgSU1FX0NNT0RFX1JPTUFOOiBudW1iZXIgPSAxNjtcclxuICBwcml2YXRlIHN0YXRpYyBJTUVfQ01PREVfTk9DT05WRVJTSU9OOiBudW1iZXIgPSAyNTY7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgSU1FX05PVF9JTklUSUFMSVpFRDogbnVtYmVyID0gLTE7XHJcbiAgc3RhdGljIElNRV9aRU5fSElSQUdBTkFfUk9NQU46IG51bWJlciA9IDE7XHJcbiAgc3RhdGljIElNRV9GT1JDRV9PRkY6IG51bWJlciA9IDE1OyAvLyBpZiAoSW1lTW9kZSBwcm9wZXJ0eSA9PSAwIGFuZCAocGljdHVyZSBoYXMgSzAgb3IgUElDX1MpKSBvclxyXG4gIC8vIChhdHRyaWJ1dGUgaXMgbm90IGFscGhhLCB1bmljb2RlLCBub3IgYmxvYiksIHNldCBJTUVfRk9SQ0VfT0ZGLlxyXG4gIHN0YXRpYyBJTUVfRElTQUJMRTogbnVtYmVyID0gMTA7ICAgLy8gdG8gY29tcGxldGVseSBkaXNhYmxlIElNRSAoZXZlbiBub3QgYWxsb3dpbmcgdG8gY2hhbmdlIHRoZSBtb2RlKVxyXG4gIEltZUF1dG9PZmY6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBTdHJJbWVSZWFkOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IGNoZWNrIGlmIHRoZSBJTUUgbW9kZSBpcyB3aXRoaW4gdmFsaWQgcmFuZ2VcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImltZU1vZGVcIj4oSU1FIG1vZGUgaW4gTWFnaWMpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBib29sXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBpc1ZhbGlkKGltZU1vZGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgwIDw9IGltZU1vZGUgJiYgaW1lTW9kZSA8PSA5KSB8fCBpbWVNb2RlID09PSAxNSB8fCBpbWVNb2RlID09PSAxMDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY29udmVydCB0aGUgaW5wdXQgbWV0aG9kIGVkaXRvciBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpbWVNb2RlXCI+KElNRSBtb2RlIGluIE1hZ2ljKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gaW1lQ29udk1vZGUgKElNRSBjb252ZXJzaW9uIG1vZGUgaW4gaW1tMzIubGliKVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgaW1lTW9kZTJpbWVDb252TW9kZShpbWVNb2RlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyO1xyXG4gICAgc3dpdGNoIChpbWVNb2RlKSB7XHJcbiAgICAgIC8vIElNRV9aRU5fSElSQUdBTkFfUk9NQU5cclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHJlc3VsdCA9IDI1O1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgLy8gSU1FX1pFTl9ISVJBR0FOQVxyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgcmVzdWx0ID0gOTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIC8vIElNRV9aRU5fS0FUQUtBTkFfUk9NQU5cclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHJlc3VsdCA9IDI3O1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgLy8gSU1FX1pFTl9LQVRBS0FOQVxyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgcmVzdWx0ID0gMTE7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyBJTUVfSEFOX0tBVEFLQU5BX1JPTUFOXHJcbiAgICAgIGNhc2UgNTpcclxuICAgICAgICByZXN1bHQgPSAxOTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIC8vIElNRV9IQU5fS0FUQUtBTkFcclxuICAgICAgY2FzZSA2OlxyXG4gICAgICAgIHJlc3VsdCA9IDM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyBJTUVfWkVOX0FMUEhBTlVNRVJJQ1xyXG4gICAgICBjYXNlIDc6XHJcbiAgICAgICAgcmVzdWx0ID0gODtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIC8vIElNRV9IQU5fQUxQSEFOVU1FUklDXHJcbiAgICAgIGNhc2UgODpcclxuICAgICAgY2FzZSA5OlxyXG4gICAgICAgIHJlc3VsdCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyBjYXNlIDA6XHJcbiAgICAgIC8vIGNhc2UgSU1FX0RJU0FCTEU6XHJcbiAgICAgIC8vIGNhc2UgSU1FX0ZPUkNFX09GRjpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXN1bHQgPSAyNTY7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gIH1cclxufVxyXG4iXX0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXRpbEltZUpwbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9VdGlsSW1lSnBuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sT0FBTyxVQUFVO0lBbUJyQjtRQWJBLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsZUFBVSxHQUFXLElBQUksQ0FBQztJQWMxQixDQUFDO0lBTkQsT0FBTyxDQUFDLE9BQWU7UUFDckIsT0FBTyxDQUFDLENBQUMsSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksT0FBTyxLQUFLLEVBQUUsQ0FBQztJQUM1RSxDQUFDOztBQWZNLGlDQUFzQixHQUFXLENBQUMsQ0FBQztBQUNuQyx3QkFBYSxHQUFXLEVBQUUsQ0FBQztBQUUzQixzQkFBVyxHQUFXLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8c3VtbWFyeT5KUE46IElNRSBzdXBwb3J0XHJcbi8vLyBVdGlsaXR5IENsYXNzIGZvciBJbnB1dCBNZXRob2QgRWRpdG9yXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8YXV0aG9yPiAgVG9zaGlybyBOYWtheW9zaGkgKE1TSilcclxuLy8vIDwvYXV0aG9yPlxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBVdGlsSW1lSnBuIHtcclxuXHJcbiAgc3RhdGljIElNRV9aRU5fSElSQUdBTkFfUk9NQU46IG51bWJlciA9IDE7XHJcbiAgc3RhdGljIElNRV9GT1JDRV9PRkY6IG51bWJlciA9IDE1OyAvLyBpZiAoSW1lTW9kZSBwcm9wZXJ0eSA9PSAwIGFuZCAocGljdHVyZSBoYXMgSzAgb3IgUElDX1MpKSBvclxyXG4gIC8vIChhdHRyaWJ1dGUgaXMgbm90IGFscGhhLCB1bmljb2RlLCBub3IgYmxvYiksIHNldCBJTUVfRk9SQ0VfT0ZGLlxyXG4gIHN0YXRpYyBJTUVfRElTQUJMRTogbnVtYmVyID0gMTA7ICAgLy8gdG8gY29tcGxldGVseSBkaXNhYmxlIElNRSAoZXZlbiBub3QgYWxsb3dpbmcgdG8gY2hhbmdlIHRoZSBtb2RlKVxyXG4gIEltZUF1dG9PZmY6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBTdHJJbWVSZWFkOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IGNoZWNrIGlmIHRoZSBJTUUgbW9kZSBpcyB3aXRoaW4gdmFsaWQgcmFuZ2VcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImltZU1vZGVcIj4oSU1FIG1vZGUgaW4gTWFnaWMpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBib29sXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBpc1ZhbGlkKGltZU1vZGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICgwIDw9IGltZU1vZGUgJiYgaW1lTW9kZSA8PSA5KSB8fCBpbWVNb2RlID09PSAxNSB8fCBpbWVNb2RlID09PSAxMDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICB9XHJcbn1cclxuIl19
@@ -1309,7 +1309,6 @@ class StrUtil {
1309
1309
  static SearchAndReplaceWildChars(buf, len, filler) {
1310
1310
  buf = NString.PadRight(buf, len);
1311
1311
  let escChar = false;
1312
- let stopSearch = false;
1313
1312
  let tmpBuf = new StringBuilder(len);
1314
1313
  for (let i = 0; i < len; i = i + 1) {
1315
1314
  switch (buf[i]) {
@@ -1328,7 +1327,6 @@ class StrUtil {
1328
1327
  tmpBuf.Append(buf[i]);
1329
1328
  else {
1330
1329
  tmpBuf.Append(filler, len - tmpBuf.Length);
1331
- stopSearch = true;
1332
1330
  }
1333
1331
  escChar = false;
1334
1332
  break;
@@ -4838,13 +4836,6 @@ class SyncExecutionHelper {
4838
4836
  SyncExecutionHelper._instance = null;
4839
4837
 
4840
4838
  const MAX_GENGO = 6;
4841
- const IDX_UPPERCASE_ALPHA = 0;
4842
- const IDX_LOWERCASE_ALPHA = 1;
4843
- const IDX_KANJI = 2;
4844
- const IDX_YEAR = 0;
4845
- const IDX_MONTH = 1;
4846
- const IDX_DAY = 2;
4847
- const IDX_DOY = 3;
4848
4839
  class UtilDateJpn {
4849
4840
  constructor() {
4850
4841
  this.MaxGengo = MAX_GENGO;
@@ -5083,48 +5074,7 @@ class UtilImeJpn {
5083
5074
  isValid(imeMode) {
5084
5075
  return (0 <= imeMode && imeMode <= 9) || imeMode === 15 || imeMode === 10;
5085
5076
  }
5086
- static imeMode2imeConvMode(imeMode) {
5087
- let result;
5088
- switch (imeMode) {
5089
- case 1:
5090
- result = 25;
5091
- break;
5092
- case 2:
5093
- result = 9;
5094
- break;
5095
- case 3:
5096
- result = 27;
5097
- break;
5098
- case 4:
5099
- result = 11;
5100
- break;
5101
- case 5:
5102
- result = 19;
5103
- break;
5104
- case 6:
5105
- result = 3;
5106
- break;
5107
- case 7:
5108
- result = 8;
5109
- break;
5110
- case 8:
5111
- case 9:
5112
- result = 0;
5113
- break;
5114
- default:
5115
- result = 256;
5116
- break;
5117
- }
5118
- return result;
5119
- }
5120
5077
  }
5121
- UtilImeJpn.IME_CMODE_ALPHANUMERIC = 0;
5122
- UtilImeJpn.IME_CMODE_NATIVE = 1;
5123
- UtilImeJpn.IME_CMODE_KATAKANA = 2;
5124
- UtilImeJpn.IME_CMODE_FULLSHAPE = 8;
5125
- UtilImeJpn.IME_CMODE_ROMAN = 16;
5126
- UtilImeJpn.IME_CMODE_NOCONVERSION = 256;
5127
- UtilImeJpn.IME_NOT_INITIALIZED = -1;
5128
5078
  UtilImeJpn.IME_ZEN_HIRAGANA_ROMAN = 1;
5129
5079
  UtilImeJpn.IME_FORCE_OFF = 15;
5130
5080
  UtilImeJpn.IME_DISABLE = 10;