neko-ui 2.15.0 → 2.15.2

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.
Files changed (165) hide show
  1. package/es/avatar/group.js +2 -2
  2. package/es/avatar/index.js +2 -2
  3. package/es/back-top/index.js +2 -2
  4. package/es/basic-config/index.d.ts +1 -0
  5. package/es/basic-config/index.js +2 -2
  6. package/es/button/index.js +2 -2
  7. package/es/button/style.js +2 -2
  8. package/es/capture-screen/index.js +10 -10
  9. package/es/carousel/index.js +2 -2
  10. package/es/checkbox/index.js +2 -2
  11. package/es/code/copy-icon.js +2 -2
  12. package/es/code/index.js +3 -3
  13. package/es/code/worker.js +2 -2
  14. package/es/color-palette/index.js +2 -2
  15. package/es/color-picker/index.js +2 -2
  16. package/es/cron/begin-interval.js +2 -2
  17. package/es/cron/day.js +2 -2
  18. package/es/cron/hour.js +2 -2
  19. package/es/cron/index.js +2 -2
  20. package/es/cron/item.js +2 -2
  21. package/es/cron/minute.js +2 -2
  22. package/es/cron/month.js +2 -2
  23. package/es/cron/period.js +2 -2
  24. package/es/cron/second.js +2 -2
  25. package/es/cron/some.js +2 -2
  26. package/es/cron/week.js +2 -2
  27. package/es/cron/year.js +2 -2
  28. package/es/date-picker/date.js +2 -2
  29. package/es/date-picker/index.js +3 -3
  30. package/es/date-picker/month.js +2 -2
  31. package/es/date-picker/panel.js +2 -2
  32. package/es/date-picker/time.js +2 -2
  33. package/es/date-picker/year.js +2 -2
  34. package/es/dropdown/index.js +2 -2
  35. package/es/empty/index.js +2 -2
  36. package/es/from-schema/index.js +2 -2
  37. package/es/get-options/index.js +2 -2
  38. package/es/glass-panel/index.js +2 -2
  39. package/es/highlight-text/index.js +2 -2
  40. package/es/icon/index.js +2 -2
  41. package/es/img/index.js +2 -2
  42. package/es/img/lazy.js +2 -2
  43. package/es/index.d.ts +1 -7
  44. package/es/index.js +2 -2
  45. package/es/input/index.js +2 -2
  46. package/es/input-number/index.js +2 -2
  47. package/es/marquee/index.d.ts +5 -0
  48. package/es/marquee/index.js +2 -2
  49. package/es/md/index.js +2 -2
  50. package/es/md/worker.js +2 -2
  51. package/es/menu/index.js +2 -2
  52. package/es/modal/hooks.js +2 -2
  53. package/es/modal/index.js +2 -2
  54. package/es/modal/posi.js +2 -2
  55. package/es/modal/store.js +2 -2
  56. package/es/notification/notification.js +2 -2
  57. package/es/notification/queque.js +2 -2
  58. package/es/pagination/index.js +2 -2
  59. package/es/popover/index.js +2 -2
  60. package/es/provider/index.js +2 -2
  61. package/es/qrcode/index.d.ts +1 -0
  62. package/es/qrcode/index.js +4 -4
  63. package/es/qrcode/qrcode.js +61 -61
  64. package/es/radio/index.js +2 -2
  65. package/es/segmented/index.js +2 -2
  66. package/es/select/index.js +3 -3
  67. package/es/skeleton/index.js +2 -2
  68. package/es/spin/index.js +2 -2
  69. package/es/switch/index.js +2 -2
  70. package/es/table/index.js +3 -3
  71. package/es/tabs/index.js +2 -2
  72. package/es/tag/index.js +2 -2
  73. package/es/theme/index.js +3 -3
  74. package/es/tree/index.js +2 -2
  75. package/es/tree/type.d.ts +1 -0
  76. package/es/tree/type.js +1 -1
  77. package/es/typography/index.js +2 -2
  78. package/es/utils/index.js +2 -2
  79. package/lib/avatar/group.js +2 -2
  80. package/lib/avatar/index.js +2 -2
  81. package/lib/back-top/index.js +2 -2
  82. package/lib/basic-config/index.d.ts +1 -0
  83. package/lib/basic-config/index.js +2 -2
  84. package/lib/button/index.js +2 -2
  85. package/lib/button/style.js +2 -2
  86. package/lib/capture-screen/index.js +10 -10
  87. package/lib/carousel/index.js +2 -2
  88. package/lib/checkbox/index.js +2 -2
  89. package/lib/code/copy-icon.js +2 -2
  90. package/lib/code/index.js +3 -3
  91. package/lib/code/worker.js +2 -2
  92. package/lib/color-palette/index.js +2 -2
  93. package/lib/color-picker/index.js +2 -2
  94. package/lib/cron/begin-interval.js +2 -2
  95. package/lib/cron/day.js +2 -2
  96. package/lib/cron/hour.js +2 -2
  97. package/lib/cron/index.js +2 -2
  98. package/lib/cron/item.js +2 -2
  99. package/lib/cron/minute.js +2 -2
  100. package/lib/cron/month.js +2 -2
  101. package/lib/cron/period.js +2 -2
  102. package/lib/cron/second.js +2 -2
  103. package/lib/cron/some.js +2 -2
  104. package/lib/cron/week.js +2 -2
  105. package/lib/cron/year.js +2 -2
  106. package/lib/date-picker/date.js +2 -2
  107. package/lib/date-picker/dayjs.js +1 -1
  108. package/lib/date-picker/index.js +3 -3
  109. package/lib/date-picker/month.js +2 -2
  110. package/lib/date-picker/panel.js +2 -2
  111. package/lib/date-picker/time.js +2 -2
  112. package/lib/date-picker/year.js +2 -2
  113. package/lib/dropdown/index.js +2 -2
  114. package/lib/empty/index.js +2 -2
  115. package/lib/from-schema/index.js +2 -2
  116. package/lib/get-options/index.js +2 -2
  117. package/lib/glass-panel/index.js +2 -2
  118. package/lib/highlight-text/index.js +2 -2
  119. package/lib/icon/index.js +2 -2
  120. package/lib/img/index.js +2 -2
  121. package/lib/img/lazy.js +2 -2
  122. package/lib/index.d.ts +1 -7
  123. package/lib/index.js +2 -2
  124. package/lib/input/index.js +2 -2
  125. package/lib/input-number/index.js +2 -2
  126. package/lib/marquee/index.d.ts +5 -0
  127. package/lib/marquee/index.js +2 -2
  128. package/lib/md/index.js +2 -2
  129. package/lib/md/worker.js +2 -2
  130. package/lib/menu/index.js +2 -2
  131. package/lib/modal/hooks.js +2 -2
  132. package/lib/modal/index.js +2 -2
  133. package/lib/modal/posi.js +2 -2
  134. package/lib/modal/store.js +2 -2
  135. package/lib/notification/notification.js +2 -2
  136. package/lib/notification/queque.js +2 -2
  137. package/lib/pagination/index.js +2 -2
  138. package/lib/popover/index.js +2 -2
  139. package/lib/provider/index.js +2 -2
  140. package/lib/qrcode/index.d.ts +1 -0
  141. package/lib/qrcode/index.js +4 -4
  142. package/lib/qrcode/qrcode.js +61 -61
  143. package/lib/radio/index.js +2 -2
  144. package/lib/segmented/index.js +2 -2
  145. package/lib/select/index.js +3 -3
  146. package/lib/skeleton/index.js +2 -2
  147. package/lib/spin/index.js +2 -2
  148. package/lib/switch/index.js +2 -2
  149. package/lib/table/index.js +3 -3
  150. package/lib/tabs/index.js +2 -2
  151. package/lib/tag/index.js +2 -2
  152. package/lib/theme/index.js +3 -3
  153. package/lib/tree/index.js +2 -2
  154. package/lib/tree/type.d.ts +1 -0
  155. package/lib/tree/type.js +1 -1
  156. package/lib/typography/index.js +2 -2
  157. package/lib/utils/index.js +2 -2
  158. package/package.json +8 -17
  159. package/es/collapse/index.d.ts +0 -16
  160. package/es/collapse/index.js +0 -2
  161. package/lib/collapse/index.d.ts +0 -16
  162. package/lib/collapse/index.js +0 -2
  163. package/umd/app-resource.json +0 -1
  164. package/umd/index.js +0 -5053
  165. package/umd/site.webmanifest +0 -1
@@ -9,8 +9,8 @@ var ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,
9
9
  [-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],// Quartile
10
10
  [-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]// High
11
11
  ];var NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]];// 返回在给定版本的QR码中可以存储的数据位数,已排除所有功能模块。这包括余数位,因此可能不是8的倍数。结果范围在[208, 29648]之间。这可以实现为一个40项的查找表。
12
- function getNumRawDataModules(ver){if(ver<QrCode.VERSION.MIN||ver>QrCode.VERSION.MAX){throw new RangeError("Version number out of range")}var result=(16*ver+128)*ver+64;if(ver>=2){var numAlign=Math.floor(ver/7)+2;result-=(25*numAlign-10)*numAlign-55;if(ver>=7)result-=36}assert(208<=result&&result<=29648);return result}// 返回指定版本号和纠错级别的 QR 码包含的 8 位数据码字数量(即非纠错码字),余位被舍弃。这个无状态的纯函数可以实现为一个 (40*4) 大小的查找表。
13
- function getNumDataCodewords(ver,ecl){return Math.floor(getNumRawDataModules(ver)/8)-ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver]*NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver]}/**
12
+ function getNumRawDataModules(ver){if(ver<QrCode.VERSION.MIN||ver>QrCode.VERSION.MAX){throw new RangeError("Version number out of range");}var result=(16*ver+128)*ver+64;if(ver>=2){var numAlign=Math.floor(ver/7)+2;result-=(25*numAlign-10)*numAlign-55;if(ver>=7)result-=36;}assert(208<=result&&result<=29648);return result;}// 返回指定版本号和纠错级别的 QR 码包含的 8 位数据码字数量(即非纠错码字),余位被舍弃。这个无状态的纯函数可以实现为一个 (40*4) 大小的查找表。
13
+ function getNumDataCodewords(ver,ecl){return Math.floor(getNumRawDataModules(ver)/8)-ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver]*NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];}/**
14
14
  * 生成一个 QR 码
15
15
  * @description
16
16
  * 根据给定的数据段和编码参数生成 QR 码。输出时会自动选择给定范围内尽可能小的 QR 码版本
@@ -21,32 +21,32 @@ function getNumDataCodewords(ver,ecl){return Math.floor(getNumRawDataModules(ver
21
21
  * @param {-1 | IntRange<0, 8>} [mask=-1] - 掩码模式(默认为 -1,表示自动选择)
22
22
  * @param {boolean} [boostEcl=true] - 在数据仍然适合当前版本号的情况下提高纠错级别(默认为 true)。
23
23
  * @returns {QrCode} 返回生成的 QR 码。
24
- */function encodeSegments(segs,ecl){var minVersion=arguments.length>2&&arguments[2]!==undefined?arguments[2]:1;var maxVersion=arguments.length>3&&arguments[3]!==undefined?arguments[3]:40;var mask=arguments.length>4&&arguments[4]!==undefined?arguments[4]:-1;var boostEcl=arguments.length>5&&arguments[5]!==undefined?arguments[5]:true;if(!(QrCode.VERSION.MIN<=minVersion&&minVersion<=maxVersion&&maxVersion<=QrCode.VERSION.MAX)||mask<-1||mask>7){throw new RangeError("Invalid value")}// 查找要使用的最小版本号
24
+ */function encodeSegments(segs,ecl){var minVersion=arguments.length>2&&arguments[2]!==undefined?arguments[2]:1;var maxVersion=arguments.length>3&&arguments[3]!==undefined?arguments[3]:40;var mask=arguments.length>4&&arguments[4]!==undefined?arguments[4]:-1;var boostEcl=arguments.length>5&&arguments[5]!==undefined?arguments[5]:true;if(!(QrCode.VERSION.MIN<=minVersion&&minVersion<=maxVersion&&maxVersion<=QrCode.VERSION.MAX)||mask<-1||mask>7){throw new RangeError("Invalid value");}// 查找要使用的最小版本号
25
25
  var version,dataUsedBits,_ecl=ecl;for(version=minVersion;;version++){var _dataCapacityBits=getNumDataCodewords(version,_ecl)*8,// 可用的数据位数
26
26
  usedBits=getTotalBits(segs,version);// 找到合适的版本号
27
- if(usedBits<=_dataCapacityBits){dataUsedBits=usedBits;break}if(version>=maxVersion){// 范围内的所有版本都无法容纳给定数据
28
- throw new RangeError("Data too long")}}// 提高纠错级别; 从低到高
29
- if(boostEcl){for(var _i=0,_arr=[Ecc.get("MEDIUM"),Ecc.get("QUARTILE"),Ecc.get("HIGH")];_i<_arr.length;_i++){var newEcl=_arr[_i];if(dataUsedBits<=getNumDataCodewords(version,newEcl)*8)_ecl=newEcl}}// 连接所有段以创建数据位字符串
30
- var bb=[];var _iterator=_createForOfIteratorHelper(segs),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var seg=_step.value;appendBits(seg.mode.modeBits,4,bb);appendBits(seg.numChars,seg.mode.numCharCountBits(version),bb);var _iterator2=_createForOfIteratorHelper(seg.getData()),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var b=_step2.value;bb.push(b)}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}}catch(err){_iterator.e(err)}finally{_iterator.f()}assert(bb.length===dataUsedBits);// 添加终止符并填充至字节边界(如果适用)
27
+ if(usedBits<=_dataCapacityBits){dataUsedBits=usedBits;break;}if(version>=maxVersion){// 范围内的所有版本都无法容纳给定数据
28
+ throw new RangeError("Data too long");}}// 提高纠错级别; 从低到高
29
+ if(boostEcl){for(var _i=0,_arr=[Ecc.get("MEDIUM"),Ecc.get("QUARTILE"),Ecc.get("HIGH")];_i<_arr.length;_i++){var newEcl=_arr[_i];if(dataUsedBits<=getNumDataCodewords(version,newEcl)*8)_ecl=newEcl;}}// 连接所有段以创建数据位字符串
30
+ var bb=[];var _iterator=_createForOfIteratorHelper(segs),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var seg=_step.value;appendBits(seg.mode.modeBits,4,bb);appendBits(seg.numChars,seg.mode.numCharCountBits(version),bb);var _iterator2=_createForOfIteratorHelper(seg.getData()),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var b=_step2.value;bb.push(b);}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}}catch(err){_iterator.e(err)}finally{_iterator.f()}assert(bb.length===dataUsedBits);// 添加终止符并填充至字节边界(如果适用)
31
31
  var dataCapacityBits=getNumDataCodewords(version,_ecl)*8;assert(bb.length<=dataCapacityBits);appendBits(0,Math.min(4,dataCapacityBits-bb.length),bb);appendBits(0,(8-bb.length%8)%8,bb);assert(bb.length%8===0);// 用交替字节填充直到达到数据容量
32
- for(var padByte=236;bb.length<dataCapacityBits;padByte^=236^17){appendBits(padByte,8,bb)}// 以大端序将位打包成字节
33
- var dataCodewords=[];while(dataCodewords.length*8<bb.length)dataCodewords.push(0);bb.forEach(function(b,i){return dataCodewords[i>>>3]|=b<<7-(i&7)});return new QrCode(version,_ecl,dataCodewords,mask)}// 返回表示给定字符串的UTF-8编码字节数组
32
+ for(var padByte=236;bb.length<dataCapacityBits;padByte^=236^17){appendBits(padByte,8,bb);}// 以大端序将位打包成字节
33
+ var dataCodewords=[];while(dataCodewords.length*8<bb.length)dataCodewords.push(0);bb.forEach(function(b,i){return dataCodewords[i>>>3]|=b<<7-(i&7)});return new QrCode(version,_ecl,dataCodewords,mask);}// 返回表示给定字符串的UTF-8编码字节数组
34
34
  function toUtf8ByteArray(str){// eslint-disable-next-line no-param-reassign
35
- str=encodeURI(str);var result=[];for(var i=0;i<str.length;i++){if(str.charAt(i)!=="%")result.push(str.charCodeAt(i));else{result.push(parseInt(str.substring(i+1,i+3),16));i+=2}}return result}// 返回一个新的可变段列表,用于表示给定的Unicode文本字符串。结果可能使用各种段模式并切换模式以优化位流的长度。
35
+ str=encodeURI(str);var result=[];for(var i=0;i<str.length;i++){if(str.charAt(i)!=="%")result.push(str.charCodeAt(i));else{result.push(parseInt(str.substring(i+1,i+3),16));i+=2;}}return result;}// 返回一个新的可变段列表,用于表示给定的Unicode文本字符串。结果可能使用各种段模式并切换模式以优化位流的长度。
36
36
  function makeSegments(text){// 自动选择最高效的段编码
37
- if(text==="")return[];else if(isNumeric(text))return[makeNumeric(text)];else if(isAlphanumeric(text))return[makeAlphanumeric(text)];return[makeBytes(toUtf8ByteArray(text))]}function reedSolomonComputeDivisor(degree){if(degree<1||degree>255)throw new RangeError("Degree out of range");// 多项式系数按从高到低的幂次存储,不包括始终为1的首项。
37
+ if(text==="")return[];else if(isNumeric(text))return[makeNumeric(text)];else if(isAlphanumeric(text))return[makeAlphanumeric(text)];return[makeBytes(toUtf8ByteArray(text))];}function reedSolomonComputeDivisor(degree){if(degree<1||degree>255)throw new RangeError("Degree out of range");// 多项式系数按从高到低的幂次存储,不包括始终为1的首项。
38
38
  // 例如多项式 x^3 + 255x^2 + 8x + 93 存储为uint8数组 [255, 8, 93]。
39
39
  var result=[];for(var i=0;i<degree-1;i++)result.push(0);result.push(1);// Start off with the monomial x^0
40
40
  // 计算多项式乘积 (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}),
41
41
  // 并舍弃最高次项(该项始终为 1x^degree)。
42
42
  // 注意 r = 0x02,它是有限域 GF(2^8/0x11D) 的生成元。
43
43
  var root=1;for(var _i2=0;_i2<degree;_i2++){// 将当前结果乘以 (x - r^i)
44
- for(var j=0;j<result.length;j++){result[j]=reedSolomonMultiply(result[j],root);if(j+1<result.length)result[j]^=result[j+1]}root=reedSolomonMultiply(root,2)}return result}// 返回给定数据和除数多项式的里德-所罗门错误纠正码字。
44
+ for(var j=0;j<result.length;j++){result[j]=reedSolomonMultiply(result[j],root);if(j+1<result.length)result[j]^=result[j+1];}root=reedSolomonMultiply(root,2);}return result;}// 返回给定数据和除数多项式的里德-所罗门错误纠正码字。
45
45
  function reedSolomonComputeRemainder(data,divisor){var result=divisor.map(function(){return 0});var _iterator3=_createForOfIteratorHelper(data),_step3;try{var _loop=function _loop(){var b=_step3.value;// 多项式除法
46
- var factor=b^result.shift();result.push(0);divisor.forEach(function(coef,i){return result[i]^=reedSolomonMultiply(coef,factor)})};for(_iterator3.s();!(_step3=_iterator3.n()).done;){_loop()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}return result}// 返回两个给定域元素模GF(2^8/0x11D)的乘积。参数和结果
46
+ var factor=b^result.shift();result.push(0);divisor.forEach(function(coef,i){return result[i]^=reedSolomonMultiply(coef,factor)});};for(_iterator3.s();!(_step3=_iterator3.n()).done;){_loop()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}return result;}// 返回两个给定域元素模GF(2^8/0x11D)的乘积。参数和结果
47
47
  // 都是无符号8位整数。这可以实现为256*256个uint8条目的查找表。
48
48
  function reedSolomonMultiply(x,y){if(x>>>8!==0||y>>>8!==0)throw new RangeError("Byte out of range");// 俄罗斯农民乘法
49
- var z=0;for(var i=7;i>=0;i--){z=z<<1^(z>>>7)*285;z^=(y>>>i&1)*x}assert(z>>>8===0);return z}/*
49
+ var z=0;for(var i=7;i>=0;i--){z=z<<1^(z>>>7)*285;z^=(y>>>i&1)*x;}assert(z>>>8===0);return z;}/*
50
50
  * 由 Denso Wave 发明,并在 ISO/IEC 18004 标准中描述。
51
51
  * 此类的实例表示一个不可变的暗/亮单元方格网。
52
52
  * 该类遵循 QR 码模型 2 规范,支持所有版本(尺寸)从 1 到 40、4 种纠错等级以及 4 种字符编码模式。
@@ -57,89 +57,89 @@ errorCorrectionLevel,dataCodewords,msk){_classCallCheck(this,QrCode);// QR Code
57
57
  _defineProperty(this,"modules",[]);// 表示不受掩模影响的功能模块。构造函数完成后即被丢弃。
58
58
  _defineProperty(this,"isFunction",[]);// 掩码模式定义
59
59
  _defineProperty(this,"MASK_PATTERNS",[function(x,y){return(x+y)%2===0},function(_,y){return y%2===0},function(x){return x%3===0},function(x,y){return(x+y)%3===0},function(x,y){return(Math.floor(x/3)+Math.floor(y/2))%2===0},function(x,y){return x*y%2+x*y%3===0},function(x,y){return(x*y%2+x*y%3)%2===0},function(x,y){return((x+y)%2+x*y%3)%2===0}]);this.version=version;this.errorCorrectionLevel=errorCorrectionLevel;// 验证构造函数参数
60
- if(version<QrCode.VERSION.MIN||version>QrCode.VERSION.MAX){throw new RangeError("Version value out of range")}if(msk<-1||msk>7)throw new RangeError("Mask value out of range");// 初始化
60
+ if(version<QrCode.VERSION.MIN||version>QrCode.VERSION.MAX){throw new RangeError("Version value out of range");}if(msk<-1||msk>7)throw new RangeError("Mask value out of range");// 初始化
61
61
  this.size=version*4+17;// 创建模块数组
62
62
  // 初始化两个网格为 size*size 大小的布尔数组,初始值为 false 全为浅色
63
- var row=Array(this.size).fill(false);for(var i=0;i<this.size;i++){this.modules[i]=row.slice();this.isFunction[i]=row.slice()}// 计算错误纠正码(ECC),绘制模块
63
+ var row=Array(this.size).fill(false);for(var i=0;i<this.size;i++){this.modules[i]=row.slice();this.isFunction[i]=row.slice();}// 计算错误纠正码(ECC),绘制模块
64
64
  this.drawFunctionPatterns();// 构建 QR 码的主要流程
65
65
  var allCodewords=this.addEccAndInterleave(dataCodewords);this.drawCodewords(allCodewords);// 确定最终掩码
66
66
  this.mask=this.selectMask(msk);// 应用最终掩码并绘制格式位
67
67
  this.applyMask(this.mask);this.drawFormatBits(this.mask);// 构造完成, 丢弃
68
- this.isFunction=[]}/* -- 访问器方法 --*/// 返回给定坐标处模块(像素xy的颜色,浅色时为false,深色时为true);如果给定的坐标超出边界,则返回false(浅色)。
68
+ this.isFunction=[];}/* -- 访问器方法 --*/// 返回给定坐标处模块(像素xy的颜色,浅色时为false,深色时为true);如果给定的坐标超出边界,则返回false(浅色)。
69
69
  return _createClass(QrCode,[{key:"selectMask",value:// 选择最佳掩码
70
70
  function selectMask(msk){if(msk!==-1)return msk;var mask=0;var minPenalty=1000000000;for(var i=0;i<8;i++){// 自动选择最佳掩模
71
- this.applyMask(i);this.drawFormatBits(i);var penalty=this.getPenaltyScore();if(penalty<minPenalty){mask=i;minPenalty=penalty}// 撤销掩码
72
- this.applyMask(i)}assert(0<=mask&&mask<=7);return mask}},{key:"getModule",value:function getModule(x,y){return x>=0&&x<this.size&&y>=0&&y<this.size&&this.modules[y][x]}/* -- 构造函数的私有辅助方法:绘制功能模块 --*/// 读取该对象的版本字段,并绘制和标记所有功能模块。
71
+ this.applyMask(i);this.drawFormatBits(i);var penalty=this.getPenaltyScore();if(penalty<minPenalty){mask=i;minPenalty=penalty;}// 撤销掩码
72
+ this.applyMask(i);}assert(0<=mask&&mask<=7);return mask;}},{key:"getModule",value:function getModule(x,y){return x>=0&&x<this.size&&y>=0&&y<this.size&&this.modules[y][x];}/* -- 构造函数的私有辅助方法:绘制功能模块 --*/// 读取该对象的版本字段,并绘制和标记所有功能模块。
73
73
  },{key:"drawFunctionPatterns",value:function drawFunctionPatterns(){// 绘制水平和垂直定时图案
74
- for(var i=0;i<this.size;i++){var flag=i%2===0;this.setFunctionModule(6,i,flag);this.setFunctionModule(i,6,flag)}// 绘制 3 个定位图案(除了右下角的所有角落;会覆盖一些定时模块)
74
+ for(var i=0;i<this.size;i++){var flag=i%2===0;this.setFunctionModule(6,i,flag);this.setFunctionModule(i,6,flag);}// 绘制 3 个定位图案(除了右下角的所有角落;会覆盖一些定时模块)
75
75
  this.drawFinderPattern(3,3);var y=this.size-4;this.drawFinderPattern(y,3);this.drawFinderPattern(3,y);// 绘制多个对齐图案
76
76
  var alignPatPos=this.getAlignmentPatternPositions();var numAlign=alignPatPos.length;for(var _i3=0;_i3<numAlign;_i3++){for(var j=0;j<numAlign;j++){// 不在三个定位图案的角落处绘制
77
- if(!(_i3===0&&j===0||_i3===0&&j===numAlign-1||_i3===numAlign-1&&j===0)){this.drawAlignmentPattern(alignPatPos[_i3],alignPatPos[j])}}}// 绘制配置数据
77
+ if(!(_i3===0&&j===0||_i3===0&&j===numAlign-1||_i3===numAlign-1&&j===0)){this.drawAlignmentPattern(alignPatPos[_i3],alignPatPos[j]);}}}// 绘制配置数据
78
78
  this.drawFormatBits(0);// 临时掩码值;稍后在构造函数中会被覆盖
79
- this.drawVersion()}// 绘制格式位的两个副本(带有其自己的错误纠正码)
79
+ this.drawVersion();}// 绘制格式位的两个副本(带有其自己的错误纠正码)
80
80
  // 基于给定的掩码和该对象的错误纠正级别字段。
81
81
  },{key:"drawFormatBits",value:function drawFormatBits(mask){// 计算错误纠正码并打包位
82
82
  var data=this.errorCorrectionLevel.formatBits<<3|mask;// errCorrLvl 是 uint2 类型,mask 是 uint3 类型
83
83
  var rem=data;for(var i=0;i<10;i++)rem=rem<<1^(rem>>>9)*1335;var bits=(data<<10|rem)^21522;// uint15
84
84
  assert(bits>>>15===0);// 绘制第一个副本
85
- for(var _i4=0;_i4<=5;_i4++)this.setFunctionModule(8,_i4,getBit(bits,_i4));this.setFunctionModule(8,7,getBit(bits,6));this.setFunctionModule(8,8,getBit(bits,7));this.setFunctionModule(7,8,getBit(bits,8));for(var _i5=9;_i5<15;_i5++){this.setFunctionModule(14-_i5,8,getBit(bits,_i5))}// 绘制第二个副本
86
- for(var _i6=0;_i6<8;_i6++){this.setFunctionModule(this.size-1-_i6,8,getBit(bits,_i6))}for(var _i7=8;_i7<15;_i7++){this.setFunctionModule(8,this.size-15+_i7,getBit(bits,_i7))}this.setFunctionModule(8,this.size-8,true);// Always dark
85
+ for(var _i4=0;_i4<=5;_i4++)this.setFunctionModule(8,_i4,getBit(bits,_i4));this.setFunctionModule(8,7,getBit(bits,6));this.setFunctionModule(8,8,getBit(bits,7));this.setFunctionModule(7,8,getBit(bits,8));for(var _i5=9;_i5<15;_i5++){this.setFunctionModule(14-_i5,8,getBit(bits,_i5));}// 绘制第二个副本
86
+ for(var _i6=0;_i6<8;_i6++){this.setFunctionModule(this.size-1-_i6,8,getBit(bits,_i6));}for(var _i7=8;_i7<15;_i7++){this.setFunctionModule(8,this.size-15+_i7,getBit(bits,_i7));}this.setFunctionModule(8,this.size-8,true);// Always dark
87
87
  }// 如果7 <= version <= 40,则绘制版本位的两个副本(带有其自己的错误纠正码),
88
88
  // 基于该对象的版本字段。
89
89
  },{key:"drawVersion",value:function drawVersion(){if(this.version<7)return;// 计算错误纠正码并打包位
90
90
  var rem=this.version;// version 是 uint6 类型,范围在 [7, 40]
91
91
  for(var i=0;i<12;i++)rem=rem<<1^(rem>>>11)*7973;var bits=this.version<<12|rem;// uint18
92
92
  assert(bits>>>18===0);// 绘制两个副本
93
- for(var _i8=0;_i8<18;_i8++){var color=getBit(bits,_i8);var a=this.size-11+_i8%3;var b=Math.floor(_i8/3);this.setFunctionModule(a,b,color);this.setFunctionModule(b,a,color)}}// 绘制一个9*9的定位图案,包括边界分隔符,中心模块位于(x, y)。模块可以超出边界。
93
+ for(var _i8=0;_i8<18;_i8++){var color=getBit(bits,_i8);var a=this.size-11+_i8%3;var b=Math.floor(_i8/3);this.setFunctionModule(a,b,color);this.setFunctionModule(b,a,color);}}// 绘制一个9*9的定位图案,包括边界分隔符,中心模块位于(x, y)。模块可以超出边界。
94
94
  },{key:"drawFinderPattern",value:function drawFinderPattern(x,y){for(var dy=-4;dy<=4;dy++){for(var dx=-4;dx<=4;dx++){var dist=Math.max(Math.abs(dx),Math.abs(dy)),// Chebyshev/无穷范数
95
- xx=x+dx,yy=y+dy;if(0<=xx&&xx<this.size&&0<=yy&&yy<this.size){this.setFunctionModule(xx,yy,dist!==2&&dist!==4)}}}}// 绘制一个5*5的对齐图案,中心模块位于(x, y)。所有模块必须在边界内。
96
- },{key:"drawAlignmentPattern",value:function drawAlignmentPattern(x,y){for(var dy=-2;dy<=2;dy++){for(var dx=-2;dx<=2;dx++){this.setFunctionModule(x+dx,y+dy,Math.max(Math.abs(dx),Math.abs(dy))!==1)}}}// 设置模块的颜色并将其标记为功能模块。仅由构造函数使用。坐标必须在边界内。
97
- },{key:"setFunctionModule",value:function setFunctionModule(x,y,isDark){this.modules[y][x]=isDark;this.isFunction[y][x]=true}// 返回一个新的字节字符串,表示具有适当错误纠正码字的给定数据,基于该对象的版本和错误纠正级别。
98
- },{key:"addEccAndInterleave",value:function addEccAndInterleave(data){var ver=this.version,ecl=this.errorCorrectionLevel;if(data.length!==getNumDataCodewords(ver,ecl)){throw new RangeError("Invalid argument")}// 计算参数数值
95
+ xx=x+dx,yy=y+dy;if(0<=xx&&xx<this.size&&0<=yy&&yy<this.size){this.setFunctionModule(xx,yy,dist!==2&&dist!==4);}}}}// 绘制一个5*5的对齐图案,中心模块位于(x, y)。所有模块必须在边界内。
96
+ },{key:"drawAlignmentPattern",value:function drawAlignmentPattern(x,y){for(var dy=-2;dy<=2;dy++){for(var dx=-2;dx<=2;dx++){this.setFunctionModule(x+dx,y+dy,Math.max(Math.abs(dx),Math.abs(dy))!==1);}}}// 设置模块的颜色并将其标记为功能模块。仅由构造函数使用。坐标必须在边界内。
97
+ },{key:"setFunctionModule",value:function setFunctionModule(x,y,isDark){this.modules[y][x]=isDark;this.isFunction[y][x]=true;}// 返回一个新的字节字符串,表示具有适当错误纠正码字的给定数据,基于该对象的版本和错误纠正级别。
98
+ },{key:"addEccAndInterleave",value:function addEccAndInterleave(data){var ver=this.version,ecl=this.errorCorrectionLevel;if(data.length!==getNumDataCodewords(ver,ecl)){throw new RangeError("Invalid argument");}// 计算参数数值
99
99
  var numBlocks=NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver],blockEccLen=ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver],rawCodewords=Math.floor(getNumRawDataModules(ver)/8),numShortBlocks=numBlocks-rawCodewords%numBlocks,shortBlockLen=Math.floor(rawCodewords/numBlocks),blocks=[],// 将数据分割成块并为每个块附加ECC
100
- rsDiv=reedSolomonComputeDivisor(blockEccLen);for(var i=0,k=0;i<numBlocks;i++){var dat=data.slice(k,k+shortBlockLen-blockEccLen+(i<numShortBlocks?0:1));var ecc=reedSolomonComputeRemainder(dat,rsDiv);k+=dat.length;if(i<numShortBlocks)dat.push(0);blocks.push(dat.concat(ecc))}// 将每个块的字节交错(而不是连接)成单个序列
100
+ rsDiv=reedSolomonComputeDivisor(blockEccLen);for(var i=0,k=0;i<numBlocks;i++){var dat=data.slice(k,k+shortBlockLen-blockEccLen+(i<numShortBlocks?0:1));var ecc=reedSolomonComputeRemainder(dat,rsDiv);k+=dat.length;if(i<numShortBlocks)dat.push(0);blocks.push(dat.concat(ecc));}// 将每个块的字节交错(而不是连接)成单个序列
101
101
  var result=[];var _loop2=function _loop2(_i9){blocks.forEach(function(block,j){// 跳过短块中的填充字节
102
- if(_i9!==shortBlockLen-blockEccLen||j>=numShortBlocks){result.push(block[_i9])}})};for(var _i9=0;_i9<blocks[0].length;_i9++){_loop2(_i9)}assert(result.length===rawCodewords);return result}// 将给定的8位码字序列(数据和错误纠正)绘制到此QR码的整个
102
+ if(_i9!==shortBlockLen-blockEccLen||j>=numShortBlocks){result.push(block[_i9]);}});};for(var _i9=0;_i9<blocks[0].length;_i9++){_loop2(_i9)}assert(result.length===rawCodewords);return result;}// 将给定的8位码字序列(数据和错误纠正)绘制到此QR码的整个
103
103
  // 数据区域上。在调用此方法之前需要标记功能模块。
