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
- */export 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
+ */export 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
  export 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
  */export var 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFQ0NfQ09ERVdPUkRTX1BFUl9CTE9DSyIsIk5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLUyIsImdldE51bVJhd0RhdGFNb2R1bGVzIiwidmVyIiwiUXJDb2RlIiwiVkVSU0lPTiIsIk1JTiIsIk1BWCIsIlJhbmdlRXJyb3IiLCJyZXN1bHQiLCJudW1BbGlnbiIsIk1hdGgiLCJmbG9vciIsImFzc2VydCIsImdldE51bURhdGFDb2Rld29yZHMiLCJlY2wiLCJvcmRpbmFsIiwiZW5jb2RlU2VnbWVudHMiLCJzZWdzIiwibWluVmVyc2lvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm1heFZlcnNpb24iLCJtYXNrIiwiYm9vc3RFY2wiLCJ2ZXJzaW9uIiwiZGF0YVVzZWRCaXRzIiwiX2VjbCIsImRhdGFDYXBhY2l0eUJpdHMiLCJ1c2VkQml0cyIsImdldFRvdGFsQml0cyIsIl9pIiwiX2FyciIsIkVjYyIsImdldCIsIm5ld0VjbCIsImJiIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInNlZyIsInZhbHVlIiwiYXBwZW5kQml0cyIsIm1vZGUiLCJtb2RlQml0cyIsIm51bUNoYXJzIiwibnVtQ2hhckNvdW50Qml0cyIsIl9pdGVyYXRvcjIiLCJnZXREYXRhIiwiX3N0ZXAyIiwiYiIsInB1c2giLCJlcnIiLCJlIiwiZiIsIm1pbiIsInBhZEJ5dGUiLCJkYXRhQ29kZXdvcmRzIiwiZm9yRWFjaCIsImkiLCJ0b1V0ZjhCeXRlQXJyYXkiLCJzdHIiLCJlbmNvZGVVUkkiLCJjaGFyQXQiLCJjaGFyQ29kZUF0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJtYWtlU2VnbWVudHMiLCJ0ZXh0IiwiaXNOdW1lcmljIiwibWFrZU51bWVyaWMiLCJpc0FscGhhbnVtZXJpYyIsIm1ha2VBbHBoYW51bWVyaWMiLCJtYWtlQnl0ZXMiLCJyZWVkU29sb21vbkNvbXB1dGVEaXZpc29yIiwiZGVncmVlIiwicm9vdCIsImoiLCJyZWVkU29sb21vbk11bHRpcGx5IiwicmVlZFNvbG9tb25Db21wdXRlUmVtYWluZGVyIiwiZGF0YSIsImRpdmlzb3IiLCJtYXAiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiX2xvb3AiLCJmYWN0b3IiLCJzaGlmdCIsImNvZWYiLCJ4IiwieSIsInoiLCJlcnJvckNvcnJlY3Rpb25MZXZlbCIsIm1zayIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIl8iLCJzaXplIiwicm93IiwiQXJyYXkiLCJmaWxsIiwibW9kdWxlcyIsInNsaWNlIiwiaXNGdW5jdGlvbiIsImRyYXdGdW5jdGlvblBhdHRlcm5zIiwiYWxsQ29kZXdvcmRzIiwiYWRkRWNjQW5kSW50ZXJsZWF2ZSIsImRyYXdDb2Rld29yZHMiLCJzZWxlY3RNYXNrIiwiYXBwbHlNYXNrIiwiZHJhd0Zvcm1hdEJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJtaW5QZW5hbHR5IiwicGVuYWx0eSIsImdldFBlbmFsdHlTY29yZSIsImdldE1vZHVsZSIsImZsYWciLCJzZXRGdW5jdGlvbk1vZHVsZSIsImRyYXdGaW5kZXJQYXR0ZXJuIiwiYWxpZ25QYXRQb3MiLCJnZXRBbGlnbm1lbnRQYXR0ZXJuUG9zaXRpb25zIiwiZHJhd0FsaWdubWVudFBhdHRlcm4iLCJkcmF3VmVyc2lvbiIsImZvcm1hdEJpdHMiLCJyZW0iLCJiaXRzIiwiZ2V0Qml0IiwiY29sb3IiLCJhIiwiZHkiLCJkeCIsImRpc3QiLCJtYXgiLCJhYnMiLCJ4eCIsInl5IiwiaXNEYXJrIiwibnVtQmxvY2tzIiwiYmxvY2tFY2NMZW4iLCJyYXdDb2Rld29yZHMiLCJudW1TaG9ydEJsb2NrcyIsInNob3J0QmxvY2tMZW4iLCJibG9ja3MiLCJyc0RpdiIsImsiLCJkYXQiLCJlY2MiLCJjb25jYXQiLCJfbG9vcDIiLCJfaTkiLCJibG9jayIsImxlbiIsInJpZ2h0IiwidmVydCIsIm1hc2tQYXR0ZXJuIiwiTUFTS19QQVRURVJOUyIsInJ1bkNvbG9yIiwicnVuWCIsInJ1bkhpc3RvcnkiLCJQRU5BTFRZIiwiTjEiLCJmaW5kZXJQZW5hbHR5QWRkSGlzdG9yeSIsImZpbmRlclBlbmFsdHlDb3VudFBhdHRlcm5zIiwiTjMiLCJmaW5kZXJQZW5hbHR5VGVybWluYXRlQW5kQ291bnQiLCJydW5ZIiwiTjIiLCJkYXJrIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsInJlZHVjZSIsInN1bSIsInRvdGFsIiwiY2VpbCIsIk40Iiwic3RlcCIsInBvcyIsInNwbGljZSIsInZhbGlkU2NvcmUiLCJzY29yZSIsInJ1bkxlbmd0aCIsInBvcCIsInVuc2hpZnQiLCJ2YWwiLCJjb25kIiwiRXJyb3IiLCJRclNlZ21lbnQiLCJiaXREYXRhIiwiTlVNRVJJQ19SRUdFWCIsIkFMUEhBTlVNRVJJQ19SRUdFWCIsIkFMUEhBTlVNRVJJQ19DSEFSU0VUIiwidGVzdCIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJRck1vZGUiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwiY2NiaXRzIiwiSW5maW5pdHkiLCJkaWdpdHMiLCJ0ZW1wIiwiaW5kZXhPZiIsImxldmVsIiwiTEVWRUxTIiwiX0VjYyIsIkxPVyIsIk1FRElVTSIsIlFVQVJUSUxFIiwiSElHSCIsIm51bUJpdHNDaGFyQ291bnQiLCJtb2RlcyIsIl9Rck1vZGUiLCJOVU1FUklDIiwiQUxQSEFOVU1FUklDIiwiQllURSIsIktBTkpJIiwiRUNJIl0sInNvdXJjZXMiOlsiY29tcG9uZW50cy9xcmNvZGUvcXJjb2RlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBRUiBDb2RlIGdlbmVyYXRvciBsaWJyYXJ5XG4gKlxuICogQ29weXJpZ2h0IChjKSBQcm9qZWN0IE5heXVraS4gKE1JVCBMaWNlbnNlKVxuICogaHR0cHM6Ly93d3cubmF5dWtpLmlvL3BhZ2UvcXItY29kZS1nZW5lcmF0b3ItbGlicmFyeVxuICovXG5cbi8vIOazqOaEj+e0ouW8lTDnlKjkuo7loavlhYXvvIzlubborr7nva7kuLrkuIDkuKrpnZ7ms5XlgLxcbmNvbnN0IEVDQ19DT0RFV09SRFNfUEVSX0JMT0NLID0gW1xuICBbXG4gICAgLTEsIDcsIDEwLCAxNSwgMjAsIDI2LCAxOCwgMjAsIDI0LCAzMCwgMTgsIDIwLCAyNCwgMjYsIDMwLCAyMiwgMjQsIDI4LCAzMCwgMjgsIDI4LCAyOCwgMjgsIDMwLFxuICAgIDMwLCAyNiwgMjgsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCxcbiAgXSwgLy8gTG93XG4gIFtcbiAgICAtMSwgMTAsIDE2LCAyNiwgMTgsIDI0LCAxNiwgMTgsIDIyLCAyMiwgMjYsIDMwLCAyMiwgMjIsIDI0LCAyNCwgMjgsIDI4LCAyNiwgMjYsIDI2LCAyNiwgMjgsIDI4LFxuICAgIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCxcbiAgXSwgLy8gTWVkaXVtXG4gIFtcbiAgICAtMSwgMTMsIDIyLCAxOCwgMjYsIDE4LCAyNCwgMTgsIDIyLCAyMCwgMjQsIDI4LCAyNiwgMjQsIDIwLCAzMCwgMjQsIDI4LCAyOCwgMjYsIDMwLCAyOCwgMzAsIDMwLFxuICAgIDMwLCAzMCwgMjgsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCxcbiAgXSwgLy8gUXVhcnRpbGVcbiAgW1xuICAgIC0xLCAxNywgMjgsIDIyLCAxNiwgMjIsIDI4LCAyNiwgMjYsIDI0LCAyOCwgMjQsIDI4LCAyMiwgMjQsIDI0LCAzMCwgMjgsIDI4LCAyNiwgMjgsIDMwLCAyNCwgMzAsXG4gICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLFxuICBdLCAvLyBIaWdoXG5dO1xuY29uc3QgTlVNX0VSUk9SX0NPUlJFQ1RJT05fQkxPQ0tTID0gW1xuICBbXG4gICAgLTEsIDEsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDQsIDQsIDQsIDQsIDQsIDYsIDYsIDYsIDYsIDcsIDgsIDgsIDksIDksIDEwLCAxMiwgMTIsIDEyLCAxMywgMTQsXG4gICAgMTUsIDE2LCAxNywgMTgsIDE5LCAxOSwgMjAsIDIxLCAyMiwgMjQsIDI1LFxuICBdLFxuICBbXG4gICAgLTEsIDEsIDEsIDEsIDIsIDIsIDQsIDQsIDQsIDUsIDUsIDUsIDgsIDksIDksIDEwLCAxMCwgMTEsIDEzLCAxNCwgMTYsIDE3LCAxNywgMTgsIDIwLCAyMSwgMjMsXG4gICAgMjUsIDI2LCAyOCwgMjksIDMxLCAzMywgMzUsIDM3LCAzOCwgNDAsIDQzLCA0NSwgNDcsIDQ5LFxuICBdLFxuICBbXG4gICAgLTEsIDEsIDEsIDIsIDIsIDQsIDQsIDYsIDYsIDgsIDgsIDgsIDEwLCAxMiwgMTYsIDEyLCAxNywgMTYsIDE4LCAyMSwgMjAsIDIzLCAyMywgMjUsIDI3LCAyOSwgMzQsXG4gICAgMzQsIDM1LCAzOCwgNDAsIDQzLCA0NSwgNDgsIDUxLCA1MywgNTYsIDU5LCA2MiwgNjUsIDY4LFxuICBdLFxuICBbXG4gICAgLTEsIDEsIDEsIDIsIDQsIDQsIDQsIDUsIDYsIDgsIDgsIDExLCAxMSwgMTYsIDE2LCAxOCwgMTYsIDE5LCAyMSwgMjUsIDI1LCAyNSwgMzQsIDMwLCAzMiwgMzUsXG4gICAgMzcsIDQwLCA0MiwgNDUsIDQ4LCA1MSwgNTQsIDU3LCA2MCwgNjMsIDY2LCA3MCwgNzQsIDc3LCA4MSxcbiAgXSxcbl07XG5cbi8vIOi/lOWbnuWcqOe7meWumueJiOacrOeahFFS56CB5Lit5Y+v5Lul5a2Y5YKo55qE5pWw5o2u5L2N5pWw77yM5bey5o6S6Zmk5omA5pyJ5Yqf6IO95qih5Z2X44CC6L+Z5YyF5ous5L2Z5pWw5L2N77yM5Zug5q2k5Y+v6IO95LiN5pivOOeahOWAjeaVsOOAgue7k+aenOiMg+WbtOWcqFsyMDgsIDI5NjQ4XeS5i+mXtOOAgui/meWPr+S7peWunueOsOS4uuS4gOS4qjQw6aG555qE5p+l5om+6KGo44CCXG5mdW5jdGlvbiBnZXROdW1SYXdEYXRhTW9kdWxlcyh2ZXI6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICh2ZXIgPCBRckNvZGUuVkVSU0lPTi5NSU4gfHwgdmVyID4gUXJDb2RlLlZFUlNJT04uTUFYKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlcnNpb24gbnVtYmVyIG91dCBvZiByYW5nZScpO1xuICB9XG4gIGxldCByZXN1bHQgPSAoMTYgKiB2ZXIgKyAxMjgpICogdmVyICsgNjQ7XG5cbiAgaWYgKHZlciA+PSAyKSB7XG4gICAgY29uc3QgbnVtQWxpZ24gPSBNYXRoLmZsb29yKHZlciAvIDcpICsgMjtcblxuICAgIHJlc3VsdCAtPSAoMjUgKiBudW1BbGlnbiAtIDEwKSAqIG51bUFsaWduIC0gNTU7XG4gICAgaWYgKHZlciA+PSA3KSByZXN1bHQgLT0gMzY7XG4gIH1cbiAgYXNzZXJ0KDIwOCA8PSByZXN1bHQgJiYgcmVzdWx0IDw9IDI5NjQ4KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIOi/lOWbnuaMh+WumueJiOacrOWPt+WSjOe6oOmUmee6p+WIq+eahCBRUiDnoIHljIXlkKvnmoQgOCDkvY3mlbDmja7noIHlrZfmlbDph4/vvIjljbPpnZ7nuqDplJnnoIHlrZfvvInvvIzkvZnkvY3ooqvoiI3lvIPjgILov5nkuKrml6DnirbmgIHnmoTnuq/lh73mlbDlj6/ku6Xlrp7njrDkuLrkuIDkuKogKDQwKjQpIOWkp+Wwj+eahOafpeaJvuihqOOAglxuZnVuY3Rpb24gZ2V0TnVtRGF0YUNvZGV3b3Jkcyh2ZXI6IG51bWJlciwgZWNsOiBFY2MpOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIE1hdGguZmxvb3IoZ2V0TnVtUmF3RGF0YU1vZHVsZXModmVyKSAvIDgpIC1cbiAgICBFQ0NfQ09ERVdPUkRTX1BFUl9CTE9DS1tlY2wub3JkaW5hbF1bdmVyXSAqIE5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLU1tlY2wub3JkaW5hbF1bdmVyXVxuICApO1xufVxuLyoqXG4gKiDnlJ/miJDkuIDkuKogUVIg56CBXG4gKiBAZGVzY3JpcHRpb25cbiAqIOagueaNrue7meWumueahOaVsOaNruauteWSjOe8lueggeWPguaVsOeUn+aIkCBRUiDnoIHjgILovpPlh7rml7bkvJroh6rliqjpgInmi6nnu5nlrprojIPlm7TlhoXlsL3lj6/og73lsI/nmoQgUVIg56CB54mI5pysXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFFyU2VnbWVudFtdPn0gc2VncyAtIOimgee8lueggeeahCBRUiDmlbDmja7mrrVcbiAqIEBwYXJhbSB7RWNjfSBlY2wgLSDnuqDplJnnuqfliKtcbiAqIEBwYXJhbSB7SW50UmFuZ2U8MSwgNDE+fSBbbWluVmVyc2lvbj0xXSAtIOacgOWwj+eJiOacrO+8iOm7mOiupOS4uiAx77yJXG4gKiBAcGFyYW0ge0ludFJhbmdlPDEsIDQxPn0gW21heFZlcnNpb249NDBdIC0g5pyA5aSn54mI5pys77yI6buY6K6k5Li6IDQw77yJXG4gKiBAcGFyYW0gey0xIHwgSW50UmFuZ2U8MCwgOD59IFttYXNrPS0xXSAtIOaOqeeggeaooeW8j++8iOm7mOiupOS4uiAtMe+8jOihqOekuuiHquWKqOmAieaLqe+8iVxuICogQHBhcmFtIHtib29sZWFufSBbYm9vc3RFY2w9dHJ1ZV0gLSDlnKjmlbDmja7ku43nhLbpgILlkIjlvZPliY3niYjmnKzlj7fnmoTmg4XlhrXkuIvmj5Dpq5jnuqDplJnnuqfliKvvvIjpu5jorqTkuLogdHJ1Ze+8ieOAglxuICogQHJldHVybnMge1FyQ29kZX0g6L+U5Zue55Sf5oiQ55qEIFFSIOeggeOAglxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU2VnbWVudHMoXG4gIHNlZ3M6IFJlYWRvbmx5PFFyU2VnbWVudFtdPixcbiAgZWNsOiBFY2MsXG4gIG1pblZlcnNpb246IEludFJhbmdlPDEsIDQxPiA9IDEsXG4gIG1heFZlcnNpb246IEludFJhbmdlPDEsIDQxPiA9IDQwLFxuICBtYXNrOiAtMSB8IEludFJhbmdlPDAsIDg+ID0gLTEsXG4gIGJvb3N0RWNsOiBib29sZWFuID0gdHJ1ZSxcbik6IFFyQ29kZSB7XG4gIGlmIChcbiAgICAhKFxuICAgICAgUXJDb2RlLlZFUlNJT04uTUlOIDw9IG1pblZlcnNpb24gJiZcbiAgICAgIG1pblZlcnNpb24gPD0gbWF4VmVyc2lvbiAmJlxuICAgICAgbWF4VmVyc2lvbiA8PSBRckNvZGUuVkVSU0lPTi5NQVhcbiAgICApIHx8XG4gICAgbWFzayA8IC0xIHx8XG4gICAgbWFzayA+IDdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdmFsdWUnKTtcbiAgfVxuICAvLyDmn6Xmib7opoHkvb/nlKjnmoTmnIDlsI/niYjmnKzlj7dcbiAgbGV0IHZlcnNpb246IEludFJhbmdlPDEsIDQxPixcbiAgICBkYXRhVXNlZEJpdHM6IG51bWJlcixcbiAgICBfZWNsID0gZWNsO1xuXG4gIGZvciAodmVyc2lvbiA9IG1pblZlcnNpb247IDsgdmVyc2lvbisrKSB7XG4gICAgY29uc3QgZGF0YUNhcGFjaXR5Qml0cyA9IGdldE51bURhdGFDb2Rld29yZHModmVyc2lvbiwgX2VjbCkgKiA4LCAvLyDlj6/nlKjnmoTmlbDmja7kvY3mlbBcbiAgICAgIHVzZWRCaXRzID0gZ2V0VG90YWxCaXRzKHNlZ3MsIHZlcnNpb24pO1xuXG4gICAgLy8g5om+5Yiw5ZCI6YCC55qE54mI5pys5Y+3XG4gICAgaWYgKHVzZWRCaXRzIDw9IGRhdGFDYXBhY2l0eUJpdHMpIHtcbiAgICAgIGRhdGFVc2VkQml0cyA9IHVzZWRCaXRzO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uID49IG1heFZlcnNpb24pIHtcbiAgICAgIC8vIOiMg+WbtOWGheeahOaJgOacieeJiOacrOmDveaXoOazleWuuee6s+e7meWumuaVsOaNrlxuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RhdGEgdG9vIGxvbmcnKTtcbiAgICB9XG4gIH1cbiAgLy8g5o+Q6auY57qg6ZSZ57qn5YirOyDku47kvY7liLDpq5hcbiAgaWYgKGJvb3N0RWNsKSB7XG4gICAgZm9yIChjb25zdCBuZXdFY2wgb2YgW0VjYy5nZXQoJ01FRElVTScpLCBFY2MuZ2V0KCdRVUFSVElMRScpLCBFY2MuZ2V0KCdISUdIJyldKSB7XG4gICAgICBpZiAoZGF0YVVzZWRCaXRzIDw9IGdldE51bURhdGFDb2Rld29yZHModmVyc2lvbiwgbmV3RWNsKSAqIDgpIF9lY2wgPSBuZXdFY2w7XG4gICAgfVxuICB9XG4gIC8vIOi/nuaOpeaJgOacieauteS7peWIm+W7uuaVsOaNruS9jeWtl+espuS4slxuICBjb25zdCBiYjogbnVtYmVyW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHNlZyBvZiBzZWdzKSB7XG4gICAgYXBwZW5kQml0cyhzZWcubW9kZS5tb2RlQml0cywgNCwgYmIpO1xuICAgIGFwcGVuZEJpdHMoc2VnLm51bUNoYXJzLCBzZWcubW9kZS5udW1DaGFyQ291bnRCaXRzKHZlcnNpb24pLCBiYik7XG4gICAgZm9yIChjb25zdCBiIG9mIHNlZy5nZXREYXRhKCkpIGJiLnB1c2goYik7XG4gIH1cbiAgYXNzZXJ0KGJiLmxlbmd0aCA9PT0gZGF0YVVzZWRCaXRzKTtcbiAgLy8g5re75Yqg57uI5q2i56ym5bm25aGr5YWF6Iez5a2X6IqC6L6555WMKOWmguaenOmAgueUqClcbiAgY29uc3QgZGF0YUNhcGFjaXR5Qml0czogbnVtYmVyID0gZ2V0TnVtRGF0YUNvZGV3b3Jkcyh2ZXJzaW9uLCBfZWNsKSAqIDg7XG5cbiAgYXNzZXJ0KGJiLmxlbmd0aCA8PSBkYXRhQ2FwYWNpdHlCaXRzKTtcbiAgYXBwZW5kQml0cygwLCBNYXRoLm1pbig0LCBkYXRhQ2FwYWNpdHlCaXRzIC0gYmIubGVuZ3RoKSwgYmIpO1xuICBhcHBlbmRCaXRzKDAsICg4IC0gKGJiLmxlbmd0aCAlIDgpKSAlIDgsIGJiKTtcbiAgYXNzZXJ0KGJiLmxlbmd0aCAlIDggPT09IDApO1xuICAvLyDnlKjkuqTmm7/lrZfoioLloavlhYXnm7TliLDovr7liLDmlbDmja7lrrnph49cbiAgZm9yIChsZXQgcGFkQnl0ZSA9IDB4ZWM7IGJiLmxlbmd0aCA8IGRhdGFDYXBhY2l0eUJpdHM7IHBhZEJ5dGUgXj0gMHhlYyBeIDB4MTEpIHtcbiAgICBhcHBlbmRCaXRzKHBhZEJ5dGUsIDgsIGJiKTtcbiAgfVxuICAvLyDku6XlpKfnq6/luo/lsIbkvY3miZPljIXmiJDlrZfoioJcbiAgY29uc3QgZGF0YUNvZGV3b3JkczogbnVtYmVyW10gPSBbXTtcblxuICB3aGlsZSAoZGF0YUNvZGV3b3Jkcy5sZW5ndGggKiA4IDwgYmIubGVuZ3RoKSBkYXRhQ29kZXdvcmRzLnB1c2goMCk7XG4gIGJiLmZvckVhY2goKGIsIGkpID0+IChkYXRhQ29kZXdvcmRzW2kgPj4+IDNdIHw9IGIgPDwgKDcgLSAoaSAmIDcpKSkpO1xuICByZXR1cm4gbmV3IFFyQ29kZSh2ZXJzaW9uLCBfZWNsLCBkYXRhQ29kZXdvcmRzLCBtYXNrKTtcbn1cblxuLy8g6L+U5Zue6KGo56S657uZ5a6a5a2X56ym5Liy55qEVVRGLTjnvJbnoIHlrZfoioLmlbDnu4RcbmZ1bmN0aW9uIHRvVXRmOEJ5dGVBcnJheShzdHI6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIHN0ciA9IGVuY29kZVVSSShzdHIpO1xuICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RyLmNoYXJBdChpKSAhPT0gJyUnKSByZXN1bHQucHVzaChzdHIuY2hhckNvZGVBdChpKSk7XG4gICAgZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChwYXJzZUludChzdHIuc3Vic3RyaW5nKGkgKyAxLCBpICsgMyksIDE2KSk7XG4gICAgICBpICs9IDI7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIOi/lOWbnuS4gOS4quaWsOeahOWPr+WPmOauteWIl+ihqCznlKjkuo7ooajnpLrnu5nlrprnmoRVbmljb2Rl5paH5pys5a2X56ym5Liy44CC57uT5p6c5Y+v6IO95L2/55So5ZCE56eN5q615qih5byP5bm25YiH5o2i5qih5byP5Lul5LyY5YyW5L2N5rWB55qE6ZW/5bqm44CCXG5leHBvcnQgZnVuY3Rpb24gbWFrZVNlZ21lbnRzKHRleHQ6IHN0cmluZyk6IFFyU2VnbWVudFtdIHtcbiAgLy8g6Ieq5Yqo6YCJ5oup5pyA6auY5pWI55qE5q6157yW56CBXG4gIGlmICh0ZXh0ID09PSAnJykgcmV0dXJuIFtdO1xuICBlbHNlIGlmIChpc051bWVyaWModGV4dCkpIHJldHVybiBbbWFrZU51bWVyaWModGV4dCldO1xuICBlbHNlIGlmIChpc0FscGhhbnVtZXJpYyh0ZXh0KSkgcmV0dXJuIFttYWtlQWxwaGFudW1lcmljKHRleHQpXTtcbiAgcmV0dXJuIFttYWtlQnl0ZXModG9VdGY4Qnl0ZUFycmF5KHRleHQpKV07XG59XG5cbmZ1bmN0aW9uIHJlZWRTb2xvbW9uQ29tcHV0ZURpdmlzb3IoZGVncmVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gIGlmIChkZWdyZWUgPCAxIHx8IGRlZ3JlZSA+IDI1NSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RlZ3JlZSBvdXQgb2YgcmFuZ2UnKTtcbiAgLy8g5aSa6aG55byP57O75pWw5oyJ5LuO6auY5Yiw5L2O55qE5bmC5qyh5a2Y5YKoLOS4jeWMheaLrOWni+e7iOS4ujHnmoTpppbpobnjgIJcbiAgLy8g5L6L5aaC5aSa6aG55byPIHheMyArIDI1NXheMiArIDh4ICsgOTMg5a2Y5YKo5Li6dWludDjmlbDnu4QgWzI1NSwgOCwgOTNd44CCXG4gIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlZ3JlZSAtIDE7IGkrKykgcmVzdWx0LnB1c2goMCk7XG4gIHJlc3VsdC5wdXNoKDEpOyAvLyBTdGFydCBvZmYgd2l0aCB0aGUgbW9ub21pYWwgeF4wXG5cbiAgLy8g6K6h566X5aSa6aG55byP5LmY56evICh4IC0gcl4wKSAqICh4IC0gcl4xKSAqICh4IC0gcl4yKSAqIC4uLiAqICh4IC0gcl57ZGVncmVlLTF9Ke+8jFxuICAvLyDlubboiI3lvIPmnIDpq5jmrKHpobnvvIjor6Xpobnlp4vnu4jkuLogMXheZGVncmVl77yJ44CCXG4gIC8vIOazqOaEjyByID0gMHgwMu+8jOWug+aYr+aciemZkOWfnyBHRigyXjgvMHgxMUQpIOeahOeUn+aIkOWFg+OAglxuICBsZXQgcm9vdCA9IDE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWdyZWU7IGkrKykge1xuICAgIC8vIOWwhuW9k+WJjee7k+aenOS5mOS7pSAoeCAtIHJeaSlcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykge1xuICAgICAgcmVzdWx0W2pdID0gcmVlZFNvbG9tb25NdWx0aXBseShyZXN1bHRbal0sIHJvb3QpO1xuICAgICAgaWYgKGogKyAxIDwgcmVzdWx0Lmxlbmd0aCkgcmVzdWx0W2pdIF49IHJlc3VsdFtqICsgMV07XG4gICAgfVxuICAgIHJvb3QgPSByZWVkU29sb21vbk11bHRpcGx5KHJvb3QsIDB4MDIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIOi/lOWbnue7meWumuaVsOaNruWSjOmZpOaVsOWkmumhueW8j+eahOmHjOW+ty3miYDnvZfpl6jplJnor6/nuqDmraPnoIHlrZfjgIJcbmZ1bmN0aW9uIHJlZWRTb2xvbW9uQ29tcHV0ZVJlbWFpbmRlcihcbiAgZGF0YTogUmVhZG9ubHk8bnVtYmVyW10+LFxuICBkaXZpc29yOiBSZWFkb25seTxudW1iZXJbXT4sXG4pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHJlc3VsdCA9IGRpdmlzb3IubWFwKCgpID0+IDApO1xuXG4gIGZvciAoY29uc3QgYiBvZiBkYXRhKSB7XG4gICAgLy8g5aSa6aG55byP6Zmk5rOVXG4gICAgY29uc3QgZmFjdG9yID0gYiBeIChyZXN1bHQuc2hpZnQoKSBhcyBudW1iZXIpO1xuXG4gICAgcmVzdWx0LnB1c2goMCk7XG4gICAgZGl2aXNvci5mb3JFYWNoKChjb2VmLCBpKSA9PiAocmVzdWx0W2ldIF49IHJlZWRTb2xvbW9uTXVsdGlwbHkoY29lZiwgZmFjdG9yKSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIOi/lOWbnuS4pOS4que7meWumuWfn+WFg+e0oOaooUdGKDJeOC8weDExRCnnmoTkuZjnp6/jgILlj4LmlbDlkoznu5Pmnpxcbi8vIOmDveaYr+aXoOespuWPtzjkvY3mlbTmlbDjgILov5nlj6/ku6Xlrp7njrDkuLoyNTYqMjU25LiqdWludDjmnaHnm67nmoTmn6Xmib7ooajjgIJcbmZ1bmN0aW9uIHJlZWRTb2xvbW9uTXVsdGlwbHkoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoeCA+Pj4gOCAhPT0gMCB8fCB5ID4+PiA4ICE9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnl0ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgLy8g5L+E572X5pav5Yac5rCR5LmY5rOVXG4gIGxldCB6OiBudW1iZXIgPSAwO1xuXG4gIGZvciAobGV0IGkgPSA3OyBpID49IDA7IGktLSkge1xuICAgIHogPSAoeiA8PCAxKSBeICgoeiA+Pj4gNykgKiAweDExZCk7XG4gICAgeiBePSAoKHkgPj4+IGkpICYgMSkgKiB4O1xuICB9XG4gIGFzc2VydCh6ID4+PiA4ID09PSAwKTtcbiAgcmV0dXJuIHo7XG59XG5cbi8qXG4gKiDnlLEgRGVuc28gV2F2ZSDlj5HmmI7vvIzlubblnKggSVNPL0lFQyAxODAwNCDmoIflh4bkuK3mj4/ov7DjgIJcbiAqIOatpOexu+eahOWunuS+i+ihqOekuuS4gOS4quS4jeWPr+WPmOeahOaaly/kuq7ljZXlhYPmlrnmoLznvZHjgIJcbiAqIOivpeexu+mBteW+qiBRUiDnoIHmqKHlnosgMiDop4TojIPvvIzmlK/mjIHmiYDmnInniYjmnKzvvIjlsLrlr7jvvInku44gMSDliLAgNDDjgIE0IOenjee6oOmUmeetiee6p+S7peWPiiA0IOenjeWtl+espue8lueggeaooeW8j+OAglxuICovXG5jbGFzcyBRckNvZGUge1xuICAvLyBRUiBDb2RlIOeahOaooeWdl++8iGZhbHNlIOihqOekuua1heiJsu+8jHRydWUg6KGo56S65rex6Imy77yJ44CC5p6E6YCg5Ye95pWw5a6M5oiQ5ZCO5LiN5Y+v5pu05pS544CC6YCa6L+HIGdldE1vZHVsZSgpIOiuv+mXruOAglxuICBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZXM6IGJvb2xlYW5bXVtdID0gW107XG4gIC8vIOihqOekuuS4jeWPl+aOqeaooeW9seWTjeeahOWKn+iDveaooeWdl+OAguaehOmAoOWHveaVsOWujOaIkOWQjuWNs+iiq+S4ouW8g+OAglxuICBwcml2YXRlIHJlYWRvbmx5IGlzRnVuY3Rpb246IGJvb2xlYW5bXVtdID0gW107XG4gIC8qKlxuICAgKiDojrflj5YgUVIgQ29kZSDnmoTlrr3luqblkozpq5jluqbvvIzku6XmqKHlnZfkuLrljZXkvY3jgIJcbiAgICog5a695bqm5ZKM6auY5bqm6IyD5Zu05Li6IDIxIOiHsyAxNzfvvIjljIXmi6zovrnnlYzvvInjgILlrr3luqblkozpq5jluqbnmoTorqHnrpflhazlvI/kuLrvvJpgdmVyc2lvbiAqIDQgKyAxN2DjgIJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzaXplOiBudW1iZXI7XG4gIC8qKlxuICAgKiDojrflj5YgUVIgQ29kZSDmiYDkvb/nlKjnmoTmjqnohpzmqKHlvI/nmoTntKLlvJXlgLzjgILmjqnohpzmqKHlvI/ntKLlvJXlgLzojIPlm7TkuLogMCDliLAgN++8iOWMheaLrOi+ueeVjO+8ieOAguWNs+S9vyBRUiBDb2RlIOaYr+mAmui/h+iHquWKqOaOqeiGnO+8iG1hc2sgPSAtMe+8ieeUn+aIkOeahO+8jOacgOe7iOeahOaOqeiGnOWAvOS7jeeEtuaYryAwIOWIsCA3IOS5i+mXtOeahOacieaViOWAvOOAglxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1hc2s6IEludFJhbmdlPDAsIDg+O1xuICAvLyDmlK/mjIHnmoTniYjmnKwsIFFS56CB5qih5Z6LMuagh+WHhlxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZFUlNJT04gPSB7XG4gICAgTUlOOiAxLFxuICAgIE1BWDogNDAsXG4gIH0gYXMgY29uc3Q7XG4gIC8vIOaDqee9muWIhuaVsOW4uOmHjywg55So5LqOIGdldFBlbmFsdHlTY29yZSgp77yM5Zyo6K+E5Lyw5ZOq5Liq5o6p56CB5pyA5L2z5pe25L2/55So44CCXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBFTkFMVFkgPSB7XG4gICAgTjE6IDMsIC8vIOebuOWQjOminOiJsueahOi/nue7reaooeWdl1xuICAgIE4yOiAzLCAvLyAyeDIg5Z2XXG4gICAgTjM6IDQwLCAvLyDmn6Xmib7lmajnsbvkvLzmqKHlvI9cbiAgICBONDogMTAsIC8vIOaal+aooeWdl+avlOS+i1xuICB9IGFzIGNvbnN0O1xuICAvLyDpgInmi6nmnIDkvbPmjqnnoIFcbiAgcHJpdmF0ZSBzZWxlY3RNYXNrKG1zazogLTEgfCBJbnRSYW5nZTwwLCA4Pik6IEludFJhbmdlPDAsIDg+IHtcbiAgICBpZiAobXNrICE9PSAtMSkgcmV0dXJuIG1zaztcbiAgICBsZXQgbWFzazogSW50UmFuZ2U8MCwgOD4gPSAwO1xuICAgIGxldCBtaW5QZW5hbHR5ID0gMTAwMDAwMDAwMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAvLyDoh6rliqjpgInmi6nmnIDkvbPmjqnmqKFcbiAgICAgIHRoaXMuYXBwbHlNYXNrKGkpO1xuICAgICAgdGhpcy5kcmF3Rm9ybWF0Qml0cyhpKTtcbiAgICAgIGNvbnN0IHBlbmFsdHkgPSB0aGlzLmdldFBlbmFsdHlTY29yZSgpO1xuXG4gICAgICBpZiAocGVuYWx0eSA8IG1pblBlbmFsdHkpIHtcbiAgICAgICAgbWFzayA9IGkgYXMgSW50UmFuZ2U8MCwgOD47XG4gICAgICAgIG1pblBlbmFsdHkgPSBwZW5hbHR5O1xuICAgICAgfVxuICAgICAgLy8g5pKk6ZSA5o6p56CBXG4gICAgICB0aGlzLmFwcGx5TWFzayhpKTtcbiAgICB9XG4gICAgYXNzZXJ0KDAgPD0gbWFzayAmJiBtYXNrIDw9IDcpO1xuICAgIHJldHVybiBtYXNrO1xuICB9XG4gIC8vIOS9v+eUqOe7meWumueahOeJiOacrOWPt+OAgemUmeivr+e6oOato+e6p+WIq+OAgeaVsOaNrueggeWtl+iKguWSjOaOqeiGnOe8luWPt+WIm+W7uuS4gOS4quaWsOeahFFS56CB44CCXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAvLyDmraQgUVIgQ29kZSDnmoTniYjmnKzlj7fvvIzojIPlm7TkuLogMSDliLAgNDDvvIjlkKvvvIk76K+l5YC85Yaz5a6a5LqG5LqM57u056CB55qE5bC65a+444CCXG4gICAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IEludFJhbmdlPDEsIDQxPixcbiAgICAvLyDplJnor6/nuqDmraPnuqfliKvjgIJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6IEVjYyxcbiAgICBkYXRhQ29kZXdvcmRzOiBSZWFkb25seTxudW1iZXJbXT4sXG4gICAgbXNrOiAtMSB8IEludFJhbmdlPDAsIDg+LFxuICApIHtcbiAgICAvLyDpqozor4HmnoTpgKDlh73mlbDlj4LmlbBcbiAgICBpZiAodmVyc2lvbiA8IFFyQ29kZS5WRVJTSU9OLk1JTiB8fCB2ZXJzaW9uID4gUXJDb2RlLlZFUlNJT04uTUFYKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVmVyc2lvbiB2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICB9XG4gICAgaWYgKG1zayA8IC0xIHx8IG1zayA+IDcpIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXNrIHZhbHVlIG91dCBvZiByYW5nZScpO1xuICAgIC8vIOWIneWni+WMllxuICAgIHRoaXMuc2l6ZSA9IHZlcnNpb24gKiA0ICsgMTc7XG4gICAgLy8g5Yib5bu65qih5Z2X5pWw57uEXG4gICAgLy8g5Yid5aeL5YyW5Lik5Liq572R5qC85Li6IHNpemUqc2l6ZSDlpKflsI/nmoTluIPlsJTmlbDnu4TvvIzliJ3lp4vlgLzkuLogZmFsc2Ug5YWo5Li65rWF6ImyXG4gICAgY29uc3Qgcm93ID0gQXJyYXkodGhpcy5zaXplKS5maWxsKGZhbHNlKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIHtcbiAgICAgIHRoaXMubW9kdWxlc1tpXSA9IHJvdy5zbGljZSgpO1xuICAgICAgdGhpcy5pc0Z1bmN0aW9uW2ldID0gcm93LnNsaWNlKCk7XG4gICAgfVxuICAgIC8vIOiuoeeul+mUmeivr+e6oOato+egge+8iEVDQ++8ie+8jOe7mOWItuaooeWdl1xuICAgIHRoaXMuZHJhd0Z1bmN0aW9uUGF0dGVybnMoKTtcbiAgICAvLyDmnoTlu7ogUVIg56CB55qE5Li76KaB5rWB56iLXG4gICAgY29uc3QgYWxsQ29kZXdvcmRzID0gdGhpcy5hZGRFY2NBbmRJbnRlcmxlYXZlKGRhdGFDb2Rld29yZHMpO1xuXG4gICAgdGhpcy5kcmF3Q29kZXdvcmRzKGFsbENvZGV3b3Jkcyk7XG4gICAgLy8g56Gu5a6a5pyA57uI5o6p56CBXG4gICAgdGhpcy5tYXNrID0gdGhpcy5zZWxlY3RNYXNrKG1zayk7XG4gICAgLy8g5bqU55So5pyA57uI5o6p56CB5bm257uY5Yi25qC85byP5L2NXG4gICAgdGhpcy5hcHBseU1hc2sodGhpcy5tYXNrKTtcbiAgICB0aGlzLmRyYXdGb3JtYXRCaXRzKHRoaXMubWFzayk7XG4gICAgLy8g5p6E6YCg5a6M5oiQLCDkuKLlvINcbiAgICB0aGlzLmlzRnVuY3Rpb24gPSBbXTtcbiAgfVxuXG4gIC8qIC0tIOiuv+mXruWZqOaWueazlSAtLSovXG4gIC8vIOi/lOWbnue7meWumuWdkOagh+WkhOaooeWdl++8iOWDj+e0oHh555qE6aKc6Imy77yM5rWF6Imy5pe25Li6ZmFsc2XvvIzmt7HoibLml7bkuLp0cnVlKTvlpoLmnpznu5nlrprnmoTlnZDmoIfotoXlh7rovrnnlYzvvIzliJnov5Tlm55mYWxzZe+8iOa1heiJsu+8ieOAglxuICBwdWJsaWMgZ2V0TW9kdWxlKHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHggPj0gMCAmJiB4IDwgdGhpcy5zaXplICYmIHkgPj0gMCAmJiB5IDwgdGhpcy5zaXplICYmIHRoaXMubW9kdWxlc1t5XVt4XTtcbiAgfVxuICAvKiAtLSDmnoTpgKDlh73mlbDnmoTnp4HmnInovoXliqnmlrnms5XvvJrnu5jliLblip/og73mqKHlnZcgLS0qL1xuXG4gIC8vIOivu+WPluivpeWvueixoeeahOeJiOacrOWtl+aute+8jOW5tue7mOWItuWSjOagh+iusOaJgOacieWKn+iDveaooeWdl+OAglxuICBwcml2YXRlIGRyYXdGdW5jdGlvblBhdHRlcm5zKCk6IHZvaWQge1xuICAgIC8vIOe7mOWItuawtOW5s+WSjOWeguebtOWumuaXtuWbvuahiFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIHtcbiAgICAgIGNvbnN0IGZsYWcgPSBpICUgMiA9PT0gMDtcblxuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg2LCBpLCBmbGFnKTtcbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoaSwgNiwgZmxhZyk7XG4gICAgfVxuICAgIC8vIOe7mOWItiAzIOS4quWumuS9jeWbvuahiO+8iOmZpOS6huWPs+S4i+inkueahOaJgOacieinkuiQve+8m+S8muimhuebluS4gOS6m+WumuaXtuaooeWdl++8iVxuICAgIHRoaXMuZHJhd0ZpbmRlclBhdHRlcm4oMywgMyk7XG4gICAgY29uc3QgeSA9IHRoaXMuc2l6ZSAtIDQ7XG5cbiAgICB0aGlzLmRyYXdGaW5kZXJQYXR0ZXJuKHksIDMpO1xuICAgIHRoaXMuZHJhd0ZpbmRlclBhdHRlcm4oMywgeSk7XG4gICAgLy8g57uY5Yi25aSa5Liq5a+56b2Q5Zu+5qGIXG4gICAgY29uc3QgYWxpZ25QYXRQb3MgPSB0aGlzLmdldEFsaWdubWVudFBhdHRlcm5Qb3NpdGlvbnMoKTtcbiAgICBjb25zdCBudW1BbGlnbiA9IGFsaWduUGF0UG9zLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQWxpZ247IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1BbGlnbjsgaisrKSB7XG4gICAgICAgIC8vIOS4jeWcqOS4ieS4quWumuS9jeWbvuahiOeahOinkuiQveWkhOe7mOWItlxuICAgICAgICBpZiAoXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIChpID09PSAwICYmIGogPT09IDApIHx8XG4gICAgICAgICAgICAoaSA9PT0gMCAmJiBqID09PSBudW1BbGlnbiAtIDEpIHx8XG4gICAgICAgICAgICAoaSA9PT0gbnVtQWxpZ24gLSAxICYmIGogPT09IDApXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmRyYXdBbGlnbm1lbnRQYXR0ZXJuKGFsaWduUGF0UG9zW2ldLCBhbGlnblBhdFBvc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8g57uY5Yi26YWN572u5pWw5o2uXG4gICAgdGhpcy5kcmF3Rm9ybWF0Qml0cygwKTsgLy8g5Li05pe25o6p56CB5YC877yb56iN5ZCO5Zyo5p6E6YCg5Ye95pWw5Lit5Lya6KKr6KaG55uWXG4gICAgdGhpcy5kcmF3VmVyc2lvbigpO1xuICB9XG5cbiAgLy8g57uY5Yi25qC85byP5L2N55qE5Lik5Liq5Ymv5pys77yI5bim5pyJ5YW26Ieq5bex55qE6ZSZ6K+v57qg5q2j56CB77yJXG4gIC8vIOWfuuS6jue7meWumueahOaOqeeggeWSjOivpeWvueixoeeahOmUmeivr+e6oOato+e6p+WIq+Wtl+auteOAglxuICBwcml2YXRlIGRyYXdGb3JtYXRCaXRzKG1hc2s6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIOiuoeeul+mUmeivr+e6oOato+eggeW5tuaJk+WMheS9jVxuICAgIGNvbnN0IGRhdGE6IG51bWJlciA9ICh0aGlzLmVycm9yQ29ycmVjdGlvbkxldmVsLmZvcm1hdEJpdHMgPDwgMykgfCBtYXNrOyAvLyBlcnJDb3JyTHZsIOaYryB1aW50MiDnsbvlnovvvIxtYXNrIOaYryB1aW50MyDnsbvlnotcbiAgICBsZXQgcmVtOiBudW1iZXIgPSBkYXRhO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSByZW0gPSAocmVtIDw8IDEpIF4gKChyZW0gPj4+IDkpICogMHg1MzcpO1xuICAgIGNvbnN0IGJpdHMgPSAoKGRhdGEgPDwgMTApIHwgcmVtKSBeIDB4NTQxMjsgLy8gdWludDE1XG5cbiAgICBhc3NlcnQoYml0cyA+Pj4gMTUgPT09IDApO1xuICAgIC8vIOe7mOWItuesrOS4gOS4quWJr+acrFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDU7IGkrKykgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg4LCBpLCBnZXRCaXQoYml0cywgaSkpO1xuICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoOCwgNywgZ2V0Qml0KGJpdHMsIDYpKTtcbiAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKDgsIDgsIGdldEJpdChiaXRzLCA3KSk7XG4gICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg3LCA4LCBnZXRCaXQoYml0cywgOCkpO1xuICAgIGZvciAobGV0IGkgPSA5OyBpIDwgMTU7IGkrKykge1xuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSgxNCAtIGksIDgsIGdldEJpdChiaXRzLCBpKSk7XG4gICAgfVxuICAgIC8vIOe7mOWItuesrOS6jOS4quWJr+acrFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKHRoaXMuc2l6ZSAtIDEgLSBpLCA4LCBnZXRCaXQoYml0cywgaSkpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gODsgaSA8IDE1OyBpKyspIHtcbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoOCwgdGhpcy5zaXplIC0gMTUgKyBpLCBnZXRCaXQoYml0cywgaSkpO1xuICAgIH1cbiAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKDgsIHRoaXMuc2l6ZSAtIDgsIHRydWUpOyAvLyBBbHdheXMgZGFya1xuICB9XG5cbiAgLy8g5aaC5p6cNyA8PSB2ZXJzaW9uIDw9IDQw77yM5YiZ57uY5Yi254mI5pys5L2N55qE5Lik5Liq5Ymv5pys77yI5bim5pyJ5YW26Ieq5bex55qE6ZSZ6K+v57qg5q2j56CB77yJ77yMXG4gIC8vIOWfuuS6juivpeWvueixoeeahOeJiOacrOWtl+auteOAglxuICBwcml2YXRlIGRyYXdWZXJzaW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZlcnNpb24gPCA3KSByZXR1cm47XG5cbiAgICAvLyDorqHnrpfplJnor6/nuqDmraPnoIHlubbmiZPljIXkvY1cbiAgICBsZXQgcmVtOiBudW1iZXIgPSB0aGlzLnZlcnNpb247IC8vIHZlcnNpb24g5pivIHVpbnQ2IOexu+Wei++8jOiMg+WbtOWcqCBbNywgNDBdXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEyOyBpKyspIHJlbSA9IChyZW0gPDwgMSkgXiAoKHJlbSA+Pj4gMTEpICogMHgxZjI1KTtcbiAgICBjb25zdCBiaXRzOiBudW1iZXIgPSAodGhpcy52ZXJzaW9uIDw8IDEyKSB8IHJlbTsgLy8gdWludDE4XG5cbiAgICBhc3NlcnQoYml0cyA+Pj4gMTggPT09IDApO1xuICAgIC8vIOe7mOWItuS4pOS4quWJr+acrFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTg7IGkrKykge1xuICAgICAgY29uc3QgY29sb3I6IGJvb2xlYW4gPSBnZXRCaXQoYml0cywgaSk7XG4gICAgICBjb25zdCBhOiBudW1iZXIgPSB0aGlzLnNpemUgLSAxMSArIChpICUgMyk7XG4gICAgICBjb25zdCBiOiBudW1iZXIgPSBNYXRoLmZsb29yKGkgLyAzKTtcblxuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZShhLCBiLCBjb2xvcik7XG4gICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKGIsIGEsIGNvbG9yKTtcbiAgICB9XG4gIH1cbiAgLy8g57uY5Yi25LiA5LiqOSo555qE5a6a5L2N5Zu+5qGI77yM5YyF5ous6L6555WM5YiG6ZqU56ym77yM5Lit5b+D5qih5Z2X5L2N5LqOKHgsIHkp44CC5qih5Z2X5Y+v5Lul6LaF5Ye66L6555WM44CCXG4gIHByaXZhdGUgZHJhd0ZpbmRlclBhdHRlcm4oeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBkeSA9IC00OyBkeSA8PSA0OyBkeSsrKSB7XG4gICAgICBmb3IgKGxldCBkeCA9IC00OyBkeCA8PSA0OyBkeCsrKSB7XG4gICAgICAgIGNvbnN0IGRpc3QgPSBNYXRoLm1heChNYXRoLmFicyhkeCksIE1hdGguYWJzKGR5KSksIC8vIENoZWJ5c2hldi/ml6DnqbfojIPmlbBcbiAgICAgICAgICB4eCA9IHggKyBkeCxcbiAgICAgICAgICB5eSA9IHkgKyBkeTtcblxuICAgICAgICBpZiAoMCA8PSB4eCAmJiB4eCA8IHRoaXMuc2l6ZSAmJiAwIDw9IHl5ICYmIHl5IDwgdGhpcy5zaXplKSB7XG4gICAgICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSh4eCwgeXksIGRpc3QgIT09IDIgJiYgZGlzdCAhPT0gNCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8g57uY5Yi25LiA5LiqNSo155qE5a+56b2Q5Zu+5qGI77yM5Lit5b+D5qih5Z2X5L2N5LqOKHgsIHkp44CC5omA5pyJ5qih5Z2X5b+F6aG75Zyo6L6555WM5YaF44CCXG4gIHByaXZhdGUgZHJhd0FsaWdubWVudFBhdHRlcm4oeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBkeSA9IC0yOyBkeSA8PSAyOyBkeSsrKSB7XG4gICAgICBmb3IgKGxldCBkeCA9IC0yOyBkeCA8PSAyOyBkeCsrKSB7XG4gICAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoeCArIGR4LCB5ICsgZHksIE1hdGgubWF4KE1hdGguYWJzKGR4KSwgTWF0aC5hYnMoZHkpKSAhPT0gMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIOiuvue9ruaooeWdl+eahOminOiJsuW5tuWwhuWFtuagh+iusOS4uuWKn+iDveaooeWdl+OAguS7heeUseaehOmAoOWHveaVsOS9v+eUqOOAguWdkOagh+W/hemhu+WcqOi+ueeVjOWGheOAglxuICBwcml2YXRlIHNldEZ1bmN0aW9uTW9kdWxlKHg6IG51bWJlciwgeTogbnVtYmVyLCBpc0Rhcms6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm1vZHVsZXNbeV1beF0gPSBpc0Rhcms7XG4gICAgdGhpcy5pc0Z1bmN0aW9uW3ldW3hdID0gdHJ1ZTtcbiAgfVxuICAvLyDov5Tlm57kuIDkuKrmlrDnmoTlrZfoioLlrZfnrKbkuLLvvIzooajnpLrlhbfmnInpgILlvZPplJnor6/nuqDmraPnoIHlrZfnmoTnu5nlrprmlbDmja7vvIzln7rkuo7or6Xlr7nosaHnmoTniYjmnKzlkozplJnor6/nuqDmraPnuqfliKvjgIJcbiAgcHJpdmF0ZSBhZGRFY2NBbmRJbnRlcmxlYXZlKGRhdGE6IFJlYWRvbmx5PG51bWJlcltdPik6IG51bWJlcltdIHtcbiAgICBjb25zdCB2ZXIgPSB0aGlzLnZlcnNpb24sXG4gICAgICBlY2wgPSB0aGlzLmVycm9yQ29ycmVjdGlvbkxldmVsO1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoICE9PSBnZXROdW1EYXRhQ29kZXdvcmRzKHZlciwgZWNsKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgLy8g6K6h566X5Y+C5pWw5pWw5YC8XG4gICAgY29uc3QgbnVtQmxvY2tzID0gTlVNX0VSUk9SX0NPUlJFQ1RJT05fQkxPQ0tTW2VjbC5vcmRpbmFsXVt2ZXJdLFxuICAgICAgYmxvY2tFY2NMZW4gPSBFQ0NfQ09ERVdPUkRTX1BFUl9CTE9DS1tlY2wub3JkaW5hbF1bdmVyXSxcbiAgICAgIHJhd0NvZGV3b3JkcyA9IE1hdGguZmxvb3IoZ2V0TnVtUmF3RGF0YU1vZHVsZXModmVyKSAvIDgpLFxuICAgICAgbnVtU2hvcnRCbG9ja3MgPSBudW1CbG9ja3MgLSAocmF3Q29kZXdvcmRzICUgbnVtQmxvY2tzKSxcbiAgICAgIHNob3J0QmxvY2tMZW4gPSBNYXRoLmZsb29yKHJhd0NvZGV3b3JkcyAvIG51bUJsb2NrcyksXG4gICAgICBibG9ja3M6IG51bWJlcltdW10gPSBbXSwgLy8g5bCG5pWw5o2u5YiG5Ymy5oiQ5Z2X5bm25Li65q+P5Liq5Z2X6ZmE5YqgRUNDXG4gICAgICByc0RpdiA9IHJlZWRTb2xvbW9uQ29tcHV0ZURpdmlzb3IoYmxvY2tFY2NMZW4pO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGsgPSAwOyBpIDwgbnVtQmxvY2tzOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdCA9IGRhdGEuc2xpY2UoaywgayArIHNob3J0QmxvY2tMZW4gLSBibG9ja0VjY0xlbiArIChpIDwgbnVtU2hvcnRCbG9ja3MgPyAwIDogMSkpO1xuICAgICAgY29uc3QgZWNjID0gcmVlZFNvbG9tb25Db21wdXRlUmVtYWluZGVyKGRhdCwgcnNEaXYpO1xuXG4gICAgICBrICs9IGRhdC5sZW5ndGg7XG4gICAgICBpZiAoaSA8IG51bVNob3J0QmxvY2tzKSBkYXQucHVzaCgwKTtcbiAgICAgIGJsb2Nrcy5wdXNoKGRhdC5jb25jYXQoZWNjKSk7XG4gICAgfVxuICAgIC8vICDlsIbmr4/kuKrlnZfnmoTlrZfoioLkuqTplJko6ICM5LiN5piv6L+e5o6lKeaIkOWNleS4quW6j+WIl1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxvY2tzWzBdLmxlbmd0aDsgaSsrKSB7XG4gICAgICBibG9ja3MuZm9yRWFjaCgoYmxvY2ssIGopID0+IHtcbiAgICAgICAgLy8g6Lez6L+H55+t5Z2X5Lit55qE5aGr5YWF5a2X6IqCXG4gICAgICAgIGlmIChpICE9PSBzaG9ydEJsb2NrTGVuIC0gYmxvY2tFY2NMZW4gfHwgaiA+PSBudW1TaG9ydEJsb2Nrcykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGJsb2NrW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSByYXdDb2Rld29yZHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8g5bCG57uZ5a6a55qEOOS9jeeggeWtl+W6j+WIlyjmlbDmja7lkozplJnor6/nuqDmraMp57uY5Yi25Yiw5q2kUVLnoIHnmoTmlbTkuKpcbiAgLy8g5pWw5o2u5Yy65Z+f5LiK44CC5Zyo6LCD55So5q2k5pa55rOV5LmL5YmN6ZyA6KaB5qCH6K6w5Yqf6IO95qih5Z2X44CCXG4gIHByaXZhdGUgZHJhd0NvZGV3b3JkcyhkYXRhOiBSZWFkb25seTxudW1iZXJbXT4pOiB2b2lkIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggIT09IE1hdGguZmxvb3IoZ2V0TnVtUmF3RGF0YU1vZHVsZXModGhpcy52ZXJzaW9uKSAvIDgpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBsZXQgaSA9IDA7IC8vIOaVsOaNrueahOS9jee0ouW8lVxuICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoICogODtcblxuICAgIC8vIOaJp+ihjOeJueauiueahOS5i+Wtl+W9ouaJq+aPj1xuICAgIGZvciAobGV0IHJpZ2h0ID0gdGhpcy5zaXplIC0gMTsgcmlnaHQgPj0gMTsgcmlnaHQgLT0gMikge1xuICAgICAgLy8g5q+P5a+55YiX5Lit5Y+z5YiX55qE57Si5byVXG4gICAgICBpZiAocmlnaHQgPT09IDYpIHJpZ2h0ID0gNTtcbiAgICAgIGZvciAobGV0IHZlcnQgPSAwOyB2ZXJ0IDwgdGhpcy5zaXplOyB2ZXJ0KyspIHtcbiAgICAgICAgLy8g5Z6C55u06K6h5pWw5ZmoXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMjsgaisrKSB7XG4gICAgICAgICAgY29uc3QgeCA9IHJpZ2h0IC0gaiwgLy8g5a6e6ZmF55qEeOWdkOagh1xuICAgICAgICAgICAgeSA9ICgocmlnaHQgKyAxKSAmIDIpID09PSAwID8gdGhpcy5zaXplIC0gMSAtIHZlcnQgOiB2ZXJ0OyAvLyDlrp7pmYXnmoR55Z2Q5qCHXG5cbiAgICAgICAgICBpZiAoIXRoaXMuaXNGdW5jdGlvblt5XVt4XSAmJiBpIDwgbGVuKSB7XG4gICAgICAgICAgICB0aGlzLm1vZHVsZXNbeV1beF0gPSBnZXRCaXQoZGF0YVtpID4+PiAzXSwgNyAtIChpICYgNykpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyDlpoLmnpzmraRRUueggeacieS7u+S9leWJqeS9meS9jSgw5YiwN+S9jSnvvIzlroPku6zooqvmnoTpgKDlh73mlbDotYvlgLzkuLowL2ZhbHNlL+a1heiJsu+8jOS4lOatpOaWueazleS4jeS8muaUueWPmOWug+S7rFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFzc2VydChpID09PSBsZW4pO1xuICB9XG4gIC8vIOaOqeeggeaooeW8j+WumuS5iVxuICBwcml2YXRlIHJlYWRvbmx5IE1BU0tfUEFUVEVSTlM6ICgoXzogbnVtYmVyLCB5OiBudW1iZXIpID0+IGJvb2xlYW4pW10gPSBbXG4gICAgKHgsIHkpID0+ICh4ICsgeSkgJSAyID09PSAwLFxuICAgIChfLCB5KSA9PiB5ICUgMiA9PT0gMCxcbiAgICAoeCkgPT4geCAlIDMgPT09IDAsXG4gICAgKHgsIHkpID0+ICh4ICsgeSkgJSAzID09PSAwLFxuICAgICh4LCB5KSA9PiAoTWF0aC5mbG9vcih4IC8gMykgKyBNYXRoLmZsb29yKHkgLyAyKSkgJSAyID09PSAwLFxuICAgICh4LCB5KSA9PiAoKHggKiB5KSAlIDIpICsgKCh4ICogeSkgJSAzKSA9PT0gMCxcbiAgICAoeCwgeSkgPT4gKCgoeCAqIHkpICUgMikgKyAoKHggKiB5KSAlIDMpKSAlIDIgPT09IDAsXG4gICAgKHgsIHkpID0+ICgoKHggKyB5KSAlIDIpICsgKCh4ICogeSkgJSAzKSkgJSAyID09PSAwLFxuICBdIGFzIGNvbnN0O1xuICAvLyDkvb/nlKjnu5nlrprnmoTmjqnnoIHmqKHlvI/lr7nmraRRUueggeS4reeahOeggeWtl+aooeWdl+i/m+ihjFhPUui/kOeul+OAguWcqOaOqeeggeS5i+WJjeW/hemhu+agh+iusOWKn+iDveaooeWdl+W5tue7mOWItueggeWtl+S9jeOAglxuICBwcml2YXRlIGFwcGx5TWFzayhtYXNrOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAobWFzayA8IDAgfHwgbWFzayA+IDcpIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXNrIHZhbHVlIG91dCBvZiByYW5nZScpO1xuICAgIGNvbnN0IG1hc2tQYXR0ZXJuID0gdGhpcy5NQVNLX1BBVFRFUk5TW21hc2tdO1xuXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNpemU7IHkrKykge1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykge1xuICAgICAgICBpZiAoIXRoaXMuaXNGdW5jdGlvblt5XVt4XSAmJiBtYXNrUGF0dGVybih4LCB5KSkge1xuICAgICAgICAgIHRoaXMubW9kdWxlc1t5XVt4XSA9ICF0aGlzLm1vZHVsZXNbeV1beF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8g6K6h566X5bm26L+U5Zue5Z+65LqO5q2kIFFSIOeggeW9k+WJjeaooeWdl+eKtuaAgeeahOaDqee9muWIhuaVsOOAgueUqOS6juiHquWKqOaOqeeggemAieaLqeeul+azle+8jOS7peaJvuWIsOS6p+eUn+acgOS9juWIhuaVsOeahOaOqeeggeaooeW8j+OAglxuICBwcml2YXRlIGdldFBlbmFsdHlTY29yZSgpOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQ6IG51bWJlciA9IDA7XG5cbiAgICAvLyDooYzkuK3lhbfmnInnm7jlkIzpopzoibLnmoTnm7jpgrvmqKHlnZfvvIzku6Xlj4rmn6Xmib7lmajnsbvkvLznmoTmqKHlvI9cbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuc2l6ZTsgeSsrKSB7XG4gICAgICBsZXQgcnVuQ29sb3IgPSBmYWxzZTtcbiAgICAgIGxldCBydW5YID0gMDtcbiAgICAgIGNvbnN0IHJ1bkhpc3RvcnkgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMF07XG5cbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy5zaXplOyB4KyspIHtcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlc1t5XVt4XSA9PT0gcnVuQ29sb3IpIHtcbiAgICAgICAgICBydW5YKys7XG4gICAgICAgICAgaWYgKHJ1blggPT09IDUpIHJlc3VsdCArPSBRckNvZGUuUEVOQUxUWS5OMTtcbiAgICAgICAgICBlbHNlIGlmIChydW5YID4gNSkgcmVzdWx0Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5maW5kZXJQZW5hbHR5QWRkSGlzdG9yeShydW5YLCBydW5IaXN0b3J5KTtcbiAgICAgICAgICBpZiAoIXJ1bkNvbG9yKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdGhpcy5maW5kZXJQZW5hbHR5Q291bnRQYXR0ZXJucyhydW5IaXN0b3J5KSAqIFFyQ29kZS5QRU5BTFRZLk4zO1xuICAgICAgICAgIH1cbiAgICAgICAgICBydW5Db2xvciA9IHRoaXMubW9kdWxlc1t5XVt4XTtcbiAgICAgICAgICBydW5YID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0ICs9IHRoaXMuZmluZGVyUGVuYWx0eVRlcm1pbmF0ZUFuZENvdW50KHJ1bkNvbG9yLCBydW5YLCBydW5IaXN0b3J5KSAqIFFyQ29kZS5QRU5BTFRZLk4zO1xuICAgIH1cbiAgICAvLyDliJfkuK3lhbfmnInnm7jlkIzpopzoibLnmoTnm7jpgrvmqKHlnZfvvIzku6Xlj4rmn6Xmib7lmajnsbvkvLznmoTmqKHlvI9cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMuc2l6ZTsgeCsrKSB7XG4gICAgICBsZXQgcnVuQ29sb3IgPSBmYWxzZTtcbiAgICAgIGxldCBydW5ZID0gMDtcbiAgICAgIGNvbnN0IHJ1bkhpc3RvcnkgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMF07XG5cbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zaXplOyB5KyspIHtcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlc1t5XVt4XSA9PT0gcnVuQ29sb3IpIHtcbiAgICAgICAgICBydW5ZKys7XG4gICAgICAgICAgaWYgKHJ1blkgPT09IDUpIHJlc3VsdCArPSBRckNvZGUuUEVOQUxUWS5OMTtcbiAgICAgICAgICBlbHNlIGlmIChydW5ZID4gNSkgcmVzdWx0Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5maW5kZXJQZW5hbHR5QWRkSGlzdG9yeShydW5ZLCBydW5IaXN0b3J5KTtcbiAgICAgICAgICBpZiAoIXJ1bkNvbG9yKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdGhpcy5maW5kZXJQZW5hbHR5Q291bnRQYXR0ZXJucyhydW5IaXN0b3J5KSAqIFFyQ29kZS5QRU5BTFRZLk4zO1xuICAgICAgICAgIH1cbiAgICAgICAgICBydW5Db2xvciA9IHRoaXMubW9kdWxlc1t5XVt4XTtcbiAgICAgICAgICBydW5ZID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0ICs9IHRoaXMuZmluZGVyUGVuYWx0eVRlcm1pbmF0ZUFuZENvdW50KHJ1bkNvbG9yLCBydW5ZLCBydW5IaXN0b3J5KSAqIFFyQ29kZS5QRU5BTFRZLk4zO1xuICAgIH1cbiAgICAvLyAyKjIg5Z2X55qE5qih5Z2X5YW355u45ZCM55qE6aKc6ImyXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNpemUgLSAxOyB5KyspIHtcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy5zaXplIC0gMTsgeCsrKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5tb2R1bGVzW3ldW3hdO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2xvciA9PT0gdGhpcy5tb2R1bGVzW3ldW3ggKyAxXSAmJlxuICAgICAgICAgIGNvbG9yID09PSB0aGlzLm1vZHVsZXNbeSArIDFdW3hdICYmXG4gICAgICAgICAgY29sb3IgPT09IHRoaXMubW9kdWxlc1t5ICsgMV1beCArIDFdXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc3VsdCArPSBRckNvZGUuUEVOQUxUWS5OMjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyDmmpfmqKHlnZflkozkuq7mqKHlnZfnmoTlubPooaFcbiAgICBsZXQgZGFyazogbnVtYmVyID0gMDtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMubW9kdWxlcykge1xuICAgICAgZGFyayA9IHJvdy5yZWR1Y2UoKHN1bSwgY29sb3IpID0+IHN1bSArIChjb2xvciA/IDEgOiAwKSwgZGFyayk7XG4gICAgfVxuICAgIC8vIOazqOaEj++8jHNpemUg5piv5aWH5pWw77yM5omA5LulIGRhcmsvdG90YWwgIT09IDEvMlxuICAgIGNvbnN0IHRvdGFsOiBudW1iZXIgPSB0aGlzLnNpemUgKiB0aGlzLnNpemU7XG4gICAgLy8g6K6h566X5pyA5bCP55qE5pW05pWwIGsgPj0gMO+8jOS9v+W+lyAoNDUtNWspJSA8PSBkYXJrL3RvdGFsIDw9ICg1NSs1ayklXG4gICAgY29uc3QgazogbnVtYmVyID0gTWF0aC5jZWlsKE1hdGguYWJzKGRhcmsgKiAyMCAtIHRvdGFsICogMTApIC8gdG90YWwpIC0gMTtcblxuICAgIGFzc2VydCgwIDw9IGsgJiYgayA8PSA5KTtcbiAgICByZXN1bHQgKz0gayAqIFFyQ29kZS5QRU5BTFRZLk40O1xuICAgIGFzc2VydCgwIDw9IHJlc3VsdCAmJiByZXN1bHQgPD0gMjU2ODg4OCk7IC8vIOWfuuS6jum7mOiupOWAvOeahOmdnue0p+WvhuS4iumZkFxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8g6L+U5Zue5LiA5Liq5Y2H5bqP55qE5L2N572u5YiX6KGo77yM6KGo56S65q2k54mI5pys5Y+355qE5a+56b2Q5qih5byP5L2N572u44CC5q+P5Liq5L2N572u5ZyoIFswLDE3Nykg6IyD5Zu05YaF77yM5bm255So5LqO6KGM5ZKM5YiX6L2044CC6L+Z5Y+v5Lul5a6e546w5Li6IDQwIOS4quWPr+WPmOmVv+W6puaVtOaVsOWIl+ihqOeahOafpeaJvuihqOOAglxuICBwcml2YXRlIGdldEFsaWdubWVudFBhdHRlcm5Qb3NpdGlvbnMoKTogbnVtYmVyW10ge1xuICAgIGlmICh0aGlzLnZlcnNpb24gPT09IDEpIHJldHVybiBbXTtcbiAgICBjb25zdCBudW1BbGlnbiA9IE1hdGguZmxvb3IodGhpcy52ZXJzaW9uIC8gNykgKyAyLFxuICAgICAgc3RlcCA9IE1hdGguZmxvb3IoKHRoaXMudmVyc2lvbiAqIDggKyBudW1BbGlnbiAqIDMgKyA1KSAvIChudW1BbGlnbiAqIDQgLSA0KSkgKiAyLFxuICAgICAgcmVzdWx0ID0gWzZdO1xuXG4gICAgZm9yIChsZXQgcG9zID0gdGhpcy5zaXplIC0gNzsgcmVzdWx0Lmxlbmd0aCA8IG51bUFsaWduOyBwb3MgLT0gc3RlcCkge1xuICAgICAgcmVzdWx0LnNwbGljZSgxLCAwLCBwb3MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIOWPquiDveWcqOa3u+WKoOS6huS6ruiJsui/kOihjOWQjueri+WNs+iwg+eUqO+8jOW5tui/lOWbniAw44CBMSDmiJYgMuOAgui/meaYryBnZXRQZW5hbHR5U2NvcmUoKSDnmoTovoXliqnlh73mlbDjgIJcbiAgcHJpdmF0ZSBmaW5kZXJQZW5hbHR5Q291bnRQYXR0ZXJucyhydW5IaXN0b3J5OiBSZWFkb25seTxudW1iZXJbXT4pOiBudW1iZXIge1xuICAgIGNvbnN0IG4gPSBydW5IaXN0b3J5WzFdO1xuXG4gICAgYXNzZXJ0KG4gPD0gdGhpcy5zaXplICogMyk7XG4gICAgLy8g5o+Q5YmN6aqM6K+BIG4g55qE5pyJ5pWI5oCnXG4gICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7XG4gICAgY29uc3QgdmFsaWRTY29yZSA9XG4gICAgICBydW5IaXN0b3J5WzJdID09PSBuICYmIHJ1bkhpc3RvcnlbM10gPT09IG4gKiAzICYmIHJ1bkhpc3RvcnlbNF0gPT09IG4gJiYgcnVuSGlzdG9yeVs1XSA9PT0gbjtcblxuICAgIGlmICghdmFsaWRTY29yZSkgcmV0dXJuIDA7XG4gICAgLy8g5qOA5p+l5Lik56uv55qE5bu25Ly45qih5byPXG4gICAgbGV0IHNjb3JlID0gMDtcblxuICAgIGlmIChydW5IaXN0b3J5WzBdID49IG4gKiA0ICYmIHJ1bkhpc3RvcnlbNl0gPj0gbikgc2NvcmUrKztcbiAgICBpZiAocnVuSGlzdG9yeVs2XSA+PSBuICogNCAmJiBydW5IaXN0b3J5WzBdID49IG4pIHNjb3JlKys7XG4gICAgcmV0dXJuIHNjb3JlO1xuICB9XG4gIC8vIOW/hemhu+WcqOihjO+8iOaIluWIl++8ieeahOaooeWdl+e7k+adn+aXtuiwg+eUqOOAgui/meaYryBnZXRQZW5hbHR5U2NvcmUoKSDnmoTovoXliqnlh73mlbDjgIJcbiAgcHJpdmF0ZSBmaW5kZXJQZW5hbHR5VGVybWluYXRlQW5kQ291bnQoXG4gICAgcnVuQ29sb3I6IGJvb2xlYW4sXG4gICAgcnVuTGVuZ3RoOiBudW1iZXIsXG4gICAgcnVuSGlzdG9yeTogbnVtYmVyW10sXG4gICk6IG51bWJlciB7XG4gICAgaWYgKHJ1bkNvbG9yKSB7XG4gICAgICAvLyDnu4jmraLmmpfoibLov5DooYxcbiAgICAgIHRoaXMuZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkocnVuTGVuZ3RoLCBydW5IaXN0b3J5KTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgcnVuTGVuZ3RoID0gMDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgcnVuTGVuZ3RoICs9IHRoaXMuc2l6ZTsgLy8g5re75Yqg5Lqu6Imy6L655qGG5Yiw5pyA57uI6L+Q6KGMXG4gICAgdGhpcy5maW5kZXJQZW5hbHR5QWRkSGlzdG9yeShydW5MZW5ndGgsIHJ1bkhpc3RvcnkpO1xuICAgIHJldHVybiB0aGlzLmZpbmRlclBlbmFsdHlDb3VudFBhdHRlcm5zKHJ1bkhpc3RvcnkpO1xuICB9XG4gIC8vIOWwhue7meWumuWAvOaOqOWIsOWJjemdouW5tuS4ouW8g+acgOWQjuS4gOS4quWAvOOAgui/meaYryBnZXRQZW5hbHR5U2NvcmUoKSDnmoTovoXliqnlh73mlbDjgIJcbiAgcHJpdmF0ZSBmaW5kZXJQZW5hbHR5QWRkSGlzdG9yeShydW5MZW5ndGg6IG51bWJlciwgcnVuSGlzdG9yeTogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBpZiAocnVuSGlzdG9yeVswXSA9PT0gMCkgcnVuTGVuZ3RoICs9IHRoaXMuc2l6ZTsgLy8g5re75Yqg5Lqu6Imy6L655qGG5Yiw5Yid5aeL6L+Q6KGMXG4gICAgcnVuSGlzdG9yeS5wb3AoKTtcbiAgICBydW5IaXN0b3J5LnVuc2hpZnQocnVuTGVuZ3RoKTtcbiAgfVxufVxuLy8g5bCG57uZ5a6a5pWw5YC855qE5L2O5L2N5q+U54m55L2N6L+95Yqg5Yiw57uZ5a6a57yT5Yay5Yy644CC6KaB5rGCIDAgPD0gbGVuIDw9IDMxIOS4lCAwIDw9IHZhbCA8IDJebGVu44CCXG5mdW5jdGlvbiBhcHBlbmRCaXRzKHZhbDogbnVtYmVyLCBsZW46IG51bWJlciwgYmI6IG51bWJlcltdKTogdm9pZCB7XG4gIGlmIChsZW4gPCAwIHx8IGxlbiA+IDMxIHx8IHZhbCA+Pj4gbGVuICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZhbHVlIG91dCBvZiByYW5nZScpO1xuICB9XG4gIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgIC8vIOmAkOS9jei/veWKoFxuICAgIGJiLnB1c2goKHZhbCA+Pj4gaSkgJiAxKTtcbiAgfVxufVxuLy8g6L+U5ZueeOeahOesrGnkvY3mmK/lkKbkuLox44CCXG5mdW5jdGlvbiBnZXRCaXQoeDogbnVtYmVyLCBpOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuICgoeCA+Pj4gaSkgJiAxKSAhPT0gMDtcbn1cbi8vIOWmguaenOe7meWumuadoeS7tuS4umZhbHNl5YiZ5oqb5Ye65byC5bi444CCXG5mdW5jdGlvbiBhc3NlcnQoY29uZDogYm9vbGVhbik6IHZvaWQge1xuICBpZiAoIWNvbmQpIHRocm93IG5ldyBFcnJvcignQXNzZXJ0aW9uIGVycm9yJyk7XG59XG4vKlxuICogUVLnoIHnrKblj7fkuK3nmoQg5a2X56ymL+S6jOi/m+WItiDmlbDmja7mrrVcbiAqL1xuY2xhc3MgUXJTZWdtZW50IHtcbiAgLy8g5L2/55So57uZ5a6a55qE5bGe5oCn5ZKM5pWw5o2u5Yib5bu65LiA5Liq5paw55qEUVLnoIHmrrXjgILlrZfnrKborqHmlbDvvIhudW1DaGFyc++8ieW/hemhu+S4juaooeW8j+WSjOS9jee8k+WGsuWMuumVv+W6puS4gOiHtO+8jOS9huS4jei/m+ihjOajgOafpeOAgue7meWumueahOS9jee8k+WGsuWMuuiiq+WFi+mahuW5tuWtmOWCqOOAglxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgLy8g5q2k5q6155qE5qih5byP5oyH56S656ym44CCXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGU6IFFyTW9kZSxcbiAgICAvLyDmraTmrrXmnKrnvJbnoIHmlbDmja7nmoTplb/luqbjgILlr7nkuo7mlbDlrZcv5a2X5q+N5pWw5a2XL+axieWtl+aooeW8j++8jOS7peWtl+espuS4uuWNleS9jea1i+mHj++8m+WvueS6juWtl+iKguaooeW8j++8jOS7peWtl+iKguS4uuWNleS9jea1i+mHj++8m+WvueS6jkVDSeaooeW8j++8jOS4ujA7IOWni+e7iOS4uumbtuaIluato+aVsOOAguS4jeaYr+aVsOaNrueahOS9jemVv+W6puOAglxuICAgIHB1YmxpYyByZWFkb25seSBudW1DaGFyczogbnVtYmVyLFxuICAgIC8vIOatpOauteeahOaVsOaNruS9jeOAgumAmui/h2dldERhdGEoKeiuv+mXruOAglxuICAgIHJlYWRvbmx5IGJpdERhdGE6IG51bWJlcltdLFxuICApIHtcbiAgICBpZiAobnVtQ2hhcnMgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBhcmd1bWVudCcpO1xuICAgIHRoaXMuYml0RGF0YSA9IGJpdERhdGEuc2xpY2UoKTsgLy8g6L+b6KGM6Ziy5b6h5oCn5ou36LSdXG4gIH1cbiAgLy8g6L+U5Zue5q2k5q615pWw5o2u5L2N55qE5paw5Ymv5pys44CCXG4gIHB1YmxpYyBnZXREYXRhKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5iaXREYXRhLnNsaWNlKCk7IC8vIOi/m+ihjOmYsuW+oeaAp+aLt+i0nVxuICB9XG59XG5jb25zdCBOVU1FUklDX1JFR0VYOiBSZWdFeHAgPSAvXlswLTldKiQvO1xuY29uc3QgQUxQSEFOVU1FUklDX1JFR0VYOiBSZWdFeHAgPSAvXltBLVowLTkgJCUqKy4vOi1dKiQvO1xuLy8g5a2X5q+N5pWw5a2X5qih5byP5Lit5omA5pyJ5ZCI5rOV5a2X56ym55qE6ZuG5ZCI77yM5YW25Lit5q+P5Liq5a2X56ym5YC85pig5bCE5Yiw5a2X56ym5Liy5Lit55qE57Si5byV44CCXG5jb25zdCBBTFBIQU5VTUVSSUNfQ0hBUlNFVDogc3RyaW5nID0gJzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiAkJSorLS4vOic7XG5cbi8vIOaYr+WQpuWPr+S7peeUqOaVsOWtl+aooeW8j+e8lueggeOAguW9k+S4lOS7heW9k+avj+S4quWtl+espumDveWcqDDliLA555qE6IyD5Zu05YaF5pe277yM5a2X56ym5Liy5Y+v57yW56CB44CCXG5mdW5jdGlvbiBpc051bWVyaWModGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBOVU1FUklDX1JFR0VYLnRlc3QodGV4dCk7XG59XG4vKipcbiAqIOaYr+WQpuWPr+S7peeUqOWtl+avjeaVsOWtl+aooeW8j+e8lueggVxuICogQGRlc2NyaXB0aW9uIDDliLA544CBQeWIsFrku4XlpKflhpnvvInjgIHnqbrmoLzjgIHnvo7lhYPnrKblj7fjgIHnmb7liIblj7fjgIHmmJ/lj7fjgIHliqDlj7fjgIHov57lrZfnrKbjgIHlj6XngrnjgIHmlpzmnaDjgIHlhpLlj7fjgIJcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IOe7meWumuWtl+espuS4slxuICogQHJldHVybnMge0Jvb2xlYW59IGJvb2xlYW5cbiAqL1xuZnVuY3Rpb24gaXNBbHBoYW51bWVyaWModGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBBTFBIQU5VTUVSSUNfUkVHRVgudGVzdCh0ZXh0KTtcbn1cbi8vIOi/lOWbnuS4gOS4quihqOekuuS7peWtl+iKguaooeW8j+e8lueggeeahOe7meWumuS6jOi/m+WItuaVsOaNrueahOauteOAguaJgOaciei+k+WFpeWtl+iKguaVsOe7hOmDveaYr+WPr+aOpeWPl+eahOOAguS7u+S9leaWh+acrOWtl+espuS4sumDveWPr+S7pei9rOaNouS4ulVURi045a2X6IqC5bm257yW56CB5Li65a2X6IqC5qih5byP5q6144CCXG5mdW5jdGlvbiBtYWtlQnl0ZXMoZGF0YTogUmVhZG9ubHk8bnVtYmVyW10+KTogUXJTZWdtZW50IHtcbiAgY29uc3QgYmI6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChjb25zdCBiIG9mIGRhdGEpIGFwcGVuZEJpdHMoYiwgOCwgYmIpO1xuICByZXR1cm4gbmV3IFFyU2VnbWVudChRck1vZGUuZ2V0KCdCWVRFJyksIGRhdGEubGVuZ3RoLCBiYik7XG59XG4vLyDorqHnrpflubbov5Tlm57lnKjnu5nlrprniYjmnKzkuIvnvJbnoIHnu5nlrprmrrXmiYDpnIDnmoTkvY3mlbDjgILlpoLmnpzmn5DkuKrmrrXnmoTlrZfnrKbmlbDlpKrlpJrku6Xoh7Pkuo7ml6Dms5XpgILlupTlhbbplb/luqblrZfmrrXvvIzliJnnu5PmnpzkuLrml6DnqbflpKfjgIJcbmZ1bmN0aW9uIGdldFRvdGFsQml0cyhzZWdzOiBSZWFkb25seTxRclNlZ21lbnRbXT4sIHZlcnNpb246IG51bWJlcik6IG51bWJlciB7XG4gIGxldCByZXN1bHQ6IG51bWJlciA9IDA7XG5cbiAgZm9yIChjb25zdCBzZWcgb2Ygc2Vncykge1xuICAgIGNvbnN0IGNjYml0czogbnVtYmVyID0gc2VnLm1vZGUubnVtQ2hhckNvdW50Qml0cyh2ZXJzaW9uKTtcblxuICAgIGlmIChzZWcubnVtQ2hhcnMgPj0gMSA8PCBjY2JpdHMpIHJldHVybiBJbmZpbml0eTsgLy8g5q6155qE6ZW/5bqm5LiN6YCC5ZCI5a2X5q6155qE5L2N5a695bqmXG4gICAgcmVzdWx0ICs9IDQgKyBjY2JpdHMgKyBzZWcuYml0RGF0YS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIOi/lOWbnuS4gOS4quihqOekuuS7peaVsOWtl+aooeW8j+e8lueggeeahOe7meWumuWNgei/m+WItuaVsOWtl+Wtl+espuS4sueahOauteOAglxuZnVuY3Rpb24gbWFrZU51bWVyaWMoZGlnaXRzOiBzdHJpbmcpOiBRclNlZ21lbnQge1xuICBpZiAoIWlzTnVtZXJpYyhkaWdpdHMpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1N0cmluZyBjb250YWlucyBub24tbnVtZXJpYyBjaGFyYWN0ZXJzJyk7XG4gIH1cbiAgY29uc3QgYmI6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyApIHtcbiAgICAvLyDmr4/mrKHov63ku6PmnIDlpJrmtojogJcz5Liq5pWw5a2XXG4gICAgY29uc3QgbjogbnVtYmVyID0gTWF0aC5taW4oZGlnaXRzLmxlbmd0aCAtIGksIDMpO1xuXG4gICAgYXBwZW5kQml0cyhwYXJzZUludChkaWdpdHMuc3Vic3RyaW5nKGksIGkgKyBuKSwgMTApLCBuICogMyArIDEsIGJiKTtcbiAgICBpICs9IG47XG4gIH1cbiAgcmV0dXJuIG5ldyBRclNlZ21lbnQoUXJNb2RlLmdldCgnTlVNRVJJQycpLCBkaWdpdHMubGVuZ3RoLCBiYik7XG59XG4vLyDov5Tlm57kuIDkuKrooajnpLrku6XlrZfmr43mlbDlrZfmqKHlvI/nvJbnoIHnmoTnu5nlrprmlofmnKzlrZfnrKbkuLLnmoTmrrXjgILlhYHorrjnmoTlrZfnrKbmmK/vvJow5YiwOeOAgUHliLBa77yI5LuF5aSn5YaZ77yJ44CB56m65qC844CB576O5YWD56ym5Y+344CB55m+5YiG5Y+344CB5pif5Y+344CB5Yqg5Y+344CB6L+e5a2X56ym44CB5Y+l54K544CB5pac5p2g44CB5YaS5Y+344CCXG5mdW5jdGlvbiBtYWtlQWxwaGFudW1lcmljKHRleHQ6IHN0cmluZyk6IFFyU2VnbWVudCB7XG4gIGlmICghaXNBbHBoYW51bWVyaWModGV4dCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignU3RyaW5nIGNvbnRhaW5zIHVuZW5jb2RhYmxlIGNoYXJhY3RlcnMgaW4gYWxwaGFudW1lcmljIG1vZGUnKTtcbiAgfVxuICBjb25zdCBiYjogbnVtYmVyW10gPSBbXTtcbiAgbGV0IGk6IG51bWJlcjtcblxuICBmb3IgKGkgPSAwOyBpICsgMiA8PSB0ZXh0Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgLy8g5aSE55CG5q+P57uEMuS4quWtl+esplxuICAgIGxldCB0ZW1wID0gQUxQSEFOVU1FUklDX0NIQVJTRVQuaW5kZXhPZih0ZXh0LmNoYXJBdChpKSkgKiA0NTtcblxuICAgIHRlbXAgKz0gQUxQSEFOVU1FUklDX0NIQVJTRVQuaW5kZXhPZih0ZXh0LmNoYXJBdChpICsgMSkpO1xuICAgIGFwcGVuZEJpdHModGVtcCwgMTEsIGJiKTtcbiAgfVxuICAvLyDliankuIsx5Liq5a2X56ymXG4gIGlmIChpIDwgdGV4dC5sZW5ndGgpIHtcbiAgICBhcHBlbmRCaXRzKEFMUEhBTlVNRVJJQ19DSEFSU0VULmluZGV4T2YodGV4dC5jaGFyQXQoaSkpLCA2LCBiYik7XG4gIH1cbiAgcmV0dXJuIG5ldyBRclNlZ21lbnQoUXJNb2RlLmdldCgnQUxQSEFOVU1FUklDJyksIHRleHQubGVuZ3RoLCBiYik7XG59XG4vKlxuICogUVLnoIHnrKblj7fkuK3nmoTplJnor6/nuqDmraPnuqfliKtcbiAqL1xuZXhwb3J0IGNsYXNzIEVjYyB7XG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgLy8g5ZyoMOWIsDPojIPlm7TlhoXvvIjml6DnrKblj7cy5L2N5pW05pWw77yJ44CCXG4gICAgcHVibGljIHJlYWRvbmx5IG9yZGluYWw6IEludFJhbmdlPDAsIDQ+LFxuICAgIC8vICjljIXnp4HmnIkpIOWcqDDliLAz6IyD5Zu05YaF77yI5peg56ym5Y+3MuS9jeaVtOaVsO+8ieOAglxuICAgIHB1YmxpYyByZWFkb25seSBmb3JtYXRCaXRzOiBJbnRSYW5nZTwwLCA0PixcbiAgKSB7fVxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMRVZFTFMgPSB7XG4gICAgTE9XOiBuZXcgRWNjKDAsIDEpLCAvLyA3JSDplJnor6/lrrnlv43njodcbiAgICBNRURJVU06IG5ldyBFY2MoMSwgMCksIC8vIDE1JSDplJnor6/lrrnlv43njodcbiAgICBRVUFSVElMRTogbmV3IEVjYygyLCAzKSwgLy8gMjUlIOmUmeivr+WuueW/jeeOh1xuICAgIEhJR0g6IG5ldyBFY2MoMywgMiksIC8vIDMwJSDplJnor6/lrrnlv43njodcbiAgfSBhcyBjb25zdDtcbiAgLy8g6I635Y+W5oyH5a6a57qn5Yir55qEIEVDQ1xuICBwdWJsaWMgc3RhdGljIGdldChsZXZlbDoga2V5b2YgdHlwZW9mIEVjYy5MRVZFTFMpOiBFY2Mge1xuICAgIHJldHVybiBFY2MuTEVWRUxTW2xldmVsXTtcbiAgfVxufVxuLypcbiAqIOaPj+i/sOWmguS9leino+mHiuauteeahOaVsOaNruS9jeOAguS4jeWPr+WPmOOAglxuICovXG5jbGFzcyBRck1vZGUge1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIC8vIOaooeW8j+aMh+ekuuS9je+8jOaYr+S4gOS4qnVpbnQ05YC877yI6IyD5Zu0MOWIsDE177yJ44CCXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVCaXRzOiBJbnRSYW5nZTwwLCAxNj4sXG4gICAgLy8g5LiJ5Liq5LiN5ZCM54mI5pys6IyD5Zu055qE5a2X56ym6K6h5pWw5L2N5pWw44CCXG4gICAgcHJpdmF0ZSByZWFkb25seSBudW1CaXRzQ2hhckNvdW50OiByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICkge31cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbW9kZXMgPSB7XG4gICAgTlVNRVJJQzogbmV3IFFyTW9kZSgweDEsIFsxMCwgMTIsIDE0XSksXG4gICAgQUxQSEFOVU1FUklDOiBuZXcgUXJNb2RlKDB4MiwgWzksIDExLCAxM10pLFxuICAgIEJZVEU6IG5ldyBRck1vZGUoMHg0LCBbOCwgMTYsIDE2XSksXG4gICAgS0FOSkk6IG5ldyBRck1vZGUoMHg4LCBbOCwgMTAsIDEyXSksXG4gICAgRUNJOiBuZXcgUXJNb2RlKDB4NywgWzAsIDAsIDBdKSxcbiAgfSBhcyBjb25zdDtcbiAgcHVibGljIHN0YXRpYyBnZXQobW9kZToga2V5b2YgdHlwZW9mIFFyTW9kZS5tb2Rlcykge1xuICAgIHJldHVybiBRck1vZGUubW9kZXNbbW9kZV07XG4gIH1cbiAgLy8g6IyD5Zu06K6h566XXG4gIHB1YmxpYyBudW1DaGFyQ291bnRCaXRzKHZlcnNpb246IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubnVtQml0c0NoYXJDb3VudFtNYXRoLmZsb29yKCh2ZXJzaW9uICsgNykgLyAxNyldO1xuICB9XG59XG5cbnR5cGUgRW51bWVyYXRlPE4gZXh0ZW5kcyBudW1iZXIsIEFjYyBleHRlbmRzIG51bWJlcltdID0gW10+ID0gQWNjWydsZW5ndGgnXSBleHRlbmRzIE5cbiAgPyBBY2NbbnVtYmVyXVxuICA6IEVudW1lcmF0ZTxOLCBbLi4uQWNjLCBBY2NbJ2xlbmd0aCddXT47XG5cbmV4cG9ydCB0eXBlIEludFJhbmdlPEYgZXh0ZW5kcyBudW1iZXIsIFQgZXh0ZW5kcyBudW1iZXI+ID0gRXhjbHVkZTxFbnVtZXJhdGU8VD4sIEVudW1lcmF0ZTxGPj47XG4iXSwibWFwcGluZ3MiOiIrM0VBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBRUE7QUFDQSxHQUFNLENBQUFBLHVCQUF1QixDQUFHLENBQzlCLENBQ0UsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDN0YsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDbkUsQ0FBRTtBQUNILENBQ0UsQ0FBQyxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDOUYsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDbkUsQ0FBRTtBQUNILENBQ0UsQ0FBQyxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDOUYsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDbkUsQ0FBRTtBQUNILENBQ0UsQ0FBQyxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDOUYsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDakU7QUFBQSxDQUNKLENBQ0QsR0FBTSxDQUFBQywyQkFBMkIsQ0FBRyxDQUNsQyxDQUNFLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQy9GLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzNDLENBQ0QsQ0FDRSxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUM1RixFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUN2RCxDQUNELENBQ0UsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDL0YsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDdkQsQ0FDRCxDQUNFLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDNUYsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzNELENBQ0YsQ0FFRDtBQUNBLFFBQVMsQ0FBQUMsb0JBQW9CQSxDQUFDQyxHQUFXLENBQVUsQ0FDakQsR0FBSUEsR0FBRyxDQUFHQyxNQUFN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RSxDQUFDLENBQUVTLE1BQU0sQ0FBQ0QsSUFBSSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQzdDLElBQUksQ0FBQ1IsaUJBQWlCLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRVMsTUFBTSxDQUFDRCxJQUFJLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDN0MsSUFBSSxDQUFDUixpQkFBaUIsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFFUyxNQUFNLENBQUNELElBQUksQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUM3QyxJQUFLLEdBQUksQ0FBQW5FLEdBQUMsQ0FBRyxDQUFDLENBQUVBLEdBQUMsQ0FBRyxFQUFFLENBQUVBLEdBQUMsRUFBRSxDQUFFLENBQzNCLElBQUksQ0FBQzJELGlCQUFpQixDQUFDLEVBQUUsQ0FBRzNELEdBQUMsQ0FBRSxDQUFDLENBQUVvRSxNQUFNLENBQUNELElBQUksQ0FBRW5FLEdBQUMsQ0FBQyxDQUNuRCxDQUNBO0FBQ0EsSUFBSyxHQUFJLENBQUFBLEdBQUMsQ0FBRyxDQUFDLENBQUVBLEdBQUMsQ0FBRyxDQUFDLENBQUVBLEdBQUMsRUFBRSxDQUFFLENBQzFCLElBQUksQ0FBQzJELGlCQUFpQixDQUFDLElBQUksQ0FBQ3JCLElBQUksQ0FBRyxDQUFDLENBQUd0QyxHQUFDLENBQUUsQ0FBQyxDQUFFb0UsTUFBTSxDQUFDRCxJQUFJLENBQUVuRSxHQUFDLENBQUMsQ0FDOUQsQ0FDQSxJQUFLLEdBQUksQ0FBQUEsR0FBQyxDQUFHLENBQUMsQ0FBRUEsR0FBQyxDQUFHLEVBQUUsQ0FBRUEsR0FBQyxFQUFFLENBQUUsQ0FDM0IsSUFBSSxDQUFDMkQsaUJBQWlCLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQ3JCLElBQUksQ0FBRyxFQUFFLENBQUd0QyxHQUFDLENBQUVvRSxNQUFNLENBQUNELElBQUksQ0FBRW5FLEdBQUMsQ0FBQyxDQUMvRCxDQUNBLElBQUksQ0FBQzJELGlCQUFpQixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUNyQixJQUFJLENBQUcsQ0FBQyxDQUFFLElBQUksQ0FBQyxDQUFF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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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFQ0NfQ09ERVdPUkRTX1BFUl9CTE9DSyIsIk5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLUyIsImdldE51bVJhd0RhdGFNb2R1bGVzIiwidmVyIiwiUXJDb2RlIiwiVkVSU0lPTiIsIk1JTiIsIk1BWCIsIlJhbmdlRXJyb3IiLCJyZXN1bHQiLCJudW1BbGlnbiIsIk1hdGgiLCJmbG9vciIsImFzc2VydCIsImdldE51bURhdGFDb2Rld29yZHMiLCJlY2wiLCJvcmRpbmFsIiwiZW5jb2RlU2VnbWVudHMiLCJzZWdzIiwibWluVmVyc2lvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm1heFZlcnNpb24iLCJtYXNrIiwiYm9vc3RFY2wiLCJ2ZXJzaW9uIiwiZGF0YVVzZWRCaXRzIiwiX2VjbCIsImRhdGFDYXBhY2l0eUJpdHMiLCJ1c2VkQml0cyIsImdldFRvdGFsQml0cyIsIl9pIiwiX2FyciIsIkVjYyIsImdldCIsIm5ld0VjbCIsImJiIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInNlZyIsInZhbHVlIiwiYXBwZW5kQml0cyIsIm1vZGUiLCJtb2RlQml0cyIsIm51bUNoYXJzIiwibnVtQ2hhckNvdW50Qml0cyIsIl9pdGVyYXRvcjIiLCJnZXREYXRhIiwiX3N0ZXAyIiwiYiIsInB1c2giLCJlcnIiLCJlIiwiZiIsIm1pbiIsInBhZEJ5dGUiLCJkYXRhQ29kZXdvcmRzIiwiZm9yRWFjaCIsImkiLCJ0b1V0ZjhCeXRlQXJyYXkiLCJzdHIiLCJlbmNvZGVVUkkiLCJjaGFyQXQiLCJjaGFyQ29kZUF0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJtYWtlU2VnbWVudHMiLCJ0ZXh0IiwiaXNOdW1lcmljIiwibWFrZU51bWVyaWMiLCJpc0FscGhhbnVtZXJpYyIsIm1ha2VBbHBoYW51bWVyaWMiLCJtYWtlQnl0ZXMiLCJyZWVkU29sb21vbkNvbXB1dGVEaXZpc29yIiwiZGVncmVlIiwicm9vdCIsImoiLCJyZWVkU29sb21vbk11bHRpcGx5IiwicmVlZFNvbG9tb25Db21wdXRlUmVtYWluZGVyIiwiZGF0YSIsImRpdmlzb3IiLCJtYXAiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiX2xvb3AiLCJmYWN0b3IiLCJzaGlmdCIsImNvZWYiLCJ4IiwieSIsInoiLCJlcnJvckNvcnJlY3Rpb25MZXZlbCIsIm1zayIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIl8iLCJzaXplIiwicm93IiwiQXJyYXkiLCJmaWxsIiwibW9kdWxlcyIsInNsaWNlIiwiaXNGdW5jdGlvbiIsImRyYXdGdW5jdGlvblBhdHRlcm5zIiwiYWxsQ29kZXdvcmRzIiwiYWRkRWNjQW5kSW50ZXJsZWF2ZSIsImRyYXdDb2Rld29yZHMiLCJzZWxlY3RNYXNrIiwiYXBwbHlNYXNrIiwiZHJhd0Zvcm1hdEJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJtaW5QZW5hbHR5IiwicGVuYWx0eSIsImdldFBlbmFsdHlTY29yZSIsImdldE1vZHVsZSIsImZsYWciLCJzZXRGdW5jdGlvbk1vZHVsZSIsImRyYXdGaW5kZXJQYXR0ZXJuIiwiYWxpZ25QYXRQb3MiLCJnZXRBbGlnbm1lbnRQYXR0ZXJuUG9zaXRpb25zIiwiZHJhd0FsaWdubWVudFBhdHRlcm4iLCJkcmF3VmVyc2lvbiIsImZvcm1hdEJpdHMiLCJyZW0iLCJiaXRzIiwiZ2V0Qml0IiwiY29sb3IiLCJhIiwiZHkiLCJkeCIsImRpc3QiLCJtYXgiLCJhYnMiLCJ4eCIsInl5IiwiaXNEYXJrIiwibnVtQmxvY2tzIiwiYmxvY2tFY2NMZW4iLCJyYXdDb2Rld29yZHMiLCJudW1TaG9ydEJsb2NrcyIsInNob3J0QmxvY2tMZW4iLCJibG9ja3MiLCJyc0RpdiIsImsiLCJkYXQiLCJlY2MiLCJjb25jYXQiLCJfbG9vcDIiLCJfaTkiLCJibG9jayIsImxlbiIsInJpZ2h0IiwidmVydCIsIm1hc2tQYXR0ZXJuIiwiTUFTS19QQVRURVJOUyIsInJ1bkNvbG9yIiwicnVuWCIsInJ1bkhpc3RvcnkiLCJQRU5BTFRZIiwiTjEiLCJmaW5kZXJQZW5hbHR5QWRkSGlzdG9yeSIsImZpbmRlclBlbmFsdHlDb3VudFBhdHRlcm5zIiwiTjMiLCJmaW5kZXJQZW5hbHR5VGVybWluYXRlQW5kQ291bnQiLCJydW5ZIiwiTjIiLCJkYXJrIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsInJlZHVjZSIsInN1bSIsInRvdGFsIiwiY2VpbCIsIk40Iiwic3RlcCIsInBvcyIsInNwbGljZSIsInZhbGlkU2NvcmUiLCJzY29yZSIsInJ1bkxlbmd0aCIsInBvcCIsInVuc2hpZnQiLCJ2YWwiLCJjb25kIiwiRXJyb3IiLCJRclNlZ21lbnQiLCJiaXREYXRhIiwiTlVNRVJJQ19SRUdFWCIsIkFMUEhBTlVNRVJJQ19SRUdFWCIsIkFMUEhBTlVNRVJJQ19DSEFSU0VUIiwidGVzdCIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJRck1vZGUiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwiY2NiaXRzIiwiSW5maW5pdHkiLCJkaWdpdHMiLCJ0ZW1wIiwiaW5kZXhPZiIsImxldmVsIiwiTEVWRUxTIiwiX0VjYyIsIkxPVyIsIk1FRElVTSIsIlFVQVJUSUxFIiwiSElHSCIsIm51bUJpdHNDaGFyQ291bnQiLCJtb2RlcyIsIl9Rck1vZGUiLCJOVU1FUklDIiwiQUxQSEFOVU1FUklDIiwiQllURSIsIktBTkpJIiwiRUNJIl0sInNvdXJjZXMiOlsiY29tcG9uZW50cy9xcmNvZGUvcXJjb2RlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBRUiBDb2RlIGdlbmVyYXRvciBsaWJyYXJ5XG4gKlxuICogQ29weXJpZ2h0IChjKSBQcm9qZWN0IE5heXVraS4gKE1JVCBMaWNlbnNlKVxuICogaHR0cHM6Ly93d3cubmF5dWtpLmlvL3BhZ2UvcXItY29kZS1nZW5lcmF0b3ItbGlicmFyeVxuICovXG5cbi8vIOazqOaEj+e0ouW8lTDnlKjkuo7loavlhYXvvIzlubborr7nva7kuLrkuIDkuKrpnZ7ms5XlgLxcbmNvbnN0IEVDQ19DT0RFV09SRFNfUEVSX0JMT0NLID0gW1xuICBbXG4gICAgLTEsIDcsIDEwLCAxNSwgMjAsIDI2LCAxOCwgMjAsIDI0LCAzMCwgMTgsIDIwLCAyNCwgMjYsIDMwLCAyMiwgMjQsIDI4LCAzMCwgMjgsIDI4LCAyOCwgMjgsIDMwLFxuICAgIDMwLCAyNiwgMjgsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCxcbiAgXSwgLy8gTG93XG4gIFtcbiAgICAtMSwgMTAsIDE2LCAyNiwgMTgsIDI0LCAxNiwgMTgsIDIyLCAyMiwgMjYsIDMwLCAyMiwgMjIsIDI0LCAyNCwgMjgsIDI4LCAyNiwgMjYsIDI2LCAyNiwgMjgsIDI4LFxuICAgIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCxcbiAgXSwgLy8gTWVkaXVtXG4gIFtcbiAgICAtMSwgMTMsIDIyLCAxOCwgMjYsIDE4LCAyNCwgMTgsIDIyLCAyMCwgMjQsIDI4LCAyNiwgMjQsIDIwLCAzMCwgMjQsIDI4LCAyOCwgMjYsIDMwLCAyOCwgMzAsIDMwLFxuICAgIDMwLCAzMCwgMjgsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCxcbiAgXSwgLy8gUXVhcnRpbGVcbiAgW1xuICAgIC0xLCAxNywgMjgsIDIyLCAxNiwgMjIsIDI4LCAyNiwgMjYsIDI0LCAyOCwgMjQsIDI4LCAyMiwgMjQsIDI0LCAzMCwgMjgsIDI4LCAyNiwgMjgsIDMwLCAyNCwgMzAsXG4gICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLFxuICBdLCAvLyBIaWdoXG5dO1xuY29uc3QgTlVNX0VSUk9SX0NPUlJFQ1RJT05fQkxPQ0tTID0gW1xuICBbXG4gICAgLTEsIDEsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDQsIDQsIDQsIDQsIDQsIDYsIDYsIDYsIDYsIDcsIDgsIDgsIDksIDksIDEwLCAxMiwgMTIsIDEyLCAxMywgMTQsXG4gICAgMTUsIDE2LCAxNywgMTgsIDE5LCAxOSwgMjAsIDIxLCAyMiwgMjQsIDI1LFxuICBdLFxuICBbXG4gICAgLTEsIDEsIDEsIDEsIDIsIDIsIDQsIDQsIDQsIDUsIDUsIDUsIDgsIDksIDksIDEwLCAxMCwgMTEsIDEzLCAxNCwgMTYsIDE3LCAxNywgMTgsIDIwLCAyMSwgMjMsXG4gICAgMjUsIDI2LCAyOCwgMjksIDMxLCAzMywgMzUsIDM3LCAzOCwgNDAsIDQzLCA0NSwgNDcsIDQ5LFxuICBdLFxuICBbXG4gICAgLTEsIDEsIDEsIDIsIDIsIDQsIDQsIDYsIDYsIDgsIDgsIDgsIDEwLCAxMiwgMTYsIDEyLCAxNywgMTYsIDE4LCAyMSwgMjAsIDIzLCAyMywgMjUsIDI3LCAyOSwgMzQsXG4gICAgMzQsIDM1LCAzOCwgNDAsIDQzLCA0NSwgNDgsIDUxLCA1MywgNTYsIDU5LCA2MiwgNjUsIDY4LFxuICBdLFxuICBbXG4gICAgLTEsIDEsIDEsIDIsIDQsIDQsIDQsIDUsIDYsIDgsIDgsIDExLCAxMSwgMTYsIDE2LCAxOCwgMTYsIDE5LCAyMSwgMjUsIDI1LCAyNSwgMzQsIDMwLCAzMiwgMzUsXG4gICAgMzcsIDQwLCA0MiwgNDUsIDQ4LCA1MSwgNTQsIDU3LCA2MCwgNjMsIDY2LCA3MCwgNzQsIDc3LCA4MSxcbiAgXSxcbl07XG5cbi8vIOi/lOWbnuWcqOe7meWumueJiOacrOeahFFS56CB5Lit5Y+v5Lul5a2Y5YKo55qE5pWw5o2u5L2N5pWw77yM5bey5o6S6Zmk5omA5pyJ5Yqf6IO95qih5Z2X44CC6L+Z5YyF5ous5L2Z5pWw5L2N77yM5Zug5q2k5Y+v6IO95LiN5pivOOeahOWAjeaVsOOAgue7k+aenOiMg+WbtOWcqFsyMDgsIDI5NjQ4XeS5i+mXtOOAgui/meWPr+S7peWunueOsOS4uuS4gOS4qjQw6aG555qE5p+l5om+6KGo44CCXG5mdW5jdGlvbiBnZXROdW1SYXdEYXRhTW9kdWxlcyh2ZXI6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICh2ZXIgPCBRckNvZGUuVkVSU0lPTi5NSU4gfHwgdmVyID4gUXJDb2RlLlZFUlNJT04uTUFYKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlcnNpb24gbnVtYmVyIG91dCBvZiByYW5nZScpO1xuICB9XG4gIGxldCByZXN1bHQgPSAoMTYgKiB2ZXIgKyAxMjgpICogdmVyICsgNjQ7XG5cbiAgaWYgKHZlciA+PSAyKSB7XG4gICAgY29uc3QgbnVtQWxpZ24gPSBNYXRoLmZsb29yKHZlciAvIDcpICsgMjtcblxuICAgIHJlc3VsdCAtPSAoMjUgKiBudW1BbGlnbiAtIDEwKSAqIG51bUFsaWduIC0gNTU7XG4gICAgaWYgKHZlciA+PSA3KSByZXN1bHQgLT0gMzY7XG4gIH1cbiAgYXNzZXJ0KDIwOCA8PSByZXN1bHQgJiYgcmVzdWx0IDw9IDI5NjQ4KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIOi/lOWbnuaMh+WumueJiOacrOWPt+WSjOe6oOmUmee6p+WIq+eahCBRUiDnoIHljIXlkKvnmoQgOCDkvY3mlbDmja7noIHlrZfmlbDph4/vvIjljbPpnZ7nuqDplJnnoIHlrZfvvInvvIzkvZnkvY3ooqvoiI3lvIPjgILov5nkuKrml6DnirbmgIHnmoTnuq/lh73mlbDlj6/ku6Xlrp7njrDkuLrkuIDkuKogKDQwKjQpIOWkp+Wwj+eahOafpeaJvuihqOOAglxuZnVuY3Rpb24gZ2V0TnVtRGF0YUNvZGV3b3Jkcyh2ZXI6IG51bWJlciwgZWNsOiBFY2MpOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIE1hdGguZmxvb3IoZ2V0TnVtUmF3RGF0YU1vZHVsZXModmVyKSAvIDgpIC1cbiAgICBFQ0NfQ09ERVdPUkRTX1BFUl9CTE9DS1tlY2wub3JkaW5hbF1bdmVyXSAqIE5VTV9FUlJPUl9DT1JSRUNUSU9OX0JMT0NLU1tlY2wub3JkaW5hbF1bdmVyXVxuICApO1xufVxuLyoqXG4gKiDnlJ/miJDkuIDkuKogUVIg56CBXG4gKiBAZGVzY3JpcHRpb25cbiAqIOagueaNrue7meWumueahOaVsOaNruauteWSjOe8lueggeWPguaVsOeUn+aIkCBRUiDnoIHjgILovpPlh7rml7bkvJroh6rliqjpgInmi6nnu5nlrprojIPlm7TlhoXlsL3lj6/og73lsI/nmoQgUVIg56CB54mI5pysXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFFyU2VnbWVudFtdPn0gc2VncyAtIOimgee8lueggeeahCBRUiDmlbDmja7mrrVcbiAqIEBwYXJhbSB7RWNjfSBlY2wgLSDnuqDplJnnuqfliKtcbiAqIEBwYXJhbSB7SW50UmFuZ2U8MSwgNDE+fSBbbWluVmVyc2lvbj0xXSAtIOacgOWwj+eJiOacrO+8iOm7mOiupOS4uiAx77yJXG4gKiBAcGFyYW0ge0ludFJhbmdlPDEsIDQxPn0gW21heFZlcnNpb249NDBdIC0g5pyA5aSn54mI5pys77yI6buY6K6k5Li6IDQw77yJXG4gKiBAcGFyYW0gey0xIHwgSW50UmFuZ2U8MCwgOD59IFttYXNrPS0xXSAtIOaOqeeggeaooeW8j++8iOm7mOiupOS4uiAtMe+8jOihqOekuuiHquWKqOmAieaLqe+8iVxuICogQHBhcmFtIHtib29sZWFufSBbYm9vc3RFY2w9dHJ1ZV0gLSDlnKjmlbDmja7ku43nhLbpgILlkIjlvZPliY3niYjmnKzlj7fnmoTmg4XlhrXkuIvmj5Dpq5jnuqDplJnnuqfliKvvvIjpu5jorqTkuLogdHJ1Ze+8ieOAglxuICogQHJldHVybnMge1FyQ29kZX0g6L+U5Zue55Sf5oiQ55qEIFFSIOeggeOAglxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU2VnbWVudHMoXG4gIHNlZ3M6IFJlYWRvbmx5PFFyU2VnbWVudFtdPixcbiAgZWNsOiBFY2MsXG4gIG1pblZlcnNpb246IEludFJhbmdlPDEsIDQxPiA9IDEsXG4gIG1heFZlcnNpb246IEludFJhbmdlPDEsIDQxPiA9IDQwLFxuICBtYXNrOiAtMSB8IEludFJhbmdlPDAsIDg+ID0gLTEsXG4gIGJvb3N0RWNsOiBib29sZWFuID0gdHJ1ZSxcbik6IFFyQ29kZSB7XG4gIGlmIChcbiAgICAhKFxuICAgICAgUXJDb2RlLlZFUlNJT04uTUlOIDw9IG1pblZlcnNpb24gJiZcbiAgICAgIG1pblZlcnNpb24gPD0gbWF4VmVyc2lvbiAmJlxuICAgICAgbWF4VmVyc2lvbiA8PSBRckNvZGUuVkVSU0lPTi5NQVhcbiAgICApIHx8XG4gICAgbWFzayA8IC0xIHx8XG4gICAgbWFzayA+IDdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdmFsdWUnKTtcbiAgfVxuICAvLyDmn6Xmib7opoHkvb/nlKjnmoTmnIDlsI/niYjmnKzlj7dcbiAgbGV0IHZlcnNpb246IEludFJhbmdlPDEsIDQxPixcbiAgICBkYXRhVXNlZEJpdHM6IG51bWJlcixcbiAgICBfZWNsID0gZWNsO1xuXG4gIGZvciAodmVyc2lvbiA9IG1pblZlcnNpb247IDsgdmVyc2lvbisrKSB7XG4gICAgY29uc3QgZGF0YUNhcGFjaXR5Qml0cyA9IGdldE51bURhdGFDb2Rld29yZHModmVyc2lvbiwgX2VjbCkgKiA4LCAvLyDlj6/nlKjnmoTmlbDmja7kvY3mlbBcbiAgICAgIHVzZWRCaXRzID0gZ2V0VG90YWxCaXRzKHNlZ3MsIHZlcnNpb24pO1xuXG4gICAgLy8g5om+5Yiw5ZCI6YCC55qE54mI5pys5Y+3XG4gICAgaWYgKHVzZWRCaXRzIDw9IGRhdGFDYXBhY2l0eUJpdHMpIHtcbiAgICAgIGRhdGFVc2VkQml0cyA9IHVzZWRCaXRzO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uID49IG1heFZlcnNpb24pIHtcbiAgICAgIC8vIOiMg+WbtOWGheeahOaJgOacieeJiOacrOmDveaXoOazleWuuee6s+e7meWumuaVsOaNrlxuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RhdGEgdG9vIGxvbmcnKTtcbiAgICB9XG4gIH1cbiAgLy8g5o+Q6auY57qg6ZSZ57qn5YirOyDku47kvY7liLDpq5hcbiAgaWYgKGJvb3N0RWNsKSB7XG4gICAgZm9yIChjb25zdCBuZXdFY2wgb2YgW0VjYy5nZXQoJ01FRElVTScpLCBFY2MuZ2V0KCdRVUFSVElMRScpLCBFY2MuZ2V0KCdISUdIJyldKSB7XG4gICAgICBpZiAoZGF0YVVzZWRCaXRzIDw9IGdldE51bURhdGFDb2Rld29yZHModmVyc2lvbiwgbmV3RWNsKSAqIDgpIF9lY2wgPSBuZXdFY2w7XG4gICAgfVxuICB9XG4gIC8vIOi/nuaOpeaJgOacieauteS7peWIm+W7uuaVsOaNruS9jeWtl+espuS4slxuICBjb25zdCBiYjogbnVtYmVyW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHNlZyBvZiBzZWdzKSB7XG4gICAgYXBwZW5kQml0cyhzZWcubW9kZS5tb2RlQml0cywgNCwgYmIpO1xuICAgIGFwcGVuZEJpdHMoc2VnLm51bUNoYXJzLCBzZWcubW9kZS5udW1DaGFyQ291bnRCaXRzKHZlcnNpb24pLCBiYik7XG4gICAgZm9yIChjb25zdCBiIG9mIHNlZy5nZXREYXRhKCkpIGJiLnB1c2goYik7XG4gIH1cbiAgYXNzZXJ0KGJiLmxlbmd0aCA9PT0gZGF0YVVzZWRCaXRzKTtcbiAgLy8g5re75Yqg57uI5q2i56ym5bm25aGr5YWF6Iez5a2X6IqC6L6555WMKOWmguaenOmAgueUqClcbiAgY29uc3QgZGF0YUNhcGFjaXR5Qml0czogbnVtYmVyID0gZ2V0TnVtRGF0YUNvZGV3b3Jkcyh2ZXJzaW9uLCBfZWNsKSAqIDg7XG5cbiAgYXNzZXJ0KGJiLmxlbmd0aCA8PSBkYXRhQ2FwYWNpdHlCaXRzKTtcbiAgYXBwZW5kQml0cygwLCBNYXRoLm1pbig0LCBkYXRhQ2FwYWNpdHlCaXRzIC0gYmIubGVuZ3RoKSwgYmIpO1xuICBhcHBlbmRCaXRzKDAsICg4IC0gKGJiLmxlbmd0aCAlIDgpKSAlIDgsIGJiKTtcbiAgYXNzZXJ0KGJiLmxlbmd0aCAlIDggPT09IDApO1xuICAvLyDnlKjkuqTmm7/lrZfoioLloavlhYXnm7TliLDovr7liLDmlbDmja7lrrnph49cbiAgZm9yIChsZXQgcGFkQnl0ZSA9IDB4ZWM7IGJiLmxlbmd0aCA8IGRhdGFDYXBhY2l0eUJpdHM7IHBhZEJ5dGUgXj0gMHhlYyBeIDB4MTEpIHtcbiAgICBhcHBlbmRCaXRzKHBhZEJ5dGUsIDgsIGJiKTtcbiAgfVxuICAvLyDku6XlpKfnq6/luo/lsIbkvY3miZPljIXmiJDlrZfoioJcbiAgY29uc3QgZGF0YUNvZGV3b3JkczogbnVtYmVyW10gPSBbXTtcblxuICB3aGlsZSAoZGF0YUNvZGV3b3Jkcy5sZW5ndGggKiA4IDwgYmIubGVuZ3RoKSBkYXRhQ29kZXdvcmRzLnB1c2goMCk7XG4gIGJiLmZvckVhY2goKGIsIGkpID0+IChkYXRhQ29kZXdvcmRzW2kgPj4+IDNdIHw9IGIgPDwgKDcgLSAoaSAmIDcpKSkpO1xuICByZXR1cm4gbmV3IFFyQ29kZSh2ZXJzaW9uLCBfZWNsLCBkYXRhQ29kZXdvcmRzLCBtYXNrKTtcbn1cblxuLy8g6L+U5Zue6KGo56S657uZ5a6a5a2X56ym5Liy55qEVVRGLTjnvJbnoIHlrZfoioLmlbDnu4RcbmZ1bmN0aW9uIHRvVXRmOEJ5dGVBcnJheShzdHI6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIHN0ciA9IGVuY29kZVVSSShzdHIpO1xuICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RyLmNoYXJBdChpKSAhPT0gJyUnKSByZXN1bHQucHVzaChzdHIuY2hhckNvZGVBdChpKSk7XG4gICAgZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChwYXJzZUludChzdHIuc3Vic3RyaW5nKGkgKyAxLCBpICsgMyksIDE2KSk7XG4gICAgICBpICs9IDI7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIOi/lOWbnuS4gOS4quaWsOeahOWPr+WPmOauteWIl+ihqCznlKjkuo7ooajnpLrnu5nlrprnmoRVbmljb2Rl5paH5pys5a2X56ym5Liy44CC57uT5p6c5Y+v6IO95L2/55So5ZCE56eN5q615qih5byP5bm25YiH5o2i5qih5byP5Lul5LyY5YyW5L2N5rWB55qE6ZW/5bqm44CCXG5leHBvcnQgZnVuY3Rpb24gbWFrZVNlZ21lbnRzKHRleHQ6IHN0cmluZyk6IFFyU2VnbWVudFtdIHtcbiAgLy8g6Ieq5Yqo6YCJ5oup5pyA6auY5pWI55qE5q6157yW56CBXG4gIGlmICh0ZXh0ID09PSAnJykgcmV0dXJuIFtdO1xuICBlbHNlIGlmIChpc051bWVyaWModGV4dCkpIHJldHVybiBbbWFrZU51bWVyaWModGV4dCldO1xuICBlbHNlIGlmIChpc0FscGhhbnVtZXJpYyh0ZXh0KSkgcmV0dXJuIFttYWtlQWxwaGFudW1lcmljKHRleHQpXTtcbiAgcmV0dXJuIFttYWtlQnl0ZXModG9VdGY4Qnl0ZUFycmF5KHRleHQpKV07XG59XG5cbmZ1bmN0aW9uIHJlZWRTb2xvbW9uQ29tcHV0ZURpdmlzb3IoZGVncmVlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gIGlmIChkZWdyZWUgPCAxIHx8IGRlZ3JlZSA+IDI1NSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RlZ3JlZSBvdXQgb2YgcmFuZ2UnKTtcbiAgLy8g5aSa6aG55byP57O75pWw5oyJ5LuO6auY5Yiw5L2O55qE5bmC5qyh5a2Y5YKoLOS4jeWMheaLrOWni+e7iOS4ujHnmoTpppbpobnjgIJcbiAgLy8g5L6L5aaC5aSa6aG55byPIHheMyArIDI1NXheMiArIDh4ICsgOTMg5a2Y5YKo5Li6dWludDjmlbDnu4QgWzI1NSwgOCwgOTNd44CCXG4gIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlZ3JlZSAtIDE7IGkrKykgcmVzdWx0LnB1c2goMCk7XG4gIHJlc3VsdC5wdXNoKDEpOyAvLyBTdGFydCBvZmYgd2l0aCB0aGUgbW9ub21pYWwgeF4wXG5cbiAgLy8g6K6h566X5aSa6aG55byP5LmY56evICh4IC0gcl4wKSAqICh4IC0gcl4xKSAqICh4IC0gcl4yKSAqIC4uLiAqICh4IC0gcl57ZGVncmVlLTF9Ke+8jFxuICAvLyDlubboiI3lvIPmnIDpq5jmrKHpobnvvIjor6Xpobnlp4vnu4jkuLogMXheZGVncmVl77yJ44CCXG4gIC8vIOazqOaEjyByID0gMHgwMu+8jOWug+aYr+aciemZkOWfnyBHRigyXjgvMHgxMUQpIOeahOeUn+aIkOWFg+OAglxuICBsZXQgcm9vdCA9IDE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWdyZWU7IGkrKykge1xuICAgIC8vIOWwhuW9k+WJjee7k+aenOS5mOS7pSAoeCAtIHJeaSlcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykge1xuICAgICAgcmVzdWx0W2pdID0gcmVlZFNvbG9tb25NdWx0aXBseShyZXN1bHRbal0sIHJvb3QpO1xuICAgICAgaWYgKGogKyAxIDwgcmVzdWx0Lmxlbmd0aCkgcmVzdWx0W2pdIF49IHJlc3VsdFtqICsgMV07XG4gICAgfVxuICAgIHJvb3QgPSByZWVkU29sb21vbk11bHRpcGx5KHJvb3QsIDB4MDIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIOi/lOWbnue7meWumuaVsOaNruWSjOmZpOaVsOWkmumhueW8j+eahOmHjOW+ty3miYDnvZfpl6jplJnor6/nuqDmraPnoIHlrZfjgIJcbmZ1bmN0aW9uIHJlZWRTb2xvbW9uQ29tcHV0ZVJlbWFpbmRlcihcbiAgZGF0YTogUmVhZG9ubHk8bnVtYmVyW10+LFxuICBkaXZpc29yOiBSZWFkb25seTxudW1iZXJbXT4sXG4pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHJlc3VsdCA9IGRpdmlzb3IubWFwKCgpID0+IDApO1xuXG4gIGZvciAoY29uc3QgYiBvZiBkYXRhKSB7XG4gICAgLy8g5aSa6aG55byP6Zmk5rOVXG4gICAgY29uc3QgZmFjdG9yID0gYiBeIChyZXN1bHQuc2hpZnQoKSBhcyBudW1iZXIpO1xuXG4gICAgcmVzdWx0LnB1c2goMCk7XG4gICAgZGl2aXNvci5mb3JFYWNoKChjb2VmLCBpKSA9PiAocmVzdWx0W2ldIF49IHJlZWRTb2xvbW9uTXVsdGlwbHkoY29lZiwgZmFjdG9yKSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIOi/lOWbnuS4pOS4que7meWumuWfn+WFg+e0oOaooUdGKDJeOC8weDExRCnnmoTkuZjnp6/jgILlj4LmlbDlkoznu5Pmnpxcbi8vIOmDveaYr+aXoOespuWPtzjkvY3mlbTmlbDjgILov5nlj6/ku6Xlrp7njrDkuLoyNTYqMjU25LiqdWludDjmnaHnm67nmoTmn6Xmib7ooajjgIJcbmZ1bmN0aW9uIHJlZWRTb2xvbW9uTXVsdGlwbHkoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoeCA+Pj4gOCAhPT0gMCB8fCB5ID4+PiA4ICE9PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnl0ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgLy8g5L+E572X5pav5Yac5rCR5LmY5rOVXG4gIGxldCB6OiBudW1iZXIgPSAwO1xuXG4gIGZvciAobGV0IGkgPSA3OyBpID49IDA7IGktLSkge1xuICAgIHogPSAoeiA8PCAxKSBeICgoeiA+Pj4gNykgKiAweDExZCk7XG4gICAgeiBePSAoKHkgPj4+IGkpICYgMSkgKiB4O1xuICB9XG4gIGFzc2VydCh6ID4+PiA4ID09PSAwKTtcbiAgcmV0dXJuIHo7XG59XG5cbi8qXG4gKiDnlLEgRGVuc28gV2F2ZSDlj5HmmI7vvIzlubblnKggSVNPL0lFQyAxODAwNCDmoIflh4bkuK3mj4/ov7DjgIJcbiAqIOatpOexu+eahOWunuS+i+ihqOekuuS4gOS4quS4jeWPr+WPmOeahOaaly/kuq7ljZXlhYPmlrnmoLznvZHjgIJcbiAqIOivpeexu+mBteW+qiBRUiDnoIHmqKHlnosgMiDop4TojIPvvIzmlK/mjIHmiYDmnInniYjmnKzvvIjlsLrlr7jvvInku44gMSDliLAgNDDjgIE0IOenjee6oOmUmeetiee6p+S7peWPiiA0IOenjeWtl+espue8lueggeaooeW8j+OAglxuICovXG5jbGFzcyBRckNvZGUge1xuICAvLyBRUiBDb2RlIOeahOaooeWdl++8iGZhbHNlIOihqOekuua1heiJsu+8jHRydWUg6KGo56S65rex6Imy77yJ44CC5p6E6YCg5Ye95pWw5a6M5oiQ5ZCO5LiN5Y+v5pu05pS544CC6YCa6L+HIGdldE1vZHVsZSgpIOiuv+mXruOAglxuICBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZXM6IGJvb2xlYW5bXVtdID0gW107XG4gIC8vIOihqOekuuS4jeWPl+aOqeaooeW9seWTjeeahOWKn+iDveaooeWdl+OAguaehOmAoOWHveaVsOWujOaIkOWQjuWNs+iiq+S4ouW8g+OAglxuICBwcml2YXRlIHJlYWRvbmx5IGlzRnVuY3Rpb246IGJvb2xlYW5bXVtdID0gW107XG4gIC8qKlxuICAgKiDojrflj5YgUVIgQ29kZSDnmoTlrr3luqblkozpq5jluqbvvIzku6XmqKHlnZfkuLrljZXkvY3jgIJcbiAgICog5a695bqm5ZKM6auY5bqm6IyD5Zu05Li6IDIxIOiHsyAxNzfvvIjljIXmi6zovrnnlYzvvInjgILlrr3luqblkozpq5jluqbnmoTorqHnrpflhazlvI/kuLrvvJpgdmVyc2lvbiAqIDQgKyAxN2DjgIJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzaXplOiBudW1iZXI7XG4gIC8qKlxuICAgKiDojrflj5YgUVIgQ29kZSDmiYDkvb/nlKjnmoTmjqnohpzmqKHlvI/nmoTntKLlvJXlgLzjgILmjqnohpzmqKHlvI/ntKLlvJXlgLzojIPlm7TkuLogMCDliLAgN++8iOWMheaLrOi+ueeVjO+8ieOAguWNs+S9vyBRUiBDb2RlIOaYr+mAmui/h+iHquWKqOaOqeiGnO+8iG1hc2sgPSAtMe+8ieeUn+aIkOeahO+8jOacgOe7iOeahOaOqeiGnOWAvOS7jeeEtuaYryAwIOWIsCA3IOS5i+mXtOeahOacieaViOWAvOOAglxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1hc2s6IEludFJhbmdlPDAsIDg+O1xuICAvLyDmlK/mjIHnmoTniYjmnKwsIFFS56CB5qih5Z6LMuagh+WHhlxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZFUlNJT04gPSB7XG4gICAgTUlOOiAxLFxuICAgIE1BWDogNDAsXG4gIH0gYXMgY29uc3Q7XG4gIC8vIOaDqee9muWIhuaVsOW4uOmHjywg55So5LqOIGdldFBlbmFsdHlTY29yZSgp77yM5Zyo6K+E5Lyw5ZOq5Liq5o6p56CB5pyA5L2z5pe25L2/55So44CCXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBFTkFMVFkgPSB7XG4gICAgTjE6IDMsIC8vIOebuOWQjOminOiJsueahOi/nue7reaooeWdl1xuICAgIE4yOiAzLCAvLyAyeDIg5Z2XXG4gICAgTjM6IDQwLCAvLyDmn6Xmib7lmajnsbvkvLzmqKHlvI9cbiAgICBONDogMTAsIC8vIOaal+aooeWdl+avlOS+i1xuICB9IGFzIGNvbnN0O1xuICAvLyDpgInmi6nmnIDkvbPmjqnnoIFcbiAgcHJpdmF0ZSBzZWxlY3RNYXNrKG1zazogLTEgfCBJbnRSYW5nZTwwLCA4Pik6IEludFJhbmdlPDAsIDg+IHtcbiAgICBpZiAobXNrICE9PSAtMSkgcmV0dXJuIG1zaztcbiAgICBsZXQgbWFzazogSW50UmFuZ2U8MCwgOD4gPSAwO1xuICAgIGxldCBtaW5QZW5hbHR5ID0gMTAwMDAwMDAwMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAvLyDoh6rliqjpgInmi6nmnIDkvbPmjqnmqKFcbiAgICAgIHRoaXMuYXBwbHlNYXNrKGkpO1xuICAgICAgdGhpcy5kcmF3Rm9ybWF0Qml0cyhpKTtcbiAgICAgIGNvbnN0IHBlbmFsdHkgPSB0aGlzLmdldFBlbmFsdHlTY29yZSgpO1xuXG4gICAgICBpZiAocGVuYWx0eSA8IG1pblBlbmFsdHkpIHtcbiAgICAgICAgbWFzayA9IGkgYXMgSW50UmFuZ2U8MCwgOD47XG4gICAgICAgIG1pblBlbmFsdHkgPSBwZW5hbHR5O1xuICAgICAgfVxuICAgICAgLy8g5pKk6ZSA5o6p56CBXG4gICAgICB0aGlzLmFwcGx5TWFzayhpKTtcbiAgICB9XG4gICAgYXNzZXJ0KDAgPD0gbWFzayAmJiBtYXNrIDw9IDcpO1xuICAgIHJldHVybiBtYXNrO1xuICB9XG4gIC8vIOS9v+eUqOe7meWumueahOeJiOacrOWPt+OAgemUmeivr+e6oOato+e6p+WIq+OAgeaVsOaNrueggeWtl+iKguWSjOaOqeiGnOe8luWPt+WIm+W7uuS4gOS4quaWsOeahFFS56CB44CCXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAvLyDmraQgUVIgQ29kZSDnmoTniYjmnKzlj7fvvIzojIPlm7TkuLogMSDliLAgNDDvvIjlkKvvvIk76K+l5YC85Yaz5a6a5LqG5LqM57u056CB55qE5bC65a+444CCXG4gICAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IEludFJhbmdlPDEsIDQxPixcbiAgICAvLyDplJnor6/nuqDmraPnuqfliKvjgIJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6IEVjYyxcbiAgICBkYXRhQ29kZXdvcmRzOiBSZWFkb25seTxudW1iZXJbXT4sXG4gICAgbXNrOiAtMSB8IEludFJhbmdlPDAsIDg+LFxuICApIHtcbiAgICAvLyDpqozor4HmnoTpgKDlh73mlbDlj4LmlbBcbiAgICBpZiAodmVyc2lvbiA8IFFyQ29kZS5WRVJTSU9OLk1JTiB8fCB2ZXJzaW9uID4gUXJDb2RlLlZFUlNJT04uTUFYKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVmVyc2lvbiB2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgICB9XG4gICAgaWYgKG1zayA8IC0xIHx8IG1zayA+IDcpIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXNrIHZhbHVlIG91dCBvZiByYW5nZScpO1xuICAgIC8vIOWIneWni+WMllxuICAgIHRoaXMuc2l6ZSA9IHZlcnNpb24gKiA0ICsgMTc7XG4gICAgLy8g5Yib5bu65qih5Z2X5pWw57uEXG4gICAgLy8g5Yid5aeL5YyW5Lik5Liq572R5qC85Li6IHNpemUqc2l6ZSDlpKflsI/nmoTluIPlsJTmlbDnu4TvvIzliJ3lp4vlgLzkuLogZmFsc2Ug5YWo5Li65rWF6ImyXG4gICAgY29uc3Qgcm93ID0gQXJyYXkodGhpcy5zaXplKS5maWxsKGZhbHNlKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIHtcbiAgICAgIHRoaXMubW9kdWxlc1tpXSA9IHJvdy5zbGljZSgpO1xuICAgICAgdGhpcy5pc0Z1bmN0aW9uW2ldID0gcm93LnNsaWNlKCk7XG4gICAgfVxuICAgIC8vIOiuoeeul+mUmeivr+e6oOato+egge+8iEVDQ++8ie+8jOe7mOWItuaooeWdl1xuICAgIHRoaXMuZHJhd0Z1bmN0aW9uUGF0dGVybnMoKTtcbiAgICAvLyDmnoTlu7ogUVIg56CB55qE5Li76KaB5rWB56iLXG4gICAgY29uc3QgYWxsQ29kZXdvcmRzID0gdGhpcy5hZGRFY2NBbmRJbnRlcmxlYXZlKGRhdGFDb2Rld29yZHMpO1xuXG4gICAgdGhpcy5kcmF3Q29kZXdvcmRzKGFsbENvZGV3b3Jkcyk7XG4gICAgLy8g56Gu5a6a5pyA57uI5o6p56CBXG4gICAgdGhpcy5tYXNrID0gdGhpcy5zZWxlY3RNYXNrKG1zayk7XG4gICAgLy8g5bqU55So5pyA57uI5o6p56CB5bm257uY5Yi25qC85byP5L2NXG4gICAgdGhpcy5hcHBseU1hc2sodGhpcy5tYXNrKTtcbiAgICB0aGlzLmRyYXdGb3JtYXRCaXRzKHRoaXMubWFzayk7XG4gICAgLy8g5p6E6YCg5a6M5oiQLCDkuKLlvINcbiAgICB0aGlzLmlzRnVuY3Rpb24gPSBbXTtcbiAgfVxuXG4gIC8qIC0tIOiuv+mXruWZqOaWueazlSAtLSovXG4gIC8vIOi/lOWbnue7meWumuWdkOagh+WkhOaooeWdl++8iOWDj+e0oHh555qE6aKc6Imy77yM5rWF6Imy5pe25Li6ZmFsc2XvvIzmt7HoibLml7bkuLp0cnVlKTvlpoLmnpznu5nlrprnmoTlnZDmoIfotoXlh7rovrnnlYzvvIzliJnov5Tlm55mYWxzZe+8iOa1heiJsu+8ieOAglxuICBwdWJsaWMgZ2V0TW9kdWxlKHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHggPj0gMCAmJiB4IDwgdGhpcy5zaXplICYmIHkgPj0gMCAmJiB5IDwgdGhpcy5zaXplICYmIHRoaXMubW9kdWxlc1t5XVt4XTtcbiAgfVxuICAvKiAtLSDmnoTpgKDlh73mlbDnmoTnp4HmnInovoXliqnmlrnms5XvvJrnu5jliLblip/og73mqKHlnZcgLS0qL1xuXG4gIC8vIOivu+WPluivpeWvueixoeeahOeJiOacrOWtl+aute+8jOW5tue7mOWItuWSjOagh+iusOaJgOacieWKn+iDveaooeWdl+OAglxuICBwcml2YXRlIGRyYXdGdW5jdGlvblBhdHRlcm5zKCk6IHZvaWQge1xuICAgIC8vIOe7mOWItuawtOW5s+WSjOWeguebtOWumuaXtuWbvuahiFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zaXplOyBpKyspIHtcbiAgICAgIGNvbnN0IGZsYWcgPSBpICUgMiA9PT0gMDtcblxuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg2LCBpLCBmbGFnKTtcbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoaSwgNiwgZmxhZyk7XG4gICAgfVxuICAgIC8vIOe7mOWItiAzIOS4quWumuS9jeWbvuahiO+8iOmZpOS6huWPs+S4i+inkueahOaJgOacieinkuiQve+8m+S8muimhuebluS4gOS6m+WumuaXtuaooeWdl++8iVxuICAgIHRoaXMuZHJhd0ZpbmRlclBhdHRlcm4oMywgMyk7XG4gICAgY29uc3QgeSA9IHRoaXMuc2l6ZSAtIDQ7XG5cbiAgICB0aGlzLmRyYXdGaW5kZXJQYXR0ZXJuKHksIDMpO1xuICAgIHRoaXMuZHJhd0ZpbmRlclBhdHRlcm4oMywgeSk7XG4gICAgLy8g57uY5Yi25aSa5Liq5a+56b2Q5Zu+5qGIXG4gICAgY29uc3QgYWxpZ25QYXRQb3MgPSB0aGlzLmdldEFsaWdubWVudFBhdHRlcm5Qb3NpdGlvbnMoKTtcbiAgICBjb25zdCBudW1BbGlnbiA9IGFsaWduUGF0UG9zLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQWxpZ247IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1BbGlnbjsgaisrKSB7XG4gICAgICAgIC8vIOS4jeWcqOS4ieS4quWumuS9jeWbvuahiOeahOinkuiQveWkhOe7mOWItlxuICAgICAgICBpZiAoXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIChpID09PSAwICYmIGogPT09IDApIHx8XG4gICAgICAgICAgICAoaSA9PT0gMCAmJiBqID09PSBudW1BbGlnbiAtIDEpIHx8XG4gICAgICAgICAgICAoaSA9PT0gbnVtQWxpZ24gLSAxICYmIGogPT09IDApXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmRyYXdBbGlnbm1lbnRQYXR0ZXJuKGFsaWduUGF0UG9zW2ldLCBhbGlnblBhdFBvc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8g57uY5Yi26YWN572u5pWw5o2uXG4gICAgdGhpcy5kcmF3Rm9ybWF0Qml0cygwKTsgLy8g5Li05pe25o6p56CB5YC877yb56iN5ZCO5Zyo5p6E6YCg5Ye95pWw5Lit5Lya6KKr6KaG55uWXG4gICAgdGhpcy5kcmF3VmVyc2lvbigpO1xuICB9XG5cbiAgLy8g57uY5Yi25qC85byP5L2N55qE5Lik5Liq5Ymv5pys77yI5bim5pyJ5YW26Ieq5bex55qE6ZSZ6K+v57qg5q2j56CB77yJXG4gIC8vIOWfuuS6jue7meWumueahOaOqeeggeWSjOivpeWvueixoeeahOmUmeivr+e6oOato+e6p+WIq+Wtl+auteOAglxuICBwcml2YXRlIGRyYXdGb3JtYXRCaXRzKG1hc2s6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIOiuoeeul+mUmeivr+e6oOato+eggeW5tuaJk+WMheS9jVxuICAgIGNvbnN0IGRhdGE6IG51bWJlciA9ICh0aGlzLmVycm9yQ29ycmVjdGlvbkxldmVsLmZvcm1hdEJpdHMgPDwgMykgfCBtYXNrOyAvLyBlcnJDb3JyTHZsIOaYryB1aW50MiDnsbvlnovvvIxtYXNrIOaYryB1aW50MyDnsbvlnotcbiAgICBsZXQgcmVtOiBudW1iZXIgPSBkYXRhO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSByZW0gPSAocmVtIDw8IDEpIF4gKChyZW0gPj4+IDkpICogMHg1MzcpO1xuICAgIGNvbnN0IGJpdHMgPSAoKGRhdGEgPDwgMTApIHwgcmVtKSBeIDB4NTQxMjsgLy8gdWludDE1XG5cbiAgICBhc3NlcnQoYml0cyA+Pj4gMTUgPT09IDApO1xuICAgIC8vIOe7mOWItuesrOS4gOS4quWJr+acrFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDU7IGkrKykgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg4LCBpLCBnZXRCaXQoYml0cywgaSkpO1xuICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoOCwgNywgZ2V0Qml0KGJpdHMsIDYpKTtcbiAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKDgsIDgsIGdldEJpdChiaXRzLCA3KSk7XG4gICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSg3LCA4LCBnZXRCaXQoYml0cywgOCkpO1xuICAgIGZvciAobGV0IGkgPSA5OyBpIDwgMTU7IGkrKykge1xuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSgxNCAtIGksIDgsIGdldEJpdChiaXRzLCBpKSk7XG4gICAgfVxuICAgIC8vIOe7mOWItuesrOS6jOS4quWJr+acrFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKHRoaXMuc2l6ZSAtIDEgLSBpLCA4LCBnZXRCaXQoYml0cywgaSkpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gODsgaSA8IDE1OyBpKyspIHtcbiAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoOCwgdGhpcy5zaXplIC0gMTUgKyBpLCBnZXRCaXQoYml0cywgaSkpO1xuICAgIH1cbiAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKDgsIHRoaXMuc2l6ZSAtIDgsIHRydWUpOyAvLyBBbHdheXMgZGFya1xuICB9XG5cbiAgLy8g5aaC5p6cNyA8PSB2ZXJzaW9uIDw9IDQw77yM5YiZ57uY5Yi254mI5pys5L2N55qE5Lik5Liq5Ymv5pys77yI5bim5pyJ5YW26Ieq5bex55qE6ZSZ6K+v57qg5q2j56CB77yJ77yMXG4gIC8vIOWfuuS6juivpeWvueixoeeahOeJiOacrOWtl+auteOAglxuICBwcml2YXRlIGRyYXdWZXJzaW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZlcnNpb24gPCA3KSByZXR1cm47XG5cbiAgICAvLyDorqHnrpfplJnor6/nuqDmraPnoIHlubbmiZPljIXkvY1cbiAgICBsZXQgcmVtOiBudW1iZXIgPSB0aGlzLnZlcnNpb247IC8vIHZlcnNpb24g5pivIHVpbnQ2IOexu+Wei++8jOiMg+WbtOWcqCBbNywgNDBdXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEyOyBpKyspIHJlbSA9IChyZW0gPDwgMSkgXiAoKHJlbSA+Pj4gMTEpICogMHgxZjI1KTtcbiAgICBjb25zdCBiaXRzOiBudW1iZXIgPSAodGhpcy52ZXJzaW9uIDw8IDEyKSB8IHJlbTsgLy8gdWludDE4XG5cbiAgICBhc3NlcnQoYml0cyA+Pj4gMTggPT09IDApO1xuICAgIC8vIOe7mOWItuS4pOS4quWJr+acrFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTg7IGkrKykge1xuICAgICAgY29uc3QgY29sb3I6IGJvb2xlYW4gPSBnZXRCaXQoYml0cywgaSk7XG4gICAgICBjb25zdCBhOiBudW1iZXIgPSB0aGlzLnNpemUgLSAxMSArIChpICUgMyk7XG4gICAgICBjb25zdCBiOiBudW1iZXIgPSBNYXRoLmZsb29yKGkgLyAzKTtcblxuICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZShhLCBiLCBjb2xvcik7XG4gICAgICB0aGlzLnNldEZ1bmN0aW9uTW9kdWxlKGIsIGEsIGNvbG9yKTtcbiAgICB9XG4gIH1cbiAgLy8g57uY5Yi25LiA5LiqOSo555qE5a6a5L2N5Zu+5qGI77yM5YyF5ous6L6555WM5YiG6ZqU56ym77yM5Lit5b+D5qih5Z2X5L2N5LqOKHgsIHkp44CC5qih5Z2X5Y+v5Lul6LaF5Ye66L6555WM44CCXG4gIHByaXZhdGUgZHJhd0ZpbmRlclBhdHRlcm4oeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBkeSA9IC00OyBkeSA8PSA0OyBkeSsrKSB7XG4gICAgICBmb3IgKGxldCBkeCA9IC00OyBkeCA8PSA0OyBkeCsrKSB7XG4gICAgICAgIGNvbnN0IGRpc3QgPSBNYXRoLm1heChNYXRoLmFicyhkeCksIE1hdGguYWJzKGR5KSksIC8vIENoZWJ5c2hldi/ml6DnqbfojIPmlbBcbiAgICAgICAgICB4eCA9IHggKyBkeCxcbiAgICAgICAgICB5eSA9IHkgKyBkeTtcblxuICAgICAgICBpZiAoMCA8PSB4eCAmJiB4eCA8IHRoaXMuc2l6ZSAmJiAwIDw9IHl5ICYmIHl5IDwgdGhpcy5zaXplKSB7XG4gICAgICAgICAgdGhpcy5zZXRGdW5jdGlvbk1vZHVsZSh4eCwgeXksIGRpc3QgIT09IDIgJiYgZGlzdCAhPT0gNCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8g57uY5Yi25LiA5LiqNSo155qE5a+56b2Q5Zu+5qGI77yM5Lit5b+D5qih5Z2X5L2N5LqOKHgsIHkp44CC5omA5pyJ5qih5Z2X5b+F6aG75Zyo6L6555WM5YaF44CCXG4gIHByaXZhdGUgZHJhd0FsaWdubWVudFBhdHRlcm4oeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBkeSA9IC0yOyBkeSA8PSAyOyBkeSsrKSB7XG4gICAgICBmb3IgKGxldCBkeCA9IC0yOyBkeCA8PSAyOyBkeCsrKSB7XG4gICAgICAgIHRoaXMuc2V0RnVuY3Rpb25Nb2R1bGUoeCArIGR4LCB5ICsgZHksIE1hdGgubWF4KE1hdGguYWJzKGR4KSwgTWF0aC5hYnMoZHkpKSAhPT0gMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIOiuvue9ruaooeWdl+eahOminOiJsuW5tuWwhuWFtuagh+iusOS4uuWKn+iDveaooeWdl+OAguS7heeUseaehOmAoOWHveaVsOS9v+eUqOOAguWdkOagh+W/hemhu+WcqOi+ueeVjOWGheOAglxuICBwcml2YXRlIHNldEZ1bmN0aW9uTW9kdWxlKHg6IG51bWJlciwgeTogbnVtYmVyLCBpc0Rhcms6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm1vZHVsZXNbeV1beF0gPSBpc0Rhcms7XG4gICAgdGhpcy5pc0Z1bmN0aW9uW3ldW3hdID0gdHJ1ZTtcbiAgfVxuICAvLyDov5Tlm57kuIDkuKrmlrDnmoTlrZfoioLlrZfnrKbkuLLvvIzooajnpLrlhbfmnInpgILlvZPplJnor6/nuqDmraPnoIHlrZfnmoTnu5nlrprmlbDmja7vvIzln7rkuo7or6Xlr7nosaHnmoTniYjmnKzlkozplJnor6/nuqDmraPnuqfliKvjgIJcbiAgcHJpdmF0ZSBhZGRFY2NBbmRJbnRlcmxlYXZlKGRhdGE6IFJlYWRvbmx5PG51bWJlcltdPik6IG51bWJlcltdIHtcbiAgICBjb25zdCB2ZXIgPSB0aGlzLnZlcnNpb24sXG4gICAgICBlY2wgPSB0aGlzLmVycm9yQ29ycmVjdGlvbkxldmVsO1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoICE9PSBnZXROdW1EYXRhQ29kZXdvcmRzKHZlciwgZWNsKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgLy8g6K6h566X5Y+C5pWw5pWw5YC8XG4gICAgY29uc3QgbnVtQmxvY2tzID0gTlVNX0VSUk9SX0NPUlJFQ1RJT05fQkxPQ0tTW2VjbC5vcmRpbmFsXVt2ZXJdLFxuICAgICAgYmxvY2tFY2NMZW4gPSBFQ0NfQ09ERVdPUkRTX1BFUl9CTE9DS1tlY2wub3JkaW5hbF1bdmVyXSxcbiAgICAgIHJhd0NvZGV3b3JkcyA9IE1hdGguZmxvb3IoZ2V0TnVtUmF3RGF0YU1vZHVsZXModmVyKSAvIDgpLFxuICAgICAgbnVtU2hvcnRCbG9ja3MgPSBudW1CbG9ja3MgLSAocmF3Q29kZXdvcmRzICUgbnVtQmxvY2tzKSxcbiAgICAgIHNob3J0QmxvY2tMZW4gPSBNYXRoLmZsb29yKHJhd0NvZGV3b3JkcyAvIG51bUJsb2NrcyksXG4gICAgICBibG9ja3M6IG51bWJlcltdW10gPSBbXSwgLy8g5bCG5pWw5o2u5YiG5Ymy5oiQ5Z2X5bm25Li65q+P5Liq5Z2X6ZmE5YqgRUNDXG4gICAgICByc0RpdiA9IHJlZWRTb2xvbW9uQ29tcHV0ZURpdmlzb3IoYmxvY2tFY2NMZW4pO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGsgPSAwOyBpIDwgbnVtQmxvY2tzOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdCA9IGRhdGEuc2xpY2UoaywgayArIHNob3J0QmxvY2tMZW4gLSBibG9ja0VjY0xlbiArIChpIDwgbnVtU2hvcnRCbG9ja3MgPyAwIDogMSkpO1xuICAgICAgY29uc3QgZWNjID0gcmVlZFNvbG9tb25Db21wdXRlUmVtYWluZGVyKGRhdCwgcnNEaXYpO1xuXG4gICAgICBrICs9IGRhdC5sZW5ndGg7XG4gICAgICBpZiAoaSA8IG51bVNob3J0QmxvY2tzKSBkYXQucHVzaCgwKTtcbiAgICAgIGJsb2Nrcy5wdXNoKGRhdC5jb25jYXQoZWNjKSk7XG4gICAgfVxuICAgIC8vICDlsIbmr4/kuKrlnZfnmoTlrZfoioLkuqTplJko6ICM5LiN5piv6L+e5o6lKeaIkOWNleS4quW6j+WIl1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxvY2tzWzBdLmxlbmd0aDsgaSsrKSB7XG4gICAgICBibG9ja3MuZm9yRWFjaCgoYmxvY2ssIGopID0+IHtcbiAgICAgICAgLy8g6Lez6L+H55+t5Z2X5Lit55qE5aGr5YWF5a2X6IqCXG4gICAgICAgIGlmIChpICE9PSBzaG9ydEJsb2NrTGVuIC0gYmxvY2tFY2NMZW4gfHwgaiA+PSBudW1TaG9ydEJsb2Nrcykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGJsb2NrW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSByYXdDb2Rld29yZHMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8g5bCG57uZ5a6a55qEOOS9jeeggeWtl+W6j+WIlyjmlbDmja7lkozplJnor6/nuqDmraMp57uY5Yi25Yiw5q2kUVLnoIHnmoTmlbTkuKpcbiAgLy8g5pWw5o2u5Yy65Z+f5LiK44CC5Zyo6LCD55So5q2k5pa55rOV5LmL5YmN6ZyA6KaB5qCH6K6w5Yqf6IO95qih5Z2X44CCXG4gIHByaXZhdGUgZHJhd0NvZGV3b3JkcyhkYXRhOiBSZWFkb25seTxudW1iZXJbXT4pOiB2b2lkIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggIT09IE1hdGguZmxvb3IoZ2V0TnVtUmF3RGF0YU1vZHVsZXModGhpcy52ZXJzaW9uKSAvIDgpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBsZXQgaSA9IDA7IC8vIOaVsOaNrueahOS9jee0ouW8lVxuICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoICogODtcblxuICAgIC8vIOaJp+ihjOeJueauiueahOS5i+Wtl+W9ouaJq+aPj1xuICAgIGZvciAobGV0IHJpZ2h0ID0gdGhpcy5zaXplIC0gMTsgcmlnaHQgPj0gMTsgcmlnaHQgLT0gMikge1xuICAgICAgLy8g5q+P5a+55YiX5Lit5Y+z5YiX55qE57Si5byVXG4gICAgICBpZiAocmlnaHQgPT09IDYpIHJpZ2h0ID0gNTtcbiAgICAgIGZvciAobGV0IHZlcnQgPSAwOyB2ZXJ0IDwgdGhpcy5zaXplOyB2ZXJ0KyspIHtcbiAgICAgICAgLy8g5Z6C55u06K6h5pWw5ZmoXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMjsgaisrKSB7XG4gICAgICAgICAgY29uc3QgeCA9IHJpZ2h0IC0gaiwgLy8g5a6e6ZmF55qEeOWdkOagh1xuICAgICAgICAgICAgeSA9ICgocmlnaHQgKyAxKSAmIDIpID09PSAwID8gdGhpcy5zaXplIC0gMSAtIHZlcnQgOiB2ZXJ0OyAvLyDlrp7pmYXnmoR55Z2Q5qCHXG5cbiAgICAgICAgICBpZiAoIXRoaXMuaXNGdW5jdGlvblt5XVt4XSAmJiBpIDwgbGVuKSB7XG4gICAgICAgICAgICB0aGlzLm1vZHVsZXNbeV1beF0gPSBnZXRCaXQoZGF0YVtpID4+PiAzXSwgNyAtIChpICYgNykpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyDlpoLmnpzmraRRUueggeacieS7u+S9leWJqeS9meS9jSgw5YiwN+S9jSnvvIzlroPku6zooqvmnoTpgKDlh73mlbDotYvlgLzkuLowL2ZhbHNlL+a1heiJsu+8jOS4lOatpOaWueazleS4jeS8muaUueWPmOWug+S7rFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFzc2VydChpID09PSBsZW4pO1xuICB9XG4gIC8vIOaOqeeggeaooeW8j+WumuS5iVxuICBwcml2YXRlIHJlYWRvbmx5IE1BU0tfUEFUVEVSTlM6ICgoXzogbnVtYmVyLCB5OiBudW1iZXIpID0+IGJvb2xlYW4pW10gPSBbXG4gICAgKHgsIHkpID0+ICh4ICsgeSkgJSAyID09PSAwLFxuICAgIChfLCB5KSA9PiB5ICUgMiA9PT0gMCxcbiAgICAoeCkgPT4geCAlIDMgPT09IDAsXG4gICAgKHgsIHkpID0+ICh4ICsgeSkgJSAzID09PSAwLFxuICAgICh4LCB5KSA9PiAoTWF0aC5mbG9vcih4IC8gMykgKyBNYXRoLmZsb29yKHkgLyAyKSkgJSAyID09PSAwLFxuICAgICh4LCB5KSA9PiAoKHggKiB5KSAlIDIpICsgKCh4ICogeSkgJSAzKSA9PT0gMCxcbiAgICAoeCwgeSkgPT4gKCgoeCAqIHkpICUgMikgKyAoKHggKiB5KSAlIDMpKSAlIDIgPT09IDAsXG4gICAgKHgsIHkpID0+ICgoKHggKyB5KSAlIDIpICsgKCh4ICogeSkgJSAzKSkgJSAyID09PSAwLFxuICBdIGFzIGNvbnN0O1xuICAvLyDkvb/nlKjnu5nlrprnmoTmjqnnoIHmqKHlvI/lr7nmraRRUueggeS4reeahOeggeWtl+aooeWdl+i/m+ihjFhPUui/kOeul+OAguWcqOaOqeeggeS5i+WJjeW/hemhu+agh+iusOWKn+iDveaooeWdl+W5tue7mOWItueggeWtl+S9jeOAglxuICBwcml2YXRlIGFwcGx5TWFzayhtYXNrOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAobWFzayA8IDAgfHwgbWFzayA+IDcpIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXNrIHZhbHVlIG91dCBvZiByYW5nZScpO1xuICAgIGNvbnN0IG1hc2tQYXR0ZXJuID0gdGhpcy5NQVNLX1BBVFRFUk5TW21hc2tdO1xuXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNpemU7IHkrKykge1xuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnNpemU7IHgrKykge1xuICAgICAgICBpZiAoIXRoaXMuaXNGdW5jdGlvblt5XVt4XSAmJiBtYXNrUGF0dGVybih4LCB5KSkge1xuICAgICAgICAgIHRoaXMubW9kdWxlc1t5XVt4XSA9ICF0aGlzLm1vZHVsZXNbeV1beF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8g6K6h566X5bm26L+U5Zue5Z+65LqO5q2kIFFSIOeggeW9k+WJjeaooeWdl+eKtuaAgeeahOaDqee9muWIhuaVsOOAgueUqOS6juiHquWKqOaOqeeggemAieaLqeeul+azle+8jOS7peaJvuWIsOS6p+eUn+acgOS9juWIhuaVsOeahOaOqeeggeaooeW8j+OAglxuICBwcml2YXRlIGdldFBlbmFsdHlTY29yZSgpOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQ6IG51bWJlciA9IDA7XG5cbiAgICAvLyDooYzkuK3lhbfmnInnm7jlkIzpopzoibLnmoTnm7jpgrvmqKHlnZfvvIzku6Xlj4rmn6Xmib7lmajnsbvkvLznmoTmqKHlvI9cbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuc2l6ZTsgeSsrKSB7XG4gICAgICBsZXQgcnVuQ29sb3IgPSBmYWxzZTtcbiAgICAgIGxldCBydW5YID0gMDtcbiAgICAgIGNvbnN0IHJ1bkhpc3RvcnkgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMF07XG5cbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy5zaXplOyB4KyspIHtcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlc1t5XVt4XSA9PT0gcnVuQ29sb3IpIHtcbiAgICAgICAgICBydW5YKys7XG4gICAgICAgICAgaWYgKHJ1blggPT09IDUpIHJlc3VsdCArPSBRckNvZGUuUEVOQUxUWS5OMTtcbiAgICAgICAgICBlbHNlIGlmIChydW5YID4gNSkgcmVzdWx0Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5maW5kZXJQZW5hbHR5QWRkSGlzdG9yeShydW5YLCBydW5IaXN0b3J5KTtcbiAgICAgICAgICBpZiAoIXJ1bkNvbG9yKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdGhpcy5maW5kZXJQZW5hbHR5Q291bnRQYXR0ZXJucyhydW5IaXN0b3J5KSAqIFFyQ29kZS5QRU5BTFRZLk4zO1xuICAgICAgICAgIH1cbiAgICAgICAgICBydW5Db2xvciA9IHRoaXMubW9kdWxlc1t5XVt4XTtcbiAgICAgICAgICBydW5YID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0ICs9IHRoaXMuZmluZGVyUGVuYWx0eVRlcm1pbmF0ZUFuZENvdW50KHJ1bkNvbG9yLCBydW5YLCBydW5IaXN0b3J5KSAqIFFyQ29kZS5QRU5BTFRZLk4zO1xuICAgIH1cbiAgICAvLyDliJfkuK3lhbfmnInnm7jlkIzpopzoibLnmoTnm7jpgrvmqKHlnZfvvIzku6Xlj4rmn6Xmib7lmajnsbvkvLznmoTmqKHlvI9cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMuc2l6ZTsgeCsrKSB7XG4gICAgICBsZXQgcnVuQ29sb3IgPSBmYWxzZTtcbiAgICAgIGxldCBydW5ZID0gMDtcbiAgICAgIGNvbnN0IHJ1bkhpc3RvcnkgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMF07XG5cbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zaXplOyB5KyspIHtcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlc1t5XVt4XSA9PT0gcnVuQ29sb3IpIHtcbiAgICAgICAgICBydW5ZKys7XG4gICAgICAgICAgaWYgKHJ1blkgPT09IDUpIHJlc3VsdCArPSBRckNvZGUuUEVOQUxUWS5OMTtcbiAgICAgICAgICBlbHNlIGlmIChydW5ZID4gNSkgcmVzdWx0Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5maW5kZXJQZW5hbHR5QWRkSGlzdG9yeShydW5ZLCBydW5IaXN0b3J5KTtcbiAgICAgICAgICBpZiAoIXJ1bkNvbG9yKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdGhpcy5maW5kZXJQZW5hbHR5Q291bnRQYXR0ZXJucyhydW5IaXN0b3J5KSAqIFFyQ29kZS5QRU5BTFRZLk4zO1xuICAgICAgICAgIH1cbiAgICAgICAgICBydW5Db2xvciA9IHRoaXMubW9kdWxlc1t5XVt4XTtcbiAgICAgICAgICBydW5ZID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0ICs9IHRoaXMuZmluZGVyUGVuYWx0eVRlcm1pbmF0ZUFuZENvdW50KHJ1bkNvbG9yLCBydW5ZLCBydW5IaXN0b3J5KSAqIFFyQ29kZS5QRU5BTFRZLk4zO1xuICAgIH1cbiAgICAvLyAyKjIg5Z2X55qE5qih5Z2X5YW355u45ZCM55qE6aKc6ImyXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNpemUgLSAxOyB5KyspIHtcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy5zaXplIC0gMTsgeCsrKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5tb2R1bGVzW3ldW3hdO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2xvciA9PT0gdGhpcy5tb2R1bGVzW3ldW3ggKyAxXSAmJlxuICAgICAgICAgIGNvbG9yID09PSB0aGlzLm1vZHVsZXNbeSArIDFdW3hdICYmXG4gICAgICAgICAgY29sb3IgPT09IHRoaXMubW9kdWxlc1t5ICsgMV1beCArIDFdXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc3VsdCArPSBRckNvZGUuUEVOQUxUWS5OMjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyDmmpfmqKHlnZflkozkuq7mqKHlnZfnmoTlubPooaFcbiAgICBsZXQgZGFyazogbnVtYmVyID0gMDtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMubW9kdWxlcykge1xuICAgICAgZGFyayA9IHJvdy5yZWR1Y2UoKHN1bSwgY29sb3IpID0+IHN1bSArIChjb2xvciA/IDEgOiAwKSwgZGFyayk7XG4gICAgfVxuICAgIC8vIOazqOaEj++8jHNpemUg5piv5aWH5pWw77yM5omA5LulIGRhcmsvdG90YWwgIT09IDEvMlxuICAgIGNvbnN0IHRvdGFsOiBudW1iZXIgPSB0aGlzLnNpemUgKiB0aGlzLnNpemU7XG4gICAgLy8g6K6h566X5pyA5bCP55qE5pW05pWwIGsgPj0gMO+8jOS9v+W+lyAoNDUtNWspJSA8PSBkYXJrL3RvdGFsIDw9ICg1NSs1ayklXG4gICAgY29uc3QgazogbnVtYmVyID0gTWF0aC5jZWlsKE1hdGguYWJzKGRhcmsgKiAyMCAtIHRvdGFsICogMTApIC8gdG90YWwpIC0gMTtcblxuICAgIGFzc2VydCgwIDw9IGsgJiYgayA8PSA5KTtcbiAgICByZXN1bHQgKz0gayAqIFFyQ29kZS5QRU5BTFRZLk40O1xuICAgIGFzc2VydCgwIDw9IHJlc3VsdCAmJiByZXN1bHQgPD0gMjU2ODg4OCk7IC8vIOWfuuS6jum7mOiupOWAvOeahOmdnue0p+WvhuS4iumZkFxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8g6L+U5Zue5LiA5Liq5Y2H5bqP55qE5L2N572u5YiX6KGo77yM6KGo56S65q2k54mI5pys5Y+355qE5a+56b2Q5qih5byP5L2N572u44CC5q+P5Liq5L2N572u5ZyoIFswLDE3Nykg6IyD5Zu05YaF77yM5bm255So5LqO6KGM5ZKM5YiX6L2044CC6L+Z5Y+v5Lul5a6e546w5Li6IDQwIOS4quWPr+WPmOmVv+W6puaVtOaVsOWIl+ihqOeahOafpeaJvuihqOOAglxuICBwcml2YXRlIGdldEFsaWdubWVudFBhdHRlcm5Qb3NpdGlvbnMoKTogbnVtYmVyW10ge1xuICAgIGlmICh0aGlzLnZlcnNpb24gPT09IDEpIHJldHVybiBbXTtcbiAgICBjb25zdCBudW1BbGlnbiA9IE1hdGguZmxvb3IodGhpcy52ZXJzaW9uIC8gNykgKyAyLFxuICAgICAgc3RlcCA9IE1hdGguZmxvb3IoKHRoaXMudmVyc2lvbiAqIDggKyBudW1BbGlnbiAqIDMgKyA1KSAvIChudW1BbGlnbiAqIDQgLSA0KSkgKiAyLFxuICAgICAgcmVzdWx0ID0gWzZdO1xuXG4gICAgZm9yIChsZXQgcG9zID0gdGhpcy5zaXplIC0gNzsgcmVzdWx0Lmxlbmd0aCA8IG51bUFsaWduOyBwb3MgLT0gc3RlcCkge1xuICAgICAgcmVzdWx0LnNwbGljZSgxLCAwLCBwb3MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIOWPquiDveWcqOa3u+WKoOS6huS6ruiJsui/kOihjOWQjueri+WNs+iwg+eUqO+8jOW5tui/lOWbniAw44CBMSDmiJYgMuOAgui/meaYryBnZXRQZW5hbHR5U2NvcmUoKSDnmoTovoXliqnlh73mlbDjgIJcbiAgcHJpdmF0ZSBmaW5kZXJQZW5hbHR5Q291bnRQYXR0ZXJucyhydW5IaXN0b3J5OiBSZWFkb25seTxudW1iZXJbXT4pOiBudW1iZXIge1xuICAgIGNvbnN0IG4gPSBydW5IaXN0b3J5WzFdO1xuXG4gICAgYXNzZXJ0KG4gPD0gdGhpcy5zaXplICogMyk7XG4gICAgLy8g5o+Q5YmN6aqM6K+BIG4g55qE5pyJ5pWI5oCnXG4gICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7XG4gICAgY29uc3QgdmFsaWRTY29yZSA9XG4gICAgICBydW5IaXN0b3J5WzJdID09PSBuICYmIHJ1bkhpc3RvcnlbM10gPT09IG4gKiAzICYmIHJ1bkhpc3RvcnlbNF0gPT09IG4gJiYgcnVuSGlzdG9yeVs1XSA9PT0gbjtcblxuICAgIGlmICghdmFsaWRTY29yZSkgcmV0dXJuIDA7XG4gICAgLy8g5qOA5p+l5Lik56uv55qE5bu25Ly45qih5byPXG4gICAgbGV0IHNjb3JlID0gMDtcblxuICAgIGlmIChydW5IaXN0b3J5WzBdID49IG4gKiA0ICYmIHJ1bkhpc3RvcnlbNl0gPj0gbikgc2NvcmUrKztcbiAgICBpZiAocnVuSGlzdG9yeVs2XSA+PSBuICogNCAmJiBydW5IaXN0b3J5WzBdID49IG4pIHNjb3JlKys7XG4gICAgcmV0dXJuIHNjb3JlO1xuICB9XG4gIC8vIOW/hemhu+WcqOihjO+8iOaIluWIl++8ieeahOaooeWdl+e7k+adn+aXtuiwg+eUqOOAgui/meaYryBnZXRQZW5hbHR5U2NvcmUoKSDnmoTovoXliqnlh73mlbDjgIJcbiAgcHJpdmF0ZSBmaW5kZXJQZW5hbHR5VGVybWluYXRlQW5kQ291bnQoXG4gICAgcnVuQ29sb3I6IGJvb2xlYW4sXG4gICAgcnVuTGVuZ3RoOiBudW1iZXIsXG4gICAgcnVuSGlzdG9yeTogbnVtYmVyW10sXG4gICk6IG51bWJlciB7XG4gICAgaWYgKHJ1bkNvbG9yKSB7XG4gICAgICAvLyDnu4jmraLmmpfoibLov5DooYxcbiAgICAgIHRoaXMuZmluZGVyUGVuYWx0eUFkZEhpc3RvcnkocnVuTGVuZ3RoLCBydW5IaXN0b3J5KTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgcnVuTGVuZ3RoID0gMDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgcnVuTGVuZ3RoICs9IHRoaXMuc2l6ZTsgLy8g5re75Yqg5Lqu6Imy6L655qGG5Yiw5pyA57uI6L+Q6KGMXG4gICAgdGhpcy5maW5kZXJQZW5hbHR5QWRkSGlzdG9yeShydW5MZW5ndGgsIHJ1bkhpc3RvcnkpO1xuICAgIHJldHVybiB0aGlzLmZpbmRlclBlbmFsdHlDb3VudFBhdHRlcm5zKHJ1bkhpc3RvcnkpO1xuICB9XG4gIC8vIOWwhue7meWumuWAvOaOqOWIsOWJjemdouW5tuS4ouW8g+acgOWQjuS4gOS4quWAvOOAgui/meaYryBnZXRQZW5hbHR5U2NvcmUoKSDnmoTovoXliqnlh73mlbDjgIJcbiAgcHJpdmF0ZSBmaW5kZXJQZW5hbHR5QWRkSGlzdG9yeShydW5MZW5ndGg6IG51bWJlciwgcnVuSGlzdG9yeTogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBpZiAocnVuSGlzdG9yeVswXSA9PT0gMCkgcnVuTGVuZ3RoICs9IHRoaXMuc2l6ZTsgLy8g5re75Yqg5Lqu6Imy6L655qGG5Yiw5Yid5aeL6L+Q6KGMXG4gICAgcnVuSGlzdG9yeS5wb3AoKTtcbiAgICBydW5IaXN0b3J5LnVuc2hpZnQocnVuTGVuZ3RoKTtcbiAgfVxufVxuLy8g5bCG57uZ5a6a5pWw5YC855qE5L2O5L2N5q+U54m55L2N6L+95Yqg5Yiw57uZ5a6a57yT5Yay5Yy644CC6KaB5rGCIDAgPD0gbGVuIDw9IDMxIOS4lCAwIDw9IHZhbCA8IDJebGVu44CCXG5mdW5jdGlvbiBhcHBlbmRCaXRzKHZhbDogbnVtYmVyLCBsZW46IG51bWJlciwgYmI6IG51bWJlcltdKTogdm9pZCB7XG4gIGlmIChsZW4gPCAwIHx8IGxlbiA+IDMxIHx8IHZhbCA+Pj4gbGVuICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZhbHVlIG91dCBvZiByYW5nZScpO1xuICB9XG4gIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgIC8vIOmAkOS9jei/veWKoFxuICAgIGJiLnB1c2goKHZhbCA+Pj4gaSkgJiAxKTtcbiAgfVxufVxuLy8g6L+U5ZueeOeahOesrGnkvY3mmK/lkKbkuLox44CCXG5mdW5jdGlvbiBnZXRCaXQoeDogbnVtYmVyLCBpOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuICgoeCA+Pj4gaSkgJiAxKSAhPT0gMDtcbn1cbi8vIOWmguaenOe7meWumuadoeS7tuS4umZhbHNl5YiZ5oqb5Ye65byC5bi444CCXG5mdW5jdGlvbiBhc3NlcnQoY29uZDogYm9vbGVhbik6IHZvaWQge1xuICBpZiAoIWNvbmQpIHRocm93IG5ldyBFcnJvcignQXNzZXJ0aW9uIGVycm9yJyk7XG59XG4vKlxuICogUVLnoIHnrKblj7fkuK3nmoQg5a2X56ymL+S6jOi/m+WItiDmlbDmja7mrrVcbiAqL1xuY2xhc3MgUXJTZWdtZW50IHtcbiAgLy8g5L2/55So57uZ5a6a55qE5bGe5oCn5ZKM5pWw5o2u5Yib5bu65LiA5Liq5paw55qEUVLnoIHmrrXjgILlrZfnrKborqHmlbDvvIhudW1DaGFyc++8ieW/hemhu+S4juaooeW8j+WSjOS9jee8k+WGsuWMuumVv+W6puS4gOiHtO+8jOS9huS4jei/m+ihjOajgOafpeOAgue7meWumueahOS9jee8k+WGsuWMuuiiq+WFi+mahuW5tuWtmOWCqOOAglxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgLy8g5q2k5q6155qE5qih5byP5oyH56S656ym44CCXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGU6IFFyTW9kZSxcbiAgICAvLyDmraTmrrXmnKrnvJbnoIHmlbDmja7nmoTplb/luqbjgILlr7nkuo7mlbDlrZcv5a2X5q+N5pWw5a2XL+axieWtl+aooeW8j++8jOS7peWtl+espuS4uuWNleS9jea1i+mHj++8m+WvueS6juWtl+iKguaooeW8j++8jOS7peWtl+iKguS4uuWNleS9jea1i+mHj++8m+WvueS6jkVDSeaooeW8j++8jOS4ujA7IOWni+e7iOS4uumbtuaIluato+aVsOOAguS4jeaYr+aVsOaNrueahOS9jemVv+W6puOAglxuICAgIHB1YmxpYyByZWFkb25seSBudW1DaGFyczogbnVtYmVyLFxuICAgIC8vIOatpOauteeahOaVsOaNruS9jeOAgumAmui/h2dldERhdGEoKeiuv+mXruOAglxuICAgIHJlYWRvbmx5IGJpdERhdGE6IG51bWJlcltdLFxuICApIHtcbiAgICBpZiAobnVtQ2hhcnMgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBhcmd1bWVudCcpO1xuICAgIHRoaXMuYml0RGF0YSA9IGJpdERhdGEuc2xpY2UoKTsgLy8g6L+b6KGM6Ziy5b6h5oCn5ou36LSdXG4gIH1cbiAgLy8g6L+U5Zue5q2k5q615pWw5o2u5L2N55qE5paw5Ymv5pys44CCXG4gIHB1YmxpYyBnZXREYXRhKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5iaXREYXRhLnNsaWNlKCk7IC8vIOi/m+ihjOmYsuW+oeaAp+aLt+i0nVxuICB9XG59XG5jb25zdCBOVU1FUklDX1JFR0VYOiBSZWdFeHAgPSAvXlswLTldKiQvO1xuY29uc3QgQUxQSEFOVU1FUklDX1JFR0VYOiBSZWdFeHAgPSAvXltBLVowLTkgJCUqKy4vOi1dKiQvO1xuLy8g5a2X5q+N5pWw5a2X5qih5byP5Lit5omA5pyJ5ZCI5rOV5a2X56ym55qE6ZuG5ZCI77yM5YW25Lit5q+P5Liq5a2X56ym5YC85pig5bCE5Yiw5a2X56ym5Liy5Lit55qE57Si5byV44CCXG5jb25zdCBBTFBIQU5VTUVSSUNfQ0hBUlNFVDogc3RyaW5nID0gJzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiAkJSorLS4vOic7XG5cbi8vIOaYr+WQpuWPr+S7peeUqOaVsOWtl+aooeW8j+e8lueggeOAguW9k+S4lOS7heW9k+avj+S4quWtl+espumDveWcqDDliLA555qE6IyD5Zu05YaF5pe277yM5a2X56ym5Liy5Y+v57yW56CB44CCXG5mdW5jdGlvbiBpc051bWVyaWModGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBOVU1FUklDX1JFR0VYLnRlc3QodGV4dCk7XG59XG4vKipcbiAqIOaYr+WQpuWPr+S7peeUqOWtl+avjeaVsOWtl+aooeW8j+e8lueggVxuICogQGRlc2NyaXB0aW9uIDDliLA544CBQeWIsFrku4XlpKflhpnvvInjgIHnqbrmoLzjgIHnvo7lhYPnrKblj7fjgIHnmb7liIblj7fjgIHmmJ/lj7fjgIHliqDlj7fjgIHov57lrZfnrKbjgIHlj6XngrnjgIHmlpzmnaDjgIHlhpLlj7fjgIJcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IOe7meWumuWtl+espuS4slxuICogQHJldHVybnMge0Jvb2xlYW59IGJvb2xlYW5cbiAqL1xuZnVuY3Rpb24gaXNBbHBoYW51bWVyaWModGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBBTFBIQU5VTUVSSUNfUkVHRVgudGVzdCh0ZXh0KTtcbn1cbi8vIOi/lOWbnuS4gOS4quihqOekuuS7peWtl+iKguaooeW8j+e8lueggeeahOe7meWumuS6jOi/m+WItuaVsOaNrueahOauteOAguaJgOaciei+k+WFpeWtl+iKguaVsOe7hOmDveaYr+WPr+aOpeWPl+eahOOAguS7u+S9leaWh+acrOWtl+espuS4sumDveWPr+S7pei9rOaNouS4ulVURi045a2X6IqC5bm257yW56CB5Li65a2X6IqC5qih5byP5q6144CCXG5mdW5jdGlvbiBtYWtlQnl0ZXMoZGF0YTogUmVhZG9ubHk8bnVtYmVyW10+KTogUXJTZWdtZW50IHtcbiAgY29uc3QgYmI6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChjb25zdCBiIG9mIGRhdGEpIGFwcGVuZEJpdHMoYiwgOCwgYmIpO1xuICByZXR1cm4gbmV3IFFyU2VnbWVudChRck1vZGUuZ2V0KCdCWVRFJyksIGRhdGEubGVuZ3RoLCBiYik7XG59XG4vLyDorqHnrpflubbov5Tlm57lnKjnu5nlrprniYjmnKzkuIvnvJbnoIHnu5nlrprmrrXmiYDpnIDnmoTkvY3mlbDjgILlpoLmnpzmn5DkuKrmrrXnmoTlrZfnrKbmlbDlpKrlpJrku6Xoh7Pkuo7ml6Dms5XpgILlupTlhbbplb/luqblrZfmrrXvvIzliJnnu5PmnpzkuLrml6DnqbflpKfjgIJcbmZ1bmN0aW9uIGdldFRvdGFsQml0cyhzZWdzOiBSZWFkb25seTxRclNlZ21lbnRbXT4sIHZlcnNpb246IG51bWJlcik6IG51bWJlciB7XG4gIGxldCByZXN1bHQ6IG51bWJlciA9IDA7XG5cbiAgZm9yIChjb25zdCBzZWcgb2Ygc2Vncykge1xuICAgIGNvbnN0IGNjYml0czogbnVtYmVyID0gc2VnLm1vZGUubnVtQ2hhckNvdW50Qml0cyh2ZXJzaW9uKTtcblxuICAgIGlmIChzZWcubnVtQ2hhcnMgPj0gMSA8PCBjY2JpdHMpIHJldHVybiBJbmZpbml0eTsgLy8g5q6155qE6ZW/5bqm5LiN6YCC5ZCI5a2X5q6155qE5L2N5a695bqmXG4gICAgcmVzdWx0ICs9IDQgKyBjY2JpdHMgKyBzZWcuYml0RGF0YS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIOi/lOWbnuS4gOS4quihqOekuuS7peaVsOWtl+aooeW8j+e8lueggeeahOe7meWumuWNgei/m+WItuaVsOWtl+Wtl+espuS4sueahOauteOAglxuZnVuY3Rpb24gbWFrZU51bWVyaWMoZGlnaXRzOiBzdHJpbmcpOiBRclNlZ21lbnQge1xuICBpZiAoIWlzTnVtZXJpYyhkaWdpdHMpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1N0cmluZyBjb250YWlucyBub24tbnVtZXJpYyBjaGFyYWN0ZXJzJyk7XG4gIH1cbiAgY29uc3QgYmI6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyApIHtcbiAgICAvLyDmr4/mrKHov63ku6PmnIDlpJrmtojogJcz5Liq5pWw5a2XXG4gICAgY29uc3QgbjogbnVtYmVyID0gTWF0aC5taW4oZGlnaXRzLmxlbmd0aCAtIGksIDMpO1xuXG4gICAgYXBwZW5kQml0cyhwYXJzZUludChkaWdpdHMuc3Vic3RyaW5nKGksIGkgKyBuKSwgMTApLCBuICogMyArIDEsIGJiKTtcbiAgICBpICs9IG47XG4gIH1cbiAgcmV0dXJuIG5ldyBRclNlZ21lbnQoUXJNb2RlLmdldCgnTlVNRVJJQycpLCBkaWdpdHMubGVuZ3RoLCBiYik7XG59XG4vLyDov5Tlm57kuIDkuKrooajnpLrku6XlrZfmr43mlbDlrZfmqKHlvI/nvJbnoIHnmoTnu5nlrprmlofmnKzlrZfnrKbkuLLnmoTmrrXjgILlhYHorrjnmoTlrZfnrKbmmK/vvJow5YiwOeOAgUHliLBa77yI5LuF5aSn5YaZ77yJ44CB56m65qC844CB576O5YWD56ym5Y+344CB55m+5YiG5Y+344CB5pif5Y+344CB5Yqg5Y+344CB6L+e5a2X56ym44CB5Y+l54K544CB5pac5p2g44CB5YaS5Y+344CCXG5mdW5jdGlvbiBtYWtlQWxwaGFudW1lcmljKHRleHQ6IHN0cmluZyk6IFFyU2VnbWVudCB7XG4gIGlmICghaXNBbHBoYW51bWVyaWModGV4dCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignU3RyaW5nIGNvbnRhaW5zIHVuZW5jb2RhYmxlIGNoYXJhY3RlcnMgaW4gYWxwaGFudW1lcmljIG1vZGUnKTtcbiAgfVxuICBjb25zdCBiYjogbnVtYmVyW10gPSBbXTtcbiAgbGV0IGk6IG51bWJlcjtcblxuICBmb3IgKGkgPSAwOyBpICsgMiA8PSB0ZXh0Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgLy8g5aSE55CG5q+P57uEMuS4quWtl+esplxuICAgIGxldCB0ZW1wID0gQUxQSEFOVU1FUklDX0NIQVJTRVQuaW5kZXhPZih0ZXh0LmNoYXJBdChpKSkgKiA0NTtcblxuICAgIHRlbXAgKz0gQUxQSEFOVU1FUklDX0NIQVJTRVQuaW5kZXhPZih0ZXh0LmNoYXJBdChpICsgMSkpO1xuICAgIGFwcGVuZEJpdHModGVtcCwgMTEsIGJiKTtcbiAgfVxuICAvLyDliankuIsx5Liq5a2X56ymXG4gIGlmIChpIDwgdGV4dC5sZW5ndGgpIHtcbiAgICBhcHBlbmRCaXRzKEFMUEhBTlVNRVJJQ19DSEFSU0VULmluZGV4T2YodGV4dC5jaGFyQXQoaSkpLCA2LCBiYik7XG4gIH1cbiAgcmV0dXJuIG5ldyBRclNlZ21lbnQoUXJNb2RlLmdldCgnQUxQSEFOVU1FUklDJyksIHRleHQubGVuZ3RoLCBiYik7XG59XG4vKlxuICogUVLnoIHnrKblj7fkuK3nmoTplJnor6/nuqDmraPnuqfliKtcbiAqL1xuZXhwb3J0IGNsYXNzIEVjYyB7XG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgLy8g5ZyoMOWIsDPojIPlm7TlhoXvvIjml6DnrKblj7cy5L2N5pW05pWw77yJ44CCXG4gICAgcHVibGljIHJlYWRvbmx5IG9yZGluYWw6IEludFJhbmdlPDAsIDQ+LFxuICAgIC8vICjljIXnp4HmnIkpIOWcqDDliLAz6IyD5Zu05YaF77yI5peg56ym5Y+3MuS9jeaVtOaVsO+8ieOAglxuICAgIHB1YmxpYyByZWFkb25seSBmb3JtYXRCaXRzOiBJbnRSYW5nZTwwLCA0PixcbiAgKSB7fVxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMRVZFTFMgPSB7XG4gICAgTE9XOiBuZXcgRWNjKDAsIDEpLCAvLyA3JSDplJnor6/lrrnlv43njodcbiAgICBNRURJVU06IG5ldyBFY2MoMSwgMCksIC8vIDE1JSDplJnor6/lrrnlv43njodcbiAgICBRVUFSVElMRTogbmV3IEVjYygyLCAzKSwgLy8gMjUlIOmUmeivr+WuueW/jeeOh1xuICAgIEhJR0g6IG5ldyBFY2MoMywgMiksIC8vIDMwJSDplJnor6/lrrnlv43njodcbiAgfSBhcyBjb25zdDtcbiAgLy8g6I635Y+W5oyH5a6a57qn5Yir55qEIEVDQ1xuICBwdWJsaWMgc3RhdGljIGdldChsZXZlbDoga2V5b2YgdHlwZW9mIEVjYy5MRVZFTFMpOiBFY2Mge1xuICAgIHJldHVybiBFY2MuTEVWRUxTW2xldmVsXTtcbiAgfVxufVxuLypcbiAqIOaPj+i/sOWmguS9leino+mHiuauteeahOaVsOaNruS9jeOAguS4jeWPr+WPmOOAglxuICovXG5jbGFzcyBRck1vZGUge1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIC8vIOaooeW8j+aMh+ekuuS9je+8jOaYr+S4gOS4qnVpbnQ05YC877yI6IyD5Zu0MOWIsDE177yJ44CCXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVCaXRzOiBJbnRSYW5nZTwwLCAxNj4sXG4gICAgLy8g5LiJ5Liq5LiN5ZCM54mI5pys6IyD5Zu055qE5a2X56ym6K6h5pWw5L2N5pWw44CCXG4gICAgcHJpdmF0ZSByZWFkb25seSBudW1CaXRzQ2hhckNvdW50OiByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICkge31cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbW9kZXMgPSB7XG4gICAgTlVNRVJJQzogbmV3IFFyTW9kZSgweDEsIFsxMCwgMTIsIDE0XSksXG4gICAgQUxQSEFOVU1FUklDOiBuZXcgUXJNb2RlKDB4MiwgWzksIDExLCAxM10pLFxuICAgIEJZVEU6IG5ldyBRck1vZGUoMHg0LCBbOCwgMTYsIDE2XSksXG4gICAgS0FOSkk6IG5ldyBRck1vZGUoMHg4LCBbOCwgMTAsIDEyXSksXG4gICAgRUNJOiBuZXcgUXJNb2RlKDB4NywgWzAsIDAsIDBdKSxcbiAgfSBhcyBjb25zdDtcbiAgcHVibGljIHN0YXRpYyBnZXQobW9kZToga2V5b2YgdHlwZW9mIFFyTW9kZS5tb2Rlcykge1xuICAgIHJldHVybiBRck1vZGUubW9kZXNbbW9kZV07XG4gIH1cbiAgLy8g6IyD5Zu06K6h566XXG4gIHB1YmxpYyBudW1DaGFyQ291bnRCaXRzKHZlcnNpb246IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubnVtQml0c0NoYXJDb3VudFtNYXRoLmZsb29yKCh2ZXJzaW9uICsgNykgLyAxNyldO1xuICB9XG59XG5cbnR5cGUgRW51bWVyYXRlPE4gZXh0ZW5kcyBudW1iZXIsIEFjYyBleHRlbmRzIG51bWJlcltdID0gW10+ID0gQWNjWydsZW5ndGgnXSBleHRlbmRzIE5cbiAgPyBBY2NbbnVtYmVyXVxuICA6IEVudW1lcmF0ZTxOLCBbLi4uQWNjLCBBY2NbJ2xlbmd0aCddXT47XG5cbmV4cG9ydCB0eXBlIEludFJhbmdlPEYgZXh0ZW5kcyBudW1iZXIsIFQgZXh0ZW5kcyBudW1iZXI+ID0gRXhjbHVkZTxFbnVtZXJhdGU8VD4sIEVudW1lcmF0ZTxGPj47XG4iXSwibWFwcGluZ3MiOiIrM0VBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBRUE7QUFDQSxHQUFNLENBQUFBLHVCQUF1QixDQUFHLENBQzlCLENBQ0UsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDN0YsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDbkUsQ0FBRTtBQUNILENBQ0UsQ0FBQyxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDOUYsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDbkUsQ0FBRTtBQUNILENBQ0UsQ0FBQyxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDOUYsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDbkUsQ0FBRTtBQUNILENBQ0UsQ0FBQyxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDOUYsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDakU7QUFBQSxDQUNKLENBQ0QsR0FBTSxDQUFBQywyQkFBMkIsQ0FBRyxDQUNsQyxDQUNFLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQy9GLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzNDLENBQ0QsQ0FDRSxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUM1RixFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUN2RCxDQUNELENBQ0UsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDL0YsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDdkQsQ0FDRCxDQUNFLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FDNUYsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUUsRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLENBQzNELENBQ0YsQ0FFRDtBQUNBLFFBQVMsQ0FBQUMsb0JBQW9CQSxDQUFDQyxHQUFXLENBQVUsQ0FDakQsR0FBSUEsR0FBRyxDQUFHQyxNQUFN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LENBQUVBLEdBQUMsRUFBRSxDQUFFLElBQUksQ0FBQzJELGlCQUFpQixDQUFDLENBQUMsQ0FBRTNELEdBQUMsQ0FBRW9FLE1BQU0sQ0FBQ0QsSUFBSSxDQUFFbkUsR0FBQyxDQUFDLENBQUMsQ0FDMUUsSUFBSSxDQUFDMkQsaUJBQWlCLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBRVMsTUFBTSxDQUFDRCxJQUFJLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDN0MsSUFBSSxDQUFDUixpQkFBaUIsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFFUyxNQUFNLENBQUNELElBQUksQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUM3QyxJQUFJLENBQUNSLGlCQUFpQixDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUVTLE1BQU0sQ0FBQ0QsSUFBSSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQzdDLElBQUssR0FBSSxDQUFBbkUsR0FBQyxDQUFHLENBQUMsQ0FBRUEsR0FBQyxDQUFHLEVBQUUsQ0FBRUEsR0FBQyxFQUFFLENBQUUsQ0FDM0IsSUFBSSxDQUFDMkQsaUJBQWlCLENBQUMsRUFBRSxDQUFHM0QsR0FBQyxDQUFFLENBQUMsQ0FBRW9FLE1BQU0sQ0FBQ0QsSUFBSSxDQUFFbkUsR0FBQyxDQUFDLENBQUMsQ0FDcEQsQ0FDQTtBQUNBLElBQUssR0FBSSxDQUFBQSxHQUFDLENBQUcsQ0FBQyxDQUFFQSxHQUFDLENBQUcsQ0FBQyxDQUFFQSxHQUFDLEVBQUUsQ0FBRSxDQUMxQixJQUFJLENBQUMyRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUNyQixJQUFJLENBQUcsQ0FBQyxDQUFHdEMsR0FBQyxDQUFFLENBQUMsQ0FBRW9FLE1BQU0sQ0FBQ0QsSUFBSSxDQUFFbkUsR0FBQyxDQUFDLENBQUMsQ0FDL0QsQ0FDQSxJQUFLLEdBQUksQ0FBQUEsR0FBQyxDQUFHLENBQUMsQ0FBRUEsR0FBQyxDQUFHLEVBQUUsQ0FBRUEsR0FBQyxFQUFFLENBQUUsQ0FDM0IsSUFBSSxDQUFDMkQsaUJBQWlCLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQ3JCLElB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