@anglr/datetime 1.0.0-beta.20220217103425 → 2.0.0

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 (463) hide show
  1. package/changelog.md +12 -0
  2. package/date-fns/datetime-date-fns.d.ts +64 -0
  3. package/date-fns/datetime-date-fns.internal.d.ts +64 -0
  4. package/date-fns/package.json +7 -7
  5. package/date-fns/src/{date-fns.d.ts → index.d.ts} +4 -4
  6. package/date-fns/src/index.d.ts.map +1 -0
  7. package/date-fns/src/misc/tokens.d.ts +10 -10
  8. package/date-fns/src/services/dateFnsDateApi.service.d.ts +36 -33
  9. package/date-fns/src/services/dateFnsDateApi.service.d.ts.map +1 -1
  10. package/date-fns/src/services/dateFnsLocale.service.d.ts +10 -10
  11. package/date-fns/temp/datetime-date-fns.api.md +47 -0
  12. package/datetime.d.ts +1913 -5
  13. package/datetime.internal.d.ts +2090 -0
  14. package/es2015/date-fns/src/index.js +4 -0
  15. package/es2015/date-fns/src/index.js.map +1 -0
  16. package/es2015/date-fns/src/misc/tokens.js +20 -0
  17. package/es2015/date-fns/src/misc/tokens.js.map +1 -0
  18. package/es2015/date-fns/src/services/dateFnsDateApi.service.js +438 -0
  19. package/es2015/date-fns/src/services/dateFnsDateApi.service.js.map +1 -0
  20. package/es2015/date-fns/src/services/dateFnsLocale.service.js +2 -0
  21. package/es2015/date-fns/src/services/dateFnsLocale.service.js.map +1 -0
  22. package/es2015/karma.conf.js +57 -0
  23. package/es2015/karma.conf.js.map +1 -0
  24. package/{moment/src/moment.d.ts → es2015/moment/src/index.js} +3 -3
  25. package/es2015/moment/src/index.js.map +1 -0
  26. package/es2015/moment/src/misc/tokens.js +15 -0
  27. package/es2015/moment/src/misc/tokens.js.map +1 -0
  28. package/es2015/moment/src/services/momentDateApi.service.js +398 -0
  29. package/es2015/moment/src/services/momentDateApi.service.js.map +1 -0
  30. package/{src/datetime.d.ts → es2015/src/index.js} +19 -19
  31. package/es2015/src/index.js.map +1 -0
  32. package/es2015/src/misc/constants.js +33 -0
  33. package/es2015/src/misc/constants.js.map +1 -0
  34. package/es2015/src/misc/datetime.interface.js +2 -0
  35. package/es2015/src/misc/datetime.interface.js.map +1 -0
  36. package/es2015/src/misc/tokens.js +19 -0
  37. package/es2015/src/misc/tokens.js.map +1 -0
  38. package/es2015/src/misc/validators.js +58 -0
  39. package/es2015/src/misc/validators.js.map +1 -0
  40. package/es2015/src/modules/datePipes.module.js +33 -0
  41. package/es2015/src/modules/datePipes.module.js.map +1 -0
  42. package/es2015/src/picker/components/dayPicker/dayPicker.component.js +172 -0
  43. package/es2015/src/picker/components/dayPicker/dayPicker.component.js.map +1 -0
  44. package/es2015/src/picker/components/dayPicker/dayPicker.interfaces.js +2 -0
  45. package/es2015/src/picker/components/dayPicker/dayPicker.interfaces.js.map +1 -0
  46. package/es2015/src/picker/components/monthPicker/monthPicker.component.js +114 -0
  47. package/es2015/src/picker/components/monthPicker/monthPicker.component.js.map +1 -0
  48. package/es2015/src/picker/components/monthPicker/monthPicker.interfaces.js +2 -0
  49. package/es2015/src/picker/components/monthPicker/monthPicker.interfaces.js.map +1 -0
  50. package/es2015/src/picker/components/picker/picker.component.animations.js +71 -0
  51. package/es2015/src/picker/components/picker/picker.component.animations.js.map +1 -0
  52. package/es2015/src/picker/components/picker/picker.component.js +241 -0
  53. package/es2015/src/picker/components/picker/picker.component.js.map +1 -0
  54. package/es2015/src/picker/components/pickerBase.component.js +243 -0
  55. package/es2015/src/picker/components/pickerBase.component.js.map +1 -0
  56. package/es2015/src/picker/components/yearPicker/yearPicker.component.js +126 -0
  57. package/es2015/src/picker/components/yearPicker/yearPicker.component.js.map +1 -0
  58. package/es2015/src/picker/components/yearPicker/yearPicker.interfaces.js +2 -0
  59. package/es2015/src/picker/components/yearPicker/yearPicker.interfaces.js.map +1 -0
  60. package/es2015/src/picker/interfaces.js +5 -0
  61. package/es2015/src/picker/interfaces.js.map +1 -0
  62. package/es2015/src/picker/misc/datetimePicker.interface.js +2 -0
  63. package/es2015/src/picker/misc/datetimePicker.interface.js.map +1 -0
  64. package/es2015/src/picker/misc/tokens.js +6 -0
  65. package/es2015/src/picker/misc/tokens.js.map +1 -0
  66. package/es2015/src/picker/modules/picker.module.js +46 -0
  67. package/es2015/src/picker/modules/picker.module.js.map +1 -0
  68. package/es2015/src/picker/types.js +8 -0
  69. package/es2015/src/picker/types.js.map +1 -0
  70. package/es2015/src/pipes/asRequiredType.js +22 -0
  71. package/es2015/src/pipes/asRequiredType.js.map +1 -0
  72. package/es2015/src/pipes/dateConvert.pipe.js +35 -0
  73. package/es2015/src/pipes/dateConvert.pipe.js.map +1 -0
  74. package/es2015/src/pipes/dateFormat.pipe.js +45 -0
  75. package/es2015/src/pipes/dateFormat.pipe.js.map +1 -0
  76. package/es2015/src/selector/components/inputDateTime/inputDateTime.component.js +421 -0
  77. package/es2015/src/selector/components/inputDateTime/inputDateTime.component.js.map +1 -0
  78. package/es2015/src/selector/components/selector/selector.component.animations.js +15 -0
  79. package/es2015/src/selector/components/selector/selector.component.animations.js.map +1 -0
  80. package/es2015/src/selector/components/selector/selector.component.js +344 -0
  81. package/es2015/src/selector/components/selector/selector.component.js.map +1 -0
  82. package/es2015/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.js +317 -0
  83. package/es2015/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.js.map +1 -0
  84. package/es2015/src/selector/directives/datetimeMaxValidator/datetimeMaxValidator.directive.js +51 -0
  85. package/es2015/src/selector/directives/datetimeMaxValidator/datetimeMaxValidator.directive.js.map +1 -0
  86. package/es2015/src/selector/directives/datetimeMinValidator/datetimeMinValidator.directive.js +51 -0
  87. package/es2015/src/selector/directives/datetimeMinValidator/datetimeMinValidator.directive.js.map +1 -0
  88. package/es2015/src/selector/directives/datetimeValidator/datetimeValidator.directive.js +47 -0
  89. package/es2015/src/selector/directives/datetimeValidator/datetimeValidator.directive.js.map +1 -0
  90. package/es2015/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.js +119 -0
  91. package/es2015/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.js.map +1 -0
  92. package/es2015/src/selector/interfaces.js +2 -0
  93. package/es2015/src/selector/interfaces.js.map +1 -0
  94. package/es2015/src/selector/misc/datetimeSelector.interface.js +2 -0
  95. package/es2015/src/selector/misc/datetimeSelector.interface.js.map +1 -0
  96. package/es2015/src/selector/misc/tokens.js +6 -0
  97. package/es2015/src/selector/misc/tokens.js.map +1 -0
  98. package/es2015/src/selector/modules/basicSelector.module.js +20 -0
  99. package/es2015/src/selector/modules/basicSelector.module.js.map +1 -0
  100. package/es2015/src/selector/modules/selector.module.js +60 -0
  101. package/es2015/src/selector/modules/selector.module.js.map +1 -0
  102. package/es2015/src/selector/types.js +10 -0
  103. package/es2015/src/selector/types.js.map +1 -0
  104. package/es2015/src/services/dateApi.interface.js +2 -0
  105. package/es2015/src/services/dateApi.interface.js.map +1 -0
  106. package/es2015/src/services/datePositionParser.interface.js +2 -0
  107. package/es2015/src/services/datePositionParser.interface.js.map +1 -0
  108. package/es2015/src/services/datePositionParser.service.js +227 -0
  109. package/es2015/src/services/datePositionParser.service.js.map +1 -0
  110. package/es2015/src/services/dateTimeRelativeParser.service.js +66 -0
  111. package/es2015/src/services/dateTimeRelativeParser.service.js.map +1 -0
  112. package/es2015/src/services/dateValueProvider.service.js +58 -0
  113. package/es2015/src/services/dateValueProvider.service.js.map +1 -0
  114. package/es2015/src/services/formatProvider.interface.js +2 -0
  115. package/es2015/src/services/formatProvider.interface.js.map +1 -0
  116. package/es2015/src/services/index.js +4 -0
  117. package/es2015/src/services/index.js.map +1 -0
  118. package/es2020/date-fns/src/index.js +4 -0
  119. package/es2020/date-fns/src/index.js.map +1 -0
  120. package/es2020/date-fns/src/misc/tokens.js +20 -0
  121. package/es2020/date-fns/src/misc/tokens.js.map +1 -0
  122. package/es2020/date-fns/src/services/dateFnsDateApi.service.js +437 -0
  123. package/es2020/date-fns/src/services/dateFnsDateApi.service.js.map +1 -0
  124. package/es2020/date-fns/src/services/dateFnsLocale.service.js +2 -0
  125. package/es2020/date-fns/src/services/dateFnsLocale.service.js.map +1 -0
  126. package/es2020/karma.conf.js +57 -0
  127. package/es2020/karma.conf.js.map +1 -0
  128. package/es2020/moment/src/index.js +3 -0
  129. package/es2020/moment/src/index.js.map +1 -0
  130. package/es2020/moment/src/misc/tokens.js +15 -0
  131. package/es2020/moment/src/misc/tokens.js.map +1 -0
  132. package/es2020/moment/src/services/momentDateApi.service.js +398 -0
  133. package/es2020/moment/src/services/momentDateApi.service.js.map +1 -0
  134. package/es2020/src/index.js +19 -0
  135. package/es2020/src/index.js.map +1 -0
  136. package/es2020/src/misc/constants.js +33 -0
  137. package/es2020/src/misc/constants.js.map +1 -0
  138. package/es2020/src/misc/datetime.interface.js +2 -0
  139. package/es2020/src/misc/datetime.interface.js.map +1 -0
  140. package/es2020/src/misc/tokens.js +19 -0
  141. package/es2020/src/misc/tokens.js.map +1 -0
  142. package/es2020/src/misc/validators.js +58 -0
  143. package/es2020/src/misc/validators.js.map +1 -0
  144. package/es2020/src/modules/datePipes.module.js +33 -0
  145. package/es2020/src/modules/datePipes.module.js.map +1 -0
  146. package/es2020/src/picker/components/dayPicker/dayPicker.component.js +172 -0
  147. package/es2020/src/picker/components/dayPicker/dayPicker.component.js.map +1 -0
  148. package/es2020/src/picker/components/dayPicker/dayPicker.interfaces.js +2 -0
  149. package/es2020/src/picker/components/dayPicker/dayPicker.interfaces.js.map +1 -0
  150. package/es2020/src/picker/components/monthPicker/monthPicker.component.js +114 -0
  151. package/es2020/src/picker/components/monthPicker/monthPicker.component.js.map +1 -0
  152. package/es2020/src/picker/components/monthPicker/monthPicker.interfaces.js +2 -0
  153. package/es2020/src/picker/components/monthPicker/monthPicker.interfaces.js.map +1 -0
  154. package/es2020/src/picker/components/picker/picker.component.animations.js +71 -0
  155. package/es2020/src/picker/components/picker/picker.component.animations.js.map +1 -0
  156. package/es2020/src/picker/components/picker/picker.component.js +236 -0
  157. package/es2020/src/picker/components/picker/picker.component.js.map +1 -0
  158. package/es2020/src/picker/components/pickerBase.component.js +243 -0
  159. package/es2020/src/picker/components/pickerBase.component.js.map +1 -0
  160. package/es2020/src/picker/components/yearPicker/yearPicker.component.js +126 -0
  161. package/es2020/src/picker/components/yearPicker/yearPicker.component.js.map +1 -0
  162. package/es2020/src/picker/components/yearPicker/yearPicker.interfaces.js +2 -0
  163. package/es2020/src/picker/components/yearPicker/yearPicker.interfaces.js.map +1 -0
  164. package/es2020/src/picker/interfaces.js +5 -0
  165. package/es2020/src/picker/interfaces.js.map +1 -0
  166. package/es2020/src/picker/misc/datetimePicker.interface.js +2 -0
  167. package/es2020/src/picker/misc/datetimePicker.interface.js.map +1 -0
  168. package/es2020/src/picker/misc/tokens.js +6 -0
  169. package/es2020/src/picker/misc/tokens.js.map +1 -0
  170. package/es2020/src/picker/modules/picker.module.js +46 -0
  171. package/es2020/src/picker/modules/picker.module.js.map +1 -0
  172. package/es2020/src/picker/types.js +8 -0
  173. package/es2020/src/picker/types.js.map +1 -0
  174. package/es2020/src/pipes/asRequiredType.js +22 -0
  175. package/es2020/src/pipes/asRequiredType.js.map +1 -0
  176. package/es2020/src/pipes/dateConvert.pipe.js +35 -0
  177. package/es2020/src/pipes/dateConvert.pipe.js.map +1 -0
  178. package/es2020/src/pipes/dateFormat.pipe.js +45 -0
  179. package/es2020/src/pipes/dateFormat.pipe.js.map +1 -0
  180. package/es2020/src/selector/components/inputDateTime/inputDateTime.component.js +417 -0
  181. package/es2020/src/selector/components/inputDateTime/inputDateTime.component.js.map +1 -0
  182. package/es2020/src/selector/components/selector/selector.component.animations.js +15 -0
  183. package/es2020/src/selector/components/selector/selector.component.animations.js.map +1 -0
  184. package/es2020/src/selector/components/selector/selector.component.js +334 -0
  185. package/es2020/src/selector/components/selector/selector.component.js.map +1 -0
  186. package/es2020/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.js +314 -0
  187. package/es2020/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.js.map +1 -0
  188. package/es2020/src/selector/directives/datetimeMaxValidator/datetimeMaxValidator.directive.js +51 -0
  189. package/es2020/src/selector/directives/datetimeMaxValidator/datetimeMaxValidator.directive.js.map +1 -0
  190. package/es2020/src/selector/directives/datetimeMinValidator/datetimeMinValidator.directive.js +51 -0
  191. package/es2020/src/selector/directives/datetimeMinValidator/datetimeMinValidator.directive.js.map +1 -0
  192. package/es2020/src/selector/directives/datetimeValidator/datetimeValidator.directive.js +47 -0
  193. package/es2020/src/selector/directives/datetimeValidator/datetimeValidator.directive.js.map +1 -0
  194. package/es2020/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.js +118 -0
  195. package/es2020/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.js.map +1 -0
  196. package/es2020/src/selector/interfaces.js +2 -0
  197. package/es2020/src/selector/interfaces.js.map +1 -0
  198. package/es2020/src/selector/misc/datetimeSelector.interface.js +2 -0
  199. package/es2020/src/selector/misc/datetimeSelector.interface.js.map +1 -0
  200. package/es2020/src/selector/misc/tokens.js +6 -0
  201. package/es2020/src/selector/misc/tokens.js.map +1 -0
  202. package/es2020/src/selector/modules/basicSelector.module.js +20 -0
  203. package/es2020/src/selector/modules/basicSelector.module.js.map +1 -0
  204. package/es2020/src/selector/modules/selector.module.js +60 -0
  205. package/es2020/src/selector/modules/selector.module.js.map +1 -0
  206. package/es2020/src/selector/types.js +10 -0
  207. package/es2020/src/selector/types.js.map +1 -0
  208. package/es2020/src/services/dateApi.interface.js +2 -0
  209. package/es2020/src/services/dateApi.interface.js.map +1 -0
  210. package/es2020/src/services/datePositionParser.interface.js +2 -0
  211. package/es2020/src/services/datePositionParser.interface.js.map +1 -0
  212. package/es2020/src/services/datePositionParser.service.js +227 -0
  213. package/es2020/src/services/datePositionParser.service.js.map +1 -0
  214. package/es2020/src/services/dateTimeRelativeParser.service.js +65 -0
  215. package/es2020/src/services/dateTimeRelativeParser.service.js.map +1 -0
  216. package/es2020/src/services/dateValueProvider.service.js +58 -0
  217. package/es2020/src/services/dateValueProvider.service.js.map +1 -0
  218. package/es2020/src/services/formatProvider.interface.js +2 -0
  219. package/es2020/src/services/formatProvider.interface.js.map +1 -0
  220. package/es2020/src/services/index.js +4 -0
  221. package/es2020/src/services/index.js.map +1 -0
  222. package/karma.conf.d.ts +2 -0
  223. package/karma.conf.d.ts.map +1 -0
  224. package/moment/datetime-moment.d.ts +47 -0
  225. package/moment/datetime-moment.internal.d.ts +47 -0
  226. package/moment/package.json +7 -7
  227. package/moment/src/index.d.ts +3 -0
  228. package/moment/src/index.d.ts.map +1 -0
  229. package/moment/src/misc/tokens.d.ts +5 -5
  230. package/moment/src/services/momentDateApi.service.d.ts +35 -32
  231. package/moment/src/services/momentDateApi.service.d.ts.map +1 -1
  232. package/moment/temp/datetime-moment.api.md +36 -0
  233. package/package.json +91 -48
  234. package/src/index.d.ts +19 -0
  235. package/src/index.d.ts.map +1 -0
  236. package/src/misc/constants.d.ts +32 -32
  237. package/src/misc/datetime.interface.d.ts +34 -34
  238. package/src/misc/tokens.d.ts +10 -10
  239. package/src/misc/validators.d.ts +25 -25
  240. package/src/modules/datePipes.module.d.ts +12 -5
  241. package/src/modules/datePipes.module.d.ts.map +1 -1
  242. package/src/picker/components/dayPicker/dayPicker.component.d.ts +68 -65
  243. package/src/picker/components/dayPicker/dayPicker.component.d.ts.map +1 -1
  244. package/src/picker/components/dayPicker/dayPicker.component.html +7 -7
  245. package/src/picker/components/dayPicker/dayPicker.interfaces.d.ts +10 -10
  246. package/src/picker/components/monthPicker/monthPicker.component.d.ts +52 -49
  247. package/src/picker/components/monthPicker/monthPicker.component.d.ts.map +1 -1
  248. package/src/picker/components/monthPicker/monthPicker.component.html +6 -6
  249. package/src/picker/components/monthPicker/monthPicker.interfaces.d.ts +6 -6
  250. package/src/picker/components/picker/picker.component.animations.d.ts +4 -4
  251. package/src/picker/components/picker/picker.component.d.ts +104 -101
  252. package/src/picker/components/picker/picker.component.d.ts.map +1 -1
  253. package/src/picker/components/pickerBase.component.d.ts +169 -166
  254. package/src/picker/components/pickerBase.component.d.ts.map +1 -1
  255. package/src/picker/components/yearPicker/yearPicker.component.d.ts +57 -54
  256. package/src/picker/components/yearPicker/yearPicker.component.d.ts.map +1 -1
  257. package/src/picker/components/yearPicker/yearPicker.component.html +6 -6
  258. package/src/picker/components/yearPicker/yearPicker.interfaces.d.ts +6 -6
  259. package/src/picker/interfaces.d.ts +4 -4
  260. package/src/picker/misc/datetimePicker.interface.d.ts +188 -188
  261. package/src/picker/misc/tokens.d.ts +6 -6
  262. package/src/picker/modules/picker.module.d.ts +16 -5
  263. package/src/picker/modules/picker.module.d.ts.map +1 -1
  264. package/src/picker/types.d.ts +7 -7
  265. package/src/pipes/asRequiredType.d.ts +21 -0
  266. package/src/pipes/asRequiredType.d.ts.map +1 -0
  267. package/src/pipes/dateConvert.pipe.d.ts +18 -15
  268. package/src/pipes/dateConvert.pipe.d.ts.map +1 -1
  269. package/src/pipes/dateFormat.pipe.d.ts +20 -17
  270. package/src/pipes/dateFormat.pipe.d.ts.map +1 -1
  271. package/src/selector/components/inputDateTime/inputDateTime.component.d.ts +187 -184
  272. package/src/selector/components/inputDateTime/inputDateTime.component.d.ts.map +1 -1
  273. package/src/selector/components/selector/selector.component.animations.d.ts +4 -4
  274. package/src/selector/components/selector/selector.component.d.ts +155 -152
  275. package/src/selector/components/selector/selector.component.d.ts.map +1 -1
  276. package/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.d.ts +170 -167
  277. package/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.d.ts.map +1 -1
  278. package/src/selector/directives/datetimeMaxValidator/datetimeMaxValidator.directive.d.ts +22 -19
  279. package/src/selector/directives/datetimeMaxValidator/datetimeMaxValidator.directive.d.ts.map +1 -1
  280. package/src/selector/directives/datetimeMinValidator/datetimeMinValidator.directive.d.ts +22 -19
  281. package/src/selector/directives/datetimeMinValidator/datetimeMinValidator.directive.d.ts.map +1 -1
  282. package/src/selector/directives/datetimeValidator/datetimeValidator.directive.d.ts +21 -18
  283. package/src/selector/directives/datetimeValidator/datetimeValidator.directive.d.ts.map +1 -1
  284. package/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.d.ts +53 -50
  285. package/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.d.ts.map +1 -1
  286. package/src/selector/interfaces.d.ts +1 -1
  287. package/src/selector/misc/datetimeSelector.interface.d.ts +82 -82
  288. package/src/selector/misc/tokens.d.ts +6 -6
  289. package/src/selector/modules/basicSelector.module.d.ts +10 -5
  290. package/src/selector/modules/basicSelector.module.d.ts.map +1 -1
  291. package/src/selector/modules/selector.module.d.ts +18 -5
  292. package/src/selector/modules/selector.module.d.ts.map +1 -1
  293. package/src/selector/types.d.ts +9 -9
  294. package/src/services/dateApi.interface.d.ts +275 -275
  295. package/src/services/datePositionParser.interface.d.ts +40 -40
  296. package/src/services/datePositionParser.service.d.ts +60 -57
  297. package/src/services/datePositionParser.service.d.ts.map +1 -1
  298. package/src/services/dateTimeRelativeParser.service.d.ts +21 -18
  299. package/src/services/dateTimeRelativeParser.service.d.ts.map +1 -1
  300. package/src/services/dateValueProvider.service.d.ts +18 -15
  301. package/src/services/dateValueProvider.service.d.ts.map +1 -1
  302. package/src/services/formatProvider.interface.d.ts +17 -17
  303. package/src/services/index.d.ts +3 -3
  304. package/tsconfig.karma.json +5 -6
  305. package/version.bak +1 -1
  306. package/appveyor.yml +0 -70
  307. package/date-fns/dist/es2015/date-fns/index.js +0 -10
  308. package/date-fns/dist/es2015/date-fns/public_api.js +0 -7
  309. package/date-fns/dist/es2015/date-fns/src/date-fns.js +0 -9
  310. package/date-fns/dist/es2015/date-fns/src/misc/tokens.js +0 -32
  311. package/date-fns/dist/es2015/date-fns/src/services/dateFnsDateApi.service.js +0 -512
  312. package/date-fns/dist/es2015/date-fns/src/services/dateFnsLocale.service.js +0 -18
  313. package/date-fns/dist/es5/date-fns/index.js +0 -10
  314. package/date-fns/dist/es5/date-fns/public_api.js +0 -7
  315. package/date-fns/dist/es5/date-fns/src/date-fns.js +0 -9
  316. package/date-fns/dist/es5/date-fns/src/misc/tokens.js +0 -32
  317. package/date-fns/dist/es5/date-fns/src/services/dateFnsDateApi.service.js +0 -902
  318. package/date-fns/dist/es5/date-fns/src/services/dateFnsLocale.service.js +0 -18
  319. package/date-fns/index.d.ts +0 -5
  320. package/date-fns/index.d.ts.map +0 -1
  321. package/date-fns/index.metadata.json +0 -1
  322. package/date-fns/public_api.d.ts +0 -2
  323. package/date-fns/public_api.d.ts.map +0 -1
  324. package/date-fns/src/date-fns.d.ts.map +0 -1
  325. package/date-fns/src/services/dateFnsDateApi.service.ngfactory.d.ts.map +0 -1
  326. package/datetime.d.ts.map +0 -1
  327. package/datetime.metadata.json +0 -1
  328. package/dist/es2015/datetime.js +0 -10
  329. package/dist/es2015/public_api.js +0 -7
  330. package/dist/es2015/src/datetime.js +0 -24
  331. package/dist/es2015/src/misc/constants.js +0 -46
  332. package/dist/es2015/src/misc/datetime.interface.js +0 -52
  333. package/dist/es2015/src/misc/tokens.js +0 -29
  334. package/dist/es2015/src/misc/validators.js +0 -80
  335. package/dist/es2015/src/modules/datePipes.module.js +0 -26
  336. package/dist/es2015/src/picker/components/dayPicker/dayPicker.component.js +0 -215
  337. package/dist/es2015/src/picker/components/dayPicker/dayPicker.interfaces.js +0 -18
  338. package/dist/es2015/src/picker/components/monthPicker/monthPicker.component.js +0 -138
  339. package/dist/es2015/src/picker/components/monthPicker/monthPicker.interfaces.js +0 -11
  340. package/dist/es2015/src/picker/components/picker/picker.component.animations.js +0 -77
  341. package/dist/es2015/src/picker/components/picker/picker.component.js +0 -386
  342. package/dist/es2015/src/picker/components/pickerBase.component.js +0 -406
  343. package/dist/es2015/src/picker/components/yearPicker/yearPicker.component.js +0 -158
  344. package/dist/es2015/src/picker/components/yearPicker/yearPicker.interfaces.js +0 -11
  345. package/dist/es2015/src/picker/interfaces.js +0 -10
  346. package/dist/es2015/src/picker/misc/datetimePicker.interface.js +0 -245
  347. package/dist/es2015/src/picker/misc/tokens.js +0 -12
  348. package/dist/es2015/src/picker/modules/picker.module.js +0 -35
  349. package/dist/es2015/src/picker/types.js +0 -13
  350. package/dist/es2015/src/pipes/dateConvert.pipe.js +0 -50
  351. package/dist/es2015/src/pipes/dateFormat.pipe.js +0 -64
  352. package/dist/es2015/src/selector/components/inputDateTime/inputDateTime.component.js +0 -588
  353. package/dist/es2015/src/selector/components/selector/selector.component.animations.js +0 -21
  354. package/dist/es2015/src/selector/components/selector/selector.component.js +0 -514
  355. package/dist/es2015/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.js +0 -456
  356. package/dist/es2015/src/selector/directives/datetimeMaxValidator/datetimeMaxValidator.directive.js +0 -73
  357. package/dist/es2015/src/selector/directives/datetimeMinValidator/datetimeMinValidator.directive.js +0 -73
  358. package/dist/es2015/src/selector/directives/datetimeValidator/datetimeValidator.directive.js +0 -70
  359. package/dist/es2015/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.js +0 -171
  360. package/dist/es2015/src/selector/interfaces.js +0 -7
  361. package/dist/es2015/src/selector/misc/datetimeSelector.interface.js +0 -106
  362. package/dist/es2015/src/selector/misc/tokens.js +0 -12
  363. package/dist/es2015/src/selector/modules/basicSelector.module.js +0 -20
  364. package/dist/es2015/src/selector/modules/selector.module.js +0 -45
  365. package/dist/es2015/src/selector/types.js +0 -15
  366. package/dist/es2015/src/services/dateApi.interface.js +0 -316
  367. package/dist/es2015/src/services/datePositionParser.interface.js +0 -56
  368. package/dist/es2015/src/services/datePositionParser.service.js +0 -297
  369. package/dist/es2015/src/services/dateTimeRelativeParser.service.js +0 -97
  370. package/dist/es2015/src/services/dateValueProvider.service.js +0 -79
  371. package/dist/es2015/src/services/formatProvider.interface.js +0 -28
  372. package/dist/es2015/src/services/index.js +0 -9
  373. package/dist/es5/datetime.js +0 -10
  374. package/dist/es5/public_api.js +0 -7
  375. package/dist/es5/src/datetime.js +0 -24
  376. package/dist/es5/src/misc/constants.js +0 -46
  377. package/dist/es5/src/misc/datetime.interface.js +0 -52
  378. package/dist/es5/src/misc/tokens.js +0 -29
  379. package/dist/es5/src/misc/validators.js +0 -124
  380. package/dist/es5/src/modules/datePipes.module.js +0 -30
  381. package/dist/es5/src/picker/components/dayPicker/dayPicker.component.js +0 -323
  382. package/dist/es5/src/picker/components/dayPicker/dayPicker.interfaces.js +0 -18
  383. package/dist/es5/src/picker/components/monthPicker/monthPicker.component.js +0 -233
  384. package/dist/es5/src/picker/components/monthPicker/monthPicker.interfaces.js +0 -11
  385. package/dist/es5/src/picker/components/picker/picker.component.animations.js +0 -77
  386. package/dist/es5/src/picker/components/picker/picker.component.js +0 -460
  387. package/dist/es5/src/picker/components/pickerBase.component.js +0 -561
  388. package/dist/es5/src/picker/components/yearPicker/yearPicker.component.js +0 -253
  389. package/dist/es5/src/picker/components/yearPicker/yearPicker.interfaces.js +0 -11
  390. package/dist/es5/src/picker/interfaces.js +0 -10
  391. package/dist/es5/src/picker/misc/datetimePicker.interface.js +0 -245
  392. package/dist/es5/src/picker/misc/tokens.js +0 -12
  393. package/dist/es5/src/picker/modules/picker.module.js +0 -39
  394. package/dist/es5/src/picker/types.js +0 -13
  395. package/dist/es5/src/pipes/dateConvert.pipe.js +0 -63
  396. package/dist/es5/src/pipes/dateFormat.pipe.js +0 -79
  397. package/dist/es5/src/selector/components/inputDateTime/inputDateTime.component.js +0 -808
  398. package/dist/es5/src/selector/components/selector/selector.component.animations.js +0 -21
  399. package/dist/es5/src/selector/components/selector/selector.component.js +0 -653
  400. package/dist/es5/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.js +0 -656
  401. package/dist/es5/src/selector/directives/datetimeMaxValidator/datetimeMaxValidator.directive.js +0 -84
  402. package/dist/es5/src/selector/directives/datetimeMinValidator/datetimeMinValidator.directive.js +0 -84
  403. package/dist/es5/src/selector/directives/datetimeValidator/datetimeValidator.directive.js +0 -82
  404. package/dist/es5/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.js +0 -230
  405. package/dist/es5/src/selector/interfaces.js +0 -7
  406. package/dist/es5/src/selector/misc/datetimeSelector.interface.js +0 -106
  407. package/dist/es5/src/selector/misc/tokens.js +0 -12
  408. package/dist/es5/src/selector/modules/basicSelector.module.js +0 -24
  409. package/dist/es5/src/selector/modules/selector.module.js +0 -49
  410. package/dist/es5/src/selector/types.js +0 -15
  411. package/dist/es5/src/services/dateApi.interface.js +0 -316
  412. package/dist/es5/src/services/datePositionParser.interface.js +0 -56
  413. package/dist/es5/src/services/datePositionParser.service.js +0 -366
  414. package/dist/es5/src/services/dateTimeRelativeParser.service.js +0 -108
  415. package/dist/es5/src/services/dateValueProvider.service.js +0 -92
  416. package/dist/es5/src/services/formatProvider.interface.js +0 -28
  417. package/dist/es5/src/services/index.js +0 -9
  418. package/moment/dist/es2015/moment/index.js +0 -10
  419. package/moment/dist/es2015/moment/public_api.js +0 -7
  420. package/moment/dist/es2015/moment/src/misc/tokens.js +0 -26
  421. package/moment/dist/es2015/moment/src/moment.js +0 -8
  422. package/moment/dist/es2015/moment/src/services/momentDateApi.service.js +0 -466
  423. package/moment/dist/es5/moment/index.js +0 -10
  424. package/moment/dist/es5/moment/public_api.js +0 -7
  425. package/moment/dist/es5/moment/src/misc/tokens.js +0 -26
  426. package/moment/dist/es5/moment/src/moment.js +0 -8
  427. package/moment/dist/es5/moment/src/services/momentDateApi.service.js +0 -858
  428. package/moment/index.d.ts +0 -5
  429. package/moment/index.d.ts.map +0 -1
  430. package/moment/index.metadata.json +0 -1
  431. package/moment/public_api.d.ts +0 -2
  432. package/moment/public_api.d.ts.map +0 -1
  433. package/moment/src/moment.d.ts.map +0 -1
  434. package/moment/src/services/momentDateApi.service.ngfactory.d.ts.map +0 -1
  435. package/public_api.d.ts +0 -2
  436. package/public_api.d.ts.map +0 -1
  437. package/src/datetime.d.ts.map +0 -1
  438. package/src/modules/datePipes.module.ngfactory.d.ts.map +0 -1
  439. package/src/picker/components/dayPicker/dayPicker.component.css.shim.ngstyle.d.ts.map +0 -1
  440. package/src/picker/components/dayPicker/dayPicker.component.ngfactory.d.ts.map +0 -1
  441. package/src/picker/components/monthPicker/monthPicker.component.css.shim.ngstyle.d.ts.map +0 -1
  442. package/src/picker/components/monthPicker/monthPicker.component.ngfactory.d.ts.map +0 -1
  443. package/src/picker/components/picker/picker.component.ngfactory.d.ts.map +0 -1
  444. package/src/picker/components/yearPicker/yearPicker.component.css.shim.ngstyle.d.ts.map +0 -1
  445. package/src/picker/components/yearPicker/yearPicker.component.ngfactory.d.ts.map +0 -1
  446. package/src/picker/modules/picker.module.ngfactory.d.ts.map +0 -1
  447. package/src/pipes/dateConvert.pipe.ngfactory.d.ts.map +0 -1
  448. package/src/pipes/dateFormat.pipe.ngfactory.d.ts.map +0 -1
  449. package/src/selector/components/inputDateTime/inputDateTime.component.css.shim.ngstyle.d.ts.map +0 -1
  450. package/src/selector/components/inputDateTime/inputDateTime.component.ngfactory.d.ts.map +0 -1
  451. package/src/selector/components/selector/selector.component.css.shim.ngstyle.d.ts.map +0 -1
  452. package/src/selector/components/selector/selector.component.ngfactory.d.ts.map +0 -1
  453. package/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.css.shim.ngstyle.d.ts.map +0 -1
  454. package/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.ngfactory.d.ts.map +0 -1
  455. package/src/selector/directives/datetimeMaxValidator/datetimeMaxValidator.directive.ngfactory.d.ts.map +0 -1
  456. package/src/selector/directives/datetimeMinValidator/datetimeMinValidator.directive.ngfactory.d.ts.map +0 -1
  457. package/src/selector/directives/datetimeValidator/datetimeValidator.directive.ngfactory.d.ts.map +0 -1
  458. package/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.ngfactory.d.ts.map +0 -1
  459. package/src/selector/modules/basicSelector.module.ngfactory.d.ts.map +0 -1
  460. package/src/selector/modules/selector.module.ngfactory.d.ts.map +0 -1
  461. package/src/services/datePositionParser.service.ngfactory.d.ts.map +0 -1
  462. package/src/services/dateTimeRelativeParser.service.ngfactory.d.ts.map +0 -1
  463. package/src/services/dateValueProvider.service.ngfactory.d.ts.map +0 -1