104
- },{key:"drawCodewords",value:function drawCodewords(data){if(data.length!==Math.floor(getNumRawDataModules(this.version)/8)){throw new RangeError("Invalid argument")}var i=0;// 数据的位索引
104
+ },{key:"drawCodewords",value:function drawCodewords(data){if(data.length!==Math.floor(getNumRawDataModules(this.version)/8)){throw new RangeError("Invalid argument");}var i=0;// 数据的位索引
105
105
  var len=data.length*8;// 执行特殊的之字形扫描
106
106
  for(var right=this.size-1;right>=1;right-=2){// 每对列中右列的索引
107
107
  if(right===6)right=5;for(var vert=0;vert<this.size;vert++){// 垂直计数器
108
108
  for(var j=0;j<2;j++){var x=right-j,// 实际的x坐标
109
109
  y=(right+1&2)===0?this.size-1-vert:vert;// 实际的y坐标
110
- if(!this.isFunction[y][x]&&i<len){this.modules[y][x]=getBit(data[i>>>3],7-(i&7));i++}// 如果此QR码有任何剩余位(0到7位),它们被构造函数赋值为0/false/浅色,且此方法不会改变它们
111
- }}}assert(i===len)}},{key:"applyMask",value:// 使用给定的掩码模式对此QR码中的码字模块进行XOR运算。在掩码之前必须标记功能模块并绘制码字位。
112
- function applyMask(mask){if(mask<0||mask>7)throw new RangeError("Mask value out of range");var maskPattern=this.MASK_PATTERNS[mask];for(var y=0;y<this.size;y++){for(var x=0;x<this.size;x++){if(!this.isFunction[y][x]&&maskPattern(x,y)){this.modules[y][x]=!this.modules[y][x]}}}}// 计算并返回基于此 QR 码当前模块状态的惩罚分数。用于自动掩码选择算法,以找到产生最低分数的掩码模式。
110
+ if(!this.isFunction[y][x]&&i<len){this.modules[y][x]=getBit(data[i>>>3],7-(i&7));i++;}// 如果此QR码有任何剩余位(0到7位),它们被构造函数赋值为0/false/浅色,且此方法不会改变它们
111
+ }}}assert(i===len);}},{key:"applyMask",value:// 使用给定的掩码模式对此QR码中的码字模块进行XOR运算。在掩码之前必须标记功能模块并绘制码字位。
112
+ function applyMask(mask){if(mask<0||mask>7)throw new RangeError("Mask value out of range");var maskPattern=this.MASK_PATTERNS[mask];for(var y=0;y<this.size;y++){for(var x=0;x<this.size;x++){if(!this.isFunction[y][x]&&maskPattern(x,y)){this.modules[y][x]=!this.modules[y][x];}}}}// 计算并返回基于此 QR 码当前模块状态的惩罚分数。用于自动掩码选择算法,以找到产生最低分数的掩码模式。
113
113
  },{key:"getPenaltyScore",value:function getPenaltyScore(){var result=0;// 行中具有相同颜色的相邻模块,以及查找器类似的模式
114
- for(var y=0;y<this.size;y++){var runColor=false;var runX=0;var runHistory=[0,0,0,0,0,0,0];for(var x=0;x<this.size;x++){if(this.modules[y][x]===runColor){runX++;if(runX===5)result+=QrCode.PENALTY.N1;else if(runX>5)result++}else{this.finderPenaltyAddHistory(runX,runHistory);if(!runColor){result+=this.finderPenaltyCountPatterns(runHistory)*QrCode.PENALTY.N3}runColor=this.modules[y][x];runX=1}}result+=this.finderPenaltyTerminateAndCount(runColor,runX,runHistory)*QrCode.PENALTY.N3}// 列中具有相同颜色的相邻模块,以及查找器类似的模式
115
- for(var _x=0;_x<this.size;_x++){var _runColor=false;var runY=0;var _runHistory=[0,0,0,0,0,0,0];for(var _y=0;_y<this.size;_y++){if(this.modules[_y][_x]===_runColor){runY++;if(runY===5)result+=QrCode.PENALTY.N1;else if(runY>5)result++}else{this.finderPenaltyAddHistory(runY,_runHistory);if(!_runColor){result+=this.finderPenaltyCountPatterns(_runHistory)*QrCode.PENALTY.N3}_runColor=this.modules[_y][_x];runY=1}}result+=this.finderPenaltyTerminateAndCount(_runColor,runY,_runHistory)*QrCode.PENALTY.N3}// 2*2 块的模块具相同的颜色
116
- for(var _y2=0;_y2<this.size-1;_y2++){for(var _x2=0;_x2<this.size-1;_x2++){var color=this.modules[_y2][_x2];if(color===this.modules[_y2][_x2+1]&&color===this.modules[_y2+1][_x2]&&color===this.modules[_y2+1][_x2+1]){result+=QrCode.PENALTY.N2}}}// 暗模块和亮模块的平衡
117
- var dark=0;var _iterator4=_createForOfIteratorHelper(this.modules),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var row=_step4.value;dark=row.reduce(function(sum,color){return sum+(color?1:0)},dark)}// 注意,size 是奇数,所以 dark/total !== 1/2
114
+ for(var y=0;y<this.size;y++){var runColor=false;var runX=0;var runHistory=[0,0,0,0,0,0,0];for(var x=0;x<this.size;x++){if(this.modules[y][x]===runColor){runX++;if(runX===5)result+=QrCode.PENALTY.N1;else if(runX>5)result++;}else{this.finderPenaltyAddHistory(runX,runHistory);if(!runColor){result+=this.finderPenaltyCountPatterns(runHistory)*QrCode.PENALTY.N3;}runColor=this.modules[y][x];runX=1;}}result+=this.finderPenaltyTerminateAndCount(runColor,runX,runHistory)*QrCode.PENALTY.N3;}// 列中具有相同颜色的相邻模块,以及查找器类似的模式
115
+ for(var _x=0;_x<this.size;_x++){var _runColor=false;var runY=0;var _runHistory=[0,0,0,0,0,0,0];for(var _y=0;_y<this.size;_y++){if(this.modules[_y][_x]===_runColor){runY++;if(runY===5)result+=QrCode.PENALTY.N1;else if(runY>5)result++;}else{this.finderPenaltyAddHistory(runY,_runHistory);if(!_runColor){result+=this.finderPenaltyCountPatterns(_runHistory)*QrCode.PENALTY.N3;}_runColor=this.modules[_y][_x];runY=1;}}result+=this.finderPenaltyTerminateAndCount(_runColor,runY,_runHistory)*QrCode.PENALTY.N3;}// 2*2 块的模块具相同的颜色
116
+ for(var _y2=0;_y2<this.size-1;_y2++){for(var _x2=0;_x2<this.size-1;_x2++){var color=this.modules[_y2][_x2];if(color===this.modules[_y2][_x2+1]&&color===this.modules[_y2+1][_x2]&&color===this.modules[_y2+1][_x2+1]){result+=QrCode.PENALTY.N2;}}}// 暗模块和亮模块的平衡
117
+ var dark=0;var _iterator4=_createForOfIteratorHelper(this.modules),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var row=_step4.value;dark=row.reduce(function(sum,color){return sum+(color?1:0)},dark);}// 注意,size 是奇数,所以 dark/total !== 1/2
118
118
  }catch(err){_iterator4.e(err)}finally{_iterator4.f()}var total=this.size*this.size;// 计算最小的整数 k >= 0,使得 (45-5k)% <= dark/total <= (55+5k)%
119
119
  var k=Math.ceil(Math.abs(dark*20-total*10)/total)-1;assert(0<=k&&k<=9);result+=k*QrCode.PENALTY.N4;assert(0<=result&&result<=2568888);// 基于默认值的非紧密上限
120
- return result}// 返回一个升序的位置列表,表示此版本号的对齐模式位置。每个位置在 [0,177) 范围内,并用于行和列轴。这可以实现为 40 个可变长度整数列表的查找表。
121
- },{key:"getAlignmentPatternPositions",value:function getAlignmentPatternPositions(){if(this.version===1)return[];var numAlign=Math.floor(this.version/7)+2,step=Math.floor((this.version*8+numAlign*3+5)/(numAlign*4-4))*2,result=[6];for(var pos=this.size-7;result.length<numAlign;pos-=step){result.splice(1,0,pos)}return result}// 只能在添加了亮色运行后立即调用,并返回 0、1 或 2。这是 getPenaltyScore() 的辅助函数。
120
+ return result;}// 返回一个升序的位置列表,表示此版本号的对齐模式位置。每个位置在 [0,177) 范围内,并用于行和列轴。这可以实现为 40 个可变长度整数列表的查找表。
121
+ },{key:"getAlignmentPatternPositions",value:function getAlignmentPatternPositions(){if(this.version===1)return[];var numAlign=Math.floor(this.version/7)+2,step=Math.floor((this.version*8+numAlign*3+5)/(numAlign*4-4))*2,result=[6];for(var pos=this.size-7;result.length<numAlign;pos-=step){result.splice(1,0,pos);}return result;}// 只能在添加了亮色运行后立即调用,并返回 0、1 或 2。这是 getPenaltyScore() 的辅助函数。
122
122
  },{key:"finderPenaltyCountPatterns",value:function finderPenaltyCountPatterns(runHistory){var n=runHistory[1];assert(n<=this.size*3);// 提前验证 n 的有效性
123
123
  if(n<=0)return 0;var validScore=runHistory[2]===n&&runHistory[3]===n*3&&runHistory[4]===n&&runHistory[5]===n;if(!validScore)return 0;// 检查两端的延伸模式
124
- var score=0;if(runHistory[0]>=n*4&&runHistory[6]>=n)score++;if(runHistory[6]>=n*4&&runHistory[0]>=n)score++;return score}// 必须在行(或列)的模块结束时调用。这是 getPenaltyScore() 的辅助函数。
124
+ var score=0;if(runHistory[0]>=n*4&&runHistory[6]>=n)score++;if(runHistory[6]>=n*4&&runHistory[0]>=n)score++;return score;}// 必须在行(或列)的模块结束时调用。这是 getPenaltyScore() 的辅助函数。
125
125
  },{key:"finderPenaltyTerminateAndCount",value:function finderPenaltyTerminateAndCount(runColor,runLength,runHistory){if(runColor){// 终止暗色运行
126
126
  this.finderPenaltyAddHistory(runLength,runHistory);// eslint-disable-next-line no-param-reassign
127
- runLength=0}// eslint-disable-next-line no-param-reassign
127
+ runLength=0;}// eslint-disable-next-line no-param-reassign
128
128
  runLength+=this.size;// 添加亮色边框到最终运行
129
- this.finderPenaltyAddHistory(runLength,runHistory);return this.finderPenaltyCountPatterns(runHistory)}// 将给定值推到前面并丢弃最后一个值。这是 getPenaltyScore() 的辅助函数。
129
+ this.finderPenaltyAddHistory(runLength,runHistory);return this.finderPenaltyCountPatterns(runHistory);}// 将给定值推到前面并丢弃最后一个值。这是 getPenaltyScore() 的辅助函数。
130
130
  },{key:"finderPenaltyAddHistory",value:function finderPenaltyAddHistory(runLength,runHistory){// eslint-disable-next-line no-param-reassign
131
131
  if(runHistory[0]===0)runLength+=this.size;// 添加亮色边框到初始运行
132
- runHistory.pop();runHistory.unshift(runLength)}}])}();// 将给定数值的低位比特位追加到给定缓冲区。要求 0 <= len <= 31 且 0 <= val < 2^len。
132
+ runHistory.pop();runHistory.unshift(runLength);}}])}();// 将给定数值的低位比特位追加到给定缓冲区。要求 0 <= len <= 31 且 0 <= val < 2^len。
133
133
  // 支持的版本, QR码模型2标准
134
134
  _defineProperty(QrCode,"VERSION",{MIN:1,MAX:40});// 惩罚分数常量, 用于 getPenaltyScore(),在评估哪个掩码最佳时使用。
135
135
  _defineProperty(QrCode,"PENALTY",{N1:3,// 相同颜色的连续模块
136
136
  N2:3,// 2x2 块
137
137
  N3:40,// 查找器类似模式
138
138
  N4:10// 暗模块比例
139
- });function appendBits(val,len,bb){if(len<0||len>31||val>>>len!==0){throw new RangeError("Value out of range")}for(var i=len-1;i>=0;i--){// 逐位追加
140
- bb.push(val>>>i&1)}}// 返回x的第i位是否为1。
141
- function getBit(x,i){return(x>>>i&1)!==0}// 如果给定条件为false则抛出异常。
142
- function assert(cond){if(!cond)throw new Error("Assertion error")}/*
139
+ });function appendBits(val,len,bb){if(len<0||len>31||val>>>len!==0){throw new RangeError("Value out of range");}for(var i=len-1;i>=0;i--){// 逐位追加
140
+ bb.push(val>>>i&1);}}// 返回x的第i位是否为1。
141
+ function getBit(x,i){return(x>>>i&1)!==0;}// 如果给定条件为false则抛出异常。
142
+ function assert(cond){if(!cond)throw new Error("Assertion error");}/*
143
143
  * QR码符号中的 字符/二进制 数据段
144
144
  */var QrSegment=/*#__PURE__*/function(){// 使用给定的属性和数据创建一个新的QR码段。字符计数(numChars)必须与模式和位缓冲区长度一致,但不进行检查。给定的位缓冲区被克隆并存储。
145
145
  function QrSegment(// 此段的模式指示符。
@@ -150,25 +150,25 @@ bitData){_classCallCheck(this,QrSegment);this.mode=mode;this.numChars=numChars;t
150
150
  return _createClass(QrSegment,[{key:"getData",value:function getData(){return this.bitData.slice();// 进行防御性拷贝
151
151
  }}])}();var NUMERIC_REGEX=/^[0-9]*$/;var ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+./:-]*$/;// 字母数字模式中所有合法字符的集合,其中每个字符值映射到字符串中的索引。
152
152
  var ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";// 是否可以用数字模式编码。当且仅当每个字符都在0到9的范围内时,字符串可编码。
153
- function isNumeric(text){return NUMERIC_REGEX.test(text)}/**
153
+ function isNumeric(text){return NUMERIC_REGEX.test(text);}/**
154
154
  * 是否可以用字母数字模式编码
155
155
  * @description 0到9、A到Z仅大写)、空格、美元符号、百分号、星号、加号、连字符、句点、斜杠、冒号。
156
156
  * @param {String} text 给定字符串
157
157
  * @returns {Boolean} boolean
158
- */function isAlphanumeric(text){return ALPHANUMERIC_REGEX.test(text)}// 返回一个表示以字节模式编码的给定二进制数据的段。所有输入字节数组都是可接受的。任何文本字符串都可以转换为UTF-8字节并编码为字节模式段。
159
- function makeBytes(data){var bb=[];var _iterator5=_createForOfIteratorHelper(data),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var b=_step5.value;appendBits(b,8,bb)}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}return new QrSegment(QrMode.get("BYTE"),data.length,bb)}// 计算并返回在给定版本下编码给定段所需的位数。如果某个段的字符数太多以至于无法适应其长度字段,则结果为无穷大。
158
+ */function isAlphanumeric(text){return ALPHANUMERIC_REGEX.test(text);}// 返回一个表示以字节模式编码的给定二进制数据的段。所有输入字节数组都是可接受的。任何文本字符串都可以转换为UTF-8字节并编码为字节模式段。
159
+ function makeBytes(data){var bb=[];var _iterator5=_createForOfIteratorHelper(data),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var b=_step5.value;appendBits(b,8,bb);}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}return new QrSegment(QrMode.get("BYTE"),data.length,bb);}// 计算并返回在给定版本下编码给定段所需的位数。如果某个段的字符数太多以至于无法适应其长度字段,则结果为无穷大。
160
160
  function getTotalBits(segs,version){var result=0;var _iterator6=_createForOfIteratorHelper(segs),_step6;try{for(_iterator6.s();!(_step6=_iterator6.n()).done;){var seg=_step6.value;var ccbits=seg.mode.numCharCountBits(version);if(seg.numChars>=1<<ccbits)return Infinity;// 段的长度不适合字段的位宽度
161
- result+=4+ccbits+seg.bitData.length}}catch(err){_iterator6.e(err)}finally{_iterator6.f()}return result}// 返回一个表示以数字模式编码的给定十进制数字字符串的段。
162
- function makeNumeric(digits){if(!isNumeric(digits)){throw new RangeError("String contains non-numeric characters")}var bb=[];for(var i=0;i<digits.length;){// 每次迭代最多消耗3个数字
163
- var n=Math.min(digits.length-i,3);appendBits(parseInt(digits.substring(i,i+n),10),n*3+1,bb);i+=n}return new QrSegment(QrMode.get("NUMERIC"),digits.length,bb)}// 返回一个表示以字母数字模式编码的给定文本字符串的段。允许的字符是:0到9、A到Z(仅大写)、空格、美元符号、百分号、星号、加号、连字符、句点、斜杠、冒号。
164
- function makeAlphanumeric(text){if(!isAlphanumeric(text)){throw new RangeError("String contains unencodable characters in alphanumeric mode")}var bb=[];var i;for(i=0;i+2<=text.length;i+=2){// 处理每组2个字符
165
- var temp=ALPHANUMERIC_CHARSET.indexOf(text.charAt(i))*45;temp+=ALPHANUMERIC_CHARSET.indexOf(text.charAt(i+1));appendBits(temp,11,bb)}// 剩下1个字符
166
- if(i<text.length){appendBits(ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)),6,bb)}return new QrSegment(QrMode.get("ALPHANUMERIC"),text.length,bb)}/*
161
+ result+=4+ccbits+seg.bitData.length;}}catch(err){_iterator6.e(err)}finally{_iterator6.f()}return result;}// 返回一个表示以数字模式编码的给定十进制数字字符串的段。
162
+ function makeNumeric(digits){if(!isNumeric(digits)){throw new RangeError("String contains non-numeric characters");}var bb=[];for(var i=0;i<digits.length;){// 每次迭代最多消耗3个数字
163
+ var n=Math.min(digits.length-i,3);appendBits(parseInt(digits.substring(i,i+n),10),n*3+1,bb);i+=n;}return new QrSegment(QrMode.get("NUMERIC"),digits.length,bb);}// 返回一个表示以字母数字模式编码的给定文本字符串的段。允许的字符是:0到9、A到Z(仅大写)、空格、美元符号、百分号、星号、加号、连字符、句点、斜杠、冒号。
164
+ function makeAlphanumeric(text){if(!isAlphanumeric(text)){throw new RangeError("String contains unencodable characters in alphanumeric mode");}var bb=[];var i;for(i=0;i+2<=text.length;i+=2){// 处理每组2个字符
165
+ var temp=ALPHANUMERIC_CHARSET.indexOf(text.charAt(i))*45;temp+=ALPHANUMERIC_CHARSET.indexOf(text.charAt(i+1));appendBits(temp,11,bb);}// 剩下1个字符
166
+ if(i<text.length){appendBits(ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)),6,bb);}return new QrSegment(QrMode.get("ALPHANUMERIC"),text.length,bb);}/*
167
167
  * QR码符号中的错误纠正级别
168
168
  */var Ecc=exports.Ecc=/*#__PURE__*/function(){function Ecc(// 在0到3范围内(无符号2位整数)。
169
169
  ordinal,// (包私有) 在0到3范围内(无符号2位整数)。
170
170
  formatBits){_classCallCheck(this,Ecc);this.ordinal=ordinal;this.formatBits=formatBits}return _createClass(Ecc,null,[{key:"get",value:// 获取指定级别的 ECC
171
- function get(level){return Ecc.LEVELS[level]}}])}();/*
171
+ function get(level){return Ecc.LEVELS[level];}}])}();/*
172
172
  * 描述如何解释段的数据位。不可变。
173
173
  */_Ecc=Ecc;_defineProperty(Ecc,"LEVELS",{LOW:new _Ecc(0,1),// 7% 错误容忍率
174
174
  MEDIUM:new _Ecc(1,0),// 15% 错误容忍率
@@ -177,5 +177,5 @@ HIGH:new _Ecc(3,2)// 30% 错误容忍率
177
177
  });var QrMode=/*#__PURE__*/function(){function QrMode(// 模式指示位,是一个uint4值(范围0到15)。
178
178
  modeBits,// 三个不同版本范围的字符计数位数。
179
179
  numBitsCharCount){_classCallCheck(this,QrMode);this.modeBits=modeBits;this.numBitsCharCount=numBitsCharCount}return _createClass(QrMode,[{key:"numCharCountBits",value:// 范围计算
180
- function numCharCountBits(version){return this.numBitsCharCount[Math.floor((version+7)/17)]}}],[{key:"get",value:function get(mode){return QrMode.modes[mode]}}])}();_QrMode=QrMode;_defineProperty(QrMode,"modes",{NUMERIC:new _QrMode(1,[10,12,14]),ALPHANUMERIC:new _QrMode(2,[9,11,13]),BYTE:new _QrMode(4,[8,16,16]),KANJI:new _QrMode(8,[8,10,12]),ECI:new _QrMode(7,[0,0,0])});
181
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFQ0NfQ09ERVdPUkRTX1BFUl9CTE9DSyIsIk5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLUyIsImdldE51bVJhd0RhdGFNb2R1bGVzIiwidmVyIiwiUXJDb2RlIiwiVkVSU0lPTiIsIk1JTiIsIk1BWCIsIlJhbmdlRXJyb3IiLCJyZXN1bHQiLCJudW1BbGlnbiIsIk1hdGgiLCJmbG9vciIsImFzc2VydCIsImdldE51bURhdGFDb2Rld29yZHMiLCJlY2wiLCJvcmRpbmFsIiwiZW5jb2RlU2VnbWVudHMiLCJzZWdzIiwibWluVmVyc2lvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm1heFZlcnNpb24iLCJtYXNrIiwiYm9vc3RFY2wiLCJ2ZXJzaW9uIiwiZGF0YVVzZWRCaXRzIiwiX2VjbCIsImRhdGFDYXBhY2l0eUJpdHMiLCJ1c2VkQml0cyIsImdldFRvdGFsQml0cyIsIl9pIiwiX2FyciIsIkVjYyIsImdldCIsIm5ld0VjbCIsImJiIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInNlZyIsInZhbHVlIiwiYXBwZW5kQml0cyIsIm1vZGUiLCJtb2RlQml0cyIsIm51bUNoYXJzIiwibnVtQ2hhckNvdW50Qml0cyIsIl9pdGVyYXRvcjIiLCJnZXREYXRhIiwiX3N0ZXAyIiwiYiIsInB1c2giLCJlcnIiLCJlIiwiZiIsIm1pbiIsInBhZEJ5dGUiLCJkYXRhQ29kZXdvcmRzIiwiZm9yRWFjaCIsImkiLCJ0b1V0ZjhCeXRlQXJyYXkiLCJzdHIiLCJlbmNvZGVVUkkiLCJjaGFyQXQiLCJjaGFyQ29kZUF0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJtYWtlU2VnbWVudHMiLCJ0ZXh0IiwiaXNOdW1lcmljIiwibWFrZU51bWVyaWMiLCJpc0FscGhhbnVtZXJpYyIsIm1ha2VBbHBoYW51bWVyaWMiLCJtYWtlQnl0ZXMiLCJyZWVkU29sb21vbkNvbXB1dGVEaXZpc29yIiwiZGVncmVlIiwicm9vdCIsImoiLCJyZWVkU29sb21vbk11bHRpcGx5IiwicmVlZFNvbG9tb25Db21wdXRlUmVtYWluZGVyIiwiZGF0YSIsImRpdmlzb3IiLCJtYXAiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiX2xvb3AiLCJmYWN0b3IiLCJzaGlmdCIsImNvZWYiLCJ4IiwieSIsInoiLCJlcnJvckNvcnJlY3Rpb25MZXZlbCIsIm1zayIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIl8iLCJzaXplIiwicm93IiwiQXJyYXkiLCJmaWxsIiwibW9kdWxlcyIsInNsaWNlIiwiaXNGdW5jdGlvbiIsImRyYXdGdW5jdGlvblBhdHRlcm5zIiwiYWxsQ29kZXdvcmRzIiwiYWRkRWNjQW5kSW50ZXJsZWF2ZSIsImRyYXdDb2Rld29yZHMiLCJzZWxlY3RNYXNrIiwiYXBwbHlNYXNrIiwiZHJhd0Zvcm1hdEJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJtaW5QZW5hbHR5IiwicGVuYWx0eSIsImdldFBlbmFsdHlTY29yZSIsImdldE1vZHVsZSIsImZsYWciLCJzZXRGdW5jdGlvbk1vZHVsZSIsImRyYXdGaW5kZXJQYXR0ZXJuIiwiYWxpZ25QYXRQb3MiLCJnZXRBbGlnbm1lbnRQYXR0ZXJuUG9zaXRpb25zIiwiZHJhd0FsaWdubWVudFBhdHRlcm4iLCJkcmF3VmVyc2lvbiIsImZvcm1hdEJpdHMiLCJyZW0iLCJiaXRzIiwiZ2V0Qml0IiwiY29sb3IiLCJhIiwiZHkiLCJkeCIsImRpc3QiLCJtYXgiLCJhYnMiLCJ4eCIsInl5IiwiaXNEYXJrIiwibnVtQmxvY2tzIiwiYmxvY2tFY2NMZW4iLCJyYXdDb2Rld29yZHMiLCJudW1TaG9ydEJsb2NrcyIsInNob3J0QmxvY2tMZW4iLCJibG9ja3MiLCJyc0RpdiIsImsiLCJkYXQiLCJlY2MiLCJjb25jYXQiLCJfbG9vcDIiLCJfaTkiLCJibG9jayIsImxlbiIsInJpZ2h0IiwidmVydCIsIm1hc2tQYXR0ZXJuIiwiTUFTS19QQVRURVJOUyIsInJ1bkNvbG9yIiwicnVuWCIsInJ1bkhpc3RvcnkiLCJQRU5BTFRZIiwiTjEiLCJmaW5kZXJQZW5hbHR5QWRkSGlzdG9yeSIsImZpbmRlclBlbmFsdHlDb3VudFBhdHRlcm5zIiwiTjMiLCJmaW5kZXJQZW5hbHR5VGVybWluYXRlQW5kQ291bnQiLCJydW5ZIiwiTjIiLCJkYXJrIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsInJlZHVjZSIsInN1bSIsInRvdGFsIiwiY2VpbCIsIk40Iiwic3RlcCIsInBvcyIsInNwbGljZSIsInZhbGlkU2NvcmUiLCJzY29yZSIsInJ1bkxlbmd0aCIsInBvcCIsInVuc2hpZnQiLCJ2YWwiLCJjb25kIiwiRXJyb3IiLCJRclNlZ21lbnQiLCJiaXREYXRhIiwiTlVNRVJJQ19SRUdFWCIsIkFMUEhBTlVNRVJJQ19SRUdFWCIsIkFMUEhBTlVNRVJJQ19DSEFSU0VUIiwidGVzdCIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJRck1vZGUiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwiY2NiaXRzIiwiSW5maW5pdHkiLCJkaWdpdHMiLCJ0ZW1wIiwiaW5kZXhPZiIsImV4cG9ydHMiLCJsZXZlbCIsIkxFVkVMUyIsIl9FY2MiLCJMT1ciLCJNRURJVU0iLCJRVUFSVElMRSIsIkhJR0giLCJudW1CaXRzQ2hhckNvdW50IiwibW9kZXMiLCJfUXJNb2RlIiwiTlVNRVJJQyIsIkFMUEhBTlVNRVJJQyIsIkJZVEUiLCJLQU5KSSIsIkVDSSJdLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvcXJjb2RlL3FyY29kZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUVIgQ29kZSBnZW5lcmF0b3IgbGlicmFyeVxuICpcbiAqIENvcHlyaWdodCAoYykgUHJvamVjdCBOYXl1a2kuIChNSVQgTGljZW5zZSlcbiAqIGh0dHBzOi8vd3d3Lm5heXVraS5pby9wYWdlL3FyLWNvZGUtZ2VuZXJhdG9yLWxpYnJhcnlcbiAqL1xuXG4vLyDms6jmhI/ntKLlvJUw55So5LqO5aGr5YWF77yM5bm26K6+572u5Li65LiA5Liq6Z2e5rOV5YC8XG5jb25zdCBFQ0NfQ09ERVdPUkRTX1BFUl9CTE9DSyA9IFtcbiAgW1xuICAgIC0xLCA3LCAxMCwgMTUsIDIwLCAyNiwgMTgsIDIwLCAyNCwgMzAsIDE4LCAyMCwgMjQsIDI2LCAzMCwgMjIsIDI0LCAyOCwgMzAsIDI4LCAyOCwgMjgsIDI4LCAzMCxcbiAgICAzMCwgMjYsIDI4LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsXG4gIF0sIC8vIExvd1xuICBbXG4gICAgLTEsIDEwLCAxNiwgMjYsIDE4LCAyNCwgMTYsIDE4LCAyMiwgMjIsIDI2LCAzMCwgMjIsIDIyLCAyNCwgMjQsIDI4LCAyOCwgMjYsIDI2LCAyNiwgMjYsIDI4LCAyOCxcbiAgICAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsXG4gIF0sIC8vIE1lZGl1bVxuICBbXG4gICAgLTEsIDEzLCAyMiwgMTgsIDI2LCAxOCwgMjQsIDE4LCAyMiwgMjAsIDI0LCAyOCwgMjYsIDI0LCAyMCwgMzAsIDI0LCAyOCwgMjgsIDI2LCAzMCwgMjgsIDMwLCAzMCxcbiAgICAzMCwgMzAsIDI4LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsXG4gIF0sIC8vIFF1YXJ0aWxlXG4gIFtcbiAgICAtMSwgMTcsIDI4LCAyMiwgMTYsIDIyLCAyOCwgMjYsIDI2LCAyNCwgMjgsIDI0LCAyOCwgMjIsIDI0LCAyNCwgMzAsIDI4LCAyOCwgMjYsIDI4LCAzMCwgMjQsIDMwLFxuICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCxcbiAgXSwgLy8gSGlnaFxuXTtcbmNvbnN0IE5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLUyA9IFtcbiAgW1xuICAgIC0xLCAxLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCA0LCA0LCA0LCA0LCA0LCA2LCA2LCA2LCA2LCA3LCA4LCA4LCA5LCA5LCAxMCwgMTIsIDEyLCAxMiwgMTMsIDE0LFxuICAgIDE1LCAxNiwgMTcsIDE4LCAxOSwgMTksIDIwLCAyMSwgMjIsIDI0LCAyNSxcbiAgXSxcbiAgW1xuICAgIC0xLCAxLCAxLCAxLCAyLCAyLCA0LCA0LCA0LCA1LCA1LCA1LCA4LCA5LCA5LCAxMCwgMTAsIDExLCAxMywgMTQsIDE2LCAxNywgMTcsIDE4LCAyMCwgMjEsIDIzLFxuICAgIDI1LCAyNiwgMjgsIDI5LCAzMSwgMzMsIDM1LCAzNywgMzgsIDQwLCA0MywgNDUsIDQ3LCA0OSxcbiAgXSxcbiAgW1xuICAgIC0xLCAxLCAxLCAyLCAyLCA0LCA0LCA2LCA2LCA4LCA4LCA4LCAxMCwgMTIsIDE2LCAxMiwgMTcsIDE2LCAxOCwgMjEsIDIwLCAyMywgMjMsIDI1LCAyNywgMjksIDM0LFxuICAgIDM0LCAzNSwgMzgsIDQwLCA0MywgNDUsIDQ4LCA1MSwgNTMsIDU2LCA1OSwgNjIsIDY1LCA2OCxcbiAgXSxcbiAgW1xuICAgIC0xLCAxLCAxLCAyLCA0LCA0LCA0LCA1LCA2LCA4LCA4LCAxMSwgMTEsIDE2LCAxNiwgMTgsIDE2LCAxOSwgMjEsIDI1LCAyNSwgMjUsIDM0LCAzMCwgMzIsIDM1LFxuICAgIDM3LCA0MCwgNDIsIDQ1LCA0OCwgNTEsIDU0LCA1NywgNjAsIDYzLCA2NiwgNzAsIDc0LCA3NywgODEsXG4gIF0sXG5dO1xuXG4vLyDov5Tlm57lnKjnu5nlrprniYjmnKznmoRRUueggeS4reWPr+S7peWtmOWCqOeahOaVsOaNruS9jeaVsO+8jOW3suaOkumZpOaJgOacieWKn+iDveaooeWdl+OAgui/meWMheaLrOS9meaVsOS9je+8jOWboOatpOWPr+iDveS4jeaYrzjnmoTlgI3mlbDjgILnu5PmnpzojIPlm7TlnKhbMjA4LCAyOTY0OF3kuYvpl7TjgILov5nlj6/ku6Xlrp7njrDkuLrkuIDkuKo0MOmhueeahOafpeaJvuihqOOAglxuZnVuY3Rpb24gZ2V0TnVtUmF3RGF0YU1vZHVsZXModmVyOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodmVyIDwgUXJDb2RlLlZFUlNJT04uTUlOIHx8IHZlciA+IFFyQ29kZS5WRVJTSU9OLk1BWCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZXJzaW9uIG51bWJlciBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxuICBsZXQgcmVzdWx0ID0gKDE2ICogdmVyICsgMTI4KSAqIHZlciArIDY0O1xuXG4gIGlmICh2ZXIgPj0gMikge1xuICAgIGNvbnN0IG51bUFsaWduID0gTWF0aC5mbG9vcih2ZXIgLyA3KSArIDI7XG5cbiAgICByZXN1bHQgLT0gKDI1ICogbnVtQWxpZ24gLSAxMCkgKiBudW1BbGlnbiAtIDU1O1xuICAgIGlmICh2ZXIgPj0gNykgcmVzdWx0IC09IDM2O1xuICB9XG4gIGFzc2VydCgyMDggPD0gcmVzdWx0ICYmIHJlc3VsdCA8PSAyOTY0OCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vLyDov5Tlm57mjIflrprniYjmnKzlj7flkoznuqDplJnnuqfliKvnmoQgUVIg56CB5YyF5ZCr55qEIDgg5L2N5pWw5o2u56CB5a2X5pWw6YeP77yI5Y2z6Z2e57qg6ZSZ56CB5a2X77yJ77yM5L2Z5L2N6KKr6IiN5byD44CC6L+Z5Liq5peg54q25oCB55qE57qv5Ye95pWw5Y+v5Lul5a6e546w5Li65LiA5LiqICg0MCo0KSDlpKflsI/nmoTmn6Xmib7ooajjgIJcbmZ1bmN0aW9uIGdldE51bURhdGFDb2Rld29yZHModmVyOiBudW1iZXIsIGVjbDogRWNjKTogbnVtYmVyIHtcbiAgcmV0dXJuIChcbiAgICBNYXRoLmZsb29yKGdldE51bVJhd0RhdGFNb2R1bGVzKHZlcikgLyA4KSAtXG4gICAgRUNDX0NPREVXT1JEU19QRVJfQkxPQ0tbZWNsLm9yZGluYWxdW3Zlcl0gKiBOVU1fRVJST1JfQ09SUkVDVElPTl9CTE9DS1NbZWNsLm9yZGluYWxdW3Zlcl1cbiAgKTtcbn1cbi8qKlxuICog55Sf5oiQ5LiA5LiqIFFSIOeggVxuICogQGRlc2NyaXB0aW9uXG4gKiDmoLnmja7nu5nlrprnmoTmlbDmja7mrrXlkoznvJbnoIHlj4LmlbDnlJ/miJAgUVIg56CB44CC6L6T5Ye65pe25Lya6Ieq5Yqo6YCJ5oup57uZ5a6a6IyD5Zu05YaF5bC95Y+v6IO95bCP55qEIFFSIOeggeeJiOacrFxuICogQHBhcmFtIHtSZWFkb25seTxRclNlZ21lbnRbXT59IHNlZ3MgLSDopoHnvJbnoIHnmoQgUVIg5pWw5o2u5q61XG4gKiBAcGFyYW0ge0VjY30gZWNsIC0g57qg6ZSZ57qn5YirXG4gKiBAcGFyYW0ge0ludFJhbmdlPDEsIDQxPn0gW21pblZlcnNpb249MV0gLSDmnIDlsI/niYjmnKzvvIjpu5jorqTkuLogMe+8iVxuICogQHBhcmFtIHtJbnRSYW5nZTwxLCA0MT59IFttYXhWZXJzaW9uPTQwXSAtIOacgOWkp+eJiOacrO+8iOm7mOiupOS4uiA0MO+8iVxuICogQHBhcmFtIHstMSB8IEludFJhbmdlPDAsIDg+fSBbbWFzaz0tMV0gLSDmjqnnoIHmqKHlvI/vvIjpu5jorqTkuLogLTHvvIzooajnpLroh6rliqjpgInmi6nvvIlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Jvb3N0RWNsPXRydWVdIC0g5Zyo5pWw5o2u5LuN54S26YCC5ZCI5b2T5YmN54mI5pys5Y+355qE5oOF5Ya15LiL5o+Q6auY57qg6ZSZ57qn5Yir77yI6buY6K6k5Li6IHRydWXvvInjgIJcbiAqIEByZXR1cm5zIHtRckNvZGV9IOi/lOWbnueUn+aIkOeahCBRUiDnoIHjgIJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVNlZ21lbnRzKFxuICBzZWdzOiBSZWFkb25seTxRclNlZ21lbnRbXT4sXG4gIGVjbDogRWNjLFxuICBtaW5WZXJzaW9uOiBJbnRSYW5nZTwxLCA0MT4gPSAxLFxuICBtYXhWZXJzaW9uOiBJbnRSYW5nZTwxLCA0MT4gPSA0MCxcbiAgbWFzazogLTEgfCBJbnRSYW5nZTwwLCA4PiA9IC0xLFxuICBib29zdEVjbDogYm9vbGVhbiA9IHRydWUsXG4pOiBRckNvZGUge1xuICBpZiAoXG4gICAgIShcbiAgICAgIFFyQ29kZS5WRVJTSU9OLk1JTiA8PSBtaW5WZXJzaW9uICYmXG4gICAgICBtaW5WZXJzaW9uIDw9IG1heFZlcnNpb24gJiZcbiAgICAgIG1heFZlcnNpb24gPD0gUXJDb2RlLlZFUlNJT04uTUFYXG4gICAgKSB8fFxuICAgIG1hc2sgPCAtMSB8fFxuICAgIG1hc2sgPiA3XG4gICkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHZhbHVlJyk7XG4gIH1cbiAgLy8g5p+l5om+6KaB5L2/55So55qE5pyA5bCP54mI5pys5Y+3XG4gIGxldCB2ZXJzaW9uOiBJbnRSYW5nZTwxLCA0MT4sXG4gICAgZGF0YVVzZWRCaXRzOiBudW1iZXIsXG4gICAgX2VjbCA9IGVjbDtcblxuICBmb3IgKHZlcnNpb24gPSBtaW5WZXJzaW9uOyA7IHZlcnNpb24rKykge1xuICAgIGNvbnN0IGRhdGFDYXBhY2l0eUJpdHMgPSBnZXROdW1EYXRhQ29kZXdvcmRzKHZlcnNpb24sIF9lY2wpICogOCwgLy8g5Y+v55So55qE5pWw5o2u5L2N5pWwXG4gICAgICB1c2VkQml0cyA9IGdldFRvdGFsQml0cyhzZWdzLCB2ZXJzaW9uKTtcblxuICAgIC8vIOaJvuWIsOWQiOmAgueahOeJiOacrOWPt1xuICAgIGlmICh1c2VkQml0cyA8PSBkYXRhQ2FwYWNpdHlCaXRzKSB7XG4gICAgICBkYXRhVXNlZEJpdHMgPSB1c2VkQml0cztcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodmVyc2lvbiA+PSBtYXhWZXJzaW9uKSB7XG4gICAgICAvLyDojIPlm7TlhoXnmoTmiYDmnInniYjmnKzpg73ml6Dms5XlrrnnurPnu5nlrprmlbDmja5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEYXRhIHRvbyBsb25nJyk7XG4gICAgfVxuICB9XG4gIC8vIOaPkOmrmOe6oOmUmee6p+WIqzsg5LuO5L2O5Yiw6auYXG4gIGlmIChib29zdEVjbCkge1xuICAgIGZvciAoY29uc3QgbmV3RWNsIG9mIFtFY2MuZ2V0KCdNRURJVU0nKSwgRWNjLmdldCgnUVVBUlRJTEUnKSwgRWNjLmdldCgnSElHSCcpXSkge1xuICAgICAgaWYgKGRhdGFVc2VkQml0cyA8PSBnZXROdW1EYXRhQ29kZXdvcmRzKHZlcnNpb24sIG5ld0VjbCkgKiA4KSBfZWNsID0gbmV3RWNsO1xuICAgIH1cbiAgfVxuICAvLyDov57mjqXmiYDmnInmrrXku6XliJvlu7rmlbDmja7kvY3lrZfnrKbkuLJcbiAgY29uc3QgYmI6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChjb25zdCBzZWcgb2Ygc2Vncykge1xuICAgIGFwcGVuZEJpdHMoc2VnLm1vZGUubW9kZUJpdHMsIDQsIGJiKTtcbiAgICBhcHBlbmRCaXRzKHNlZy5udW1DaGFycywgc2VnLm1vZGUubnVtQ2hhckNvdW50Qml0cyh2ZXJzaW9uKSwgYmIpO1xuICAgIGZvciAoY29uc3QgYiBvZiBzZWcuZ2V0RGF0YSgpKSBiYi5wdXNoKGIpO1xuICB9XG4gIGFzc2VydChiYi5sZW5ndGggPT09IGRhdGFVc2VkQml0cyk7XG4gIC8vIOa3u+WKoOe7iOatouespuW5tuWhq+WFheiHs+Wtl+iKgui+ueeVjCjlpoLmnpzpgILnlKgpXG4gIGNvbnN0IGRhdGFDYXBhY2l0eUJpdHM6IG51bWJlciA9IGdldE51bURhdGFDb2Rld29yZHModmVyc2lvbiwgX2VjbCkgKiA4O1xuXG4gIGFzc2VydChiYi5sZW5ndGggPD0gZGF0YUNhcGFjaXR5Qml0cyk7XG4gIGFwcGVuZEJpdHMoMCwgTWF0aC5taW4oNCwgZGF0YUNhcGFjaXR5Qml0cyAtIGJiLmxlbmd0aCksIGJiKTtcbiAgYXBwZW5kQml0cygwLCAoOCAtIChiYi5sZW5ndGggJSA4KSkgJSA4LCBiYik7XG4gIGFzc2VydChiYi5sZW5ndGggJSA4ID09PSAwKTtcbiAgLy8g55So5Lqk5pu/5a2X6IqC5aGr5YWF55u05Yiw6L6+5Yiw5pWw5o2u5a656YePXG4gIGZvciAobGV0IHBhZEJ5dGUgPSAweGVjOyBiYi5sZW5ndGggPCBkYXRhQ2FwYWNpdHlCaXRzOyBwYWRCeXRlIF49IDB4ZWMgXiAweDExKSB7XG4gICAgYXBwZW5kQml0cyhwYWRCeXRlLCA4LCBiYik7XG4gIH1cbiAgLy8g5Lul5aSn56uv5bqP5bCG5L2N5omT5YyF5oiQ5a2X6IqCXG4gIGNvbnN0IGRhdGFDb2Rld29yZHM6IG51bWJlcltdID0gW107XG5cbiAgd2hpbGUgKGRhdGFDb2Rld29yZHMubGVuZ3RoICogOCA8IGJiLmxlbmd0aCkgZGF0YUNvZGV3b3Jkcy5wdXNoKDApO1xuICBiYi5mb3JFYWNoKChiLCBpKSA9PiAoZGF0YUNvZGV3b3Jkc1tpID4+PiAzXSB8PSBiIDw8ICg3IC0gKGkgJiA3KSkpKTtcbiAgcmV0dXJuIG5ldyBRckNvZGUodmVyc2lvbiwgX2VjbCwgZGF0YUNvZGV3b3JkcywgbWFzayk7XG59XG5cbi8vIOi/lOWbnuihqOekuue7meWumuWtl+espuS4sueahFVURi0457yW56CB5a2X6IqC5pWw57uEXG5mdW5jdGlvbiB0b1V0ZjhCeXRlQXJyYXkoc3RyOiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBzdHIgPSBlbmNvZGVVUkkoc3RyKTtcbiAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0ci5jaGFyQXQoaSkgIT09ICclJykgcmVzdWx0LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICAgIGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpICsgMSwgaSArIDMpLCAxNikpO1xuICAgICAgaSArPSAyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyDov5Tlm57kuIDkuKrmlrDnmoTlj6/lj5jmrrXliJfooags55So5LqO6KGo56S657uZ5a6a55qEVW5pY29kZeaWh+acrOWtl+espuS4suOAgue7k+aenOWPr+iDveS9v+eUqOWQhOenjeauteaooeW8j+W5tuWIh+aNouaooeW8j+S7peS8mOWMluS9jea1geeahOmVv+W6puOAglxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VTZWdtZW50cyh0ZXh0OiBzdHJpbmcpOiBRclNlZ21lbnRbXSB7XG4gIC8vIOiHquWKqOmAieaLqeacgOmrmOaViOeahOautee8lueggVxuICBpZiAodGV4dCA9PT0gJycpIHJldHVybiBbXTtcbiAgZWxzZSBpZiAoaXNOdW1lcmljKHRleHQpKSByZXR1cm4gW21ha2VOdW1lcmljKHRleHQpXTtcbiAgZWxzZSBpZiAoaXNBbHBoYW51bWVyaWModGV4dCkpIHJldHVybiBbbWFrZUFscGhhbnVtZXJpYyh0ZXh0KV07XG4gIHJldHVybiBbbWFrZUJ5dGVzKHRvVXRmOEJ5dGVBcnJheSh0ZXh0KSldO1xufVxuXG5mdW5jdGlvbiByZWVkU29sb21vbkNvbXB1dGVEaXZpc29yKGRlZ3JlZTogbnVtYmVyKTogbnVtYmVyW10ge1xuICBpZiAoZGVncmVlIDwgMSB8fCBkZWdyZWUgPiAyNTUpIHRocm93IG5ldyBSYW5nZUVycm9yKCdEZWdyZWUgb3V0IG9mIHJhbmdlJyk7XG4gIC8vIOWkmumhueW8j+ezu+aVsOaMieS7jumrmOWIsOS9jueahOW5guasoeWtmOWCqCzkuI3ljIXmi6zlp4vnu4jkuLox55qE6aaW6aG544CCXG4gIC8vIOS+i+WmguWkmumhueW8jyB4XjMgKyAyNTV4XjIgKyA4eCArIDkzIOWtmOWCqOS4unVpbnQ45pWw57uEIFsyNTUsIDgsIDkzXeOAglxuICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWdyZWUgLSAxOyBpKyspIHJlc3VsdC5wdXNoKDApO1xuICByZXN1bHQucHVzaCgxKTsgLy8gU3RhcnQgb2ZmIHdpdGggdGhlIG1vbm9taWFsIHheMFxuXG4gIC8vIOiuoeeul+WkmumhueW8j+S5mOenryAoeCAtIHJeMCkgKiAoeCAtIHJeMSkgKiAoeCAtIHJeMikgKiAuLi4gKiAoeCAtIHJee2RlZ3JlZS0xfSnvvIxcbiAgLy8g5bm26IiN5byD5pyA6auY5qyh6aG577yI6K+l6aG55aeL57uI5Li6IDF4XmRlZ3JlZe+8ieOAglxuICAvLyDms6jmhI8gciA9IDB4MDLvvIzlroPmmK/mnInpmZDln58gR0YoMl44LzB4MTFEKSDnmoTnlJ/miJDlhYPjgIJcbiAgbGV0IHJvb3QgPSAxO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVncmVlOyBpKyspIHtcbiAgICAvLyDlsIblvZPliY3nu5PmnpzkuZjku6UgKHggLSByXmkpXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIHtcbiAgICAgIHJlc3VsdFtqXSA9IHJlZWRTb2xvbW9uTXVsdGlwbHkocmVzdWx0W2pdLCByb290KTtcbiAgICAgIGlmIChqICsgMSA8IHJlc3VsdC5sZW5ndGgpIHJlc3VsdFtqXSBePSByZXN1bHRbaiArIDFdO1xuICAgIH1cbiAgICByb290ID0gcmVlZFNvbG9tb25NdWx0aXBseShyb290LCAweDAyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyDov5Tlm57nu5nlrprmlbDmja7lkozpmaTmlbDlpJrpobnlvI/nmoTph4zlvrct5omA572X6Zeo6ZSZ6K+v57qg5q2j56CB5a2X44CCXG5mdW5jdGlvbiByZWVkU29sb21vbkNvbXB1dGVSZW1haW5kZXIoXG4gIGRhdGE6IFJlYWRvbmx5PG51bWJlcltdPixcbiAgZGl2aXNvcjogUmVhZG9ubHk8bnVtYmVyW10+LFxuKTogbnVtYmVyW10ge1xuICBjb25zdCByZXN1bHQgPSBkaXZpc29yLm1hcCgoKSA9PiAwKTtcblxuICBmb3IgKGNvbnN0IGIgb2YgZGF0YSkge1xuICAgIC8vIOWkmumhueW8j+mZpOazlVxuICAgIGNvbnN0IGZhY3RvciA9IGIgXiAocmVzdWx0LnNoaWZ0KCkgYXMgbnVtYmVyKTtcblxuICAgIHJlc3VsdC5wdXNoKDApO1xuICAgIGRpdmlzb3IuZm9yRWFjaCgoY29lZiwgaSkgPT4gKHJlc3VsdFtpXSBePSByZWVkU29sb21vbk11bHRpcGx5KGNvZWYsIGZhY3RvcikpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyDov5Tlm57kuKTkuKrnu5nlrprln5/lhYPntKDmqKFHRigyXjgvMHgxMUQp55qE5LmY56ev44CC5Y+C5pWw5ZKM57uT5p6cXG4vLyDpg73mmK/ml6DnrKblj7c45L2N5pW05pWw44CC6L+Z5Y+v5Lul5a6e546w5Li6MjU2KjI1NuS4qnVpbnQ45p2h55uu55qE5p+l5om+6KGo44CCXG5mdW5jdGlvbiByZWVkU29sb21vbk11bHRpcGx5KHg6IG51bWJlciwgeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHggPj4+IDggIT09IDAgfHwgeSA+Pj4gOCAhPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J5dGUgb3V0IG9mIHJhbmdlJyk7XG4gIC8vIOS/hOe9l+aWr+WGnOawkeS5mOazlVxuICBsZXQgejogbnVtYmVyID0gMDtcblxuICBmb3IgKGxldCBpID0gNzsgaSA+PSAwOyBpLS0pIHtcbiAgICB6ID0gKHogPDwgMSkgXiAoKHogPj4+IDcpICogMHgxMWQpO1xuICAgIHogXj0gKCh5ID4+PiBpKSAmIDEpICogeDtcbiAgfVxuICBhc3NlcnQoeiA+Pj4gOCA9PT0gMCk7XG4gIHJldHVybiB6O1xufVxuXG4vKlxuICog55SxIERlbnNvIFdhdmUg5Y+R5piO77yM5bm25ZyoIElTTy9JRUMgMTgwMDQg5qCH5YeG5Lit5o+P6L+w44CCXG4gKiDmraTnsbvnmoTlrp7kvovooajnpLrkuIDkuKrkuI3lj6/lj5jnmoTmmpcv5Lqu5Y2V5YWD5pa55qC8572R44CCXG4gKiDor6XnsbvpgbXlvqogUVIg56CB5qih5Z6LIDIg6KeE6IyD77yM5pSv5oyB5omA5pyJ54mI5pys77yI5bC65a+477yJ5LuOIDEg5YiwIDQw44CBNCDnp43nuqDplJnnrYnnuqfku6Xlj4ogNCDnp43lrZfnrKbnvJbnoIHmqKHlvI/jgIJcbiAqL1xuY2xhc3MgUXJDb2RlIHtcbiAgLy8gUVIgQ29kZSDnmoTmqKHlnZfvvIhmYWxzZSDooajnpLrmtYXoibLvvIx0cnVlIOihqOekuua3seiJsu+8ieOAguaehOmAoOWHveaVsOWujOaIkOWQjuS4jeWPr+abtOaUueOAgumAmui/hyBnZXRNb2R1bGUoKSDorr/pl67jgIJcbiAgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVzOiBib29sZWFuW11bXSA9IFtdO1xuICAvLyDooajnpLrkuI3lj5fmjqnmqKHlvbHlk43nmoTlip/og73mqKHlnZfjgILmnoTpgKDlh73mlbDlrozmiJDlkI7ljbPooqvkuKLlvIPjgIJcbiAgcHJpdmF0ZSByZWFkb25seSBpc0Z1bmN0aW9uOiBib29sZWFuW11bXSA9IFtdO1xuICAvKipcbiAgICog6I635Y+WIFFSIENvZGUg55qE5a695bqm5ZKM6auY5bqm77yM5Lul5qih5Z2X5Li65Y2V5L2N44CCXG4gICAqIOWuveW6puWSjOmrmOW6puiMg+WbtOS4uiAyMSDoh7MgMTc377yI5YyF5ous6L6555WM77yJ44CC5a695bqm5ZKM6auY5bqm55qE6K6h566X5YWs5byP5Li677yaYHZlcnNpb24gKiA0ICsgMTdg44CCXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuICAvKipcbiAgICog6I635Y+WIFFSIENvZGUg5omA5L2/55So55qE5o6p6Iac5qih5byP55qE57Si5byV5YC844CC5o6p6Iac5qih5byP57Si5byV5YC86IyD5Zu05Li6IDAg5YiwIDfvvIjljIXmi6zovrnnlYzvvInjgILljbPkvb8gUVIgQ29kZSDmmK/pgJrov4foh6rliqjmjqnohpzvvIhtYXNrID0gLTHvvInnlJ/miJDnmoTvvIzmnIDnu4jnmoTmjqnohpzlgLzku43nhLbmmK8gMCDliLAgNyDkuYvpl7TnmoTmnInmlYjlgLzjgIJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtYXNrOiBJbnRSYW5nZTwwLCA4PjtcbiAgLy8g5pSv5oyB55qE54mI5pysLCBRUueggeaooeWeizLmoIflh4ZcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OID0ge1xuICAgIE1JTjogMSxcbiAgICBNQVg6IDQwLFxuICB9IGFzIGNvbnN0O1xuICAvLyDmg6nnvZrliIbmlbDluLjph48sIOeUqOS6jiBnZXRQZW5hbHR5U2NvcmUoKe+8jOWcqOivhOS8sOWTquS4quaOqeeggeacgOS9s+aXtuS9v+eUqOOAglxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQRU5BTFRZID0ge1xuICAgIE4xOiAzLCAvLyDnm7jlkIzpopzoibLnmoTov57nu63mqKHlnZdcbiAgICBOMjogMywgLy8gMngyIOWdl1xuICAgIE4zOiA0MCwgLy8g5p+l5om+5Zmo57G75Ly85qih5byPXG4gICAgTjQ6IDEwLCAvLyDmmpfmqKHlnZfmr5TkvotcbiAgfSBhcyBjb25zdDtcbiAgLy8g6YCJ5oup5pyA5L2z5o6p56CBXG4gIHByaXZhdGUgc2VsZWN0TWFzayhtc2s6IC0xIHwgSW50UmFuZ2U8MCwgOD4pOiBJbnRSYW5nZTwwLCA4PiB7XG4gICAgaWYgKG1zayAhPT0gLTEpIHJldHVybiBtc2s7XG4gICAgbGV0IG1hc2s6IEludFJhbmdlPDAsIDg+ID0gMDtcbiAgICBsZXQgbWluUGVuYWx0eSA9IDEwMDAwMDAwMDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgICAgLy8g6Ieq5Yqo6YCJ5oup5pyA5L2z5o6p5qihXG4gICAgICB0aGlzLmFwcGx5TWFzayhpKTtcbiAgICAgIHRoaXMuZHJhd0Zvcm1hdEJpdHMoaSk7XG4gICAgICBjb25zdCBwZW5hbHR5ID0gdGhpcy5nZXRQZW5hbHR5U2NvcmUoKTtcblxuICAgICAgaWYgKHBlbmFsdHkgPCBtaW5QZW5hbHR5KSB7XG4gICAgICAgIG1hc2sgPSBpIGFzIEludFJhbmdlPDAsIDg+O1xuICAgICAgICBtaW5QZW5hbHR5ID0gcGVuYWx0eTtcbiAgICAgIH1cbiAgICAgIC8vIOaSpOmUgOaOqeeggVxuICAgICAgdGhpcy5hcHBseU1hc2soaSk7XG4gICAgfVxuICAgIGFzc2VydCgwIDw9IG1hc2sgJiYgbWFzayA8PSA3KTtcbiAgICByZXR1cm4gbWFzaztcbiAgfVxuICAvLyDkvb/nlKjnu5nlrprnmoTniYjmnKzlj7fjgIHplJnor6/nuqDmraPnuqfliKvjgIHmlbDmja7noIHlrZfoioLlkozmjqnohpznvJblj7fliJvlu7rkuIDkuKrmlrDnmoRRUueggeOAglxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgLy8g5q2kIFFSIENvZGUg55qE54mI5pys5Y+377yM6IyD5Zu05Li6IDEg5YiwIDQw77yI5ZCr77yJO+ivpeWAvOWGs+WumuS6huS6jOe7tOeggeeahOWwuuWvuOOAglxuICAgIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBJbnRSYW5nZTwxLCA0MT4sXG4gICAgLy8g6ZSZ6K+v57qg5q2j57qn5Yir44CCXG4gICAgcHVibGljIHJlYWRvbmx5IGVycm9yQ29ycmVjdGlvbkxldmVsOiBFY2MsXG4gICAgZGF0YUNvZGV3b3JkczogUmVhZG9ubHk8bnVtYmVyW10+LFxuICAgIG1zazogLTEgfCBJbnRSYW5nZTwwLCA4PixcbiAgKSB7XG4gICAgLy8g6aqM6K+B5p6E6YCg5Ye95pWw5Y+C5pWwXG4gICAgaWYgKHZlcnNpb24gPCBRckNvZGUuVkVSU0lPTi5NSU4gfHwgdmVyc2lvbiA+IFFyQ29kZS5WRVJTSU9OLk1BWCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlcnNpb24gdmFsdWUgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuICAgIGlmIChtc2sgPCAtMSB8fCBtc2sgPiA3KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWFzayB2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICAvLyDliJ3lp4vljJZcbiAgICB0aGlzLnNpemUgPSB2ZXJzaW9uICogNCArIDE3O1xuICAgIC8vIOWIm+W7uuaooeWdl+aVsOe7hFxuICAgIC8vIOWIneWni+WMluS4pOS4que9keagvOS4uiBzaXplKnNpemUg5aSn5bCP55qE5biD5bCU5pWw57uE77yM5Yid5aeL5YC85Li6IGZhbHNlIOWFqOS4uua1heiJslxuICAgIGNvbnN0IHJvdyA9IEFycmF5KHRoaXMuc2l6ZSkuZmlsbChmYWxzZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSB7XG4gICAgICB0aGlzLm1vZHVsZXNbaV0gPSByb3cuc2xpY2UoKTtcbiAgICAgIHRoaXMuaXNGdW5jdGlvbltpXSA9IHJvdy5zbGljZSgpO1xuICAgIH1cbiAgICAvLyDorqHnrpfplJnor6/nuqDmraPnoIHvvIhFQ0PvvInvvIznu5jliLbmqKHlnZdcbiAgICB0aGlzLmRyYXdGdW5jdGlvblBhdHRlcm5zKCk7XG4gICAgLy8g5p6E5bu6IFFSIOeggeeahOS4u+imgea1geeoi1xuICAgIGNvbnN0IGFsbENvZGV3b3JkcyA9IHRoaXMuYWRkRWNjQW5kSW50ZXJsZWF2ZShkYXRhQ29kZXdvcmRzKTtcblxuICAgIHRoaXMuZHJhd0NvZGV3b3JkcyhhbGxDb2Rld29yZHMpO1xuICAgIC8vIOehruWumuacgOe7iOaOqeeggVxuICAgIHRoaXMubWFzayA9IHRoaXMuc2VsZWN0TWFzayhtc2spO1xuICAgIC8vIOW6lOeUqOacgOe7iOaOqeeggeW5tue7mOWItuagvOW8j+S9jVxuICAgIHRoaXMuYXBwbHlNYXNrKHRoaXMubWFzayk7XG4gICAgdGhpcy5kcmF3Rm9ybWF0Qml0cyh0aGlzLm1hc2spO1xuICAgIC8vIOaehOmAoOWujOaIkCwg5Lii5byDXG4gICAgdGhpcy5pc0Z1bmN0aW9uID0gW107XG4gIH1cblxuICAvKiAtLSDorr/pl67lmajmlrnms5UgLS0qL1xuICAvLyDov5Tlm57nu5nlrprlnZDmoIflpITmqKHlnZfvvIjlg4/ntKB4eeeahOminOiJsu+8jOa1heiJsuaXtuS4umZhbHNl77yM5rex6Imy5pe25Li6dHJ1ZSk75aaC5p6c57uZ5a6a55qE5Z2Q5qCH6LaF5Ye66L6555WM77yM5YiZ6L+U5ZueZmFsc2XvvIjmtYXoibLvvInjgIJcbiAgcHVibGljIGdldE1vZHVsZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB4ID49IDAgJiYgeCA8IHRoaXMuc2l6ZSAmJiB5ID49IDAgJiYgeSA8IHRoaXMuc2l6ZSAmJiB0aGlzLm1vZHVsZXNbeV1beF07XG4gIH1cbiAgLyogLS0g5p6E6YCg5Ye95pWw55qE56eB5pyJ6L6F5Yqp5pa55rOV77ya57uY5Yi25Yqf6IO95qih5Z2XIC0tKi9cblxuICAvLyDor7vlj5bor6Xlr7nosaHnmoTniYjmnKzlrZfmrrXvvIzlubbnu5jliLblkozmoIforrDmiYDmnInlip/og73mqKHlnZfjgIJcbiAgcHJpdmF0ZSBkcmF3RnVuY3Rpb25QYXR0ZXJucygpOiB2b2lkIHtcbiAgICAvLyDnu5jliLbmsLTlubPlkozlnoLnm7Tlrprml7blm77moYhcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSB7XG4gICAgICBjb25zdCBmbGFnID0gaSAlIDIgPT09IDA7XG5cbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoNiwgaSwgZmxhZyk7XG4gICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKGksIDYsIGZsYWcpO1xuICAgIH1cbiAgICAvLyDnu5jliLYgMyDkuKrlrprkvY3lm77moYjvvIjpmaTkuoblj7PkuIvop5LnmoTmiYDmnInop5LokL3vvJvkvJropobnm5bkuIDkupvlrprml7bmqKHlnZfvvIlcbiAgICB0aGlzLmRyYXdGaW5kZXJQYXR0ZXJuKDMsIDMpO1xuICAgIGNvbnN0IHkgPSB0aGlzLnNpemUgLSA0O1xuXG4gICAgdGhpcy5kcmF3RmluZGVyUGF0dGVybih5LCAzKTtcbiAgICB0aGlzLmRyYXdGaW5kZXJQYXR0ZXJuKDMsIHkpO1xuICAgIC8vIOe7mOWItuWkmuS4quWvuem9kOWbvuahiFxuICAgIGNvbnN0IGFsaWduUGF0UG9zID0gdGhpcy5nZXRBbGlnbm1lbnRQYXR0ZXJuUG9zaXRpb25zKCk7XG4gICAgY29uc3QgbnVtQWxpZ24gPSBhbGlnblBhdFBvcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUFsaWduOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQWxpZ247IGorKykge1xuICAgICAgICAvLyDkuI3lnKjkuInkuKrlrprkvY3lm77moYjnmoTop5LokL3lpITnu5jliLZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEoXG4gICAgICAgICAgICAoaSA9PT0gMCAmJiBqID09PSAwKSB8fFxuICAgICAgICAgICAgKGkgPT09IDAgJiYgaiA9PT0gbnVtQWxpZ24gLSAxKSB8fFxuICAgICAgICAgICAgKGkgPT09IG51bUFsaWduIC0gMSAmJiBqID09PSAwKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5kcmF3QWxpZ25tZW50UGF0dGVybihhbGlnblBhdFBvc1tpXSwgYWxpZ25QYXRQb3Nbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIOe7mOWItumFjee9ruaVsOaNrlxuICAgIHRoaXMuZHJhd0Zvcm1hdEJpdHMoMCk7IC8vIOS4tOaXtuaOqeeggeWAvO+8m+eojeWQjuWcqOaehOmAoOWHveaVsOS4reS8muiiq+imhuebllxuICAgIHRoaXMuZHJhd1ZlcnNpb24oKTtcbiAgfVxuXG4gIC8vIOe7mOWItuagvOW8j+S9jeeahOS4pOS4quWJr+acrO+8iOW4puacieWFtuiHquW3seeahOmUmeivr+e6oOato+egge+8iVxuICAvLyDln7rkuo7nu5nlrprnmoTmjqnnoIHlkozor6Xlr7nosaHnmoTplJnor6/nuqDmraPnuqfliKvlrZfmrrXjgIJcbiAgcHJpdmF0ZSBkcmF3Rm9ybWF0Qml0cyhtYXNrOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyDorqHnrpfplJnor6/nuqDmraPnoIHlubbmiZPljIXkvY1cbiAgICBjb25zdCBkYXRhOiBudW1iZXIgPSAodGhpcy5lcnJvckNvcnJlY3Rpb25MZXZlbC5mb3JtYXRCaXRzIDw8IDMpIHwgbWFzazsgLy8gZXJyQ29yckx2bCDmmK8gdWludDIg57G75Z6L77yMbWFzayDmmK8gdWludDMg57G75Z6LXG4gICAgbGV0IHJlbTogbnVtYmVyID0gZGF0YTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykgcmVtID0gKHJlbSA8PCAxKSBeICgocmVtID4+PiA5KSAqIDB4NTM3KTtcbiAgICBjb25zdCBiaXRzID0gKChkYXRhIDw8IDEwKSB8IHJlbSkgXiAweDU0MTI7IC8vIHVpbnQxNVxuXG4gICAgYXNzZXJ0KGJpdHMgPj4+IDE1ID09PSAwKTtcbiAgICAvLyDnu5jliLbnrKzkuIDkuKrlia/mnKxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSA1OyBpKyspIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoOCwgaSwgZ2V0Qml0KGJpdHMsIGkpKTtcbiAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKDgsIDcsIGdldEJpdChiaXRzLCA2KSk7XG4gICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg4LCA4LCBnZXRCaXQoYml0cywgNykpO1xuICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoNywgOCwgZ2V0Qml0KGJpdHMsIDgpKTtcbiAgICBmb3IgKGxldCBpID0gOTsgaSA8IDE1OyBpKyspIHtcbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoMTQgLSBpLCA4LCBnZXRCaXQoYml0cywgaSkpO1xuICAgIH1cbiAgICAvLyDnu5jliLbnrKzkuozkuKrlia/mnKxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSh0aGlzLnNpemUgLSAxIC0gaSwgOCwgZ2V0Qml0KGJpdHMsIGkpKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDg7IGkgPCAxNTsgaSsrKSB7XG4gICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKDgsIHRoaXMuc2l6ZSAtIDE1ICsgaSwgZ2V0Qml0KGJpdHMsIGkpKTtcbiAgICB9XG4gICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg4LCB0aGlzLnNpemUgLSA4LCB0cnVlKTsgLy8gQWx3YXlzIGRhcmtcbiAgfVxuXG4gIC8vIOWmguaenDcgPD0gdmVyc2lvbiA8PSA0MO+8jOWImee7mOWItueJiOacrOS9jeeahOS4pOS4quWJr+acrO+8iOW4puacieWFtuiHquW3seeahOmUmeivr+e6oOato+egge+8ie+8jFxuICAvLyDln7rkuo7or6Xlr7nosaHnmoTniYjmnKzlrZfmrrXjgIJcbiAgcHJpdmF0ZSBkcmF3VmVyc2lvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52ZXJzaW9uIDwgNykgcmV0dXJuO1xuXG4gICAgLy8g6K6h566X6ZSZ6K+v57qg5q2j56CB5bm25omT5YyF5L2NXG4gICAgbGV0IHJlbTogbnVtYmVyID0gdGhpcy52ZXJzaW9uOyAvLyB2ZXJzaW9uIOaYryB1aW50NiDnsbvlnovvvIzojIPlm7TlnKggWzcsIDQwXVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSByZW0gPSAocmVtIDw8IDEpIF4gKChyZW0gPj4+IDExKSAqIDB4MWYyNSk7XG4gICAgY29uc3QgYml0czogbnVtYmVyID0gKHRoaXMudmVyc2lvbiA8PCAxMikgfCByZW07IC8vIHVpbnQxOFxuXG4gICAgYXNzZXJ0KGJpdHMgPj4+IDE4ID09PSAwKTtcbiAgICAvLyDnu5jliLbkuKTkuKrlia/mnKxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE4OyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbG9yOiBib29sZWFuID0gZ2V0Qml0KGJpdHMsIGkpO1xuICAgICAgY29uc3QgYTogbnVtYmVyID0gdGhpcy5zaXplIC0gMTEgKyAoaSAlIDMpO1xuICAgICAgY29uc3QgYjogbnVtYmVyID0gTWF0aC5mbG9vcihpIC8gMyk7XG5cbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoYSwgYiwgY29sb3IpO1xuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZShiLCBhLCBjb2xvcik7XG4gICAgfVxuICB9XG4gIC8vIOe7mOWItuS4gOS4qjkqOeeahOWumuS9jeWbvuahiO+8jOWMheaLrOi+ueeVjOWIhumalOespu+8jOS4reW/g+aooeWdl+S9jeS6jih4LCB5KeOAguaooeWdl+WPr+S7pei2heWHuui+ueeVjOOAglxuICBwcml2YXRlIGRyYXdGaW5kZXJQYXR0ZXJuKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgZHkgPSAtNDsgZHkgPD0gNDsgZHkrKykge1xuICAgICAgZm9yIChsZXQgZHggPSAtNDsgZHggPD0gNDsgZHgrKykge1xuICAgICAgICBjb25zdCBkaXN0ID0gTWF0aC5tYXgoTWF0aC5hYnMoZHgpLCBNYXRoLmFicyhkeSkpLCAvLyBDaGVieXNoZXYv5peg56m36IyD5pWwXG4gICAgICAgICAgeHggPSB4ICsgZHgsXG4gICAgICAgICAgeXkgPSB5ICsgZHk7XG5cbiAgICAgICAgaWYgKDAgPD0geHggJiYgeHggPCB0aGlzLnNpemUgJiYgMCA8PSB5eSAmJiB5eSA8IHRoaXMuc2l6ZSkge1xuICAgICAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoeHgsIHl5LCBkaXN0ICE9PSAyICYmIGRpc3QgIT09IDQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIOe7mOWItuS4gOS4qjUqNeeahOWvuem9kOWbvuahiO+8jOS4reW/g+aooeWdl+S9jeS6jih4LCB5KeOAguaJgOacieaooeWdl+W/hemhu+WcqOi+ueeVjOWGheOAglxuICBwcml2YXRlIGRyYXdBbGlnbm1lbnRQYXR0ZXJuKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgZHkgPSAtMjsgZHkgPD0gMjsgZHkrKykge1xuICAgICAgZm9yIChsZXQgZHggPSAtMjsgZHggPD0gMjsgZHgrKykge1xuICAgICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKHggKyBkeCwgeSArIGR5LCBNYXRoLm1heChNYXRoLmFicyhkeCksIE1hdGguYWJzKGR5KSkgIT09IDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyDorr7nva7mqKHlnZfnmoTpopzoibLlubblsIblhbbmoIforrDkuLrlip/og73mqKHlnZfjgILku4XnlLHmnoTpgKDlh73mlbDkvb/nlKjjgILlnZDmoIflv4XpobvlnKjovrnnlYzlhoXjgIJcbiAgcHJpdmF0ZSBzZXRGdW5jdGlvbk1vZHVsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgaXNEYXJrOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5tb2R1bGVzW3ldW3hdID0gaXNEYXJrO1xuICAgIHRoaXMuaXNGdW5jdGlvblt5XVt4XSA9IHRydWU7XG4gIH1cbiAgLy8g6L+U5Zue5LiA5Liq5paw55qE5a2X6IqC5a2X56ym5Liy77yM6KGo56S65YW35pyJ6YCC5b2T6ZSZ6K+v57qg5q2j56CB5a2X55qE57uZ5a6a5pWw5o2u77yM5Z+65LqO6K+l5a+56LGh55qE54mI5pys5ZKM6ZSZ6K+v57qg5q2j57qn5Yir44CCXG4gIHByaXZhdGUgYWRkRWNjQW5kSW50ZXJsZWF2ZShkYXRhOiBSZWFkb25seTxudW1iZXJbXT4pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgdmVyID0gdGhpcy52ZXJzaW9uLFxuICAgICAgZWNsID0gdGhpcy5lcnJvckNvcnJlY3Rpb25MZXZlbDtcblxuICAgIGlmIChkYXRhLmxlbmd0aCAhPT0gZ2V0TnVtRGF0YUNvZGV3b3Jkcyh2ZXIsIGVjbCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIC8vIOiuoeeul+WPguaVsOaVsOWAvFxuICAgIGNvbnN0IG51bUJsb2NrcyA9IE5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLU1tlY2wub3JkaW5hbF1bdmVyXSxcbiAgICAgIGJsb2NrRWNjTGVuID0gRUNDX0NPREVXT1JEU19QRVJfQkxPQ0tbZWNsLm9yZGluYWxdW3Zlcl0sXG4gICAgICByYXdDb2Rld29yZHMgPSBNYXRoLmZsb29yKGdldE51bVJhd0RhdGFNb2R1bGVzKHZlcikgLyA4KSxcbiAgICAgIG51bVNob3J0QmxvY2tzID0gbnVtQmxvY2tzIC0gKHJhd0NvZGV3b3JkcyAlIG51bUJsb2NrcyksXG4gICAgICBzaG9ydEJsb2NrTGVuID0gTWF0aC5mbG9vcihyYXdDb2Rld29yZHMgLyBudW1CbG9ja3MpLFxuICAgICAgYmxvY2tzOiBudW1iZXJbXVtdID0gW10sIC8vIOWwhuaVsOaNruWIhuWJsuaIkOWdl+W5tuS4uuavj+S4quWdl+mZhOWKoEVDQ1xuICAgICAgcnNEaXYgPSByZWVkU29sb21vbkNvbXB1dGVEaXZpc29yKGJsb2NrRWNjTGVuKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBrID0gMDsgaSA8IG51bUJsb2NrczsgaSsrKSB7XG4gICAgICBjb25zdCBkYXQgPSBkYXRhLnNsaWNlKGssIGsgKyBzaG9ydEJsb2NrTGVuIC0gYmxvY2tFY2NMZW4gKyAoaSA8IG51bVNob3J0QmxvY2tzID8gMCA6IDEpKTtcbiAgICAgIGNvbnN0IGVjYyA9IHJlZWRTb2xvbW9uQ29tcHV0ZVJlbWFpbmRlcihkYXQsIHJzRGl2KTtcblxuICAgICAgayArPSBkYXQubGVuZ3RoO1xuICAgICAgaWYgKGkgPCBudW1TaG9ydEJsb2NrcykgZGF0LnB1c2goMCk7XG4gICAgICBibG9ja3MucHVzaChkYXQuY29uY2F0KGVjYykpO1xuICAgIH1cbiAgICAvLyAg5bCG5q+P5Liq5Z2X55qE5a2X6IqC5Lqk6ZSZKOiAjOS4jeaYr+i/nuaOpSnmiJDljZXkuKrluo/liJdcbiAgICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2Nrc1swXS5sZW5ndGg7IGkrKykge1xuICAgICAgYmxvY2tzLmZvckVhY2goKGJsb2NrLCBqKSA9PiB7XG4gICAgICAgIC8vIOi3s+i/h+efreWdl+S4reeahOWhq+WFheWtl+iKglxuICAgICAgICBpZiAoaSAhPT0gc2hvcnRCbG9ja0xlbiAtIGJsb2NrRWNjTGVuIHx8IGogPj0gbnVtU2hvcnRCbG9ja3MpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChibG9ja1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gcmF3Q29kZXdvcmRzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIOWwhue7meWumueahDjkvY3noIHlrZfluo/liJco5pWw5o2u5ZKM6ZSZ6K+v57qg5q2jKee7mOWItuWIsOatpFFS56CB55qE5pW05LiqXG4gIC8vIOaVsOaNruWMuuWfn+S4iuOAguWcqOiwg+eUqOatpOaWueazleS5i+WJjemcgOimgeagh+iusOWKn+iDveaooeWdl+OAglxuICBwcml2YXRlIGRyYXdDb2Rld29yZHMoZGF0YTogUmVhZG9ubHk8bnVtYmVyW10+KTogdm9pZCB7XG4gICAgaWYgKGRhdGEubGVuZ3RoICE9PSBNYXRoLmZsb29yKGdldE51bVJhd0RhdGFNb2R1bGVzKHRoaXMudmVyc2lvbikgLyA4KSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgbGV0IGkgPSAwOyAvLyDmlbDmja7nmoTkvY3ntKLlvJVcbiAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aCAqIDg7XG5cbiAgICAvLyDmiafooYznibnmrornmoTkuYvlrZflvaLmiavmj49cbiAgICBmb3IgKGxldCByaWdodCA9IHRoaXMuc2l6ZSAtIDE7IHJpZ2h0ID49IDE7IHJpZ2h0IC09IDIpIHtcbiAgICAgIC8vIOavj+WvueWIl+S4reWPs+WIl+eahOe0ouW8lVxuICAgICAgaWYgKHJpZ2h0ID09PSA2KSByaWdodCA9IDU7XG4gICAgICBmb3IgKGxldCB2ZXJ0ID0gMDsgdmVydCA8IHRoaXMuc2l6ZTsgdmVydCsrKSB7XG4gICAgICAgIC8vIOWeguebtOiuoeaVsOWZqFxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDI7IGorKykge1xuICAgICAgICAgIGNvbnN0IHggPSByaWdodCAtIGosIC8vIOWunumZheeahHjlnZDmoIdcbiAgICAgICAgICAgIHkgPSAoKHJpZ2h0ICsgMSkgJiAyKSA9PT0gMCA/IHRoaXMuc2l6ZSAtIDEgLSB2ZXJ0IDogdmVydDsgLy8g5a6e6ZmF55qEeeWdkOagh1xuXG4gICAgICAgICAgaWYgKCF0aGlzLmlzRnVuY3Rpb25beV1beF0gJiYgaSA8IGxlbikge1xuICAgICAgICAgICAgdGhpcy5tb2R1bGVzW3ldW3hdID0gZ2V0Qml0KGRhdGFbaSA+Pj4gM10sIDcgLSAoaSAmIDcpKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8g5aaC5p6c5q2kUVLnoIHmnInku7vkvZXliankvZnkvY0oMOWIsDfkvY0p77yM5a6D5Lus6KKr5p6E6YCg5Ye95pWw6LWL5YC85Li6MC9mYWxzZS/mtYXoibLvvIzkuJTmraTmlrnms5XkuI3kvJrmlLnlj5jlroPku6xcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBhc3NlcnQoaSA9PT0gbGVuKTtcbiAgfVxuICAvLyDmjqnnoIHmqKHlvI/lrprkuYlcbiAgcHJpdmF0ZSByZWFkb25seSBNQVNLX1BBVFRFUk5TOiAoKF86IG51bWJlciwgeTogbnVtYmVyKSA9PiBib29sZWFuKVtdID0gW1xuICAgICh4LCB5KSA9PiAoeCArIHkpICUgMiA9PT0gMCxcbiAgICAoXywgeSkgPT4geSAlIDIgPT09IDAsXG4gICAgKHgpID0+IHggJSAzID09PSAwLFxuICAgICh4LCB5KSA9PiAoeCArIHkpICUgMyA9PT0gMCxcbiAgICAoeCwgeSkgPT4gKE1hdGguZmxvb3IoeCAvIDMpICsgTWF0aC5mbG9vcih5IC8gMikpICUgMiA9PT0gMCxcbiAgICAoeCwgeSkgPT4gKCh4ICogeSkgJSAyKSArICgoeCAqIHkpICUgMykgPT09IDAsXG4gICAgKHgsIHkpID0+ICgoKHggKiB5KSAlIDIpICsgKCh4ICogeSkgJSAzKSkgJSAyID09PSAwLFxuICAgICh4LCB5KSA9PiAoKCh4ICsgeSkgJSAyKSArICgoeCAqIHkpICUgMykpICUgMiA9PT0gMCxcbiAgXSBhcyBjb25zdDtcbiAgLy8g5L2/55So57uZ5a6a55qE5o6p56CB5qih5byP5a+55q2kUVLnoIHkuK3nmoTnoIHlrZfmqKHlnZfov5vooYxYT1Lov5DnrpfjgILlnKjmjqnnoIHkuYvliY3lv4XpobvmoIforrDlip/og73mqKHlnZflubbnu5jliLbnoIHlrZfkvY3jgIJcbiAgcHJpdmF0ZSBhcHBseU1hc2sobWFzazogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKG1hc2sgPCAwIHx8IG1hc2sgPiA3KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWFzayB2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICBjb25zdCBtYXNrUGF0dGVybiA9IHRoaXMuTUFTS19QQVRURVJOU1ttYXNrXTtcblxuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zaXplOyB5KyspIHtcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy5zaXplOyB4KyspIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRnVuY3Rpb25beV1beF0gJiYgbWFza1BhdHRlcm4oeCwgeSkpIHtcbiAgICAgICAgICB0aGlzLm1vZHVsZXNbeV1beF0gPSAhdGhpcy5tb2R1bGVzW3ldW3hdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIOiuoeeul+W5tui/lOWbnuWfuuS6juatpCBRUiDnoIHlvZPliY3mqKHlnZfnirbmgIHnmoTmg6nnvZrliIbmlbDjgILnlKjkuo7oh6rliqjmjqnnoIHpgInmi6nnrpfms5XvvIzku6Xmib7liLDkuqfnlJ/mnIDkvY7liIbmlbDnmoTmjqnnoIHmqKHlvI/jgIJcbiAgcHJpdmF0ZSBnZXRQZW5hbHR5U2NvcmUoKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0OiBudW1iZXIgPSAwO1xuXG4gICAgLy8g6KGM5Lit5YW35pyJ55u45ZCM6aKc6Imy55qE55u46YK75qih5Z2X77yM5Lul5Y+K5p+l5om+5Zmo57G75Ly855qE5qih5byPXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNpemU7IHkrKykge1xuICAgICAgbGV0IHJ1bkNvbG9yID0gZmFsc2U7XG4gICAgICBsZXQgcnVuWCA9IDA7XG4gICAgICBjb25zdCBydW5IaXN0b3J5ID0gWzAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuXG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMuc2l6ZTsgeCsrKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZHVsZXNbeV1beF0gPT09IHJ1bkNvbG9yKSB7XG4gICAgICAgICAgcnVuWCsrO1xuICAgICAgICAgIGlmIChydW5YID09PSA1KSByZXN1bHQgKz0gUXJDb2RlLlBFTkFMVFkuTjE7XG4gICAgICAgICAgZWxzZSBpZiAocnVuWCA+IDUpIHJlc3VsdCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkocnVuWCwgcnVuSGlzdG9yeSk7XG4gICAgICAgICAgaWYgKCFydW5Db2xvcikge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuZmluZGVyUGVuYWx0eUNvdW50UGF0dGVybnMocnVuSGlzdG9yeSkgKiBRckNvZGUuUEVOQUxUWS5OMztcbiAgICAgICAgICB9XG4gICAgICAgICAgcnVuQ29sb3IgPSB0aGlzLm1vZHVsZXNbeV1beF07XG4gICAgICAgICAgcnVuWCA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSB0aGlzLmZpbmRlclBlbmFsdHlUZXJtaW5hdGVBbmRDb3VudChydW5Db2xvciwgcnVuWCwgcnVuSGlzdG9yeSkgKiBRckNvZGUuUEVOQUxUWS5OMztcbiAgICB9XG4gICAgLy8g5YiX5Lit5YW35pyJ55u45ZCM6aKc6Imy55qE55u46YK75qih5Z2X77yM5Lul5Y+K5p+l5om+5Zmo57G75Ly855qE5qih5byPXG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykge1xuICAgICAgbGV0IHJ1bkNvbG9yID0gZmFsc2U7XG4gICAgICBsZXQgcnVuWSA9IDA7XG4gICAgICBjb25zdCBydW5IaXN0b3J5ID0gWzAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuXG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuc2l6ZTsgeSsrKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZHVsZXNbeV1beF0gPT09IHJ1bkNvbG9yKSB7XG4gICAgICAgICAgcnVuWSsrO1xuICAgICAgICAgIGlmIChydW5ZID09PSA1KSByZXN1bHQgKz0gUXJDb2RlLlBFTkFMVFkuTjE7XG4gICAgICAgICAgZWxzZSBpZiAocnVuWSA+IDUpIHJlc3VsdCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkocnVuWSwgcnVuSGlzdG9yeSk7XG4gICAgICAgICAgaWYgKCFydW5Db2xvcikge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuZmluZGVyUGVuYWx0eUNvdW50UGF0dGVybnMocnVuSGlzdG9yeSkgKiBRckNvZGUuUEVOQUxUWS5OMztcbiAgICAgICAgICB9XG4gICAgICAgICAgcnVuQ29sb3IgPSB0aGlzLm1vZHVsZXNbeV1beF07XG4gICAgICAgICAgcnVuWSA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSB0aGlzLmZpbmRlclBlbmFsdHlUZXJtaW5hdGVBbmRDb3VudChydW5Db2xvciwgcnVuWSwgcnVuSGlzdG9yeSkgKiBRckNvZGUuUEVOQUxUWS5OMztcbiAgICB9XG4gICAgLy8gMioyIOWdl+eahOaooeWdl+WFt+ebuOWQjOeahOminOiJslxuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zaXplIC0gMTsgeSsrKSB7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMuc2l6ZSAtIDE7IHgrKykge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMubW9kdWxlc1t5XVt4XTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sb3IgPT09IHRoaXMubW9kdWxlc1t5XVt4ICsgMV0gJiZcbiAgICAgICAgICBjb2xvciA9PT0gdGhpcy5tb2R1bGVzW3kgKyAxXVt4XSAmJlxuICAgICAgICAgIGNvbG9yID09PSB0aGlzLm1vZHVsZXNbeSArIDFdW3ggKyAxXVxuICAgICAgICApIHtcbiAgICAgICAgICByZXN1bHQgKz0gUXJDb2RlLlBFTkFMVFkuTjI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8g5pqX5qih5Z2X5ZKM5Lqu5qih5Z2X55qE5bmz6KGhXG4gICAgbGV0IGRhcms6IG51bWJlciA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLm1vZHVsZXMpIHtcbiAgICAgIGRhcmsgPSByb3cucmVkdWNlKChzdW0sIGNvbG9yKSA9PiBzdW0gKyAoY29sb3IgPyAxIDogMCksIGRhcmspO1xuICAgIH1cbiAgICAvLyDms6jmhI/vvIxzaXplIOaYr+Wlh+aVsO+8jOaJgOS7pSBkYXJrL3RvdGFsICE9PSAxLzJcbiAgICBjb25zdCB0b3RhbDogbnVtYmVyID0gdGhpcy5zaXplICogdGhpcy5zaXplO1xuICAgIC8vIOiuoeeul+acgOWwj+eahOaVtOaVsCBrID49IDDvvIzkvb/lvpcgKDQ1LTVrKSUgPD0gZGFyay90b3RhbCA8PSAoNTUrNWspJVxuICAgIGNvbnN0IGs6IG51bWJlciA9IE1hdGguY2VpbChNYXRoLmFicyhkYXJrICogMjAgLSB0b3RhbCAqIDEwKSAvIHRvdGFsKSAtIDE7XG5cbiAgICBhc3NlcnQoMCA8PSBrICYmIGsgPD0gOSk7XG4gICAgcmVzdWx0ICs9IGsgKiBRckNvZGUuUEVOQUxUWS5ONDtcbiAgICBhc3NlcnQoMCA8PSByZXN1bHQgJiYgcmVzdWx0IDw9IDI1Njg4ODgpOyAvLyDln7rkuo7pu5jorqTlgLznmoTpnZ7ntKflr4bkuIrpmZBcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIOi/lOWbnuS4gOS4quWNh+W6j+eahOS9jee9ruWIl+ihqO+8jOihqOekuuatpOeJiOacrOWPt+eahOWvuem9kOaooeW8j+S9jee9ruOAguavj+S4quS9jee9ruWcqCBbMCwxNzcpIOiMg+WbtOWGhe+8jOW5tueUqOS6juihjOWSjOWIl+i9tOOAgui/meWPr+S7peWunueOsOS4uiA0MCDkuKrlj6/lj5jplb/luqbmlbTmlbDliJfooajnmoTmn6Xmib7ooajjgIJcbiAgcHJpdmF0ZSBnZXRBbGlnbm1lbnRQYXR0ZXJuUG9zaXRpb25zKCk6IG51bWJlcltdIHtcbiAgICBpZiAodGhpcy52ZXJzaW9uID09PSAxKSByZXR1cm4gW107XG4gICAgY29uc3QgbnVtQWxpZ24gPSBNYXRoLmZsb29yKHRoaXMudmVyc2lvbiAvIDcpICsgMixcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKCh0aGlzLnZlcnNpb24gKiA4ICsgbnVtQWxpZ24gKiAzICsgNSkgLyAobnVtQWxpZ24gKiA0IC0gNCkpICogMixcbiAgICAgIHJlc3VsdCA9IFs2XTtcblxuICAgIGZvciAobGV0IHBvcyA9IHRoaXMuc2l6ZSAtIDc7IHJlc3VsdC5sZW5ndGggPCBudW1BbGlnbjsgcG9zIC09IHN0ZXApIHtcbiAgICAgIHJlc3VsdC5zcGxpY2UoMSwgMCwgcG9zKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvLyDlj6rog73lnKjmt7vliqDkuobkuq7oibLov5DooYzlkI7nq4vljbPosIPnlKjvvIzlubbov5Tlm54gMOOAgTEg5oiWIDLjgILov5nmmK8gZ2V0UGVuYWx0eVNjb3JlKCkg55qE6L6F5Yqp5Ye95pWw44CCXG4gIHByaXZhdGUgZmluZGVyUGVuYWx0eUNvdW50UGF0dGVybnMocnVuSGlzdG9yeTogUmVhZG9ubHk8bnVtYmVyW10+KTogbnVtYmVyIHtcbiAgICBjb25zdCBuID0gcnVuSGlzdG9yeVsxXTtcblxuICAgIGFzc2VydChuIDw9IHRoaXMuc2l6ZSAqIDMpO1xuICAgIC8vIOaPkOWJjemqjOivgSBuIOeahOacieaViOaAp1xuICAgIGlmIChuIDw9IDApIHJldHVybiAwO1xuICAgIGNvbnN0IHZhbGlkU2NvcmUgPVxuICAgICAgcnVuSGlzdG9yeVsyXSA9PT0gbiAmJiBydW5IaXN0b3J5WzNdID09PSBuICogMyAmJiBydW5IaXN0b3J5WzRdID09PSBuICYmIHJ1bkhpc3RvcnlbNV0gPT09IG47XG5cbiAgICBpZiAoIXZhbGlkU2NvcmUpIHJldHVybiAwO1xuICAgIC8vIOajgOafpeS4pOerr+eahOW7tuS8uOaooeW8j1xuICAgIGxldCBzY29yZSA9IDA7XG5cbiAgICBpZiAocnVuSGlzdG9yeVswXSA+PSBuICogNCAmJiBydW5IaXN0b3J5WzZdID49IG4pIHNjb3JlKys7XG4gICAgaWYgKHJ1bkhpc3RvcnlbNl0gPj0gbiAqIDQgJiYgcnVuSGlzdG9yeVswXSA+PSBuKSBzY29yZSsrO1xuICAgIHJldHVybiBzY29yZTtcbiAgfVxuICAvLyDlv4XpobvlnKjooYzvvIjmiJbliJfvvInnmoTmqKHlnZfnu5PmnZ/ml7bosIPnlKjjgILov5nmmK8gZ2V0UGVuYWx0eVNjb3JlKCkg55qE6L6F5Yqp5Ye95pWw44CCXG4gIHByaXZhdGUgZmluZGVyUGVuYWx0eVRlcm1pbmF0ZUFuZENvdW50KFxuICAgIHJ1bkNvbG9yOiBib29sZWFuLFxuICAgIHJ1bkxlbmd0aDogbnVtYmVyLFxuICAgIHJ1bkhpc3Rvcnk6IG51bWJlcltdLFxuICApOiBudW1iZXIge1xuICAgIGlmIChydW5Db2xvcikge1xuICAgICAgLy8g57uI5q2i5pqX6Imy6L+Q6KGMXG4gICAgICB0aGlzLmZpbmRlclBlbmFsdHlBZGRIaXN0b3J5KHJ1bkxlbmd0aCwgcnVuSGlzdG9yeSk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHJ1bkxlbmd0aCA9IDA7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHJ1bkxlbmd0aCArPSB0aGlzLnNpemU7IC8vIOa3u+WKoOS6ruiJsui+ueahhuWIsOacgOe7iOi/kOihjFxuICAgIHRoaXMuZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkocnVuTGVuZ3RoLCBydW5IaXN0b3J5KTtcbiAgICByZXR1cm4gdGhpcy5maW5kZXJQZW5hbHR5Q291bnRQYXR0ZXJucyhydW5IaXN0b3J5KTtcbiAgfVxuICAvLyDlsIbnu5nlrprlgLzmjqjliLDliY3pnaLlubbkuKLlvIPmnIDlkI7kuIDkuKrlgLzjgILov5nmmK8gZ2V0UGVuYWx0eVNjb3JlKCkg55qE6L6F5Yqp5Ye95pWw44CCXG4gIHByaXZhdGUgZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkocnVuTGVuZ3RoOiBudW1iZXIsIHJ1bkhpc3Rvcnk6IG51bWJlcltdKTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgaWYgKHJ1bkhpc3RvcnlbMF0gPT09IDApIHJ1bkxlbmd0aCArPSB0aGlzLnNpemU7IC8vIOa3u+WKoOS6ruiJsui+ueahhuWIsOWIneWni+i/kOihjFxuICAgIHJ1bkhpc3RvcnkucG9wKCk7XG4gICAgcnVuSGlzdG9yeS51bnNoaWZ0KHJ1bkxlbmd0aCk7XG4gIH1cbn1cbi8vIOWwhue7meWumuaVsOWAvOeahOS9juS9jeavlOeJueS9jei/veWKoOWIsOe7meWumue8k+WGsuWMuuOAguimgeaxgiAwIDw9IGxlbiA8PSAzMSDkuJQgMCA8PSB2YWwgPCAyXmxlbuOAglxuZnVuY3Rpb24gYXBwZW5kQml0cyh2YWw6IG51bWJlciwgbGVuOiBudW1iZXIsIGJiOiBudW1iZXJbXSk6IHZvaWQge1xuICBpZiAobGVuIDwgMCB8fCBsZW4gPiAzMSB8fCB2YWwgPj4+IGxlbiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdWYWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxuICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAvLyDpgJDkvY3ov73liqBcbiAgICBiYi5wdXNoKCh2YWwgPj4+IGkpICYgMSk7XG4gIH1cbn1cbi8vIOi/lOWbnnjnmoTnrKxp5L2N5piv5ZCm5Li6MeOAglxuZnVuY3Rpb24gZ2V0Qml0KHg6IG51bWJlciwgaTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoKHggPj4+IGkpICYgMSkgIT09IDA7XG59XG4vLyDlpoLmnpznu5nlrprmnaHku7bkuLpmYWxzZeWImeaKm+WHuuW8guW4uOOAglxuZnVuY3Rpb24gYXNzZXJ0KGNvbmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgaWYgKCFjb25kKSB0aHJvdyBuZXcgRXJyb3IoJ0Fzc2VydGlvbiBlcnJvcicpO1xufVxuLypcbiAqIFFS56CB56ym5Y+35Lit55qEIOWtl+espi/kuozov5vliLYg5pWw5o2u5q61XG4gKi9cbmNsYXNzIFFyU2VnbWVudCB7XG4gIC8vIOS9v+eUqOe7meWumueahOWxnuaAp+WSjOaVsOaNruWIm+W7uuS4gOS4quaWsOeahFFS56CB5q6144CC5a2X56ym6K6h5pWw77yIbnVtQ2hhcnPvvInlv4XpobvkuI7mqKHlvI/lkozkvY3nvJPlhrLljLrplb/luqbkuIDoh7TvvIzkvYbkuI3ov5vooYzmo4Dmn6XjgILnu5nlrprnmoTkvY3nvJPlhrLljLrooqvlhYvpmoblubblrZjlgqjjgIJcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIC8vIOatpOauteeahOaooeW8j+aMh+ekuuespuOAglxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlOiBRck1vZGUsXG4gICAgLy8g5q2k5q615pyq57yW56CB5pWw5o2u55qE6ZW/5bqm44CC5a+55LqO5pWw5a2XL+Wtl+avjeaVsOWtly/msYnlrZfmqKHlvI/vvIzku6XlrZfnrKbkuLrljZXkvY3mtYvph4/vvJvlr7nkuo7lrZfoioLmqKHlvI/vvIzku6XlrZfoioLkuLrljZXkvY3mtYvph4/vvJvlr7nkuo5FQ0nmqKHlvI/vvIzkuLowOyDlp4vnu4jkuLrpm7bmiJbmraPmlbDjgILkuI3mmK/mlbDmja7nmoTkvY3plb/luqbjgIJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbnVtQ2hhcnM6IG51bWJlcixcbiAgICAvLyDmraTmrrXnmoTmlbDmja7kvY3jgILpgJrov4dnZXREYXRhKCnorr/pl67jgIJcbiAgICByZWFkb25seSBiaXREYXRhOiBudW1iZXJbXSxcbiAgKSB7XG4gICAgaWYgKG51bUNoYXJzIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQnKTtcbiAgICB0aGlzLmJpdERhdGEgPSBiaXREYXRhLnNsaWNlKCk7IC8vIOi/m+ihjOmYsuW+oeaAp+aLt+i0nVxuICB9XG4gIC8vIOi/lOWbnuatpOauteaVsOaNruS9jeeahOaWsOWJr+acrOOAglxuICBwdWJsaWMgZ2V0RGF0YSgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYml0RGF0YS5zbGljZSgpOyAvLyDov5vooYzpmLLlvqHmgKfmi7fotJ1cbiAgfVxufVxuY29uc3QgTlVNRVJJQ19SRUdFWDogUmVnRXhwID0gL15bMC05XSokLztcbmNvbnN0IEFMUEhBTlVNRVJJQ19SRUdFWDogUmVnRXhwID0gL15bQS1aMC05ICQlKisuLzotXSokLztcbi8vIOWtl+avjeaVsOWtl+aooeW8j+S4reaJgOacieWQiOazleWtl+espueahOmbhuWQiO+8jOWFtuS4reavj+S4quWtl+espuWAvOaYoOWwhOWIsOWtl+espuS4suS4reeahOe0ouW8leOAglxuY29uc3QgQUxQSEFOVU1FUklDX0NIQVJTRVQ6IHN0cmluZyA9ICcwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogJCUqKy0uLzonO1xuXG4vLyDmmK/lkKblj6/ku6XnlKjmlbDlrZfmqKHlvI/nvJbnoIHjgILlvZPkuJTku4XlvZPmr4/kuKrlrZfnrKbpg73lnKgw5YiwOeeahOiMg+WbtOWGheaXtu+8jOWtl+espuS4suWPr+e8lueggeOAglxuZnVuY3Rpb24gaXNOdW1lcmljKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gTlVNRVJJQ19SRUdFWC50ZXN0KHRleHQpO1xufVxuLyoqXG4gKiDmmK/lkKblj6/ku6XnlKjlrZfmr43mlbDlrZfmqKHlvI/nvJbnoIFcbiAqIEBkZXNjcmlwdGlvbiAw5YiwOeOAgUHliLBa5LuF5aSn5YaZ77yJ44CB56m65qC844CB576O5YWD56ym5Y+344CB55m+5YiG5Y+344CB5pif5Y+344CB5Yqg5Y+344CB6L+e5a2X56ym44CB5Y+l54K544CB5pac5p2g44CB5YaS5Y+344CCXG4gKiBAcGFyYW0ge1N0cmluZ30gdGV4dCDnu5nlrprlrZfnrKbkuLJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBib29sZWFuXG4gKi9cbmZ1bmN0aW9uIGlzQWxwaGFudW1lcmljKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQUxQSEFOVU1FUklDX1JFR0VYLnRlc3QodGV4dCk7XG59XG4vLyDov5Tlm57kuIDkuKrooajnpLrku6XlrZfoioLmqKHlvI/nvJbnoIHnmoTnu5nlrprkuozov5vliLbmlbDmja7nmoTmrrXjgILmiYDmnInovpPlhaXlrZfoioLmlbDnu4Tpg73mmK/lj6/mjqXlj5fnmoTjgILku7vkvZXmlofmnKzlrZfnrKbkuLLpg73lj6/ku6XovazmjaLkuLpVVEYtOOWtl+iKguW5tue8lueggeS4uuWtl+iKguaooeW8j+auteOAglxuZnVuY3Rpb24gbWFrZUJ5dGVzKGRhdGE6IFJlYWRvbmx5PG51bWJlcltdPik6IFFyU2VnbWVudCB7XG4gIGNvbnN0IGJiOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYiBvZiBkYXRhKSBhcHBlbmRCaXRzKGIsIDgsIGJiKTtcbiAgcmV0dXJuIG5ldyBRclNlZ21lbnQoUXJNb2RlLmdldCgnQllURScpLCBkYXRhLmxlbmd0aCwgYmIpO1xufVxuLy8g6K6h566X5bm26L+U5Zue5Zyo57uZ5a6a54mI5pys5LiL57yW56CB57uZ5a6a5q615omA6ZyA55qE5L2N5pWw44CC5aaC5p6c5p+Q5Liq5q6155qE5a2X56ym5pWw5aSq5aSa5Lul6Iez5LqO5peg5rOV6YCC5bqU5YW26ZW/5bqm5a2X5q6177yM5YiZ57uT5p6c5Li65peg56m35aSn44CCXG5mdW5jdGlvbiBnZXRUb3RhbEJpdHMoc2VnczogUmVhZG9ubHk8UXJTZWdtZW50W10+LCB2ZXJzaW9uOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgcmVzdWx0OiBudW1iZXIgPSAwO1xuXG4gIGZvciAoY29uc3Qgc2VnIG9mIHNlZ3MpIHtcbiAgICBjb25zdCBjY2JpdHM6IG51bWJlciA9IHNlZy5tb2RlLm51bUNoYXJDb3VudEJpdHModmVyc2lvbik7XG5cbiAgICBpZiAoc2VnLm51bUNoYXJzID49IDEgPDwgY2NiaXRzKSByZXR1cm4gSW5maW5pdHk7IC8vIOauteeahOmVv+W6puS4jemAguWQiOWtl+auteeahOS9jeWuveW6plxuICAgIHJlc3VsdCArPSA0ICsgY2NiaXRzICsgc2VnLmJpdERhdGEubGVuZ3RoO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4vLyDov5Tlm57kuIDkuKrooajnpLrku6XmlbDlrZfmqKHlvI/nvJbnoIHnmoTnu5nlrprljYHov5vliLbmlbDlrZflrZfnrKbkuLLnmoTmrrXjgIJcbmZ1bmN0aW9uIG1ha2VOdW1lcmljKGRpZ2l0czogc3RyaW5nKTogUXJTZWdtZW50IHtcbiAgaWYgKCFpc051bWVyaWMoZGlnaXRzKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdTdHJpbmcgY29udGFpbnMgbm9uLW51bWVyaWMgY2hhcmFjdGVycycpO1xuICB9XG4gIGNvbnN0IGJiOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgKSB7XG4gICAgLy8g5q+P5qyh6L+t5Luj5pyA5aSa5raI6ICXM+S4quaVsOWtl1xuICAgIGNvbnN0IG46IG51bWJlciA9IE1hdGgubWluKGRpZ2l0cy5sZW5ndGggLSBpLCAzKTtcblxuICAgIGFwcGVuZEJpdHMocGFyc2VJbnQoZGlnaXRzLnN1YnN0cmluZyhpLCBpICsgbiksIDEwKSwgbiAqIDMgKyAxLCBiYik7XG4gICAgaSArPSBuO1xuICB9XG4gIHJldHVybiBuZXcgUXJTZWdtZW50KFFyTW9kZS5nZXQoJ05VTUVSSUMnKSwgZGlnaXRzLmxlbmd0aCwgYmIpO1xufVxuLy8g6L+U5Zue5LiA5Liq6KGo56S65Lul5a2X5q+N5pWw5a2X5qih5byP57yW56CB55qE57uZ5a6a5paH5pys5a2X56ym5Liy55qE5q6144CC5YWB6K6455qE5a2X56ym5piv77yaMOWIsDnjgIFB5YiwWu+8iOS7heWkp+WGme+8ieOAgeepuuagvOOAgee+juWFg+espuWPt+OAgeeZvuWIhuWPt+OAgeaYn+WPt+OAgeWKoOWPt+OAgei/nuWtl+espuOAgeWPpeeCueOAgeaWnOadoOOAgeWGkuWPt+OAglxuZnVuY3Rpb24gbWFrZUFscGhhbnVtZXJpYyh0ZXh0OiBzdHJpbmcpOiBRclNlZ21lbnQge1xuICBpZiAoIWlzQWxwaGFudW1lcmljKHRleHQpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1N0cmluZyBjb250YWlucyB1bmVuY29kYWJsZSBjaGFyYWN0ZXJzIGluIGFscGhhbnVtZXJpYyBtb2RlJyk7XG4gIH1cbiAgY29uc3QgYmI6IG51bWJlcltdID0gW107XG4gIGxldCBpOiBudW1iZXI7XG5cbiAgZm9yIChpID0gMDsgaSArIDIgPD0gdGV4dC5sZW5ndGg7IGkgKz0gMikge1xuICAgIC8vIOWkhOeQhuavj+e7hDLkuKrlrZfnrKZcbiAgICBsZXQgdGVtcCA9IEFMUEhBTlVNRVJJQ19DSEFSU0VULmluZGV4T2YodGV4dC5jaGFyQXQoaSkpICogNDU7XG5cbiAgICB0ZW1wICs9IEFMUEhBTlVNRVJJQ19DSEFSU0VULmluZGV4T2YodGV4dC5jaGFyQXQoaSArIDEpKTtcbiAgICBhcHBlbmRCaXRzKHRlbXAsIDExLCBiYik7XG4gIH1cbiAgLy8g5Ymp5LiLMeS4quWtl+esplxuICBpZiAoaSA8IHRleHQubGVuZ3RoKSB7XG4gICAgYXBwZW5kQml0cyhBTFBIQU5VTUVSSUNfQ0hBUlNFVC5pbmRleE9mKHRleHQuY2hhckF0KGkpKSwgNiwgYmIpO1xuICB9XG4gIHJldHVybiBuZXcgUXJTZWdtZW50KFFyTW9kZS5nZXQoJ0FMUEhBTlVNRVJJQycpLCB0ZXh0Lmxlbmd0aCwgYmIpO1xufVxuLypcbiAqIFFS56CB56ym5Y+35Lit55qE6ZSZ6K+v57qg5q2j57qn5YirXG4gKi9cbmV4cG9ydCBjbGFzcyBFY2Mge1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIC8vIOWcqDDliLAz6IyD5Zu05YaF77yI5peg56ym5Y+3MuS9jeaVtOaVsO+8ieOAglxuICAgIHB1YmxpYyByZWFkb25seSBvcmRpbmFsOiBJbnRSYW5nZTwwLCA0PixcbiAgICAvLyAo5YyF56eB5pyJKSDlnKgw5YiwM+iMg+WbtOWGhe+8iOaXoOespuWPtzLkvY3mlbTmlbDvvInjgIJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybWF0Qml0czogSW50UmFuZ2U8MCwgND4sXG4gICkge31cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTEVWRUxTID0ge1xuICAgIExPVzogbmV3IEVjYygwLCAxKSwgLy8gNyUg6ZSZ6K+v5a655b+N546HXG4gICAgTUVESVVNOiBuZXcgRWNjKDEsIDApLCAvLyAxNSUg6ZSZ6K+v5a655b+N546HXG4gICAgUVVBUlRJTEU6IG5ldyBFY2MoMiwgMyksIC8vIDI1JSDplJnor6/lrrnlv43njodcbiAgICBISUdIOiBuZXcgRWNjKDMsIDIpLCAvLyAzMCUg6ZSZ6K+v5a655b+N546HXG4gIH0gYXMgY29uc3Q7XG4gIC8vIOiOt+WPluaMh+Wumue6p+WIq+eahCBFQ0NcbiAgcHVibGljIHN0YXRpYyBnZXQobGV2ZWw6IGtleW9mIHR5cGVvZiBFY2MuTEVWRUxTKTogRWNjIHtcbiAgICByZXR1cm4gRWNjLkxFVkVMU1tsZXZlbF07XG4gIH1cbn1cbi8qXG4gKiDmj4/ov7DlpoLkvZXop6Pph4rmrrXnmoTmlbDmja7kvY3jgILkuI3lj6/lj5jjgIJcbiAqL1xuY2xhc3MgUXJNb2RlIHtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAvLyDmqKHlvI/mjIfnpLrkvY3vvIzmmK/kuIDkuKp1aW50NOWAvO+8iOiMg+WbtDDliLAxNe+8ieOAglxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlQml0czogSW50UmFuZ2U8MCwgMTY+LFxuICAgIC8vIOS4ieS4quS4jeWQjOeJiOacrOiMg+WbtOeahOWtl+espuiuoeaVsOS9jeaVsOOAglxuICAgIHByaXZhdGUgcmVhZG9ubHkgbnVtQml0c0NoYXJDb3VudDogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICApIHt9XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IG1vZGVzID0ge1xuICAgIE5VTUVSSUM6IG5ldyBRck1vZGUoMHgxLCBbMTAsIDEyLCAxNF0pLFxuICAgIEFMUEhBTlVNRVJJQzogbmV3IFFyTW9kZSgweDIsIFs5LCAxMSwgMTNdKSxcbiAgICBCWVRFOiBuZXcgUXJNb2RlKDB4NCwgWzgsIDE2LCAxNl0pLFxuICAgIEtBTkpJOiBuZXcgUXJNb2RlKDB4OCwgWzgsIDEwLCAxMl0pLFxuICAgIEVDSTogbmV3IFFyTW9kZSgweDcsIFswLCAwLCAwXSksXG4gIH0gYXMgY29uc3Q7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0KG1vZGU6IGtleW9mIHR5cGVvZiBRck1vZGUubW9kZXMpIHtcbiAgICByZXR1cm4gUXJNb2RlLm1vZGVzW21vZGVdO1xuICB9XG4gIC8vIOiMg+WbtOiuoeeul1xuICBwdWJsaWMgbnVtQ2hhckNvdW50Qml0cyh2ZXJzaW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm51bUJpdHNDaGFyQ291bnRbTWF0aC5mbG9vcigodmVyc2lvbiArIDcpIC8gMTcpXTtcbiAgfVxufVxuXG50eXBlIEVudW1lcmF0ZTxOIGV4dGVuZHMgbnVtYmVyLCBBY2MgZXh0ZW5kcyBudW1iZXJbXSA9IFtdPiA9IEFjY1snbGVuZ3RoJ10gZXh0ZW5kcyBOXG4gID8gQWNjW251bWJlcl1cbiAgOiBFbnVtZXJhdGU8TiwgWy4uLkFjYywgQWNjWydsZW5ndGgnXV0+O1xuXG5leHBvcnQgdHlwZSBJbnRSYW5nZTxGIGV4dGVuZHMgbnVtYmVyLCBUIGV4dGVuZHMgbnVtYmVyPiA9IEV4Y2x1ZGU8RW51bWVyYXRlPFQ+LCBFbnVtZXJhdGU8Rj4+O1xuIl0sIm1hcHBpbmdzIjoiZ2lGQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUVBO0FBQ0EsR0FBTSxDQUFBQSx1QkFBdUIsQ0FBRyxDQUM5QixDQUNFLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzdGLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQ25FLENBQUU7QUFDSCxDQUNFLENBQUMsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzlGLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQ25FLENBQUU7QUFDSCxDQUNFLENBQUMsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzlGLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQ25FLENBQUU7QUFDSCxDQUNFLENBQUMsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzlGLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQ2pFO0FBQUEsQ0FDSixDQUNELEdBQU0sQ0FBQUMsMkJBQTJCLENBQUcsQ0FDbEMsQ0FDRSxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUMvRixFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUMzQyxDQUNELENBQ0UsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDNUYsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDdkQsQ0FDRCxDQUNFLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQy9GLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQ3ZELENBQ0QsQ0FDRSxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzVGLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUMzRCxDQUNGLENBRUQ7QUFDQSxRQUFTLENBQUFDLG9CQUFvQkEsQ0FBQ0MsR0FBVyxDQUFVLENBQ2pELEdBQUlBLEdBQUcsQ0FBR0MsTUFBTSxDQUFDQyxPQUFPLENBQUNDLEdBQUcsRUFBSUgsR0FBRyxDQUFHQyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0UsR0FBRyxDQUFFLENBQ3hELEtBQU0sSUFBSSxDQUFBQyxVQUFVLENBQUMsNkJBQTZCLENBQ3BELENBQ0EsR0FBSSxDQUFBQyxNQUFNLENBQUcsQ0FBQyxFQUFFLENBQUdOLEdBQUcsQ0FBRyxHQUFHLEVBQUlBLEdBQUcsQ0FBRyxFQUFFLENBRXhDLEdBQUlBLEdBQUcsRUFBSSxDQUFDLENBQUUsQ0FDWixHQUFNLENBQUFPLFFBQVEsQ0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNULEdBQUcsQ0FBRyxDQUFDLENBQUMsQ0FBRyxDQUFDLENBRXhDTSxNQUFNLEVBQUksQ0FBQyxFQUFFLENBQUdDLFFBQVEsQ0FBRyxFQUFFLEVBQUlBLFFBQVEsQ0FBRyxFQUFFLENBQzlDLEdBQUlQLEdBQUcsRUFBSSxDQUFDLENBQUVNLE1BQU0sRUFBSSxFQUMxQixDQUNBSSxNQUFNLENBQUMsR0FBRyxFQUFJSixNQUFNLEVBQUlBLE1BQU0sRUFBSSxLQUFLLENBQUMsQ0FDeEMsTUFBTyxDQUFBQSxNQUNULENBQ0E7QUFDQSxRQUFTLENBQUFLLG1CQUFtQkEsQ0FBQ1gsR0FBVyxDQUFFWSxHQUFRLENBQVUsQ0FDMUQsTUFDRSxDQUFBSixJQUFJLENBQUNDLEtBQUssQ0FBQ1Ysb0JBQW9CLENBQUNDLEdBQUcsQ0FBQyxDQUFHLENBQUMsQ0FBQyxDQUN6Q0gsdUJBQXVCLENBQUNlLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLENBQUNiLEdBQUcsQ0FBQyxDQUFHRiwyQkFBMkIsQ0FBQ2MsR0FBRyxDQUFDQyxPQUFPLENBQUMsQ0FBQ2IsR0FBRyxDQUU1RixDQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUNPLFFBQVMsQ0FBQWMsY0FBY0EsQ0FDNUJDLElBQTJCLENBQzNCSCxHQUFRLENBS0EsSUFKUixDQUFBSSxVQUEyQixDQUFBQyxTQUFBLENBQUFDLE1BQUEsSUFBQUQsU0FBQSxNQUFBRSxTQUFBLENBQUFGLFNBQUEsSUFBRyxDQUFDLElBQy9CLENBQUFHLFVBQTJCLENBQUFILFNBQUEsQ0FBQUMsTUFBQSxJQUFBRCxTQUFBLE1BQUFFLFNBQUEsQ0FBQUYsU0FBQSxJQUFHLEVBQUUsSUFDaEMsQ0FBQUksSUFBeUIsQ0FBQUosU0FBQSxDQUFBQyxNQUFBLElBQUFELFNBQUEsTUFBQUUsU0FBQSxDQUFBRixTQUFBLElBQUcsQ0FBQyxDQUFDLElBQzlCLENBQUFLLFFBQWlCLENBQUFMLFNBQUEsQ0FBQUMsTUFBQSxJQUFBRCxTQUFBLE1BQUFFLFNBQUEsQ0FBQUYsU0FBQSxJQUFHLElBQUksQ0FFeEIsR0FDRSxFQUNFaEIsTUFBTSxDQUFDQyxPQUFPLENBQUNDLEdBQUcsRUFBSWEsVUFBVSxFQUNoQ0EsVUFBVSxFQUFJSSxVQUFVLEVBQ3hCQSxVQUFVLEVBQUluQixNQUFNLENBQUNDLE9BQU8sQ0FBQ0UsR0FBRyxDQUNqQyxFQUNEaUIsSUFBSSxDQUFHLENBQUMsQ0FBQyxFQUNUQSxJQUFJLENBQUcsQ0FBQyxDQUNSLENBQ0EsS0FBTSxJQUFJLENBQUFoQixVQUFVLENBQUMsZUFBZSxDQUN0QyxDQUNBO0FBQ0EsR0FBSSxDQUFBa0IsT0FBd0IsQ0FDMUJDLFlBQW9CLENBQ3BCQyxJQUFJLENBQUdiLEdBQUcsQ0FFWixJQUFLVyxPQUFPLENBQUdQLFVBQVUsRUFBSU8sT0FBTyxFQUFFLENBQUUsQ0FDdEMsR0FBTSxDQUFBRyxpQkFBZ0IsQ0FBR2YsbUJBQW1CLENBQUNZLE9BQU8sQ0FBRUUsSUFBSSxDQUFDLENBQUcsQ0FBQyxDQUFFO0FBQy9ERSxRQUFRLENBQUdDLFlBQVksQ0FBQ2IsSUFBSSxDQUFFUSxPQUFPLENBQUMsQ0FFeEM7QUFDQSxHQUFJSSxRQUFRLEVBQUlELGlCQUFnQixDQUFFLENBQ2hDRixZQUFZLENBQUdHLFFBQVEsQ0FDdkIsS0FDRixDQUNBLEdBQUlKLE9BQU8sRUFBSUgsVUFBVSxDQUFFLENBQ3pCO0FBQ0EsS0FBTSxJQUFJLENBQUFmLFVBQVUsQ0FBQyxlQUFlLENBQ3RDLENBQ0YsQ0FDQTtBQUNBLEdBQUlpQixRQUFRLENBQUUsQ0FDWixRQUFBTyxFQUFBLEdBQUFDLElBQUEsQ0FBcUIsQ0FBQ0MsR0FBRyxDQUFDQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUVELEdBQUcsQ0FBQ0MsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFFRCxHQUFHLENBQUNDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBSCxFQUFBLENBQUFDLElBQUEsQ0FBQVosTUFBQSxDQUFBVyxFQUFBLEdBQUUsQ0FBM0UsR0FBTSxDQUFBSSxNQUFNLENBQUFILElBQUEsQ0FBQUQsRUFBQSxFQUNmLEdBQUlMLFlBQVksRUFBSWIsbUJBQW1CLENBQUNZLE9BQU8sQ0FBRVUsTUFBTSxDQUFDLENBQUcsQ0FBQyxDQUFFUixJQUFJLENBQUdRLE1BQ3ZFLENBQ0YsQ0FDQTtBQUNBLEdBQU0sQ0FBQUMsRUFBWSxDQUFHLEVBQUUsQ0FBQyxJQUFBQyxTQUFBLENBQUFDLDBCQUFBLENBRU5yQixJQUFJLEVBQUFzQixLQUFBLEtBQXRCLElBQUFGLFNBQUEsQ0FBQUcsQ0FBQSxLQUFBRCxLQUFBLENBQUFGLFNBQUEsQ0FBQUksQ0FBQSxJQUFBQyxJQUFBLEVBQXdCLElBQWIsQ0FBQUMsR0FBRyxDQUFBSixLQUFBLENBQUFLLEtBQUEsQ0FDWkMsVUFBVSxDQUFDRixHQUFHLENBQUNHLElBQUksQ0FBQ0MsUUFBUSxDQUFFLENBQUMsQ0FBRVgsRUFBRSxDQUFDLENBQ3BDUyxVQUFVLENBQUNGLEdBQUcsQ0FBQ0ssUUFBUSxDQUFFTCxHQUFHLENBQUNHLElBQUksQ0FBQ0csZ0JBQWdCLENBQUN4QixPQUFPLENBQUMsQ0FBRVcsRUFBRSxDQUFDLENBQUMsSUFBQWMsVUFBQSxDQUFBWiwwQkFBQSxDQUNqREssR0FBRyxDQUFDUSxPQUFPLENBQUMsQ0FBQyxFQUFBQyxNQUFBLEtBQTdCLElBQUFGLFVBQUEsQ0FBQVYsQ0FBQSxLQUFBWSxNQUFBLENBQUFGLFVBQUEsQ0FBQVQsQ0FBQSxJQUFBQyxJQUFBLEVBQStCLElBQXBCLENBQUFXLENBQUMsQ0FBQUQsTUFBQSxDQUFBUixLQUFBLENBQW1CUixFQUFFLENBQUNrQixJQUFJLENBQUNELENBQUMsQ0FBQyxDQUFDLE9BQUFFLEdBQUEsRUFBQUwsVUFBQSxDQUFBTSxDQUFBLENBQUFELEdBQUEsVUFBQUwsVUFBQSxDQUFBTyxDQUFBLEdBQzVDLENBQUMsT0FBQUYsR0FBQSxFQUFBbEIsU0FBQSxDQUFBbUIsQ0FBQSxDQUFBRCxHQUFBLFVBQUFsQixTQUFBLENBQUFvQixDQUFBLEdBQ0Q3QyxNQUFNLENBQUN3QixFQUFFLENBQUNoQixNQUFNLEdBQUtNLFlBQVksQ0FBQyxDQUNsQztBQUNBLEdBQU0sQ0FBQUUsZ0JBQXdCLENBQUdmLG1CQUFtQixDQUFDWSxPQUFPLENBQUVFLElBQUksQ0FBQyxDQUFHLENBQUMsQ0FFdkVmLE1BQU0sQ0FBQ3dCLEVBQUUsQ0FBQ2hCLE1BQU0sRUFBSVEsZ0JBQWdCLENBQUMsQ0FDckNpQixVQUFVLENBQUMsQ0FBQyxDQUFFbkMsSUFBSSxDQUFDZ0QsR0FBRyxDQUFDLENBQUMsQ0FBRTlCLGdCQUFnQixDQUFHUSxFQUFFLENBQUNoQixNQUFNLENBQUMsQ0FBRWdCLEVBQUUsQ0FBQyxDQUM1RFMsVUFBVSxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUMsQ0FBSVQsRUFBRSxDQUFDaEIsTUFBTSxDQUFHLENBQUUsRUFBSSxDQUFDLENBQUVnQixFQUFFLENBQUMsQ0FDNUN4QixNQUFNLENBQUN3QixFQUFFLENBQUNoQixNQUFNLENBQUcsQ0FBQyxHQUFLLENBQUMsQ0FBQyxDQUMzQjtBQUNBLElBQUssR0FBSSxDQUFBdUMsT0FBTyxDQUFHLEdBQUksQ0FBRXZCLEVBQUUsQ0FBQ2hCLE1BQU0sQ0FBR1EsZ0JBQWdCLENBQUUrQixPQUFPLEVBQUksR0FBSSxDQUFHLEVBQUksQ0FBRSxDQUM3RWQsVUFBVSxDQUFDYyxPQUFPLENBQUUsQ0FBQyxDQUFFdkIsRUFBRSxDQUMzQixDQUNBO0FBQ0EsR0FBTSxDQUFBd0IsYUFBdUIsQ0FBRyxFQUFFLENBRWxDLE1BQU9BLGFBQWEsQ0FBQ3hDLE1BQU0sQ0FBRyxDQUFDLENBQUdnQixFQUFFLENBQUNoQixNQUFNLENBQUV3QyxhQUFhLENBQUNOLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDbEVsQixFQUFFLENBQUN5QixPQUFPLENBQUMsU0FBQ1IsQ0FBQyxDQUFFUyxDQUFDLFFBQU0sQ0FBQUYsYUFBYSxDQUFDRSxDQUFDLEdBQUssQ0FBQyxDQUFDLEVBQUlULENBQUMsRUFBSyxDQUFDLEVBQUlTLENBQUMsQ0FBRyxDQUFDLENBQUUsQ0FBQyxDQUFDLENBQ3BFLE1BQU8sSUFBSSxDQUFBM0QsTUFBTSxDQUFDc0IsT0FBTyxDQUFFRSxJQUFJLENBQUVpQyxhQUFhLENBQUVyQyxJQUFJLENBQ3RELENBRUE7QUFDQSxRQUFTLENBQUF3QyxlQUFlQSxDQUFDQyxHQUFXLENBQVksQ0FDOUM7QUFDQUEsR0FBRyxDQUFHQyxTQUFTLENBQUNELEdBQUcsQ0FBQyxDQUNwQixHQUFNLENBQUF4RCxNQUFnQixDQUFHLEVBQUUsQ0FFM0IsSUFBSyxHQUFJLENBQUFzRCxDQUFDLENBQUcsQ0FBQyxDQUFFQSxDQUFDLENBQUdFLEdBQUcsQ0FBQzVDLE1BQU0sQ0FBRTBDLENBQUMsRUFBRSxDQUFFLENBQ25DLEdBQUlFLEdBQUcsQ0FBQ0UsTUFBTSxDQUFDSixDQUFDLENBQUMsR0FBSyxHQUFHLENBQUV0RCxNQUFNLENBQUM4QyxJQUFJLENBQUNVLEdBQUcsQ0FBQ0csVUFBVSxDQUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQ3JELENBQ0h0RCxNQUFNLENBQUM4QyxJQUFJLENBQUNjLFFBQVEsQ0FBQ0osR0FBRyxDQUFDSyxTQUFTLENBQUNQLENBQUMsQ0FBRyxDQUFDLENBQUVBLENBQUMsQ0FBRyxDQUFDLENBQUMsQ0FBRSxFQUFFLENBQUMsQ0FBQyxDQUN0REEsQ0FBQyxFQUFJLENBQ1AsQ0FDRixDQUNBLE1BQU8sQ0FBQXRELE1BQ1QsQ0FFQTtBQUNPLFFBQVMsQ0FBQThELFlBQVlBLENBQUNDLElBQVksQ0FBZSxDQUN0RDtBQUNBLEdBQUlBLElBQUksR0FBSyxFQUFFLENBQUUsTUFBTyxFQUFFLENBQUMsSUFDdEIsSUFBSUMsU0FBUyxDQUFDRCxJQUFJLENBQUMsQ0FBRSxNQUFPLENBQUNFLFdBQVcsQ0FBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUNoRCxJQUFJRyxjQUFjLENBQUNILElBQUksQ0FBQyxDQUFFLE1BQU8sQ0FBQ0ksZ0JBQWdCLENBQUNKLElBQUksQ0FBQyxDQUFDLENBQzlELE1BQU8sQ0FBQ0ssU0FBUyxDQUFDYixlQUFlLENBQUNRLElBQUksQ0FBQyxDQUFDLENBQzFDLENBRUEsUUFBUyxDQUFBTSx5QkFBeUJBLENBQUNDLE1BQWMsQ0FBWSxDQUMzRCxHQUFJQSxNQUFNLENBQUcsQ0FBQyxFQUFJQSxNQUFNLENBQUcsR0FBRyxDQUFFLEtBQU0sSUFBSSxDQUFBdkUsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQzNFO0FBQ0E7QUFDQSxHQUFNLENBQUFDLE1BQWdCLENBQUcsRUFBRSxDQUUzQixJQUFLLEdBQUksQ0FBQXNELENBQUMsQ0FBRyxDQUFDLENBQUVBLENBQUMsQ0FBR2dCLE1BQU0sQ0FBRyxDQUFDLENBQUVoQixDQUFDLEVBQUUsQ0FBRXRELE1BQU0sQ0FBQzhDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDbkQ5QyxNQUFNLENBQUM4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUU7QUFFaEI7QUFDQTtBQUNBO0FBQ0EsR0FBSSxDQUFBeUIsSUFBSSxDQUFHLENBQUMsQ0FFWixJQUFLLEdBQUksQ0FBQWpCLEdBQUMsQ0FBRyxDQUFDLENBQUVBLEdBQUMsQ0FBR2dCLE1BQU0sQ0FBRWhCLEdBQUMsRUFBRSxDQUFFLENBQy9CO0FBQ0EsSUFBSyxHQUFJLENBQUFrQixDQUFDLENBQUcsQ0FBQyxDQUFFQSxDQUFDLENBQUd4RSxNQUFNLENBQUNZLE1BQU0sQ0FBRTRELENBQUMsRUFBRSxDQUFFLENBQ3RDeEUsTUFBTSxDQUFDd0UsQ0FBQyxDQUFDLENBQUdDLG1CQUFtQixDQUFDekUsTUFBTSxDQUFDd0UsQ0FBQyxDQUFDLENBQUVELElBQUksQ0FBQyxDQUNoRCxHQUFJQyxDQUFDLENBQUcsQ0FBQyxDQUFHeEUsTUFBTSxDQUFDWSxNQUFNLENBQUVaLE1BQU0sQ0FBQ3dFLENBQUMsQ0FBQyxFQUFJeEUsTUFBTSxDQUFDd0UsQ0FBQyxDQUFHLENBQUMsQ0FDdEQsQ0FDQUQsSUFBSSxDQUFHRSxtQkFBbUIsQ0FBQ0YsSUFBSSxDQUFFLENBQUksQ0FDdkMsQ0FDQSxNQUFPLENBQUF2RSxNQUNULENBRUE7QUFDQSxRQUFTLENBQUEwRSwyQkFBMkJBLENBQ2xDQyxJQUF3QixDQUN4QkMsT0FBMkIsQ0FDakIsQ0FDVixHQUFNLENBQUE1RSxNQUFNLENBQUc0RSxPQUFPLENBQUNDLEdBQUcsQ0FBQyxpQkFBTSxFQUFDLEVBQUMsQ0FBQyxJQUFBQyxVQUFBLENBQUFoRCwwQkFBQSxDQUVwQjZDLElBQUksRUFBQUksTUFBQSxTQUFBQyxLQUFBLFVBQUFBLE1BQUEsQ0FBRSxJQUFYLENBQUFuQyxDQUFDLENBQUFrQyxNQUFBLENBQUEzQyxLQUFBLENBQ1Y7QUFDQSxHQUFNLENBQUE2QyxNQUFNLENBQUdwQyxDQUFDLENBQUk3QyxNQUFNLENBQUNrRixLQUFLLENBQUMsQ0FBWSxDQUU3Q2xGLE1BQU0sQ0FBQzhDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDZDhCLE9BQU8sQ0FBQ3ZCLE9BQU8sQ0FBQyxTQUFDOEIsSUFBSSxDQUFFN0IsQ0FBQyxRQUFNLENBQUF0RCxNQUFNLENBQUNzRCxDQUFDLENBQUMsRUFBSW1CLG1CQUFtQixDQUFDVSxJQUFJLENBQUVGLE1BQU0sQ0FBQyxDQUFDLENBQy9FLENBQUMsQ0FORCxJQUFBSCxVQUFBLENBQUE5QyxDQUFBLEtBQUErQyxNQUFBLENBQUFELFVBQUEsQ0FBQTdDLENBQUEsSUFBQUMsSUFBQSxHQUFBOEMsS0FBQSxHQU1DLE9BQUFqQyxHQUFBLEVBQUErQixVQUFBLENBQUE5QixDQUFBLENBQUFELEdBQUEsVUFBQStCLFVBQUEsQ0FBQTdCLENBQUEsR0FDRCxNQUFPLENBQUFqRCxNQUNULENBRUE7QUFDQTtBQUNBLFFBQVMsQ0FBQXlFLG1CQUFtQkEsQ0FBQ1csQ0FBUyxDQUFFQyxDQUFTLENBQVUsQ0FDekQsR0FBSUQsQ0FBQyxHQUFLLENBQUMsR0FBSyxDQUFDLEVBQUlDLENBQUMsR0FBSyxDQUFDLEdBQUssQ0FBQyxDQUFFLEtBQU0sSUFBSSxDQUFBdEYsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQzdFO0FBQ0EsR0FBSSxDQUFBdUYsQ0FBUyxDQUFHLENBQUMsQ0FFakIsSUFBSyxHQUFJLENBQUFoQyxDQUFDLENBQUcsQ0FBQyxDQUFFQSxDQUFDLEVBQUksQ0FBQyxDQUFFQSxDQUFDLEVBQUUsQ0FBRSxDQUMzQmdDLENBQUMsQ0FBSUEsQ0FBQyxFQUFJLENBQUMsQ0FBSyxDQUFDQSxDQUFDLEdBQUssQ0FBQyxFQUFJLEdBQU0sQ0FDbENBLENBQUMsRUFBSSxDQUFFRCxDQUFDLEdBQUsvQixDQUFDLENBQUksQ0FBQyxFQUFJOEIsQ0FDekIsQ0FDQWhGLE1BQU0sQ0FBQ2tGLENBQUMsR0FBSyxDQUFDLEdBQUssQ0FBQyxDQUFDLENBQ3JCLE1BQU8sQ0FBQUEsQ0FDVCxDQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FKQSxHQUtNLENBQUEzRixNQUFNLHlCQWdEVjtBQUNBLFNBQUFBLE9BQ0U7QUFDZ0JzQixPQUF3QixDQUN4QztBQUNnQnNFLG9CQUF5QixDQUN6Q25DLGFBQWlDLENBQ2pDb0MsR0FBd0IsQ0FDeEIsQ0FBQUMsZUFBQSxNQUFBOUYsTUFBQSxFQXZERjtBQUFBK0YsZUFBQSxnQkFDd0MsRUFBRSxFQUMxQztBQUFBQSxlQUFBLG1CQUMyQyxFQUFFLEVBa1I3QztBQUFBQSxlQUFBLHNCQUN3RSxDQUN0RSxTQUFDTixDQUFDLENBQUVDLENBQUMsUUFBSyxDQUFDRCxDQUFDLENBQUdDLENBQUMsRUFBSSxDQUFDLEdBQUssQ0FBQyxFQUMzQixTQUFDTSxDQUFDLENBQUVOLENBQUMsUUFBSyxDQUFBQSxDQUFDLENBQUcsQ0FBQyxHQUFLLENBQUMsRUFDckIsU0FBQ0QsQ0FBQyxRQUFLLENBQUFBLENBQUMsQ0FBRyxDQUFDLEdBQUssQ0FBQyxFQUNsQixTQUFDQSxDQUFDLENBQUVDLENBQUMsUUFBSyxDQUFDRCxDQUFDLENBQUdDLENBQUMsRUFBSSxDQUFDLEdBQUssQ0FBQyxFQUMzQixTQUFDRCxDQUFDLENBQUVDLENBQUMsUUFBSyxDQUFDbkYsSUFBSSxDQUFDQyxLQUFLLENBQUNpRixDQUFDLENBQUcsQ0FBQyxDQUFDLENBQUdsRixJQUFJLENBQUNDLEtBQUssQ0FBQ2tGLENBQUMsQ0FBRyxDQUFDLENBQUMsRUFBSSxDQUFDLEdBQUssQ0FBQyxFQUMzRCxTQUFDRCxDQUFDLENBQUVDLENBQUMsUUFBTyxDQUFBRCxDQUFDLENBQUdDLENBQUMsQ0FBSSxDQUFDLENBQU1ELENBQUMsQ0FBR0MsQ0FBQyxDQUFJLENBQUUsR0FBSyxDQUFDLEVBQzdDLFNBQUNELENBQUMsQ0FBRUMsQ0FBQyxRQUFLLENBQUdELENBQUMsQ0FBR0MsQ0FBQyxDQUFJLENBQUMsQ0FBTUQsQ0FBQyxDQUFHQyxDQUFDLENBQUksQ0FBRSxFQUFJLENBQUMsR0FBSyxDQUFDLEVBQ25ELFNBQUNELENBQUMsQ0FBRUMsQ0FBQyxRQUFLLENBQUUsQ0FBQ0QsQ0FBQyxDQUFHQyxDQUFDLEVBQUksQ0FBQyxDQUFNRCxDQUFDLENBQUdDLENBQUMsQ0FBSSxDQUFFLEVBQUksQ0FBQyxHQUFLLENBQUMsRUFDcEQsT0E3T2lCcEUsT0FBd0IsQ0FBeEJBLE9BQXdCLE1BRXhCc0Usb0JBQXlCLENBQXpCQSxvQkFBeUIsQ0FJekM7QUFDQSxHQUFJdEUsT0FBTyxDQUFHdEIsTUFBTSxDQUFDQyxPQUFPLENBQUNDLEdBQUcsRUFBSW9CLE9BQU8sQ0FBR3RCLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDRSxHQUFHLENBQUUsQ0FDaEUsS0FBTSxJQUFJLENBQUFDLFVBQVUsQ0FBQyw0QkFBNEIsQ0FDbkQsQ0FDQSxHQUFJeUYsR0FBRyxDQUFHLENBQUMsQ0FBQyxFQUFJQSxHQUFHLENBQUcsQ0FBQyxDQUFFLEtBQU0sSUFBSSxDQUFBekYsVUFBVSxDQUFDLHlCQUF5QixDQUFDLENBQ3hFO0FBQ0EsSUFBSSxDQUFDNkYsSUFBSSxDQUFHM0UsT0FBTyxDQUFHLENBQUMsQ0FBRyxFQUFFLENBQzVCO0FBQ0E7QUFDQSxHQUFNLENBQUE0RSxHQUFHLENBQUdDLEtBQUssQ0FBQyxJQUFJLENBQUNGLElBQUksQ0FBQyxDQUFDRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBRXhDLElBQUssR0FBSSxDQUFBekMsQ0FBQyxDQUFHLENBQUMsQ0FBRUEsQ0FBQyxDQUFHLElBQUksQ0FBQ3NDLElBQUksQ0FBRXRDLENBQUMsRUFBRSxDQUFFLENBQ2xDLElBQUksQ0FBQzBDLE9BQU8sQ0FBQzFDLENBQUMsQ0FBQyxDQUFHdUMsR0FBRyxDQUFDSSxLQUFLLENBQUMsQ0FBQyxDQUM3QixJQUFJLENBQUNDLFVBQVUsQ0FBQzVDLENBQUMsQ0FBQyxDQUFHdUMsR0FBRyxDQUFDSSxLQUFLLENBQUMsQ0FDakMsQ0FDQTtBQUNBLElBQUksQ0FBQ0Usb0JBQW9CLENBQUMsQ0FBQyxDQUMzQjtBQUNBLEdBQU0sQ0FBQUMsWUFBWSxDQUFHLElBQUksQ0FBQ0MsbUJBQW1CLENBQUNqRCxhQUFhLENBQUMsQ0FFNUQsSUFBSSxDQUFDa0QsYUFBYSxDQUFDRixZQUFZLENBQUMsQ0FDaEM7QUFDQSxJQUFJLENBQUNyRixJQUFJLENBQUcsSUFBSSxDQUFDd0YsVUFBVSxDQUFDZixHQUFHLENBQUMsQ0FDaEM7QUFDQSxJQUFJLENBQUNnQixTQUFTLENBQUMsSUFBSSxDQUFDekYsSUFBSSxDQUFDLENBQ3pCLElBQUksQ0FBQzBGLGNBQWMsQ0FBQyxJQUFJLENBQUMxRixJQUFJLENBQUMsQ0FDOUI7QUFDQSxJQUFJLENBQUNtRixVQUFVLENBQUcsRUFDcEIsQ0FFQSxnQkFDQTtBQUFBLE9BQUFRLFlBQUEsQ0FBQS9HLE1BQUEsR0FBQWdILEdBQUEsY0FBQXZFLEtBQUEsQ0E5REE7QUFDQSxRQUFRLENBQUFtRSxVQUFVQSxDQUFDZixHQUF3QixDQUFrQixDQUMzRCxHQUFJQSxHQUFHLEdBQUssQ0FBQyxDQUFDLENBQUUsTUFBTyxDQUFBQSxHQUFHLENBQzFCLEdBQUksQ0FBQXpFLElBQW9CLENBQUcsQ0FBQyxDQUM1QixHQUFJLENBQUE2RixVQUFVLENBQUcsVUFBVSxDQUUzQixJQUFLLEdBQUksQ0FBQXRELENBQUMsQ0FBRyxDQUFDLENBQUVBLENBQUMsQ0FBRyxDQUFDLENBQUVBLENBQUMsRUFBRSxDQUFFLENBQzFCO0FBQ0EsSUFBSSxDQUFDa0QsU0FBUyxDQUFDbEQsQ0FBQyxDQUFDLENBQ2pCLElBQUksQ0FBQ21ELGNBQWMsQ0FBQ25ELENBQUMsQ0FBQyxDQUN0QixHQUFNLENBQUF1RCxPQUFPLENBQUcsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUV0QyxHQUFJRCxPQUFPLENBQUdELFVBQVUsQ0FBRSxDQUN4QjdGLElBQUksQ0FBR3VDLENBQW1CLENBQzFCc0QsVUFBVSxDQUFHQyxPQUNmLENBQ0E7QUFDQSxJQUFJLENBQUNMLFNBQVMsQ0FBQ2xELENBQUMsQ0FDbEIsQ0FDQWxELE1BQU0sQ0FBQyxDQUFDLEVBQUlXLElBQUksRUFBSUEsSUFBSSxFQUFJLENBQUMsQ0FBQyxDQUM5QixNQUFPLENBQUFBLElBQ1QsQ0FBQyxHQUFBNEYsR0FBQSxhQUFBdkUsS0FBQSxDQTBDRCxRQUFPLENBQUEyRSxTQUFTQSxDQUFDM0IsQ0FBUyxDQUFFQyxDQUFTLENBQVcsQ0FDOUMsTUFBTyxDQUFBRCxDQUFDLEVBQUksQ0FBQyxFQUFJQSxDQUFDLENBQUcsSUFBSSxDQUFDUSxJQUFJLEVBQUlQLENBQUMsRUFBSSxDQUFDLEVBQUlBLENBQUMsQ0FBRyxJQUFJLENBQUNPLElBQUksRUFBSSxJQUFJLENBQUNJLE9BQU8sQ0FBQ1gsQ0FBQyxDQUFDLENBQUNELENBQUMsQ0FDaEYsQ0FDQSw2QkFFQTtBQUFBLEdBQUF1QixHQUFBLHdCQUFBdkUsS0FBQSxDQUNBLFFBQVEsQ0FBQStELG9CQUFvQkEsQ0FBQSxDQUFTLENBQ25DO0FBQ0EsSUFBSyxHQUFJLENBQUE3QyxDQUFDLENBQUcsQ0FBQyxDQUFFQSxDQUFDLENBQUcsSUFBSSxDQUFDc0MsSUFBSSxDQUFFdEMsQ0FBQyxFQUFFLENBQUUsQ0FDbEMsR0FBTSxDQUFBMEQsSUFBSSxDQUFHMUQsQ0FBQyxDQUFHLENBQUMsR0FBSyxDQUFDLENBRXhCLElBQUksQ0FBQzJELGlCQUFpQixDQUFDLENBQUMsQ0FBRTNELENBQUMsQ0FBRTBELElBQUksQ0FBQyxDQUNsQyxJQUFJLENBQUNDLGlCQUFpQixDQUFDM0QsQ0FBQyxDQUFFLENBQUMsQ0FBRTBELElBQUksQ0FDbkMsQ0FDQTtBQUNBLElBQUksQ0FBQ0UsaUJBQWlCLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBQyxDQUM1QixHQUFNLENBQUE3QixDQUFDLENBQUcsSUFBSSxDQUFDTyxJQUFJLENBQUcsQ0FBQyxDQUV2QixJQUFJLENBQUNzQixpQkFBaUIsQ0FBQzdCLENBQUMsQ0FBRSxDQUFDLENBQUMsQ0FDNUIsSUFBSSxDQUFDNkIsaUJBQWlCLENBQUMsQ0FBQyxDQUFFN0IsQ0FBQyxDQUFDLENBQzVCO0FBQ0EsR0FBTSxDQUFBOEIsV0FBVyxDQUFHLElBQUksQ0FBQ0MsNEJBQTRCLENBQUMsQ0FBQyxDQUN2RCxHQUFNLENBQUFuSCxRQUFRLENBQUdrSCxXQUFXLENBQUN2RyxNQUFNLENBRW5DLElBQUssR0FBSSxDQUFBMEMsR0FBQyxDQUFHLENBQUMsQ0FBRUEsR0FBQyxDQUFHckQsUUFBUSxDQUFFcUQsR0FBQyxFQUFFLENBQUUsQ0FDakMsSUFBSyxHQUFJLENBQUFrQixDQUFDLENBQUcsQ0FBQyxDQUFFQSxDQUFDLENBQUd2RSxRQUFRLENBQUV1RSxDQUFDLEVBQUUsQ0FBRSxDQUNqQztBQUNBLEdBQ0UsRUFDR2xCLEdBQUMsR0FBSyxDQUFDLEVBQUlrQixDQUFDLEdBQUssQ0FBQyxFQUNsQmxCLEdBQUMsR0FBSyxDQUFDLEVBQUlrQixDQUFDLEdBQUt2RSxRQUFRLENBQUcsQ0FBRSxFQUM5QnFELEdBQUMsR0FBS3JELFFBQVEsQ0FBRyxDQUFDLEVBQUl1RSxDQUFDLEdBQUssQ0FBRSxDQUNoQyxDQUNELENBQ0EsSUFBSSxDQUFDNkMsb0JBQW9CLENBQUNGLFdBQVcsQ0FBQzdELEdBQUMsQ0FBQyxDQUFFNkQsV0FBVyxDQUFDM0MsQ0FBQyxDQUFDLENBQzFELENBQ0YsQ0FDRixDQUNBO0FBQ0EsSUFBSSxDQUFDaUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFFO0FBQ3hCLElBQUksQ0FBQ2EsV0FBVyxDQUFDLENBQ25CLENBRUE7QUFDQTtBQUFBLEdBQUFYLEdBQUEsa0JBQUF2RSxLQUFBLENBQ0EsUUFBUSxDQUFBcUUsY0FBY0EsQ0FBQzFGLElBQVksQ0FBUSxDQUN6QztBQUNBLEdBQU0sQ0FBQTRELElBQVksQ0FBSSxJQUFJLENBQUNZLG9CQUFvQixDQUFDZ0MsVUFBVSxFQUFJLENBQUMsQ0FBSXhHLElBQUksQ0FBRTtBQUN6RSxHQUFJLENBQUF5RyxHQUFXLENBQUc3QyxJQUFJLENBRXRCLElBQUssR0FBSSxDQUFBckIsQ0FBQyxDQUFHLENBQUMsQ0FBRUEsQ0FBQyxDQUFHLEVBQUUsQ0FBRUEsQ0FBQyxFQUFFLENBQUVrRSxHQUFHLENBQUlBLEdBQUcsRUFBSSxDQUFDLENBQUssQ0FBQ0EsR0FBRyxHQUFLLENBQUMsRUFBSSxJQUFNLENBQ3JFLEdBQU0sQ0FBQUMsSUFBSSxDQUFHLENBQUU5QyxJQUFJLEVBQUksRUFBRSxDQUFJNkMsR0FBRyxFQUFJLEtBQU0sQ0FBRTtBQUU1Q3BILE1BQU0sQ0FBQ3FILElBQUksR0FBSyxFQUFFLEdBQUssQ0FBQyxDQUFDLENBQ3pCO0FBQ0EsSUFBSyxHQUFJLENBQUFuRSxHQUFDLENBQUcsQ0FBQyxDQUFFQSxHQUFDLEVBQUksQ0FBQyxDQUFFQSxHQUFDLEVBQUUsQ0FBRSxJQUFJLENBQUMyRCxpQkFBaUIsQ0FBQyxDQUFDLENBQUUzRCxHQUFDLENBQUVvRSxNQUFNLENBQUNELElBQUksQ0FBRW5FLEdBQUMsQ0FBQyxDQUFDLENBQzFFLElBQUksQ0FBQzJELGlCQUFpQixDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUVTLE1BQU0sQ0FBQ0QsSUFBSSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQzdDLElBQUksQ0FBQ1IsaUJBQWlCLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRVMsTUFBTSxDQUFDRCxJQUFJLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDN0MsSUFBSSxDQUFDUixpQkFBaUIsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFFUyxNQUFNLENBQUNELElBQUksQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUM3QyxJQUFLLEdBQUksQ0FBQW5FLEdBQUMsQ0FBRyxDQUFDLENBQUVBLEdBQUMsQ0FBRyxFQUFFLENBQUVBLEdBQUMsRUFBRSxDQUFFLENBQzNCLElBQUksQ0FBQzJELGlCQUFpQixDQUFDLEVBQUUsQ0FBRzNELEdBQUMsQ0FBRSxDQUFDLENBQUVvRSxNQUFNLENBQUNELElBQUksQ0FBRW5FLEdBQUMsQ0FBQyxDQUNuRCxDQUNBO0FBQ0EsSUFBSyxHQUFJLENBQUFBLEdBQUMsQ0FBRyxDQUFDLENBQUVBLEdBQUMsQ0FBRyxDQUFDLENBQUVBLEdBQUMsRUFBRSxDQUFFLENBQzFCLElBQUksQ0FBQzJELGlCQUFpQixDQUFDLElBQUksQ0FBQ3JCLElBQUksQ0FBRyxDQUFDLENBQUd0QyxHQUFDLENBQUUsQ0FBQyxDQUFFb0UsTUFBTSxDQUFDRCxJQUFJLENBQUVuRSxHQUFDLENBQUMsQ0FDOUQsQ0FDQSxJQUFLLEdBQUksQ0FBQUEsR0FBQyxDQUFHLENBQUMsQ0FBRUEsR0FBQyxDQUFHLEVBQUUsQ0FBRUEsR0FBQyxFQUFFLENBQUUsQ0FDM0IsSUFBSSxDQUFDMkQsaUJBQWlCLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQ3JCLElBQUksQ0FBRyxFQUFFLENBQUd0QyxHQUFDLENBQUVvRSxNQUFNLENBQUNELElBQUksQ0FBRW5FLEdBQUMsQ0FBQyxDQUMvRCxDQUNBLElBQUksQ0FBQzJELGlCQUFpQixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUNyQixJQUFJLENBQUcsQ0FBQyxDQUFFLElBQUksQ0FBQyxDQUFF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
180
+ function numCharCountBits(version){return this.numBitsCharCount[Math.floor((version+7)/17)];}}],[{key:"get",value:function get(mode){return QrMode.modes[mode];}}])}();_QrMode=QrMode;_defineProperty(QrMode,"modes",{NUMERIC:new _QrMode(1,[10,12,14]),ALPHANUMERIC:new _QrMode(2,[9,11,13]),BYTE:new _QrMode(4,[8,16,16]),KANJI:new _QrMode(8,[8,10,12]),ECI:new _QrMode(7,[0,0,0])});
181
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFQ0NfQ09ERVdPUkRTX1BFUl9CTE9DSyIsIk5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLUyIsImdldE51bVJhd0RhdGFNb2R1bGVzIiwidmVyIiwiUXJDb2RlIiwiVkVSU0lPTiIsIk1JTiIsIk1BWCIsIlJhbmdlRXJyb3IiLCJyZXN1bHQiLCJudW1BbGlnbiIsIk1hdGgiLCJmbG9vciIsImFzc2VydCIsImdldE51bURhdGFDb2Rld29yZHMiLCJlY2wiLCJvcmRpbmFsIiwiZW5jb2RlU2VnbWVudHMiLCJzZWdzIiwibWluVmVyc2lvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm1heFZlcnNpb24iLCJtYXNrIiwiYm9vc3RFY2wiLCJ2ZXJzaW9uIiwiZGF0YVVzZWRCaXRzIiwiX2VjbCIsImRhdGFDYXBhY2l0eUJpdHMiLCJ1c2VkQml0cyIsImdldFRvdGFsQml0cyIsIl9pIiwiX2FyciIsIkVjYyIsImdldCIsIm5ld0VjbCIsImJiIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInNlZyIsInZhbHVlIiwiYXBwZW5kQml0cyIsIm1vZGUiLCJtb2RlQml0cyIsIm51bUNoYXJzIiwibnVtQ2hhckNvdW50Qml0cyIsIl9pdGVyYXRvcjIiLCJnZXREYXRhIiwiX3N0ZXAyIiwiYiIsInB1c2giLCJlcnIiLCJlIiwiZiIsIm1pbiIsInBhZEJ5dGUiLCJkYXRhQ29kZXdvcmRzIiwiZm9yRWFjaCIsImkiLCJ0b1V0ZjhCeXRlQXJyYXkiLCJzdHIiLCJlbmNvZGVVUkkiLCJjaGFyQXQiLCJjaGFyQ29kZUF0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJtYWtlU2VnbWVudHMiLCJ0ZXh0IiwiaXNOdW1lcmljIiwibWFrZU51bWVyaWMiLCJpc0FscGhhbnVtZXJpYyIsIm1ha2VBbHBoYW51bWVyaWMiLCJtYWtlQnl0ZXMiLCJyZWVkU29sb21vbkNvbXB1dGVEaXZpc29yIiwiZGVncmVlIiwicm9vdCIsImoiLCJyZWVkU29sb21vbk11bHRpcGx5IiwicmVlZFNvbG9tb25Db21wdXRlUmVtYWluZGVyIiwiZGF0YSIsImRpdmlzb3IiLCJtYXAiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiX2xvb3AiLCJmYWN0b3IiLCJzaGlmdCIsImNvZWYiLCJ4IiwieSIsInoiLCJlcnJvckNvcnJlY3Rpb25MZXZlbCIsIm1zayIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIl8iLCJzaXplIiwicm93IiwiQXJyYXkiLCJmaWxsIiwibW9kdWxlcyIsInNsaWNlIiwiaXNGdW5jdGlvbiIsImRyYXdGdW5jdGlvblBhdHRlcm5zIiwiYWxsQ29kZXdvcmRzIiwiYWRkRWNjQW5kSW50ZXJsZWF2ZSIsImRyYXdDb2Rld29yZHMiLCJzZWxlY3RNYXNrIiwiYXBwbHlNYXNrIiwiZHJhd0Zvcm1hdEJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJtaW5QZW5hbHR5IiwicGVuYWx0eSIsImdldFBlbmFsdHlTY29yZSIsImdldE1vZHVsZSIsImZsYWciLCJzZXRGdW5jdGlvbk1vZHVsZSIsImRyYXdGaW5kZXJQYXR0ZXJuIiwiYWxpZ25QYXRQb3MiLCJnZXRBbGlnbm1lbnRQYXR0ZXJuUG9zaXRpb25zIiwiZHJhd0FsaWdubWVudFBhdHRlcm4iLCJkcmF3VmVyc2lvbiIsImZvcm1hdEJpdHMiLCJyZW0iLCJiaXRzIiwiZ2V0Qml0IiwiY29sb3IiLCJhIiwiZHkiLCJkeCIsImRpc3QiLCJtYXgiLCJhYnMiLCJ4eCIsInl5IiwiaXNEYXJrIiwibnVtQmxvY2tzIiwiYmxvY2tFY2NMZW4iLCJyYXdDb2Rld29yZHMiLCJudW1TaG9ydEJsb2NrcyIsInNob3J0QmxvY2tMZW4iLCJibG9ja3MiLCJyc0RpdiIsImsiLCJkYXQiLCJlY2MiLCJjb25jYXQiLCJfbG9vcDIiLCJfaTkiLCJibG9jayIsImxlbiIsInJpZ2h0IiwidmVydCIsIm1hc2tQYXR0ZXJuIiwiTUFTS19QQVRURVJOUyIsInJ1bkNvbG9yIiwicnVuWCIsInJ1bkhpc3RvcnkiLCJQRU5BTFRZIiwiTjEiLCJmaW5kZXJQZW5hbHR5QWRkSGlzdG9yeSIsImZpbmRlclBlbmFsdHlDb3VudFBhdHRlcm5zIiwiTjMiLCJmaW5kZXJQZW5hbHR5VGVybWluYXRlQW5kQ291bnQiLCJydW5ZIiwiTjIiLCJkYXJrIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsInJlZHVjZSIsInN1bSIsInRvdGFsIiwiY2VpbCIsIk40Iiwic3RlcCIsInBvcyIsInNwbGljZSIsInZhbGlkU2NvcmUiLCJzY29yZSIsInJ1bkxlbmd0aCIsInBvcCIsInVuc2hpZnQiLCJ2YWwiLCJjb25kIiwiRXJyb3IiLCJRclNlZ21lbnQiLCJiaXREYXRhIiwiTlVNRVJJQ19SRUdFWCIsIkFMUEhBTlVNRVJJQ19SRUdFWCIsIkFMUEhBTlVNRVJJQ19DSEFSU0VUIiwidGVzdCIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJRck1vZGUiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwiY2NiaXRzIiwiSW5maW5pdHkiLCJkaWdpdHMiLCJ0ZW1wIiwiaW5kZXhPZiIsImV4cG9ydHMiLCJsZXZlbCIsIkxFVkVMUyIsIl9FY2MiLCJMT1ciLCJNRURJVU0iLCJRVUFSVElMRSIsIkhJR0giLCJudW1CaXRzQ2hhckNvdW50IiwibW9kZXMiLCJfUXJNb2RlIiwiTlVNRVJJQyIsIkFMUEhBTlVNRVJJQyIsIkJZVEUiLCJLQU5KSSIsIkVDSSJdLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvcXJjb2RlL3FyY29kZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUVIgQ29kZSBnZW5lcmF0b3IgbGlicmFyeVxuICpcbiAqIENvcHlyaWdodCAoYykgUHJvamVjdCBOYXl1a2kuIChNSVQgTGljZW5zZSlcbiAqIGh0dHBzOi8vd3d3Lm5heXVraS5pby9wYWdlL3FyLWNvZGUtZ2VuZXJhdG9yLWxpYnJhcnlcbiAqL1xuXG4vLyDms6jmhI/ntKLlvJUw55So5LqO5aGr5YWF77yM5bm26K6+572u5Li65LiA5Liq6Z2e5rOV5YC8XG5jb25zdCBFQ0NfQ09ERVdPUkRTX1BFUl9CTE9DSyA9IFtcbiAgW1xuICAgIC0xLCA3LCAxMCwgMTUsIDIwLCAyNiwgMTgsIDIwLCAyNCwgMzAsIDE4LCAyMCwgMjQsIDI2LCAzMCwgMjIsIDI0LCAyOCwgMzAsIDI4LCAyOCwgMjgsIDI4LCAzMCxcbiAgICAzMCwgMjYsIDI4LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsXG4gIF0sIC8vIExvd1xuICBbXG4gICAgLTEsIDEwLCAxNiwgMjYsIDE4LCAyNCwgMTYsIDE4LCAyMiwgMjIsIDI2LCAzMCwgMjIsIDIyLCAyNCwgMjQsIDI4LCAyOCwgMjYsIDI2LCAyNiwgMjYsIDI4LCAyOCxcbiAgICAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsXG4gIF0sIC8vIE1lZGl1bVxuICBbXG4gICAgLTEsIDEzLCAyMiwgMTgsIDI2LCAxOCwgMjQsIDE4LCAyMiwgMjAsIDI0LCAyOCwgMjYsIDI0LCAyMCwgMzAsIDI0LCAyOCwgMjgsIDI2LCAzMCwgMjgsIDMwLCAzMCxcbiAgICAzMCwgMzAsIDI4LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsXG4gIF0sIC8vIFF1YXJ0aWxlXG4gIFtcbiAgICAtMSwgMTcsIDI4LCAyMiwgMTYsIDIyLCAyOCwgMjYsIDI2LCAyNCwgMjgsIDI0LCAyOCwgMjIsIDI0LCAyNCwgMzAsIDI4LCAyOCwgMjYsIDI4LCAzMCwgMjQsIDMwLFxuICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCxcbiAgXSwgLy8gSGlnaFxuXTtcbmNvbnN0IE5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLUyA9IFtcbiAgW1xuICAgIC0xLCAxLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCA0LCA0LCA0LCA0LCA0LCA2LCA2LCA2LCA2LCA3LCA4LCA4LCA5LCA5LCAxMCwgMTIsIDEyLCAxMiwgMTMsIDE0LFxuICAgIDE1LCAxNiwgMTcsIDE4LCAxOSwgMTksIDIwLCAyMSwgMjIsIDI0LCAyNSxcbiAgXSxcbiAgW1xuICAgIC0xLCAxLCAxLCAxLCAyLCAyLCA0LCA0LCA0LCA1LCA1LCA1LCA4LCA5LCA5LCAxMCwgMTAsIDExLCAxMywgMTQsIDE2LCAxNywgMTcsIDE4LCAyMCwgMjEsIDIzLFxuICAgIDI1LCAyNiwgMjgsIDI5LCAzMSwgMzMsIDM1LCAzNywgMzgsIDQwLCA0MywgNDUsIDQ3LCA0OSxcbiAgXSxcbiAgW1xuICAgIC0xLCAxLCAxLCAyLCAyLCA0LCA0LCA2LCA2LCA4LCA4LCA4LCAxMCwgMTIsIDE2LCAxMiwgMTcsIDE2LCAxOCwgMjEsIDIwLCAyMywgMjMsIDI1LCAyNywgMjksIDM0LFxuICAgIDM0LCAzNSwgMzgsIDQwLCA0MywgNDUsIDQ4LCA1MSwgNTMsIDU2LCA1OSwgNjIsIDY1LCA2OCxcbiAgXSxcbiAgW1xuICAgIC0xLCAxLCAxLCAyLCA0LCA0LCA0LCA1LCA2LCA4LCA4LCAxMSwgMTEsIDE2LCAxNiwgMTgsIDE2LCAxOSwgMjEsIDI1LCAyNSwgMjUsIDM0LCAzMCwgMzIsIDM1LFxuICAgIDM3LCA0MCwgNDIsIDQ1LCA0OCwgNTEsIDU0LCA1NywgNjAsIDYzLCA2NiwgNzAsIDc0LCA3NywgODEsXG4gIF0sXG5dO1xuXG4vLyDov5Tlm57lnKjnu5nlrprniYjmnKznmoRRUueggeS4reWPr+S7peWtmOWCqOeahOaVsOaNruS9jeaVsO+8jOW3suaOkumZpOaJgOacieWKn+iDveaooeWdl+OAgui/meWMheaLrOS9meaVsOS9je+8jOWboOatpOWPr+iDveS4jeaYrzjnmoTlgI3mlbDjgILnu5PmnpzojIPlm7TlnKhbMjA4LCAyOTY0OF3kuYvpl7TjgILov5nlj6/ku6Xlrp7njrDkuLrkuIDkuKo0MOmhueeahOafpeaJvuihqOOAglxuZnVuY3Rpb24gZ2V0TnVtUmF3RGF0YU1vZHVsZXModmVyOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodmVyIDwgUXJDb2RlLlZFUlNJT04uTUlOIHx8IHZlciA+IFFyQ29kZS5WRVJTSU9OLk1BWCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZXJzaW9uIG51bWJlciBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxuICBsZXQgcmVzdWx0ID0gKDE2ICogdmVyICsgMTI4KSAqIHZlciArIDY0O1xuXG4gIGlmICh2ZXIgPj0gMikge1xuICAgIGNvbnN0IG51bUFsaWduID0gTWF0aC5mbG9vcih2ZXIgLyA3KSArIDI7XG5cbiAgICByZXN1bHQgLT0gKDI1ICogbnVtQWxpZ24gLSAxMCkgKiBudW1BbGlnbiAtIDU1O1xuICAgIGlmICh2ZXIgPj0gNykgcmVzdWx0IC09IDM2O1xuICB9XG4gIGFzc2VydCgyMDggPD0gcmVzdWx0ICYmIHJlc3VsdCA8PSAyOTY0OCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vLyDov5Tlm57mjIflrprniYjmnKzlj7flkoznuqDplJnnuqfliKvnmoQgUVIg56CB5YyF5ZCr55qEIDgg5L2N5pWw5o2u56CB5a2X5pWw6YeP77yI5Y2z6Z2e57qg6ZSZ56CB5a2X77yJ77yM5L2Z5L2N6KKr6IiN5byD44CC6L+Z5Liq5peg54q25oCB55qE57qv5Ye95pWw5Y+v5Lul5a6e546w5Li65LiA5LiqICg0MCo0KSDlpKflsI/nmoTmn6Xmib7ooajjgIJcbmZ1bmN0aW9uIGdldE51bURhdGFDb2Rld29yZHModmVyOiBudW1iZXIsIGVjbDogRWNjKTogbnVtYmVyIHtcbiAgcmV0dXJuIChcbiAgICBNYXRoLmZsb29yKGdldE51bVJhd0RhdGFNb2R1bGVzKHZlcikgLyA4KSAtXG4gICAgRUNDX0NPREVXT1JEU19QRVJfQkxPQ0tbZWNsLm9yZGluYWxdW3Zlcl0gKiBOVU1fRVJST1JfQ09SUkVDVElPTl9CTE9DS1NbZWNsLm9yZGluYWxdW3Zlcl1cbiAgKTtcbn1cbi8qKlxuICog55Sf5oiQ5LiA5LiqIFFSIOeggVxuICogQGRlc2NyaXB0aW9uXG4gKiDmoLnmja7nu5nlrprnmoTmlbDmja7mrrXlkoznvJbnoIHlj4LmlbDnlJ/miJAgUVIg56CB44CC6L6T5Ye65pe25Lya6Ieq5Yqo6YCJ5oup57uZ5a6a6IyD5Zu05YaF5bC95Y+v6IO95bCP55qEIFFSIOeggeeJiOacrFxuICogQHBhcmFtIHtSZWFkb25seTxRclNlZ21lbnRbXT59IHNlZ3MgLSDopoHnvJbnoIHnmoQgUVIg5pWw5o2u5q61XG4gKiBAcGFyYW0ge0VjY30gZWNsIC0g57qg6ZSZ57qn5YirXG4gKiBAcGFyYW0ge0ludFJhbmdlPDEsIDQxPn0gW21pblZlcnNpb249MV0gLSDmnIDlsI/niYjmnKzvvIjpu5jorqTkuLogMe+8iVxuICogQHBhcmFtIHtJbnRSYW5nZTwxLCA0MT59IFttYXhWZXJzaW9uPTQwXSAtIOacgOWkp+eJiOacrO+8iOm7mOiupOS4uiA0MO+8iVxuICogQHBhcmFtIHstMSB8IEludFJhbmdlPDAsIDg+fSBbbWFzaz0tMV0gLSDmjqnnoIHmqKHlvI/vvIjpu5jorqTkuLogLTHvvIzooajnpLroh6rliqjpgInmi6nvvIlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Jvb3N0RWNsPXRydWVdIC0g5Zyo5pWw5o2u5LuN54S26YCC5ZCI5b2T5YmN54mI5pys5Y+355qE5oOF5Ya15LiL5o+Q6auY57qg6ZSZ57qn5Yir77yI6buY6K6k5Li6IHRydWXvvInjgIJcbiAqIEByZXR1cm5zIHtRckNvZGV9IOi/lOWbnueUn+aIkOeahCBRUiDnoIHjgIJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVNlZ21lbnRzKFxuICBzZWdzOiBSZWFkb25seTxRclNlZ21lbnRbXT4sXG4gIGVjbDogRWNjLFxuICBtaW5WZXJzaW9uOiBJbnRSYW5nZTwxLCA0MT4gPSAxLFxuICBtYXhWZXJzaW9uOiBJbnRSYW5nZTwxLCA0MT4gPSA0MCxcbiAgbWFzazogLTEgfCBJbnRSYW5nZTwwLCA4PiA9IC0xLFxuICBib29zdEVjbDogYm9vbGVhbiA9IHRydWUsXG4pOiBRckNvZGUge1xuICBpZiAoXG4gICAgIShcbiAgICAgIFFyQ29kZS5WRVJTSU9OLk1JTiA8PSBtaW5WZXJzaW9uICYmXG4gICAgICBtaW5WZXJzaW9uIDw9IG1heFZlcnNpb24gJiZcbiAgICAgIG1heFZlcnNpb24gPD0gUXJDb2RlLlZFUlNJT04uTUFYXG4gICAgKSB8fFxuICAgIG1hc2sgPCAtMSB8fFxuICAgIG1hc2sgPiA3XG4gICkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHZhbHVlJyk7XG4gIH1cbiAgLy8g5p+l5om+6KaB5L2/55So55qE5pyA5bCP54mI5pys5Y+3XG4gIGxldCB2ZXJzaW9uOiBJbnRSYW5nZTwxLCA0MT4sXG4gICAgZGF0YVVzZWRCaXRzOiBudW1iZXIsXG4gICAgX2VjbCA9IGVjbDtcblxuICBmb3IgKHZlcnNpb24gPSBtaW5WZXJzaW9uOyA7IHZlcnNpb24rKykge1xuICAgIGNvbnN0IGRhdGFDYXBhY2l0eUJpdHMgPSBnZXROdW1EYXRhQ29kZXdvcmRzKHZlcnNpb24sIF9lY2wpICogOCwgLy8g5Y+v55So55qE5pWw5o2u5L2N5pWwXG4gICAgICB1c2VkQml0cyA9IGdldFRvdGFsQml0cyhzZWdzLCB2ZXJzaW9uKTtcblxuICAgIC8vIOaJvuWIsOWQiOmAgueahOeJiOacrOWPt1xuICAgIGlmICh1c2VkQml0cyA8PSBkYXRhQ2FwYWNpdHlCaXRzKSB7XG4gICAgICBkYXRhVXNlZEJpdHMgPSB1c2VkQml0cztcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodmVyc2lvbiA+PSBtYXhWZXJzaW9uKSB7XG4gICAgICAvLyDojIPlm7TlhoXnmoTmiYDmnInniYjmnKzpg73ml6Dms5XlrrnnurPnu5nlrprmlbDmja5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEYXRhIHRvbyBsb25nJyk7XG4gICAgfVxuICB9XG4gIC8vIOaPkOmrmOe6oOmUmee6p+WIqzsg5LuO5L2O5Yiw6auYXG4gIGlmIChib29zdEVjbCkge1xuICAgIGZvciAoY29uc3QgbmV3RWNsIG9mIFtFY2MuZ2V0KCdNRURJVU0nKSwgRWNjLmdldCgnUVVBUlRJTEUnKSwgRWNjLmdldCgnSElHSCcpXSkge1xuICAgICAgaWYgKGRhdGFVc2VkQml0cyA8PSBnZXROdW1EYXRhQ29kZXdvcmRzKHZlcnNpb24sIG5ld0VjbCkgKiA4KSBfZWNsID0gbmV3RWNsO1xuICAgIH1cbiAgfVxuICAvLyDov57mjqXmiYDmnInmrrXku6XliJvlu7rmlbDmja7kvY3lrZfnrKbkuLJcbiAgY29uc3QgYmI6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChjb25zdCBzZWcgb2Ygc2Vncykge1xuICAgIGFwcGVuZEJpdHMoc2VnLm1vZGUubW9kZUJpdHMsIDQsIGJiKTtcbiAgICBhcHBlbmRCaXRzKHNlZy5udW1DaGFycywgc2VnLm1vZGUubnVtQ2hhckNvdW50Qml0cyh2ZXJzaW9uKSwgYmIpO1xuICAgIGZvciAoY29uc3QgYiBvZiBzZWcuZ2V0RGF0YSgpKSBiYi5wdXNoKGIpO1xuICB9XG4gIGFzc2VydChiYi5sZW5ndGggPT09IGRhdGFVc2VkQml0cyk7XG4gIC8vIOa3u+WKoOe7iOatouespuW5tuWhq+WFheiHs+Wtl+iKgui+ueeVjCjlpoLmnpzpgILnlKgpXG4gIGNvbnN0IGRhdGFDYXBhY2l0eUJpdHM6IG51bWJlciA9IGdldE51bURhdGFDb2Rld29yZHModmVyc2lvbiwgX2VjbCkgKiA4O1xuXG4gIGFzc2VydChiYi5sZW5ndGggPD0gZGF0YUNhcGFjaXR5Qml0cyk7XG4gIGFwcGVuZEJpdHMoMCwgTWF0aC5taW4oNCwgZGF0YUNhcGFjaXR5Qml0cyAtIGJiLmxlbmd0aCksIGJiKTtcbiAgYXBwZW5kQml0cygwLCAoOCAtIChiYi5sZW5ndGggJSA4KSkgJSA4LCBiYik7XG4gIGFzc2VydChiYi5sZW5ndGggJSA4ID09PSAwKTtcbiAgLy8g55So5Lqk5pu/5a2X6IqC5aGr5YWF55u05Yiw6L6+5Yiw5pWw5o2u5a656YePXG4gIGZvciAobGV0IHBhZEJ5dGUgPSAweGVjOyBiYi5sZW5ndGggPCBkYXRhQ2FwYWNpdHlCaXRzOyBwYWRCeXRlIF49IDB4ZWMgXiAweDExKSB7XG4gICAgYXBwZW5kQml0cyhwYWRCeXRlLCA4LCBiYik7XG4gIH1cbiAgLy8g5Lul5aSn56uv5bqP5bCG5L2N5omT5YyF5oiQ5a2X6IqCXG4gIGNvbnN0IGRhdGFDb2Rld29yZHM6IG51bWJlcltdID0gW107XG5cbiAgd2hpbGUgKGRhdGFDb2Rld29yZHMubGVuZ3RoICogOCA8IGJiLmxlbmd0aCkgZGF0YUNvZGV3b3Jkcy5wdXNoKDApO1xuICBiYi5mb3JFYWNoKChiLCBpKSA9PiAoZGF0YUNvZGV3b3Jkc1tpID4+PiAzXSB8PSBiIDw8ICg3IC0gKGkgJiA3KSkpKTtcbiAgcmV0dXJuIG5ldyBRckNvZGUodmVyc2lvbiwgX2VjbCwgZGF0YUNvZGV3b3JkcywgbWFzayk7XG59XG5cbi8vIOi/lOWbnuihqOekuue7meWumuWtl+espuS4sueahFVURi0457yW56CB5a2X6IqC5pWw57uEXG5mdW5jdGlvbiB0b1V0ZjhCeXRlQXJyYXkoc3RyOiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBzdHIgPSBlbmNvZGVVUkkoc3RyKTtcbiAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0ci5jaGFyQXQoaSkgIT09ICclJykgcmVzdWx0LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICAgIGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpICsgMSwgaSArIDMpLCAxNikpO1xuICAgICAgaSArPSAyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyDov5Tlm57kuIDkuKrmlrDnmoTlj6/lj5jmrrXliJfooags55So5LqO6KGo56S657uZ5a6a55qEVW5pY29kZeaWh+acrOWtl+espuS4suOAgue7k+aenOWPr+iDveS9v+eUqOWQhOenjeauteaooeW8j+W5tuWIh+aNouaooeW8j+S7peS8mOWMluS9jea1geeahOmVv+W6puOAglxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VTZWdtZW50cyh0ZXh0OiBzdHJpbmcpOiBRclNlZ21lbnRbXSB7XG4gIC8vIOiHquWKqOmAieaLqeacgOmrmOaViOeahOautee8lueggVxuICBpZiAodGV4dCA9PT0gJycpIHJldHVybiBbXTtcbiAgZWxzZSBpZiAoaXNOdW1lcmljKHRleHQpKSByZXR1cm4gW21ha2VOdW1lcmljKHRleHQpXTtcbiAgZWxzZSBpZiAoaXNBbHBoYW51bWVyaWModGV4dCkpIHJldHVybiBbbWFrZUFscGhhbnVtZXJpYyh0ZXh0KV07XG4gIHJldHVybiBbbWFrZUJ5dGVzKHRvVXRmOEJ5dGVBcnJheSh0ZXh0KSldO1xufVxuXG5mdW5jdGlvbiByZWVkU29sb21vbkNvbXB1dGVEaXZpc29yKGRlZ3JlZTogbnVtYmVyKTogbnVtYmVyW10ge1xuICBpZiAoZGVncmVlIDwgMSB8fCBkZWdyZWUgPiAyNTUpIHRocm93IG5ldyBSYW5nZUVycm9yKCdEZWdyZWUgb3V0IG9mIHJhbmdlJyk7XG4gIC8vIOWkmumhueW8j+ezu+aVsOaMieS7jumrmOWIsOS9jueahOW5guasoeWtmOWCqCzkuI3ljIXmi6zlp4vnu4jkuLox55qE6aaW6aG544CCXG4gIC8vIOS+i+WmguWkmumhueW8jyB4XjMgKyAyNTV4XjIgKyA4eCArIDkzIOWtmOWCqOS4unVpbnQ45pWw57uEIFsyNTUsIDgsIDkzXeOAglxuICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWdyZWUgLSAxOyBpKyspIHJlc3VsdC5wdXNoKDApO1xuICByZXN1bHQucHVzaCgxKTsgLy8gU3RhcnQgb2ZmIHdpdGggdGhlIG1vbm9taWFsIHheMFxuXG4gIC8vIOiuoeeul+WkmumhueW8j+S5mOenryAoeCAtIHJeMCkgKiAoeCAtIHJeMSkgKiAoeCAtIHJeMikgKiAuLi4gKiAoeCAtIHJee2RlZ3JlZS0xfSnvvIxcbiAgLy8g5bm26IiN5byD5pyA6auY5qyh6aG577yI6K+l6aG55aeL57uI5Li6IDF4XmRlZ3JlZe+8ieOAglxuICAvLyDms6jmhI8gciA9IDB4MDLvvIzlroPmmK/mnInpmZDln58gR0YoMl44LzB4MTFEKSDnmoTnlJ/miJDlhYPjgIJcbiAgbGV0IHJvb3QgPSAxO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVncmVlOyBpKyspIHtcbiAgICAvLyDlsIblvZPliY3nu5PmnpzkuZjku6UgKHggLSByXmkpXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIHtcbiAgICAgIHJlc3VsdFtqXSA9IHJlZWRTb2xvbW9uTXVsdGlwbHkocmVzdWx0W2pdLCByb290KTtcbiAgICAgIGlmIChqICsgMSA8IHJlc3VsdC5sZW5ndGgpIHJlc3VsdFtqXSBePSByZXN1bHRbaiArIDFdO1xuICAgIH1cbiAgICByb290ID0gcmVlZFNvbG9tb25NdWx0aXBseShyb290LCAweDAyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyDov5Tlm57nu5nlrprmlbDmja7lkozpmaTmlbDlpJrpobnlvI/nmoTph4zlvrct5omA572X6Zeo6ZSZ6K+v57qg5q2j56CB5a2X44CCXG5mdW5jdGlvbiByZWVkU29sb21vbkNvbXB1dGVSZW1haW5kZXIoXG4gIGRhdGE6IFJlYWRvbmx5PG51bWJlcltdPixcbiAgZGl2aXNvcjogUmVhZG9ubHk8bnVtYmVyW10+LFxuKTogbnVtYmVyW10ge1xuICBjb25zdCByZXN1bHQgPSBkaXZpc29yLm1hcCgoKSA9PiAwKTtcblxuICBmb3IgKGNvbnN0IGIgb2YgZGF0YSkge1xuICAgIC8vIOWkmumhueW8j+mZpOazlVxuICAgIGNvbnN0IGZhY3RvciA9IGIgXiAocmVzdWx0LnNoaWZ0KCkgYXMgbnVtYmVyKTtcblxuICAgIHJlc3VsdC5wdXNoKDApO1xuICAgIGRpdmlzb3IuZm9yRWFjaCgoY29lZiwgaSkgPT4gKHJlc3VsdFtpXSBePSByZWVkU29sb21vbk11bHRpcGx5KGNvZWYsIGZhY3RvcikpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyDov5Tlm57kuKTkuKrnu5nlrprln5/lhYPntKDmqKFHRigyXjgvMHgxMUQp55qE5LmY56ev44CC5Y+C5pWw5ZKM57uT5p6cXG4vLyDpg73mmK/ml6DnrKblj7c45L2N5pW05pWw44CC6L+Z5Y+v5Lul5a6e546w5Li6MjU2KjI1NuS4qnVpbnQ45p2h55uu55qE5p+l5om+6KGo44CCXG5mdW5jdGlvbiByZWVkU29sb21vbk11bHRpcGx5KHg6IG51bWJlciwgeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHggPj4+IDggIT09IDAgfHwgeSA+Pj4gOCAhPT0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J5dGUgb3V0IG9mIHJhbmdlJyk7XG4gIC8vIOS/hOe9l+aWr+WGnOawkeS5mOazlVxuICBsZXQgejogbnVtYmVyID0gMDtcblxuICBmb3IgKGxldCBpID0gNzsgaSA+PSAwOyBpLS0pIHtcbiAgICB6ID0gKHogPDwgMSkgXiAoKHogPj4+IDcpICogMHgxMWQpO1xuICAgIHogXj0gKCh5ID4+PiBpKSAmIDEpICogeDtcbiAgfVxuICBhc3NlcnQoeiA+Pj4gOCA9PT0gMCk7XG4gIHJldHVybiB6O1xufVxuXG4vKlxuICog55SxIERlbnNvIFdhdmUg5Y+R5piO77yM5bm25ZyoIElTTy9JRUMgMTgwMDQg5qCH5YeG5Lit5o+P6L+w44CCXG4gKiDmraTnsbvnmoTlrp7kvovooajnpLrkuIDkuKrkuI3lj6/lj5jnmoTmmpcv5Lqu5Y2V5YWD5pa55qC8572R44CCXG4gKiDor6XnsbvpgbXlvqogUVIg56CB5qih5Z6LIDIg6KeE6IyD77yM5pSv5oyB5omA5pyJ54mI5pys77yI5bC65a+477yJ5LuOIDEg5YiwIDQw44CBNCDnp43nuqDplJnnrYnnuqfku6Xlj4ogNCDnp43lrZfnrKbnvJbnoIHmqKHlvI/jgIJcbiAqL1xuY2xhc3MgUXJDb2RlIHtcbiAgLy8gUVIgQ29kZSDnmoTmqKHlnZfvvIhmYWxzZSDooajnpLrmtYXoibLvvIx0cnVlIOihqOekuua3seiJsu+8ieOAguaehOmAoOWHveaVsOWujOaIkOWQjuS4jeWPr+abtOaUueOAgumAmui/hyBnZXRNb2R1bGUoKSDorr/pl67jgIJcbiAgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVzOiBib29sZWFuW11bXSA9IFtdO1xuICAvLyDooajnpLrkuI3lj5fmjqnmqKHlvbHlk43nmoTlip/og73mqKHlnZfjgILmnoTpgKDlh73mlbDlrozmiJDlkI7ljbPooqvkuKLlvIPjgIJcbiAgcHJpdmF0ZSByZWFkb25seSBpc0Z1bmN0aW9uOiBib29sZWFuW11bXSA9IFtdO1xuICAvKipcbiAgICog6I635Y+WIFFSIENvZGUg55qE5a695bqm5ZKM6auY5bqm77yM5Lul5qih5Z2X5Li65Y2V5L2N44CCXG4gICAqIOWuveW6puWSjOmrmOW6puiMg+WbtOS4uiAyMSDoh7MgMTc377yI5YyF5ous6L6555WM77yJ44CC5a695bqm5ZKM6auY5bqm55qE6K6h566X5YWs5byP5Li677yaYHZlcnNpb24gKiA0ICsgMTdg44CCXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuICAvKipcbiAgICog6I635Y+WIFFSIENvZGUg5omA5L2/55So55qE5o6p6Iac5qih5byP55qE57Si5byV5YC844CC5o6p6Iac5qih5byP57Si5byV5YC86IyD5Zu05Li6IDAg5YiwIDfvvIjljIXmi6zovrnnlYzvvInjgILljbPkvb8gUVIgQ29kZSDmmK/pgJrov4foh6rliqjmjqnohpzvvIhtYXNrID0gLTHvvInnlJ/miJDnmoTvvIzmnIDnu4jnmoTmjqnohpzlgLzku43nhLbmmK8gMCDliLAgNyDkuYvpl7TnmoTmnInmlYjlgLzjgIJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtYXNrOiBJbnRSYW5nZTwwLCA4PjtcbiAgLy8g5pSv5oyB55qE54mI5pysLCBRUueggeaooeWeizLmoIflh4ZcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OID0ge1xuICAgIE1JTjogMSxcbiAgICBNQVg6IDQwLFxuICB9IGFzIGNvbnN0O1xuICAvLyDmg6nnvZrliIbmlbDluLjph48sIOeUqOS6jiBnZXRQZW5hbHR5U2NvcmUoKe+8jOWcqOivhOS8sOWTquS4quaOqeeggeacgOS9s+aXtuS9v+eUqOOAglxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQRU5BTFRZID0ge1xuICAgIE4xOiAzLCAvLyDnm7jlkIzpopzoibLnmoTov57nu63mqKHlnZdcbiAgICBOMjogMywgLy8gMngyIOWdl1xuICAgIE4zOiA0MCwgLy8g5p+l5om+5Zmo57G75Ly85qih5byPXG4gICAgTjQ6IDEwLCAvLyDmmpfmqKHlnZfmr5TkvotcbiAgfSBhcyBjb25zdDtcbiAgLy8g6YCJ5oup5pyA5L2z5o6p56CBXG4gIHByaXZhdGUgc2VsZWN0TWFzayhtc2s6IC0xIHwgSW50UmFuZ2U8MCwgOD4pOiBJbnRSYW5nZTwwLCA4PiB7XG4gICAgaWYgKG1zayAhPT0gLTEpIHJldHVybiBtc2s7XG4gICAgbGV0IG1hc2s6IEludFJhbmdlPDAsIDg+ID0gMDtcbiAgICBsZXQgbWluUGVuYWx0eSA9IDEwMDAwMDAwMDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgICAgLy8g6Ieq5Yqo6YCJ5oup5pyA5L2z5o6p5qihXG4gICAgICB0aGlzLmFwcGx5TWFzayhpKTtcbiAgICAgIHRoaXMuZHJhd0Zvcm1hdEJpdHMoaSk7XG4gICAgICBjb25zdCBwZW5hbHR5ID0gdGhpcy5nZXRQZW5hbHR5U2NvcmUoKTtcblxuICAgICAgaWYgKHBlbmFsdHkgPCBtaW5QZW5hbHR5KSB7XG4gICAgICAgIG1hc2sgPSBpIGFzIEludFJhbmdlPDAsIDg+O1xuICAgICAgICBtaW5QZW5hbHR5ID0gcGVuYWx0eTtcbiAgICAgIH1cbiAgICAgIC8vIOaSpOmUgOaOqeeggVxuICAgICAgdGhpcy5hcHBseU1hc2soaSk7XG4gICAgfVxuICAgIGFzc2VydCgwIDw9IG1hc2sgJiYgbWFzayA8PSA3KTtcbiAgICByZXR1cm4gbWFzaztcbiAgfVxuICAvLyDkvb/nlKjnu5nlrprnmoTniYjmnKzlj7fjgIHplJnor6/nuqDmraPnuqfliKvjgIHmlbDmja7noIHlrZfoioLlkozmjqnohpznvJblj7fliJvlu7rkuIDkuKrmlrDnmoRRUueggeOAglxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgLy8g5q2kIFFSIENvZGUg55qE54mI5pys5Y+377yM6IyD5Zu05Li6IDEg5YiwIDQw77yI5ZCr77yJO+ivpeWAvOWGs+WumuS6huS6jOe7tOeggeeahOWwuuWvuOOAglxuICAgIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBJbnRSYW5nZTwxLCA0MT4sXG4gICAgLy8g6ZSZ6K+v57qg5q2j57qn5Yir44CCXG4gICAgcHVibGljIHJlYWRvbmx5IGVycm9yQ29ycmVjdGlvbkxldmVsOiBFY2MsXG4gICAgZGF0YUNvZGV3b3JkczogUmVhZG9ubHk8bnVtYmVyW10+LFxuICAgIG1zazogLTEgfCBJbnRSYW5nZTwwLCA4PixcbiAgKSB7XG4gICAgLy8g6aqM6K+B5p6E6YCg5Ye95pWw5Y+C5pWwXG4gICAgaWYgKHZlcnNpb24gPCBRckNvZGUuVkVSU0lPTi5NSU4gfHwgdmVyc2lvbiA+IFFyQ29kZS5WRVJTSU9OLk1BWCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlcnNpb24gdmFsdWUgb3V0IG9mIHJhbmdlJyk7XG4gICAgfVxuICAgIGlmIChtc2sgPCAtMSB8fCBtc2sgPiA3KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWFzayB2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICAvLyDliJ3lp4vljJZcbiAgICB0aGlzLnNpemUgPSB2ZXJzaW9uICogNCArIDE3O1xuICAgIC8vIOWIm+W7uuaooeWdl+aVsOe7hFxuICAgIC8vIOWIneWni+WMluS4pOS4que9keagvOS4uiBzaXplKnNpemUg5aSn5bCP55qE5biD5bCU5pWw57uE77yM5Yid5aeL5YC85Li6IGZhbHNlIOWFqOS4uua1heiJslxuICAgIGNvbnN0IHJvdyA9IEFycmF5KHRoaXMuc2l6ZSkuZmlsbChmYWxzZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSB7XG4gICAgICB0aGlzLm1vZHVsZXNbaV0gPSByb3cuc2xpY2UoKTtcbiAgICAgIHRoaXMuaXNGdW5jdGlvbltpXSA9IHJvdy5zbGljZSgpO1xuICAgIH1cbiAgICAvLyDorqHnrpfplJnor6/nuqDmraPnoIHvvIhFQ0PvvInvvIznu5jliLbmqKHlnZdcbiAgICB0aGlzLmRyYXdGdW5jdGlvblBhdHRlcm5zKCk7XG4gICAgLy8g5p6E5bu6IFFSIOeggeeahOS4u+imgea1geeoi1xuICAgIGNvbnN0IGFsbENvZGV3b3JkcyA9IHRoaXMuYWRkRWNjQW5kSW50ZXJsZWF2ZShkYXRhQ29kZXdvcmRzKTtcblxuICAgIHRoaXMuZHJhd0NvZGV3b3JkcyhhbGxDb2Rld29yZHMpO1xuICAgIC8vIOehruWumuacgOe7iOaOqeeggVxuICAgIHRoaXMubWFzayA9IHRoaXMuc2VsZWN0TWFzayhtc2spO1xuICAgIC8vIOW6lOeUqOacgOe7iOaOqeeggeW5tue7mOWItuagvOW8j+S9jVxuICAgIHRoaXMuYXBwbHlNYXNrKHRoaXMubWFzayk7XG4gICAgdGhpcy5kcmF3Rm9ybWF0Qml0cyh0aGlzLm1hc2spO1xuICAgIC8vIOaehOmAoOWujOaIkCwg5Lii5byDXG4gICAgdGhpcy5pc0Z1bmN0aW9uID0gW107XG4gIH1cblxuICAvKiAtLSDorr/pl67lmajmlrnms5UgLS0qL1xuICAvLyDov5Tlm57nu5nlrprlnZDmoIflpITmqKHlnZfvvIjlg4/ntKB4eeeahOminOiJsu+8jOa1heiJsuaXtuS4umZhbHNl77yM5rex6Imy5pe25Li6dHJ1ZSk75aaC5p6c57uZ5a6a55qE5Z2Q5qCH6LaF5Ye66L6555WM77yM5YiZ6L+U5ZueZmFsc2XvvIjmtYXoibLvvInjgIJcbiAgcHVibGljIGdldE1vZHVsZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB4ID49IDAgJiYgeCA8IHRoaXMuc2l6ZSAmJiB5ID49IDAgJiYgeSA8IHRoaXMuc2l6ZSAmJiB0aGlzLm1vZHVsZXNbeV1beF07XG4gIH1cbiAgLyogLS0g5p6E6YCg5Ye95pWw55qE56eB5pyJ6L6F5Yqp5pa55rOV77ya57uY5Yi25Yqf6IO95qih5Z2XIC0tKi9cblxuICAvLyDor7vlj5bor6Xlr7nosaHnmoTniYjmnKzlrZfmrrXvvIzlubbnu5jliLblkozmoIforrDmiYDmnInlip/og73mqKHlnZfjgIJcbiAgcHJpdmF0ZSBkcmF3RnVuY3Rpb25QYXR0ZXJucygpOiB2b2lkIHtcbiAgICAvLyDnu5jliLbmsLTlubPlkozlnoLnm7Tlrprml7blm77moYhcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2l6ZTsgaSsrKSB7XG4gICAgICBjb25zdCBmbGFnID0gaSAlIDIgPT09IDA7XG5cbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoNiwgaSwgZmxhZyk7XG4gICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKGksIDYsIGZsYWcpO1xuICAgIH1cbiAgICAvLyDnu5jliLYgMyDkuKrlrprkvY3lm77moYjvvIjpmaTkuoblj7PkuIvop5LnmoTmiYDmnInop5LokL3vvJvkvJropobnm5bkuIDkupvlrprml7bmqKHlnZfvvIlcbiAgICB0aGlzLmRyYXdGaW5kZXJQYXR0ZXJuKDMsIDMpO1xuICAgIGNvbnN0IHkgPSB0aGlzLnNpemUgLSA0O1xuXG4gICAgdGhpcy5kcmF3RmluZGVyUGF0dGVybih5LCAzKTtcbiAgICB0aGlzLmRyYXdGaW5kZXJQYXR0ZXJuKDMsIHkpO1xuICAgIC8vIOe7mOWItuWkmuS4quWvuem9kOWbvuahiFxuICAgIGNvbnN0IGFsaWduUGF0UG9zID0gdGhpcy5nZXRBbGlnbm1lbnRQYXR0ZXJuUG9zaXRpb25zKCk7XG4gICAgY29uc3QgbnVtQWxpZ24gPSBhbGlnblBhdFBvcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUFsaWduOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQWxpZ247IGorKykge1xuICAgICAgICAvLyDkuI3lnKjkuInkuKrlrprkvY3lm77moYjnmoTop5LokL3lpITnu5jliLZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEoXG4gICAgICAgICAgICAoaSA9PT0gMCAmJiBqID09PSAwKSB8fFxuICAgICAgICAgICAgKGkgPT09IDAgJiYgaiA9PT0gbnVtQWxpZ24gLSAxKSB8fFxuICAgICAgICAgICAgKGkgPT09IG51bUFsaWduIC0gMSAmJiBqID09PSAwKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5kcmF3QWxpZ25tZW50UGF0dGVybihhbGlnblBhdFBvc1tpXSwgYWxpZ25QYXRQb3Nbal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIOe7mOWItumFjee9ruaVsOaNrlxuICAgIHRoaXMuZHJhd0Zvcm1hdEJpdHMoMCk7IC8vIOS4tOaXtuaOqeeggeWAvO+8m+eojeWQjuWcqOaehOmAoOWHveaVsOS4reS8muiiq+imhuebllxuICAgIHRoaXMuZHJhd1ZlcnNpb24oKTtcbiAgfVxuXG4gIC8vIOe7mOWItuagvOW8j+S9jeeahOS4pOS4quWJr+acrO+8iOW4puacieWFtuiHquW3seeahOmUmeivr+e6oOato+egge+8iVxuICAvLyDln7rkuo7nu5nlrprnmoTmjqnnoIHlkozor6Xlr7nosaHnmoTplJnor6/nuqDmraPnuqfliKvlrZfmrrXjgIJcbiAgcHJpdmF0ZSBkcmF3Rm9ybWF0Qml0cyhtYXNrOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyDorqHnrpfplJnor6/nuqDmraPnoIHlubbmiZPljIXkvY1cbiAgICBjb25zdCBkYXRhOiBudW1iZXIgPSAodGhpcy5lcnJvckNvcnJlY3Rpb25MZXZlbC5mb3JtYXRCaXRzIDw8IDMpIHwgbWFzazsgLy8gZXJyQ29yckx2bCDmmK8gdWludDIg57G75Z6L77yMbWFzayDmmK8gdWludDMg57G75Z6LXG4gICAgbGV0IHJlbTogbnVtYmVyID0gZGF0YTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykgcmVtID0gKHJlbSA8PCAxKSBeICgocmVtID4+PiA5KSAqIDB4NTM3KTtcbiAgICBjb25zdCBiaXRzID0gKChkYXRhIDw8IDEwKSB8IHJlbSkgXiAweDU0MTI7IC8vIHVpbnQxNVxuXG4gICAgYXNzZXJ0KGJpdHMgPj4+IDE1ID09PSAwKTtcbiAgICAvLyDnu5jliLbnrKzkuIDkuKrlia/mnKxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSA1OyBpKyspIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoOCwgaSwgZ2V0Qml0KGJpdHMsIGkpKTtcbiAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKDgsIDcsIGdldEJpdChiaXRzLCA2KSk7XG4gICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg4LCA4LCBnZXRCaXQoYml0cywgNykpO1xuICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoNywgOCwgZ2V0Qml0KGJpdHMsIDgpKTtcbiAgICBmb3IgKGxldCBpID0gOTsgaSA8IDE1OyBpKyspIHtcbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoMTQgLSBpLCA4LCBnZXRCaXQoYml0cywgaSkpO1xuICAgIH1cbiAgICAvLyDnu5jliLbnrKzkuozkuKrlia/mnKxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSh0aGlzLnNpemUgLSAxIC0gaSwgOCwgZ2V0Qml0KGJpdHMsIGkpKTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDg7IGkgPCAxNTsgaSsrKSB7XG4gICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKDgsIHRoaXMuc2l6ZSAtIDE1ICsgaSwgZ2V0Qml0KGJpdHMsIGkpKTtcbiAgICB9XG4gICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg4LCB0aGlzLnNpemUgLSA4LCB0cnVlKTsgLy8gQWx3YXlzIGRhcmtcbiAgfVxuXG4gIC8vIOWmguaenDcgPD0gdmVyc2lvbiA8PSA0MO+8jOWImee7mOWItueJiOacrOS9jeeahOS4pOS4quWJr+acrO+8iOW4puacieWFtuiHquW3seeahOmUmeivr+e6oOato+egge+8ie+8jFxuICAvLyDln7rkuo7or6Xlr7nosaHnmoTniYjmnKzlrZfmrrXjgIJcbiAgcHJpdmF0ZSBkcmF3VmVyc2lvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52ZXJzaW9uIDwgNykgcmV0dXJuO1xuXG4gICAgLy8g6K6h566X6ZSZ6K+v57qg5q2j56CB5bm25omT5YyF5L2NXG4gICAgbGV0IHJlbTogbnVtYmVyID0gdGhpcy52ZXJzaW9uOyAvLyB2ZXJzaW9uIOaYryB1aW50NiDnsbvlnovvvIzojIPlm7TlnKggWzcsIDQwXVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMjsgaSsrKSByZW0gPSAocmVtIDw8IDEpIF4gKChyZW0gPj4+IDExKSAqIDB4MWYyNSk7XG4gICAgY29uc3QgYml0czogbnVtYmVyID0gKHRoaXMudmVyc2lvbiA8PCAxMikgfCByZW07IC8vIHVpbnQxOFxuXG4gICAgYXNzZXJ0KGJpdHMgPj4+IDE4ID09PSAwKTtcbiAgICAvLyDnu5jliLbkuKTkuKrlia/mnKxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE4OyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbG9yOiBib29sZWFuID0gZ2V0Qml0KGJpdHMsIGkpO1xuICAgICAgY29uc3QgYTogbnVtYmVyID0gdGhpcy5zaXplIC0gMTEgKyAoaSAlIDMpO1xuICAgICAgY29uc3QgYjogbnVtYmVyID0gTWF0aC5mbG9vcihpIC8gMyk7XG5cbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoYSwgYiwgY29sb3IpO1xuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZShiLCBhLCBjb2xvcik7XG4gICAgfVxuICB9XG4gIC8vIOe7mOWItuS4gOS4qjkqOeeahOWumuS9jeWbvuahiO+8jOWMheaLrOi+ueeVjOWIhumalOespu+8jOS4reW/g+aooeWdl+S9jeS6jih4LCB5KeOAguaooeWdl+WPr+S7pei2heWHuui+ueeVjOOAglxuICBwcml2YXRlIGRyYXdGaW5kZXJQYXR0ZXJuKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgZHkgPSAtNDsgZHkgPD0gNDsgZHkrKykge1xuICAgICAgZm9yIChsZXQgZHggPSAtNDsgZHggPD0gNDsgZHgrKykge1xuICAgICAgICBjb25zdCBkaXN0ID0gTWF0aC5tYXgoTWF0aC5hYnMoZHgpLCBNYXRoLmFicyhkeSkpLCAvLyBDaGVieXNoZXYv5peg56m36IyD5pWwXG4gICAgICAgICAgeHggPSB4ICsgZHgsXG4gICAgICAgICAgeXkgPSB5ICsgZHk7XG5cbiAgICAgICAgaWYgKDAgPD0geHggJiYgeHggPCB0aGlzLnNpemUgJiYgMCA8PSB5eSAmJiB5eSA8IHRoaXMuc2l6ZSkge1xuICAgICAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoeHgsIHl5LCBkaXN0ICE9PSAyICYmIGRpc3QgIT09IDQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIOe7mOWItuS4gOS4qjUqNeeahOWvuem9kOWbvuahiO+8jOS4reW/g+aooeWdl+S9jeS6jih4LCB5KeOAguaJgOacieaooeWdl+W/hemhu+WcqOi+ueeVjOWGheOAglxuICBwcml2YXRlIGRyYXdBbGlnbm1lbnRQYXR0ZXJuKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgZHkgPSAtMjsgZHkgPD0gMjsgZHkrKykge1xuICAgICAgZm9yIChsZXQgZHggPSAtMjsgZHggPD0gMjsgZHgrKykge1xuICAgICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKHggKyBkeCwgeSArIGR5LCBNYXRoLm1heChNYXRoLmFicyhkeCksIE1hdGguYWJzKGR5KSkgIT09IDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyDorr7nva7mqKHlnZfnmoTpopzoibLlubblsIblhbbmoIforrDkuLrlip/og73mqKHlnZfjgILku4XnlLHmnoTpgKDlh73mlbDkvb/nlKjjgILlnZDmoIflv4XpobvlnKjovrnnlYzlhoXjgIJcbiAgcHJpdmF0ZSBzZXRGdW5jdGlvbk1vZHVsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgaXNEYXJrOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5tb2R1bGVzW3ldW3hdID0gaXNEYXJrO1xuICAgIHRoaXMuaXNGdW5jdGlvblt5XVt4XSA9IHRydWU7XG4gIH1cbiAgLy8g6L+U5Zue5LiA5Liq5paw55qE5a2X6IqC5a2X56ym5Liy77yM6KGo56S65YW35pyJ6YCC5b2T6ZSZ6K+v57qg5q2j56CB5a2X55qE57uZ5a6a5pWw5o2u77yM5Z+65LqO6K+l5a+56LGh55qE54mI5pys5ZKM6ZSZ6K+v57qg5q2j57qn5Yir44CCXG4gIHByaXZhdGUgYWRkRWNjQW5kSW50ZXJsZWF2ZShkYXRhOiBSZWFkb25seTxudW1iZXJbXT4pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgdmVyID0gdGhpcy52ZXJzaW9uLFxuICAgICAgZWNsID0gdGhpcy5lcnJvckNvcnJlY3Rpb25MZXZlbDtcblxuICAgIGlmIChkYXRhLmxlbmd0aCAhPT0gZ2V0TnVtRGF0YUNvZGV3b3Jkcyh2ZXIsIGVjbCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIC8vIOiuoeeul+WPguaVsOaVsOWAvFxuICAgIGNvbnN0IG51bUJsb2NrcyA9IE5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLU1tlY2wub3JkaW5hbF1bdmVyXSxcbiAgICAgIGJsb2NrRWNjTGVuID0gRUNDX0NPREVXT1JEU19QRVJfQkxPQ0tbZWNsLm9yZGluYWxdW3Zlcl0sXG4gICAgICByYXdDb2Rld29yZHMgPSBNYXRoLmZsb29yKGdldE51bVJhd0RhdGFNb2R1bGVzKHZlcikgLyA4KSxcbiAgICAgIG51bVNob3J0QmxvY2tzID0gbnVtQmxvY2tzIC0gKHJhd0NvZGV3b3JkcyAlIG51bUJsb2NrcyksXG4gICAgICBzaG9ydEJsb2NrTGVuID0gTWF0aC5mbG9vcihyYXdDb2Rld29yZHMgLyBudW1CbG9ja3MpLFxuICAgICAgYmxvY2tzOiBudW1iZXJbXVtdID0gW10sIC8vIOWwhuaVsOaNruWIhuWJsuaIkOWdl+W5tuS4uuavj+S4quWdl+mZhOWKoEVDQ1xuICAgICAgcnNEaXYgPSByZWVkU29sb21vbkNvbXB1dGVEaXZpc29yKGJsb2NrRWNjTGVuKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBrID0gMDsgaSA8IG51bUJsb2NrczsgaSsrKSB7XG4gICAgICBjb25zdCBkYXQgPSBkYXRhLnNsaWNlKGssIGsgKyBzaG9ydEJsb2NrTGVuIC0gYmxvY2tFY2NMZW4gKyAoaSA8IG51bVNob3J0QmxvY2tzID8gMCA6IDEpKTtcbiAgICAgIGNvbnN0IGVjYyA9IHJlZWRTb2xvbW9uQ29tcHV0ZVJlbWFpbmRlcihkYXQsIHJzRGl2KTtcblxuICAgICAgayArPSBkYXQubGVuZ3RoO1xuICAgICAgaWYgKGkgPCBudW1TaG9ydEJsb2NrcykgZGF0LnB1c2goMCk7XG4gICAgICBibG9ja3MucHVzaChkYXQuY29uY2F0KGVjYykpO1xuICAgIH1cbiAgICAvLyAg5bCG5q+P5Liq5Z2X55qE5a2X6IqC5Lqk6ZSZKOiAjOS4jeaYr+i/nuaOpSnmiJDljZXkuKrluo/liJdcbiAgICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2Nrc1swXS5sZW5ndGg7IGkrKykge1xuICAgICAgYmxvY2tzLmZvckVhY2goKGJsb2NrLCBqKSA9PiB7XG4gICAgICAgIC8vIOi3s+i/h+efreWdl+S4reeahOWhq+WFheWtl+iKglxuICAgICAgICBpZiAoaSAhPT0gc2hvcnRCbG9ja0xlbiAtIGJsb2NrRWNjTGVuIHx8IGogPj0gbnVtU2hvcnRCbG9ja3MpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChibG9ja1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gcmF3Q29kZXdvcmRzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIOWwhue7meWumueahDjkvY3noIHlrZfluo/liJco5pWw5o2u5ZKM6ZSZ6K+v57qg5q2jKee7mOWItuWIsOatpFFS56CB55qE5pW05LiqXG4gIC8vIOaVsOaNruWMuuWfn+S4iuOAguWcqOiwg+eUqOatpOaWueazleS5i+WJjemcgOimgeagh+iusOWKn+iDveaooeWdl+OAglxuICBwcml2YXRlIGRyYXdDb2Rld29yZHMoZGF0YTogUmVhZG9ubHk8bnVtYmVyW10+KTogdm9pZCB7XG4gICAgaWYgKGRhdGEubGVuZ3RoICE9PSBNYXRoLmZsb29yKGdldE51bVJhd0RhdGFNb2R1bGVzKHRoaXMudmVyc2lvbikgLyA4KSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgbGV0IGkgPSAwOyAvLyDmlbDmja7nmoTkvY3ntKLlvJVcbiAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aCAqIDg7XG5cbiAgICAvLyDmiafooYznibnmrornmoTkuYvlrZflvaLmiavmj49cbiAgICBmb3IgKGxldCByaWdodCA9IHRoaXMuc2l6ZSAtIDE7IHJpZ2h0ID49IDE7IHJpZ2h0IC09IDIpIHtcbiAgICAgIC8vIOavj+WvueWIl+S4reWPs+WIl+eahOe0ouW8lVxuICAgICAgaWYgKHJpZ2h0ID09PSA2KSByaWdodCA9IDU7XG4gICAgICBmb3IgKGxldCB2ZXJ0ID0gMDsgdmVydCA8IHRoaXMuc2l6ZTsgdmVydCsrKSB7XG4gICAgICAgIC8vIOWeguebtOiuoeaVsOWZqFxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDI7IGorKykge1xuICAgICAgICAgIGNvbnN0IHggPSByaWdodCAtIGosIC8vIOWunumZheeahHjlnZDmoIdcbiAgICAgICAgICAgIHkgPSAoKHJpZ2h0ICsgMSkgJiAyKSA9PT0gMCA/IHRoaXMuc2l6ZSAtIDEgLSB2ZXJ0IDogdmVydDsgLy8g5a6e6ZmF55qEeeWdkOagh1xuXG4gICAgICAgICAgaWYgKCF0aGlzLmlzRnVuY3Rpb25beV1beF0gJiYgaSA8IGxlbikge1xuICAgICAgICAgICAgdGhpcy5tb2R1bGVzW3ldW3hdID0gZ2V0Qml0KGRhdGFbaSA+Pj4gM10sIDcgLSAoaSAmIDcpKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8g5aaC5p6c5q2kUVLnoIHmnInku7vkvZXliankvZnkvY0oMOWIsDfkvY0p77yM5a6D5Lus6KKr5p6E6YCg5Ye95pWw6LWL5YC85Li6MC9mYWxzZS/mtYXoibLvvIzkuJTmraTmlrnms5XkuI3kvJrmlLnlj5jlroPku6xcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBhc3NlcnQoaSA9PT0gbGVuKTtcbiAgfVxuICAvLyDmjqnnoIHmqKHlvI/lrprkuYlcbiAgcHJpdmF0ZSByZWFkb25seSBNQVNLX1BBVFRFUk5TOiAoKF86IG51bWJlciwgeTogbnVtYmVyKSA9PiBib29sZWFuKVtdID0gW1xuICAgICh4LCB5KSA9PiAoeCArIHkpICUgMiA9PT0gMCxcbiAgICAoXywgeSkgPT4geSAlIDIgPT09IDAsXG4gICAgKHgpID0+IHggJSAzID09PSAwLFxuICAgICh4LCB5KSA9PiAoeCArIHkpICUgMyA9PT0gMCxcbiAgICAoeCwgeSkgPT4gKE1hdGguZmxvb3IoeCAvIDMpICsgTWF0aC5mbG9vcih5IC8gMikpICUgMiA9PT0gMCxcbiAgICAoeCwgeSkgPT4gKCh4ICogeSkgJSAyKSArICgoeCAqIHkpICUgMykgPT09IDAsXG4gICAgKHgsIHkpID0+ICgoKHggKiB5KSAlIDIpICsgKCh4ICogeSkgJSAzKSkgJSAyID09PSAwLFxuICAgICh4LCB5KSA9PiAoKCh4ICsgeSkgJSAyKSArICgoeCAqIHkpICUgMykpICUgMiA9PT0gMCxcbiAgXSBhcyBjb25zdDtcbiAgLy8g5L2/55So57uZ5a6a55qE5o6p56CB5qih5byP5a+55q2kUVLnoIHkuK3nmoTnoIHlrZfmqKHlnZfov5vooYxYT1Lov5DnrpfjgILlnKjmjqnnoIHkuYvliY3lv4XpobvmoIforrDlip/og73mqKHlnZflubbnu5jliLbnoIHlrZfkvY3jgIJcbiAgcHJpdmF0ZSBhcHBseU1hc2sobWFzazogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKG1hc2sgPCAwIHx8IG1hc2sgPiA3KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWFzayB2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICBjb25zdCBtYXNrUGF0dGVybiA9IHRoaXMuTUFTS19QQVRURVJOU1ttYXNrXTtcblxuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zaXplOyB5KyspIHtcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy5zaXplOyB4KyspIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRnVuY3Rpb25beV1beF0gJiYgbWFza1BhdHRlcm4oeCwgeSkpIHtcbiAgICAgICAgICB0aGlzLm1vZHVsZXNbeV1beF0gPSAhdGhpcy5tb2R1bGVzW3ldW3hdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIOiuoeeul+W5tui/lOWbnuWfuuS6juatpCBRUiDnoIHlvZPliY3mqKHlnZfnirbmgIHnmoTmg6nnvZrliIbmlbDjgILnlKjkuo7oh6rliqjmjqnnoIHpgInmi6nnrpfms5XvvIzku6Xmib7liLDkuqfnlJ/mnIDkvY7liIbmlbDnmoTmjqnnoIHmqKHlvI/jgIJcbiAgcHJpdmF0ZSBnZXRQZW5hbHR5U2NvcmUoKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0OiBudW1iZXIgPSAwO1xuXG4gICAgLy8g6KGM5Lit5YW35pyJ55u45ZCM6aKc6Imy55qE55u46YK75qih5Z2X77yM5Lul5Y+K5p+l5om+5Zmo57G75Ly855qE5qih5byPXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNpemU7IHkrKykge1xuICAgICAgbGV0IHJ1bkNvbG9yID0gZmFsc2U7XG4gICAgICBsZXQgcnVuWCA9IDA7XG4gICAgICBjb25zdCBydW5IaXN0b3J5ID0gWzAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuXG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMuc2l6ZTsgeCsrKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZHVsZXNbeV1beF0gPT09IHJ1bkNvbG9yKSB7XG4gICAgICAgICAgcnVuWCsrO1xuICAgICAgICAgIGlmIChydW5YID09PSA1KSByZXN1bHQgKz0gUXJDb2RlLlBFTkFMVFkuTjE7XG4gICAgICAgICAgZWxzZSBpZiAocnVuWCA+IDUpIHJlc3VsdCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkocnVuWCwgcnVuSGlzdG9yeSk7XG4gICAgICAgICAgaWYgKCFydW5Db2xvcikge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuZmluZGVyUGVuYWx0eUNvdW50UGF0dGVybnMocnVuSGlzdG9yeSkgKiBRckNvZGUuUEVOQUxUWS5OMztcbiAgICAgICAgICB9XG4gICAgICAgICAgcnVuQ29sb3IgPSB0aGlzLm1vZHVsZXNbeV1beF07XG4gICAgICAgICAgcnVuWCA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSB0aGlzLmZpbmRlclBlbmFsdHlUZXJtaW5hdGVBbmRDb3VudChydW5Db2xvciwgcnVuWCwgcnVuSGlzdG9yeSkgKiBRckNvZGUuUEVOQUxUWS5OMztcbiAgICB9XG4gICAgLy8g5YiX5Lit5YW35pyJ55u45ZCM6aKc6Imy55qE55u46YK75qih5Z2X77yM5Lul5Y+K5p+l5om+5Zmo57G75Ly855qE5qih5byPXG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykge1xuICAgICAgbGV0IHJ1bkNvbG9yID0gZmFsc2U7XG4gICAgICBsZXQgcnVuWSA9IDA7XG4gICAgICBjb25zdCBydW5IaXN0b3J5ID0gWzAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuXG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuc2l6ZTsgeSsrKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZHVsZXNbeV1beF0gPT09IHJ1bkNvbG9yKSB7XG4gICAgICAgICAgcnVuWSsrO1xuICAgICAgICAgIGlmIChydW5ZID09PSA1KSByZXN1bHQgKz0gUXJDb2RlLlBFTkFMVFkuTjE7XG4gICAgICAgICAgZWxzZSBpZiAocnVuWSA+IDUpIHJlc3VsdCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkocnVuWSwgcnVuSGlzdG9yeSk7XG4gICAgICAgICAgaWYgKCFydW5Db2xvcikge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuZmluZGVyUGVuYWx0eUNvdW50UGF0dGVybnMocnVuSGlzdG9yeSkgKiBRckNvZGUuUEVOQUxUWS5OMztcbiAgICAgICAgICB9XG4gICAgICAgICAgcnVuQ29sb3IgPSB0aGlzLm1vZHVsZXNbeV1beF07XG4gICAgICAgICAgcnVuWSA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSB0aGlzLmZpbmRlclBlbmFsdHlUZXJtaW5hdGVBbmRDb3VudChydW5Db2xvciwgcnVuWSwgcnVuSGlzdG9yeSkgKiBRckNvZGUuUEVOQUxUWS5OMztcbiAgICB9XG4gICAgLy8gMioyIOWdl+eahOaooeWdl+WFt+ebuOWQjOeahOminOiJslxuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zaXplIC0gMTsgeSsrKSB7XG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMuc2l6ZSAtIDE7IHgrKykge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMubW9kdWxlc1t5XVt4XTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sb3IgPT09IHRoaXMubW9kdWxlc1t5XVt4ICsgMV0gJiZcbiAgICAgICAgICBjb2xvciA9PT0gdGhpcy5tb2R1bGVzW3kgKyAxXVt4XSAmJlxuICAgICAgICAgIGNvbG9yID09PSB0aGlzLm1vZHVsZXNbeSArIDFdW3ggKyAxXVxuICAgICAgICApIHtcbiAgICAgICAgICByZXN1bHQgKz0gUXJDb2RlLlBFTkFMVFkuTjI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8g5pqX5qih5Z2X5ZKM5Lqu5qih5Z2X55qE5bmz6KGhXG4gICAgbGV0IGRhcms6IG51bWJlciA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLm1vZHVsZXMpIHtcbiAgICAgIGRhcmsgPSByb3cucmVkdWNlKChzdW0sIGNvbG9yKSA9PiBzdW0gKyAoY29sb3IgPyAxIDogMCksIGRhcmspO1xuICAgIH1cbiAgICAvLyDms6jmhI/vvIxzaXplIOaYr+Wlh+aVsO+8jOaJgOS7pSBkYXJrL3RvdGFsICE9PSAxLzJcbiAgICBjb25zdCB0b3RhbDogbnVtYmVyID0gdGhpcy5zaXplICogdGhpcy5zaXplO1xuICAgIC8vIOiuoeeul+acgOWwj+eahOaVtOaVsCBrID49IDDvvIzkvb/lvpcgKDQ1LTVrKSUgPD0gZGFyay90b3RhbCA8PSAoNTUrNWspJVxuICAgIGNvbnN0IGs6IG51bWJlciA9IE1hdGguY2VpbChNYXRoLmFicyhkYXJrICogMjAgLSB0b3RhbCAqIDEwKSAvIHRvdGFsKSAtIDE7XG5cbiAgICBhc3NlcnQoMCA8PSBrICYmIGsgPD0gOSk7XG4gICAgcmVzdWx0ICs9IGsgKiBRckNvZGUuUEVOQUxUWS5ONDtcbiAgICBhc3NlcnQoMCA8PSByZXN1bHQgJiYgcmVzdWx0IDw9IDI1Njg4ODgpOyAvLyDln7rkuo7pu5jorqTlgLznmoTpnZ7ntKflr4bkuIrpmZBcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIOi/lOWbnuS4gOS4quWNh+W6j+eahOS9jee9ruWIl+ihqO+8jOihqOekuuatpOeJiOacrOWPt+eahOWvuem9kOaooeW8j+S9jee9ruOAguavj+S4quS9jee9ruWcqCBbMCwxNzcpIOiMg+WbtOWGhe+8jOW5tueUqOS6juihjOWSjOWIl+i9tOOAgui/meWPr+S7peWunueOsOS4uiA0MCDkuKrlj6/lj5jplb/luqbmlbTmlbDliJfooajnmoTmn6Xmib7ooajjgIJcbiAgcHJpdmF0ZSBnZXRBbGlnbm1lbnRQYXR0ZXJuUG9zaXRpb25zKCk6IG51bWJlcltdIHtcbiAgICBpZiAodGhpcy52ZXJzaW9uID09PSAxKSByZXR1cm4gW107XG4gICAgY29uc3QgbnVtQWxpZ24gPSBNYXRoLmZsb29yKHRoaXMudmVyc2lvbiAvIDcpICsgMixcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKCh0aGlzLnZlcnNpb24gKiA4ICsgbnVtQWxpZ24gKiAzICsgNSkgLyAobnVtQWxpZ24gKiA0IC0gNCkpICogMixcbiAgICAgIHJlc3VsdCA9IFs2XTtcblxuICAgIGZvciAobGV0IHBvcyA9IHRoaXMuc2l6ZSAtIDc7IHJlc3VsdC5sZW5ndGggPCBudW1BbGlnbjsgcG9zIC09IHN0ZXApIHtcbiAgICAgIHJlc3VsdC5zcGxpY2UoMSwgMCwgcG9zKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvLyDlj6rog73lnKjmt7vliqDkuobkuq7oibLov5DooYzlkI7nq4vljbPosIPnlKjvvIzlubbov5Tlm54gMOOAgTEg5oiWIDLjgILov5nmmK8gZ2V0UGVuYWx0eVNjb3JlKCkg55qE6L6F5Yqp5Ye95pWw44CCXG4gIHByaXZhdGUgZmluZGVyUGVuYWx0eUNvdW50UGF0dGVybnMocnVuSGlzdG9yeTogUmVhZG9ubHk8bnVtYmVyW10+KTogbnVtYmVyIHtcbiAgICBjb25zdCBuID0gcnVuSGlzdG9yeVsxXTtcblxuICAgIGFzc2VydChuIDw9IHRoaXMuc2l6ZSAqIDMpO1xuICAgIC8vIOaPkOWJjemqjOivgSBuIOeahOacieaViOaAp1xuICAgIGlmIChuIDw9IDApIHJldHVybiAwO1xuICAgIGNvbnN0IHZhbGlkU2NvcmUgPVxuICAgICAgcnVuSGlzdG9yeVsyXSA9PT0gbiAmJiBydW5IaXN0b3J5WzNdID09PSBuICogMyAmJiBydW5IaXN0b3J5WzRdID09PSBuICYmIHJ1bkhpc3RvcnlbNV0gPT09IG47XG5cbiAgICBpZiAoIXZhbGlkU2NvcmUpIHJldHVybiAwO1xuICAgIC8vIOajgOafpeS4pOerr+eahOW7tuS8uOaooeW8j1xuICAgIGxldCBzY29yZSA9IDA7XG5cbiAgICBpZiAocnVuSGlzdG9yeVswXSA+PSBuICogNCAmJiBydW5IaXN0b3J5WzZdID49IG4pIHNjb3JlKys7XG4gICAgaWYgKHJ1bkhpc3RvcnlbNl0gPj0gbiAqIDQgJiYgcnVuSGlzdG9yeVswXSA+PSBuKSBzY29yZSsrO1xuICAgIHJldHVybiBzY29yZTtcbiAgfVxuICAvLyDlv4XpobvlnKjooYzvvIjmiJbliJfvvInnmoTmqKHlnZfnu5PmnZ/ml7bosIPnlKjjgILov5nmmK8gZ2V0UGVuYWx0eVNjb3JlKCkg55qE6L6F5Yqp5Ye95pWw44CCXG4gIHByaXZhdGUgZmluZGVyUGVuYWx0eVRlcm1pbmF0ZUFuZENvdW50KFxuICAgIHJ1bkNvbG9yOiBib29sZWFuLFxuICAgIHJ1bkxlbmd0aDogbnVtYmVyLFxuICAgIHJ1bkhpc3Rvcnk6IG51bWJlcltdLFxuICApOiBudW1iZXIge1xuICAgIGlmIChydW5Db2xvcikge1xuICAgICAgLy8g57uI5q2i5pqX6Imy6L+Q6KGMXG4gICAgICB0aGlzLmZpbmRlclBlbmFsdHlBZGRIaXN0b3J5KHJ1bkxlbmd0aCwgcnVuSGlzdG9yeSk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHJ1bkxlbmd0aCA9IDA7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHJ1bkxlbmd0aCArPSB0aGlzLnNpemU7IC8vIOa3u+WKoOS6ruiJsui+ueahhuWIsOacgOe7iOi/kOihjFxuICAgIHRoaXMuZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkocnVuTGVuZ3RoLCBydW5IaXN0b3J5KTtcbiAgICByZXR1cm4gdGhpcy5maW5kZXJQZW5hbHR5Q291bnRQYXR0ZXJucyhydW5IaXN0b3J5KTtcbiAgfVxuICAvLyDlsIbnu5nlrprlgLzmjqjliLDliY3pnaLlubbkuKLlvIPmnIDlkI7kuIDkuKrlgLzjgILov5nmmK8gZ2V0UGVuYWx0eVNjb3JlKCkg55qE6L6F5Yqp5Ye95pWw44CCXG4gIHByaXZhdGUgZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkocnVuTGVuZ3RoOiBudW1iZXIsIHJ1bkhpc3Rvcnk6IG51bWJlcltdKTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgaWYgKHJ1bkhpc3RvcnlbMF0gPT09IDApIHJ1bkxlbmd0aCArPSB0aGlzLnNpemU7IC8vIOa3u+WKoOS6ruiJsui+ueahhuWIsOWIneWni+i/kOihjFxuICAgIHJ1bkhpc3RvcnkucG9wKCk7XG4gICAgcnVuSGlzdG9yeS51bnNoaWZ0KHJ1bkxlbmd0aCk7XG4gIH1cbn1cbi8vIOWwhue7meWumuaVsOWAvOeahOS9juS9jeavlOeJueS9jei/veWKoOWIsOe7meWumue8k+WGsuWMuuOAguimgeaxgiAwIDw9IGxlbiA8PSAzMSDkuJQgMCA8PSB2YWwgPCAyXmxlbuOAglxuZnVuY3Rpb24gYXBwZW5kQml0cyh2YWw6IG51bWJlciwgbGVuOiBudW1iZXIsIGJiOiBudW1iZXJbXSk6IHZvaWQge1xuICBpZiAobGVuIDwgMCB8fCBsZW4gPiAzMSB8fCB2YWwgPj4+IGxlbiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdWYWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxuICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAvLyDpgJDkvY3ov73liqBcbiAgICBiYi5wdXNoKCh2YWwgPj4+IGkpICYgMSk7XG4gIH1cbn1cbi8vIOi/lOWbnnjnmoTnrKxp5L2N5piv5ZCm5Li6MeOAglxuZnVuY3Rpb24gZ2V0Qml0KHg6IG51bWJlciwgaTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoKHggPj4+IGkpICYgMSkgIT09IDA7XG59XG4vLyDlpoLmnpznu5nlrprmnaHku7bkuLpmYWxzZeWImeaKm+WHuuW8guW4uOOAglxuZnVuY3Rpb24gYXNzZXJ0KGNvbmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgaWYgKCFjb25kKSB0aHJvdyBuZXcgRXJyb3IoJ0Fzc2VydGlvbiBlcnJvcicpO1xufVxuLypcbiAqIFFS56CB56ym5Y+35Lit55qEIOWtl+espi/kuozov5vliLYg5pWw5o2u5q61XG4gKi9cbmNsYXNzIFFyU2VnbWVudCB7XG4gIC8vIOS9v+eUqOe7meWumueahOWxnuaAp+WSjOaVsOaNruWIm+W7uuS4gOS4quaWsOeahFFS56CB5q6144CC5a2X56ym6K6h5pWw77yIbnVtQ2hhcnPvvInlv4XpobvkuI7mqKHlvI/lkozkvY3nvJPlhrLljLrplb/luqbkuIDoh7TvvIzkvYbkuI3ov5vooYzmo4Dmn6XjgILnu5nlrprnmoTkvY3nvJPlhrLljLrooqvlhYvpmoblubblrZjlgqjjgIJcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIC8vIOatpOauteeahOaooeW8j+aMh+ekuuespuOAglxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlOiBRck1vZGUsXG4gICAgLy8g5q2k5q615pyq57yW56CB5pWw5o2u55qE6ZW/5bqm44CC5a+55LqO5pWw5a2XL+Wtl+avjeaVsOWtly/msYnlrZfmqKHlvI/vvIzku6XlrZfnrKbkuLrljZXkvY3mtYvph4/vvJvlr7nkuo7lrZfoioLmqKHlvI/vvIzku6XlrZfoioLkuLrljZXkvY3mtYvph4/vvJvlr7nkuo5FQ0nmqKHlvI/vvIzkuLowOyDlp4vnu4jkuLrpm7bmiJbmraPmlbDjgILkuI3mmK/mlbDmja7nmoTkvY3plb/luqbjgIJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbnVtQ2hhcnM6IG51bWJlcixcbiAgICAvLyDmraTmrrXnmoTmlbDmja7kvY3jgILpgJrov4dnZXREYXRhKCnorr/pl67jgIJcbiAgICByZWFkb25seSBiaXREYXRhOiBudW1iZXJbXSxcbiAgKSB7XG4gICAgaWYgKG51bUNoYXJzIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQnKTtcbiAgICB0aGlzLmJpdERhdGEgPSBiaXREYXRhLnNsaWNlKCk7IC8vIOi/m+ihjOmYsuW+oeaAp+aLt+i0nVxuICB9XG4gIC8vIOi/lOWbnuatpOauteaVsOaNruS9jeeahOaWsOWJr+acrOOAglxuICBwdWJsaWMgZ2V0RGF0YSgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYml0RGF0YS5zbGljZSgpOyAvLyDov5vooYzpmLLlvqHmgKfmi7fotJ1cbiAgfVxufVxuY29uc3QgTlVNRVJJQ19SRUdFWDogUmVnRXhwID0gL15bMC05XSokLztcbmNvbnN0IEFMUEhBTlVNRVJJQ19SRUdFWDogUmVnRXhwID0gL15bQS1aMC05ICQlKisuLzotXSokLztcbi8vIOWtl+avjeaVsOWtl+aooeW8j+S4reaJgOacieWQiOazleWtl+espueahOmbhuWQiO+8jOWFtuS4reavj+S4quWtl+espuWAvOaYoOWwhOWIsOWtl+espuS4suS4reeahOe0ouW8leOAglxuY29uc3QgQUxQSEFOVU1FUklDX0NIQVJTRVQ6IHN0cmluZyA9ICcwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogJCUqKy0uLzonO1xuXG4vLyDmmK/lkKblj6/ku6XnlKjmlbDlrZfmqKHlvI/nvJbnoIHjgILlvZPkuJTku4XlvZPmr4/kuKrlrZfnrKbpg73lnKgw5YiwOeeahOiMg+WbtOWGheaXtu+8jOWtl+espuS4suWPr+e8lueggeOAglxuZnVuY3Rpb24gaXNOdW1lcmljKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gTlVNRVJJQ19SRUdFWC50ZXN0KHRleHQpO1xufVxuLyoqXG4gKiDmmK/lkKblj6/ku6XnlKjlrZfmr43mlbDlrZfmqKHlvI/nvJbnoIFcbiAqIEBkZXNjcmlwdGlvbiAw5YiwOeOAgUHliLBa5LuF5aSn5YaZ77yJ44CB56m65qC844CB576O5YWD56ym5Y+344CB55m+5YiG5Y+344CB5pif5Y+344CB5Yqg5Y+344CB6L+e5a2X56ym44CB5Y+l54K544CB5pac5p2g44CB5YaS5Y+344CCXG4gKiBAcGFyYW0ge1N0cmluZ30gdGV4dCDnu5nlrprlrZfnrKbkuLJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBib29sZWFuXG4gKi9cbmZ1bmN0aW9uIGlzQWxwaGFudW1lcmljKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQUxQSEFOVU1FUklDX1JFR0VYLnRlc3QodGV4dCk7XG59XG4vLyDov5Tlm57kuIDkuKrooajnpLrku6XlrZfoioLmqKHlvI/nvJbnoIHnmoTnu5nlrprkuozov5vliLbmlbDmja7nmoTmrrXjgILmiYDmnInovpPlhaXlrZfoioLmlbDnu4Tpg73mmK/lj6/mjqXlj5fnmoTjgILku7vkvZXmlofmnKzlrZfnrKbkuLLpg73lj6/ku6XovazmjaLkuLpVVEYtOOWtl+iKguW5tue8lueggeS4uuWtl+iKguaooeW8j+auteOAglxuZnVuY3Rpb24gbWFrZUJ5dGVzKGRhdGE6IFJlYWRvbmx5PG51bWJlcltdPik6IFFyU2VnbWVudCB7XG4gIGNvbnN0IGJiOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYiBvZiBkYXRhKSBhcHBlbmRCaXRzKGIsIDgsIGJiKTtcbiAgcmV0dXJuIG5ldyBRclNlZ21lbnQoUXJNb2RlLmdldCgnQllURScpLCBkYXRhLmxlbmd0aCwgYmIpO1xufVxuLy8g6K6h566X5bm26L+U5Zue5Zyo57uZ5a6a54mI5pys5LiL57yW56CB57uZ5a6a5q615omA6ZyA55qE5L2N5pWw44CC5aaC5p6c5p+Q5Liq5q6155qE5a2X56ym5pWw5aSq5aSa5Lul6Iez5LqO5peg5rOV6YCC5bqU5YW26ZW/5bqm5a2X5q6177yM5YiZ57uT5p6c5Li65peg56m35aSn44CCXG5mdW5jdGlvbiBnZXRUb3RhbEJpdHMoc2VnczogUmVhZG9ubHk8UXJTZWdtZW50W10+LCB2ZXJzaW9uOiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgcmVzdWx0OiBudW1iZXIgPSAwO1xuXG4gIGZvciAoY29uc3Qgc2VnIG9mIHNlZ3MpIHtcbiAgICBjb25zdCBjY2JpdHM6IG51bWJlciA9IHNlZy5tb2RlLm51bUNoYXJDb3VudEJpdHModmVyc2lvbik7XG5cbiAgICBpZiAoc2VnLm51bUNoYXJzID49IDEgPDwgY2NiaXRzKSByZXR1cm4gSW5maW5pdHk7IC8vIOauteeahOmVv+W6puS4jemAguWQiOWtl+auteeahOS9jeWuveW6plxuICAgIHJlc3VsdCArPSA0ICsgY2NiaXRzICsgc2VnLmJpdERhdGEubGVuZ3RoO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4vLyDov5Tlm57kuIDkuKrooajnpLrku6XmlbDlrZfmqKHlvI/nvJbnoIHnmoTnu5nlrprljYHov5vliLbmlbDlrZflrZfnrKbkuLLnmoTmrrXjgIJcbmZ1bmN0aW9uIG1ha2VOdW1lcmljKGRpZ2l0czogc3RyaW5nKTogUXJTZWdtZW50IHtcbiAgaWYgKCFpc051bWVyaWMoZGlnaXRzKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdTdHJpbmcgY29udGFpbnMgbm9uLW51bWVyaWMgY2hhcmFjdGVycycpO1xuICB9XG4gIGNvbnN0IGJiOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgKSB7XG4gICAgLy8g5q+P5qyh6L+t5Luj5pyA5aSa5raI6ICXM+S4quaVsOWtl1xuICAgIGNvbnN0IG46IG51bWJlciA9IE1hdGgubWluKGRpZ2l0cy5sZW5ndGggLSBpLCAzKTtcblxuICAgIGFwcGVuZEJpdHMocGFyc2VJbnQoZGlnaXRzLnN1YnN0cmluZyhpLCBpICsgbiksIDEwKSwgbiAqIDMgKyAxLCBiYik7XG4gICAgaSArPSBuO1xuICB9XG4gIHJldHVybiBuZXcgUXJTZWdtZW50KFFyTW9kZS5nZXQoJ05VTUVSSUMnKSwgZGlnaXRzLmxlbmd0aCwgYmIpO1xufVxuLy8g6L+U5Zue5LiA5Liq6KGo56S65Lul5a2X5q+N5pWw5a2X5qih5byP57yW56CB55qE57uZ5a6a5paH5pys5a2X56ym5Liy55qE5q6144CC5YWB6K6455qE5a2X56ym5piv77yaMOWIsDnjgIFB5YiwWu+8iOS7heWkp+WGme+8ieOAgeepuuagvOOAgee+juWFg+espuWPt+OAgeeZvuWIhuWPt+OAgeaYn+WPt+OAgeWKoOWPt+OAgei/nuWtl+espuOAgeWPpeeCueOAgeaWnOadoOOAgeWGkuWPt+OAglxuZnVuY3Rpb24gbWFrZUFscGhhbnVtZXJpYyh0ZXh0OiBzdHJpbmcpOiBRclNlZ21lbnQge1xuICBpZiAoIWlzQWxwaGFudW1lcmljKHRleHQpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1N0cmluZyBjb250YWlucyB1bmVuY29kYWJsZSBjaGFyYWN0ZXJzIGluIGFscGhhbnVtZXJpYyBtb2RlJyk7XG4gIH1cbiAgY29uc3QgYmI6IG51bWJlcltdID0gW107XG4gIGxldCBpOiBudW1iZXI7XG5cbiAgZm9yIChpID0gMDsgaSArIDIgPD0gdGV4dC5sZW5ndGg7IGkgKz0gMikge1xuICAgIC8vIOWkhOeQhuavj+e7hDLkuKrlrZfnrKZcbiAgICBsZXQgdGVtcCA9IEFMUEhBTlVNRVJJQ19DSEFSU0VULmluZGV4T2YodGV4dC5jaGFyQXQoaSkpICogNDU7XG5cbiAgICB0ZW1wICs9IEFMUEhBTlVNRVJJQ19DSEFSU0VULmluZGV4T2YodGV4dC5jaGFyQXQoaSArIDEpKTtcbiAgICBhcHBlbmRCaXRzKHRlbXAsIDExLCBiYik7XG4gIH1cbiAgLy8g5Ymp5LiLMeS4quWtl+esplxuICBpZiAoaSA8IHRleHQubGVuZ3RoKSB7XG4gICAgYXBwZW5kQml0cyhBTFBIQU5VTUVSSUNfQ0hBUlNFVC5pbmRleE9mKHRleHQuY2hhckF0KGkpKSwgNiwgYmIpO1xuICB9XG4gIHJldHVybiBuZXcgUXJTZWdtZW50KFFyTW9kZS5nZXQoJ0FMUEhBTlVNRVJJQycpLCB0ZXh0Lmxlbmd0aCwgYmIpO1xufVxuLypcbiAqIFFS56CB56ym5Y+35Lit55qE6ZSZ6K+v57qg5q2j57qn5YirXG4gKi9cbmV4cG9ydCBjbGFzcyBFY2Mge1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIC8vIOWcqDDliLAz6IyD5Zu05YaF77yI5peg56ym5Y+3MuS9jeaVtOaVsO+8ieOAglxuICAgIHB1YmxpYyByZWFkb25seSBvcmRpbmFsOiBJbnRSYW5nZTwwLCA0PixcbiAgICAvLyAo5YyF56eB5pyJKSDlnKgw5YiwM+iMg+WbtOWGhe+8iOaXoOespuWPtzLkvY3mlbTmlbDvvInjgIJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybWF0Qml0czogSW50UmFuZ2U8MCwgND4sXG4gICkge31cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTEVWRUxTID0ge1xuICAgIExPVzogbmV3IEVjYygwLCAxKSwgLy8gNyUg6ZSZ6K+v5a655b+N546HXG4gICAgTUVESVVNOiBuZXcgRWNjKDEsIDApLCAvLyAxNSUg6ZSZ6K+v5a655b+N546HXG4gICAgUVVBUlRJTEU6IG5ldyBFY2MoMiwgMyksIC8vIDI1JSDplJnor6/lrrnlv43njodcbiAgICBISUdIOiBuZXcgRWNjKDMsIDIpLCAvLyAzMCUg6ZSZ6K+v5a655b+N546HXG4gIH0gYXMgY29uc3Q7XG4gIC8vIOiOt+WPluaMh+Wumue6p+WIq+eahCBFQ0NcbiAgcHVibGljIHN0YXRpYyBnZXQobGV2ZWw6IGtleW9mIHR5cGVvZiBFY2MuTEVWRUxTKTogRWNjIHtcbiAgICByZXR1cm4gRWNjLkxFVkVMU1tsZXZlbF07XG4gIH1cbn1cbi8qXG4gKiDmj4/ov7DlpoLkvZXop6Pph4rmrrXnmoTmlbDmja7kvY3jgILkuI3lj6/lj5jjgIJcbiAqL1xuY2xhc3MgUXJNb2RlIHtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAvLyDmqKHlvI/mjIfnpLrkvY3vvIzmmK/kuIDkuKp1aW50NOWAvO+8iOiMg+WbtDDliLAxNe+8ieOAglxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlQml0czogSW50UmFuZ2U8MCwgMTY+LFxuICAgIC8vIOS4ieS4quS4jeWQjOeJiOacrOiMg+WbtOeahOWtl+espuiuoeaVsOS9jeaVsOOAglxuICAgIHByaXZhdGUgcmVhZG9ubHkgbnVtQml0c0NoYXJDb3VudDogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICApIHt9XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IG1vZGVzID0ge1xuICAgIE5VTUVSSUM6IG5ldyBRck1vZGUoMHgxLCBbMTAsIDEyLCAxNF0pLFxuICAgIEFMUEhBTlVNRVJJQzogbmV3IFFyTW9kZSgweDIsIFs5LCAxMSwgMTNdKSxcbiAgICBCWVRFOiBuZXcgUXJNb2RlKDB4NCwgWzgsIDE2LCAxNl0pLFxuICAgIEtBTkpJOiBuZXcgUXJNb2RlKDB4OCwgWzgsIDEwLCAxMl0pLFxuICAgIEVDSTogbmV3IFFyTW9kZSgweDcsIFswLCAwLCAwXSksXG4gIH0gYXMgY29uc3Q7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0KG1vZGU6IGtleW9mIHR5cGVvZiBRck1vZGUubW9kZXMpIHtcbiAgICByZXR1cm4gUXJNb2RlLm1vZGVzW21vZGVdO1xuICB9XG4gIC8vIOiMg+WbtOiuoeeul1xuICBwdWJsaWMgbnVtQ2hhckNvdW50Qml0cyh2ZXJzaW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm51bUJpdHNDaGFyQ291bnRbTWF0aC5mbG9vcigodmVyc2lvbiArIDcpIC8gMTcpXTtcbiAgfVxufVxuXG50eXBlIEVudW1lcmF0ZTxOIGV4dGVuZHMgbnVtYmVyLCBBY2MgZXh0ZW5kcyBudW1iZXJbXSA9IFtdPiA9IEFjY1snbGVuZ3RoJ10gZXh0ZW5kcyBOXG4gID8gQWNjW251bWJlcl1cbiAgOiBFbnVtZXJhdGU8TiwgWy4uLkFjYywgQWNjWydsZW5ndGgnXV0+O1xuXG5leHBvcnQgdHlwZSBJbnRSYW5nZTxGIGV4dGVuZHMgbnVtYmVyLCBUIGV4dGVuZHMgbnVtYmVyPiA9IEV4Y2x1ZGU8RW51bWVyYXRlPFQ+LCBFbnVtZXJhdGU8Rj4+O1xuIl0sIm1hcHBpbmdzIjoiZ2lGQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUVBO0FBQ0EsR0FBTSxDQUFBQSx1QkFBdUIsQ0FBRyxDQUM5QixDQUNFLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzdGLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQ25FLENBQUU7QUFDSCxDQUNFLENBQUMsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzlGLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQ25FLENBQUU7QUFDSCxDQUNFLENBQUMsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzlGLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQ25FLENBQUU7QUFDSCxDQUNFLENBQUMsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzlGLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQ2pFO0FBQUEsQ0FDSixDQUNELEdBQU0sQ0FBQUMsMkJBQTJCLENBQUcsQ0FDbEMsQ0FDRSxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUMvRixFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUMzQyxDQUNELENBQ0UsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDNUYsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDdkQsQ0FDRCxDQUNFLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQy9GLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQ3ZELENBQ0QsQ0FDRSxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzVGLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUMzRCxDQUNGLENBRUQ7QUFDQSxRQUFTLENBQUFDLG9CQUFvQkEsQ0FBQ0MsR0FBVyxDQUFVLENBQ2pELEdBQUlBLEdBQUcs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LENBQUVBLEdBQUMsRUFBRSxDQUFFLElBQUksQ0FBQzJELGlCQUFpQixDQUFDLENBQUMsQ0FBRTNELEdBQUMsQ0FBRW9FLE1BQU0sQ0FBQ0QsSUFBSSxDQUFFbkUsR0FBQyxDQUFDLENBQUMsQ0FDMUUsSUFBSSxDQUFDMkQsaUJBQWlCLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRVMsTUFBTSxDQUFDRCxJQUFJLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDN0MsSUFBSSxDQUFDUixpQkFBaUIsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFFUyxNQUFNLENBQUNELElBQUksQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUM3QyxJQUFJLENBQUNSLGlCQUFpQixDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUVTLE1BQU0sQ0FBQ0QsSUFBSSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQzdDLElBQUssR0FBSSxDQUFBbkUsR0FBQyxDQUFHLENBQUMsQ0FBRUEsR0FBQyxDQUFHLEVBQUUsQ0FBRUEsR0FBQyxFQUFFLENBQUUsQ0FDM0IsSUFBSSxDQUFDMkQsaUJBQWlCLENBQUMsRUFBRSxDQUFHM0QsR0FBQyxDQUFFLENBQUMsQ0FBRW9FLE1BQU0sQ0FBQ0QsSUFBSSxDQUFFbkUsR0FBQyxDQUFDLENBQUMsQ0FDcEQsQ0FDQTtBQUNBLElBQUssR0FBSSxDQUFBQSxHQUFDLENBQUcsQ0FBQyxDQUFFQSxHQUFDLENBQUcsQ0FBQyxDQUFFQSxHQUFDLEVBQUUsQ0FBRSxDQUMxQixJQUFJLENBQUMyRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUNyQixJQUFJLENBQUcsQ0FBQyxDQUFHdEMsR0FBQyxDQUFFLENBQUMsQ0FBRW9FLE1BQU0sQ0FBQ0QsSUFBSSxDQUFFbkUsR0FBQyxDQUFDLENBQUMsQ0FDL0QsQ0FDQSxJQUFLLEdBQUksQ0FBQUEsR0FBQyxDQUFHLENBQUMsQ0FBRUEsR0FBQyxDQUFHLEVBQUUsQ0FBRUEsR0FBQyxFQUFFLENBQUUsQ0FDM0IsSUFBSSxDQUFDMkQsaUJBQWlCLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQ3JCLElB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