@@ -1,902 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: date-fns/src/services/dateFnsDateApi.service.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import { Inject, Injectable } from '@angular/core';
7
- import { DateTimeRelativeParser } from '@anglr/datetime';
8
- import { isBlank, isPresent, isString } from '@jscrpt/common';
9
- import { toDate, getDate, setDate, isAfter, isBefore, differenceInCalendarDays, format, startOfMonth, endOfMonth, startOfWeek, endOfWeek, startOfDay, endOfDay, addMonths, addWeeks, addDays, subMonths, subWeeks, subDays, getDaysInMonth, isSameDay, isSameWeek, isSameMonth, isValid, parse, parseISO, addYears, subYears, startOfYear, endOfYear, isWeekend, setYear, getYear, isSameYear, startOfDecade, endOfDecade, setMonth, getMonth, setISODay, getISODay } from 'date-fns';
10
- import { DATE_FNS_LOCALE } from '../misc/tokens';
11
- /**
12
- * Instance of object wrapping TDate, allowing manipulation with it
13
- */
14
- var /**
15
- * Instance of object wrapping TDate, allowing manipulation with it
16
- */
17
- DateFnsDateApiObject = /** @class */ (function () {
18
- //######################### constructor #########################
19
- function DateFnsDateApiObject(value, _localeSvc, format) {
20
- this._localeSvc = _localeSvc;
21
- if (isString(value)) {
22
- //ISO string
23
- if (/^\d+-\d+-\d+(T\d+:\d+:\d+)?/.test(value)) {
24
- this._value = this._originalValue = parseISO(value);
25
- }
26
- else {
27
- if (isBlank(format)) {
28
- throw new Error("date-fns requires format parameter to be set for parsing non ISO string date!");
29
- }
30
- this._value = this._originalValue = parse(value, format, new Date(1970, 0));
31
- }
32
- }
33
- else {
34
- this._value = this._originalValue = toDate(value);
35
- }
36
- }
37
- Object.defineProperty(DateFnsDateApiObject.prototype, "originalValue", {
38
- //######################### public properties - implementation of DateApiObject #########################
39
- /**
40
- * Original value that is not changed unless 'updateOriginal' is called
41
- */
42
- get:
43
- //######################### public properties - implementation of DateApiObject #########################
44
- /**
45
- * Original value that is not changed unless 'updateOriginal' is called
46
- * @return {?}
47
- */
48
- function () {
49
- return this._originalValue;
50
- },
51
- enumerable: false,
52
- configurable: true
53
- });
54
- Object.defineProperty(DateFnsDateApiObject.prototype, "value", {
55
- /**
56
- * Instance of date
57
- */
58
- get: /**
59
- * Instance of date
60
- * @return {?}
61
- */
62
- function () {
63
- return this._value;
64
- },
65
- enumerable: false,
66
- configurable: true
67
- });
68
- //######################### public methods - implementation of DateApiObject #########################
69
- /**
70
- * Gets indication whether provided instance of date is valid
71
- */
72
- //######################### public methods - implementation of DateApiObject #########################
73
- /**
74
- * Gets indication whether provided instance of date is valid
75
- * @return {?}
76
- */
77
- DateFnsDateApiObject.prototype.isValid =
78
- //######################### public methods - implementation of DateApiObject #########################
79
- /**
80
- * Gets indication whether provided instance of date is valid
81
- * @return {?}
82
- */
83
- function () {
84
- return isValid(this._value);
85
- };
86
- /**
87
- * Gets indication whether provided instance of date is weekend day
88
- */
89
- /**
90
- * Gets indication whether provided instance of date is weekend day
91
- * @return {?}
92
- */
93
- DateFnsDateApiObject.prototype.isWeekend = /**
94
- * Gets indication whether provided instance of date is weekend day
95
- * @return {?}
96
- */
97
- function () {
98
- return isWeekend(this._value);
99
- };
100
- /**
101
- * Formats date value
102
- * @param formatString - Format token used for creating formatted string
103
- */
104
- /**
105
- * Formats date value
106
- * @param {?} formatString - Format token used for creating formatted string
107
- * @return {?}
108
- */
109
- DateFnsDateApiObject.prototype.format = /**
110
- * Formats date value
111
- * @param {?} formatString - Format token used for creating formatted string
112
- * @return {?}
113
- */
114
- function (formatString) {
115
- return format(this._value, formatString, { locale: this._localeSvc.locale });
116
- };
117
- /**
118
- * Updates value to start date and time of current decade
119
- * @returns Itself for fluent API
120
- */
121
- /**
122
- * Updates value to start date and time of current decade
123
- * @return {?} Itself for fluent API
124
- */
125
- DateFnsDateApiObject.prototype.startOfDecade = /**
126
- * Updates value to start date and time of current decade
127
- * @return {?} Itself for fluent API
128
- */
129
- function () {
130
- this._value = startOfDecade(this._value);
131
- return this;
132
- };
133
- /**
134
- * Updates value to end date and time of current decade
135
- * @returns Itself for fluent API
136
- */
137
- /**
138
- * Updates value to end date and time of current decade
139
- * @return {?} Itself for fluent API
140
- */
141
- DateFnsDateApiObject.prototype.endOfDecade = /**
142
- * Updates value to end date and time of current decade
143
- * @return {?} Itself for fluent API
144
- */
145
- function () {
146
- this._value = endOfDecade(this._value);
147
- return this;
148
- };
149
- /**
150
- * Updates value to start date and time of current year
151
- * @returns Itself for fluent API
152
- */
153
- /**
154
- * Updates value to start date and time of current year
155
- * @return {?} Itself for fluent API
156
- */
157
- DateFnsDateApiObject.prototype.startOfYear = /**
158
- * Updates value to start date and time of current year
159
- * @return {?} Itself for fluent API
160
- */
161
- function () {
162
- this._value = startOfYear(this._value);
163
- return this;
164
- };
165
- /**
166
- * Updates value to end date and time of current year
167
- * @returns Itself for fluent API
168
- */
169
- /**
170
- * Updates value to end date and time of current year
171
- * @return {?} Itself for fluent API
172
- */
173
- DateFnsDateApiObject.prototype.endOfYear = /**
174
- * Updates value to end date and time of current year
175
- * @return {?} Itself for fluent API
176
- */
177
- function () {
178
- this._value = endOfYear(this._value);
179
- return this;
180
- };
181
- /**
182
- * Add years, if count not specified adds 1 year
183
- * @param count - Number of years count
184
- * @returns Itself for fluent API
185
- */
186
- /**
187
- * Add years, if count not specified adds 1 year
188
- * @param {?=} count - Number of years count
189
- * @return {?} Itself for fluent API
190
- */
191
- DateFnsDateApiObject.prototype.addYears = /**
192
- * Add years, if count not specified adds 1 year
193
- * @param {?=} count - Number of years count
194
- * @return {?} Itself for fluent API
195
- */
196
- function (count) {
197
- this._value = addYears(this._value, count !== null && count !== void 0 ? count : 1);
198
- return this;
199
- };
200
- /**
201
- * Subtract years, if count not specified subtract 1 year
202
- * @param count - Number of years count
203
- * @returns Itself for fluent API
204
- */
205
- /**
206
- * Subtract years, if count not specified subtract 1 year
207
- * @param {?=} count - Number of years count
208
- * @return {?} Itself for fluent API
209
- */
210
- DateFnsDateApiObject.prototype.subtractYears = /**
211
- * Subtract years, if count not specified subtract 1 year
212
- * @param {?=} count - Number of years count
213
- * @return {?} Itself for fluent API
214
- */
215
- function (count) {
216
- this._value = subYears(this._value, count !== null && count !== void 0 ? count : 1);
217
- return this;
218
- };
219
- /**
220
- * Updates value to start date and time of current month
221
- * @returns Itself for fluent API
222
- */
223
- /**
224
- * Updates value to start date and time of current month
225
- * @return {?} Itself for fluent API
226
- */
227
- DateFnsDateApiObject.prototype.startOfMonth = /**
228
- * Updates value to start date and time of current month
229
- * @return {?} Itself for fluent API
230
- */
231
- function () {
232
- this._value = startOfMonth(this._value);
233
- return this;
234
- };
235
- /**
236
- * Updates value to end date and time of current month
237
- * @returns Itself for fluent API
238
- */
239
- /**
240
- * Updates value to end date and time of current month
241
- * @return {?} Itself for fluent API
242
- */
243
- DateFnsDateApiObject.prototype.endOfMonth = /**
244
- * Updates value to end date and time of current month
245
- * @return {?} Itself for fluent API
246
- */
247
- function () {
248
- this._value = endOfMonth(this._value);
249
- return this;
250
- };
251
- /**
252
- * Add months, if count not specified adds 1 month
253
- * @param count - Number of months count
254
- * @returns Itself for fluent API
255
- */
256
- /**
257
- * Add months, if count not specified adds 1 month
258
- * @param {?=} count - Number of months count
259
- * @return {?} Itself for fluent API
260
- */
261
- DateFnsDateApiObject.prototype.addMonths = /**
262
- * Add months, if count not specified adds 1 month
263
- * @param {?=} count - Number of months count
264
- * @return {?} Itself for fluent API
265
- */
266
- function (count) {
267
- this._value = addMonths(this._value, count !== null && count !== void 0 ? count : 1);
268
- return this;
269
- };
270
- /**
271
- * Subtract months, if count not specified subtract 1 month
272
- * @param count - Number of months count
273
- * @returns Itself for fluent API
274
- */
275
- /**
276
- * Subtract months, if count not specified subtract 1 month
277
- * @param {?=} count - Number of months count
278
- * @return {?} Itself for fluent API
279
- */
280
- DateFnsDateApiObject.prototype.subtractMonths = /**
281
- * Subtract months, if count not specified subtract 1 month
282
- * @param {?=} count - Number of months count
283
- * @return {?} Itself for fluent API
284
- */
285
- function (count) {
286
- this._value = subMonths(this._value, count !== null && count !== void 0 ? count : 1);
287
- return this;
288
- };
289
- /**
290
- * Updates value to start date and time of current week
291
- * @returns Itself for fluent API
292
- */
293
- /**
294
- * Updates value to start date and time of current week
295
- * @return {?} Itself for fluent API
296
- */
297
- DateFnsDateApiObject.prototype.startOfWeek = /**
298
- * Updates value to start date and time of current week
299
- * @return {?} Itself for fluent API
300
- */
301
- function () {
302
- this._value = startOfWeek(this._value, { locale: this._localeSvc.locale });
303
- return this;
304
- };
305
- /**
306
- * Updates value to end date and time of current week
307
- * @returns Itself for fluent API
308
- */
309
- /**
310
- * Updates value to end date and time of current week
311
- * @return {?} Itself for fluent API
312
- */
313
- DateFnsDateApiObject.prototype.endOfWeek = /**
314
- * Updates value to end date and time of current week
315
- * @return {?} Itself for fluent API
316
- */
317
- function () {
318
- this._value = endOfWeek(this._value, { locale: this._localeSvc.locale });
319
- return this;
320
- };
321
- /**
322
- * Add weeks, if count not specified adds 1 week
323
- * @param count - Number of weeks count
324
- * @returns Itself for fluent API
325
- */
326
- /**
327
- * Add weeks, if count not specified adds 1 week
328
- * @param {?=} count - Number of weeks count
329
- * @return {?} Itself for fluent API
330
- */
331
- DateFnsDateApiObject.prototype.addWeeks = /**
332
- * Add weeks, if count not specified adds 1 week
333
- * @param {?=} count - Number of weeks count
334
- * @return {?} Itself for fluent API
335
- */
336
- function (count) {
337
- this._value = addWeeks(this._value, count !== null && count !== void 0 ? count : 1);
338
- return this;
339
- };
340
- /**
341
- * Subtract weeks, if count not specified subtract 1 week
342
- * @param count - Number of weeks count
343
- * @returns Itself for fluent API
344
- */
345
- /**
346
- * Subtract weeks, if count not specified subtract 1 week
347
- * @param {?=} count - Number of weeks count
348
- * @return {?} Itself for fluent API
349
- */
350
- DateFnsDateApiObject.prototype.subtractWeeks = /**
351
- * Subtract weeks, if count not specified subtract 1 week
352
- * @param {?=} count - Number of weeks count
353
- * @return {?} Itself for fluent API
354
- */
355
- function (count) {
356
- this._value = subWeeks(this._value, count !== null && count !== void 0 ? count : 1);
357
- return this;
358
- };
359
- /**
360
- * Updates value to start date and time of current day
361
- * @returns Itself for fluent API
362
- */
363
- /**
364
- * Updates value to start date and time of current day
365
- * @return {?} Itself for fluent API
366
- */
367
- DateFnsDateApiObject.prototype.startOfDay = /**
368
- * Updates value to start date and time of current day
369
- * @return {?} Itself for fluent API
370
- */
371
- function () {
372
- this._value = startOfDay(this._value);
373
- return this;
374
- };
375
- /**
376
- * Updates value to end date and time of current day
377
- * @returns Itself for fluent API
378
- */
379
- /**
380
- * Updates value to end date and time of current day
381
- * @return {?} Itself for fluent API
382
- */
383
- DateFnsDateApiObject.prototype.endOfDay = /**
384
- * Updates value to end date and time of current day
385
- * @return {?} Itself for fluent API
386
- */
387
- function () {
388
- this._value = endOfDay(this._value);
389
- return this;
390
- };
391
- /**
392
- * Add days, if count not specified adds 1 day
393
- * @param count - Number of days count
394
- * @returns Itself for fluent API
395
- */
396
- /**
397
- * Add days, if count not specified adds 1 day
398
- * @param {?=} count - Number of days count
399
- * @return {?} Itself for fluent API
400
- */
401
- DateFnsDateApiObject.prototype.addDays = /**
402
- * Add days, if count not specified adds 1 day
403
- * @param {?=} count - Number of days count
404
- * @return {?} Itself for fluent API
405
- */
406
- function (count) {
407
- this._value = addDays(this._value, count !== null && count !== void 0 ? count : 1);
408
- return this;
409
- };
410
- /**
411
- * Subtract days, if count not specified subtract 1 day
412
- * @param count - Number of days count
413
- * @returns Itself for fluent API
414
- */
415
- /**
416
- * Subtract days, if count not specified subtract 1 day
417
- * @param {?=} count - Number of days count
418
- * @return {?} Itself for fluent API
419
- */
420
- DateFnsDateApiObject.prototype.subtractDays = /**
421
- * Subtract days, if count not specified subtract 1 day
422
- * @param {?=} count - Number of days count
423
- * @return {?} Itself for fluent API
424
- */
425
- function (count) {
426
- this._value = subDays(this._value, count !== null && count !== void 0 ? count : 1);
427
- return this;
428
- };
429
- /**
430
- * Gets number of days in month
431
- */
432
- /**
433
- * Gets number of days in month
434
- * @return {?}
435
- */
436
- DateFnsDateApiObject.prototype.daysInMonth = /**
437
- * Gets number of days in month
438
- * @return {?}
439
- */
440
- function () {
441
- return getDaysInMonth(this._value);
442
- };
443
- /**
444
- * Gets or sets year
445
- * @param year - If specified, sets year
446
- */
447
- /**
448
- * Gets or sets year
449
- * @param {?=} year - If specified, sets year
450
- * @return {?}
451
- */
452
- DateFnsDateApiObject.prototype.year = /**
453
- * Gets or sets year
454
- * @param {?=} year - If specified, sets year
455
- * @return {?}
456
- */
457
- function (year) {
458
- if (isPresent(year)) {
459
- this._value = setYear(this._value, (/** @type {?} */ (year)));
460
- return this;
461
- }
462
- return getYear(this._value);
463
- };
464
- /**
465
- * Gets or sets month
466
- * @param month - If specified, sets month
467
- */
468
- /**
469
- * Gets or sets month
470
- * @param {?=} month - If specified, sets month
471
- * @return {?}
472
- */
473
- DateFnsDateApiObject.prototype.month = /**
474
- * Gets or sets month
475
- * @param {?=} month - If specified, sets month
476
- * @return {?}
477
- */
478
- function (month) {
479
- if (isPresent(month)) {
480
- this._value = setMonth(this._value, (/** @type {?} */ (month)));
481
- return this;
482
- }
483
- return getMonth(this._value);
484
- };
485
- /**
486
- * Gets or sets day of month one based
487
- * @param day - If specified, sets day of month
488
- */
489
- /**
490
- * Gets or sets day of month one based
491
- * @param {?=} day - If specified, sets day of month
492
- * @return {?}
493
- */
494
- DateFnsDateApiObject.prototype.dayOfMonth = /**
495
- * Gets or sets day of month one based
496
- * @param {?=} day - If specified, sets day of month
497
- * @return {?}
498
- */
499
- function (day) {
500
- if (isPresent(day)) {
501
- this._value = setDate(this._value, (/** @type {?} */ (day)));
502
- return this;
503
- }
504
- return getDate(this._value);
505
- };
506
- /**
507
- * Gets or sets day of week zero based, first is monday
508
- * @param day - If specified, sets day of week
509
- */
510
- /**
511
- * Gets or sets day of week zero based, first is monday
512
- * @param {?=} day - If specified, sets day of week
513
- * @return {?}
514
- */
515
- DateFnsDateApiObject.prototype.dayOfWeek = /**
516
- * Gets or sets day of week zero based, first is monday
517
- * @param {?=} day - If specified, sets day of week
518
- * @return {?}
519
- */
520
- function (day) {
521
- if (isPresent(day)) {
522
- this._value = setISODay(this._value, day + (/** @type {?} */ (1)));
523
- return this;
524
- }
525
- return getISODay(this._value) - 1;
526
- };
527
- /**
528
- * Gets indication whether current value is before 'date'
529
- * @param date - Date which is this date compared to
530
- */
531
- /**
532
- * Gets indication whether current value is before 'date'
533
- * @param {?} date - Date which is this date compared to
534
- * @return {?}
535
- */
536
- DateFnsDateApiObject.prototype.isBefore = /**
537
- * Gets indication whether current value is before 'date'
538
- * @param {?} date - Date which is this date compared to
539
- * @return {?}
540
- */
541
- function (date) {
542
- return isBefore(this._value, date);
543
- };
544
- /**
545
- * Gets indication whether current value is after 'date'
546
- * @param date - Date which is this date compared to
547
- */
548
- /**
549
- * Gets indication whether current value is after 'date'
550
- * @param {?} date - Date which is this date compared to
551
- * @return {?}
552
- */
553
- DateFnsDateApiObject.prototype.isAfter = /**
554
- * Gets indication whether current value is after 'date'
555
- * @param {?} date - Date which is this date compared to
556
- * @return {?}
557
- */
558
- function (date) {
559
- return isAfter(this._value, date);
560
- };
561
- /**
562
- * Gets number of days between this and provided date
563
- * @param date - Date which is used for computation of diff against
564
- */
565
- /**
566
- * Gets number of days between this and provided date
567
- * @param {?} date - Date which is used for computation of diff against
568
- * @return {?}
569
- */
570
- DateFnsDateApiObject.prototype.diffDays = /**
571
- * Gets number of days between this and provided date
572
- * @param {?} date - Date which is used for computation of diff against
573
- * @return {?}
574
- */
575
- function (date) {
576
- return differenceInCalendarDays(this._value, date);
577
- };
578
- /**
579
- * Compares whether this date is same week as provided date
580
- * @param date - Date which is used for comparison of same week
581
- */
582
- /**
583
- * Compares whether this date is same week as provided date
584
- * @param {?} date - Date which is used for comparison of same week
585
- * @return {?}
586
- */
587
- DateFnsDateApiObject.prototype.isSameWeek = /**
588
- * Compares whether this date is same week as provided date
589
- * @param {?} date - Date which is used for comparison of same week
590
- * @return {?}
591
- */
592
- function (date) {
593
- return isSameWeek(this._value, date, { locale: this._localeSvc.locale });
594
- };
595
- /**
596
- * Compares whether this date is same decade as provided date
597
- * @param date - Date which is used for comparison of same decade
598
- */
599
- /**
600
- * Compares whether this date is same decade as provided date
601
- * @param {?} date - Date which is used for comparison of same decade
602
- * @return {?}
603
- */
604
- DateFnsDateApiObject.prototype.isSameDecade = /**
605
- * Compares whether this date is same decade as provided date
606
- * @param {?} date - Date which is used for comparison of same decade
607
- * @return {?}
608
- */
609
- function (date) {
610
- /** @type {?} */
611
- var year = getYear(this._value);
612
- /** @type {?} */
613
- var start = year - (year % 10);
614
- /** @type {?} */
615
- var end = start + 10;
616
- return getYear(date) >= start && getYear(date) < end;
617
- };
618
- /**
619
- * Compares whether this date is same year as provided date
620
- * @param date - Date which is used for comparison of same year
621
- */
622
- /**
623
- * Compares whether this date is same year as provided date
624
- * @param {?} date - Date which is used for comparison of same year
625
- * @return {?}
626
- */
627
- DateFnsDateApiObject.prototype.isSameYear = /**
628
- * Compares whether this date is same year as provided date
629
- * @param {?} date - Date which is used for comparison of same year
630
- * @return {?}
631
- */
632
- function (date) {
633
- return isSameYear(this._value, date);
634
- };
635
- /**
636
- * Compares whether this date is same month as provided date
637
- * @param date - Date which is used for comparison of same month
638
- */
639
- /**
640
- * Compares whether this date is same month as provided date
641
- * @param {?} date - Date which is used for comparison of same month
642
- * @return {?}
643
- */
644
- DateFnsDateApiObject.prototype.isSameMonth = /**
645
- * Compares whether this date is same month as provided date
646
- * @param {?} date - Date which is used for comparison of same month
647
- * @return {?}
648
- */
649
- function (date) {
650
- return isSameMonth(this._value, date);
651
- };
652
- /**
653
- * Compares whether this date is same day as provided date
654
- * @param date - Date which is used for comparison of same day
655
- */
656
- /**
657
- * Compares whether this date is same day as provided date
658
- * @param {?} date - Date which is used for comparison of same day
659
- * @return {?}
660
- */
661
- DateFnsDateApiObject.prototype.isSameDay = /**
662
- * Compares whether this date is same day as provided date
663
- * @param {?} date - Date which is used for comparison of same day
664
- * @return {?}
665
- */
666
- function (date) {
667
- return isSameDay(this._value, date);
668
- };
669
- /**
670
- * Creates clone of this instance, value and originalValue have same value and are cloned from value
671
- */
672
- /**
673
- * Creates clone of this instance, value and originalValue have same value and are cloned from value
674
- * @return {?}
675
- */
676
- DateFnsDateApiObject.prototype.clone = /**
677
- * Creates clone of this instance, value and originalValue have same value and are cloned from value
678
- * @return {?}
679
- */
680
- function () {
681
- return new DateFnsDateApiObject(new Date(this._value), this._localeSvc);
682
- };
683
- /**
684
- * Creates clone of this instance, value and originalValue have same value and are cloned from originalValue
685
- */
686
- /**
687
- * Creates clone of this instance, value and originalValue have same value and are cloned from originalValue
688
- * @return {?}
689
- */
690
- DateFnsDateApiObject.prototype.cloneOriginal = /**
691
- * Creates clone of this instance, value and originalValue have same value and are cloned from originalValue
692
- * @return {?}
693
- */
694
- function () {
695
- return new DateFnsDateApiObject(new Date(this._originalValue), this._localeSvc);
696
- };
697
- /**
698
- * Updates originalValue, if value is not provided originalValue is set to value
699
- * @param value - Value to be set as original, or null (value will be used as value)
700
- * @returns Itself for fluent API
701
- */
702
- /**
703
- * Updates originalValue, if value is not provided originalValue is set to value
704
- * @param {?=} value - Value to be set as original, or null (value will be used as value)
705
- * @return {?} Itself for fluent API
706
- */
707
- DateFnsDateApiObject.prototype.updateOriginal = /**
708
- * Updates originalValue, if value is not provided originalValue is set to value
709
- * @param {?=} value - Value to be set as original, or null (value will be used as value)
710
- * @return {?} Itself for fluent API
711
- */
712
- function (value) {
713
- if (isBlank(value)) {
714
- this._originalValue = this._value;
715
- }
716
- else {
717
- this._value = this._originalValue = (/** @type {?} */ (value));
718
- }
719
- return this;
720
- };
721
- /**
722
- * Changes value to same value as originalValue
723
- * @returns Itself for fluent API
724
- */
725
- /**
726
- * Changes value to same value as originalValue
727
- * @return {?} Itself for fluent API
728
- */
729
- DateFnsDateApiObject.prototype.resetOriginal = /**
730
- * Changes value to same value as originalValue
731
- * @return {?} Itself for fluent API
732
- */
733
- function () {
734
- this._value = this._originalValue;
735
- return this;
736
- };
737
- return DateFnsDateApiObject;
738
- }());
739
- if (false) {
740
- /**
741
- * Original value that is not changed unless 'updateOriginal' is called
742
- * @type {?}
743
- * @private
744
- */
745
- DateFnsDateApiObject.prototype._originalValue;
746
- /**
747
- * Instance of date
748
- * @type {?}
749
- * @private
750
- */
751
- DateFnsDateApiObject.prototype._value;
752
- /**
753
- * @type {?}
754
- * @protected
755
- */
756
- DateFnsDateApiObject.prototype._localeSvc;
757
- }
758
- /**
759
- * Date api using DateFnsJS, used for obtaining DateApi wrapper object
760
- */
761
- var DateFnsDateApi = /** @class */ (function () {
762
- //######################### constructor #########################
763
- function DateFnsDateApi(_localeSvc, _relativeParser) {
764
- this._localeSvc = _localeSvc;
765
- this._relativeParser = _relativeParser;
766
- }
767
- //######################### public methods - implementation of DateApi #########################
768
- /**
769
- * Gets wrapping object used for manipulation
770
- * @param value - Value to be converted (parsed) and used for manipulation
771
- * @param format - Format string used for parsing string value
772
- */
773
- //######################### public methods - implementation of DateApi #########################
774
- /**
775
- * Gets wrapping object used for manipulation
776
- * @param {?} value - Value to be converted (parsed) and used for manipulation
777
- * @param {?=} format - Format string used for parsing string value
778
- * @return {?}
779
- */
780
- DateFnsDateApi.prototype.getValue =
781
- //######################### public methods - implementation of DateApi #########################
782
- /**
783
- * Gets wrapping object used for manipulation
784
- * @param {?} value - Value to be converted (parsed) and used for manipulation
785
- * @param {?=} format - Format string used for parsing string value
786
- * @return {?}
787
- */
788
- function (value, format) {
789
- return new DateFnsDateApiObject(this._relativeParser.parse(value), this._localeSvc, format);
790
- };
791
- /**
792
- * Gets wrapping object used for manipulation instantiated to current date and time
793
- */
794
- /**
795
- * Gets wrapping object used for manipulation instantiated to current date and time
796
- * @return {?}
797
- */
798
- DateFnsDateApi.prototype.now = /**
799
- * Gets wrapping object used for manipulation instantiated to current date and time
800
- * @return {?}
801
- */
802
- function () {
803
- return new DateFnsDateApiObject(new Date(), this._localeSvc);
804
- };
805
- /**
806
- * Gets format string using pseudo format
807
- * @param pseudoFormat - Pseudo format token, used for obtaining 'date' or 'time' format string
808
- */
809
- /**
810
- * Gets format string using pseudo format
811
- * @param {?} pseudoFormat - Pseudo format token, used for obtaining 'date' or 'time' format string
812
- * @return {?}
813
- */
814
- DateFnsDateApi.prototype.getFormat = /**
815
- * Gets format string using pseudo format
816
- * @param {?} pseudoFormat - Pseudo format token, used for obtaining 'date' or 'time' format string
817
- * @return {?}
818
- */
819
- function (pseudoFormat) {
820
- if (/^p+$/i.test(pseudoFormat)) {
821
- /** @type {?} */
822
- var widths = {
823
- 1: 'short',
824
- 2: 'medium',
825
- 3: 'long',
826
- 4: 'full'
827
- };
828
- //date time format
829
- if (pseudoFormat.indexOf('Pp') >= 0 && pseudoFormat.length <= 8) {
830
- return (/** @type {?} */ (this._localeSvc.locale.formatLong)).dateTime({ width: widths[pseudoFormat.length / 2] });
831
- }
832
- //date format
833
- else if (pseudoFormat.indexOf('P') >= 0 && pseudoFormat.length <= 4) {
834
- return (/** @type {?} */ (this._localeSvc.locale.formatLong)).date({ width: widths[pseudoFormat.length] });
835
- }
836
- //time format
837
- else if (pseudoFormat.indexOf('p') >= 0 && pseudoFormat.length <= 4) {
838
- return (/** @type {?} */ (this._localeSvc.locale.formatLong)).time({ width: widths[pseudoFormat.length] });
839
- }
840
- }
841
- return pseudoFormat;
842
- };
843
- /**
844
- * Gets information
845
- */
846
- /**
847
- * Gets information
848
- * @return {?}
849
- */
850
- DateFnsDateApi.prototype.weekStartsOnMonday = /**
851
- * Gets information
852
- * @return {?}
853
- */
854
- function () {
855
- var _a;
856
- return ((_a = this._localeSvc.locale.options) === null || _a === void 0 ? void 0 : _a.weekStartsOn) === 1;
857
- };
858
- /**
859
- * Gets array of weekday names in short format, order of days is dependent on locale
860
- */
861
- /**
862
- * Gets array of weekday names in short format, order of days is dependent on locale
863
- * @return {?}
864
- */
865
- DateFnsDateApi.prototype.weekdaysShort = /**
866
- * Gets array of weekday names in short format, order of days is dependent on locale
867
- * @return {?}
868
- */
869
- function () {
870
- /** @type {?} */
871
- var startIndex = (/** @type {?} */ ((/** @type {?} */ (this._localeSvc.locale.options)).weekStartsOn));
872
- /** @type {?} */
873
- var weekdays = [];
874
- for (var x = 0; x < 7; x++) {
875
- weekdays.push((/** @type {?} */ (this._localeSvc.locale.localize)).day(startIndex++ % 7, { width: 'short' }));
876
- }
877
- return weekdays;
878
- };
879
- DateFnsDateApi.decorators = [
880
- { type: Injectable }
881
- ];
882
- /** @nocollapse */
883
- DateFnsDateApi.ctorParameters = function () { return [
884
- { type: undefined, decorators: [{ type: Inject, args: [DATE_FNS_LOCALE,] }] },
885
- { type: DateTimeRelativeParser }
886
- ]; };
887
- return DateFnsDateApi;
888
- }());
889
- export { DateFnsDateApi };
890
- if (false) {
891
- /**
892
- * @type {?}
893
- * @protected
894
- */
895
- DateFnsDateApi.prototype._localeSvc;
896
- /**
897
- * @type {?}
898
- * @protected
899
- */
900
- DateFnsDateApi.prototype._relativeParser;
901
- }
902
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZUZuc0RhdGVBcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9kYXRlRm5zRGF0ZUFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFvQyxzQkFBc0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFGLE9BQU8sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVwZCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFNL0M7Ozs7SUFnQ0ksaUVBQWlFO0lBQ2pFLDhCQUFZLEtBQXFCLEVBQ1gsVUFBeUIsRUFDbkMsTUFBZTtRQURMLGVBQVUsR0FBVixVQUFVLENBQWU7UUFHM0MsSUFBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQ2xCO1lBQ0ksWUFBWTtZQUNaLElBQUcsNkJBQTZCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUM1QztnQkFDSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3ZEO2lCQUVEO2dCQUNJLElBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUNsQjtvQkFDSSxNQUFNLElBQUksS0FBSyxDQUFDLCtFQUErRSxDQUFDLENBQUM7aUJBQ3BHO2dCQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvRTtTQUNKO2FBRUQ7WUFDSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JEO0lBQ0wsQ0FBQztJQXZDRCxzQkFBVywrQ0FBYTtRQUx4Qix5R0FBeUc7UUFFekc7O1dBRUc7Ozs7Ozs7UUFDSDtZQUVJLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMvQixDQUFDOzs7T0FBQTtJQUtELHNCQUFXLHVDQUFLO1FBSGhCOztXQUVHOzs7OztRQUNIO1lBRUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLENBQUM7OztPQUFBO0lBOEJELHNHQUFzRztJQUV0Rzs7T0FFRzs7Ozs7O0lBQ0ksc0NBQU87Ozs7OztJQUFkO1FBRUksT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRzs7Ozs7SUFDSSx3Q0FBUzs7OztJQUFoQjtRQUVJLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHOzs7Ozs7SUFDSSxxQ0FBTTs7Ozs7SUFBYixVQUFjLFlBQW9CO1FBRTlCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQ7OztPQUdHOzs7OztJQUNJLDRDQUFhOzs7O0lBQXBCO1FBRUksSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7Ozs7O0lBQ0ksMENBQVc7Ozs7SUFBbEI7UUFFSSxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVBOzs7TUFHRTs7Ozs7SUFDSSwwQ0FBVzs7OztJQUFsQjtRQUVJLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV2QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHOzs7OztJQUNJLHdDQUFTOzs7O0lBQWhCO1FBRUksSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHOzs7Ozs7SUFDSSx1Q0FBUTs7Ozs7SUFBZixVQUFnQixLQUFjO1FBRTFCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksQ0FBQyxDQUFDLENBQUM7UUFFaEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7Ozs7OztJQUNJLDRDQUFhOzs7OztJQUFwQixVQUFxQixLQUFjO1FBRS9CLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksQ0FBQyxDQUFDLENBQUM7UUFFaEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7SUFDSSwyQ0FBWTs7OztJQUFuQjtRQUVJLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHOzs7OztJQUNJLHlDQUFVOzs7O0lBQWpCO1FBRUksSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHOzs7Ozs7SUFDSSx3Q0FBUzs7Ozs7SUFBaEIsVUFBaUIsS0FBYztRQUUzQixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssYUFBTCxLQUFLLGNBQUwsS0FBSyxHQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHOzs7Ozs7SUFDSSw2Q0FBYzs7Ozs7SUFBckIsVUFBc0IsS0FBYztRQUVoQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssYUFBTCxLQUFLLGNBQUwsS0FBSyxHQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7Ozs7O0lBQ0ksMENBQVc7Ozs7SUFBbEI7UUFFSSxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztRQUV6RSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHOzs7OztJQUNJLHdDQUFTOzs7O0lBQWhCO1FBRUksSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7UUFFdkUsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7Ozs7OztJQUNJLHVDQUFROzs7OztJQUFmLFVBQWdCLEtBQWM7UUFFMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLGFBQUwsS0FBSyxjQUFMLEtBQUssR0FBSSxDQUFDLENBQUMsQ0FBQztRQUVoRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7O0lBQ0ksNENBQWE7Ozs7O0lBQXBCLFVBQXFCLEtBQWM7UUFFL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLGFBQUwsS0FBSyxjQUFMLEtBQUssR0FBSSxDQUFDLENBQUMsQ0FBQztRQUVoRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHOzs7OztJQUNJLHlDQUFVOzs7O0lBQWpCO1FBRUksSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7Ozs7O0lBQ0ksdUNBQVE7Ozs7SUFBZjtRQUVJLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7O0lBQ0ksc0NBQU87Ozs7O0lBQWQsVUFBZSxLQUFjO1FBRXpCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksQ0FBQyxDQUFDLENBQUM7UUFFL0MsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7Ozs7OztJQUNJLDJDQUFZOzs7OztJQUFuQixVQUFvQixLQUFjO1FBRTlCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksQ0FBQyxDQUFDLENBQUM7UUFFL0MsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHOzs7OztJQUNJLDBDQUFXOzs7O0lBQWxCO1FBRUksT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFXRDs7O09BR0c7Ozs7OztJQUNJLG1DQUFJOzs7OztJQUFYLFVBQVksSUFBYTtRQUVyQixJQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDbEI7WUFDSSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLG1CQUFBLElBQUksRUFBQyxDQUFDLENBQUM7WUFFMUMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBV0Q7OztPQUdHOzs7Ozs7SUFDSSxvQ0FBSzs7Ozs7SUFBWixVQUFhLEtBQWM7UUFFdkIsSUFBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQ25CO1lBQ0ksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxtQkFBQSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1lBRTVDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQVdEOzs7T0FHRzs7Ozs7O0lBQ0kseUNBQVU7Ozs7O0lBQWpCLFVBQWtCLEdBQVk7UUFFMUIsSUFBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQ2pCO1lBQ0ksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxtQkFBQSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1lBRXpDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVdEOzs7T0FHRzs7Ozs7O0lBQ0ksd0NBQVM7Ozs7O0lBQWhCLFVBQWlCLEdBQVk7UUFFekIsSUFBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQ2pCO1lBQ0ksSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsbUJBQUEsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUUvQyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7OztPQUdHOzs7Ozs7SUFDSSx1Q0FBUTs7Ozs7SUFBZixVQUFnQixJQUFVO1FBRXRCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7O0lBQ0ksc0NBQU87Ozs7O0lBQWQsVUFBZSxJQUFVO1FBRXJCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7O0lBQ0ksdUNBQVE7Ozs7O0lBQWYsVUFBZ0IsSUFBVTtRQUV0QixPQUFPLHdCQUF3QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7O0lBQ0kseUNBQVU7Ozs7O0lBQWpCLFVBQWtCLElBQVU7UUFFeEIsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7O09BR0c7Ozs7OztJQUNJLDJDQUFZOzs7OztJQUFuQixVQUFvQixJQUFVOztZQUV0QixJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7O1lBQzNCLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDOztZQUMxQixHQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUU7UUFFcEIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7O0lBQ0kseUNBQVU7Ozs7O0lBQWpCLFVBQWtCLElBQVU7UUFFeEIsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7OztPQUdHOzs7Ozs7SUFDSSwwQ0FBVzs7Ozs7SUFBbEIsVUFBbUIsSUFBVTtRQUV6QixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7O09BR0c7Ozs7OztJQUNJLHdDQUFTOzs7OztJQUFoQixVQUFpQixJQUFVO1FBRXZCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHOzs7OztJQUNJLG9DQUFLOzs7O0lBQVo7UUFFSSxPQUFPLElBQUksb0JBQW9CLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7O09BRUc7Ozs7O0lBQ0ksNENBQWE7Ozs7SUFBcEI7UUFFSSxPQUFPLElBQUksb0JBQW9CLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7O0lBQ0ksNkNBQWM7Ozs7O0lBQXJCLFVBQXNCLEtBQVk7UUFFOUIsSUFBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQ2pCO1lBQ0ksSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3JDO2FBRUQ7WUFDSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsbUJBQUEsS0FBSyxFQUFDLENBQUM7U0FDOUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHOzs7OztJQUNJLDRDQUFhOzs7O0lBQXBCO1FBRUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRWxDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTCwyQkFBQztBQUFELENBQUMsQUExZ0JELElBMGdCQzs7Ozs7OztJQW5nQkcsOENBQTZCOzs7Ozs7SUFLN0Isc0NBQXFCOzs7OztJQXNCVCwwQ0FBbUM7Ozs7O0FBNmVuRDtJQUdJLGlFQUFpRTtJQUNqRSx3QkFBK0MsVUFBeUIsRUFDbEQsZUFBNkM7UUFEcEIsZUFBVSxHQUFWLFVBQVUsQ0FBZTtRQUNsRCxvQkFBZSxHQUFmLGVBQWUsQ0FBOEI7SUFFbkUsQ0FBQztJQUVELGdHQUFnRztJQUVoRzs7OztPQUlHOzs7Ozs7OztJQUNJLGlDQUFROzs7Ozs7OztJQUFmLFVBQWdCLEtBQXFCLEVBQUUsTUFBZTtRQUVsRCxPQUFPLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQ7O09BRUc7Ozs7O0lBQ0ksNEJBQUc7Ozs7SUFBVjtRQUVJLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7OztPQUdHOzs7Ozs7SUFDSSxrQ0FBUzs7Ozs7SUFBaEIsVUFBaUIsWUFBb0I7UUFFakMsSUFBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUM3Qjs7Z0JBQ1EsTUFBTSxHQUNWO2dCQUNJLENBQUMsRUFBRSxPQUFPO2dCQUNWLENBQUMsRUFBRSxRQUFRO2dCQUNYLENBQUMsRUFBRSxNQUFNO2dCQUNULENBQUMsRUFBRSxNQUFNO2FBQ1o7WUFFRCxrQkFBa0I7WUFDbEIsSUFBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsRUFDOUQ7Z0JBQ0ksT0FBTyxtQkFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO2FBQ2hHO1lBQ0QsYUFBYTtpQkFDUixJQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUNsRTtnQkFDSSxPQUFPLG1CQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBQyxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQzthQUN4RjtZQUNELGFBQWE7aUJBQ1IsSUFBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsRUFDbEU7Z0JBQ0ksT0FBTyxtQkFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBQyxDQUFDLENBQUM7YUFDeEY7U0FDSjtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRzs7Ozs7SUFDSSwyQ0FBa0I7Ozs7SUFBekI7O1FBRUksT0FBTyxPQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sMENBQUUsWUFBWSxNQUFLLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7Ozs7O0lBQ0ksc0NBQWE7Ozs7SUFBcEI7O1lBRVEsVUFBVSxHQUFHLG1CQUFBLG1CQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBQyxDQUFDLFlBQVksRUFBQzs7WUFDMUQsUUFBUSxHQUFhLEVBQUU7UUFFM0IsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFDekI7WUFDSSxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNGO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzs7Z0JBdkZKLFVBQVU7Ozs7Z0RBSU0sTUFBTSxTQUFDLGVBQWU7Z0JBN2hCSSxzQkFBc0I7O0lBaW5CakUscUJBQUM7Q0FBQSxBQXhGRCxJQXdGQztTQXZGWSxjQUFjOzs7Ozs7SUFHWCxvQ0FBNEQ7Ozs7O0lBQzVELHlDQUF1RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtEYXRlQXBpLCBEYXRlVmFsdWUsIERhdGVBcGlPYmplY3QsIERhdGVUaW1lUmVsYXRpdmVQYXJzZXJ9IGZyb20gJ0Bhbmdsci9kYXRldGltZSc7XHJcbmltcG9ydCB7aXNCbGFuaywgaXNQcmVzZW50LCBpc1N0cmluZ30gZnJvbSAnQGpzY3JwdC9jb21tb24nO1xyXG5pbXBvcnQge3RvRGF0ZSwgZ2V0RGF0ZSwgc2V0RGF0ZSwgaXNBZnRlciwgaXNCZWZvcmUsIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cywgZm9ybWF0LCBzdGFydE9mTW9udGgsIGVuZE9mTW9udGgsIHN0YXJ0T2ZXZWVrLCBlbmRPZldlZWssIHN0YXJ0T2ZEYXksIGVuZE9mRGF5LCBhZGRNb250aHMsIGFkZFdlZWtzLCBhZGREYXlzLCBzdWJNb250aHMsIHN1YldlZWtzLCBzdWJEYXlzLCBnZXREYXlzSW5Nb250aCwgaXNTYW1lRGF5LCBpc1NhbWVXZWVrLCBpc1NhbWVNb250aCwgaXNWYWxpZCwgcGFyc2UsIHBhcnNlSVNPLCBhZGRZZWFycywgc3ViWWVhcnMsIHN0YXJ0T2ZZZWFyLCBlbmRPZlllYXIsIGlzV2Vla2VuZCwgc2V0WWVhciwgZ2V0WWVhciwgaXNTYW1lWWVhciwgc3RhcnRPZkRlY2FkZSwgZW5kT2ZEZWNhZGUsIHNldE1vbnRoLCBnZXRNb250aCwgc2V0SVNPRGF5LCBnZXRJU09EYXl9IGZyb20gJ2RhdGUtZm5zJztcclxuXHJcbmltcG9ydCB7REFURV9GTlNfTE9DQUxFfSBmcm9tICcuLi9taXNjL3Rva2Vucyc7XHJcbmltcG9ydCB7RGF0ZUZuc0xvY2FsZX0gZnJvbSAnLi9kYXRlRm5zTG9jYWxlLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIEluc3RhbmNlIG9mIG9iamVjdCB3cmFwcGluZyBURGF0ZSwgYWxsb3dpbmcgbWFuaXB1bGF0aW9uIHdpdGggaXRcclxuICovXHJcbmNsYXNzIERhdGVGbnNEYXRlQXBpT2JqZWN0IGltcGxlbWVudHMgRGF0ZUFwaU9iamVjdDxEYXRlPlxyXG57XHJcbiAgICAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgcHJpdmF0ZSBmaWVsZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3JpZ2luYWwgdmFsdWUgdGhhdCBpcyBub3QgY2hhbmdlZCB1bmxlc3MgJ3VwZGF0ZU9yaWdpbmFsJyBpcyBjYWxsZWRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfb3JpZ2luYWxWYWx1ZTogRGF0ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluc3RhbmNlIG9mIGRhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfdmFsdWU6IERhdGU7XHJcblxyXG4gICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIHB1YmxpYyBwcm9wZXJ0aWVzIC0gaW1wbGVtZW50YXRpb24gb2YgRGF0ZUFwaU9iamVjdCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcmlnaW5hbCB2YWx1ZSB0aGF0IGlzIG5vdCBjaGFuZ2VkIHVubGVzcyAndXBkYXRlT3JpZ2luYWwnIGlzIGNhbGxlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IG9yaWdpbmFsVmFsdWUoKTogRGF0ZVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vcmlnaW5hbFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zdGFuY2Ugb2YgZGF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IERhdGVcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIGNvbnN0cnVjdG9yICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlOiBEYXRlVmFsdWV8RGF0ZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9jYWxlU3ZjOiBEYXRlRm5zTG9jYWxlLFxyXG4gICAgICAgICAgICAgICAgZm9ybWF0Pzogc3RyaW5nKVxyXG4gICAge1xyXG4gICAgICAgIGlmKGlzU3RyaW5nKHZhbHVlKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vSVNPIHN0cmluZ1xyXG4gICAgICAgICAgICBpZigvXlxcZCstXFxkKy1cXGQrKFRcXGQrOlxcZCs6XFxkKyk/Ly50ZXN0KHZhbHVlKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9vcmlnaW5hbFZhbHVlID0gcGFyc2VJU08odmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYoaXNCbGFuayhmb3JtYXQpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGF0ZS1mbnMgcmVxdWlyZXMgZm9ybWF0IHBhcmFtZXRlciB0byBiZSBzZXQgZm9yIHBhcnNpbmcgbm9uIElTTyBzdHJpbmcgZGF0ZSFgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX29yaWdpbmFsVmFsdWUgPSBwYXJzZSh2YWx1ZSwgZm9ybWF0LCBuZXcgRGF0ZSgxOTcwLCAwKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9vcmlnaW5hbFZhbHVlID0gdG9EYXRlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIHB1YmxpYyBtZXRob2RzIC0gaW1wbGVtZW50YXRpb24gb2YgRGF0ZUFwaU9iamVjdCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGluZGljYXRpb24gd2hldGhlciBwcm92aWRlZCBpbnN0YW5jZSBvZiBkYXRlIGlzIHZhbGlkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc1ZhbGlkKCk6IGJvb2xlYW5cclxuICAgIHtcclxuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzLl92YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGluZGljYXRpb24gd2hldGhlciBwcm92aWRlZCBpbnN0YW5jZSBvZiBkYXRlIGlzIHdlZWtlbmQgZGF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc1dlZWtlbmQoKTogYm9vbGVhblxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBpc1dlZWtlbmQodGhpcy5fdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9ybWF0cyBkYXRlIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gZm9ybWF0U3RyaW5nIC0gRm9ybWF0IHRva2VuIHVzZWQgZm9yIGNyZWF0aW5nIGZvcm1hdHRlZCBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZvcm1hdChmb3JtYXRTdHJpbmc6IHN0cmluZyk6IHN0cmluZ1xyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5fdmFsdWUsIGZvcm1hdFN0cmluZywge2xvY2FsZTogdGhpcy5fbG9jYWxlU3ZjLmxvY2FsZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB2YWx1ZSB0byBzdGFydCBkYXRlIGFuZCB0aW1lIG9mIGN1cnJlbnQgZGVjYWRlXHJcbiAgICAgKiBAcmV0dXJucyBJdHNlbGYgZm9yIGZsdWVudCBBUElcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXJ0T2ZEZWNhZGUoKTogRGF0ZUFwaU9iamVjdDxEYXRlPlxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gc3RhcnRPZkRlY2FkZSh0aGlzLl92YWx1ZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHZhbHVlIHRvIGVuZCBkYXRlIGFuZCB0aW1lIG9mIGN1cnJlbnQgZGVjYWRlXHJcbiAgICAgKiBAcmV0dXJucyBJdHNlbGYgZm9yIGZsdWVudCBBUElcclxuICAgICAqL1xyXG4gICAgcHVibGljIGVuZE9mRGVjYWRlKCk6IERhdGVBcGlPYmplY3Q8RGF0ZT5cclxuICAgIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IGVuZE9mRGVjYWRlKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHZhbHVlIHRvIHN0YXJ0IGRhdGUgYW5kIHRpbWUgb2YgY3VycmVudCB5ZWFyXHJcbiAgICAgKiBAcmV0dXJucyBJdHNlbGYgZm9yIGZsdWVudCBBUElcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXJ0T2ZZZWFyKCk6IERhdGVBcGlPYmplY3Q8RGF0ZT5cclxuICAgIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHN0YXJ0T2ZZZWFyKHRoaXMuX3ZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHZhbHVlIHRvIGVuZCBkYXRlIGFuZCB0aW1lIG9mIGN1cnJlbnQgeWVhclxyXG4gICAgICogQHJldHVybnMgSXRzZWxmIGZvciBmbHVlbnQgQVBJXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBlbmRPZlllYXIoKTogRGF0ZUFwaU9iamVjdDxEYXRlPlxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gZW5kT2ZZZWFyKHRoaXMuX3ZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgeWVhcnMsIGlmIGNvdW50IG5vdCBzcGVjaWZpZWQgYWRkcyAxIHllYXJcclxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiB5ZWFycyBjb3VudFxyXG4gICAgICogQHJldHVybnMgSXRzZWxmIGZvciBmbHVlbnQgQVBJXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGRZZWFycyhjb3VudD86IG51bWJlcik6IERhdGVBcGlPYmplY3Q8RGF0ZT5cclxuICAgIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IGFkZFllYXJzKHRoaXMuX3ZhbHVlLCBjb3VudCA/PyAxKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdWJ0cmFjdCB5ZWFycywgaWYgY291bnQgbm90IHNwZWNpZmllZCBzdWJ0cmFjdCAxIHllYXJcclxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiB5ZWFycyBjb3VudFxyXG4gICAgICogQHJldHVybnMgSXRzZWxmIGZvciBmbHVlbnQgQVBJXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdWJ0cmFjdFllYXJzKGNvdW50PzogbnVtYmVyKTogRGF0ZUFwaU9iamVjdDxEYXRlPlxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gc3ViWWVhcnModGhpcy5fdmFsdWUsIGNvdW50ID8/IDEpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdmFsdWUgdG8gc3RhcnQgZGF0ZSBhbmQgdGltZSBvZiBjdXJyZW50IG1vbnRoXHJcbiAgICAgKiBAcmV0dXJucyBJdHNlbGYgZm9yIGZsdWVudCBBUElcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXJ0T2ZNb250aCgpOiBEYXRlQXBpT2JqZWN0PERhdGU+XHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBzdGFydE9mTW9udGgodGhpcy5fdmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdmFsdWUgdG8gZW5kIGRhdGUgYW5kIHRpbWUgb2YgY3VycmVudCBtb250aFxyXG4gICAgICogQHJldHVybnMgSXRzZWxmIGZvciBmbHVlbnQgQVBJXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBlbmRPZk1vbnRoKCk6IERhdGVBcGlPYmplY3Q8RGF0ZT5cclxuICAgIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IGVuZE9mTW9udGgodGhpcy5fdmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBtb250aHMsIGlmIGNvdW50IG5vdCBzcGVjaWZpZWQgYWRkcyAxIG1vbnRoXHJcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgbW9udGhzIGNvdW50XHJcbiAgICAgKiBAcmV0dXJucyBJdHNlbGYgZm9yIGZsdWVudCBBUElcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZE1vbnRocyhjb3VudD86IG51bWJlcik6IERhdGVBcGlPYmplY3Q8RGF0ZT5cclxuICAgIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IGFkZE1vbnRocyh0aGlzLl92YWx1ZSwgY291bnQgPz8gMSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgbW9udGhzLCBpZiBjb3VudCBub3Qgc3BlY2lmaWVkIHN1YnRyYWN0IDEgbW9udGhcclxuICAgICAqIEBwYXJhbSBjb3VudCAtIE51bWJlciBvZiBtb250aHMgY291bnRcclxuICAgICAqIEByZXR1cm5zIEl0c2VsZiBmb3IgZmx1ZW50IEFQSVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3VidHJhY3RNb250aHMoY291bnQ/OiBudW1iZXIpOiBEYXRlQXBpT2JqZWN0PERhdGU+XHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBzdWJNb250aHModGhpcy5fdmFsdWUsIGNvdW50ID8/IDEpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdmFsdWUgdG8gc3RhcnQgZGF0ZSBhbmQgdGltZSBvZiBjdXJyZW50IHdlZWtcclxuICAgICAqIEByZXR1cm5zIEl0c2VsZiBmb3IgZmx1ZW50IEFQSVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhcnRPZldlZWsoKTogRGF0ZUFwaU9iamVjdDxEYXRlPlxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gc3RhcnRPZldlZWsodGhpcy5fdmFsdWUsIHtsb2NhbGU6IHRoaXMuX2xvY2FsZVN2Yy5sb2NhbGV9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHZhbHVlIHRvIGVuZCBkYXRlIGFuZCB0aW1lIG9mIGN1cnJlbnQgd2Vla1xyXG4gICAgICogQHJldHVybnMgSXRzZWxmIGZvciBmbHVlbnQgQVBJXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBlbmRPZldlZWsoKTogRGF0ZUFwaU9iamVjdDxEYXRlPlxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gZW5kT2ZXZWVrKHRoaXMuX3ZhbHVlLCB7bG9jYWxlOiB0aGlzLl9sb2NhbGVTdmMubG9jYWxlfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIHdlZWtzLCBpZiBjb3VudCBub3Qgc3BlY2lmaWVkIGFkZHMgMSB3ZWVrXHJcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2Ygd2Vla3MgY291bnRcclxuICAgICAqIEByZXR1cm5zIEl0c2VsZiBmb3IgZmx1ZW50IEFQSVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkV2Vla3MoY291bnQ/OiBudW1iZXIpOiBEYXRlQXBpT2JqZWN0PERhdGU+XHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBhZGRXZWVrcyh0aGlzLl92YWx1ZSwgY291bnQgPz8gMSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3Qgd2Vla3MsIGlmIGNvdW50IG5vdCBzcGVjaWZpZWQgc3VidHJhY3QgMSB3ZWVrXHJcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2Ygd2Vla3MgY291bnRcclxuICAgICAqIEByZXR1cm5zIEl0c2VsZiBmb3IgZmx1ZW50IEFQSVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3VidHJhY3RXZWVrcyhjb3VudD86IG51bWJlcik6IERhdGVBcGlPYmplY3Q8RGF0ZT5cclxuICAgIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHN1YldlZWtzKHRoaXMuX3ZhbHVlLCBjb3VudCA/PyAxKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHZhbHVlIHRvIHN0YXJ0IGRhdGUgYW5kIHRpbWUgb2YgY3VycmVudCBkYXlcclxuICAgICAqIEByZXR1cm5zIEl0c2VsZiBmb3IgZmx1ZW50IEFQSVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhcnRPZkRheSgpOiBEYXRlQXBpT2JqZWN0PERhdGU+XHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBzdGFydE9mRGF5KHRoaXMuX3ZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHZhbHVlIHRvIGVuZCBkYXRlIGFuZCB0aW1lIG9mIGN1cnJlbnQgZGF5XHJcbiAgICAgKiBAcmV0dXJucyBJdHNlbGYgZm9yIGZsdWVudCBBUElcclxuICAgICAqL1xyXG4gICAgcHVibGljIGVuZE9mRGF5KCk6IERhdGVBcGlPYmplY3Q8RGF0ZT5cclxuICAgIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IGVuZE9mRGF5KHRoaXMuX3ZhbHVlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZGF5cywgaWYgY291bnQgbm90IHNwZWNpZmllZCBhZGRzIDEgZGF5XHJcbiAgICAgKiBAcGFyYW0gY291bnQgLSBOdW1iZXIgb2YgZGF5cyBjb3VudFxyXG4gICAgICogQHJldHVybnMgSXRzZWxmIGZvciBmbHVlbnQgQVBJXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGREYXlzKGNvdW50PzogbnVtYmVyKTogRGF0ZUFwaU9iamVjdDxEYXRlPlxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gYWRkRGF5cyh0aGlzLl92YWx1ZSwgY291bnQgPz8gMSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgZGF5cywgaWYgY291bnQgbm90IHNwZWNpZmllZCBzdWJ0cmFjdCAxIGRheVxyXG4gICAgICogQHBhcmFtIGNvdW50IC0gTnVtYmVyIG9mIGRheXMgY291bnRcclxuICAgICAqIEByZXR1cm5zIEl0c2VsZiBmb3IgZmx1ZW50IEFQSVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3VidHJhY3REYXlzKGNvdW50PzogbnVtYmVyKTogRGF0ZUFwaU9iamVjdDxEYXRlPlxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gc3ViRGF5cyh0aGlzLl92YWx1ZSwgY291bnQgPz8gMSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBudW1iZXIgb2YgZGF5cyBpbiBtb250aFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGF5c0luTW9udGgoKTogbnVtYmVyXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGdldERheXNJbk1vbnRoKHRoaXMuX3ZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgeWVhclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgeWVhcigpOiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgeWVhclxyXG4gICAgICogQHBhcmFtIHllYXIgLSBZZWFyIHRvIGJlIHNldFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgeWVhcih5ZWFyOiBudW1iZXIpOiBEYXRlQXBpT2JqZWN0PERhdGU+O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgeWVhclxyXG4gICAgICogQHBhcmFtIHllYXIgLSBJZiBzcGVjaWZpZWQsIHNldHMgeWVhclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgeWVhcih5ZWFyPzogbnVtYmVyKTogRGF0ZUFwaU9iamVjdDxEYXRlPnxudW1iZXJcclxuICAgIHtcclxuICAgICAgICBpZihpc1ByZXNlbnQoeWVhcikpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHNldFllYXIodGhpcy5fdmFsdWUsIHllYXIhKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdldFllYXIodGhpcy5fdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBtb250aFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW9udGgoKTogbnVtYmVyXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgbW9udGhcclxuICAgICAqIEBwYXJhbSBtb250aCAtIE1vbnRoIHRvIGJlIHNldFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW9udGgobW9udGg6IG51bWJlcik6IERhdGVBcGlPYmplY3Q8RGF0ZT5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIG1vbnRoXHJcbiAgICAgKiBAcGFyYW0gbW9udGggLSBJZiBzcGVjaWZpZWQsIHNldHMgbW9udGhcclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vbnRoKG1vbnRoPzogbnVtYmVyKTogRGF0ZUFwaU9iamVjdDxEYXRlPnxudW1iZXJcclxuICAgIHtcclxuICAgICAgICBpZihpc1ByZXNlbnQobW9udGgpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBzZXRNb250aCh0aGlzLl92YWx1ZSwgbW9udGghKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdldE1vbnRoKHRoaXMuX3ZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgZGF5IG9mIG1vbnRoIG9uZSBiYXNlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGF5T2ZNb250aCgpOiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFNldHMgZGF5IG9mIG1vbnRoIG9uZSBiYXNlZFxyXG4gICAgICogQHBhcmFtIGRheSAtIERheSBvZiBtb250aCB0byBiZSBzZXRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRheU9mTW9udGgoZGF5OiBudW1iZXIpOiBEYXRlQXBpT2JqZWN0PERhdGU+O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIG9yIHNldHMgZGF5IG9mIG1vbnRoIG9uZSBiYXNlZFxyXG4gICAgICogQHBhcmFtIGRheSAtIElmIHNwZWNpZmllZCwgc2V0cyBkYXkgb2YgbW9udGhcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRheU9mTW9udGgoZGF5PzogbnVtYmVyKTogRGF0ZUFwaU9iamVjdDxEYXRlPnxudW1iZXJcclxuICAgIHtcclxuICAgICAgICBpZihpc1ByZXNlbnQoZGF5KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gc2V0RGF0ZSh0aGlzLl92YWx1ZSwgZGF5ISk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnZXREYXRlKHRoaXMuX3ZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgZGF5IG9mIHdlZWsgemVybyBiYXNlZCwgZmlyc3QgaXMgbW9uZGF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkYXlPZldlZWsoKTogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGRheSBvZiB3ZWVrIHplcm8gYmFzZWQsIGZpcnN0IGlzIG1vbmRheVxyXG4gICAgICogQHBhcmFtIGRheSAtIERheSBvZiB3ZWVrIHRvIGJlIHNldFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGF5T2ZXZWVrKGRheTogbnVtYmVyKTogRGF0ZUFwaU9iamVjdDxEYXRlPjtcclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBvciBzZXRzIGRheSBvZiB3ZWVrIHplcm8gYmFzZWQsIGZpcnN0IGlzIG1vbmRheVxyXG4gICAgICogQHBhcmFtIGRheSAtIElmIHNwZWNpZmllZCwgc2V0cyBkYXkgb2Ygd2Vla1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGF5T2ZXZWVrKGRheT86IG51bWJlcik6IG51bWJlcnxEYXRlQXBpT2JqZWN0PERhdGU+XHJcbiAgICB7XHJcbiAgICAgICAgaWYoaXNQcmVzZW50KGRheSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHNldElTT0RheSh0aGlzLl92YWx1ZSwgZGF5ICsgMSEpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2V0SVNPRGF5KHRoaXMuX3ZhbHVlKSAtIDE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGluZGljYXRpb24gd2hldGhlciBjdXJyZW50IHZhbHVlIGlzIGJlZm9yZSAnZGF0ZSdcclxuICAgICAqIEBwYXJhbSBkYXRlIC0gRGF0ZSB3aGljaCBpcyB0aGlzIGRhdGUgY29tcGFyZWQgdG9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzQmVmb3JlKGRhdGU6IERhdGUpOiBib29sZWFuXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGlzQmVmb3JlKHRoaXMuX3ZhbHVlLCBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgaW5kaWNhdGlvbiB3aGV0aGVyIGN1cnJlbnQgdmFsdWUgaXMgYWZ0ZXIgJ2RhdGUnXHJcbiAgICAgKiBAcGFyYW0gZGF0ZSAtIERhdGUgd2hpY2ggaXMgdGhpcyBkYXRlIGNvbXBhcmVkIHRvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0FmdGVyKGRhdGU6IERhdGUpOiBib29sZWFuXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIGlzQWZ0ZXIodGhpcy5fdmFsdWUsIGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuIHRoaXMgYW5kIHByb3ZpZGVkIGRhdGVcclxuICAgICAqIEBwYXJhbSBkYXRlIC0gRGF0ZSB3aGljaCBpcyB1c2VkIGZvciBjb21wdXRhdGlvbiBvZiBkaWZmIGFnYWluc3RcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpZmZEYXlzKGRhdGU6IERhdGUpOiBudW1iZXJcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKHRoaXMuX3ZhbHVlLCBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmVzIHdoZXRoZXIgdGhpcyBkYXRlIGlzIHNhbWUgd2VlayBhcyBwcm92aWRlZCBkYXRlXHJcbiAgICAgKiBAcGFyYW0gZGF0ZSAtIERhdGUgd2hpY2ggaXMgdXNlZCBmb3IgY29tcGFyaXNvbiBvZiBzYW1lIHdlZWtcclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzU2FtZVdlZWsoZGF0ZTogRGF0ZSk6IGJvb2xlYW5cclxuICAgIHtcclxuICAgICAgICByZXR1cm4gaXNTYW1lV2Vlayh0aGlzLl92YWx1ZSwgZGF0ZSwge2xvY2FsZTogdGhpcy5fbG9jYWxlU3ZjLmxvY2FsZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyZXMgd2hldGhlciB0aGlzIGRhdGUgaXMgc2FtZSBkZWNhZGUgYXMgcHJvdmlkZWQgZGF0ZVxyXG4gICAgICogQHBhcmFtIGRhdGUgLSBEYXRlIHdoaWNoIGlzIHVzZWQgZm9yIGNvbXBhcmlzb24gb2Ygc2FtZSBkZWNhZGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzU2FtZURlY2FkZShkYXRlOiBEYXRlKTogYm9vbGVhblxyXG4gICAge1xyXG4gICAgICAgIGxldCB5ZWFyID0gZ2V0WWVhcih0aGlzLl92YWx1ZSk7XHJcbiAgICAgICAgbGV0IHN0YXJ0ID0geWVhciAtICh5ZWFyICUgMTApO1xyXG4gICAgICAgIGxldCBlbmQgPSBzdGFydCArIDEwO1xyXG5cclxuICAgICAgICByZXR1cm4gZ2V0WWVhcihkYXRlKSA+PSBzdGFydCAmJiBnZXRZZWFyKGRhdGUpIDwgZW5kO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyZXMgd2hldGhlciB0aGlzIGRhdGUgaXMgc2FtZSB5ZWFyIGFzIHByb3ZpZGVkIGRhdGVcclxuICAgICAqIEBwYXJhbSBkYXRlIC0gRGF0ZSB3aGljaCBpcyB1c2VkIGZvciBjb21wYXJpc29uIG9mIHNhbWUgeWVhclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNTYW1lWWVhcihkYXRlOiBEYXRlKTogYm9vbGVhblxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBpc1NhbWVZZWFyKHRoaXMuX3ZhbHVlLCBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmVzIHdoZXRoZXIgdGhpcyBkYXRlIGlzIHNhbWUgbW9udGggYXMgcHJvdmlkZWQgZGF0ZVxyXG4gICAgICogQHBhcmFtIGRhdGUgLSBEYXRlIHdoaWNoIGlzIHVzZWQgZm9yIGNvbXBhcmlzb24gb2Ygc2FtZSBtb250aFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNTYW1lTW9udGgoZGF0ZTogRGF0ZSk6IGJvb2xlYW5cclxuICAgIHtcclxuICAgICAgICByZXR1cm4gaXNTYW1lTW9udGgodGhpcy5fdmFsdWUsIGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyZXMgd2hldGhlciB0aGlzIGRhdGUgaXMgc2FtZSBkYXkgYXMgcHJvdmlkZWQgZGF0ZVxyXG4gICAgICogQHBhcmFtIGRhdGUgLSBEYXRlIHdoaWNoIGlzIHVzZWQgZm9yIGNvbXBhcmlzb24gb2Ygc2FtZSBkYXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzU2FtZURheShkYXRlOiBEYXRlKTogYm9vbGVhblxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBpc1NhbWVEYXkodGhpcy5fdmFsdWUsIGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBjbG9uZSBvZiB0aGlzIGluc3RhbmNlLCB2YWx1ZSBhbmQgb3JpZ2luYWxWYWx1ZSBoYXZlIHNhbWUgdmFsdWUgYW5kIGFyZSBjbG9uZWQgZnJvbSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xvbmUoKTogRGF0ZUFwaU9iamVjdDxEYXRlPlxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZUZuc0RhdGVBcGlPYmplY3QobmV3IERhdGUodGhpcy5fdmFsdWUpLCB0aGlzLl9sb2NhbGVTdmMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBjbG9uZSBvZiB0aGlzIGluc3RhbmNlLCB2YWx1ZSBhbmQgb3JpZ2luYWxWYWx1ZSBoYXZlIHNhbWUgdmFsdWUgYW5kIGFyZSBjbG9uZWQgZnJvbSBvcmlnaW5hbFZhbHVlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjbG9uZU9yaWdpbmFsKCk6IERhdGVBcGlPYmplY3Q8RGF0ZT5cclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGVGbnNEYXRlQXBpT2JqZWN0KG5ldyBEYXRlKHRoaXMuX29yaWdpbmFsVmFsdWUpLCB0aGlzLl9sb2NhbGVTdmMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyBvcmlnaW5hbFZhbHVlLCBpZiB2YWx1ZSBpcyBub3QgcHJvdmlkZWQgb3JpZ2luYWxWYWx1ZSBpcyBzZXQgdG8gdmFsdWVcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIHNldCBhcyBvcmlnaW5hbCwgb3IgbnVsbCAodmFsdWUgd2lsbCBiZSB1c2VkIGFzIHZhbHVlKVxyXG4gICAgICogQHJldHVybnMgSXRzZWxmIGZvciBmbHVlbnQgQVBJXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVPcmlnaW5hbCh2YWx1ZT86IERhdGUpOiBEYXRlQXBpT2JqZWN0PERhdGU+XHJcbiAgICB7XHJcbiAgICAgICAgaWYoaXNCbGFuayh2YWx1ZSkpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFZhbHVlID0gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fb3JpZ2luYWxWYWx1ZSA9IHZhbHVlITtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlcyB2YWx1ZSB0byBzYW1lIHZhbHVlIGFzIG9yaWdpbmFsVmFsdWVcclxuICAgICAqIEByZXR1cm5zIEl0c2VsZiBmb3IgZmx1ZW50IEFQSVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVzZXRPcmlnaW5hbCgpOiBEYXRlQXBpT2JqZWN0PERhdGU+XHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9vcmlnaW5hbFZhbHVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERhdGUgYXBpIHVzaW5nIERhdGVGbnNKUywgdXNlZCBmb3Igb2J0YWluaW5nIERhdGVBcGkgd3JhcHBlciBvYmplY3RcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERhdGVGbnNEYXRlQXBpIGltcGxlbWVudHMgRGF0ZUFwaTxEYXRlPlxyXG57XHJcbiAgICAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgY29uc3RydWN0b3IgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChEQVRFX0ZOU19MT0NBTEUpIHByb3RlY3RlZCBfbG9jYWxlU3ZjOiBEYXRlRm5zTG9jYWxlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9yZWxhdGl2ZVBhcnNlcjogRGF0ZVRpbWVSZWxhdGl2ZVBhcnNlcjxEYXRlPilcclxuICAgIHtcclxuICAgIH1cclxuXHJcbiAgICAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgcHVibGljIG1ldGhvZHMgLSBpbXBsZW1lbnRhdGlvbiBvZiBEYXRlQXBpICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgd3JhcHBpbmcgb2JqZWN0IHVzZWQgZm9yIG1hbmlwdWxhdGlvblxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIChwYXJzZWQpIGFuZCB1c2VkIGZvciBtYW5pcHVsYXRpb25cclxuICAgICAqIEBwYXJhbSBmb3JtYXQgLSBGb3JtYXQgc3RyaW5nIHVzZWQgZm9yIHBhcnNpbmcgc3RyaW5nIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRWYWx1ZSh2YWx1ZTogRGF0ZVZhbHVlfERhdGUsIGZvcm1hdD86IHN0cmluZyk6IERhdGVBcGlPYmplY3Q8RGF0ZT5cclxuICAgIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGVGbnNEYXRlQXBpT2JqZWN0KHRoaXMuX3JlbGF0aXZlUGFyc2VyLnBhcnNlKHZhbHVlKSwgdGhpcy5fbG9jYWxlU3ZjLCBmb3JtYXQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB3cmFwcGluZyBvYmplY3QgdXNlZCBmb3IgbWFuaXB1bGF0aW9uIGluc3RhbnRpYXRlZCB0byBjdXJyZW50IGRhdGUgYW5kIHRpbWVcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5vdygpOiBEYXRlQXBpT2JqZWN0PERhdGU+XHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlRm5zRGF0ZUFwaU9iamVjdChuZXcgRGF0ZSgpLCB0aGlzLl9sb2NhbGVTdmMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBmb3JtYXQgc3RyaW5nIHVzaW5nIHBzZXVkbyBmb3JtYXRcclxuICAgICAqIEBwYXJhbSBwc2V1ZG9Gb3JtYXQgLSBQc2V1ZG8gZm9ybWF0IHRva2VuLCB1c2VkIGZvciBvYnRhaW5pbmcgJ2RhdGUnIG9yICd0aW1lJyBmb3JtYXQgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRGb3JtYXQocHNldWRvRm9ybWF0OiBzdHJpbmcpOiBzdHJpbmdcclxuICAgIHtcclxuICAgICAgICBpZigvXnArJC9pLnRlc3QocHNldWRvRm9ybWF0KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGxldCB3aWR0aHM6IHtbaW5kZXg6IG51bWJlcl06IHN0cmluZ30gPVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAxOiAnc2hvcnQnLFxyXG4gICAgICAgICAgICAgICAgMjogJ21lZGl1bScsXHJcbiAgICAgICAgICAgICAgICAzOiAnbG9uZycsXHJcbiAgICAgICAgICAgICAgICA0OiAnZnVsbCdcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIC8vZGF0ZSB0aW1lIGZvcm1hdFxyXG4gICAgICAgICAgICBpZihwc2V1ZG9Gb3JtYXQuaW5kZXhPZignUHAnKSA+PSAwICYmIHBzZXVkb0Zvcm1hdC5sZW5ndGggPD0gOClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZVN2Yy5sb2NhbGUuZm9ybWF0TG9uZyEuZGF0ZVRpbWUoe3dpZHRoOiB3aWR0aHNbcHNldWRvRm9ybWF0Lmxlbmd0aCAvIDJdfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9kYXRlIGZvcm1hdFxyXG4gICAgICAgICAgICBlbHNlIGlmKHBzZXVkb0Zvcm1hdC5pbmRleE9mKCdQJykgPj0gMCAmJiBwc2V1ZG9Gb3JtYXQubGVuZ3RoIDw9IDQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGVTdmMubG9jYWxlLmZvcm1hdExvbmchLmRhdGUoe3dpZHRoOiB3aWR0aHNbcHNldWRvRm9ybWF0Lmxlbmd0aF19KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL3RpbWUgZm9ybWF0XHJcbiAgICAgICAgICAgIGVsc2UgaWYocHNldWRvRm9ybWF0LmluZGV4T2YoJ3AnKSA+PSAwICYmIHBzZXVkb0Zvcm1hdC5sZW5ndGggPD0gNClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZVN2Yy5sb2NhbGUuZm9ybWF0TG9uZyEudGltZSh7d2lkdGg6IHdpZHRoc1twc2V1ZG9Gb3JtYXQubGVuZ3RoXX0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHNldWRvRm9ybWF0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBpbmZvcm1hdGlvbiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHdlZWtTdGFydHNPbk1vbmRheSgpOiBib29sZWFuXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZVN2Yy5sb2NhbGUub3B0aW9ucz8ud2Vla1N0YXJ0c09uID09PSAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhcnJheSBvZiB3ZWVrZGF5IG5hbWVzIGluIHNob3J0IGZvcm1hdCwgb3JkZXIgb2YgZGF5cyBpcyBkZXBlbmRlbnQgb24gbG9jYWxlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3ZWVrZGF5c1Nob3J0KCk6IHN0cmluZ1tdXHJcbiAgICB7XHJcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSB0aGlzLl9sb2NhbGVTdmMubG9jYWxlLm9wdGlvbnMhLndlZWtTdGFydHNPbiE7XHJcbiAgICAgICAgbGV0IHdlZWtkYXlzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IobGV0IHggPSAwOyB4IDwgNzsgeCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgd2Vla2RheXMucHVzaCh0aGlzLl9sb2NhbGVTdmMubG9jYWxlLmxvY2FsaXplIS5kYXkoc3RhcnRJbmRleCsrICUgNywge3dpZHRoOiAnc2hvcnQnfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHdlZWtkYXlzO1xyXG4gICAgfVxyXG59Il19