qidian-vue-ui 1.1.59 → 1.1.61

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 (4326) hide show
  1. package/dist/components/config-provider/index.d.ts +24 -0
  2. package/dist/components/config-provider/types.d.ts +8 -0
  3. package/dist/components/config-provider/useConfig.d.ts +32 -0
  4. package/dist/components/dialog/form.vue.mjs +11 -13
  5. package/dist/components/dialog/form.vue.mjs.map +1 -1
  6. package/dist/components/dialog/props.d.ts +16 -0
  7. package/dist/components/dialog/props.mjs +2 -1
  8. package/dist/components/dialog/props.mjs.map +1 -1
  9. package/dist/components/form/config.d.ts +1 -0
  10. package/dist/components/form/config.mjs +3 -1
  11. package/dist/components/form/config.mjs.map +1 -1
  12. package/dist/components/form/index.css +5 -5
  13. package/dist/components/form/index.d.ts +1 -1
  14. package/dist/components/form/index.vue.mjs +1 -1
  15. package/dist/components/form/index.vue2.mjs +18 -2
  16. package/dist/components/form/index.vue2.mjs.map +1 -1
  17. package/dist/components/icon/index.d.ts +2 -0
  18. package/dist/components/icon/index.vue.d.ts +3 -0
  19. package/dist/components/icon/index.vue.mjs +2168 -0
  20. package/dist/components/icon/index.vue.mjs.map +1 -0
  21. package/dist/components/icon/index.vue2.mjs +5 -0
  22. package/dist/components/icon/index.vue2.mjs.map +1 -0
  23. package/dist/components/icon/types.d.ts +10 -0
  24. package/dist/components/import-dialog/index.d.ts +2 -0
  25. package/dist/components/import-dialog/index.vue.d.ts +14 -0
  26. package/dist/components/import-dialog/index.vue.mjs +180 -0
  27. package/dist/components/import-dialog/index.vue.mjs.map +1 -0
  28. package/dist/components/import-dialog/index.vue2.mjs +5 -0
  29. package/dist/components/import-dialog/index.vue2.mjs.map +1 -0
  30. package/dist/components/import-dialog/props.d.ts +5 -0
  31. package/dist/components/import-dialog/props.mjs +9 -0
  32. package/dist/components/import-dialog/props.mjs.map +1 -0
  33. package/dist/components/import-dialog/types.d.ts +9 -0
  34. package/dist/components/index.d.ts +2 -0
  35. package/dist/components/office/pdf/index.vue.mjs +1 -1
  36. package/dist/components/office/pdf/index.vue2.mjs +5 -4
  37. package/dist/components/office/pdf/index.vue2.mjs.map +1 -1
  38. package/dist/components/office/pdf/index2.css +17 -17
  39. package/dist/components/upload/index.css +26 -26
  40. package/dist/components/upload/index.vue.mjs +2 -2
  41. package/dist/components/upload/index.vue2.mjs +10 -4
  42. package/dist/components/upload/index.vue2.mjs.map +1 -1
  43. package/dist/components/upload/types.d.ts +1 -0
  44. package/dist/index.mjs +52 -47
  45. package/dist/index.mjs.map +1 -1
  46. package/dist/locales/en-US.d.ts +8 -0
  47. package/dist/locales/en-US.mjs +8 -0
  48. package/dist/locales/en-US.mjs.map +1 -1
  49. package/dist/locales/zh-CN.d.ts +8 -0
  50. package/dist/locales/zh-CN.mjs +8 -0
  51. package/dist/locales/zh-CN.mjs.map +1 -1
  52. package/dist/locales/zh-TW.d.ts +8 -0
  53. package/dist/locales/zh-TW.mjs +8 -0
  54. package/dist/locales/zh-TW.mjs.map +1 -1
  55. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/_chunks/dep-2cb449a9.mjs +17 -0
  56. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/_chunks/dep-2cb449a9.mjs.map +1 -0
  57. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/accessibility-filled.mjs +125 -0
  58. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/accessibility-filled.mjs.map +1 -0
  59. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/accessibility.mjs +159 -0
  60. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/accessibility.mjs.map +1 -0
  61. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/activity-filled.mjs +125 -0
  62. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/activity-filled.mjs.map +1 -0
  63. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/activity.mjs +137 -0
  64. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/activity.mjs.map +1 -0
  65. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add-and-subtract.mjs +137 -0
  66. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add-and-subtract.mjs.map +1 -0
  67. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add-circle-filled.mjs +119 -0
  68. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add-circle-filled.mjs.map +1 -0
  69. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add-circle.mjs +149 -0
  70. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add-circle.mjs.map +1 -0
  71. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add-rectangle-filled.mjs +119 -0
  72. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add-rectangle-filled.mjs.map +1 -0
  73. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add-rectangle.mjs +144 -0
  74. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add-rectangle.mjs.map +1 -0
  75. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add.mjs +128 -0
  76. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/add.mjs.map +1 -0
  77. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/address-book-filled.mjs +119 -0
  78. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/address-book-filled.mjs.map +1 -0
  79. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/address-book.mjs +151 -0
  80. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/address-book.mjs.map +1 -0
  81. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/adjustment-filled.mjs +119 -0
  82. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/adjustment-filled.mjs.map +1 -0
  83. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/adjustment.mjs +152 -0
  84. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/adjustment.mjs.map +1 -0
  85. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/airplay-wave-filled.mjs +125 -0
  86. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/airplay-wave-filled.mjs.map +1 -0
  87. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/airplay-wave.mjs +137 -0
  88. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/airplay-wave.mjs.map +1 -0
  89. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm-add-filled.mjs +131 -0
  90. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm-add-filled.mjs.map +1 -0
  91. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm-add.mjs +144 -0
  92. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm-add.mjs.map +1 -0
  93. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm-filled.mjs +131 -0
  94. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm-filled.mjs.map +1 -0
  95. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm-off-filled.mjs +131 -0
  96. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm-off-filled.mjs.map +1 -0
  97. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm-off.mjs +138 -0
  98. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm-off.mjs.map +1 -0
  99. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm.mjs +144 -0
  100. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alarm.mjs.map +1 -0
  101. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/align-bottom.mjs +137 -0
  102. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/align-bottom.mjs.map +1 -0
  103. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/align-top.mjs +137 -0
  104. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/align-top.mjs.map +1 -0
  105. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/align-vertical.mjs +137 -0
  106. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/align-vertical.mjs.map +1 -0
  107. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alpha.mjs +128 -0
  108. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/alpha.mjs.map +1 -0
  109. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/analytics-filled.mjs +119 -0
  110. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/analytics-filled.mjs.map +1 -0
  111. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/analytics.mjs +144 -0
  112. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/analytics.mjs.map +1 -0
  113. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/anchor.mjs +135 -0
  114. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/anchor.mjs.map +1 -0
  115. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/angry-filled.mjs +119 -0
  116. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/angry-filled.mjs.map +1 -0
  117. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/angry.mjs +144 -0
  118. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/angry.mjs.map +1 -0
  119. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/animation-1-filled.mjs +119 -0
  120. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/animation-1-filled.mjs.map +1 -0
  121. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/animation-1.mjs +143 -0
  122. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/animation-1.mjs.map +1 -0
  123. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/animation-filled.mjs +131 -0
  124. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/animation-filled.mjs.map +1 -0
  125. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/animation.mjs +135 -0
  126. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/animation.mjs.map +1 -0
  127. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/anticlockwise-filled.mjs +119 -0
  128. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/anticlockwise-filled.mjs.map +1 -0
  129. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/anticlockwise.mjs +144 -0
  130. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/anticlockwise.mjs.map +1 -0
  131. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/api.mjs +129 -0
  132. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/api.mjs.map +1 -0
  133. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/app-filled.mjs +119 -0
  134. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/app-filled.mjs.map +1 -0
  135. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/app.mjs +185 -0
  136. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/app.mjs.map +1 -0
  137. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/apple-filled.mjs +119 -0
  138. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/apple-filled.mjs.map +1 -0
  139. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/apple.mjs +135 -0
  140. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/apple.mjs.map +1 -0
  141. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/application-filled.mjs +119 -0
  142. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/application-filled.mjs.map +1 -0
  143. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/application.mjs +144 -0
  144. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/application.mjs.map +1 -0
  145. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/architecture-hui-style-filled.mjs +131 -0
  146. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/architecture-hui-style-filled.mjs.map +1 -0
  147. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/architecture-hui-style.mjs +151 -0
  148. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/architecture-hui-style.mjs.map +1 -0
  149. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/archway-1-filled.mjs +119 -0
  150. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/archway-1-filled.mjs.map +1 -0
  151. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/archway-1.mjs +135 -0
  152. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/archway-1.mjs.map +1 -0
  153. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/archway-filled.mjs +119 -0
  154. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/archway-filled.mjs.map +1 -0
  155. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/archway.mjs +142 -0
  156. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/archway.mjs.map +1 -0
  157. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-down-circle-filled.mjs +119 -0
  158. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-down-circle-filled.mjs.map +1 -0
  159. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-down-circle.mjs +144 -0
  160. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-down-circle.mjs.map +1 -0
  161. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-down-rectangle-filled.mjs +119 -0
  162. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-down-rectangle-filled.mjs.map +1 -0
  163. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-down-rectangle.mjs +144 -0
  164. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-down-rectangle.mjs.map +1 -0
  165. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-down.mjs +128 -0
  166. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-down.mjs.map +1 -0
  167. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-circle-filled.mjs +119 -0
  168. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-circle-filled.mjs.map +1 -0
  169. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-circle.mjs +144 -0
  170. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-circle.mjs.map +1 -0
  171. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-down-circle-filled.mjs +119 -0
  172. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-down-circle-filled.mjs.map +1 -0
  173. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-down-circle.mjs +144 -0
  174. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-down-circle.mjs.map +1 -0
  175. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-down.mjs +128 -0
  176. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-down.mjs.map +1 -0
  177. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-right-1.mjs +128 -0
  178. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-right-1.mjs.map +1 -0
  179. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-right-2.mjs +128 -0
  180. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-right-2.mjs.map +1 -0
  181. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-right-3.mjs +128 -0
  182. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-right-3.mjs.map +1 -0
  183. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-right-circle-filled.mjs +119 -0
  184. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-right-circle-filled.mjs.map +1 -0
  185. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-right-circle.mjs +144 -0
  186. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-right-circle.mjs.map +1 -0
  187. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-up-circle-filled.mjs +119 -0
  188. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-up-circle-filled.mjs.map +1 -0
  189. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-up-circle.mjs +144 -0
  190. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-up-circle.mjs.map +1 -0
  191. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-up.mjs +128 -0
  192. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left-up.mjs.map +1 -0
  193. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left.mjs +128 -0
  194. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-left.mjs.map +1 -0
  195. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-circle-filled.mjs +119 -0
  196. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-circle-filled.mjs.map +1 -0
  197. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-circle.mjs +144 -0
  198. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-circle.mjs.map +1 -0
  199. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-down-circle-filled.mjs +119 -0
  200. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-down-circle-filled.mjs.map +1 -0
  201. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-down-circle.mjs +144 -0
  202. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-down-circle.mjs.map +1 -0
  203. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-down.mjs +128 -0
  204. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-down.mjs.map +1 -0
  205. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-up-circle-filled.mjs +119 -0
  206. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-up-circle-filled.mjs.map +1 -0
  207. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-up-circle.mjs +144 -0
  208. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-up-circle.mjs.map +1 -0
  209. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-up.mjs +128 -0
  210. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right-up.mjs.map +1 -0
  211. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right.mjs +128 -0
  212. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-right.mjs.map +1 -0
  213. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-triangle-down-filled.mjs +119 -0
  214. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-triangle-down-filled.mjs.map +1 -0
  215. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-triangle-down.mjs +135 -0
  216. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-triangle-down.mjs.map +1 -0
  217. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-triangle-up-filled.mjs +119 -0
  218. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-triangle-up-filled.mjs.map +1 -0
  219. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-triangle-up.mjs +135 -0
  220. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-triangle-up.mjs.map +1 -0
  221. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-circle-filled.mjs +119 -0
  222. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-circle-filled.mjs.map +1 -0
  223. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-circle.mjs +144 -0
  224. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-circle.mjs.map +1 -0
  225. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-down-1.mjs +128 -0
  226. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-down-1.mjs.map +1 -0
  227. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-down-2.mjs +128 -0
  228. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-down-2.mjs.map +1 -0
  229. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-down-3.mjs +128 -0
  230. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-down-3.mjs.map +1 -0
  231. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-down-circle-filled.mjs +119 -0
  232. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-down-circle-filled.mjs.map +1 -0
  233. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-down-circle.mjs +144 -0
  234. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up-down-circle.mjs.map +1 -0
  235. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up.mjs +128 -0
  236. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/arrow-up.mjs.map +1 -0
  237. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/artboard.mjs +128 -0
  238. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/artboard.mjs.map +1 -0
  239. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/article-filled.mjs +119 -0
  240. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/article-filled.mjs.map +1 -0
  241. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/article.mjs +144 -0
  242. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/article.mjs.map +1 -0
  243. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-checked-filled.mjs +119 -0
  244. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-checked-filled.mjs.map +1 -0
  245. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-checked.mjs +148 -0
  246. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-checked.mjs.map +1 -0
  247. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-code-filled.mjs +119 -0
  248. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-code-filled.mjs.map +1 -0
  249. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-code.mjs +148 -0
  250. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-code.mjs.map +1 -0
  251. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-error-filled.mjs +119 -0
  252. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-error-filled.mjs.map +1 -0
  253. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-error.mjs +148 -0
  254. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-error.mjs.map +1 -0
  255. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-filled.mjs +119 -0
  256. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-filled.mjs.map +1 -0
  257. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-user-filled.mjs +119 -0
  258. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-user-filled.mjs.map +1 -0
  259. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-user.mjs +148 -0
  260. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment-user.mjs.map +1 -0
  261. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment.mjs +148 -0
  262. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/assignment.mjs.map +1 -0
  263. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/attach.mjs +128 -0
  264. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/attach.mjs.map +1 -0
  265. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/attic-1-filled.mjs +119 -0
  266. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/attic-1-filled.mjs.map +1 -0
  267. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/attic-1.mjs +151 -0
  268. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/attic-1.mjs.map +1 -0
  269. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/attic-filled.mjs +131 -0
  270. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/attic-filled.mjs.map +1 -0
  271. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/attic.mjs +151 -0
  272. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/attic.mjs.map +1 -0
  273. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/audio-filled.mjs +125 -0
  274. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/audio-filled.mjs.map +1 -0
  275. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/audio.mjs +161 -0
  276. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/audio.mjs.map +1 -0
  277. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/awkward-filled.mjs +119 -0
  278. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/awkward-filled.mjs.map +1 -0
  279. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/awkward.mjs +144 -0
  280. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/awkward.mjs.map +1 -0
  281. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backtop-rectangle-filled.mjs +119 -0
  282. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backtop-rectangle-filled.mjs.map +1 -0
  283. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backtop-rectangle.mjs +144 -0
  284. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backtop-rectangle.mjs.map +1 -0
  285. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backtop.mjs +128 -0
  286. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backtop.mjs.map +1 -0
  287. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backup-filled.mjs +119 -0
  288. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backup-filled.mjs.map +1 -0
  289. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backup.mjs +148 -0
  290. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backup.mjs.map +1 -0
  291. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backward-filled.mjs +119 -0
  292. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backward-filled.mjs.map +1 -0
  293. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backward.mjs +159 -0
  294. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/backward.mjs.map +1 -0
  295. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bad-laugh-filled.mjs +119 -0
  296. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bad-laugh-filled.mjs.map +1 -0
  297. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bad-laugh.mjs +151 -0
  298. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bad-laugh.mjs.map +1 -0
  299. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bamboo-shoot-filled.mjs +137 -0
  300. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bamboo-shoot-filled.mjs.map +1 -0
  301. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bamboo-shoot.mjs +135 -0
  302. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bamboo-shoot.mjs.map +1 -0
  303. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/banana-filled.mjs +125 -0
  304. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/banana-filled.mjs.map +1 -0
  305. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/banana.mjs +159 -0
  306. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/banana.mjs.map +1 -0
  307. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/barbecue-filled.mjs +119 -0
  308. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/barbecue-filled.mjs.map +1 -0
  309. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/barbecue.mjs +152 -0
  310. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/barbecue.mjs.map +1 -0
  311. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/barcode-1.mjs +137 -0
  312. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/barcode-1.mjs.map +1 -0
  313. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/barcode.mjs +128 -0
  314. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/barcode.mjs.map +1 -0
  315. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/base-station.mjs +137 -0
  316. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/base-station.mjs.map +1 -0
  317. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-add-filled.mjs +119 -0
  318. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-add-filled.mjs.map +1 -0
  319. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-add.mjs +144 -0
  320. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-add.mjs.map +1 -0
  321. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-charging-filled.mjs +137 -0
  322. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-charging-filled.mjs.map +1 -0
  323. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-charging.mjs +137 -0
  324. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-charging.mjs.map +1 -0
  325. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-filled.mjs +119 -0
  326. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-filled.mjs.map +1 -0
  327. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-low-filled.mjs +125 -0
  328. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-low-filled.mjs.map +1 -0
  329. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-low.mjs +144 -0
  330. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery-low.mjs.map +1 -0
  331. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery.mjs +135 -0
  332. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/battery.mjs.map +1 -0
  333. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bean-filled.mjs +119 -0
  334. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bean-filled.mjs.map +1 -0
  335. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bean.mjs +141 -0
  336. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bean.mjs.map +1 -0
  337. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/beer-filled.mjs +119 -0
  338. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/beer-filled.mjs.map +1 -0
  339. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/beer.mjs +142 -0
  340. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/beer.mjs.map +1 -0
  341. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/beta.mjs +128 -0
  342. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/beta.mjs.map +1 -0
  343. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bifurcate-filled.mjs +119 -0
  344. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bifurcate-filled.mjs.map +1 -0
  345. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bifurcate.mjs +152 -0
  346. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bifurcate.mjs.map +1 -0
  347. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bill-filled.mjs +119 -0
  348. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bill-filled.mjs.map +1 -0
  349. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bill.mjs +144 -0
  350. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bill.mjs.map +1 -0
  351. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bluetooth.mjs +128 -0
  352. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bluetooth.mjs.map +1 -0
  353. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bone-filled.mjs +119 -0
  354. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bone-filled.mjs.map +1 -0
  355. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bone.mjs +134 -0
  356. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bone.mjs.map +1 -0
  357. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book-filled.mjs +119 -0
  358. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book-filled.mjs.map +1 -0
  359. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book-open-filled.mjs +119 -0
  360. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book-open-filled.mjs.map +1 -0
  361. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book-open.mjs +154 -0
  362. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book-open.mjs.map +1 -0
  363. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book-unknown-filled.mjs +119 -0
  364. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book-unknown-filled.mjs.map +1 -0
  365. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book-unknown.mjs +154 -0
  366. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book-unknown.mjs.map +1 -0
  367. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book.mjs +144 -0
  368. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/book.mjs.map +1 -0
  369. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-add-filled.mjs +125 -0
  370. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-add-filled.mjs.map +1 -0
  371. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-add.mjs +137 -0
  372. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-add.mjs.map +1 -0
  373. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-checked-filled.mjs +125 -0
  374. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-checked-filled.mjs.map +1 -0
  375. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-checked.mjs +137 -0
  376. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-checked.mjs.map +1 -0
  377. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-double-filled.mjs +125 -0
  378. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-double-filled.mjs.map +1 -0
  379. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-double.mjs +144 -0
  380. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-double.mjs.map +1 -0
  381. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-filled.mjs +119 -0
  382. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-filled.mjs.map +1 -0
  383. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-minus-filled.mjs +125 -0
  384. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-minus-filled.mjs.map +1 -0
  385. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-minus.mjs +137 -0
  386. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark-minus.mjs.map +1 -0
  387. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark.mjs +135 -0
  388. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bookmark.mjs.map +1 -0
  389. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/braces.mjs +128 -0
  390. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/braces.mjs.map +1 -0
  391. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brackets.mjs +128 -0
  392. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brackets.mjs.map +1 -0
  393. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bread-filled.mjs +119 -0
  394. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bread-filled.mjs.map +1 -0
  395. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bread.mjs +136 -0
  396. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bread.mjs.map +1 -0
  397. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-1-filled.mjs +119 -0
  398. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-1-filled.mjs.map +1 -0
  399. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-1.mjs +146 -0
  400. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-1.mjs.map +1 -0
  401. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-2-filled.mjs +119 -0
  402. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-2-filled.mjs.map +1 -0
  403. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-2.mjs +134 -0
  404. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-2.mjs.map +1 -0
  405. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-3.mjs +128 -0
  406. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-3.mjs.map +1 -0
  407. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-4.mjs +128 -0
  408. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-4.mjs.map +1 -0
  409. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-5-filled.mjs +119 -0
  410. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-5-filled.mjs.map +1 -0
  411. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-5.mjs +153 -0
  412. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-5.mjs.map +1 -0
  413. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-6-filled.mjs +119 -0
  414. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-6-filled.mjs.map +1 -0
  415. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-6.mjs +128 -0
  416. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge-6.mjs.map +1 -0
  417. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge.mjs +128 -0
  418. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bridge.mjs.map +1 -0
  419. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brightness-1-filled.mjs +119 -0
  420. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brightness-1-filled.mjs.map +1 -0
  421. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brightness-1.mjs +149 -0
  422. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brightness-1.mjs.map +1 -0
  423. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brightness-filled.mjs +119 -0
  424. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brightness-filled.mjs.map +1 -0
  425. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brightness.mjs +153 -0
  426. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brightness.mjs.map +1 -0
  427. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/broccoli-filled.mjs +119 -0
  428. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/broccoli-filled.mjs.map +1 -0
  429. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/broccoli.mjs +151 -0
  430. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/broccoli.mjs.map +1 -0
  431. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse-filled.mjs +125 -0
  432. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse-filled.mjs.map +1 -0
  433. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse-gallery-filled.mjs +125 -0
  434. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse-gallery-filled.mjs.map +1 -0
  435. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse-gallery.mjs +144 -0
  436. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse-gallery.mjs.map +1 -0
  437. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse-off-filled.mjs +131 -0
  438. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse-off-filled.mjs.map +1 -0
  439. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse-off.mjs +137 -0
  440. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse-off.mjs.map +1 -0
  441. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse.mjs +152 -0
  442. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/browse.mjs.map +1 -0
  443. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brush-filled.mjs +125 -0
  444. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brush-filled.mjs.map +1 -0
  445. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brush.mjs +142 -0
  446. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/brush.mjs.map +1 -0
  447. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bug-filled.mjs +131 -0
  448. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bug-filled.mjs.map +1 -0
  449. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bug-report-filled.mjs +119 -0
  450. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bug-report-filled.mjs.map +1 -0
  451. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bug-report.mjs +144 -0
  452. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bug-report.mjs.map +1 -0
  453. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bug.mjs +146 -0
  454. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bug.mjs.map +1 -0
  455. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-1-filled.mjs +125 -0
  456. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-1-filled.mjs.map +1 -0
  457. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-1.mjs +150 -0
  458. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-1.mjs.map +1 -0
  459. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-2-filled.mjs +131 -0
  460. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-2-filled.mjs.map +1 -0
  461. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-2.mjs +175 -0
  462. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-2.mjs.map +1 -0
  463. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-3-filled.mjs +131 -0
  464. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-3-filled.mjs.map +1 -0
  465. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-3.mjs +151 -0
  466. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-3.mjs.map +1 -0
  467. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-4-filled.mjs +131 -0
  468. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-4-filled.mjs.map +1 -0
  469. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-4.mjs +164 -0
  470. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-4.mjs.map +1 -0
  471. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-5-filled.mjs +119 -0
  472. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-5-filled.mjs.map +1 -0
  473. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-5.mjs +151 -0
  474. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-5.mjs.map +1 -0
  475. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-filled.mjs +131 -0
  476. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building-filled.mjs.map +1 -0
  477. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building.mjs +151 -0
  478. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/building.mjs.map +1 -0
  479. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bulletpoint.mjs +128 -0
  480. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/bulletpoint.mjs.map +1 -0
  481. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/button-filled.mjs +119 -0
  482. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/button-filled.mjs.map +1 -0
  483. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/button.mjs +149 -0
  484. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/button.mjs.map +1 -0
  485. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cabbage-filled.mjs +137 -0
  486. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cabbage-filled.mjs.map +1 -0
  487. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cabbage.mjs +135 -0
  488. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cabbage.mjs.map +1 -0
  489. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cake-filled.mjs +143 -0
  490. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cake-filled.mjs.map +1 -0
  491. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cake.mjs +151 -0
  492. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cake.mjs.map +1 -0
  493. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculation-1-filled.mjs +119 -0
  494. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculation-1-filled.mjs.map +1 -0
  495. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculation-1.mjs +144 -0
  496. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculation-1.mjs.map +1 -0
  497. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculation.mjs +128 -0
  498. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculation.mjs.map +1 -0
  499. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculator-1.mjs +142 -0
  500. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculator-1.mjs.map +1 -0
  501. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculator-filled.mjs +125 -0
  502. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculator-filled.mjs.map +1 -0
  503. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculator.mjs +151 -0
  504. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calculator.mjs.map +1 -0
  505. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-1-filled.mjs +125 -0
  506. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-1-filled.mjs.map +1 -0
  507. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-1.mjs +196 -0
  508. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-1.mjs.map +1 -0
  509. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-2-filled.mjs +125 -0
  510. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-2-filled.mjs.map +1 -0
  511. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-2.mjs +151 -0
  512. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-2.mjs.map +1 -0
  513. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-edit-filled.mjs +131 -0
  514. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-edit-filled.mjs.map +1 -0
  515. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-edit.mjs +144 -0
  516. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-edit.mjs.map +1 -0
  517. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-event-filled.mjs +125 -0
  518. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-event-filled.mjs.map +1 -0
  519. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-event.mjs +151 -0
  520. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-event.mjs.map +1 -0
  521. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-filled.mjs +125 -0
  522. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar-filled.mjs.map +1 -0
  523. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar.mjs +141 -0
  524. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calendar.mjs.map +1 -0
  525. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-1-filled.mjs +131 -0
  526. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-1-filled.mjs.map +1 -0
  527. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-1.mjs +144 -0
  528. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-1.mjs.map +1 -0
  529. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-cancel-filled.mjs +125 -0
  530. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-cancel-filled.mjs.map +1 -0
  531. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-cancel.mjs +144 -0
  532. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-cancel.mjs.map +1 -0
  533. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-filled.mjs +119 -0
  534. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-filled.mjs.map +1 -0
  535. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-forwarded-filled.mjs +125 -0
  536. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-forwarded-filled.mjs.map +1 -0
  537. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-forwarded.mjs +144 -0
  538. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-forwarded.mjs.map +1 -0
  539. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-incoming-filled.mjs +125 -0
  540. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-incoming-filled.mjs.map +1 -0
  541. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-incoming.mjs +144 -0
  542. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-incoming.mjs.map +1 -0
  543. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-off-filled.mjs +125 -0
  544. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-off-filled.mjs.map +1 -0
  545. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-off.mjs +137 -0
  546. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call-off.mjs.map +1 -0
  547. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call.mjs +134 -0
  548. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/call.mjs.map +1 -0
  549. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calm-1-filled.mjs +119 -0
  550. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calm-1-filled.mjs.map +1 -0
  551. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calm-1.mjs +144 -0
  552. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calm-1.mjs.map +1 -0
  553. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calm-filled.mjs +119 -0
  554. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calm-filled.mjs.map +1 -0
  555. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calm.mjs +144 -0
  556. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/calm.mjs.map +1 -0
  557. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-1-filled.mjs +125 -0
  558. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-1-filled.mjs.map +1 -0
  559. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-1.mjs +150 -0
  560. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-1.mjs.map +1 -0
  561. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-2-filled.mjs +119 -0
  562. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-2-filled.mjs.map +1 -0
  563. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-2.mjs +151 -0
  564. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-2.mjs.map +1 -0
  565. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-filled.mjs +125 -0
  566. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-filled.mjs.map +1 -0
  567. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-off-filled.mjs +125 -0
  568. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-off-filled.mjs.map +1 -0
  569. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-off.mjs +137 -0
  570. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera-off.mjs.map +1 -0
  571. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera.mjs +149 -0
  572. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/camera.mjs.map +1 -0
  573. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/candy-filled.mjs +131 -0
  574. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/candy-filled.mjs.map +1 -0
  575. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/candy.mjs +175 -0
  576. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/candy.mjs.map +1 -0
  577. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/card-filled.mjs +119 -0
  578. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/card-filled.mjs.map +1 -0
  579. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/card.mjs +172 -0
  580. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/card.mjs.map +1 -0
  581. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cardmembership-filled.mjs +125 -0
  582. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cardmembership-filled.mjs.map +1 -0
  583. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cardmembership.mjs +151 -0
  584. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cardmembership.mjs.map +1 -0
  585. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-down-small.mjs +120 -0
  586. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-down-small.mjs.map +1 -0
  587. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-down.mjs +135 -0
  588. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-down.mjs.map +1 -0
  589. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-left-small.mjs +120 -0
  590. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-left-small.mjs.map +1 -0
  591. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-left.mjs +135 -0
  592. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-left.mjs.map +1 -0
  593. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-right-small.mjs +120 -0
  594. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-right-small.mjs.map +1 -0
  595. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-right.mjs +135 -0
  596. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-right.mjs.map +1 -0
  597. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-up-small.mjs +120 -0
  598. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-up-small.mjs.map +1 -0
  599. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-up.mjs +135 -0
  600. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/caret-up.mjs.map +1 -0
  601. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cart-add-filled.mjs +131 -0
  602. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cart-add-filled.mjs.map +1 -0
  603. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cart-add.mjs +137 -0
  604. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cart-add.mjs.map +1 -0
  605. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cart-filled.mjs +119 -0
  606. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cart-filled.mjs.map +1 -0
  607. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cart.mjs +128 -0
  608. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cart.mjs.map +1 -0
  609. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cast-filled.mjs +137 -0
  610. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cast-filled.mjs.map +1 -0
  611. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cast.mjs +137 -0
  612. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cast.mjs.map +1 -0
  613. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-1-filled.mjs +119 -0
  614. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-1-filled.mjs.map +1 -0
  615. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-1.mjs +162 -0
  616. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-1.mjs.map +1 -0
  617. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-2-filled.mjs +119 -0
  618. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-2-filled.mjs.map +1 -0
  619. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-2.mjs +162 -0
  620. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-2.mjs.map +1 -0
  621. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-3-filled.mjs +119 -0
  622. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-3-filled.mjs.map +1 -0
  623. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-3.mjs +162 -0
  624. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-3.mjs.map +1 -0
  625. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-4-filled.mjs +119 -0
  626. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-4-filled.mjs.map +1 -0
  627. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-4.mjs +162 -0
  628. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-4.mjs.map +1 -0
  629. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-5-filled.mjs +119 -0
  630. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-5-filled.mjs.map +1 -0
  631. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-5.mjs +162 -0
  632. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-5.mjs.map +1 -0
  633. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-6-filled.mjs +137 -0
  634. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-6-filled.mjs.map +1 -0
  635. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-6.mjs +151 -0
  636. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-6.mjs.map +1 -0
  637. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-7-filled.mjs +143 -0
  638. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-7-filled.mjs.map +1 -0
  639. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-7.mjs +151 -0
  640. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-7.mjs.map +1 -0
  641. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-filled.mjs +125 -0
  642. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle-filled.mjs.map +1 -0
  643. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle.mjs +174 -0
  644. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/castle.mjs.map +1 -0
  645. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cat-filled.mjs +119 -0
  646. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cat-filled.mjs.map +1 -0
  647. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cat.mjs +144 -0
  648. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cat.mjs.map +1 -0
  649. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/catalog-filled.mjs +119 -0
  650. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/catalog-filled.mjs.map +1 -0
  651. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/catalog.mjs +143 -0
  652. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/catalog.mjs.map +1 -0
  653. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cd-filled.mjs +119 -0
  654. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cd-filled.mjs.map +1 -0
  655. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cd.mjs +151 -0
  656. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cd.mjs.map +1 -0
  657. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/celsius.mjs +135 -0
  658. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/celsius.mjs.map +1 -0
  659. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/center-focus-strong-filled.mjs +119 -0
  660. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/center-focus-strong-filled.mjs.map +1 -0
  661. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/center-focus-strong.mjs +147 -0
  662. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/center-focus-strong.mjs.map +1 -0
  663. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/centimeter.mjs +137 -0
  664. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/centimeter.mjs.map +1 -0
  665. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/certificate-1-filled.mjs +119 -0
  666. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/certificate-1-filled.mjs.map +1 -0
  667. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/certificate-1.mjs +151 -0
  668. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/certificate-1.mjs.map +1 -0
  669. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/certificate-filled.mjs +119 -0
  670. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/certificate-filled.mjs.map +1 -0
  671. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/certificate.mjs +151 -0
  672. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/certificate.mjs.map +1 -0
  673. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-3d-filled.mjs +131 -0
  674. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-3d-filled.mjs.map +1 -0
  675. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-3d.mjs +144 -0
  676. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-3d.mjs.map +1 -0
  677. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-add-filled.mjs +125 -0
  678. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-add-filled.mjs.map +1 -0
  679. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-add.mjs +137 -0
  680. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-add.mjs.map +1 -0
  681. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-analytics.mjs +137 -0
  682. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-analytics.mjs.map +1 -0
  683. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-area-filled.mjs +119 -0
  684. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-area-filled.mjs.map +1 -0
  685. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-area-multi-filled.mjs +131 -0
  686. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-area-multi-filled.mjs.map +1 -0
  687. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-area-multi.mjs +144 -0
  688. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-area-multi.mjs.map +1 -0
  689. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-area.mjs +144 -0
  690. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-area.mjs.map +1 -0
  691. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-bar-filled.mjs +119 -0
  692. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-bar-filled.mjs.map +1 -0
  693. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-bar.mjs +168 -0
  694. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-bar.mjs.map +1 -0
  695. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-bubble-filled.mjs +119 -0
  696. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-bubble-filled.mjs.map +1 -0
  697. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-bubble.mjs +182 -0
  698. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-bubble.mjs.map +1 -0
  699. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-column-filled.mjs +119 -0
  700. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-column-filled.mjs.map +1 -0
  701. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-column.mjs +168 -0
  702. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-column.mjs.map +1 -0
  703. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-combo-filled.mjs +119 -0
  704. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-combo-filled.mjs.map +1 -0
  705. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-combo.mjs +155 -0
  706. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-combo.mjs.map +1 -0
  707. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-filled.mjs +119 -0
  708. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-filled.mjs.map +1 -0
  709. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-line-data-1.mjs +137 -0
  710. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-line-data-1.mjs.map +1 -0
  711. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-line-data.mjs +155 -0
  712. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-line-data.mjs.map +1 -0
  713. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-line-multi.mjs +137 -0
  714. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-line-multi.mjs.map +1 -0
  715. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-line.mjs +137 -0
  716. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-line.mjs.map +1 -0
  717. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-maximum.mjs +137 -0
  718. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-maximum.mjs.map +1 -0
  719. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-median.mjs +137 -0
  720. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-median.mjs.map +1 -0
  721. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-minimum.mjs +137 -0
  722. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-minimum.mjs.map +1 -0
  723. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-pie-filled.mjs +125 -0
  724. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-pie-filled.mjs.map +1 -0
  725. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-pie.mjs +149 -0
  726. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-pie.mjs.map +1 -0
  727. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-radar-filled.mjs +143 -0
  728. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-radar-filled.mjs.map +1 -0
  729. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-radar.mjs +135 -0
  730. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-radar.mjs.map +1 -0
  731. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-radial.mjs +128 -0
  732. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-radial.mjs.map +1 -0
  733. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-ring-1-filled.mjs +131 -0
  734. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-ring-1-filled.mjs.map +1 -0
  735. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-ring-1.mjs +144 -0
  736. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-ring-1.mjs.map +1 -0
  737. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-ring-filled.mjs +143 -0
  738. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-ring-filled.mjs.map +1 -0
  739. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-ring.mjs +154 -0
  740. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-ring.mjs.map +1 -0
  741. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-scatter.mjs +190 -0
  742. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-scatter.mjs.map +1 -0
  743. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-stacked-filled.mjs +131 -0
  744. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-stacked-filled.mjs.map +1 -0
  745. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-stacked.mjs +155 -0
  746. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart-stacked.mjs.map +1 -0
  747. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart.mjs +144 -0
  748. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chart.mjs.map +1 -0
  749. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-add-filled.mjs +125 -0
  750. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-add-filled.mjs.map +1 -0
  751. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-add.mjs +137 -0
  752. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-add.mjs.map +1 -0
  753. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-1-filled.mjs +119 -0
  754. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-1-filled.mjs.map +1 -0
  755. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-1.mjs +144 -0
  756. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-1.mjs.map +1 -0
  757. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-add-filled.mjs +119 -0
  758. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-add-filled.mjs.map +1 -0
  759. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-add.mjs +144 -0
  760. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-add.mjs.map +1 -0
  761. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-error-filled.mjs +119 -0
  762. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-error-filled.mjs.map +1 -0
  763. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-error.mjs +148 -0
  764. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-error.mjs.map +1 -0
  765. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-filled.mjs +119 -0
  766. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-filled.mjs.map +1 -0
  767. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-help-filled.mjs +119 -0
  768. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-help-filled.mjs.map +1 -0
  769. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-help.mjs +148 -0
  770. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-help.mjs.map +1 -0
  771. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-history-filled.mjs +119 -0
  772. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-history-filled.mjs.map +1 -0
  773. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-history.mjs +148 -0
  774. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-history.mjs.map +1 -0
  775. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-locked-filled.mjs +125 -0
  776. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-locked-filled.mjs.map +1 -0
  777. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-locked.mjs +151 -0
  778. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-locked.mjs.map +1 -0
  779. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-smile-filled.mjs +119 -0
  780. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-smile-filled.mjs.map +1 -0
  781. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-smile.mjs +148 -0
  782. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble-smile.mjs.map +1 -0
  783. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble.mjs +139 -0
  784. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-bubble.mjs.map +1 -0
  785. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-checked-filled.mjs +119 -0
  786. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-checked-filled.mjs.map +1 -0
  787. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-checked.mjs +144 -0
  788. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-checked.mjs.map +1 -0
  789. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-clear-filled.mjs +119 -0
  790. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-clear-filled.mjs.map +1 -0
  791. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-clear.mjs +144 -0
  792. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-clear.mjs.map +1 -0
  793. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-double-filled.mjs +119 -0
  794. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-double-filled.mjs.map +1 -0
  795. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-double.mjs +144 -0
  796. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-double.mjs.map +1 -0
  797. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-error-filled.mjs +119 -0
  798. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-error-filled.mjs.map +1 -0
  799. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-error.mjs +144 -0
  800. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-error.mjs.map +1 -0
  801. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-filled.mjs +119 -0
  802. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-filled.mjs.map +1 -0
  803. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-heart-filled.mjs +119 -0
  804. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-heart-filled.mjs.map +1 -0
  805. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-heart.mjs +155 -0
  806. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-heart.mjs.map +1 -0
  807. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-message-filled.mjs +119 -0
  808. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-message-filled.mjs.map +1 -0
  809. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-message.mjs +165 -0
  810. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-message.mjs.map +1 -0
  811. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-off-filled.mjs +131 -0
  812. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-off-filled.mjs.map +1 -0
  813. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-off.mjs +138 -0
  814. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-off.mjs.map +1 -0
  815. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-poll-filled.mjs +119 -0
  816. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-poll-filled.mjs.map +1 -0
  817. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-poll.mjs +144 -0
  818. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-poll.mjs.map +1 -0
  819. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-setting-filled.mjs +125 -0
  820. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-setting-filled.mjs.map +1 -0
  821. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-setting.mjs +144 -0
  822. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat-setting.mjs.map +1 -0
  823. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat.mjs +135 -0
  824. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chat.mjs.map +1 -0
  825. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check-circle-filled.mjs +119 -0
  826. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check-circle-filled.mjs.map +1 -0
  827. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check-circle.mjs +144 -0
  828. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check-circle.mjs.map +1 -0
  829. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check-double.mjs +128 -0
  830. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check-double.mjs.map +1 -0
  831. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check-rectangle-filled.mjs +119 -0
  832. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check-rectangle-filled.mjs.map +1 -0
  833. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check-rectangle.mjs +144 -0
  834. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check-rectangle.mjs.map +1 -0
  835. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check.mjs +128 -0
  836. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/check.mjs.map +1 -0
  837. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cheese-filled.mjs +119 -0
  838. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cheese-filled.mjs.map +1 -0
  839. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cheese.mjs +149 -0
  840. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cheese.mjs.map +1 -0
  841. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cherry-filled.mjs +119 -0
  842. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cherry-filled.mjs.map +1 -0
  843. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cherry.mjs +147 -0
  844. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cherry.mjs.map +1 -0
  845. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-circle-filled.mjs +119 -0
  846. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-circle-filled.mjs.map +1 -0
  847. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-circle.mjs +144 -0
  848. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-circle.mjs.map +1 -0
  849. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-double-s.mjs +128 -0
  850. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-double-s.mjs.map +1 -0
  851. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-double.mjs +128 -0
  852. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-double.mjs.map +1 -0
  853. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-rectangle-filled.mjs +119 -0
  854. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-rectangle-filled.mjs.map +1 -0
  855. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-rectangle.mjs +144 -0
  856. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-rectangle.mjs.map +1 -0
  857. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-s.mjs +128 -0
  858. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down-s.mjs.map +1 -0
  859. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down.mjs +128 -0
  860. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-down.mjs.map +1 -0
  861. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-circle-filled.mjs +119 -0
  862. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-circle-filled.mjs.map +1 -0
  863. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-circle.mjs +144 -0
  864. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-circle.mjs.map +1 -0
  865. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-double-s.mjs +128 -0
  866. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-double-s.mjs.map +1 -0
  867. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-double.mjs +128 -0
  868. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-double.mjs.map +1 -0
  869. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-rectangle-filled.mjs +119 -0
  870. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-rectangle-filled.mjs.map +1 -0
  871. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-rectangle.mjs +144 -0
  872. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-rectangle.mjs.map +1 -0
  873. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-s.mjs +128 -0
  874. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left-s.mjs.map +1 -0
  875. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left.mjs +128 -0
  876. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-left.mjs.map +1 -0
  877. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-circle-filled.mjs +119 -0
  878. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-circle-filled.mjs.map +1 -0
  879. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-circle.mjs +144 -0
  880. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-circle.mjs.map +1 -0
  881. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-double-s.mjs +128 -0
  882. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-double-s.mjs.map +1 -0
  883. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-double.mjs +128 -0
  884. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-double.mjs.map +1 -0
  885. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-rectangle-filled.mjs +119 -0
  886. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-rectangle-filled.mjs.map +1 -0
  887. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-rectangle.mjs +144 -0
  888. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-rectangle.mjs.map +1 -0
  889. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-s.mjs +128 -0
  890. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right-s.mjs.map +1 -0
  891. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right.mjs +128 -0
  892. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-right.mjs.map +1 -0
  893. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-circle-filled.mjs +119 -0
  894. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-circle-filled.mjs.map +1 -0
  895. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-circle.mjs +144 -0
  896. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-circle.mjs.map +1 -0
  897. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-double-s.mjs +128 -0
  898. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-double-s.mjs.map +1 -0
  899. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-double.mjs +128 -0
  900. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-double.mjs.map +1 -0
  901. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-rectangle-filled.mjs +119 -0
  902. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-rectangle-filled.mjs.map +1 -0
  903. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-rectangle.mjs +144 -0
  904. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-rectangle.mjs.map +1 -0
  905. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-s.mjs +128 -0
  906. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up-s.mjs.map +1 -0
  907. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up.mjs +128 -0
  908. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chevron-up.mjs.map +1 -0
  909. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chicken.mjs +135 -0
  910. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chicken.mjs.map +1 -0
  911. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chili-filled.mjs +119 -0
  912. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chili-filled.mjs.map +1 -0
  913. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chili.mjs +142 -0
  914. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chili.mjs.map +1 -0
  915. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney-1-filled.mjs +119 -0
  916. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney-1-filled.mjs.map +1 -0
  917. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney-1.mjs +151 -0
  918. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney-1.mjs.map +1 -0
  919. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney-2-filled.mjs +119 -0
  920. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney-2-filled.mjs.map +1 -0
  921. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney-2.mjs +151 -0
  922. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney-2.mjs.map +1 -0
  923. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney-filled.mjs +119 -0
  924. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney-filled.mjs.map +1 -0
  925. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney.mjs +151 -0
  926. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chimney.mjs.map +1 -0
  927. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chinese-cabbage-filled.mjs +119 -0
  928. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chinese-cabbage-filled.mjs.map +1 -0
  929. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chinese-cabbage.mjs +159 -0
  930. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/chinese-cabbage.mjs.map +1 -0
  931. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/church-filled.mjs +125 -0
  932. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/church-filled.mjs.map +1 -0
  933. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/church.mjs +151 -0
  934. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/church.mjs.map +1 -0
  935. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/circle-filled.mjs +119 -0
  936. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/circle-filled.mjs.map +1 -0
  937. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/circle.mjs +139 -0
  938. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/circle.mjs.map +1 -0
  939. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-1-filled.mjs +143 -0
  940. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-1-filled.mjs.map +1 -0
  941. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-1.mjs +151 -0
  942. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-1.mjs.map +1 -0
  943. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-10-filled.mjs +125 -0
  944. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-10-filled.mjs.map +1 -0
  945. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-10.mjs +150 -0
  946. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-10.mjs.map +1 -0
  947. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-11-filled.mjs +119 -0
  948. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-11-filled.mjs.map +1 -0
  949. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-11.mjs +151 -0
  950. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-11.mjs.map +1 -0
  951. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-12-filled.mjs +119 -0
  952. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-12-filled.mjs.map +1 -0
  953. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-12.mjs +162 -0
  954. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-12.mjs.map +1 -0
  955. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-13-filled.mjs +119 -0
  956. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-13-filled.mjs.map +1 -0
  957. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-13.mjs +162 -0
  958. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-13.mjs.map +1 -0
  959. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-14-filled.mjs +119 -0
  960. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-14-filled.mjs.map +1 -0
  961. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-14.mjs +162 -0
  962. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-14.mjs.map +1 -0
  963. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-15-filled.mjs +119 -0
  964. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-15-filled.mjs.map +1 -0
  965. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-15.mjs +151 -0
  966. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-15.mjs.map +1 -0
  967. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-2-filled.mjs +125 -0
  968. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-2-filled.mjs.map +1 -0
  969. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-2.mjs +149 -0
  970. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-2.mjs.map +1 -0
  971. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-3-filled.mjs +119 -0
  972. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-3-filled.mjs.map +1 -0
  973. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-3.mjs +162 -0
  974. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-3.mjs.map +1 -0
  975. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-4-filled.mjs +119 -0
  976. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-4-filled.mjs.map +1 -0
  977. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-4.mjs +162 -0
  978. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-4.mjs.map +1 -0
  979. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-5-filled.mjs +119 -0
  980. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-5-filled.mjs.map +1 -0
  981. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-5.mjs +162 -0
  982. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-5.mjs.map +1 -0
  983. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-6-filled.mjs +119 -0
  984. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-6-filled.mjs.map +1 -0
  985. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-6.mjs +162 -0
  986. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-6.mjs.map +1 -0
  987. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-7-filled.mjs +119 -0
  988. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-7-filled.mjs.map +1 -0
  989. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-7.mjs +151 -0
  990. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-7.mjs.map +1 -0
  991. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-8-filled.mjs +119 -0
  992. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-8-filled.mjs.map +1 -0
  993. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-8.mjs +151 -0
  994. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-8.mjs.map +1 -0
  995. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-9-filled.mjs +119 -0
  996. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-9-filled.mjs.map +1 -0
  997. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-9.mjs +144 -0
  998. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-9.mjs.map +1 -0
  999. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient-1-filled.mjs +125 -0
  1000. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient-1-filled.mjs.map +1 -0
  1001. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient-1.mjs +144 -0
  1002. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient-1.mjs.map +1 -0
  1003. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient-2-filled.mjs +119 -0
  1004. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient-2-filled.mjs.map +1 -0
  1005. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient-2.mjs +144 -0
  1006. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient-2.mjs.map +1 -0
  1007. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient-filled.mjs +131 -0
  1008. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient-filled.mjs.map +1 -0
  1009. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient.mjs +151 -0
  1010. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-ancient.mjs.map +1 -0
  1011. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-filled.mjs +125 -0
  1012. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city-filled.mjs.map +1 -0
  1013. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city.mjs +149 -0
  1014. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/city.mjs.map +1 -0
  1015. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear-filled.mjs +125 -0
  1016. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear-filled.mjs.map +1 -0
  1017. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear-formatting-1-filled.mjs +119 -0
  1018. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear-formatting-1-filled.mjs.map +1 -0
  1019. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear-formatting-1.mjs +135 -0
  1020. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear-formatting-1.mjs.map +1 -0
  1021. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear-formatting-filled.mjs +119 -0
  1022. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear-formatting-filled.mjs.map +1 -0
  1023. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear-formatting.mjs +135 -0
  1024. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear-formatting.mjs.map +1 -0
  1025. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear.mjs +142 -0
  1026. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/clear.mjs.map +1 -0
  1027. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-circle-filled.mjs +119 -0
  1028. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-circle-filled.mjs.map +1 -0
  1029. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-circle.mjs +144 -0
  1030. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-circle.mjs.map +1 -0
  1031. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-octagon-filled.mjs +119 -0
  1032. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-octagon-filled.mjs.map +1 -0
  1033. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-octagon.mjs +144 -0
  1034. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-octagon.mjs.map +1 -0
  1035. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-rectangle-filled.mjs +119 -0
  1036. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-rectangle-filled.mjs.map +1 -0
  1037. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-rectangle.mjs +144 -0
  1038. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close-rectangle.mjs.map +1 -0
  1039. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close.mjs +128 -0
  1040. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/close.mjs.map +1 -0
  1041. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloud-download.mjs +137 -0
  1042. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloud-download.mjs.map +1 -0
  1043. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloud-filled.mjs +119 -0
  1044. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloud-filled.mjs.map +1 -0
  1045. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloud-upload.mjs +137 -0
  1046. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloud-upload.mjs.map +1 -0
  1047. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloud.mjs +134 -0
  1048. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloud.mjs.map +1 -0
  1049. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-day-filled.mjs +119 -0
  1050. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-day-filled.mjs.map +1 -0
  1051. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-day.mjs +149 -0
  1052. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-day.mjs.map +1 -0
  1053. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-night-filled.mjs +119 -0
  1054. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-night-filled.mjs.map +1 -0
  1055. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-night-rain-filled.mjs +119 -0
  1056. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-night-rain-filled.mjs.map +1 -0
  1057. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-night-rain.mjs +181 -0
  1058. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-night-rain.mjs.map +1 -0
  1059. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-night.mjs +151 -0
  1060. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-night.mjs.map +1 -0
  1061. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-rain-filled.mjs +119 -0
  1062. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-rain-filled.mjs.map +1 -0
  1063. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-rain.mjs +213 -0
  1064. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-rain.mjs.map +1 -0
  1065. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-sunny-filled.mjs +119 -0
  1066. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-sunny-filled.mjs.map +1 -0
  1067. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-sunny.mjs +188 -0
  1068. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cloudy-sunny.mjs.map +1 -0
  1069. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/code-1.mjs +128 -0
  1070. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/code-1.mjs.map +1 -0
  1071. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/code-off.mjs +137 -0
  1072. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/code-off.mjs.map +1 -0
  1073. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/code.mjs +137 -0
  1074. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/code.mjs.map +1 -0
  1075. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cola-filled.mjs +119 -0
  1076. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cola-filled.mjs.map +1 -0
  1077. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cola.mjs +161 -0
  1078. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cola.mjs.map +1 -0
  1079. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/collage-filled.mjs +131 -0
  1080. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/collage-filled.mjs.map +1 -0
  1081. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/collage.mjs +141 -0
  1082. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/collage.mjs.map +1 -0
  1083. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/collection-filled.mjs +119 -0
  1084. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/collection-filled.mjs.map +1 -0
  1085. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/collection.mjs +135 -0
  1086. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/collection.mjs.map +1 -0
  1087. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/color-invert-filled.mjs +125 -0
  1088. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/color-invert-filled.mjs.map +1 -0
  1089. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/color-invert.mjs +151 -0
  1090. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/color-invert.mjs.map +1 -0
  1091. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/combination-filled.mjs +119 -0
  1092. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/combination-filled.mjs.map +1 -0
  1093. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/combination.mjs +173 -0
  1094. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/combination.mjs.map +1 -0
  1095. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/command.mjs +127 -0
  1096. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/command.mjs.map +1 -0
  1097. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/compass-1-filled.mjs +125 -0
  1098. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/compass-1-filled.mjs.map +1 -0
  1099. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/compass-1.mjs +141 -0
  1100. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/compass-1.mjs.map +1 -0
  1101. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/compass-filled.mjs +119 -0
  1102. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/compass-filled.mjs.map +1 -0
  1103. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/compass.mjs +151 -0
  1104. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/compass.mjs.map +1 -0
  1105. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-breadcrumb-filled.mjs +119 -0
  1106. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-breadcrumb-filled.mjs.map +1 -0
  1107. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-breadcrumb.mjs +144 -0
  1108. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-breadcrumb.mjs.map +1 -0
  1109. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-checkbox-filled.mjs +125 -0
  1110. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-checkbox-filled.mjs.map +1 -0
  1111. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-checkbox.mjs +144 -0
  1112. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-checkbox.mjs.map +1 -0
  1113. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-divider-horizontal-filled.mjs +119 -0
  1114. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-divider-horizontal-filled.mjs.map +1 -0
  1115. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-divider-horizontal.mjs +166 -0
  1116. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-divider-horizontal.mjs.map +1 -0
  1117. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-divider-vertical-filled.mjs +119 -0
  1118. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-divider-vertical-filled.mjs.map +1 -0
  1119. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-divider-vertical.mjs +166 -0
  1120. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-divider-vertical.mjs.map +1 -0
  1121. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-dropdown-filled.mjs +119 -0
  1122. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-dropdown-filled.mjs.map +1 -0
  1123. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-dropdown.mjs +144 -0
  1124. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-dropdown.mjs.map +1 -0
  1125. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-grid-filled.mjs +119 -0
  1126. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-grid-filled.mjs.map +1 -0
  1127. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-grid.mjs +134 -0
  1128. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-grid.mjs.map +1 -0
  1129. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-input-filled.mjs +119 -0
  1130. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-input-filled.mjs.map +1 -0
  1131. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-input.mjs +135 -0
  1132. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-input.mjs.map +1 -0
  1133. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-layout-filled.mjs +131 -0
  1134. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-layout-filled.mjs.map +1 -0
  1135. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-layout.mjs +142 -0
  1136. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-layout.mjs.map +1 -0
  1137. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-radio.mjs +151 -0
  1138. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-radio.mjs.map +1 -0
  1139. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-space-filled.mjs +125 -0
  1140. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-space-filled.mjs.map +1 -0
  1141. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-space.mjs +157 -0
  1142. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-space.mjs.map +1 -0
  1143. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-steps-filled.mjs +119 -0
  1144. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-steps-filled.mjs.map +1 -0
  1145. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-steps.mjs +151 -0
  1146. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-steps.mjs.map +1 -0
  1147. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-switch-filled.mjs +119 -0
  1148. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-switch-filled.mjs.map +1 -0
  1149. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-switch.mjs +134 -0
  1150. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/component-switch.mjs.map +1 -0
  1151. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/constraint.mjs +128 -0
  1152. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/constraint.mjs.map +1 -0
  1153. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/contrast-1-filled.mjs +119 -0
  1154. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/contrast-1-filled.mjs.map +1 -0
  1155. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/contrast-1.mjs +149 -0
  1156. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/contrast-1.mjs.map +1 -0
  1157. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/contrast-filled.mjs +119 -0
  1158. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/contrast-filled.mjs.map +1 -0
  1159. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/contrast.mjs +149 -0
  1160. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/contrast.mjs.map +1 -0
  1161. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/control-platform-filled.mjs +131 -0
  1162. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/control-platform-filled.mjs.map +1 -0
  1163. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/control-platform.mjs +134 -0
  1164. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/control-platform.mjs.map +1 -0
  1165. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cooperate-filled.mjs +119 -0
  1166. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cooperate-filled.mjs.map +1 -0
  1167. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cooperate.mjs +142 -0
  1168. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cooperate.mjs.map +1 -0
  1169. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/coordinate-system-filled.mjs +119 -0
  1170. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/coordinate-system-filled.mjs.map +1 -0
  1171. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/coordinate-system.mjs +144 -0
  1172. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/coordinate-system.mjs.map +1 -0
  1173. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/copy-filled.mjs +119 -0
  1174. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/copy-filled.mjs.map +1 -0
  1175. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/copy.mjs +144 -0
  1176. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/copy.mjs.map +1 -0
  1177. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/copyright-filled.mjs +119 -0
  1178. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/copyright-filled.mjs.map +1 -0
  1179. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/copyright.mjs +144 -0
  1180. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/copyright.mjs.map +1 -0
  1181. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/corn-filled.mjs +119 -0
  1182. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/corn-filled.mjs.map +1 -0
  1183. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/corn.mjs +150 -0
  1184. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/corn.mjs.map +1 -0
  1185. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/coupon-filled.mjs +119 -0
  1186. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/coupon-filled.mjs.map +1 -0
  1187. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/coupon.mjs +144 -0
  1188. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/coupon.mjs.map +1 -0
  1189. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/course-filled.mjs +119 -0
  1190. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/course-filled.mjs.map +1 -0
  1191. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/course.mjs +149 -0
  1192. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/course.mjs.map +1 -0
  1193. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cpu-filled.mjs +125 -0
  1194. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cpu-filled.mjs.map +1 -0
  1195. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cpu.mjs +152 -0
  1196. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cpu.mjs.map +1 -0
  1197. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/crack-filled.mjs +125 -0
  1198. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/crack-filled.mjs.map +1 -0
  1199. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/crack.mjs +144 -0
  1200. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/crack.mjs.map +1 -0
  1201. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard-add-filled.mjs +131 -0
  1202. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard-add-filled.mjs.map +1 -0
  1203. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard-add.mjs +137 -0
  1204. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard-add.mjs.map +1 -0
  1205. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard-filled.mjs +125 -0
  1206. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard-filled.mjs.map +1 -0
  1207. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard-off-filled.mjs +131 -0
  1208. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard-off-filled.mjs.map +1 -0
  1209. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard-off.mjs +138 -0
  1210. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard-off.mjs.map +1 -0
  1211. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard.mjs +151 -0
  1212. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/creditcard.mjs.map +1 -0
  1213. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/crooked-smile-filled.mjs +119 -0
  1214. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/crooked-smile-filled.mjs.map +1 -0
  1215. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/crooked-smile.mjs +144 -0
  1216. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/crooked-smile.mjs.map +1 -0
  1217. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cry-and-laugh-filled.mjs +119 -0
  1218. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cry-and-laugh-filled.mjs.map +1 -0
  1219. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cry-and-laugh.mjs +151 -0
  1220. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cry-and-laugh.mjs.map +1 -0
  1221. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cry-loudly-filled.mjs +119 -0
  1222. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cry-loudly-filled.mjs.map +1 -0
  1223. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cry-loudly.mjs +144 -0
  1224. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cry-loudly.mjs.map +1 -0
  1225. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/css3-filled.mjs +119 -0
  1226. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/css3-filled.mjs.map +1 -0
  1227. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/css3.mjs +144 -0
  1228. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/css3.mjs.map +1 -0
  1229. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cucumber.mjs +151 -0
  1230. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cucumber.mjs.map +1 -0
  1231. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/currency-exchange.mjs +137 -0
  1232. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/currency-exchange.mjs.map +1 -0
  1233. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cursor-filled.mjs +119 -0
  1234. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cursor-filled.mjs.map +1 -0
  1235. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cursor.mjs +138 -0
  1236. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cursor.mjs.map +1 -0
  1237. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/curtain-filled.mjs +137 -0
  1238. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/curtain-filled.mjs.map +1 -0
  1239. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/curtain.mjs +142 -0
  1240. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/curtain.mjs.map +1 -0
  1241. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/curve.mjs +137 -0
  1242. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/curve.mjs.map +1 -0
  1243. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cut-1.mjs +137 -0
  1244. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cut-1.mjs.map +1 -0
  1245. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cut.mjs +128 -0
  1246. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/cut.mjs.map +1 -0
  1247. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-1-filled.mjs +119 -0
  1248. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-1-filled.mjs.map +1 -0
  1249. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-1.mjs +135 -0
  1250. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-1.mjs.map +1 -0
  1251. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-2-filled.mjs +119 -0
  1252. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-2-filled.mjs.map +1 -0
  1253. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-2.mjs +135 -0
  1254. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-2.mjs.map +1 -0
  1255. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-3-filled.mjs +119 -0
  1256. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-3-filled.mjs.map +1 -0
  1257. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-3.mjs +144 -0
  1258. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-3.mjs.map +1 -0
  1259. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-4-filled.mjs +131 -0
  1260. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-4-filled.mjs.map +1 -0
  1261. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-4.mjs +141 -0
  1262. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-4.mjs.map +1 -0
  1263. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-5-filled.mjs +119 -0
  1264. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-5-filled.mjs.map +1 -0
  1265. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-5.mjs +153 -0
  1266. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-5.mjs.map +1 -0
  1267. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-6-filled.mjs +125 -0
  1268. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-6-filled.mjs.map +1 -0
  1269. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-6.mjs +144 -0
  1270. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-6.mjs.map +1 -0
  1271. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-7-filled.mjs +125 -0
  1272. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-7-filled.mjs.map +1 -0
  1273. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-7.mjs +150 -0
  1274. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-7.mjs.map +1 -0
  1275. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-filled.mjs +119 -0
  1276. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam-filled.mjs.map +1 -0
  1277. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam.mjs +135 -0
  1278. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dam.mjs.map +1 -0
  1279. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dart-board-filled.mjs +125 -0
  1280. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dart-board-filled.mjs.map +1 -0
  1281. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dart-board.mjs +161 -0
  1282. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dart-board.mjs.map +1 -0
  1283. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dashboard-1-filled.mjs +119 -0
  1284. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dashboard-1-filled.mjs.map +1 -0
  1285. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dashboard-1.mjs +199 -0
  1286. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dashboard-1.mjs.map +1 -0
  1287. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dashboard-filled.mjs +119 -0
  1288. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dashboard-filled.mjs.map +1 -0
  1289. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dashboard.mjs +144 -0
  1290. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dashboard.mjs.map +1 -0
  1291. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-base-filled.mjs +131 -0
  1292. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-base-filled.mjs.map +1 -0
  1293. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-base.mjs +141 -0
  1294. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-base.mjs.map +1 -0
  1295. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-checked-filled.mjs +131 -0
  1296. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-checked-filled.mjs.map +1 -0
  1297. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-checked.mjs +145 -0
  1298. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-checked.mjs.map +1 -0
  1299. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-display.mjs +137 -0
  1300. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-display.mjs.map +1 -0
  1301. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-error-filled.mjs +131 -0
  1302. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-error-filled.mjs.map +1 -0
  1303. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-error.mjs +144 -0
  1304. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-error.mjs.map +1 -0
  1305. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-filled.mjs +125 -0
  1306. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-filled.mjs.map +1 -0
  1307. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-search-filled.mjs +131 -0
  1308. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-search-filled.mjs.map +1 -0
  1309. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-search.mjs +151 -0
  1310. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data-search.mjs.map +1 -0
  1311. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data.mjs +134 -0
  1312. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/data.mjs.map +1 -0
  1313. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete-1-filled.mjs +125 -0
  1314. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete-1-filled.mjs.map +1 -0
  1315. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete-1.mjs +144 -0
  1316. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete-1.mjs.map +1 -0
  1317. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete-filled.mjs +125 -0
  1318. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete-filled.mjs.map +1 -0
  1319. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete-time-filled.mjs +131 -0
  1320. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete-time-filled.mjs.map +1 -0
  1321. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete-time.mjs +144 -0
  1322. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete-time.mjs.map +1 -0
  1323. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete.mjs +144 -0
  1324. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delete.mjs.map +1 -0
  1325. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delta-filled.mjs +119 -0
  1326. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delta-filled.mjs.map +1 -0
  1327. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delta.mjs +128 -0
  1328. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/delta.mjs.map +1 -0
  1329. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/depressed-filled.mjs +119 -0
  1330. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/depressed-filled.mjs.map +1 -0
  1331. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/depressed.mjs +144 -0
  1332. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/depressed.mjs.map +1 -0
  1333. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/desktop-1-filled.mjs +125 -0
  1334. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/desktop-1-filled.mjs.map +1 -0
  1335. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/desktop-1.mjs +142 -0
  1336. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/desktop-1.mjs.map +1 -0
  1337. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/desktop-filled.mjs +119 -0
  1338. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/desktop-filled.mjs.map +1 -0
  1339. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/desktop.mjs +135 -0
  1340. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/desktop.mjs.map +1 -0
  1341. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/despise-filled.mjs +119 -0
  1342. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/despise-filled.mjs.map +1 -0
  1343. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/despise.mjs +144 -0
  1344. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/despise.mjs.map +1 -0
  1345. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/device-filled.mjs +131 -0
  1346. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/device-filled.mjs.map +1 -0
  1347. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/device.mjs +157 -0
  1348. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/device.mjs.map +1 -0
  1349. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/discount-filled.mjs +125 -0
  1350. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/discount-filled.mjs.map +1 -0
  1351. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/discount.mjs +149 -0
  1352. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/discount.mjs.map +1 -0
  1353. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dissatisfaction-filled.mjs +119 -0
  1354. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dissatisfaction-filled.mjs.map +1 -0
  1355. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dissatisfaction.mjs +144 -0
  1356. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dissatisfaction.mjs.map +1 -0
  1357. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/divide.mjs +128 -0
  1358. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/divide.mjs.map +1 -0
  1359. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dividers-1.mjs +135 -0
  1360. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dividers-1.mjs.map +1 -0
  1361. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dividers.mjs +135 -0
  1362. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dividers.mjs.map +1 -0
  1363. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/doge-filled.mjs +125 -0
  1364. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/doge-filled.mjs.map +1 -0
  1365. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/doge.mjs +151 -0
  1366. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/doge.mjs.map +1 -0
  1367. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/double-storey-filled.mjs +131 -0
  1368. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/double-storey-filled.mjs.map +1 -0
  1369. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/double-storey.mjs +164 -0
  1370. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/double-storey.mjs.map +1 -0
  1371. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/download-1.mjs +144 -0
  1372. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/download-1.mjs.map +1 -0
  1373. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/download-2-filled.mjs +125 -0
  1374. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/download-2-filled.mjs.map +1 -0
  1375. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/download-2.mjs +144 -0
  1376. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/download-2.mjs.map +1 -0
  1377. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/download.mjs +137 -0
  1378. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/download.mjs.map +1 -0
  1379. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/downscale.mjs +137 -0
  1380. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/downscale.mjs.map +1 -0
  1381. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drag-drop.mjs +120 -0
  1382. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drag-drop.mjs.map +1 -0
  1383. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drag-move.mjs +129 -0
  1384. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drag-move.mjs.map +1 -0
  1385. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drink-filled.mjs +119 -0
  1386. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drink-filled.mjs.map +1 -0
  1387. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drink.mjs +151 -0
  1388. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drink.mjs.map +1 -0
  1389. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drumstick-filled.mjs +119 -0
  1390. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drumstick-filled.mjs.map +1 -0
  1391. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drumstick.mjs +151 -0
  1392. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/drumstick.mjs.map +1 -0
  1393. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dv-filled.mjs +119 -0
  1394. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dv-filled.mjs.map +1 -0
  1395. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dv.mjs +142 -0
  1396. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dv.mjs.map +1 -0
  1397. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dvd-filled.mjs +125 -0
  1398. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dvd-filled.mjs.map +1 -0
  1399. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dvd.mjs +161 -0
  1400. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/dvd.mjs.map +1 -0
  1401. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/earphone-filled.mjs +119 -0
  1402. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/earphone-filled.mjs.map +1 -0
  1403. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/earphone.mjs +146 -0
  1404. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/earphone.mjs.map +1 -0
  1405. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/earth-filled.mjs +131 -0
  1406. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/earth-filled.mjs.map +1 -0
  1407. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/earth.mjs +141 -0
  1408. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/earth.mjs.map +1 -0
  1409. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-1-filled.mjs +125 -0
  1410. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-1-filled.mjs.map +1 -0
  1411. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-1.mjs +141 -0
  1412. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-1.mjs.map +1 -0
  1413. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-2-filled.mjs +131 -0
  1414. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-2-filled.mjs.map +1 -0
  1415. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-2.mjs +151 -0
  1416. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-2.mjs.map +1 -0
  1417. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-filled.mjs +125 -0
  1418. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-filled.mjs.map +1 -0
  1419. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-off-filled.mjs +119 -0
  1420. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-off-filled.mjs.map +1 -0
  1421. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-off.mjs +146 -0
  1422. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit-off.mjs.map +1 -0
  1423. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit.mjs +144 -0
  1424. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/edit.mjs.map +1 -0
  1425. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/education-filled.mjs +125 -0
  1426. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/education-filled.mjs.map +1 -0
  1427. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/education.mjs +142 -0
  1428. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/education.mjs.map +1 -0
  1429. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/eggplant-filled.mjs +119 -0
  1430. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/eggplant-filled.mjs.map +1 -0
  1431. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/eggplant.mjs +151 -0
  1432. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/eggplant.mjs.map +1 -0
  1433. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ellipsis.mjs +149 -0
  1434. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ellipsis.mjs.map +1 -0
  1435. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/emo-emotional-filled.mjs +119 -0
  1436. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/emo-emotional-filled.mjs.map +1 -0
  1437. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/emo-emotional.mjs +144 -0
  1438. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/emo-emotional.mjs.map +1 -0
  1439. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/enter.mjs +128 -0
  1440. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/enter.mjs.map +1 -0
  1441. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/equal.mjs +128 -0
  1442. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/equal.mjs.map +1 -0
  1443. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/error-circle-filled.mjs +119 -0
  1444. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/error-circle-filled.mjs.map +1 -0
  1445. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/error-circle.mjs +144 -0
  1446. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/error-circle.mjs.map +1 -0
  1447. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/error-triangle-filled.mjs +119 -0
  1448. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/error-triangle-filled.mjs.map +1 -0
  1449. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/error-triangle.mjs +144 -0
  1450. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/error-triangle.mjs.map +1 -0
  1451. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/error.mjs +128 -0
  1452. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/error.mjs.map +1 -0
  1453. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/excited-1-filled.mjs +119 -0
  1454. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/excited-1-filled.mjs.map +1 -0
  1455. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/excited-1.mjs +144 -0
  1456. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/excited-1.mjs.map +1 -0
  1457. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/excited-filled.mjs +125 -0
  1458. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/excited-filled.mjs.map +1 -0
  1459. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/excited.mjs +151 -0
  1460. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/excited.mjs.map +1 -0
  1461. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-down-filled.mjs +125 -0
  1462. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-down-filled.mjs.map +1 -0
  1463. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-down.mjs +131 -0
  1464. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-down.mjs.map +1 -0
  1465. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-horizontal.mjs +128 -0
  1466. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-horizontal.mjs.map +1 -0
  1467. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-up-filled.mjs +125 -0
  1468. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-up-filled.mjs.map +1 -0
  1469. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-up.mjs +131 -0
  1470. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-up.mjs.map +1 -0
  1471. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-vertical.mjs +128 -0
  1472. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/expand-vertical.mjs.map +1 -0
  1473. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/explore-filled.mjs +119 -0
  1474. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/explore-filled.mjs.map +1 -0
  1475. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/explore-off-filled.mjs +125 -0
  1476. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/explore-off-filled.mjs.map +1 -0
  1477. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/explore-off.mjs +137 -0
  1478. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/explore-off.mjs.map +1 -0
  1479. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/explore.mjs +151 -0
  1480. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/explore.mjs.map +1 -0
  1481. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/exposure-filled.mjs +119 -0
  1482. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/exposure-filled.mjs.map +1 -0
  1483. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/exposure.mjs +147 -0
  1484. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/exposure.mjs.map +1 -0
  1485. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/extension-filled.mjs +119 -0
  1486. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/extension-filled.mjs.map +1 -0
  1487. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/extension-off-filled.mjs +125 -0
  1488. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/extension-off-filled.mjs.map +1 -0
  1489. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/extension-off.mjs +138 -0
  1490. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/extension-off.mjs.map +1 -0
  1491. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/extension.mjs +139 -0
  1492. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/extension.mjs.map +1 -0
  1493. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/face-retouching-filled.mjs +131 -0
  1494. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/face-retouching-filled.mjs.map +1 -0
  1495. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/face-retouching.mjs +148 -0
  1496. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/face-retouching.mjs.map +1 -0
  1497. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fact-check-filled.mjs +119 -0
  1498. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fact-check-filled.mjs.map +1 -0
  1499. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fact-check.mjs +144 -0
  1500. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fact-check.mjs.map +1 -0
  1501. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fahrenheit-scale.mjs +137 -0
  1502. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fahrenheit-scale.mjs.map +1 -0
  1503. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/feel-at-ease-filled.mjs +119 -0
  1504. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/feel-at-ease-filled.mjs.map +1 -0
  1505. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/feel-at-ease.mjs +144 -0
  1506. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/feel-at-ease.mjs.map +1 -0
  1507. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ferocious-filled.mjs +119 -0
  1508. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ferocious-filled.mjs.map +1 -0
  1509. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ferocious.mjs +151 -0
  1510. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ferocious.mjs.map +1 -0
  1511. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ferris-wheel-filled.mjs +119 -0
  1512. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ferris-wheel-filled.mjs.map +1 -0
  1513. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ferris-wheel.mjs +128 -0
  1514. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ferris-wheel.mjs.map +1 -0
  1515. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-1-filled.mjs +119 -0
  1516. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-1-filled.mjs.map +1 -0
  1517. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-1.mjs +143 -0
  1518. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-1.mjs.map +1 -0
  1519. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-add-1-filled.mjs +119 -0
  1520. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-add-1-filled.mjs.map +1 -0
  1521. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-add-1.mjs +143 -0
  1522. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-add-1.mjs.map +1 -0
  1523. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-add-filled.mjs +125 -0
  1524. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-add-filled.mjs.map +1 -0
  1525. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-add.mjs +137 -0
  1526. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-add.mjs.map +1 -0
  1527. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-attachment-filled.mjs +125 -0
  1528. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-attachment-filled.mjs.map +1 -0
  1529. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-attachment.mjs +137 -0
  1530. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-attachment.mjs.map +1 -0
  1531. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-blocked-filled.mjs +125 -0
  1532. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-blocked-filled.mjs.map +1 -0
  1533. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-blocked.mjs +144 -0
  1534. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-blocked.mjs.map +1 -0
  1535. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-code-1-filled.mjs +119 -0
  1536. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-code-1-filled.mjs.map +1 -0
  1537. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-code-1.mjs +143 -0
  1538. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-code-1.mjs.map +1 -0
  1539. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-code-filled.mjs +125 -0
  1540. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-code-filled.mjs.map +1 -0
  1541. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-code.mjs +137 -0
  1542. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-code.mjs.map +1 -0
  1543. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-copy-filled.mjs +125 -0
  1544. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-copy-filled.mjs.map +1 -0
  1545. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-copy.mjs +143 -0
  1546. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-copy.mjs.map +1 -0
  1547. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-download-filled.mjs +125 -0
  1548. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-download-filled.mjs.map +1 -0
  1549. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-download.mjs +137 -0
  1550. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-download.mjs.map +1 -0
  1551. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-excel-filled.mjs +119 -0
  1552. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-excel-filled.mjs.map +1 -0
  1553. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-excel.mjs +143 -0
  1554. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-excel.mjs.map +1 -0
  1555. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-export-filled.mjs +125 -0
  1556. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-export-filled.mjs.map +1 -0
  1557. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-export.mjs +137 -0
  1558. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-export.mjs.map +1 -0
  1559. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-filled.mjs +119 -0
  1560. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-filled.mjs.map +1 -0
  1561. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-icon-filled.mjs +125 -0
  1562. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-icon-filled.mjs.map +1 -0
  1563. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-icon.mjs +137 -0
  1564. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-icon.mjs.map +1 -0
  1565. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-image-filled.mjs +119 -0
  1566. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-image-filled.mjs.map +1 -0
  1567. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-image.mjs +143 -0
  1568. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-image.mjs.map +1 -0
  1569. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-import-filled.mjs +125 -0
  1570. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-import-filled.mjs.map +1 -0
  1571. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-import.mjs +137 -0
  1572. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-import.mjs.map +1 -0
  1573. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-locked-filled.mjs +125 -0
  1574. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-locked-filled.mjs.map +1 -0
  1575. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-locked.mjs +144 -0
  1576. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-locked.mjs.map +1 -0
  1577. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-minus-filled.mjs +119 -0
  1578. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-minus-filled.mjs.map +1 -0
  1579. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-minus.mjs +143 -0
  1580. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-minus.mjs.map +1 -0
  1581. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-music-filled.mjs +119 -0
  1582. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-music-filled.mjs.map +1 -0
  1583. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-music.mjs +142 -0
  1584. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-music.mjs.map +1 -0
  1585. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-onenote-filled.mjs +119 -0
  1586. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-onenote-filled.mjs.map +1 -0
  1587. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-onenote.mjs +143 -0
  1588. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-onenote.mjs.map +1 -0
  1589. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-outlook-filled.mjs +125 -0
  1590. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-outlook-filled.mjs.map +1 -0
  1591. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-outlook.mjs +143 -0
  1592. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-outlook.mjs.map +1 -0
  1593. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-paste-filled.mjs +125 -0
  1594. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-paste-filled.mjs.map +1 -0
  1595. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-paste.mjs +143 -0
  1596. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-paste.mjs.map +1 -0
  1597. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-pdf-filled.mjs +137 -0
  1598. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-pdf-filled.mjs.map +1 -0
  1599. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-pdf.mjs +137 -0
  1600. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-pdf.mjs.map +1 -0
  1601. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-powerpoint-filled.mjs +125 -0
  1602. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-powerpoint-filled.mjs.map +1 -0
  1603. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-powerpoint.mjs +143 -0
  1604. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-powerpoint.mjs.map +1 -0
  1605. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-restore-filled.mjs +125 -0
  1606. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-restore-filled.mjs.map +1 -0
  1607. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-restore.mjs +137 -0
  1608. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-restore.mjs.map +1 -0
  1609. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-safety-filled.mjs +125 -0
  1610. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-safety-filled.mjs.map +1 -0
  1611. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-safety.mjs +143 -0
  1612. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-safety.mjs.map +1 -0
  1613. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-search-filled.mjs +125 -0
  1614. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-search-filled.mjs.map +1 -0
  1615. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-search.mjs +144 -0
  1616. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-search.mjs.map +1 -0
  1617. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-setting-filled.mjs +125 -0
  1618. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-setting-filled.mjs.map +1 -0
  1619. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-setting.mjs +144 -0
  1620. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-setting.mjs.map +1 -0
  1621. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-teams-filled.mjs +119 -0
  1622. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-teams-filled.mjs.map +1 -0
  1623. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-teams.mjs +143 -0
  1624. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-teams.mjs.map +1 -0
  1625. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-transmit-double-filled.mjs +125 -0
  1626. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-transmit-double-filled.mjs.map +1 -0
  1627. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-transmit-double.mjs +154 -0
  1628. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-transmit-double.mjs.map +1 -0
  1629. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-transmit-filled.mjs +119 -0
  1630. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-transmit-filled.mjs.map +1 -0
  1631. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-transmit.mjs +143 -0
  1632. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-transmit.mjs.map +1 -0
  1633. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-unknown-filled.mjs +125 -0
  1634. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-unknown-filled.mjs.map +1 -0
  1635. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-unknown.mjs +137 -0
  1636. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-unknown.mjs.map +1 -0
  1637. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-unlocked-filled.mjs +125 -0
  1638. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-unlocked-filled.mjs.map +1 -0
  1639. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-unlocked.mjs +144 -0
  1640. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-unlocked.mjs.map +1 -0
  1641. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-word-filled.mjs +119 -0
  1642. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-word-filled.mjs.map +1 -0
  1643. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-word.mjs +143 -0
  1644. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-word.mjs.map +1 -0
  1645. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-zip-filled.mjs +119 -0
  1646. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-zip-filled.mjs.map +1 -0
  1647. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-zip.mjs +182 -0
  1648. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file-zip.mjs.map +1 -0
  1649. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file.mjs +134 -0
  1650. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/file.mjs.map +1 -0
  1651. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fill-color-1-filled.mjs +119 -0
  1652. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fill-color-1-filled.mjs.map +1 -0
  1653. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fill-color-1.mjs +144 -0
  1654. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fill-color-1.mjs.map +1 -0
  1655. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fill-color-filled.mjs +119 -0
  1656. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fill-color-filled.mjs.map +1 -0
  1657. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fill-color.mjs +144 -0
  1658. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fill-color.mjs.map +1 -0
  1659. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/film-1-filled.mjs +119 -0
  1660. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/film-1-filled.mjs.map +1 -0
  1661. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/film-1.mjs +134 -0
  1662. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/film-1.mjs.map +1 -0
  1663. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/film-filled.mjs +119 -0
  1664. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/film-filled.mjs.map +1 -0
  1665. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/film.mjs +203 -0
  1666. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/film.mjs.map +1 -0
  1667. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-1-filled.mjs +119 -0
  1668. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-1-filled.mjs.map +1 -0
  1669. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-1.mjs +141 -0
  1670. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-1.mjs.map +1 -0
  1671. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-2-filled.mjs +137 -0
  1672. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-2-filled.mjs.map +1 -0
  1673. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-2.mjs +162 -0
  1674. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-2.mjs.map +1 -0
  1675. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-3-filled.mjs +119 -0
  1676. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-3-filled.mjs.map +1 -0
  1677. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-3.mjs +154 -0
  1678. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-3.mjs.map +1 -0
  1679. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-clear-filled.mjs +125 -0
  1680. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-clear-filled.mjs.map +1 -0
  1681. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-clear.mjs +148 -0
  1682. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-clear.mjs.map +1 -0
  1683. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-filled.mjs +119 -0
  1684. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-filled.mjs.map +1 -0
  1685. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-off-filled.mjs +125 -0
  1686. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-off-filled.mjs.map +1 -0
  1687. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-off.mjs +137 -0
  1688. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-off.mjs.map +1 -0
  1689. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-sort-filled.mjs +131 -0
  1690. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-sort-filled.mjs.map +1 -0
  1691. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-sort.mjs +148 -0
  1692. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter-sort.mjs.map +1 -0
  1693. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter.mjs +139 -0
  1694. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/filter.mjs.map +1 -0
  1695. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fingerprint-1.mjs +128 -0
  1696. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fingerprint-1.mjs.map +1 -0
  1697. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fingerprint-2.mjs +128 -0
  1698. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fingerprint-2.mjs.map +1 -0
  1699. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fingerprint-3.mjs +128 -0
  1700. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fingerprint-3.mjs.map +1 -0
  1701. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fingerprint.mjs +128 -0
  1702. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fingerprint.mjs.map +1 -0
  1703. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fish-filled.mjs +119 -0
  1704. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fish-filled.mjs.map +1 -0
  1705. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fish.mjs +144 -0
  1706. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fish.mjs.map +1 -0
  1707. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-1-filled.mjs +125 -0
  1708. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-1-filled.mjs.map +1 -0
  1709. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-1.mjs +142 -0
  1710. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-1.mjs.map +1 -0
  1711. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-2-filled.mjs +119 -0
  1712. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-2-filled.mjs.map +1 -0
  1713. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-2.mjs +142 -0
  1714. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-2.mjs.map +1 -0
  1715. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-3-filled.mjs +119 -0
  1716. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-3-filled.mjs.map +1 -0
  1717. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-3.mjs +135 -0
  1718. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-3.mjs.map +1 -0
  1719. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-4-filled.mjs +119 -0
  1720. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-4-filled.mjs.map +1 -0
  1721. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-4.mjs +135 -0
  1722. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-4.mjs.map +1 -0
  1723. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-filled.mjs +119 -0
  1724. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag-filled.mjs.map +1 -0
  1725. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag.mjs +135 -0
  1726. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flag.mjs.map +1 -0
  1727. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flashlight-filled.mjs +125 -0
  1728. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flashlight-filled.mjs.map +1 -0
  1729. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flashlight.mjs +151 -0
  1730. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flashlight.mjs.map +1 -0
  1731. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flight-landing-filled.mjs +119 -0
  1732. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flight-landing-filled.mjs.map +1 -0
  1733. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flight-landing.mjs +144 -0
  1734. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flight-landing.mjs.map +1 -0
  1735. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flight-takeoff-filled.mjs +119 -0
  1736. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flight-takeoff-filled.mjs.map +1 -0
  1737. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flight-takeoff.mjs +144 -0
  1738. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flight-takeoff.mjs.map +1 -0
  1739. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-smiling-face-filled.mjs +119 -0
  1740. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-smiling-face-filled.mjs.map +1 -0
  1741. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-smiling-face.mjs +144 -0
  1742. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-smiling-face.mjs.map +1 -0
  1743. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-to-back-filled.mjs +173 -0
  1744. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-to-back-filled.mjs.map +1 -0
  1745. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-to-back.mjs +137 -0
  1746. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-to-back.mjs.map +1 -0
  1747. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-to-front-filled.mjs +155 -0
  1748. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-to-front-filled.mjs.map +1 -0
  1749. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-to-front.mjs +139 -0
  1750. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/flip-to-front.mjs.map +1 -0
  1751. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/focus-filled.mjs +119 -0
  1752. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/focus-filled.mjs.map +1 -0
  1753. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/focus.mjs +144 -0
  1754. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/focus.mjs.map +1 -0
  1755. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog-filled.mjs +119 -0
  1756. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog-filled.mjs.map +1 -0
  1757. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog-night-filled.mjs +119 -0
  1758. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog-night-filled.mjs.map +1 -0
  1759. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog-night.mjs +137 -0
  1760. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog-night.mjs.map +1 -0
  1761. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog-sunny-filled.mjs +119 -0
  1762. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog-sunny-filled.mjs.map +1 -0
  1763. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog-sunny.mjs +137 -0
  1764. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog-sunny.mjs.map +1 -0
  1765. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog.mjs +137 -0
  1766. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fog.mjs.map +1 -0
  1767. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-1-filled.mjs +125 -0
  1768. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-1-filled.mjs.map +1 -0
  1769. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-1.mjs +141 -0
  1770. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-1.mjs.map +1 -0
  1771. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-add-1-filled.mjs +119 -0
  1772. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-add-1-filled.mjs.map +1 -0
  1773. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-add-1.mjs +143 -0
  1774. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-add-1.mjs.map +1 -0
  1775. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-add-filled.mjs +125 -0
  1776. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-add-filled.mjs.map +1 -0
  1777. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-add.mjs +137 -0
  1778. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-add.mjs.map +1 -0
  1779. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-blocked-filled.mjs +125 -0
  1780. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-blocked-filled.mjs.map +1 -0
  1781. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-blocked.mjs +144 -0
  1782. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-blocked.mjs.map +1 -0
  1783. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-details-filled.mjs +119 -0
  1784. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-details-filled.mjs.map +1 -0
  1785. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-details.mjs +161 -0
  1786. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-details.mjs.map +1 -0
  1787. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-export-filled.mjs +125 -0
  1788. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-export-filled.mjs.map +1 -0
  1789. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-export.mjs +137 -0
  1790. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-export.mjs.map +1 -0
  1791. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-filled.mjs +119 -0
  1792. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-filled.mjs.map +1 -0
  1793. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-import-filled.mjs +125 -0
  1794. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-import-filled.mjs.map +1 -0
  1795. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-import.mjs +137 -0
  1796. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-import.mjs.map +1 -0
  1797. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-locked-filled.mjs +125 -0
  1798. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-locked-filled.mjs.map +1 -0
  1799. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-locked.mjs +144 -0
  1800. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-locked.mjs.map +1 -0
  1801. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-minus-filled.mjs +119 -0
  1802. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-minus-filled.mjs.map +1 -0
  1803. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-minus.mjs +143 -0
  1804. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-minus.mjs.map +1 -0
  1805. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-move-filled.mjs +119 -0
  1806. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-move-filled.mjs.map +1 -0
  1807. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-move.mjs +144 -0
  1808. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-move.mjs.map +1 -0
  1809. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-off-filled.mjs +125 -0
  1810. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-off-filled.mjs.map +1 -0
  1811. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-off.mjs +137 -0
  1812. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-off.mjs.map +1 -0
  1813. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-open-1-filled.mjs +119 -0
  1814. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-open-1-filled.mjs.map +1 -0
  1815. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-open-1.mjs +142 -0
  1816. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-open-1.mjs.map +1 -0
  1817. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-open-filled.mjs +119 -0
  1818. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-open-filled.mjs.map +1 -0
  1819. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-open.mjs +144 -0
  1820. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-open.mjs.map +1 -0
  1821. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-search-filled.mjs +125 -0
  1822. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-search-filled.mjs.map +1 -0
  1823. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-search.mjs +144 -0
  1824. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-search.mjs.map +1 -0
  1825. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-setting-filled.mjs +125 -0
  1826. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-setting-filled.mjs.map +1 -0
  1827. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-setting.mjs +144 -0
  1828. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-setting.mjs.map +1 -0
  1829. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-shared-filled.mjs +119 -0
  1830. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-shared-filled.mjs.map +1 -0
  1831. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-shared.mjs +144 -0
  1832. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-shared.mjs.map +1 -0
  1833. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-unlocked-filled.mjs +125 -0
  1834. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-unlocked-filled.mjs.map +1 -0
  1835. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-unlocked.mjs +144 -0
  1836. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-unlocked.mjs.map +1 -0
  1837. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-zip-filled.mjs +119 -0
  1838. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-zip-filled.mjs.map +1 -0
  1839. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-zip.mjs +182 -0
  1840. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder-zip.mjs.map +1 -0
  1841. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder.mjs +134 -0
  1842. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/folder.mjs.map +1 -0
  1843. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/forest-filled.mjs +119 -0
  1844. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/forest-filled.mjs.map +1 -0
  1845. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/forest.mjs +142 -0
  1846. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/forest.mjs.map +1 -0
  1847. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fork-filled.mjs +119 -0
  1848. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fork-filled.mjs.map +1 -0
  1849. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fork.mjs +152 -0
  1850. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fork.mjs.map +1 -0
  1851. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/form-filled.mjs +125 -0
  1852. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/form-filled.mjs.map +1 -0
  1853. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/form.mjs +151 -0
  1854. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/form.mjs.map +1 -0
  1855. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-horizontal-align-bottom.mjs +128 -0
  1856. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-horizontal-align-bottom.mjs.map +1 -0
  1857. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-horizontal-align-center.mjs +128 -0
  1858. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-horizontal-align-center.mjs.map +1 -0
  1859. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-horizontal-align-top.mjs +128 -0
  1860. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-horizontal-align-top.mjs.map +1 -0
  1861. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-vertical-align-center.mjs +128 -0
  1862. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-vertical-align-center.mjs.map +1 -0
  1863. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-vertical-align-left.mjs +128 -0
  1864. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-vertical-align-left.mjs.map +1 -0
  1865. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-vertical-align-right.mjs +128 -0
  1866. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/format-vertical-align-right.mjs.map +1 -0
  1867. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/forward-filled.mjs +119 -0
  1868. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/forward-filled.mjs.map +1 -0
  1869. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/forward.mjs +159 -0
  1870. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/forward.mjs.map +1 -0
  1871. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/frame-1-filled.mjs +131 -0
  1872. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/frame-1-filled.mjs.map +1 -0
  1873. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/frame-1.mjs +135 -0
  1874. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/frame-1.mjs.map +1 -0
  1875. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/frame-filled.mjs +137 -0
  1876. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/frame-filled.mjs.map +1 -0
  1877. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/frame.mjs +135 -0
  1878. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/frame.mjs.map +1 -0
  1879. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fries-filled.mjs +125 -0
  1880. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fries-filled.mjs.map +1 -0
  1881. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fries.mjs +149 -0
  1882. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fries.mjs.map +1 -0
  1883. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fullscreen-1.mjs +128 -0
  1884. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fullscreen-1.mjs.map +1 -0
  1885. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fullscreen-2.mjs +128 -0
  1886. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fullscreen-2.mjs.map +1 -0
  1887. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fullscreen-exit-1.mjs +128 -0
  1888. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fullscreen-exit-1.mjs.map +1 -0
  1889. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fullscreen-exit.mjs +128 -0
  1890. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fullscreen-exit.mjs.map +1 -0
  1891. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fullscreen.mjs +128 -0
  1892. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/fullscreen.mjs.map +1 -0
  1893. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/function-curve.mjs +137 -0
  1894. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/function-curve.mjs.map +1 -0
  1895. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/functions-1.mjs +137 -0
  1896. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/functions-1.mjs.map +1 -0
  1897. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/functions.mjs +128 -0
  1898. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/functions.mjs.map +1 -0
  1899. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gamepad-1-filled.mjs +119 -0
  1900. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gamepad-1-filled.mjs.map +1 -0
  1901. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gamepad-1.mjs +144 -0
  1902. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gamepad-1.mjs.map +1 -0
  1903. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gamepad-filled.mjs +119 -0
  1904. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gamepad-filled.mjs.map +1 -0
  1905. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gamepad.mjs +144 -0
  1906. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gamepad.mjs.map +1 -0
  1907. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gamma.mjs +128 -0
  1908. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gamma.mjs.map +1 -0
  1909. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/garlic-filled.mjs +125 -0
  1910. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/garlic-filled.mjs.map +1 -0
  1911. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/garlic.mjs +135 -0
  1912. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/garlic.mjs.map +1 -0
  1913. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gender-female.mjs +135 -0
  1914. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gender-female.mjs.map +1 -0
  1915. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gender-male.mjs +135 -0
  1916. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gender-male.mjs.map +1 -0
  1917. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-applause-filled.mjs +119 -0
  1918. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-applause-filled.mjs.map +1 -0
  1919. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-applause.mjs +173 -0
  1920. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-applause.mjs.map +1 -0
  1921. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-click-filled.mjs +137 -0
  1922. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-click-filled.mjs.map +1 -0
  1923. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-click.mjs +144 -0
  1924. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-click.mjs.map +1 -0
  1925. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-down-filled.mjs +119 -0
  1926. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-down-filled.mjs.map +1 -0
  1927. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-down.mjs +135 -0
  1928. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-down.mjs.map +1 -0
  1929. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-expansion-filled.mjs +125 -0
  1930. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-expansion-filled.mjs.map +1 -0
  1931. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-expansion.mjs +144 -0
  1932. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-expansion.mjs.map +1 -0
  1933. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-left-filled.mjs +119 -0
  1934. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-left-filled.mjs.map +1 -0
  1935. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-left-slip-filled.mjs +125 -0
  1936. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-left-slip-filled.mjs.map +1 -0
  1937. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-left-slip.mjs +144 -0
  1938. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-left-slip.mjs.map +1 -0
  1939. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-left.mjs +135 -0
  1940. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-left.mjs.map +1 -0
  1941. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-open-filled.mjs +119 -0
  1942. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-open-filled.mjs.map +1 -0
  1943. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-open.mjs +182 -0
  1944. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-open.mjs.map +1 -0
  1945. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-pray-filled.mjs +119 -0
  1946. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-pray-filled.mjs.map +1 -0
  1947. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-pray.mjs +153 -0
  1948. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-pray.mjs.map +1 -0
  1949. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-press-filled.mjs +125 -0
  1950. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-press-filled.mjs.map +1 -0
  1951. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-press.mjs +151 -0
  1952. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-press.mjs.map +1 -0
  1953. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-ranslation-filled.mjs +119 -0
  1954. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-ranslation-filled.mjs.map +1 -0
  1955. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-ranslation.mjs +135 -0
  1956. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-ranslation.mjs.map +1 -0
  1957. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-right-filled.mjs +119 -0
  1958. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-right-filled.mjs.map +1 -0
  1959. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-right-slip-filled.mjs +125 -0
  1960. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-right-slip-filled.mjs.map +1 -0
  1961. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-right-slip.mjs +144 -0
  1962. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-right-slip.mjs.map +1 -0
  1963. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-right.mjs +135 -0
  1964. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-right.mjs.map +1 -0
  1965. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-slide-left-and-right-filled.mjs +125 -0
  1966. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-slide-left-and-right-filled.mjs.map +1 -0
  1967. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-slide-left-and-right.mjs +144 -0
  1968. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-slide-left-and-right.mjs.map +1 -0
  1969. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-slide-up-filled.mjs +125 -0
  1970. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-slide-up-filled.mjs.map +1 -0
  1971. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-slide-up.mjs +144 -0
  1972. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-slide-up.mjs.map +1 -0
  1973. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-typing-filled.mjs +149 -0
  1974. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-typing-filled.mjs.map +1 -0
  1975. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-typing.mjs +217 -0
  1976. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-typing.mjs.map +1 -0
  1977. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-up-and-down-filled.mjs +125 -0
  1978. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-up-and-down-filled.mjs.map +1 -0
  1979. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-up-and-down.mjs +144 -0
  1980. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-up-and-down.mjs.map +1 -0
  1981. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-up-filled.mjs +119 -0
  1982. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-up-filled.mjs.map +1 -0
  1983. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-up.mjs +135 -0
  1984. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-up.mjs.map +1 -0
  1985. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-wipe-down-filled.mjs +125 -0
  1986. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-wipe-down-filled.mjs.map +1 -0
  1987. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-wipe-down.mjs +144 -0
  1988. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gesture-wipe-down.mjs.map +1 -0
  1989. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gift-filled.mjs +119 -0
  1990. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gift-filled.mjs.map +1 -0
  1991. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gift.mjs +151 -0
  1992. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gift.mjs.map +1 -0
  1993. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/giggle-filled.mjs +119 -0
  1994. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/giggle-filled.mjs.map +1 -0
  1995. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/giggle.mjs +151 -0
  1996. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/giggle.mjs.map +1 -0
  1997. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-branch-filled.mjs +119 -0
  1998. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-branch-filled.mjs.map +1 -0
  1999. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-branch.mjs +152 -0
  2000. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-branch.mjs.map +1 -0
  2001. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-commit-filled.mjs +119 -0
  2002. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-commit-filled.mjs.map +1 -0
  2003. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-commit.mjs +135 -0
  2004. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-commit.mjs.map +1 -0
  2005. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-merge-filled.mjs +119 -0
  2006. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-merge-filled.mjs.map +1 -0
  2007. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-merge.mjs +152 -0
  2008. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-merge.mjs.map +1 -0
  2009. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-pull-request-filled.mjs +119 -0
  2010. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-pull-request-filled.mjs.map +1 -0
  2011. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-pull-request.mjs +161 -0
  2012. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-pull-request.mjs.map +1 -0
  2013. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository-commits-filled.mjs +125 -0
  2014. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository-commits-filled.mjs.map +1 -0
  2015. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository-commits.mjs +137 -0
  2016. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository-commits.mjs.map +1 -0
  2017. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository-filled.mjs +119 -0
  2018. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository-filled.mjs.map +1 -0
  2019. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository-private-filled.mjs +119 -0
  2020. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository-private-filled.mjs.map +1 -0
  2021. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository-private.mjs +155 -0
  2022. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository-private.mjs.map +1 -0
  2023. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository.mjs +149 -0
  2024. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/git-repository.mjs.map +1 -0
  2025. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gps-filled.mjs +119 -0
  2026. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gps-filled.mjs.map +1 -0
  2027. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gps.mjs +135 -0
  2028. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/gps.mjs.map +1 -0
  2029. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grape-filled.mjs +161 -0
  2030. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grape-filled.mjs.map +1 -0
  2031. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grape.mjs +135 -0
  2032. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grape.mjs.map +1 -0
  2033. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/greater-than-or-equal.mjs +137 -0
  2034. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/greater-than-or-equal.mjs.map +1 -0
  2035. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/greater-than.mjs +128 -0
  2036. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/greater-than.mjs.map +1 -0
  2037. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/green-onion.mjs +128 -0
  2038. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/green-onion.mjs.map +1 -0
  2039. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grid-add-filled.mjs +137 -0
  2040. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grid-add-filled.mjs.map +1 -0
  2041. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grid-add.mjs +182 -0
  2042. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grid-add.mjs.map +1 -0
  2043. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grid-view-filled.mjs +119 -0
  2044. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grid-view-filled.mjs.map +1 -0
  2045. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grid-view.mjs +187 -0
  2046. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/grid-view.mjs.map +1 -0
  2047. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/guitar-filled.mjs +125 -0
  2048. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/guitar-filled.mjs.map +1 -0
  2049. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/guitar.mjs +151 -0
  2050. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/guitar.mjs.map +1 -0
  2051. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hamburger-filled.mjs +119 -0
  2052. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hamburger-filled.mjs.map +1 -0
  2053. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hamburger.mjs +168 -0
  2054. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hamburger.mjs.map +1 -0
  2055. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/happy-filled.mjs +119 -0
  2056. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/happy-filled.mjs.map +1 -0
  2057. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/happy.mjs +151 -0
  2058. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/happy.mjs.map +1 -0
  2059. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hard-disk-storage-filled.mjs +125 -0
  2060. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hard-disk-storage-filled.mjs.map +1 -0
  2061. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hard-disk-storage.mjs +151 -0
  2062. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hard-disk-storage.mjs.map +1 -0
  2063. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hard-drive-filled.mjs +119 -0
  2064. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hard-drive-filled.mjs.map +1 -0
  2065. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hard-drive.mjs +135 -0
  2066. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hard-drive.mjs.map +1 -0
  2067. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hashtag.mjs +128 -0
  2068. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hashtag.mjs.map +1 -0
  2069. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hd-filled.mjs +125 -0
  2070. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hd-filled.mjs.map +1 -0
  2071. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hd.mjs +143 -0
  2072. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hd.mjs.map +1 -0
  2073. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/heart-filled.mjs +119 -0
  2074. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/heart-filled.mjs.map +1 -0
  2075. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/heart.mjs +139 -0
  2076. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/heart.mjs.map +1 -0
  2077. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/help-circle-filled.mjs +119 -0
  2078. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/help-circle-filled.mjs.map +1 -0
  2079. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/help-circle.mjs +144 -0
  2080. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/help-circle.mjs.map +1 -0
  2081. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/help-rectangle-filled.mjs +119 -0
  2082. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/help-rectangle-filled.mjs.map +1 -0
  2083. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/help-rectangle.mjs +144 -0
  2084. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/help-rectangle.mjs.map +1 -0
  2085. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/help.mjs +128 -0
  2086. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/help.mjs.map +1 -0
  2087. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/highlight-1-filled.mjs +119 -0
  2088. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/highlight-1-filled.mjs.map +1 -0
  2089. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/highlight-1.mjs +147 -0
  2090. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/highlight-1.mjs.map +1 -0
  2091. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/highlight.mjs +137 -0
  2092. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/highlight.mjs.map +1 -0
  2093. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/history-setting.mjs +144 -0
  2094. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/history-setting.mjs.map +1 -0
  2095. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/history.mjs +128 -0
  2096. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/history.mjs.map +1 -0
  2097. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/home-filled.mjs +125 -0
  2098. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/home-filled.mjs.map +1 -0
  2099. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/home.mjs +151 -0
  2100. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/home.mjs.map +1 -0
  2101. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/horizontal-filled.mjs +119 -0
  2102. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/horizontal-filled.mjs.map +1 -0
  2103. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/horizontal.mjs +153 -0
  2104. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/horizontal.mjs.map +1 -0
  2105. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hospital-1-filled.mjs +125 -0
  2106. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hospital-1-filled.mjs.map +1 -0
  2107. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hospital-1.mjs +151 -0
  2108. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hospital-1.mjs.map +1 -0
  2109. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hospital-filled.mjs +125 -0
  2110. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hospital-filled.mjs.map +1 -0
  2111. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hospital.mjs +151 -0
  2112. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hospital.mjs.map +1 -0
  2113. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hotspot-wave-filled.mjs +137 -0
  2114. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hotspot-wave-filled.mjs.map +1 -0
  2115. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hotspot-wave.mjs +137 -0
  2116. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hotspot-wave.mjs.map +1 -0
  2117. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hourglass-filled.mjs +119 -0
  2118. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hourglass-filled.mjs.map +1 -0
  2119. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hourglass.mjs +145 -0
  2120. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/hourglass.mjs.map +1 -0
  2121. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses-1-filled.mjs +125 -0
  2122. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses-1-filled.mjs.map +1 -0
  2123. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses-1.mjs +150 -0
  2124. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses-1.mjs.map +1 -0
  2125. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses-2-filled.mjs +131 -0
  2126. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses-2-filled.mjs.map +1 -0
  2127. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses-2.mjs +151 -0
  2128. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses-2.mjs.map +1 -0
  2129. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses-filled.mjs +125 -0
  2130. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses-filled.mjs.map +1 -0
  2131. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses.mjs +151 -0
  2132. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/houses.mjs.map +1 -0
  2133. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/html5-filled.mjs +119 -0
  2134. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/html5-filled.mjs.map +1 -0
  2135. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/html5.mjs +144 -0
  2136. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/html5.mjs.map +1 -0
  2137. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/https-filled.mjs +119 -0
  2138. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/https-filled.mjs.map +1 -0
  2139. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/https.mjs +151 -0
  2140. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/https.mjs.map +1 -0
  2141. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ice-cream-filled.mjs +119 -0
  2142. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ice-cream-filled.mjs.map +1 -0
  2143. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ice-cream.mjs +150 -0
  2144. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ice-cream.mjs.map +1 -0
  2145. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/icon-filled.mjs +119 -0
  2146. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/icon-filled.mjs.map +1 -0
  2147. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/icon.mjs +149 -0
  2148. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/icon.mjs.map +1 -0
  2149. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-1-filled.mjs +119 -0
  2150. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-1-filled.mjs.map +1 -0
  2151. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-1.mjs +153 -0
  2152. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-1.mjs.map +1 -0
  2153. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-add-filled.mjs +131 -0
  2154. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-add-filled.mjs.map +1 -0
  2155. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-add.mjs +137 -0
  2156. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-add.mjs.map +1 -0
  2157. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-edit-filled.mjs +131 -0
  2158. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-edit-filled.mjs.map +1 -0
  2159. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-edit.mjs +143 -0
  2160. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-edit.mjs.map +1 -0
  2161. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-error-filled.mjs +131 -0
  2162. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-error-filled.mjs.map +1 -0
  2163. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-error.mjs +137 -0
  2164. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-error.mjs.map +1 -0
  2165. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-filled.mjs +125 -0
  2166. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-filled.mjs.map +1 -0
  2167. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-off-filled.mjs +125 -0
  2168. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-off-filled.mjs.map +1 -0
  2169. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-off.mjs +137 -0
  2170. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-off.mjs.map +1 -0
  2171. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-search-filled.mjs +131 -0
  2172. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-search-filled.mjs.map +1 -0
  2173. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-search.mjs +144 -0
  2174. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image-search.mjs.map +1 -0
  2175. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image.mjs +153 -0
  2176. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/image.mjs.map +1 -0
  2177. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/indent-left.mjs +137 -0
  2178. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/indent-left.mjs.map +1 -0
  2179. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/indent-right.mjs +137 -0
  2180. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/indent-right.mjs.map +1 -0
  2181. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/indicator-filled.mjs +119 -0
  2182. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/indicator-filled.mjs.map +1 -0
  2183. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/indicator.mjs +142 -0
  2184. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/indicator.mjs.map +1 -0
  2185. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/info-circle-filled.mjs +119 -0
  2186. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/info-circle-filled.mjs.map +1 -0
  2187. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/info-circle.mjs +144 -0
  2188. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/info-circle.mjs.map +1 -0
  2189. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ink-filled.mjs +125 -0
  2190. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ink-filled.mjs.map +1 -0
  2191. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ink.mjs +151 -0
  2192. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ink.mjs.map +1 -0
  2193. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install-desktop-filled.mjs +125 -0
  2194. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install-desktop-filled.mjs.map +1 -0
  2195. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install-desktop.mjs +137 -0
  2196. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install-desktop.mjs.map +1 -0
  2197. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install-filled.mjs +125 -0
  2198. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install-filled.mjs.map +1 -0
  2199. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install-mobile-filled.mjs +125 -0
  2200. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install-mobile-filled.mjs.map +1 -0
  2201. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install-mobile.mjs +137 -0
  2202. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install-mobile.mjs.map +1 -0
  2203. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install.mjs +144 -0
  2204. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/install.mjs.map +1 -0
  2205. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/institution-checked-filled.mjs +119 -0
  2206. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/institution-checked-filled.mjs.map +1 -0
  2207. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/institution-checked.mjs +144 -0
  2208. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/institution-checked.mjs.map +1 -0
  2209. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/institution-filled.mjs +137 -0
  2210. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/institution-filled.mjs.map +1 -0
  2211. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/institution.mjs +135 -0
  2212. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/institution.mjs.map +1 -0
  2213. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/internet-filled.mjs +149 -0
  2214. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/internet-filled.mjs.map +1 -0
  2215. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/internet.mjs +151 -0
  2216. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/internet.mjs.map +1 -0
  2217. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ipod-filled.mjs +119 -0
  2218. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ipod-filled.mjs.map +1 -0
  2219. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ipod.mjs +150 -0
  2220. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ipod.mjs.map +1 -0
  2221. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/joyful-filled.mjs +119 -0
  2222. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/joyful-filled.mjs.map +1 -0
  2223. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/joyful.mjs +151 -0
  2224. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/joyful.mjs.map +1 -0
  2225. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/jump-double.mjs +137 -0
  2226. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/jump-double.mjs.map +1 -0
  2227. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/jump-off.mjs +137 -0
  2228. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/jump-off.mjs.map +1 -0
  2229. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/jump.mjs +137 -0
  2230. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/jump.mjs.map +1 -0
  2231. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/key-filled.mjs +119 -0
  2232. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/key-filled.mjs.map +1 -0
  2233. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/key.mjs +135 -0
  2234. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/key.mjs.map +1 -0
  2235. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/keyboard-filled.mjs +119 -0
  2236. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/keyboard-filled.mjs.map +1 -0
  2237. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/keyboard.mjs +144 -0
  2238. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/keyboard.mjs.map +1 -0
  2239. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/laptop-filled.mjs +119 -0
  2240. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/laptop-filled.mjs.map +1 -0
  2241. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/laptop.mjs +135 -0
  2242. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/laptop.mjs.map +1 -0
  2243. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/layers-filled.mjs +119 -0
  2244. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/layers-filled.mjs.map +1 -0
  2245. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/layers.mjs +142 -0
  2246. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/layers.mjs.map +1 -0
  2247. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/layout-filled.mjs +121 -0
  2248. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/layout-filled.mjs.map +1 -0
  2249. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/layout.mjs +141 -0
  2250. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/layout.mjs.map +1 -0
  2251. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/leaderboard-filled.mjs +131 -0
  2252. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/leaderboard-filled.mjs.map +1 -0
  2253. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/leaderboard.mjs +153 -0
  2254. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/leaderboard.mjs.map +1 -0
  2255. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lemon-filled.mjs +119 -0
  2256. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lemon-filled.mjs.map +1 -0
  2257. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lemon-slice-filled.mjs +137 -0
  2258. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lemon-slice-filled.mjs.map +1 -0
  2259. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lemon-slice.mjs +135 -0
  2260. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lemon-slice.mjs.map +1 -0
  2261. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lemon.mjs +165 -0
  2262. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lemon.mjs.map +1 -0
  2263. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/less-than-or-equal.mjs +137 -0
  2264. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/less-than-or-equal.mjs.map +1 -0
  2265. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/less-than.mjs +128 -0
  2266. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/less-than.mjs.map +1 -0
  2267. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-a.mjs +128 -0
  2268. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-a.mjs.map +1 -0
  2269. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-b.mjs +128 -0
  2270. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-b.mjs.map +1 -0
  2271. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-c.mjs +128 -0
  2272. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-c.mjs.map +1 -0
  2273. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-d.mjs +128 -0
  2274. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-d.mjs.map +1 -0
  2275. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-e.mjs +128 -0
  2276. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-e.mjs.map +1 -0
  2277. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-f.mjs +128 -0
  2278. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-f.mjs.map +1 -0
  2279. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-g.mjs +128 -0
  2280. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-g.mjs.map +1 -0
  2281. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-h.mjs +128 -0
  2282. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-h.mjs.map +1 -0
  2283. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-i.mjs +128 -0
  2284. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-i.mjs.map +1 -0
  2285. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-j.mjs +128 -0
  2286. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-j.mjs.map +1 -0
  2287. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-k.mjs +128 -0
  2288. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-k.mjs.map +1 -0
  2289. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-l.mjs +128 -0
  2290. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-l.mjs.map +1 -0
  2291. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-m.mjs +128 -0
  2292. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-m.mjs.map +1 -0
  2293. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-n.mjs +128 -0
  2294. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-n.mjs.map +1 -0
  2295. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-o.mjs +128 -0
  2296. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-o.mjs.map +1 -0
  2297. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-p.mjs +128 -0
  2298. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-p.mjs.map +1 -0
  2299. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-q.mjs +128 -0
  2300. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-q.mjs.map +1 -0
  2301. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-r.mjs +128 -0
  2302. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-r.mjs.map +1 -0
  2303. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-s.mjs +128 -0
  2304. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-s.mjs.map +1 -0
  2305. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-t.mjs +128 -0
  2306. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-t.mjs.map +1 -0
  2307. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-u.mjs +128 -0
  2308. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-u.mjs.map +1 -0
  2309. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-v.mjs +129 -0
  2310. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-v.mjs.map +1 -0
  2311. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-w.mjs +128 -0
  2312. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-w.mjs.map +1 -0
  2313. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-x.mjs +128 -0
  2314. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-x.mjs.map +1 -0
  2315. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-y.mjs +128 -0
  2316. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-y.mjs.map +1 -0
  2317. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-z.mjs +128 -0
  2318. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/letters-z.mjs.map +1 -0
  2319. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lightbulb-circle-filled.mjs +119 -0
  2320. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lightbulb-circle-filled.mjs.map +1 -0
  2321. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lightbulb-circle.mjs +153 -0
  2322. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lightbulb-circle.mjs.map +1 -0
  2323. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lightbulb-filled.mjs +119 -0
  2324. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lightbulb-filled.mjs.map +1 -0
  2325. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lightbulb.mjs +137 -0
  2326. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lightbulb.mjs.map +1 -0
  2327. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse-1-filled.mjs +119 -0
  2328. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse-1-filled.mjs.map +1 -0
  2329. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse-1.mjs +144 -0
  2330. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse-1.mjs.map +1 -0
  2331. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse-2-filled.mjs +119 -0
  2332. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse-2-filled.mjs.map +1 -0
  2333. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse-2.mjs +144 -0
  2334. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse-2.mjs.map +1 -0
  2335. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse-filled.mjs +119 -0
  2336. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse-filled.mjs.map +1 -0
  2337. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse.mjs +144 -0
  2338. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighthouse.mjs.map +1 -0
  2339. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighting-circle-filled.mjs +119 -0
  2340. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighting-circle-filled.mjs.map +1 -0
  2341. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighting-circle.mjs +155 -0
  2342. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lighting-circle.mjs.map +1 -0
  2343. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/line-height.mjs +137 -0
  2344. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/line-height.mjs.map +1 -0
  2345. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/link-1.mjs +128 -0
  2346. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/link-1.mjs.map +1 -0
  2347. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/link-unlink.mjs +137 -0
  2348. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/link-unlink.mjs.map +1 -0
  2349. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/link.mjs +128 -0
  2350. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/link.mjs.map +1 -0
  2351. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/liquor-filled.mjs +131 -0
  2352. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/liquor-filled.mjs.map +1 -0
  2353. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/liquor.mjs +161 -0
  2354. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/liquor.mjs.map +1 -0
  2355. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/list-numbered.mjs +149 -0
  2356. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/list-numbered.mjs.map +1 -0
  2357. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/load.mjs +128 -0
  2358. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/load.mjs.map +1 -0
  2359. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/loading.mjs +120 -0
  2360. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/loading.mjs.map +1 -0
  2361. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-1-filled.mjs +119 -0
  2362. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-1-filled.mjs.map +1 -0
  2363. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-1.mjs +144 -0
  2364. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-1.mjs.map +1 -0
  2365. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-enlargement-filled.mjs +119 -0
  2366. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-enlargement-filled.mjs.map +1 -0
  2367. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-enlargement.mjs +144 -0
  2368. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-enlargement.mjs.map +1 -0
  2369. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-error-filled.mjs +119 -0
  2370. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-error-filled.mjs.map +1 -0
  2371. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-error.mjs +144 -0
  2372. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-error.mjs.map +1 -0
  2373. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-filled.mjs +119 -0
  2374. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-filled.mjs.map +1 -0
  2375. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-parking-place-filled.mjs +125 -0
  2376. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-parking-place-filled.mjs.map +1 -0
  2377. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-parking-place.mjs +143 -0
  2378. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-parking-place.mjs.map +1 -0
  2379. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-reduction-filled.mjs +119 -0
  2380. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-reduction-filled.mjs.map +1 -0
  2381. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-reduction.mjs +144 -0
  2382. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-reduction.mjs.map +1 -0
  2383. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-setting-filled.mjs +125 -0
  2384. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-setting-filled.mjs.map +1 -0
  2385. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-setting.mjs +144 -0
  2386. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location-setting.mjs.map +1 -0
  2387. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location.mjs +144 -0
  2388. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/location.mjs.map +1 -0
  2389. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-off-filled.mjs +119 -0
  2390. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-off-filled.mjs.map +1 -0
  2391. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-off.mjs +144 -0
  2392. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-off.mjs.map +1 -0
  2393. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-on-filled.mjs +119 -0
  2394. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-on-filled.mjs.map +1 -0
  2395. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-on.mjs +157 -0
  2396. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-on.mjs.map +1 -0
  2397. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-time-filled.mjs +125 -0
  2398. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-time-filled.mjs.map +1 -0
  2399. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-time.mjs +144 -0
  2400. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/lock-time.mjs.map +1 -0
  2401. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/login.mjs +137 -0
  2402. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/login.mjs.map +1 -0
  2403. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-illustrate-filled.mjs +125 -0
  2404. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-illustrate-filled.mjs.map +1 -0
  2405. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-illustrate.mjs +144 -0
  2406. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-illustrate.mjs.map +1 -0
  2407. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-lightroom-filled.mjs +119 -0
  2408. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-lightroom-filled.mjs.map +1 -0
  2409. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-lightroom.mjs +144 -0
  2410. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-lightroom.mjs.map +1 -0
  2411. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-photoshop-filled.mjs +125 -0
  2412. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-photoshop-filled.mjs.map +1 -0
  2413. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-photoshop.mjs +143 -0
  2414. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-adobe-photoshop.mjs.map +1 -0
  2415. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-alipay-filled.mjs +125 -0
  2416. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-alipay-filled.mjs.map +1 -0
  2417. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-alipay.mjs +120 -0
  2418. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-alipay.mjs.map +1 -0
  2419. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-android-filled.mjs +119 -0
  2420. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-android-filled.mjs.map +1 -0
  2421. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-android.mjs +157 -0
  2422. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-android.mjs.map +1 -0
  2423. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-apple-filled.mjs +119 -0
  2424. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-apple-filled.mjs.map +1 -0
  2425. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-apple.mjs +161 -0
  2426. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-apple.mjs.map +1 -0
  2427. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-behance-filled.mjs +137 -0
  2428. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-behance-filled.mjs.map +1 -0
  2429. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-behance.mjs +120 -0
  2430. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-behance.mjs.map +1 -0
  2431. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-chrome-filled.mjs +137 -0
  2432. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-chrome-filled.mjs.map +1 -0
  2433. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-chrome.mjs +145 -0
  2434. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-chrome.mjs.map +1 -0
  2435. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-cinema4d-filled.mjs +131 -0
  2436. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-cinema4d-filled.mjs.map +1 -0
  2437. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-cinema4d.mjs +141 -0
  2438. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-cinema4d.mjs.map +1 -0
  2439. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-cnb-filled.mjs +143 -0
  2440. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-cnb-filled.mjs.map +1 -0
  2441. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-cnb.mjs +149 -0
  2442. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-cnb.mjs.map +1 -0
  2443. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-codepen.mjs +128 -0
  2444. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-codepen.mjs.map +1 -0
  2445. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-codesandbox.mjs +165 -0
  2446. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-codesandbox.mjs.map +1 -0
  2447. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-dribbble-filled.mjs +131 -0
  2448. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-dribbble-filled.mjs.map +1 -0
  2449. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-dribbble.mjs +135 -0
  2450. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-dribbble.mjs.map +1 -0
  2451. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-facebook-filled.mjs +119 -0
  2452. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-facebook-filled.mjs.map +1 -0
  2453. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-facebook.mjs +134 -0
  2454. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-facebook.mjs.map +1 -0
  2455. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-figma-filled.mjs +137 -0
  2456. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-figma-filled.mjs.map +1 -0
  2457. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-figma.mjs +164 -0
  2458. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-figma.mjs.map +1 -0
  2459. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-framer-filled.mjs +119 -0
  2460. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-framer-filled.mjs.map +1 -0
  2461. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-framer.mjs +145 -0
  2462. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-framer.mjs.map +1 -0
  2463. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-github-filled.mjs +119 -0
  2464. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-github-filled.mjs.map +1 -0
  2465. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-github.mjs +128 -0
  2466. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-github.mjs.map +1 -0
  2467. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-gitlab-filled.mjs +119 -0
  2468. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-gitlab-filled.mjs.map +1 -0
  2469. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-gitlab.mjs +134 -0
  2470. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-gitlab.mjs.map +1 -0
  2471. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-ie-filled.mjs +125 -0
  2472. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-ie-filled.mjs.map +1 -0
  2473. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-ie.mjs +131 -0
  2474. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-ie.mjs.map +1 -0
  2475. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-instagram-filled.mjs +125 -0
  2476. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-instagram-filled.mjs.map +1 -0
  2477. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-instagram.mjs +163 -0
  2478. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-instagram.mjs.map +1 -0
  2479. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-miniprogram-filled.mjs +119 -0
  2480. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-miniprogram-filled.mjs.map +1 -0
  2481. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-miniprogram.mjs +144 -0
  2482. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-miniprogram.mjs.map +1 -0
  2483. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-qq-filled.mjs +119 -0
  2484. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-qq-filled.mjs.map +1 -0
  2485. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-qq.mjs +134 -0
  2486. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-qq.mjs.map +1 -0
  2487. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-stackblitz-filled.mjs +121 -0
  2488. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-stackblitz-filled.mjs.map +1 -0
  2489. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-stackblitz.mjs +120 -0
  2490. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-stackblitz.mjs.map +1 -0
  2491. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-twitter-filled.mjs +119 -0
  2492. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-twitter-filled.mjs.map +1 -0
  2493. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-twitter.mjs +128 -0
  2494. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-twitter.mjs.map +1 -0
  2495. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wechat-stroke-filled.mjs +125 -0
  2496. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wechat-stroke-filled.mjs.map +1 -0
  2497. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wechat-stroke.mjs +120 -0
  2498. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wechat-stroke.mjs.map +1 -0
  2499. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wechatpay-filled.mjs +119 -0
  2500. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wechatpay-filled.mjs.map +1 -0
  2501. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wechatpay.mjs +120 -0
  2502. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wechatpay.mjs.map +1 -0
  2503. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wecom-filled.mjs +119 -0
  2504. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wecom-filled.mjs.map +1 -0
  2505. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wecom.mjs +120 -0
  2506. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-wecom.mjs.map +1 -0
  2507. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-windows-filled.mjs +119 -0
  2508. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-windows-filled.mjs.map +1 -0
  2509. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-windows.mjs +183 -0
  2510. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-windows.mjs.map +1 -0
  2511. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-youtube-filled.mjs +119 -0
  2512. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-youtube-filled.mjs.map +1 -0
  2513. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-youtube.mjs +149 -0
  2514. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logo-youtube.mjs.map +1 -0
  2515. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logout.mjs +137 -0
  2516. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/logout.mjs.map +1 -0
  2517. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/look-around-filled.mjs +119 -0
  2518. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/look-around-filled.mjs.map +1 -0
  2519. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/look-around.mjs +144 -0
  2520. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/look-around.mjs.map +1 -0
  2521. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/loudspeaker-filled.mjs +119 -0
  2522. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/loudspeaker-filled.mjs.map +1 -0
  2523. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/loudspeaker.mjs +151 -0
  2524. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/loudspeaker.mjs.map +1 -0
  2525. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mail-filled.mjs +125 -0
  2526. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mail-filled.mjs.map +1 -0
  2527. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mail.mjs +142 -0
  2528. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mail.mjs.map +1 -0
  2529. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-3d-filled.mjs +119 -0
  2530. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-3d-filled.mjs.map +1 -0
  2531. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-3d.mjs +143 -0
  2532. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-3d.mjs.map +1 -0
  2533. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-add-filled.mjs +137 -0
  2534. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-add-filled.mjs.map +1 -0
  2535. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-add.mjs +137 -0
  2536. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-add.mjs.map +1 -0
  2537. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-aiming-filled.mjs +125 -0
  2538. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-aiming-filled.mjs.map +1 -0
  2539. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-aiming.mjs +151 -0
  2540. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-aiming.mjs.map +1 -0
  2541. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-blocked-filled.mjs +137 -0
  2542. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-blocked-filled.mjs.map +1 -0
  2543. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-blocked.mjs +144 -0
  2544. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-blocked.mjs.map +1 -0
  2545. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-bubble-filled.mjs +119 -0
  2546. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-bubble-filled.mjs.map +1 -0
  2547. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-bubble.mjs +198 -0
  2548. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-bubble.mjs.map +1 -0
  2549. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-cancel-filled.mjs +137 -0
  2550. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-cancel-filled.mjs.map +1 -0
  2551. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-cancel.mjs +137 -0
  2552. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-cancel.mjs.map +1 -0
  2553. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-chat-filled.mjs +137 -0
  2554. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-chat-filled.mjs.map +1 -0
  2555. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-chat.mjs +144 -0
  2556. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-chat.mjs.map +1 -0
  2557. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-checked-filled.mjs +137 -0
  2558. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-checked-filled.mjs.map +1 -0
  2559. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-checked.mjs +137 -0
  2560. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-checked.mjs.map +1 -0
  2561. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-collection-filled.mjs +137 -0
  2562. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-collection-filled.mjs.map +1 -0
  2563. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-collection.mjs +143 -0
  2564. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-collection.mjs.map +1 -0
  2565. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-connection-filled.mjs +119 -0
  2566. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-connection-filled.mjs.map +1 -0
  2567. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-connection.mjs +135 -0
  2568. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-connection.mjs.map +1 -0
  2569. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-distance-filled.mjs +131 -0
  2570. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-distance-filled.mjs.map +1 -0
  2571. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-distance.mjs +162 -0
  2572. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-distance.mjs.map +1 -0
  2573. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-double-filled.mjs +119 -0
  2574. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-double-filled.mjs.map +1 -0
  2575. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-double.mjs +150 -0
  2576. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-double.mjs.map +1 -0
  2577. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-edit-filled.mjs +137 -0
  2578. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-edit-filled.mjs.map +1 -0
  2579. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-edit.mjs +144 -0
  2580. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-edit.mjs.map +1 -0
  2581. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-filled.mjs +131 -0
  2582. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-filled.mjs.map +1 -0
  2583. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-grid-filled.mjs +143 -0
  2584. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-grid-filled.mjs.map +1 -0
  2585. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-grid.mjs +144 -0
  2586. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-grid.mjs.map +1 -0
  2587. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information-1-filled.mjs +125 -0
  2588. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information-1-filled.mjs.map +1 -0
  2589. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information-1.mjs +164 -0
  2590. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information-1.mjs.map +1 -0
  2591. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information-2-filled.mjs +125 -0
  2592. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information-2-filled.mjs.map +1 -0
  2593. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information-2.mjs +164 -0
  2594. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information-2.mjs.map +1 -0
  2595. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information-filled.mjs +125 -0
  2596. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information-filled.mjs.map +1 -0
  2597. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information.mjs +164 -0
  2598. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-information.mjs.map +1 -0
  2599. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-location-filled.mjs +137 -0
  2600. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-location-filled.mjs.map +1 -0
  2601. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-location.mjs +144 -0
  2602. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-location.mjs.map +1 -0
  2603. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-locked-filled.mjs +137 -0
  2604. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-locked-filled.mjs.map +1 -0
  2605. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-locked.mjs +144 -0
  2606. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-locked.mjs.map +1 -0
  2607. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-marked-filled.mjs +137 -0
  2608. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-marked-filled.mjs.map +1 -0
  2609. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-marked.mjs +144 -0
  2610. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-marked.mjs.map +1 -0
  2611. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-navigation-filled.mjs +119 -0
  2612. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-navigation-filled.mjs.map +1 -0
  2613. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-navigation.mjs +144 -0
  2614. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-navigation.mjs.map +1 -0
  2615. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-outline-filled.mjs +119 -0
  2616. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-outline-filled.mjs.map +1 -0
  2617. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-outline.mjs +135 -0
  2618. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-outline.mjs.map +1 -0
  2619. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-route-planning-filled.mjs +143 -0
  2620. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-route-planning-filled.mjs.map +1 -0
  2621. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-route-planning.mjs +162 -0
  2622. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-route-planning.mjs.map +1 -0
  2623. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-ruler-filled.mjs +119 -0
  2624. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-ruler-filled.mjs.map +1 -0
  2625. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-ruler.mjs +136 -0
  2626. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-ruler.mjs.map +1 -0
  2627. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-safety-filled.mjs +137 -0
  2628. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-safety-filled.mjs.map +1 -0
  2629. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-safety.mjs +144 -0
  2630. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-safety.mjs.map +1 -0
  2631. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-search-1-filled.mjs +125 -0
  2632. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-search-1-filled.mjs.map +1 -0
  2633. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-search-1.mjs +151 -0
  2634. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-search-1.mjs.map +1 -0
  2635. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-search-filled.mjs +137 -0
  2636. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-search-filled.mjs.map +1 -0
  2637. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-search.mjs +144 -0
  2638. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-search.mjs.map +1 -0
  2639. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-setting-filled.mjs +137 -0
  2640. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-setting-filled.mjs.map +1 -0
  2641. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-setting.mjs +144 -0
  2642. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-setting.mjs.map +1 -0
  2643. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-unlocked-filled.mjs +137 -0
  2644. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-unlocked-filled.mjs.map +1 -0
  2645. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-unlocked.mjs +144 -0
  2646. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map-unlocked.mjs.map +1 -0
  2647. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map.mjs +144 -0
  2648. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/map.mjs.map +1 -0
  2649. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mark-as-unread-filled.mjs +131 -0
  2650. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mark-as-unread-filled.mjs.map +1 -0
  2651. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mark-as-unread.mjs +144 -0
  2652. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mark-as-unread.mjs.map +1 -0
  2653. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/markup-filled.mjs +119 -0
  2654. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/markup-filled.mjs.map +1 -0
  2655. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/markup.mjs +160 -0
  2656. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/markup.mjs.map +1 -0
  2657. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mathematics-filled.mjs +119 -0
  2658. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mathematics-filled.mjs.map +1 -0
  2659. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mathematics.mjs +151 -0
  2660. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mathematics.mjs.map +1 -0
  2661. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement-1-filled.mjs +119 -0
  2662. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement-1-filled.mjs.map +1 -0
  2663. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement-1.mjs +135 -0
  2664. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement-1.mjs.map +1 -0
  2665. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement-2-filled.mjs +119 -0
  2666. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement-2-filled.mjs.map +1 -0
  2667. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement-2.mjs +143 -0
  2668. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement-2.mjs.map +1 -0
  2669. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement-filled.mjs +119 -0
  2670. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement-filled.mjs.map +1 -0
  2671. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement.mjs +135 -0
  2672. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/measurement.mjs.map +1 -0
  2673. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/meat-pepper-filled.mjs +119 -0
  2674. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/meat-pepper-filled.mjs.map +1 -0
  2675. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/meat-pepper.mjs +135 -0
  2676. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/meat-pepper.mjs.map +1 -0
  2677. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/media-library-filled.mjs +131 -0
  2678. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/media-library-filled.mjs.map +1 -0
  2679. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/media-library.mjs +143 -0
  2680. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/media-library.mjs.map +1 -0
  2681. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/member-filled.mjs +143 -0
  2682. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/member-filled.mjs.map +1 -0
  2683. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/member.mjs +137 -0
  2684. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/member.mjs.map +1 -0
  2685. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/menu-application.mjs +197 -0
  2686. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/menu-application.mjs.map +1 -0
  2687. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/menu-filled.mjs +125 -0
  2688. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/menu-filled.mjs.map +1 -0
  2689. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/menu-fold.mjs +144 -0
  2690. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/menu-fold.mjs.map +1 -0
  2691. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/menu-unfold.mjs +144 -0
  2692. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/menu-unfold.mjs.map +1 -0
  2693. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/menu.mjs +142 -0
  2694. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/menu.mjs.map +1 -0
  2695. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/merge-cells-filled.mjs +119 -0
  2696. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/merge-cells-filled.mjs.map +1 -0
  2697. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/merge-cells.mjs +144 -0
  2698. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/merge-cells.mjs.map +1 -0
  2699. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone-1-filled.mjs +119 -0
  2700. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone-1-filled.mjs.map +1 -0
  2701. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone-1.mjs +135 -0
  2702. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone-1.mjs.map +1 -0
  2703. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone-2-filled.mjs +119 -0
  2704. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone-2-filled.mjs.map +1 -0
  2705. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone-2.mjs +150 -0
  2706. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone-2.mjs.map +1 -0
  2707. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone-filled.mjs +119 -0
  2708. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone-filled.mjs.map +1 -0
  2709. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone.mjs +152 -0
  2710. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/microphone.mjs.map +1 -0
  2711. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/milk-filled.mjs +119 -0
  2712. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/milk-filled.mjs.map +1 -0
  2713. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/milk.mjs +144 -0
  2714. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/milk.mjs.map +1 -0
  2715. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/minus-circle-filled.mjs +119 -0
  2716. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/minus-circle-filled.mjs.map +1 -0
  2717. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/minus-circle.mjs +144 -0
  2718. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/minus-circle.mjs.map +1 -0
  2719. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/minus-rectangle-filled.mjs +119 -0
  2720. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/minus-rectangle-filled.mjs.map +1 -0
  2721. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/minus-rectangle.mjs +144 -0
  2722. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/minus-rectangle.mjs.map +1 -0
  2723. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/minus.mjs +128 -0
  2724. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/minus.mjs.map +1 -0
  2725. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mirror-filled.mjs +119 -0
  2726. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mirror-filled.mjs.map +1 -0
  2727. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mirror.mjs +168 -0
  2728. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mirror.mjs.map +1 -0
  2729. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-blocked-filled.mjs +125 -0
  2730. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-blocked-filled.mjs.map +1 -0
  2731. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-blocked.mjs +144 -0
  2732. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-blocked.mjs.map +1 -0
  2733. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-filled.mjs +119 -0
  2734. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-filled.mjs.map +1 -0
  2735. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-list-filled.mjs +131 -0
  2736. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-list-filled.mjs.map +1 -0
  2737. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-list.mjs +137 -0
  2738. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-list.mjs.map +1 -0
  2739. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-navigation-filled.mjs +119 -0
  2740. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-navigation-filled.mjs.map +1 -0
  2741. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-navigation.mjs +161 -0
  2742. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-navigation.mjs.map +1 -0
  2743. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-shortcut-filled.mjs +137 -0
  2744. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-shortcut-filled.mjs.map +1 -0
  2745. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-shortcut.mjs +158 -0
  2746. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-shortcut.mjs.map +1 -0
  2747. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-vibrate-filled.mjs +131 -0
  2748. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-vibrate-filled.mjs.map +1 -0
  2749. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-vibrate.mjs +157 -0
  2750. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile-vibrate.mjs.map +1 -0
  2751. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile.mjs +144 -0
  2752. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mobile.mjs.map +1 -0
  2753. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mode-dark-filled.mjs +119 -0
  2754. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mode-dark-filled.mjs.map +1 -0
  2755. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mode-dark.mjs +154 -0
  2756. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mode-dark.mjs.map +1 -0
  2757. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mode-light-filled.mjs +119 -0
  2758. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mode-light-filled.mjs.map +1 -0
  2759. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mode-light.mjs +206 -0
  2760. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mode-light.mjs.map +1 -0
  2761. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/module-filled.mjs +131 -0
  2762. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/module-filled.mjs.map +1 -0
  2763. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/module.mjs +142 -0
  2764. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/module.mjs.map +1 -0
  2765. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/money-filled.mjs +125 -0
  2766. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/money-filled.mjs.map +1 -0
  2767. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/money.mjs +207 -0
  2768. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/money.mjs.map +1 -0
  2769. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/monument-filled.mjs +119 -0
  2770. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/monument-filled.mjs.map +1 -0
  2771. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/monument.mjs +151 -0
  2772. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/monument.mjs.map +1 -0
  2773. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon-fall-filled.mjs +119 -0
  2774. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon-fall-filled.mjs.map +1 -0
  2775. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon-fall.mjs +137 -0
  2776. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon-fall.mjs.map +1 -0
  2777. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon-filled.mjs +119 -0
  2778. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon-filled.mjs.map +1 -0
  2779. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon-rising-filled.mjs +125 -0
  2780. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon-rising-filled.mjs.map +1 -0
  2781. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon-rising.mjs +137 -0
  2782. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon-rising.mjs.map +1 -0
  2783. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon.mjs +134 -0
  2784. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/moon.mjs.map +1 -0
  2785. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/more.mjs +149 -0
  2786. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/more.mjs.map +1 -0
  2787. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mosque-1-filled.mjs +131 -0
  2788. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mosque-1-filled.mjs.map +1 -0
  2789. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mosque-1.mjs +151 -0
  2790. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mosque-1.mjs.map +1 -0
  2791. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mosque-filled.mjs +131 -0
  2792. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mosque-filled.mjs.map +1 -0
  2793. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mosque.mjs +151 -0
  2794. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mosque.mjs.map +1 -0
  2795. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mouse-filled.mjs +131 -0
  2796. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mouse-filled.mjs.map +1 -0
  2797. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mouse.mjs +134 -0
  2798. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mouse.mjs.map +1 -0
  2799. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/move-1.mjs +128 -0
  2800. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/move-1.mjs.map +1 -0
  2801. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/move.mjs +189 -0
  2802. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/move.mjs.map +1 -0
  2803. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/movie-clapper-filled.mjs +119 -0
  2804. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/movie-clapper-filled.mjs.map +1 -0
  2805. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/movie-clapper.mjs +151 -0
  2806. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/movie-clapper.mjs.map +1 -0
  2807. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/multiply.mjs +128 -0
  2808. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/multiply.mjs.map +1 -0
  2809. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum-1-filled.mjs +119 -0
  2810. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum-1-filled.mjs.map +1 -0
  2811. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum-1.mjs +162 -0
  2812. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum-1.mjs.map +1 -0
  2813. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum-2-filled.mjs +119 -0
  2814. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum-2-filled.mjs.map +1 -0
  2815. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum-2.mjs +135 -0
  2816. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum-2.mjs.map +1 -0
  2817. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum-filled.mjs +125 -0
  2818. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum-filled.mjs.map +1 -0
  2819. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum.mjs +180 -0
  2820. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/museum.mjs.map +1 -0
  2821. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mushroom-1-filled.mjs +119 -0
  2822. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mushroom-1-filled.mjs.map +1 -0
  2823. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mushroom-1.mjs +151 -0
  2824. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mushroom-1.mjs.map +1 -0
  2825. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mushroom-filled.mjs +131 -0
  2826. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mushroom-filled.mjs.map +1 -0
  2827. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mushroom.mjs +178 -0
  2828. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/mushroom.mjs.map +1 -0
  2829. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-1-filled.mjs +119 -0
  2830. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-1-filled.mjs.map +1 -0
  2831. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-1.mjs +145 -0
  2832. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-1.mjs.map +1 -0
  2833. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-2-filled.mjs +119 -0
  2834. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-2-filled.mjs.map +1 -0
  2835. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-2.mjs +136 -0
  2836. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-2.mjs.map +1 -0
  2837. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-filled.mjs +119 -0
  2838. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-filled.mjs.map +1 -0
  2839. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-rectangle-add-filled.mjs +125 -0
  2840. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-rectangle-add-filled.mjs.map +1 -0
  2841. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-rectangle-add.mjs +144 -0
  2842. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music-rectangle-add.mjs.map +1 -0
  2843. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music.mjs +145 -0
  2844. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/music.mjs.map +1 -0
  2845. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/navigation-arrow-filled.mjs +119 -0
  2846. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/navigation-arrow-filled.mjs.map +1 -0
  2847. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/navigation-arrow.mjs +134 -0
  2848. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/navigation-arrow.mjs.map +1 -0
  2849. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/next-filled.mjs +119 -0
  2850. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/next-filled.mjs.map +1 -0
  2851. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/next.mjs +135 -0
  2852. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/next.mjs.map +1 -0
  2853. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/no-expression-filled.mjs +119 -0
  2854. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/no-expression-filled.mjs.map +1 -0
  2855. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/no-expression.mjs +144 -0
  2856. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/no-expression.mjs.map +1 -0
  2857. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/no-result-filled.mjs +149 -0
  2858. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/no-result-filled.mjs.map +1 -0
  2859. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/no-result.mjs +144 -0
  2860. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/no-result.mjs.map +1 -0
  2861. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/noodle-filled.mjs +119 -0
  2862. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/noodle-filled.mjs.map +1 -0
  2863. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/noodle.mjs +144 -0
  2864. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/noodle.mjs.map +1 -0
  2865. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-add-filled.mjs +125 -0
  2866. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-add-filled.mjs.map +1 -0
  2867. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-add.mjs +164 -0
  2868. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-add.mjs.map +1 -0
  2869. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-circle-filled.mjs +119 -0
  2870. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-circle-filled.mjs.map +1 -0
  2871. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-circle.mjs +155 -0
  2872. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-circle.mjs.map +1 -0
  2873. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-error-filled.mjs +125 -0
  2874. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-error-filled.mjs.map +1 -0
  2875. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-error.mjs +164 -0
  2876. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-error.mjs.map +1 -0
  2877. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-filled.mjs +125 -0
  2878. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification-filled.mjs.map +1 -0
  2879. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification.mjs +155 -0
  2880. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/notification.mjs.map +1 -0
  2881. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-0-1.mjs +128 -0
  2882. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-0-1.mjs.map +1 -0
  2883. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-0.mjs +128 -0
  2884. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-0.mjs.map +1 -0
  2885. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-1-1.mjs +128 -0
  2886. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-1-1.mjs.map +1 -0
  2887. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-1.mjs +128 -0
  2888. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-1.mjs.map +1 -0
  2889. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-2-1.mjs +128 -0
  2890. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-2-1.mjs.map +1 -0
  2891. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-2.mjs +128 -0
  2892. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-2.mjs.map +1 -0
  2893. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-3-1.mjs +128 -0
  2894. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-3-1.mjs.map +1 -0
  2895. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-3.mjs +128 -0
  2896. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-3.mjs.map +1 -0
  2897. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-4-1.mjs +128 -0
  2898. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-4-1.mjs.map +1 -0
  2899. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-4.mjs +128 -0
  2900. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-4.mjs.map +1 -0
  2901. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-5-1.mjs +128 -0
  2902. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-5-1.mjs.map +1 -0
  2903. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-5.mjs +128 -0
  2904. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-5.mjs.map +1 -0
  2905. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-6-1.mjs +127 -0
  2906. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-6-1.mjs.map +1 -0
  2907. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-6.mjs +128 -0
  2908. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-6.mjs.map +1 -0
  2909. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-7-1.mjs +128 -0
  2910. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-7-1.mjs.map +1 -0
  2911. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-7.mjs +128 -0
  2912. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-7.mjs.map +1 -0
  2913. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-8-1.mjs +127 -0
  2914. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-8-1.mjs.map +1 -0
  2915. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-8.mjs +128 -0
  2916. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-8.mjs.map +1 -0
  2917. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-9-1.mjs +127 -0
  2918. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-9-1.mjs.map +1 -0
  2919. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-9.mjs +128 -0
  2920. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/numbers-9.mjs.map +1 -0
  2921. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/nut-filled.mjs +119 -0
  2922. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/nut-filled.mjs.map +1 -0
  2923. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/nut.mjs +151 -0
  2924. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/nut.mjs.map +1 -0
  2925. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/object-storage.mjs +128 -0
  2926. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/object-storage.mjs.map +1 -0
  2927. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/open-mouth-filled.mjs +119 -0
  2928. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/open-mouth-filled.mjs.map +1 -0
  2929. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/open-mouth.mjs +150 -0
  2930. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/open-mouth.mjs.map +1 -0
  2931. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/opera-filled.mjs +119 -0
  2932. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/opera-filled.mjs.map +1 -0
  2933. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/opera.mjs +134 -0
  2934. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/opera.mjs.map +1 -0
  2935. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/order-adjustment-column.mjs +128 -0
  2936. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/order-adjustment-column.mjs.map +1 -0
  2937. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/order-ascending.mjs +137 -0
  2938. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/order-ascending.mjs.map +1 -0
  2939. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/order-descending.mjs +137 -0
  2940. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/order-descending.mjs.map +1 -0
  2941. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/outbox-filled.mjs +119 -0
  2942. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/outbox-filled.mjs.map +1 -0
  2943. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/outbox.mjs +144 -0
  2944. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/outbox.mjs.map +1 -0
  2945. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/page-first.mjs +128 -0
  2946. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/page-first.mjs.map +1 -0
  2947. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/page-head-filled.mjs +119 -0
  2948. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/page-head-filled.mjs.map +1 -0
  2949. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/page-head.mjs +142 -0
  2950. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/page-head.mjs.map +1 -0
  2951. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/page-last.mjs +128 -0
  2952. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/page-last.mjs.map +1 -0
  2953. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-1-filled.mjs +131 -0
  2954. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-1-filled.mjs.map +1 -0
  2955. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-1.mjs +183 -0
  2956. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-1.mjs.map +1 -0
  2957. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-2-filled.mjs +125 -0
  2958. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-2-filled.mjs.map +1 -0
  2959. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-2.mjs +164 -0
  2960. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-2.mjs.map +1 -0
  2961. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-3-filled.mjs +125 -0
  2962. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-3-filled.mjs.map +1 -0
  2963. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-3.mjs +164 -0
  2964. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-3.mjs.map +1 -0
  2965. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-4-filled.mjs +125 -0
  2966. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-4-filled.mjs.map +1 -0
  2967. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-4.mjs +151 -0
  2968. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-4.mjs.map +1 -0
  2969. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-filled.mjs +131 -0
  2970. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace-filled.mjs.map +1 -0
  2971. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace.mjs +151 -0
  2972. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palace.mjs.map +1 -0
  2973. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palette-1-filled.mjs +119 -0
  2974. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palette-1-filled.mjs.map +1 -0
  2975. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palette-1.mjs +170 -0
  2976. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palette-1.mjs.map +1 -0
  2977. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palette-filled.mjs +119 -0
  2978. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palette-filled.mjs.map +1 -0
  2979. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palette.mjs +185 -0
  2980. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/palette.mjs.map +1 -0
  2981. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/panorama-horizontal-filled.mjs +119 -0
  2982. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/panorama-horizontal-filled.mjs.map +1 -0
  2983. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/panorama-horizontal.mjs +134 -0
  2984. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/panorama-horizontal.mjs.map +1 -0
  2985. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/panorama-vertical-filled.mjs +119 -0
  2986. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/panorama-vertical-filled.mjs.map +1 -0
  2987. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/panorama-vertical.mjs +134 -0
  2988. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/panorama-vertical.mjs.map +1 -0
  2989. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pantone-filled.mjs +119 -0
  2990. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pantone-filled.mjs.map +1 -0
  2991. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pantone.mjs +174 -0
  2992. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pantone.mjs.map +1 -0
  2993. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/parabola.mjs +137 -0
  2994. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/parabola.mjs.map +1 -0
  2995. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/parentheses.mjs +128 -0
  2996. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/parentheses.mjs.map +1 -0
  2997. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/paste-filled.mjs +119 -0
  2998. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/paste-filled.mjs.map +1 -0
  2999. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/paste.mjs +144 -0
  3000. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/paste.mjs.map +1 -0
  3001. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/patio-filled.mjs +137 -0
  3002. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/patio-filled.mjs.map +1 -0
  3003. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/patio.mjs +144 -0
  3004. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/patio.mjs.map +1 -0
  3005. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pause-circle-filled.mjs +119 -0
  3006. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pause-circle-filled.mjs.map +1 -0
  3007. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pause-circle-stroke-filled.mjs +119 -0
  3008. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pause-circle-stroke-filled.mjs.map +1 -0
  3009. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pause-circle-stroke.mjs +146 -0
  3010. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pause-circle-stroke.mjs.map +1 -0
  3011. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pause-circle.mjs +137 -0
  3012. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pause-circle.mjs.map +1 -0
  3013. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pause.mjs +131 -0
  3014. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pause.mjs.map +1 -0
  3015. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pea-filled.mjs +119 -0
  3016. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pea-filled.mjs.map +1 -0
  3017. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pea.mjs +151 -0
  3018. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pea.mjs.map +1 -0
  3019. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/peach-filled.mjs +119 -0
  3020. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/peach-filled.mjs.map +1 -0
  3021. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/peach.mjs +135 -0
  3022. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/peach.mjs.map +1 -0
  3023. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pear-filled.mjs +119 -0
  3024. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pear-filled.mjs.map +1 -0
  3025. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pear.mjs +135 -0
  3026. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pear.mjs.map +1 -0
  3027. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pearl-of-the-orient-filled.mjs +119 -0
  3028. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pearl-of-the-orient-filled.mjs.map +1 -0
  3029. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pearl-of-the-orient.mjs +146 -0
  3030. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pearl-of-the-orient.mjs.map +1 -0
  3031. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-ball-filled.mjs +119 -0
  3032. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-ball-filled.mjs.map +1 -0
  3033. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-ball.mjs +144 -0
  3034. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-ball.mjs.map +1 -0
  3035. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-brush-filled.mjs +125 -0
  3036. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-brush-filled.mjs.map +1 -0
  3037. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-brush.mjs +142 -0
  3038. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-brush.mjs.map +1 -0
  3039. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-filled.mjs +119 -0
  3040. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-filled.mjs.map +1 -0
  3041. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-mark-filled.mjs +119 -0
  3042. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-mark-filled.mjs.map +1 -0
  3043. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-mark.mjs +144 -0
  3044. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-mark.mjs.map +1 -0
  3045. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-quill-filled.mjs +119 -0
  3046. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-quill-filled.mjs.map +1 -0
  3047. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-quill.mjs +135 -0
  3048. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen-quill.mjs.map +1 -0
  3049. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen.mjs +128 -0
  3050. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pen.mjs.map +1 -0
  3051. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pending-filled.mjs +119 -0
  3052. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pending-filled.mjs.map +1 -0
  3053. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pending.mjs +165 -0
  3054. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pending.mjs.map +1 -0
  3055. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/percent.mjs +128 -0
  3056. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/percent.mjs.map +1 -0
  3057. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/personal-information-filled.mjs +119 -0
  3058. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/personal-information-filled.mjs.map +1 -0
  3059. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/personal-information.mjs +151 -0
  3060. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/personal-information.mjs.map +1 -0
  3061. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/phone-locked-filled.mjs +125 -0
  3062. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/phone-locked-filled.mjs.map +1 -0
  3063. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/phone-locked.mjs +144 -0
  3064. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/phone-locked.mjs.map +1 -0
  3065. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/phone-search-filled.mjs +125 -0
  3066. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/phone-search-filled.mjs.map +1 -0
  3067. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/phone-search.mjs +144 -0
  3068. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/phone-search.mjs.map +1 -0
  3069. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pi.mjs +128 -0
  3070. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pi.mjs.map +1 -0
  3071. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/piano-filled.mjs +119 -0
  3072. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/piano-filled.mjs.map +1 -0
  3073. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/piano.mjs +142 -0
  3074. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/piano.mjs.map +1 -0
  3075. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pin-filled.mjs +119 -0
  3076. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pin-filled.mjs.map +1 -0
  3077. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pin.mjs +135 -0
  3078. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pin.mjs.map +1 -0
  3079. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle-filled.mjs +119 -0
  3080. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle-filled.mjs.map +1 -0
  3081. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle-stroke-add-filled.mjs +125 -0
  3082. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle-stroke-add-filled.mjs.map +1 -0
  3083. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle-stroke-add.mjs +144 -0
  3084. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle-stroke-add.mjs.map +1 -0
  3085. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle-stroke-filled.mjs +119 -0
  3086. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle-stroke-filled.mjs.map +1 -0
  3087. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle-stroke.mjs +151 -0
  3088. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle-stroke.mjs.map +1 -0
  3089. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle.mjs +131 -0
  3090. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-circle.mjs.map +1 -0
  3091. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-demo-filled.mjs +119 -0
  3092. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-demo-filled.mjs.map +1 -0
  3093. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-demo.mjs +151 -0
  3094. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-demo.mjs.map +1 -0
  3095. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-rectangle-filled.mjs +119 -0
  3096. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-rectangle-filled.mjs.map +1 -0
  3097. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-rectangle.mjs +149 -0
  3098. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play-rectangle.mjs.map +1 -0
  3099. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play.mjs +120 -0
  3100. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/play.mjs.map +1 -0
  3101. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/plus.mjs +128 -0
  3102. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/plus.mjs.map +1 -0
  3103. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/popsicle-filled.mjs +125 -0
  3104. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/popsicle-filled.mjs.map +1 -0
  3105. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/popsicle.mjs +150 -0
  3106. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/popsicle.mjs.map +1 -0
  3107. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/portrait-filled.mjs +143 -0
  3108. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/portrait-filled.mjs.map +1 -0
  3109. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/portrait.mjs +144 -0
  3110. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/portrait.mjs.map +1 -0
  3111. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pout-filled.mjs +119 -0
  3112. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pout-filled.mjs.map +1 -0
  3113. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pout.mjs +144 -0
  3114. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pout.mjs.map +1 -0
  3115. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/poweroff.mjs +137 -0
  3116. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/poweroff.mjs.map +1 -0
  3117. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/precise-monitor.mjs +137 -0
  3118. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/precise-monitor.mjs.map +1 -0
  3119. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/previous-filled.mjs +119 -0
  3120. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/previous-filled.mjs.map +1 -0
  3121. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/previous.mjs +135 -0
  3122. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/previous.mjs.map +1 -0
  3123. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/print-filled.mjs +131 -0
  3124. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/print-filled.mjs.map +1 -0
  3125. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/print.mjs +188 -0
  3126. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/print.mjs.map +1 -0
  3127. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pumpkin-filled.mjs +131 -0
  3128. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pumpkin-filled.mjs.map +1 -0
  3129. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pumpkin.mjs +135 -0
  3130. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pumpkin.mjs.map +1 -0
  3131. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pyramid-filled.mjs +119 -0
  3132. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pyramid-filled.mjs.map +1 -0
  3133. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pyramid-maya-filled.mjs +137 -0
  3134. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pyramid-maya-filled.mjs.map +1 -0
  3135. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pyramid-maya.mjs +162 -0
  3136. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pyramid-maya.mjs.map +1 -0
  3137. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pyramid.mjs +149 -0
  3138. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/pyramid.mjs.map +1 -0
  3139. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/qrcode.mjs +239 -0
  3140. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/qrcode.mjs.map +1 -0
  3141. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/quadratic.mjs +128 -0
  3142. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/quadratic.mjs.map +1 -0
  3143. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/questionnaire-double-filled.mjs +125 -0
  3144. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/questionnaire-double-filled.mjs.map +1 -0
  3145. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/questionnaire-double.mjs +144 -0
  3146. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/questionnaire-double.mjs.map +1 -0
  3147. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/questionnaire-filled.mjs +119 -0
  3148. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/questionnaire-filled.mjs.map +1 -0
  3149. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/questionnaire.mjs +144 -0
  3150. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/questionnaire.mjs.map +1 -0
  3151. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/queue-filled.mjs +125 -0
  3152. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/queue-filled.mjs.map +1 -0
  3153. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/queue.mjs +144 -0
  3154. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/queue.mjs.map +1 -0
  3155. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/quote-filled.mjs +119 -0
  3156. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/quote-filled.mjs.map +1 -0
  3157. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/quote.mjs +159 -0
  3158. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/quote.mjs.map +1 -0
  3159. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radar.mjs +128 -0
  3160. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radar.mjs.map +1 -0
  3161. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radio-1-filled.mjs +125 -0
  3162. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radio-1-filled.mjs.map +1 -0
  3163. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radio-1.mjs +151 -0
  3164. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radio-1.mjs.map +1 -0
  3165. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radio-2-filled.mjs +125 -0
  3166. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radio-2-filled.mjs.map +1 -0
  3167. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radio-2.mjs +151 -0
  3168. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radio-2.mjs.map +1 -0
  3169. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radish-filled.mjs +119 -0
  3170. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radish-filled.mjs.map +1 -0
  3171. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radish.mjs +135 -0
  3172. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/radish.mjs.map +1 -0
  3173. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rain-heavy.mjs +137 -0
  3174. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rain-heavy.mjs.map +1 -0
  3175. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rain-light-filled.mjs +137 -0
  3176. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rain-light-filled.mjs.map +1 -0
  3177. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rain-light.mjs +190 -0
  3178. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rain-light.mjs.map +1 -0
  3179. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rain-medium.mjs +137 -0
  3180. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rain-medium.mjs.map +1 -0
  3181. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rainbow.mjs +128 -0
  3182. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rainbow.mjs.map +1 -0
  3183. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rectangle-filled.mjs +119 -0
  3184. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rectangle-filled.mjs.map +1 -0
  3185. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rectangle.mjs +135 -0
  3186. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rectangle.mjs.map +1 -0
  3187. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/refresh.mjs +128 -0
  3188. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/refresh.mjs.map +1 -0
  3189. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/relation.mjs +128 -0
  3190. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/relation.mjs.map +1 -0
  3191. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/relativity-filled.mjs +131 -0
  3192. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/relativity-filled.mjs.map +1 -0
  3193. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/relativity.mjs +137 -0
  3194. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/relativity.mjs.map +1 -0
  3195. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/remote-wave-filled.mjs +119 -0
  3196. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/remote-wave-filled.mjs.map +1 -0
  3197. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/remote-wave.mjs +137 -0
  3198. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/remote-wave.mjs.map +1 -0
  3199. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/remove.mjs +128 -0
  3200. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/remove.mjs.map +1 -0
  3201. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/replay-filled.mjs +119 -0
  3202. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/replay-filled.mjs.map +1 -0
  3203. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/replay.mjs +144 -0
  3204. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/replay.mjs.map +1 -0
  3205. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rice-ball-filled.mjs +125 -0
  3206. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rice-ball-filled.mjs.map +1 -0
  3207. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rice-ball.mjs +168 -0
  3208. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rice-ball.mjs.map +1 -0
  3209. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rice-filled.mjs +119 -0
  3210. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rice-filled.mjs.map +1 -0
  3211. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rice.mjs +180 -0
  3212. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rice.mjs.map +1 -0
  3213. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/roast-filled.mjs +119 -0
  3214. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/roast-filled.mjs.map +1 -0
  3215. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/roast.mjs +151 -0
  3216. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/roast.mjs.map +1 -0
  3217. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rocket-filled.mjs +119 -0
  3218. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rocket-filled.mjs.map +1 -0
  3219. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rocket.mjs +162 -0
  3220. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rocket.mjs.map +1 -0
  3221. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rollback.mjs +128 -0
  3222. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rollback.mjs.map +1 -0
  3223. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rollfront.mjs +128 -0
  3224. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rollfront.mjs.map +1 -0
  3225. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/root-list-filled.mjs +119 -0
  3226. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/root-list-filled.mjs.map +1 -0
  3227. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/root-list.mjs +144 -0
  3228. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/root-list.mjs.map +1 -0
  3229. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rotate-locked-filled.mjs +119 -0
  3230. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rotate-locked-filled.mjs.map +1 -0
  3231. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rotate-locked.mjs +144 -0
  3232. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rotate-locked.mjs.map +1 -0
  3233. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rotate.mjs +128 -0
  3234. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rotate.mjs.map +1 -0
  3235. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rotation.mjs +128 -0
  3236. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rotation.mjs.map +1 -0
  3237. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/round-filled.mjs +119 -0
  3238. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/round-filled.mjs.map +1 -0
  3239. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/round.mjs +139 -0
  3240. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/round.mjs.map +1 -0
  3241. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/router-wave-filled.mjs +119 -0
  3242. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/router-wave-filled.mjs.map +1 -0
  3243. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/router-wave.mjs +144 -0
  3244. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/router-wave.mjs.map +1 -0
  3245. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rss.mjs +128 -0
  3246. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/rss.mjs.map +1 -0
  3247. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ruler-filled.mjs +119 -0
  3248. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ruler-filled.mjs.map +1 -0
  3249. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ruler.mjs +135 -0
  3250. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ruler.mjs.map +1 -0
  3251. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sailing-hotel-filled.mjs +137 -0
  3252. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sailing-hotel-filled.mjs.map +1 -0
  3253. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sailing-hotel.mjs +135 -0
  3254. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sailing-hotel.mjs.map +1 -0
  3255. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sandwich-filled.mjs +131 -0
  3256. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sandwich-filled.mjs.map +1 -0
  3257. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sandwich.mjs +142 -0
  3258. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sandwich.mjs.map +1 -0
  3259. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/saturation-filled.mjs +119 -0
  3260. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/saturation-filled.mjs.map +1 -0
  3261. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/saturation.mjs +150 -0
  3262. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/saturation.mjs.map +1 -0
  3263. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sausage-filled.mjs +119 -0
  3264. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sausage-filled.mjs.map +1 -0
  3265. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sausage.mjs +135 -0
  3266. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sausage.mjs.map +1 -0
  3267. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/save-filled.mjs +131 -0
  3268. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/save-filled.mjs.map +1 -0
  3269. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/save.mjs +172 -0
  3270. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/save.mjs.map +1 -0
  3271. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/saving-pot-filled.mjs +125 -0
  3272. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/saving-pot-filled.mjs.map +1 -0
  3273. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/saving-pot.mjs +145 -0
  3274. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/saving-pot.mjs.map +1 -0
  3275. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/scan.mjs +137 -0
  3276. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/scan.mjs.map +1 -0
  3277. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/screen-4k-filled.mjs +119 -0
  3278. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/screen-4k-filled.mjs.map +1 -0
  3279. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/screen-4k.mjs +143 -0
  3280. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/screen-4k.mjs.map +1 -0
  3281. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/screencast-filled.mjs +125 -0
  3282. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/screencast-filled.mjs.map +1 -0
  3283. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/screencast.mjs +137 -0
  3284. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/screencast.mjs.map +1 -0
  3285. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/screenshot.mjs +162 -0
  3286. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/screenshot.mjs.map +1 -0
  3287. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/scroll-bar-filled.mjs +119 -0
  3288. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/scroll-bar-filled.mjs.map +1 -0
  3289. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/scroll-bar.mjs +143 -0
  3290. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/scroll-bar.mjs.map +1 -0
  3291. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sd-card-1-filled.mjs +119 -0
  3292. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sd-card-1-filled.mjs.map +1 -0
  3293. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sd-card-1.mjs +144 -0
  3294. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sd-card-1.mjs.map +1 -0
  3295. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sd-card-filled.mjs +119 -0
  3296. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sd-card-filled.mjs.map +1 -0
  3297. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sd-card.mjs +144 -0
  3298. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sd-card.mjs.map +1 -0
  3299. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/seal-filled.mjs +125 -0
  3300. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/seal-filled.mjs.map +1 -0
  3301. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/seal.mjs +144 -0
  3302. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/seal.mjs.map +1 -0
  3303. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/search-error-filled.mjs +125 -0
  3304. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/search-error-filled.mjs.map +1 -0
  3305. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/search-error.mjs +137 -0
  3306. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/search-error.mjs.map +1 -0
  3307. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/search-filled.mjs +119 -0
  3308. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/search-filled.mjs.map +1 -0
  3309. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/search.mjs +144 -0
  3310. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/search.mjs.map +1 -0
  3311. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/secured-filled.mjs +119 -0
  3312. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/secured-filled.mjs.map +1 -0
  3313. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/secured.mjs +148 -0
  3314. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/secured.mjs.map +1 -0
  3315. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/send-cancel-filled.mjs +125 -0
  3316. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/send-cancel-filled.mjs.map +1 -0
  3317. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/send-cancel.mjs +138 -0
  3318. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/send-cancel.mjs.map +1 -0
  3319. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/send-filled.mjs +119 -0
  3320. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/send-filled.mjs.map +1 -0
  3321. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/send.mjs +136 -0
  3322. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/send.mjs.map +1 -0
  3323. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sensors-1.mjs +144 -0
  3324. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sensors-1.mjs.map +1 -0
  3325. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sensors-2.mjs +128 -0
  3326. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sensors-2.mjs.map +1 -0
  3327. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sensors-off.mjs +137 -0
  3328. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sensors-off.mjs.map +1 -0
  3329. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sensors.mjs +128 -0
  3330. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sensors.mjs.map +1 -0
  3331. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sequence-filled.mjs +119 -0
  3332. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sequence-filled.mjs.map +1 -0
  3333. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sequence.mjs +155 -0
  3334. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sequence.mjs.map +1 -0
  3335. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/serenity-filled.mjs +119 -0
  3336. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/serenity-filled.mjs.map +1 -0
  3337. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/serenity.mjs +144 -0
  3338. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/serenity.mjs.map +1 -0
  3339. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/server-filled.mjs +125 -0
  3340. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/server-filled.mjs.map +1 -0
  3341. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/server.mjs +175 -0
  3342. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/server.mjs.map +1 -0
  3343. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/service-filled.mjs +119 -0
  3344. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/service-filled.mjs.map +1 -0
  3345. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/service.mjs +152 -0
  3346. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/service.mjs.map +1 -0
  3347. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/setting-1-filled.mjs +119 -0
  3348. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/setting-1-filled.mjs.map +1 -0
  3349. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/setting-1.mjs +155 -0
  3350. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/setting-1.mjs.map +1 -0
  3351. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/setting-filled.mjs +119 -0
  3352. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/setting-filled.mjs.map +1 -0
  3353. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/setting.mjs +153 -0
  3354. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/setting.mjs.map +1 -0
  3355. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/share-1-filled.mjs +119 -0
  3356. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/share-1-filled.mjs.map +1 -0
  3357. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/share-1.mjs +135 -0
  3358. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/share-1.mjs.map +1 -0
  3359. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/share-filled.mjs +119 -0
  3360. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/share-filled.mjs.map +1 -0
  3361. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/share.mjs +158 -0
  3362. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/share.mjs.map +1 -0
  3363. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sharpness-filled.mjs +119 -0
  3364. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sharpness-filled.mjs.map +1 -0
  3365. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sharpness.mjs +135 -0
  3366. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sharpness.mjs.map +1 -0
  3367. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shield-error-filled.mjs +119 -0
  3368. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shield-error-filled.mjs.map +1 -0
  3369. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shield-error.mjs +148 -0
  3370. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shield-error.mjs.map +1 -0
  3371. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shimen-filled.mjs +119 -0
  3372. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shimen-filled.mjs.map +1 -0
  3373. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shimen.mjs +172 -0
  3374. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shimen.mjs.map +1 -0
  3375. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-1-filled.mjs +131 -0
  3376. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-1-filled.mjs.map +1 -0
  3377. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-1.mjs +172 -0
  3378. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-1.mjs.map +1 -0
  3379. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-2-filled.mjs +125 -0
  3380. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-2-filled.mjs.map +1 -0
  3381. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-2.mjs +151 -0
  3382. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-2.mjs.map +1 -0
  3383. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-3-filled.mjs +131 -0
  3384. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-3-filled.mjs.map +1 -0
  3385. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-3.mjs +172 -0
  3386. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-3.mjs.map +1 -0
  3387. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-4-filled.mjs +125 -0
  3388. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-4-filled.mjs.map +1 -0
  3389. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-4.mjs +151 -0
  3390. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-4.mjs.map +1 -0
  3391. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-5-filled.mjs +131 -0
  3392. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-5-filled.mjs.map +1 -0
  3393. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-5.mjs +150 -0
  3394. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-5.mjs.map +1 -0
  3395. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-filled.mjs +119 -0
  3396. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop-filled.mjs.map +1 -0
  3397. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop.mjs +135 -0
  3398. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shop.mjs.map +1 -0
  3399. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shrimp-filled.mjs +149 -0
  3400. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shrimp-filled.mjs.map +1 -0
  3401. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shrimp.mjs +135 -0
  3402. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shrimp.mjs.map +1 -0
  3403. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shrink-horizontal.mjs +128 -0
  3404. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shrink-horizontal.mjs.map +1 -0
  3405. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shrink-vertical.mjs +128 -0
  3406. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shrink-vertical.mjs.map +1 -0
  3407. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shutter-filled.mjs +149 -0
  3408. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shutter-filled.mjs.map +1 -0
  3409. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shutter.mjs +141 -0
  3410. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shutter.mjs.map +1 -0
  3411. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shutup-filled.mjs +119 -0
  3412. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shutup-filled.mjs.map +1 -0
  3413. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shutup.mjs +144 -0
  3414. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/shutup.mjs.map +1 -0
  3415. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card-1-filled.mjs +119 -0
  3416. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card-1-filled.mjs.map +1 -0
  3417. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card-1.mjs +144 -0
  3418. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card-1.mjs.map +1 -0
  3419. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card-2-filled.mjs +119 -0
  3420. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card-2-filled.mjs.map +1 -0
  3421. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card-2.mjs +144 -0
  3422. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card-2.mjs.map +1 -0
  3423. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card-filled.mjs +119 -0
  3424. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card-filled.mjs.map +1 -0
  3425. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card.mjs +144 -0
  3426. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sim-card.mjs.map +1 -0
  3427. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sinister-smile-filled.mjs +119 -0
  3428. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sinister-smile-filled.mjs.map +1 -0
  3429. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sinister-smile.mjs +144 -0
  3430. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sinister-smile.mjs.map +1 -0
  3431. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sip-filled.mjs +125 -0
  3432. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sip-filled.mjs.map +1 -0
  3433. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sip.mjs +142 -0
  3434. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sip.mjs.map +1 -0
  3435. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sitemap-filled.mjs +119 -0
  3436. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sitemap-filled.mjs.map +1 -0
  3437. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sitemap.mjs +158 -0
  3438. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sitemap.mjs.map +1 -0
  3439. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/slash.mjs +128 -0
  3440. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/slash.mjs.map +1 -0
  3441. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sleep-filled.mjs +119 -0
  3442. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sleep-filled.mjs.map +1 -0
  3443. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sleep.mjs +144 -0
  3444. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sleep.mjs.map +1 -0
  3445. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/slice-filled.mjs +119 -0
  3446. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/slice-filled.mjs.map +1 -0
  3447. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/slice.mjs +141 -0
  3448. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/slice.mjs.map +1 -0
  3449. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/slideshow-filled.mjs +119 -0
  3450. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/slideshow-filled.mjs.map +1 -0
  3451. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/slideshow.mjs +144 -0
  3452. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/slideshow.mjs.map +1 -0
  3453. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/smile-filled.mjs +119 -0
  3454. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/smile-filled.mjs.map +1 -0
  3455. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/smile.mjs +144 -0
  3456. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/smile.mjs.map +1 -0
  3457. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sneer-filled.mjs +119 -0
  3458. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sneer-filled.mjs.map +1 -0
  3459. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sneer.mjs +144 -0
  3460. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sneer.mjs.map +1 -0
  3461. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/snowflake.mjs +128 -0
  3462. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/snowflake.mjs.map +1 -0
  3463. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sonic.mjs +128 -0
  3464. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sonic.mjs.map +1 -0
  3465. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-down-filled.mjs +131 -0
  3466. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-down-filled.mjs.map +1 -0
  3467. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-down.mjs +151 -0
  3468. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-down.mjs.map +1 -0
  3469. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-filled.mjs +137 -0
  3470. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-filled.mjs.map +1 -0
  3471. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-high-filled.mjs +143 -0
  3472. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-high-filled.mjs.map +1 -0
  3473. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-high.mjs +151 -0
  3474. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-high.mjs.map +1 -0
  3475. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-low-filled.mjs +131 -0
  3476. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-low-filled.mjs.map +1 -0
  3477. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-low.mjs +151 -0
  3478. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-low.mjs.map +1 -0
  3479. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-mute-1-filled.mjs +131 -0
  3480. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-mute-1-filled.mjs.map +1 -0
  3481. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-mute-1.mjs +151 -0
  3482. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-mute-1.mjs.map +1 -0
  3483. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-mute-filled.mjs +125 -0
  3484. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-mute-filled.mjs.map +1 -0
  3485. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-mute.mjs +142 -0
  3486. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-mute.mjs.map +1 -0
  3487. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-up-filled.mjs +131 -0
  3488. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-up-filled.mjs.map +1 -0
  3489. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-up.mjs +151 -0
  3490. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound-up.mjs.map +1 -0
  3491. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound.mjs +151 -0
  3492. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sound.mjs.map +1 -0
  3493. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/space.mjs +128 -0
  3494. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/space.mjs.map +1 -0
  3495. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/speechless-1-filled.mjs +119 -0
  3496. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/speechless-1-filled.mjs.map +1 -0
  3497. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/speechless-1.mjs +144 -0
  3498. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/speechless-1.mjs.map +1 -0
  3499. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/speechless-filled.mjs +119 -0
  3500. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/speechless-filled.mjs.map +1 -0
  3501. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/speechless.mjs +144 -0
  3502. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/speechless.mjs.map +1 -0
  3503. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/star-filled.mjs +119 -0
  3504. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/star-filled.mjs.map +1 -0
  3505. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/star.mjs +135 -0
  3506. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/star.mjs.map +1 -0
  3507. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/statue-of-jesus-filled.mjs +119 -0
  3508. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/statue-of-jesus-filled.mjs.map +1 -0
  3509. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/statue-of-jesus.mjs +134 -0
  3510. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/statue-of-jesus.mjs.map +1 -0
  3511. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sticky-note-filled.mjs +119 -0
  3512. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sticky-note-filled.mjs.map +1 -0
  3513. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sticky-note.mjs +144 -0
  3514. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sticky-note.mjs.map +1 -0
  3515. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/stop-circle-filled.mjs +119 -0
  3516. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/stop-circle-filled.mjs.map +1 -0
  3517. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/stop-circle-stroke-filled.mjs +119 -0
  3518. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/stop-circle-stroke-filled.mjs.map +1 -0
  3519. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/stop-circle-stroke.mjs +149 -0
  3520. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/stop-circle-stroke.mjs.map +1 -0
  3521. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/stop-circle.mjs +131 -0
  3522. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/stop-circle.mjs.map +1 -0
  3523. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/stop.mjs +120 -0
  3524. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/stop.mjs.map +1 -0
  3525. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/store-filled.mjs +119 -0
  3526. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/store-filled.mjs.map +1 -0
  3527. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/store.mjs +142 -0
  3528. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/store.mjs.map +1 -0
  3529. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/street-road-1-filled.mjs +119 -0
  3530. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/street-road-1-filled.mjs.map +1 -0
  3531. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/street-road-1.mjs +144 -0
  3532. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/street-road-1.mjs.map +1 -0
  3533. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/street-road-filled.mjs +119 -0
  3534. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/street-road-filled.mjs.map +1 -0
  3535. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/street-road.mjs +144 -0
  3536. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/street-road.mjs.map +1 -0
  3537. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/subtitle-filled.mjs +119 -0
  3538. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/subtitle-filled.mjs.map +1 -0
  3539. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/subtitle.mjs +143 -0
  3540. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/subtitle.mjs.map +1 -0
  3541. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/subway-line-filled.mjs +119 -0
  3542. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/subway-line-filled.mjs.map +1 -0
  3543. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/subway-line.mjs +152 -0
  3544. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/subway-line.mjs.map +1 -0
  3545. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sum.mjs +128 -0
  3546. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sum.mjs.map +1 -0
  3547. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sun-fall-filled.mjs +119 -0
  3548. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sun-fall-filled.mjs.map +1 -0
  3549. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sun-fall.mjs +137 -0
  3550. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sun-fall.mjs.map +1 -0
  3551. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sun-rising-filled.mjs +119 -0
  3552. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sun-rising-filled.mjs.map +1 -0
  3553. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sun-rising.mjs +137 -0
  3554. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sun-rising.mjs.map +1 -0
  3555. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sunny-filled.mjs +119 -0
  3556. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sunny-filled.mjs.map +1 -0
  3557. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sunny.mjs +143 -0
  3558. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/sunny.mjs.map +1 -0
  3559. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/support-filled.mjs +137 -0
  3560. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/support-filled.mjs.map +1 -0
  3561. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/support.mjs +195 -0
  3562. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/support.mjs.map +1 -0
  3563. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/surprised-1-filled.mjs +125 -0
  3564. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/surprised-1-filled.mjs.map +1 -0
  3565. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/surprised-1.mjs +150 -0
  3566. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/surprised-1.mjs.map +1 -0
  3567. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/surprised-filled.mjs +125 -0
  3568. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/surprised-filled.mjs.map +1 -0
  3569. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/surprised.mjs +188 -0
  3570. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/surprised.mjs.map +1 -0
  3571. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swap-left.mjs +128 -0
  3572. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swap-left.mjs.map +1 -0
  3573. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swap-right.mjs +128 -0
  3574. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swap-right.mjs.map +1 -0
  3575. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swap.mjs +128 -0
  3576. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swap.mjs.map +1 -0
  3577. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swear-1-filled.mjs +119 -0
  3578. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swear-1-filled.mjs.map +1 -0
  3579. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swear-1.mjs +151 -0
  3580. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swear-1.mjs.map +1 -0
  3581. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swear-2-filled.mjs +125 -0
  3582. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swear-2-filled.mjs.map +1 -0
  3583. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swear-2.mjs +151 -0
  3584. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/swear-2.mjs.map +1 -0
  3585. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-2.mjs +128 -0
  3586. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-2.mjs.map +1 -0
  3587. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-3-filled.mjs +119 -0
  3588. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-3-filled.mjs.map +1 -0
  3589. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-3.mjs +183 -0
  3590. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-3.mjs.map +1 -0
  3591. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-application-filled.mjs +125 -0
  3592. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-application-filled.mjs.map +1 -0
  3593. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-application.mjs +181 -0
  3594. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-application.mjs.map +1 -0
  3595. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-blocked-filled.mjs +131 -0
  3596. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-blocked-filled.mjs.map +1 -0
  3597. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-blocked.mjs +144 -0
  3598. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-blocked.mjs.map +1 -0
  3599. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-code-filled.mjs +125 -0
  3600. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-code-filled.mjs.map +1 -0
  3601. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-code.mjs +144 -0
  3602. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-code.mjs.map +1 -0
  3603. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-components-filled.mjs +119 -0
  3604. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-components-filled.mjs.map +1 -0
  3605. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-components.mjs +159 -0
  3606. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-components.mjs.map +1 -0
  3607. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-coordinate-filled.mjs +119 -0
  3608. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-coordinate-filled.mjs.map +1 -0
  3609. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-coordinate.mjs +135 -0
  3610. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-coordinate.mjs.map +1 -0
  3611. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-device-filled.mjs +125 -0
  3612. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-device-filled.mjs.map +1 -0
  3613. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-device.mjs +151 -0
  3614. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-device.mjs.map +1 -0
  3615. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-interface-filled.mjs +125 -0
  3616. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-interface-filled.mjs.map +1 -0
  3617. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-interface.mjs +172 -0
  3618. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-interface.mjs.map +1 -0
  3619. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-location-filled.mjs +131 -0
  3620. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-location-filled.mjs.map +1 -0
  3621. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-location.mjs +144 -0
  3622. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-location.mjs.map +1 -0
  3623. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-locked-filled.mjs +131 -0
  3624. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-locked-filled.mjs.map +1 -0
  3625. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-locked.mjs +144 -0
  3626. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-locked.mjs.map +1 -0
  3627. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-log-filled.mjs +125 -0
  3628. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-log-filled.mjs.map +1 -0
  3629. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-log.mjs +151 -0
  3630. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-log.mjs.map +1 -0
  3631. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-marked-filled.mjs +131 -0
  3632. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-marked-filled.mjs.map +1 -0
  3633. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-marked.mjs +143 -0
  3634. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-marked.mjs.map +1 -0
  3635. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-messages-filled.mjs +119 -0
  3636. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-messages-filled.mjs.map +1 -0
  3637. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-messages.mjs +151 -0
  3638. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-messages.mjs.map +1 -0
  3639. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-regulation-filled.mjs +125 -0
  3640. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-regulation-filled.mjs.map +1 -0
  3641. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-regulation.mjs +144 -0
  3642. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-regulation.mjs.map +1 -0
  3643. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-search-filled.mjs +131 -0
  3644. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-search-filled.mjs.map +1 -0
  3645. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-search.mjs +144 -0
  3646. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-search.mjs.map +1 -0
  3647. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-setting-filled.mjs +131 -0
  3648. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-setting-filled.mjs.map +1 -0
  3649. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-setting.mjs +144 -0
  3650. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-setting.mjs.map +1 -0
  3651. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-storage-filled.mjs +119 -0
  3652. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-storage-filled.mjs.map +1 -0
  3653. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-storage.mjs +151 -0
  3654. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-storage.mjs.map +1 -0
  3655. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-sum.mjs +147 -0
  3656. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-sum.mjs.map +1 -0
  3657. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-unlocked-filled.mjs +131 -0
  3658. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-unlocked-filled.mjs.map +1 -0
  3659. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-unlocked.mjs +144 -0
  3660. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/system-unlocked.mjs.map +1 -0
  3661. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tab-filled.mjs +119 -0
  3662. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tab-filled.mjs.map +1 -0
  3663. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tab.mjs +179 -0
  3664. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tab.mjs.map +1 -0
  3665. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-1-filled.mjs +121 -0
  3666. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-1-filled.mjs.map +1 -0
  3667. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-1.mjs +141 -0
  3668. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-1.mjs.map +1 -0
  3669. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-2-filled.mjs +149 -0
  3670. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-2-filled.mjs.map +1 -0
  3671. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-2.mjs +135 -0
  3672. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-2.mjs.map +1 -0
  3673. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-add-filled.mjs +119 -0
  3674. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-add-filled.mjs.map +1 -0
  3675. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-add.mjs +151 -0
  3676. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-add.mjs.map +1 -0
  3677. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-filled.mjs +119 -0
  3678. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-filled.mjs.map +1 -0
  3679. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-split-filled.mjs +119 -0
  3680. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-split-filled.mjs.map +1 -0
  3681. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-split.mjs +197 -0
  3682. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table-split.mjs.map +1 -0
  3683. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table.mjs +142 -0
  3684. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/table.mjs.map +1 -0
  3685. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tag-filled.mjs +119 -0
  3686. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tag-filled.mjs.map +1 -0
  3687. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tag.mjs +146 -0
  3688. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tag.mjs.map +1 -0
  3689. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tangerinr-filled.mjs +119 -0
  3690. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tangerinr-filled.mjs.map +1 -0
  3691. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tangerinr.mjs +172 -0
  3692. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tangerinr.mjs.map +1 -0
  3693. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tape-filled.mjs +119 -0
  3694. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tape-filled.mjs.map +1 -0
  3695. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tape.mjs +194 -0
  3696. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tape.mjs.map +1 -0
  3697. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-1-filled.mjs +125 -0
  3698. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-1-filled.mjs.map +1 -0
  3699. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-1.mjs +141 -0
  3700. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-1.mjs.map +1 -0
  3701. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-add-1.mjs +137 -0
  3702. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-add-1.mjs.map +1 -0
  3703. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-add-filled.mjs +131 -0
  3704. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-add-filled.mjs.map +1 -0
  3705. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-add.mjs +137 -0
  3706. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-add.mjs.map +1 -0
  3707. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-checked-1.mjs +137 -0
  3708. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-checked-1.mjs.map +1 -0
  3709. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-checked-filled.mjs +131 -0
  3710. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-checked-filled.mjs.map +1 -0
  3711. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-checked.mjs +137 -0
  3712. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-checked.mjs.map +1 -0
  3713. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-double-filled.mjs +125 -0
  3714. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-double-filled.mjs.map +1 -0
  3715. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-double.mjs +144 -0
  3716. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-double.mjs.map +1 -0
  3717. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-error-filled.mjs +131 -0
  3718. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-error-filled.mjs.map +1 -0
  3719. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-error.mjs +137 -0
  3720. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-error.mjs.map +1 -0
  3721. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-filled.mjs +125 -0
  3722. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-filled.mjs.map +1 -0
  3723. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-location-filled.mjs +131 -0
  3724. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-location-filled.mjs.map +1 -0
  3725. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-location.mjs +144 -0
  3726. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-location.mjs.map +1 -0
  3727. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-marked-filled.mjs +131 -0
  3728. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-marked-filled.mjs.map +1 -0
  3729. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-marked.mjs +144 -0
  3730. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-marked.mjs.map +1 -0
  3731. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-setting-filled.mjs +131 -0
  3732. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-setting-filled.mjs.map +1 -0
  3733. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-setting.mjs +144 -0
  3734. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-setting.mjs.map +1 -0
  3735. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-time-filled.mjs +131 -0
  3736. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-time-filled.mjs.map +1 -0
  3737. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-time.mjs +144 -0
  3738. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-time.mjs.map +1 -0
  3739. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-visible-filled.mjs +131 -0
  3740. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-visible-filled.mjs.map +1 -0
  3741. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-visible.mjs +144 -0
  3742. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task-visible.mjs.map +1 -0
  3743. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task.mjs +150 -0
  3744. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/task.mjs.map +1 -0
  3745. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tea-filled.mjs +119 -0
  3746. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tea-filled.mjs.map +1 -0
  3747. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tea.mjs +144 -0
  3748. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tea.mjs.map +1 -0
  3749. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/teahouse-filled.mjs +119 -0
  3750. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/teahouse-filled.mjs.map +1 -0
  3751. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/teahouse.mjs +135 -0
  3752. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/teahouse.mjs.map +1 -0
  3753. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/template-filled.mjs +131 -0
  3754. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/template-filled.mjs.map +1 -0
  3755. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/template.mjs +141 -0
  3756. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/template.mjs.map +1 -0
  3757. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/temple-filled.mjs +119 -0
  3758. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/temple-filled.mjs.map +1 -0
  3759. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/temple.mjs +142 -0
  3760. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/temple.mjs.map +1 -0
  3761. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-rectangle-1-filled.mjs +125 -0
  3762. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-rectangle-1-filled.mjs.map +1 -0
  3763. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-rectangle-1.mjs +151 -0
  3764. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-rectangle-1.mjs.map +1 -0
  3765. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-rectangle-filled.mjs +119 -0
  3766. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-rectangle-filled.mjs.map +1 -0
  3767. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-rectangle.mjs +144 -0
  3768. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-rectangle.mjs.map +1 -0
  3769. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-window-filled.mjs +125 -0
  3770. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-window-filled.mjs.map +1 -0
  3771. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-window.mjs +151 -0
  3772. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal-window.mjs.map +1 -0
  3773. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal.mjs +128 -0
  3774. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/terminal.mjs.map +1 -0
  3775. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textbox-filled.mjs +119 -0
  3776. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textbox-filled.mjs.map +1 -0
  3777. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textbox.mjs +143 -0
  3778. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textbox.mjs.map +1 -0
  3779. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-bold.mjs +127 -0
  3780. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-bold.mjs.map +1 -0
  3781. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-color.mjs +137 -0
  3782. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-color.mjs.map +1 -0
  3783. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-italic.mjs +128 -0
  3784. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-italic.mjs.map +1 -0
  3785. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-strikethrough.mjs +128 -0
  3786. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-strikethrough.mjs.map +1 -0
  3787. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-underline.mjs +137 -0
  3788. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-underline.mjs.map +1 -0
  3789. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-wrap.mjs +128 -0
  3790. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/textformat-wrap.mjs.map +1 -0
  3791. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/theaters-filled.mjs +119 -0
  3792. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/theaters-filled.mjs.map +1 -0
  3793. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/theaters.mjs +146 -0
  3794. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/theaters.mjs.map +1 -0
  3795. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down-1-filled.mjs +119 -0
  3796. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down-1-filled.mjs.map +1 -0
  3797. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down-1.mjs +135 -0
  3798. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down-1.mjs.map +1 -0
  3799. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down-2-filled.mjs +125 -0
  3800. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down-2-filled.mjs.map +1 -0
  3801. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down-2.mjs +142 -0
  3802. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down-2.mjs.map +1 -0
  3803. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down-filled.mjs +119 -0
  3804. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down-filled.mjs.map +1 -0
  3805. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down.mjs +135 -0
  3806. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-down.mjs.map +1 -0
  3807. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up-1-filled.mjs +119 -0
  3808. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up-1-filled.mjs.map +1 -0
  3809. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up-1.mjs +135 -0
  3810. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up-1.mjs.map +1 -0
  3811. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up-2-filled.mjs +125 -0
  3812. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up-2-filled.mjs.map +1 -0
  3813. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up-2.mjs +142 -0
  3814. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up-2.mjs.map +1 -0
  3815. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up-filled.mjs +125 -0
  3816. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up-filled.mjs.map +1 -0
  3817. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up.mjs +135 -0
  3818. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thumb-up.mjs.map +1 -0
  3819. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunder.mjs +137 -0
  3820. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunder.mjs.map +1 -0
  3821. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunderstorm-night-filled.mjs +119 -0
  3822. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunderstorm-night-filled.mjs.map +1 -0
  3823. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunderstorm-night.mjs +144 -0
  3824. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunderstorm-night.mjs.map +1 -0
  3825. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunderstorm-sunny-filled.mjs +119 -0
  3826. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunderstorm-sunny-filled.mjs.map +1 -0
  3827. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunderstorm-sunny.mjs +144 -0
  3828. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunderstorm-sunny.mjs.map +1 -0
  3829. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunderstorm.mjs +137 -0
  3830. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/thunderstorm.mjs.map +1 -0
  3831. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ticket-filled.mjs +119 -0
  3832. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ticket-filled.mjs.map +1 -0
  3833. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ticket.mjs +143 -0
  3834. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/ticket.mjs.map +1 -0
  3835. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/time-filled.mjs +119 -0
  3836. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/time-filled.mjs.map +1 -0
  3837. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/time.mjs +144 -0
  3838. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/time.mjs.map +1 -0
  3839. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tips-double-filled.mjs +119 -0
  3840. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tips-double-filled.mjs.map +1 -0
  3841. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tips-double.mjs +144 -0
  3842. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tips-double.mjs.map +1 -0
  3843. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tips-filled.mjs +119 -0
  3844. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tips-filled.mjs.map +1 -0
  3845. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tips.mjs +135 -0
  3846. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tips.mjs.map +1 -0
  3847. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tomato-filled.mjs +119 -0
  3848. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tomato-filled.mjs.map +1 -0
  3849. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tomato.mjs +135 -0
  3850. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tomato.mjs.map +1 -0
  3851. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tools-circle-filled.mjs +119 -0
  3852. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tools-circle-filled.mjs.map +1 -0
  3853. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tools-circle.mjs +151 -0
  3854. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tools-circle.mjs.map +1 -0
  3855. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tools-filled.mjs +119 -0
  3856. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tools-filled.mjs.map +1 -0
  3857. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tools.mjs +128 -0
  3858. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tools.mjs.map +1 -0
  3859. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tornado.mjs +128 -0
  3860. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tornado.mjs.map +1 -0
  3861. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-1-filled.mjs +119 -0
  3862. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-1-filled.mjs.map +1 -0
  3863. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-1.mjs +142 -0
  3864. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-1.mjs.map +1 -0
  3865. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-2-filled.mjs +119 -0
  3866. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-2-filled.mjs.map +1 -0
  3867. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-2.mjs +153 -0
  3868. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-2.mjs.map +1 -0
  3869. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-3-filled.mjs +119 -0
  3870. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-3-filled.mjs.map +1 -0
  3871. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-3.mjs +142 -0
  3872. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-3.mjs.map +1 -0
  3873. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-clock-filled.mjs +125 -0
  3874. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-clock-filled.mjs.map +1 -0
  3875. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-clock.mjs +151 -0
  3876. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-clock.mjs.map +1 -0
  3877. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-filled.mjs +119 -0
  3878. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower-filled.mjs.map +1 -0
  3879. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower.mjs +142 -0
  3880. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tower.mjs.map +1 -0
  3881. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/town-filled.mjs +137 -0
  3882. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/town-filled.mjs.map +1 -0
  3883. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/town.mjs +196 -0
  3884. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/town.mjs.map +1 -0
  3885. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/traffic-events-filled.mjs +131 -0
  3886. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/traffic-events-filled.mjs.map +1 -0
  3887. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/traffic-events.mjs +142 -0
  3888. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/traffic-events.mjs.map +1 -0
  3889. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/traffic-filled.mjs +119 -0
  3890. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/traffic-filled.mjs.map +1 -0
  3891. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/traffic.mjs +189 -0
  3892. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/traffic.mjs.map +1 -0
  3893. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform-1-filled.mjs +119 -0
  3894. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform-1-filled.mjs.map +1 -0
  3895. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform-1.mjs +157 -0
  3896. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform-1.mjs.map +1 -0
  3897. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform-2.mjs +128 -0
  3898. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform-2.mjs.map +1 -0
  3899. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform-3.mjs +128 -0
  3900. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform-3.mjs.map +1 -0
  3901. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform-filled.mjs +119 -0
  3902. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform-filled.mjs.map +1 -0
  3903. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform.mjs +157 -0
  3904. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/transform.mjs.map +1 -0
  3905. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/translate-1.mjs +137 -0
  3906. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/translate-1.mjs.map +1 -0
  3907. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/translate.mjs +137 -0
  3908. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/translate.mjs.map +1 -0
  3909. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-list.mjs +155 -0
  3910. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-list.mjs.map +1 -0
  3911. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-round-dot-filled.mjs +119 -0
  3912. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-round-dot-filled.mjs.map +1 -0
  3913. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-round-dot-vertical-filled.mjs +119 -0
  3914. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-round-dot-vertical-filled.mjs.map +1 -0
  3915. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-round-dot-vertical.mjs +152 -0
  3916. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-round-dot-vertical.mjs.map +1 -0
  3917. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-round-dot.mjs +152 -0
  3918. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-round-dot.mjs.map +1 -0
  3919. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-square-dot-filled.mjs +119 -0
  3920. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-square-dot-filled.mjs.map +1 -0
  3921. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-square-dot-vertical-filled.mjs +119 -0
  3922. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-square-dot-vertical-filled.mjs.map +1 -0
  3923. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-square-dot-vertical.mjs +152 -0
  3924. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-square-dot-vertical.mjs.map +1 -0
  3925. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-square-dot.mjs +152 -0
  3926. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tree-square-dot.mjs.map +1 -0
  3927. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/trending-down.mjs +128 -0
  3928. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/trending-down.mjs.map +1 -0
  3929. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/trending-up.mjs +128 -0
  3930. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/trending-up.mjs.map +1 -0
  3931. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv-1-filled.mjs +119 -0
  3932. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv-1-filled.mjs.map +1 -0
  3933. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv-1.mjs +135 -0
  3934. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv-1.mjs.map +1 -0
  3935. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv-2-filled.mjs +119 -0
  3936. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv-2-filled.mjs.map +1 -0
  3937. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv-2.mjs +135 -0
  3938. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv-2.mjs.map +1 -0
  3939. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv-filled.mjs +125 -0
  3940. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv-filled.mjs.map +1 -0
  3941. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv.mjs +137 -0
  3942. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/tv.mjs.map +1 -0
  3943. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/typography-filled.mjs +119 -0
  3944. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/typography-filled.mjs.map +1 -0
  3945. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/typography.mjs +143 -0
  3946. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/typography.mjs.map +1 -0
  3947. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable-1-filled.mjs +119 -0
  3948. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable-1-filled.mjs.map +1 -0
  3949. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable-1.mjs +144 -0
  3950. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable-1.mjs.map +1 -0
  3951. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable-2-filled.mjs +119 -0
  3952. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable-2-filled.mjs.map +1 -0
  3953. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable-2.mjs +144 -0
  3954. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable-2.mjs.map +1 -0
  3955. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable-filled.mjs +119 -0
  3956. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable-filled.mjs.map +1 -0
  3957. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable.mjs +144 -0
  3958. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uncomfortable.mjs.map +1 -0
  3959. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-delivery-filled.mjs +125 -0
  3960. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-delivery-filled.mjs.map +1 -0
  3961. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-delivery.mjs +162 -0
  3962. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-delivery.mjs.map +1 -0
  3963. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-environment-protection-filled.mjs +119 -0
  3964. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-environment-protection-filled.mjs.map +1 -0
  3965. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-environment-protection.mjs +162 -0
  3966. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-environment-protection.mjs.map +1 -0
  3967. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-filled.mjs +119 -0
  3968. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-filled.mjs.map +1 -0
  3969. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-hold-up-filled.mjs +119 -0
  3970. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-hold-up-filled.mjs.map +1 -0
  3971. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-hold-up.mjs +162 -0
  3972. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-hold-up.mjs.map +1 -0
  3973. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-transaction-filled.mjs +119 -0
  3974. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-transaction-filled.mjs.map +1 -0
  3975. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-transaction.mjs +164 -0
  3976. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake-transaction.mjs.map +1 -0
  3977. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake.mjs +142 -0
  3978. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/undertake.mjs.map +1 -0
  3979. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unfold-less.mjs +128 -0
  3980. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unfold-less.mjs.map +1 -0
  3981. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unfold-more.mjs +128 -0
  3982. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unfold-more.mjs.map +1 -0
  3983. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unhappy-1-filled.mjs +119 -0
  3984. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unhappy-1-filled.mjs.map +1 -0
  3985. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unhappy-1.mjs +144 -0
  3986. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unhappy-1.mjs.map +1 -0
  3987. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unhappy-filled.mjs +119 -0
  3988. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unhappy-filled.mjs.map +1 -0
  3989. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unhappy.mjs +144 -0
  3990. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/unhappy.mjs.map +1 -0
  3991. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uninstall-filled.mjs +125 -0
  3992. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uninstall-filled.mjs.map +1 -0
  3993. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uninstall.mjs +144 -0
  3994. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/uninstall.mjs.map +1 -0
  3995. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/upload-1.mjs +128 -0
  3996. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/upload-1.mjs.map +1 -0
  3997. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/upload.mjs +137 -0
  3998. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/upload.mjs.map +1 -0
  3999. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/upscale.mjs +137 -0
  4000. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/upscale.mjs.map +1 -0
  4001. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usb-filled.mjs +119 -0
  4002. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usb-filled.mjs.map +1 -0
  4003. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usb.mjs +167 -0
  4004. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usb.mjs.map +1 -0
  4005. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-1-filled.mjs +119 -0
  4006. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-1-filled.mjs.map +1 -0
  4007. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-1.mjs +135 -0
  4008. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-1.mjs.map +1 -0
  4009. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-add-filled.mjs +131 -0
  4010. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-add-filled.mjs.map +1 -0
  4011. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-add.mjs +144 -0
  4012. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-add.mjs.map +1 -0
  4013. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-down-filled.mjs +131 -0
  4014. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-down-filled.mjs.map +1 -0
  4015. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-down.mjs +144 -0
  4016. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-down.mjs.map +1 -0
  4017. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-left-filled.mjs +131 -0
  4018. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-left-filled.mjs.map +1 -0
  4019. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-left.mjs +144 -0
  4020. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-left.mjs.map +1 -0
  4021. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-right-filled.mjs +131 -0
  4022. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-right-filled.mjs.map +1 -0
  4023. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-right.mjs +144 -0
  4024. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-right.mjs.map +1 -0
  4025. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-up-filled.mjs +131 -0
  4026. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-up-filled.mjs.map +1 -0
  4027. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-up.mjs +144 -0
  4028. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-arrow-up.mjs.map +1 -0
  4029. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-avatar-filled.mjs +119 -0
  4030. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-avatar-filled.mjs.map +1 -0
  4031. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-avatar.mjs +175 -0
  4032. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-avatar.mjs.map +1 -0
  4033. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-blocked-filled.mjs +131 -0
  4034. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-blocked-filled.mjs.map +1 -0
  4035. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-blocked.mjs +151 -0
  4036. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-blocked.mjs.map +1 -0
  4037. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-business-filled.mjs +125 -0
  4038. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-business-filled.mjs.map +1 -0
  4039. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-business.mjs +142 -0
  4040. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-business.mjs.map +1 -0
  4041. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-checked-1-filled.mjs +119 -0
  4042. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-checked-1-filled.mjs.map +1 -0
  4043. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-checked-1.mjs +144 -0
  4044. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-checked-1.mjs.map +1 -0
  4045. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-checked-filled.mjs +131 -0
  4046. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-checked-filled.mjs.map +1 -0
  4047. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-checked.mjs +144 -0
  4048. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-checked.mjs.map +1 -0
  4049. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-circle-filled.mjs +119 -0
  4050. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-circle-filled.mjs.map +1 -0
  4051. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-circle.mjs +179 -0
  4052. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-circle.mjs.map +1 -0
  4053. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-clear-filled.mjs +131 -0
  4054. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-clear-filled.mjs.map +1 -0
  4055. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-clear.mjs +144 -0
  4056. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-clear.mjs.map +1 -0
  4057. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-error-1-filled.mjs +119 -0
  4058. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-error-1-filled.mjs.map +1 -0
  4059. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-error-1.mjs +144 -0
  4060. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-error-1.mjs.map +1 -0
  4061. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-filled.mjs +119 -0
  4062. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-filled.mjs.map +1 -0
  4063. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-invisible-filled.mjs +131 -0
  4064. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-invisible-filled.mjs.map +1 -0
  4065. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-invisible.mjs +151 -0
  4066. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-invisible.mjs.map +1 -0
  4067. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-list-filled.mjs +119 -0
  4068. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-list-filled.mjs.map +1 -0
  4069. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-list.mjs +144 -0
  4070. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-list.mjs.map +1 -0
  4071. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-locked-filled.mjs +119 -0
  4072. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-locked-filled.mjs.map +1 -0
  4073. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-locked.mjs +151 -0
  4074. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-locked.mjs.map +1 -0
  4075. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-marked-filled.mjs +119 -0
  4076. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-marked-filled.mjs.map +1 -0
  4077. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-marked.mjs +150 -0
  4078. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-marked.mjs.map +1 -0
  4079. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-password-filled.mjs +131 -0
  4080. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-password-filled.mjs.map +1 -0
  4081. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-password.mjs +151 -0
  4082. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-password.mjs.map +1 -0
  4083. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-safety-filled.mjs +119 -0
  4084. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-safety-filled.mjs.map +1 -0
  4085. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-safety.mjs +151 -0
  4086. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-safety.mjs.map +1 -0
  4087. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-search-filled.mjs +131 -0
  4088. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-search-filled.mjs.map +1 -0
  4089. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-search.mjs +151 -0
  4090. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-search.mjs.map +1 -0
  4091. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-setting-filled.mjs +131 -0
  4092. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-setting-filled.mjs.map +1 -0
  4093. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-setting.mjs +151 -0
  4094. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-setting.mjs.map +1 -0
  4095. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk-1-filled.mjs +119 -0
  4096. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk-1-filled.mjs.map +1 -0
  4097. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk-1.mjs +144 -0
  4098. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk-1.mjs.map +1 -0
  4099. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk-filled.mjs +137 -0
  4100. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk-filled.mjs.map +1 -0
  4101. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk-off-1-filled.mjs +137 -0
  4102. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk-off-1-filled.mjs.map +1 -0
  4103. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk-off-1.mjs +137 -0
  4104. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk-off-1.mjs.map +1 -0
  4105. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk.mjs +144 -0
  4106. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-talk.mjs.map +1 -0
  4107. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-time-filled.mjs +131 -0
  4108. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-time-filled.mjs.map +1 -0
  4109. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-time.mjs +151 -0
  4110. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-time.mjs.map +1 -0
  4111. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-transmit-filled.mjs +137 -0
  4112. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-transmit-filled.mjs.map +1 -0
  4113. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-transmit.mjs +144 -0
  4114. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-transmit.mjs.map +1 -0
  4115. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-unknown-filled.mjs +137 -0
  4116. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-unknown-filled.mjs.map +1 -0
  4117. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-unknown.mjs +144 -0
  4118. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-unknown.mjs.map +1 -0
  4119. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-unlocked-filled.mjs +119 -0
  4120. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-unlocked-filled.mjs.map +1 -0
  4121. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-unlocked.mjs +151 -0
  4122. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-unlocked.mjs.map +1 -0
  4123. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-vip-filled.mjs +131 -0
  4124. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-vip-filled.mjs.map +1 -0
  4125. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-vip.mjs +150 -0
  4126. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-vip.mjs.map +1 -0
  4127. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-visible-filled.mjs +131 -0
  4128. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-visible-filled.mjs.map +1 -0
  4129. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-visible.mjs +151 -0
  4130. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user-visible.mjs.map +1 -0
  4131. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user.mjs +159 -0
  4132. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/user.mjs.map +1 -0
  4133. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usercase-filled.mjs +119 -0
  4134. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usercase-filled.mjs.map +1 -0
  4135. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usercase-link-filled.mjs +119 -0
  4136. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usercase-link-filled.mjs.map +1 -0
  4137. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usercase-link.mjs +167 -0
  4138. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usercase-link.mjs.map +1 -0
  4139. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usercase.mjs +161 -0
  4140. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usercase.mjs.map +1 -0
  4141. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup-add-filled.mjs +137 -0
  4142. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup-add-filled.mjs.map +1 -0
  4143. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup-add.mjs +144 -0
  4144. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup-add.mjs.map +1 -0
  4145. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup-clear-filled.mjs +137 -0
  4146. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup-clear-filled.mjs.map +1 -0
  4147. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup-clear.mjs +144 -0
  4148. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup-clear.mjs.map +1 -0
  4149. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup-filled.mjs +119 -0
  4150. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup-filled.mjs.map +1 -0
  4151. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup.mjs +168 -0
  4152. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/usergroup.mjs.map +1 -0
  4153. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/vehicle-filled.mjs +125 -0
  4154. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/vehicle-filled.mjs.map +1 -0
  4155. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/vehicle.mjs +144 -0
  4156. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/vehicle.mjs.map +1 -0
  4157. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/verified-filled.mjs +119 -0
  4158. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/verified-filled.mjs.map +1 -0
  4159. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/verified.mjs +145 -0
  4160. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/verified.mjs.map +1 -0
  4161. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/verify-filled.mjs +119 -0
  4162. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/verify-filled.mjs.map +1 -0
  4163. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/verify.mjs +144 -0
  4164. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/verify.mjs.map +1 -0
  4165. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/vertical-filled.mjs +125 -0
  4166. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/vertical-filled.mjs.map +1 -0
  4167. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/vertical.mjs +161 -0
  4168. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/vertical.mjs.map +1 -0
  4169. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-1-filled.mjs +119 -0
  4170. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-1-filled.mjs.map +1 -0
  4171. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-1.mjs +164 -0
  4172. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-1.mjs.map +1 -0
  4173. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-2-filled.mjs +119 -0
  4174. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-2-filled.mjs.map +1 -0
  4175. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-2.mjs +172 -0
  4176. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-2.mjs.map +1 -0
  4177. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-dollar-filled.mjs +119 -0
  4178. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-dollar-filled.mjs.map +1 -0
  4179. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-dollar.mjs +164 -0
  4180. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-dollar.mjs.map +1 -0
  4181. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-filled.mjs +119 -0
  4182. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-filled.mjs.map +1 -0
  4183. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-minus-filled.mjs +119 -0
  4184. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-minus-filled.mjs.map +1 -0
  4185. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-minus.mjs +164 -0
  4186. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-minus.mjs.map +1 -0
  4187. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-music-filled.mjs +119 -0
  4188. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-music-filled.mjs.map +1 -0
  4189. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-music.mjs +164 -0
  4190. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-music.mjs.map +1 -0
  4191. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-off-filled.mjs +125 -0
  4192. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-off-filled.mjs.map +1 -0
  4193. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-off.mjs +137 -0
  4194. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera-off.mjs.map +1 -0
  4195. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera.mjs +155 -0
  4196. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-camera.mjs.map +1 -0
  4197. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-filled.mjs +119 -0
  4198. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-filled.mjs.map +1 -0
  4199. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-library-filled.mjs +131 -0
  4200. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-library-filled.mjs.map +1 -0
  4201. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-library.mjs +150 -0
  4202. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video-library.mjs.map +1 -0
  4203. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video.mjs +149 -0
  4204. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/video.mjs.map +1 -0
  4205. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-agenda-filled.mjs +119 -0
  4206. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-agenda-filled.mjs.map +1 -0
  4207. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-agenda.mjs +159 -0
  4208. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-agenda.mjs.map +1 -0
  4209. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-column.mjs +128 -0
  4210. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-column.mjs.map +1 -0
  4211. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-in-ar-filled.mjs +155 -0
  4212. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-in-ar-filled.mjs.map +1 -0
  4213. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-in-ar.mjs +144 -0
  4214. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-in-ar.mjs.map +1 -0
  4215. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-list.mjs +128 -0
  4216. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-list.mjs.map +1 -0
  4217. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-module-filled.mjs +149 -0
  4218. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-module-filled.mjs.map +1 -0
  4219. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-module.mjs +135 -0
  4220. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/view-module.mjs.map +1 -0
  4221. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/visual-recognition-filled.mjs +131 -0
  4222. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/visual-recognition-filled.mjs.map +1 -0
  4223. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/visual-recognition.mjs +137 -0
  4224. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/visual-recognition.mjs.map +1 -0
  4225. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wallet-filled.mjs +119 -0
  4226. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wallet-filled.mjs.map +1 -0
  4227. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wallet.mjs +135 -0
  4228. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wallet.mjs.map +1 -0
  4229. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/watch-filled.mjs +119 -0
  4230. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/watch-filled.mjs.map +1 -0
  4231. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/watch.mjs +175 -0
  4232. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/watch.mjs.map +1 -0
  4233. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/watermelon-filled.mjs +125 -0
  4234. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/watermelon-filled.mjs.map +1 -0
  4235. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/watermelon.mjs +172 -0
  4236. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/watermelon.mjs.map +1 -0
  4237. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-bye-filled.mjs +125 -0
  4238. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-bye-filled.mjs.map +1 -0
  4239. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-bye.mjs +144 -0
  4240. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-bye.mjs.map +1 -0
  4241. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-left-filled.mjs +125 -0
  4242. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-left-filled.mjs.map +1 -0
  4243. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-left.mjs +144 -0
  4244. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-left.mjs.map +1 -0
  4245. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-right-filled.mjs +125 -0
  4246. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-right-filled.mjs.map +1 -0
  4247. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-right.mjs +144 -0
  4248. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wave-right.mjs.map +1 -0
  4249. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wealth-1-filled.mjs +137 -0
  4250. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wealth-1-filled.mjs.map +1 -0
  4251. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wealth-1.mjs +162 -0
  4252. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wealth-1.mjs.map +1 -0
  4253. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wealth-filled.mjs +131 -0
  4254. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wealth-filled.mjs.map +1 -0
  4255. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wealth.mjs +144 -0
  4256. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wealth.mjs.map +1 -0
  4257. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/widget-filled.mjs +119 -0
  4258. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/widget-filled.mjs.map +1 -0
  4259. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/widget.mjs +135 -0
  4260. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/widget.mjs.map +1 -0
  4261. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-1-filled.mjs +119 -0
  4262. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-1-filled.mjs.map +1 -0
  4263. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-1.mjs +127 -0
  4264. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-1.mjs.map +1 -0
  4265. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-no-filled.mjs +143 -0
  4266. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-no-filled.mjs.map +1 -0
  4267. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-no.mjs +137 -0
  4268. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-no.mjs.map +1 -0
  4269. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-off-1-filled.mjs +125 -0
  4270. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-off-1-filled.mjs.map +1 -0
  4271. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-off-1.mjs +137 -0
  4272. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-off-1.mjs.map +1 -0
  4273. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-off.mjs +137 -0
  4274. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi-off.mjs.map +1 -0
  4275. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi.mjs +128 -0
  4276. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wifi.mjs.map +1 -0
  4277. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/window-1-filled.mjs +119 -0
  4278. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/window-1-filled.mjs.map +1 -0
  4279. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/window-1.mjs +142 -0
  4280. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/window-1.mjs.map +1 -0
  4281. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/window-filled.mjs +119 -0
  4282. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/window-filled.mjs.map +1 -0
  4283. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/window.mjs +142 -0
  4284. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/window.mjs.map +1 -0
  4285. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/windy-rain.mjs +128 -0
  4286. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/windy-rain.mjs.map +1 -0
  4287. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/windy.mjs +128 -0
  4288. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/windy.mjs.map +1 -0
  4289. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wink-filled.mjs +119 -0
  4290. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wink-filled.mjs.map +1 -0
  4291. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wink.mjs +144 -0
  4292. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wink.mjs.map +1 -0
  4293. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work-filled.mjs +119 -0
  4294. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work-filled.mjs.map +1 -0
  4295. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work-history-filled.mjs +125 -0
  4296. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work-history-filled.mjs.map +1 -0
  4297. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work-history.mjs +144 -0
  4298. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work-history.mjs.map +1 -0
  4299. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work-off-filled.mjs +125 -0
  4300. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work-off-filled.mjs.map +1 -0
  4301. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work-off.mjs +138 -0
  4302. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work-off.mjs.map +1 -0
  4303. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work.mjs +135 -0
  4304. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/work.mjs.map +1 -0
  4305. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wry-smile-filled.mjs +119 -0
  4306. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wry-smile-filled.mjs.map +1 -0
  4307. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wry-smile.mjs +144 -0
  4308. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/wry-smile.mjs.map +1 -0
  4309. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/zoom-in-filled.mjs +119 -0
  4310. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/zoom-in-filled.mjs.map +1 -0
  4311. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/zoom-in.mjs +144 -0
  4312. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/zoom-in.mjs.map +1 -0
  4313. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/zoom-out-filled.mjs +119 -0
  4314. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/zoom-out-filled.mjs.map +1 -0
  4315. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/zoom-out.mjs +144 -0
  4316. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/components/zoom-out.mjs.map +1 -0
  4317. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/style/index.css +33 -0
  4318. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/utils/config-context.mjs +9 -0
  4319. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/utils/config-context.mjs.map +1 -0
  4320. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/utils/render-fn.mjs +32 -0
  4321. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/utils/render-fn.mjs.map +1 -0
  4322. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/utils/use-common-classname.mjs +37 -0
  4323. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/utils/use-common-classname.mjs.map +1 -0
  4324. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/utils/use-size-props.mjs +27 -0
  4325. package/dist/node_modules/.pnpm/tdesign-icons-vue-next@0.4.1_vue@3.5.26_typescript@5.9.3_/node_modules/tdesign-icons-vue-next/esm/utils/use-size-props.mjs.map +1 -0
  4326. package/package.json +2 -2
@@ -109,12 +109,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
109
109
  const viewerVm = viewer.value;
110
110
  linkService.setViewer(viewerVm);
111
111
  scriptingManager.setViewer(viewerVm);
112
+ const baseURL = new URL("data:text/javascript;base64,LyoqCiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZQogKiBKYXZhU2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlCiAqCiAqIENvcHlyaWdodCAyMDI0IE1vemlsbGEgRm91bmRhdGlvbgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGUKICogSmF2YVNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZQogKi8KCi8qKgogKiBwZGZqc1ZlcnNpb24gPSA1LjQuMzk0CiAqIHBkZmpzQnVpbGQgPSAyY2M4MDlhZGUKICovCi8qKioqKiovIC8vIFRoZSByZXF1aXJlIHNjb3BlCi8qKioqKiovIHZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307Ci8qKioqKiovIAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqLyAvKiB3ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMgKi8KLyoqKioqKi8gKCgpID0+IHsKLyoqKioqKi8gCS8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHMKLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7Ci8qKioqKiovIAkJZm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikgewovKioqKioqLyAJCQlpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHsKLyoqKioqKi8gCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7Ci8qKioqKiovIAkJCX0KLyoqKioqKi8gCQl9Ci8qKioqKiovIAl9OwovKioqKioqLyB9KSgpOwovKioqKioqLyAKLyoqKioqKi8gLyogd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCAqLwovKioqKioqLyAoKCkgPT4gewovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKQovKioqKioqLyB9KSgpOwovKioqKioqLyAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdmFyIF9fd2VicGFja19leHBvcnRzX18gPSB7fTsKCjsvLyAuL3NyYy9zaGFyZWQvdXRpbC5qcwpjb25zdCBpc05vZGVKUyA9IHR5cGVvZiBwcm9jZXNzID09PSAib2JqZWN0IiAmJiBwcm9jZXNzICsgIiIgPT09ICJbb2JqZWN0IHByb2Nlc3NdIiAmJiAhcHJvY2Vzcy52ZXJzaW9ucy5udyAmJiAhKHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24gJiYgcHJvY2Vzcy50eXBlICYmIHByb2Nlc3MudHlwZSAhPT0gImJyb3dzZXIiKTsKY29uc3QgRk9OVF9JREVOVElUWV9NQVRSSVggPSBbMC4wMDEsIDAsIDAsIDAuMDAxLCAwLCAwXTsKY29uc3QgTElORV9GQUNUT1IgPSAxLjM1Owpjb25zdCBMSU5FX0RFU0NFTlRfRkFDVE9SID0gMC4zNTsKY29uc3QgQkFTRUxJTkVfRkFDVE9SID0gTElORV9ERVNDRU5UX0ZBQ1RPUiAvIExJTkVfRkFDVE9SOwpjb25zdCBSZW5kZXJpbmdJbnRlbnRGbGFnID0gewogIEFOWTogMHgwMSwKICBESVNQTEFZOiAweDAyLAogIFBSSU5UOiAweDA0LAogIFNBVkU6IDB4MDgsCiAgQU5OT1RBVElPTlNfRk9STVM6IDB4MTAsCiAgQU5OT1RBVElPTlNfU1RPUkFHRTogMHgyMCwKICBBTk5PVEFUSU9OU19ESVNBQkxFOiAweDQwLAogIElTX0VESVRJTkc6IDB4ODAsCiAgT1BMSVNUOiAweDEwMAp9Owpjb25zdCBBbm5vdGF0aW9uTW9kZSA9IHsKICBESVNBQkxFOiAwLAogIEVOQUJMRTogMSwKICBFTkFCTEVfRk9STVM6IDIsCiAgRU5BQkxFX1NUT1JBR0U6IDMKfTsKY29uc3QgQW5ub3RhdGlvbkVkaXRvclByZWZpeCA9ICJwZGZqc19pbnRlcm5hbF9lZGl0b3JfIjsKY29uc3QgQW5ub3RhdGlvbkVkaXRvclR5cGUgPSB7CiAgRElTQUJMRTogLTEsCiAgTk9ORTogMCwKICBGUkVFVEVYVDogMywKICBISUdITElHSFQ6IDksCiAgU1RBTVA6IDEzLAogIElOSzogMTUsCiAgUE9QVVA6IDE2LAogIFNJR05BVFVSRTogMTAxLAogIENPTU1FTlQ6IDEwMgp9Owpjb25zdCBBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZSA9IHsKICBSRVNJWkU6IDEsCiAgQ1JFQVRFOiAyLAogIEZSRUVURVhUX1NJWkU6IDExLAogIEZSRUVURVhUX0NPTE9SOiAxMiwKICBGUkVFVEVYVF9PUEFDSVRZOiAxMywKICBJTktfQ09MT1I6IDIxLAogIElOS19USElDS05FU1M6IDIyLAogIElOS19PUEFDSVRZOiAyMywKICBISUdITElHSFRfQ09MT1I6IDMxLAogIEhJR0hMSUdIVF9USElDS05FU1M6IDMyLAogIEhJR0hMSUdIVF9GUkVFOiAzMywKICBISUdITElHSFRfU0hPV19BTEw6IDM0LAogIERSQVdfU1RFUDogNDEKfTsKY29uc3QgUGVybWlzc2lvbkZsYWcgPSB7CiAgUFJJTlQ6IDB4MDQsCiAgTU9ESUZZX0NPTlRFTlRTOiAweDA4LAogIENPUFk6IDB4MTAsCiAgTU9ESUZZX0FOTk9UQVRJT05TOiAweDIwLAogIEZJTExfSU5URVJBQ1RJVkVfRk9STVM6IDB4MTAwLAogIENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6IDB4MjAwLAogIEFTU0VNQkxFOiAweDQwMCwKICBQUklOVF9ISUdIX1FVQUxJVFk6IDB4ODAwCn07CmNvbnN0IE1lc2hGaWd1cmVUeXBlID0gewogIFRSSUFOR0xFUzogMSwKICBMQVRUSUNFOiAyLAogIFBBVENIOiAzCn07CmNvbnN0IFRleHRSZW5kZXJpbmdNb2RlID0gewogIEZJTEw6IDAsCiAgU1RST0tFOiAxLAogIEZJTExfU1RST0tFOiAyLAogIElOVklTSUJMRTogMywKICBGSUxMX0FERF9UT19QQVRIOiA0LAogIFNUUk9LRV9BRERfVE9fUEFUSDogNSwKICBGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDogNiwKICBBRERfVE9fUEFUSDogNywKICBGSUxMX1NUUk9LRV9NQVNLOiAzLAogIEFERF9UT19QQVRIX0ZMQUc6IDQKfTsKY29uc3QgdXRpbF9JbWFnZUtpbmQgPSB7CiAgR1JBWVNDQUxFXzFCUFA6IDEsCiAgUkdCXzI0QlBQOiAyLAogIFJHQkFfMzJCUFA6IDMKfTsKY29uc3QgQW5ub3RhdGlvblR5cGUgPSB7CiAgVEVYVDogMSwKICBMSU5LOiAyLAogIEZSRUVURVhUOiAzLAogIExJTkU6IDQsCiAgU1FVQVJFOiA1LAogIENJUkNMRTogNiwKICBQT0xZR09OOiA3LAogIFBPTFlMSU5FOiA4LAogIEhJR0hMSUdIVDogOSwKICBVTkRFUkxJTkU6IDEwLAogIFNRVUlHR0xZOiAxMSwKICBTVFJJS0VPVVQ6IDEyLAogIFNUQU1QOiAxMywKICBDQVJFVDogMTQsCiAgSU5LOiAxNSwKICBQT1BVUDogMTYsCiAgRklMRUFUVEFDSE1FTlQ6IDE3LAogIFNPVU5EOiAxOCwKICBNT1ZJRTogMTksCiAgV0lER0VUOiAyMCwKICBTQ1JFRU46IDIxLAogIFBSSU5URVJNQVJLOiAyMiwKICBUUkFQTkVUOiAyMywKICBXQVRFUk1BUks6IDI0LAogIFRIUkVFRDogMjUsCiAgUkVEQUNUOiAyNgp9Owpjb25zdCBBbm5vdGF0aW9uUmVwbHlUeXBlID0gewogIEdST1VQOiAiR3JvdXAiLAogIFJFUExZOiAiUiIKfTsKY29uc3QgQW5ub3RhdGlvbkZsYWcgPSB7CiAgSU5WSVNJQkxFOiAweDAxLAogIEhJRERFTjogMHgwMiwKICBQUklOVDogMHgwNCwKICBOT1pPT006IDB4MDgsCiAgTk9ST1RBVEU6IDB4MTAsCiAgTk9WSUVXOiAweDIwLAogIFJFQURPTkxZOiAweDQwLAogIExPQ0tFRDogMHg4MCwKICBUT0dHTEVOT1ZJRVc6IDB4MTAwLAogIExPQ0tFRENPTlRFTlRTOiAweDIwMAp9Owpjb25zdCBBbm5vdGF0aW9uRmllbGRGbGFnID0gewogIFJFQURPTkxZOiAweDAwMDAwMDEsCiAgUkVRVUlSRUQ6IDB4MDAwMDAwMiwKICBOT0VYUE9SVDogMHgwMDAwMDA0LAogIE1VTFRJTElORTogMHgwMDAxMDAwLAogIFBBU1NXT1JEOiAweDAwMDIwMDAsCiAgTk9UT0dHTEVUT09GRjogMHgwMDA0MDAwLAogIFJBRElPOiAweDAwMDgwMDAsCiAgUFVTSEJVVFRPTjogMHgwMDEwMDAwLAogIENPTUJPOiAweDAwMjAwMDAsCiAgRURJVDogMHgwMDQwMDAwLAogIFNPUlQ6IDB4MDA4MDAwMCwKICBGSUxFU0VMRUNUOiAweDAxMDAwMDAsCiAgTVVMVElTRUxFQ1Q6IDB4MDIwMDAwMCwKICBET05PVFNQRUxMQ0hFQ0s6IDB4MDQwMDAwMCwKICBET05PVFNDUk9MTDogMHgwODAwMDAwLAogIENPTUI6IDB4MTAwMDAwMCwKICBSSUNIVEVYVDogMHgyMDAwMDAwLAogIFJBRElPU0lOVU5JU09OOiAweDIwMDAwMDAsCiAgQ09NTUlUT05TRUxDSEFOR0U6IDB4NDAwMDAwMAp9Owpjb25zdCBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gewogIFNPTElEOiAxLAogIERBU0hFRDogMiwKICBCRVZFTEVEOiAzLAogIElOU0VUOiA0LAogIFVOREVSTElORTogNQp9Owpjb25zdCBBbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlID0gewogIEU6ICJNb3VzZSBFbnRlciIsCiAgWDogIk1vdXNlIEV4aXQiLAogIEQ6ICJNb3VzZSBEb3duIiwKICBVOiAiTW91c2UgVXAiLAogIEZvOiAiRm9jdXMiLAogIEJsOiAiQmx1ciIsCiAgUE86ICJQYWdlT3BlbiIsCiAgUEM6ICJQYWdlQ2xvc2UiLAogIFBWOiAiUGFnZVZpc2libGUiLAogIFBJOiAiUGFnZUludmlzaWJsZSIsCiAgSzogIktleXN0cm9rZSIsCiAgRjogIkZvcm1hdCIsCiAgVjogIlZhbGlkYXRlIiwKICBDOiAiQ2FsY3VsYXRlIgp9Owpjb25zdCBEb2N1bWVudEFjdGlvbkV2ZW50VHlwZSA9IHsKICBXQzogIldpbGxDbG9zZSIsCiAgV1M6ICJXaWxsU2F2ZSIsCiAgRFM6ICJEaWRTYXZlIiwKICBXUDogIldpbGxQcmludCIsCiAgRFA6ICJEaWRQcmludCIKfTsKY29uc3QgUGFnZUFjdGlvbkV2ZW50VHlwZSA9IHsKICBPOiAiUGFnZU9wZW4iLAogIEM6ICJQYWdlQ2xvc2UiCn07CmNvbnN0IFZlcmJvc2l0eUxldmVsID0gewogIEVSUk9SUzogMCwKICBXQVJOSU5HUzogMSwKICBJTkZPUzogNQp9Owpjb25zdCBPUFMgPSB7CiAgZGVwZW5kZW5jeTogMSwKICBzZXRMaW5lV2lkdGg6IDIsCiAgc2V0TGluZUNhcDogMywKICBzZXRMaW5lSm9pbjogNCwKICBzZXRNaXRlckxpbWl0OiA1LAogIHNldERhc2g6IDYsCiAgc2V0UmVuZGVyaW5nSW50ZW50OiA3LAogIHNldEZsYXRuZXNzOiA4LAogIHNldEdTdGF0ZTogOSwKICBzYXZlOiAxMCwKICByZXN0b3JlOiAxMSwKICB0cmFuc2Zvcm06IDEyLAogIG1vdmVUbzogMTMsCiAgbGluZVRvOiAxNCwKICBjdXJ2ZVRvOiAxNSwKICBjdXJ2ZVRvMjogMTYsCiAgY3VydmVUbzM6IDE3LAogIGNsb3NlUGF0aDogMTgsCiAgcmVjdGFuZ2xlOiAxOSwKICBzdHJva2U6IDIwLAogIGNsb3NlU3Ryb2tlOiAyMSwKICBmaWxsOiAyMiwKICBlb0ZpbGw6IDIzLAogIGZpbGxTdHJva2U6IDI0LAogIGVvRmlsbFN0cm9rZTogMjUsCiAgY2xvc2VGaWxsU3Ryb2tlOiAyNiwKICBjbG9zZUVPRmlsbFN0cm9rZTogMjcsCiAgZW5kUGF0aDogMjgsCiAgY2xpcDogMjksCiAgZW9DbGlwOiAzMCwKICBiZWdpblRleHQ6IDMxLAogIGVuZFRleHQ6IDMyLAogIHNldENoYXJTcGFjaW5nOiAzMywKICBzZXRXb3JkU3BhY2luZzogMzQsCiAgc2V0SFNjYWxlOiAzNSwKICBzZXRMZWFkaW5nOiAzNiwKICBzZXRGb250OiAzNywKICBzZXRUZXh0UmVuZGVyaW5nTW9kZTogMzgsCiAgc2V0VGV4dFJpc2U6IDM5LAogIG1vdmVUZXh0OiA0MCwKICBzZXRMZWFkaW5nTW92ZVRleHQ6IDQxLAogIHNldFRleHRNYXRyaXg6IDQyLAogIG5leHRMaW5lOiA0MywKICBzaG93VGV4dDogNDQsCiAgc2hvd1NwYWNlZFRleHQ6IDQ1LAogIG5leHRMaW5lU2hvd1RleHQ6IDQ2LAogIG5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OiA0NywKICBzZXRDaGFyV2lkdGg6IDQ4LAogIHNldENoYXJXaWR0aEFuZEJvdW5kczogNDksCiAgc2V0U3Ryb2tlQ29sb3JTcGFjZTogNTAsCiAgc2V0RmlsbENvbG9yU3BhY2U6IDUxLAogIHNldFN0cm9rZUNvbG9yOiA1MiwKICBzZXRTdHJva2VDb2xvck46IDUzLAogIHNldEZpbGxDb2xvcjogNTQsCiAgc2V0RmlsbENvbG9yTjogNTUsCiAgc2V0U3Ryb2tlR3JheTogNTYsCiAgc2V0RmlsbEdyYXk6IDU3LAogIHNldFN0cm9rZVJHQkNvbG9yOiA1OCwKICBzZXRGaWxsUkdCQ29sb3I6IDU5LAogIHNldFN0cm9rZUNNWUtDb2xvcjogNjAsCiAgc2V0RmlsbENNWUtDb2xvcjogNjEsCiAgc2hhZGluZ0ZpbGw6IDYyLAogIGJlZ2luSW5saW5lSW1hZ2U6IDYzLAogIGJlZ2luSW1hZ2VEYXRhOiA2NCwKICBlbmRJbmxpbmVJbWFnZTogNjUsCiAgcGFpbnRYT2JqZWN0OiA2NiwKICBtYXJrUG9pbnQ6IDY3LAogIG1hcmtQb2ludFByb3BzOiA2OCwKICBiZWdpbk1hcmtlZENvbnRlbnQ6IDY5LAogIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiA3MCwKICBlbmRNYXJrZWRDb250ZW50OiA3MSwKICBiZWdpbkNvbXBhdDogNzIsCiAgZW5kQ29tcGF0OiA3MywKICBwYWludEZvcm1YT2JqZWN0QmVnaW46IDc0LAogIHBhaW50Rm9ybVhPYmplY3RFbmQ6IDc1LAogIGJlZ2luR3JvdXA6IDc2LAogIGVuZEdyb3VwOiA3NywKICBiZWdpbkFubm90YXRpb246IDgwLAogIGVuZEFubm90YXRpb246IDgxLAogIHBhaW50SW1hZ2VNYXNrWE9iamVjdDogODMsCiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXA6IDg0LAogIHBhaW50SW1hZ2VYT2JqZWN0OiA4NSwKICBwYWludElubGluZUltYWdlWE9iamVjdDogODYsCiAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDogODcsCiAgcGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6IDg4LAogIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogODksCiAgcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOiA5MCwKICBjb25zdHJ1Y3RQYXRoOiA5MSwKICBzZXRTdHJva2VUcmFuc3BhcmVudDogOTIsCiAgc2V0RmlsbFRyYW5zcGFyZW50OiA5MywKICByYXdGaWxsUGF0aDogOTQKfTsKY29uc3QgRHJhd09QUyA9IHsKICBtb3ZlVG86IDAsCiAgbGluZVRvOiAxLAogIGN1cnZlVG86IDIsCiAgcXVhZHJhdGljQ3VydmVUbzogMywKICBjbG9zZVBhdGg6IDQKfTsKY29uc3QgUGFzc3dvcmRSZXNwb25zZXMgPSB7CiAgTkVFRF9QQVNTV09SRDogMSwKICBJTkNPUlJFQ1RfUEFTU1dPUkQ6IDIKfTsKbGV0IHZlcmJvc2l0eSA9IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTOwpmdW5jdGlvbiBzZXRWZXJib3NpdHlMZXZlbChsZXZlbCkgewogIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGxldmVsKSkgewogICAgdmVyYm9zaXR5ID0gbGV2ZWw7CiAgfQp9CmZ1bmN0aW9uIGdldFZlcmJvc2l0eUxldmVsKCkgewogIHJldHVybiB2ZXJib3NpdHk7Cn0KZnVuY3Rpb24gaW5mbyhtc2cpIHsKICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLklORk9TKSB7CiAgICBjb25zb2xlLmluZm8oYEluZm86ICR7bXNnfWApOwogIH0KfQpmdW5jdGlvbiB3YXJuKG1zZykgewogIGlmICh2ZXJib3NpdHkgPj0gVmVyYm9zaXR5TGV2ZWwuV0FSTklOR1MpIHsKICAgIGNvbnNvbGUud2FybihgV2FybmluZzogJHttc2d9YCk7CiAgfQp9CmZ1bmN0aW9uIHVucmVhY2hhYmxlKG1zZykgewogIHRocm93IG5ldyBFcnJvcihtc2cpOwp9CmZ1bmN0aW9uIGFzc2VydChjb25kLCBtc2cpIHsKICBpZiAoIWNvbmQpIHsKICAgIHVucmVhY2hhYmxlKG1zZyk7CiAgfQp9CmZ1bmN0aW9uIF9pc1ZhbGlkUHJvdG9jb2wodXJsKSB7CiAgc3dpdGNoICh1cmw/LnByb3RvY29sKSB7CiAgICBjYXNlICJodHRwOiI6CiAgICBjYXNlICJodHRwczoiOgogICAgY2FzZSAiZnRwOiI6CiAgICBjYXNlICJtYWlsdG86IjoKICAgIGNhc2UgInRlbDoiOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBmYWxzZTsKICB9Cn0KZnVuY3Rpb24gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCh1cmwsIGJhc2VVcmwgPSBudWxsLCBvcHRpb25zID0gbnVsbCkgewogIGlmICghdXJsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIHVybCA9PT0gInN0cmluZyIpIHsKICAgIGlmIChvcHRpb25zLmFkZERlZmF1bHRQcm90b2NvbCAmJiB1cmwuc3RhcnRzV2l0aCgid3d3LiIpKSB7CiAgICAgIGNvbnN0IGRvdHMgPSB1cmwubWF0Y2goL1wuL2cpOwogICAgICBpZiAoZG90cz8ubGVuZ3RoID49IDIpIHsKICAgICAgICB1cmwgPSBgaHR0cDovLyR7dXJsfWA7CiAgICAgIH0KICAgIH0KICAgIGlmIChvcHRpb25zLnRyeUNvbnZlcnRFbmNvZGluZykgewogICAgICB0cnkgewogICAgICAgIHVybCA9IHN0cmluZ1RvVVRGOFN0cmluZyh1cmwpOwogICAgICB9IGNhdGNoIHt9CiAgICB9CiAgfQogIGNvbnN0IGFic29sdXRlVXJsID0gYmFzZVVybCA/IFVSTC5wYXJzZSh1cmwsIGJhc2VVcmwpIDogVVJMLnBhcnNlKHVybCk7CiAgcmV0dXJuIF9pc1ZhbGlkUHJvdG9jb2woYWJzb2x1dGVVcmwpID8gYWJzb2x1dGVVcmwgOiBudWxsOwp9CmZ1bmN0aW9uIHVwZGF0ZVVybEhhc2godXJsLCBoYXNoLCBhbGxvd1JlbCA9IGZhbHNlKSB7CiAgY29uc3QgcmVzID0gVVJMLnBhcnNlKHVybCk7CiAgaWYgKHJlcykgewogICAgcmVzLmhhc2ggPSBoYXNoOwogICAgcmV0dXJuIHJlcy5ocmVmOwogIH0KICBpZiAoYWxsb3dSZWwgJiYgY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCh1cmwsICJodHRwOi8vZXhhbXBsZS5jb20iKSkgewogICAgcmV0dXJuIHVybC5zcGxpdCgiIyIsIDEpWzBdICsgYCR7aGFzaCA/IGAjJHtoYXNofWAgOiAiIn1gOwogIH0KICByZXR1cm4gIiI7Cn0KZnVuY3Rpb24gc2hhZG93KG9iaiwgcHJvcCwgdmFsdWUsIG5vblNlcmlhbGl6YWJsZSA9IGZhbHNlKSB7CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgewogICAgdmFsdWUsCiAgICBlbnVtZXJhYmxlOiAhbm9uU2VyaWFsaXphYmxlLAogICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgd3JpdGFibGU6IGZhbHNlCiAgfSk7CiAgcmV0dXJuIHZhbHVlOwp9CmNvbnN0IEJhc2VFeGNlcHRpb24gPSBmdW5jdGlvbiBCYXNlRXhjZXB0aW9uQ2xvc3VyZSgpIHsKICBmdW5jdGlvbiBCYXNlRXhjZXB0aW9uKG1lc3NhZ2UsIG5hbWUpIHsKICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CiAgICB0aGlzLm5hbWUgPSBuYW1lOwogIH0KICBCYXNlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpOwogIEJhc2VFeGNlcHRpb24uY29uc3RydWN0b3IgPSBCYXNlRXhjZXB0aW9uOwogIHJldHVybiBCYXNlRXhjZXB0aW9uOwp9KCk7CmNsYXNzIFBhc3N3b3JkRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7CiAgY29uc3RydWN0b3IobXNnLCBjb2RlKSB7CiAgICBzdXBlcihtc2csICJQYXNzd29yZEV4Y2VwdGlvbiIpOwogICAgdGhpcy5jb2RlID0gY29kZTsKICB9Cn0KY2xhc3MgVW5rbm93bkVycm9yRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7CiAgY29uc3RydWN0b3IobXNnLCBkZXRhaWxzKSB7CiAgICBzdXBlcihtc2csICJVbmtub3duRXJyb3JFeGNlcHRpb24iKTsKICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7CiAgfQp9CmNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHsKICBjb25zdHJ1Y3Rvcihtc2cpIHsKICAgIHN1cGVyKG1zZywgIkludmFsaWRQREZFeGNlcHRpb24iKTsKICB9Cn0KY2xhc3MgUmVzcG9uc2VFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHsKICBjb25zdHJ1Y3Rvcihtc2csIHN0YXR1cywgbWlzc2luZykgewogICAgc3VwZXIobXNnLCAiUmVzcG9uc2VFeGNlcHRpb24iKTsKICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOwogICAgdGhpcy5taXNzaW5nID0gbWlzc2luZzsKICB9Cn0KY2xhc3MgRm9ybWF0RXJyb3IgZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHsKICBjb25zdHJ1Y3Rvcihtc2cpIHsKICAgIHN1cGVyKG1zZywgIkZvcm1hdEVycm9yIik7CiAgfQp9CmNsYXNzIEFib3J0RXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7CiAgY29uc3RydWN0b3IobXNnKSB7CiAgICBzdXBlcihtc2csICJBYm9ydEV4Y2VwdGlvbiIpOwogIH0KfQpmdW5jdGlvbiBieXRlc1RvU3RyaW5nKGJ5dGVzKSB7CiAgaWYgKHR5cGVvZiBieXRlcyAhPT0gIm9iamVjdCIgfHwgYnl0ZXM/Lmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7CiAgICB1bnJlYWNoYWJsZSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYnl0ZXNUb1N0cmluZyIpOwogIH0KICBjb25zdCBsZW5ndGggPSBieXRlcy5sZW5ndGg7CiAgY29uc3QgTUFYX0FSR1VNRU5UX0NPVU5UID0gODE5MjsKICBpZiAobGVuZ3RoIDwgTUFYX0FSR1VNRU5UX0NPVU5UKSB7CiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBieXRlcyk7CiAgfQogIGNvbnN0IHN0ckJ1ZiA9IFtdOwogIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IE1BWF9BUkdVTUVOVF9DT1VOVCkgewogICAgY29uc3QgY2h1bmtFbmQgPSBNYXRoLm1pbihpICsgTUFYX0FSR1VNRU5UX0NPVU5ULCBsZW5ndGgpOwogICAgY29uc3QgY2h1bmsgPSBieXRlcy5zdWJhcnJheShpLCBjaHVua0VuZCk7CiAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgfQogIHJldHVybiBzdHJCdWYuam9pbigiIik7Cn0KZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHsKICBpZiAodHlwZW9mIHN0ciAhPT0gInN0cmluZyIpIHsKICAgIHVucmVhY2hhYmxlKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzIik7CiAgfQogIGNvbnN0IGxlbmd0aCA9IHN0ci5sZW5ndGg7CiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgIGJ5dGVzW2ldID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmOwogIH0KICByZXR1cm4gYnl0ZXM7Cn0KZnVuY3Rpb24gc3RyaW5nMzIodmFsdWUpIHsKICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7Cn0KZnVuY3Rpb24gb2JqZWN0U2l6ZShvYmopIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGg7Cn0KZnVuY3Rpb24gaXNMaXR0bGVFbmRpYW4oKSB7CiAgY29uc3QgYnVmZmVyOCA9IG5ldyBVaW50OEFycmF5KDQpOwogIGJ1ZmZlcjhbMF0gPSAxOwogIGNvbnN0IHZpZXczMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXI4LmJ1ZmZlciwgMCwgMSk7CiAgcmV0dXJuIHZpZXczMlswXSA9PT0gMTsKfQpmdW5jdGlvbiBpc0V2YWxTdXBwb3J0ZWQoKSB7CiAgdHJ5IHsKICAgIG5ldyBGdW5jdGlvbigiIik7CiAgICByZXR1cm4gdHJ1ZTsKICB9IGNhdGNoIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KY2xhc3MgdXRpbF9GZWF0dXJlVGVzdCB7CiAgc3RhdGljIGdldCBpc0xpdHRsZUVuZGlhbigpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgImlzTGl0dGxlRW5kaWFuIiwgaXNMaXR0bGVFbmRpYW4oKSk7CiAgfQogIHN0YXRpYyBnZXQgaXNFdmFsU3VwcG9ydGVkKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaXNFdmFsU3VwcG9ydGVkIiwgaXNFdmFsU3VwcG9ydGVkKCkpOwogIH0KICBzdGF0aWMgZ2V0IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQiLCB0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzICE9PSAidW5kZWZpbmVkIik7CiAgfQogIHN0YXRpYyBnZXQgaXNJbWFnZURlY29kZXJTdXBwb3J0ZWQoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJpc0ltYWdlRGVjb2RlclN1cHBvcnRlZCIsIHR5cGVvZiBJbWFnZURlY29kZXIgIT09ICJ1bmRlZmluZWQiKTsKICB9CiAgc3RhdGljIGdldCBpc0Zsb2F0MTZBcnJheVN1cHBvcnRlZCgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgImlzRmxvYXQxNkFycmF5U3VwcG9ydGVkIiwgdHlwZW9mIEZsb2F0MTZBcnJheSAhPT0gInVuZGVmaW5lZCIpOwogIH0KICBzdGF0aWMgZ2V0IGlzU2FuaXRpemVyU3VwcG9ydGVkKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaXNTYW5pdGl6ZXJTdXBwb3J0ZWQiLCB0eXBlb2YgU2FuaXRpemVyICE9PSAidW5kZWZpbmVkIik7CiAgfQogIHN0YXRpYyBnZXQgcGxhdGZvcm0oKSB7CiAgICBjb25zdCB7CiAgICAgIHBsYXRmb3JtLAogICAgICB1c2VyQWdlbnQKICAgIH0gPSBuYXZpZ2F0b3I7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJwbGF0Zm9ybSIsIHsKICAgICAgaXNBbmRyb2lkOiB1c2VyQWdlbnQuaW5jbHVkZXMoIkFuZHJvaWQiKSwKICAgICAgaXNMaW51eDogcGxhdGZvcm0uaW5jbHVkZXMoIkxpbnV4IiksCiAgICAgIGlzTWFjOiBwbGF0Zm9ybS5pbmNsdWRlcygiTWFjIiksCiAgICAgIGlzV2luZG93czogcGxhdGZvcm0uaW5jbHVkZXMoIldpbiIpLAogICAgICBpc0ZpcmVmb3g6IHVzZXJBZ2VudC5pbmNsdWRlcygiRmlyZWZveCIpCiAgICB9KTsKICB9CiAgc3RhdGljIGdldCBpc0NTU1JvdW5kU3VwcG9ydGVkKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaXNDU1NSb3VuZFN1cHBvcnRlZCIsIGdsb2JhbFRoaXMuQ1NTPy5zdXBwb3J0cz8uKCJ3aWR0aDogcm91bmQoMS41cHgsIDFweCkiKSk7CiAgfQp9CmNvbnN0IGhleE51bWJlcnMgPSBBcnJheS5mcm9tKEFycmF5KDI1Nikua2V5cygpLCBuID0+IG4udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICIwIikpOwpjbGFzcyBVdGlsIHsKICBzdGF0aWMgbWFrZUhleENvbG9yKHIsIGcsIGIpIHsKICAgIHJldHVybiBgIyR7aGV4TnVtYmVyc1tyXX0ke2hleE51bWJlcnNbZ119JHtoZXhOdW1iZXJzW2JdfWA7CiAgfQogIHN0YXRpYyBkb21NYXRyaXhUb1RyYW5zZm9ybShkbSkgewogICAgcmV0dXJuIFtkbS5hLCBkbS5iLCBkbS5jLCBkbS5kLCBkbS5lLCBkbS5mXTsKICB9CiAgc3RhdGljIHNjYWxlTWluTWF4KHRyYW5zZm9ybSwgbWluTWF4KSB7CiAgICBsZXQgdGVtcDsKICAgIGlmICh0cmFuc2Zvcm1bMF0pIHsKICAgICAgaWYgKHRyYW5zZm9ybVswXSA8IDApIHsKICAgICAgICB0ZW1wID0gbWluTWF4WzBdOwogICAgICAgIG1pbk1heFswXSA9IG1pbk1heFsyXTsKICAgICAgICBtaW5NYXhbMl0gPSB0ZW1wOwogICAgICB9CiAgICAgIG1pbk1heFswXSAqPSB0cmFuc2Zvcm1bMF07CiAgICAgIG1pbk1heFsyXSAqPSB0cmFuc2Zvcm1bMF07CiAgICAgIGlmICh0cmFuc2Zvcm1bM10gPCAwKSB7CiAgICAgICAgdGVtcCA9IG1pbk1heFsxXTsKICAgICAgICBtaW5NYXhbMV0gPSBtaW5NYXhbM107CiAgICAgICAgbWluTWF4WzNdID0gdGVtcDsKICAgICAgfQogICAgICBtaW5NYXhbMV0gKj0gdHJhbnNmb3JtWzNdOwogICAgICBtaW5NYXhbM10gKj0gdHJhbnNmb3JtWzNdOwogICAgfSBlbHNlIHsKICAgICAgdGVtcCA9IG1pbk1heFswXTsKICAgICAgbWluTWF4WzBdID0gbWluTWF4WzFdOwogICAgICBtaW5NYXhbMV0gPSB0ZW1wOwogICAgICB0ZW1wID0gbWluTWF4WzJdOwogICAgICBtaW5NYXhbMl0gPSBtaW5NYXhbM107CiAgICAgIG1pbk1heFszXSA9IHRlbXA7CiAgICAgIGlmICh0cmFuc2Zvcm1bMV0gPCAwKSB7CiAgICAgICAgdGVtcCA9IG1pbk1heFsxXTsKICAgICAgICBtaW5NYXhbMV0gPSBtaW5NYXhbM107CiAgICAgICAgbWluTWF4WzNdID0gdGVtcDsKICAgICAgfQogICAgICBtaW5NYXhbMV0gKj0gdHJhbnNmb3JtWzFdOwogICAgICBtaW5NYXhbM10gKj0gdHJhbnNmb3JtWzFdOwogICAgICBpZiAodHJhbnNmb3JtWzJdIDwgMCkgewogICAgICAgIHRlbXAgPSBtaW5NYXhbMF07CiAgICAgICAgbWluTWF4WzBdID0gbWluTWF4WzJdOwogICAgICAgIG1pbk1heFsyXSA9IHRlbXA7CiAgICAgIH0KICAgICAgbWluTWF4WzBdICo9IHRyYW5zZm9ybVsyXTsKICAgICAgbWluTWF4WzJdICo9IHRyYW5zZm9ybVsyXTsKICAgIH0KICAgIG1pbk1heFswXSArPSB0cmFuc2Zvcm1bNF07CiAgICBtaW5NYXhbMV0gKz0gdHJhbnNmb3JtWzVdOwogICAgbWluTWF4WzJdICs9IHRyYW5zZm9ybVs0XTsKICAgIG1pbk1heFszXSArPSB0cmFuc2Zvcm1bNV07CiAgfQogIHN0YXRpYyB0cmFuc2Zvcm0obTEsIG0yKSB7CiAgICByZXR1cm4gW20xWzBdICogbTJbMF0gKyBtMVsyXSAqIG0yWzFdLCBtMVsxXSAqIG0yWzBdICsgbTFbM10gKiBtMlsxXSwgbTFbMF0gKiBtMlsyXSArIG0xWzJdICogbTJbM10sIG0xWzFdICogbTJbMl0gKyBtMVszXSAqIG0yWzNdLCBtMVswXSAqIG0yWzRdICsgbTFbMl0gKiBtMls1XSArIG0xWzRdLCBtMVsxXSAqIG0yWzRdICsgbTFbM10gKiBtMls1XSArIG0xWzVdXTsKICB9CiAgc3RhdGljIG11bHRpcGx5QnlET01NYXRyaXgobSwgbWQpIHsKICAgIHJldHVybiBbbVswXSAqIG1kLmEgKyBtWzJdICogbWQuYiwgbVsxXSAqIG1kLmEgKyBtWzNdICogbWQuYiwgbVswXSAqIG1kLmMgKyBtWzJdICogbWQuZCwgbVsxXSAqIG1kLmMgKyBtWzNdICogbWQuZCwgbVswXSAqIG1kLmUgKyBtWzJdICogbWQuZiArIG1bNF0sIG1bMV0gKiBtZC5lICsgbVszXSAqIG1kLmYgKyBtWzVdXTsKICB9CiAgc3RhdGljIGFwcGx5VHJhbnNmb3JtKHAsIG0sIHBvcyA9IDApIHsKICAgIGNvbnN0IHAwID0gcFtwb3NdOwogICAgY29uc3QgcDEgPSBwW3BvcyArIDFdOwogICAgcFtwb3NdID0gcDAgKiBtWzBdICsgcDEgKiBtWzJdICsgbVs0XTsKICAgIHBbcG9zICsgMV0gPSBwMCAqIG1bMV0gKyBwMSAqIG1bM10gKyBtWzVdOwogIH0KICBzdGF0aWMgYXBwbHlUcmFuc2Zvcm1Ub0JlemllcihwLCB0cmFuc2Zvcm0sIHBvcyA9IDApIHsKICAgIGNvbnN0IG0wID0gdHJhbnNmb3JtWzBdOwogICAgY29uc3QgbTEgPSB0cmFuc2Zvcm1bMV07CiAgICBjb25zdCBtMiA9IHRyYW5zZm9ybVsyXTsKICAgIGNvbnN0IG0zID0gdHJhbnNmb3JtWzNdOwogICAgY29uc3QgbTQgPSB0cmFuc2Zvcm1bNF07CiAgICBjb25zdCBtNSA9IHRyYW5zZm9ybVs1XTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSArPSAyKSB7CiAgICAgIGNvbnN0IHBJID0gcFtwb3MgKyBpXTsKICAgICAgY29uc3QgcEkxID0gcFtwb3MgKyBpICsgMV07CiAgICAgIHBbcG9zICsgaV0gPSBwSSAqIG0wICsgcEkxICogbTIgKyBtNDsKICAgICAgcFtwb3MgKyBpICsgMV0gPSBwSSAqIG0xICsgcEkxICogbTMgKyBtNTsKICAgIH0KICB9CiAgc3RhdGljIGFwcGx5SW52ZXJzZVRyYW5zZm9ybShwLCBtKSB7CiAgICBjb25zdCBwMCA9IHBbMF07CiAgICBjb25zdCBwMSA9IHBbMV07CiAgICBjb25zdCBkID0gbVswXSAqIG1bM10gLSBtWzFdICogbVsyXTsKICAgIHBbMF0gPSAocDAgKiBtWzNdIC0gcDEgKiBtWzJdICsgbVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkOwogICAgcFsxXSA9ICgtcDAgKiBtWzFdICsgcDEgKiBtWzBdICsgbVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkOwogIH0KICBzdGF0aWMgYXhpYWxBbGlnbmVkQm91bmRpbmdCb3gocmVjdCwgdHJhbnNmb3JtLCBvdXRwdXQpIHsKICAgIGNvbnN0IG0wID0gdHJhbnNmb3JtWzBdOwogICAgY29uc3QgbTEgPSB0cmFuc2Zvcm1bMV07CiAgICBjb25zdCBtMiA9IHRyYW5zZm9ybVsyXTsKICAgIGNvbnN0IG0zID0gdHJhbnNmb3JtWzNdOwogICAgY29uc3QgbTQgPSB0cmFuc2Zvcm1bNF07CiAgICBjb25zdCBtNSA9IHRyYW5zZm9ybVs1XTsKICAgIGNvbnN0IHIwID0gcmVjdFswXTsKICAgIGNvbnN0IHIxID0gcmVjdFsxXTsKICAgIGNvbnN0IHIyID0gcmVjdFsyXTsKICAgIGNvbnN0IHIzID0gcmVjdFszXTsKICAgIGxldCBhMCA9IG0wICogcjAgKyBtNDsKICAgIGxldCBhMiA9IGEwOwogICAgbGV0IGExID0gbTAgKiByMiArIG00OwogICAgbGV0IGEzID0gYTE7CiAgICBsZXQgYjAgPSBtMyAqIHIxICsgbTU7CiAgICBsZXQgYjIgPSBiMDsKICAgIGxldCBiMSA9IG0zICogcjMgKyBtNTsKICAgIGxldCBiMyA9IGIxOwogICAgaWYgKG0xICE9PSAwIHx8IG0yICE9PSAwKSB7CiAgICAgIGNvbnN0IG0xcjAgPSBtMSAqIHIwOwogICAgICBjb25zdCBtMXIyID0gbTEgKiByMjsKICAgICAgY29uc3QgbTJyMSA9IG0yICogcjE7CiAgICAgIGNvbnN0IG0ycjMgPSBtMiAqIHIzOwogICAgICBhMCArPSBtMnIxOwogICAgICBhMyArPSBtMnIxOwogICAgICBhMSArPSBtMnIzOwogICAgICBhMiArPSBtMnIzOwogICAgICBiMCArPSBtMXIwOwogICAgICBiMyArPSBtMXIwOwogICAgICBiMSArPSBtMXIyOwogICAgICBiMiArPSBtMXIyOwogICAgfQogICAgb3V0cHV0WzBdID0gTWF0aC5taW4ob3V0cHV0WzBdLCBhMCwgYTEsIGEyLCBhMyk7CiAgICBvdXRwdXRbMV0gPSBNYXRoLm1pbihvdXRwdXRbMV0sIGIwLCBiMSwgYjIsIGIzKTsKICAgIG91dHB1dFsyXSA9IE1hdGgubWF4KG91dHB1dFsyXSwgYTAsIGExLCBhMiwgYTMpOwogICAgb3V0cHV0WzNdID0gTWF0aC5tYXgob3V0cHV0WzNdLCBiMCwgYjEsIGIyLCBiMyk7CiAgfQogIHN0YXRpYyBpbnZlcnNlVHJhbnNmb3JtKG0pIHsKICAgIGNvbnN0IGQgPSBtWzBdICogbVszXSAtIG1bMV0gKiBtWzJdOwogICAgcmV0dXJuIFttWzNdIC8gZCwgLW1bMV0gLyBkLCAtbVsyXSAvIGQsIG1bMF0gLyBkLCAobVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkLCAobVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkXTsKICB9CiAgc3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG1hdHJpeCwgb3V0cHV0KSB7CiAgICBjb25zdCBtMCA9IG1hdHJpeFswXTsKICAgIGNvbnN0IG0xID0gbWF0cml4WzFdOwogICAgY29uc3QgbTIgPSBtYXRyaXhbMl07CiAgICBjb25zdCBtMyA9IG1hdHJpeFszXTsKICAgIGNvbnN0IGEgPSBtMCAqKiAyICsgbTEgKiogMjsKICAgIGNvbnN0IGIgPSBtMCAqIG0yICsgbTEgKiBtMzsKICAgIGNvbnN0IGMgPSBtMiAqKiAyICsgbTMgKiogMjsKICAgIGNvbnN0IGZpcnN0ID0gKGEgKyBjKSAvIDI7CiAgICBjb25zdCBzZWNvbmQgPSBNYXRoLnNxcnQoZmlyc3QgKiogMiAtIChhICogYyAtIGIgKiogMikpOwogICAgb3V0cHV0WzBdID0gTWF0aC5zcXJ0KGZpcnN0ICsgc2Vjb25kIHx8IDEpOwogICAgb3V0cHV0WzFdID0gTWF0aC5zcXJ0KGZpcnN0IC0gc2Vjb25kIHx8IDEpOwogIH0KICBzdGF0aWMgbm9ybWFsaXplUmVjdChyZWN0KSB7CiAgICBjb25zdCByID0gcmVjdC5zbGljZSgwKTsKICAgIGlmIChyZWN0WzBdID4gcmVjdFsyXSkgewogICAgICByWzBdID0gcmVjdFsyXTsKICAgICAgclsyXSA9IHJlY3RbMF07CiAgICB9CiAgICBpZiAocmVjdFsxXSA+IHJlY3RbM10pIHsKICAgICAgclsxXSA9IHJlY3RbM107CiAgICAgIHJbM10gPSByZWN0WzFdOwogICAgfQogICAgcmV0dXJuIHI7CiAgfQogIHN0YXRpYyBpbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7CiAgICBjb25zdCB4TG93ID0gTWF0aC5tYXgoTWF0aC5taW4ocmVjdDFbMF0sIHJlY3QxWzJdKSwgTWF0aC5taW4ocmVjdDJbMF0sIHJlY3QyWzJdKSk7CiAgICBjb25zdCB4SGlnaCA9IE1hdGgubWluKE1hdGgubWF4KHJlY3QxWzBdLCByZWN0MVsyXSksIE1hdGgubWF4KHJlY3QyWzBdLCByZWN0MlsyXSkpOwogICAgaWYgKHhMb3cgPiB4SGlnaCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHlMb3cgPSBNYXRoLm1heChNYXRoLm1pbihyZWN0MVsxXSwgcmVjdDFbM10pLCBNYXRoLm1pbihyZWN0MlsxXSwgcmVjdDJbM10pKTsKICAgIGNvbnN0IHlIaWdoID0gTWF0aC5taW4oTWF0aC5tYXgocmVjdDFbMV0sIHJlY3QxWzNdKSwgTWF0aC5tYXgocmVjdDJbMV0sIHJlY3QyWzNdKSk7CiAgICBpZiAoeUxvdyA+IHlIaWdoKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIFt4TG93LCB5TG93LCB4SGlnaCwgeUhpZ2hdOwogIH0KICBzdGF0aWMgcG9pbnRCb3VuZGluZ0JveCh4LCB5LCBtaW5NYXgpIHsKICAgIG1pbk1heFswXSA9IE1hdGgubWluKG1pbk1heFswXSwgeCk7CiAgICBtaW5NYXhbMV0gPSBNYXRoLm1pbihtaW5NYXhbMV0sIHkpOwogICAgbWluTWF4WzJdID0gTWF0aC5tYXgobWluTWF4WzJdLCB4KTsKICAgIG1pbk1heFszXSA9IE1hdGgubWF4KG1pbk1heFszXSwgeSk7CiAgfQogIHN0YXRpYyByZWN0Qm91bmRpbmdCb3goeDAsIHkwLCB4MSwgeTEsIG1pbk1heCkgewogICAgbWluTWF4WzBdID0gTWF0aC5taW4obWluTWF4WzBdLCB4MCwgeDEpOwogICAgbWluTWF4WzFdID0gTWF0aC5taW4obWluTWF4WzFdLCB5MCwgeTEpOwogICAgbWluTWF4WzJdID0gTWF0aC5tYXgobWluTWF4WzJdLCB4MCwgeDEpOwogICAgbWluTWF4WzNdID0gTWF0aC5tYXgobWluTWF4WzNdLCB5MCwgeTEpOwogIH0KICBzdGF0aWMgI2dldEV4dHJlbXVtT25DdXJ2ZSh4MCwgeDEsIHgyLCB4MywgeTAsIHkxLCB5MiwgeTMsIHQsIG1pbk1heCkgewogICAgaWYgKHQgPD0gMCB8fCB0ID49IDEpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbXQgPSAxIC0gdDsKICAgIGNvbnN0IHR0ID0gdCAqIHQ7CiAgICBjb25zdCB0dHQgPSB0dCAqIHQ7CiAgICBjb25zdCB4ID0gbXQgKiAobXQgKiAobXQgKiB4MCArIDMgKiB0ICogeDEpICsgMyAqIHR0ICogeDIpICsgdHR0ICogeDM7CiAgICBjb25zdCB5ID0gbXQgKiAobXQgKiAobXQgKiB5MCArIDMgKiB0ICogeTEpICsgMyAqIHR0ICogeTIpICsgdHR0ICogeTM7CiAgICBtaW5NYXhbMF0gPSBNYXRoLm1pbihtaW5NYXhbMF0sIHgpOwogICAgbWluTWF4WzFdID0gTWF0aC5taW4obWluTWF4WzFdLCB5KTsKICAgIG1pbk1heFsyXSA9IE1hdGgubWF4KG1pbk1heFsyXSwgeCk7CiAgICBtaW5NYXhbM10gPSBNYXRoLm1heChtaW5NYXhbM10sIHkpOwogIH0KICBzdGF0aWMgI2dldEV4dHJlbXVtKHgwLCB4MSwgeDIsIHgzLCB5MCwgeTEsIHkyLCB5MywgYSwgYiwgYywgbWluTWF4KSB7CiAgICBpZiAoTWF0aC5hYnMoYSkgPCAxZS0xMikgewogICAgICBpZiAoTWF0aC5hYnMoYikgPj0gMWUtMTIpIHsKICAgICAgICB0aGlzLiNnZXRFeHRyZW11bU9uQ3VydmUoeDAsIHgxLCB4MiwgeDMsIHkwLCB5MSwgeTIsIHkzLCAtYyAvIGIsIG1pbk1heCk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgZGVsdGEgPSBiICoqIDIgLSA0ICogYyAqIGE7CiAgICBpZiAoZGVsdGEgPCAwKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHNxcnREZWx0YSA9IE1hdGguc3FydChkZWx0YSk7CiAgICBjb25zdCBhMiA9IDIgKiBhOwogICAgdGhpcy4jZ2V0RXh0cmVtdW1PbkN1cnZlKHgwLCB4MSwgeDIsIHgzLCB5MCwgeTEsIHkyLCB5MywgKC1iICsgc3FydERlbHRhKSAvIGEyLCBtaW5NYXgpOwogICAgdGhpcy4jZ2V0RXh0cmVtdW1PbkN1cnZlKHgwLCB4MSwgeDIsIHgzLCB5MCwgeTEsIHkyLCB5MywgKC1iIC0gc3FydERlbHRhKSAvIGEyLCBtaW5NYXgpOwogIH0KICBzdGF0aWMgYmV6aWVyQm91bmRpbmdCb3goeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCBtaW5NYXgpIHsKICAgIG1pbk1heFswXSA9IE1hdGgubWluKG1pbk1heFswXSwgeDAsIHgzKTsKICAgIG1pbk1heFsxXSA9IE1hdGgubWluKG1pbk1heFsxXSwgeTAsIHkzKTsKICAgIG1pbk1heFsyXSA9IE1hdGgubWF4KG1pbk1heFsyXSwgeDAsIHgzKTsKICAgIG1pbk1heFszXSA9IE1hdGgubWF4KG1pbk1heFszXSwgeTAsIHkzKTsKICAgIHRoaXMuI2dldEV4dHJlbXVtKHgwLCB4MSwgeDIsIHgzLCB5MCwgeTEsIHkyLCB5MywgMyAqICgteDAgKyAzICogKHgxIC0geDIpICsgeDMpLCA2ICogKHgwIC0gMiAqIHgxICsgeDIpLCAzICogKHgxIC0geDApLCBtaW5NYXgpOwogICAgdGhpcy4jZ2V0RXh0cmVtdW0oeDAsIHgxLCB4MiwgeDMsIHkwLCB5MSwgeTIsIHkzLCAzICogKC15MCArIDMgKiAoeTEgLSB5MikgKyB5MyksIDYgKiAoeTAgLSAyICogeTEgKyB5MiksIDMgKiAoeTEgLSB5MCksIG1pbk1heCk7CiAgfQp9CmNvbnN0IFBERlN0cmluZ1RyYW5zbGF0ZVRhYmxlID0gKC8qIHVudXNlZCBwdXJlIGV4cHJlc3Npb24gb3Igc3VwZXIgKi8gbnVsbCAmJiAoWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MmQ4LCAweDJjNywgMHgyYzYsIDB4MmQ5LCAweDJkZCwgMHgyZGIsIDB4MmRhLCAweDJkYywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHgyMDIyLCAweDIwMjAsIDB4MjAyMSwgMHgyMDI2LCAweDIwMTQsIDB4MjAxMywgMHgxOTIsIDB4MjA0NCwgMHgyMDM5LCAweDIwM2EsIDB4MjIxMiwgMHgyMDMwLCAweDIwMWUsIDB4MjAxYywgMHgyMDFkLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFhLCAweDIxMjIsIDB4ZmIwMSwgMHhmYjAyLCAweDE0MSwgMHgxNTIsIDB4MTYwLCAweDE3OCwgMHgxN2QsIDB4MTMxLCAweDE0MiwgMHgxNTMsIDB4MTYxLCAweDE3ZSwgMCwgMHgyMGFjXSkpOwpmdW5jdGlvbiBzdHJpbmdUb1BERlN0cmluZyhzdHIsIGtlZXBFc2NhcGVTZXF1ZW5jZSA9IGZhbHNlKSB7CiAgaWYgKHN0clswXSA+PSAiXHhFRiIpIHsKICAgIGxldCBlbmNvZGluZzsKICAgIGlmIChzdHJbMF0gPT09ICJceEZFIiAmJiBzdHJbMV0gPT09ICJceEZGIikgewogICAgICBlbmNvZGluZyA9ICJ1dGYtMTZiZSI7CiAgICAgIGlmIChzdHIubGVuZ3RoICUgMiA9PT0gMSkgewogICAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCAtMSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoc3RyWzBdID09PSAiXHhGRiIgJiYgc3RyWzFdID09PSAiXHhGRSIpIHsKICAgICAgZW5jb2RpbmcgPSAidXRmLTE2bGUiOwogICAgICBpZiAoc3RyLmxlbmd0aCAlIDIgPT09IDEpIHsKICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMCwgLTEpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHN0clswXSA9PT0gIlx4RUYiICYmIHN0clsxXSA9PT0gIlx4QkIiICYmIHN0clsyXSA9PT0gIlx4QkYiKSB7CiAgICAgIGVuY29kaW5nID0gInV0Zi04IjsKICAgIH0KICAgIGlmIChlbmNvZGluZykgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcsIHsKICAgICAgICAgIGZhdGFsOiB0cnVlCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgYnVmZmVyID0gc3RyaW5nVG9CeXRlcyhzdHIpOwogICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVyLmRlY29kZShidWZmZXIpOwogICAgICAgIGlmIChrZWVwRXNjYXBlU2VxdWVuY2UgfHwgIWRlY29kZWQuaW5jbHVkZXMoIlx4MWIiKSkgewogICAgICAgICAgcmV0dXJuIGRlY29kZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZWNvZGVkLnJlcGxhY2VBbGwoL1x4MWJbXlx4MWJdKig/Olx4MWJ8JCkvZywgIiIpOwogICAgICB9IGNhdGNoIChleCkgewogICAgICAgIHdhcm4oYHN0cmluZ1RvUERGU3RyaW5nOiAiJHtleH0iLmApOwogICAgICB9CiAgICB9CiAgfQogIGNvbnN0IHN0ckJ1ZiA9IFtdOwogIGZvciAobGV0IGkgPSAwLCBpaSA9IHN0ci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICBjb25zdCBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpOwogICAgaWYgKCFrZWVwRXNjYXBlU2VxdWVuY2UgJiYgY2hhckNvZGUgPT09IDB4MWIpIHsKICAgICAgd2hpbGUgKCsraSA8IGlpICYmIHN0ci5jaGFyQ29kZUF0KGkpICE9PSAweDFiKSB7fQogICAgICBjb250aW51ZTsKICAgIH0KICAgIGNvbnN0IGNvZGUgPSBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZVtjaGFyQ29kZV07CiAgICBzdHJCdWYucHVzaChjb2RlID8gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSA6IHN0ci5jaGFyQXQoaSkpOwogIH0KICByZXR1cm4gc3RyQnVmLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIHN0cmluZ1RvVVRGOFN0cmluZyhzdHIpIHsKICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShzdHIpKTsKfQpmdW5jdGlvbiB1dGY4U3RyaW5nVG9TdHJpbmcoc3RyKSB7CiAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTsKfQpmdW5jdGlvbiBpc0FycmF5RXF1YWwoYXJyMSwgYXJyMikgewogIGlmIChhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZm9yIChsZXQgaSA9IDAsIGlpID0gYXJyMS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGdldE1vZGlmaWNhdGlvbkRhdGUoZGF0ZSA9IG5ldyBEYXRlKCkpIHsKICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHsKICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKTsKICB9CiAgY29uc3QgYnVmZmVyID0gW2RhdGUuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLCAoZGF0ZS5nZXRVVENNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpLCBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIiksIGRhdGUuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIiksIGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKSwgZGF0ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpXTsKICByZXR1cm4gYnVmZmVyLmpvaW4oIiIpOwp9CmxldCBOb3JtYWxpemVSZWdleCA9IG51bGw7CmxldCBOb3JtYWxpemF0aW9uTWFwID0gbnVsbDsKZnVuY3Rpb24gbm9ybWFsaXplVW5pY29kZShzdHIpIHsKICBpZiAoIU5vcm1hbGl6ZVJlZ2V4KSB7CiAgICBOb3JtYWxpemVSZWdleCA9IC8oW1x1MDBhMFx1MDBiNVx1MDM3ZVx1MGViM1x1MjAwMC1cdTIwMGFcdTIwMmZcdTIxMjZcdWZiMDAtXHVmYjA0XHVmYjA2XHVmYjIwLVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2VcdWZiNDAtXHVmYjQxXHVmYjQzLVx1ZmI0NFx1ZmI0Ni1cdWZiYTFcdWZiYTQtXHVmYmE5XHVmYmFlLVx1ZmJiMVx1ZmJkMy1cdWZiZGNcdWZiZGUtXHVmYmU3XHVmYmVhLVx1ZmJmOFx1ZmJmYy1cdWZiZmRcdWZjMDAtXHVmYzVkXHVmYzY0LVx1ZmNmMVx1ZmNmNS1cdWZkM2RcdWZkODhcdWZkZjRcdWZkZmEtXHVmZGZiXHVmZTcxXHVmZTc3XHVmZTc5XHVmZTdiXHVmZTdkXSspfChcdWZiMDUrKS9ndTsKICAgIE5vcm1hbGl6YXRpb25NYXAgPSBuZXcgTWFwKFtbIu+shSIsICLFv3QiXV0pOwogIH0KICByZXR1cm4gc3RyLnJlcGxhY2VBbGwoTm9ybWFsaXplUmVnZXgsIChfLCBwMSwgcDIpID0+IHAxID8gcDEubm9ybWFsaXplKCJORktDIikgOiBOb3JtYWxpemF0aW9uTWFwLmdldChwMikpOwp9CmZ1bmN0aW9uIGdldFV1aWQoKSB7CiAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRCA9PT0gImZ1bmN0aW9uIikgewogICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7CiAgfQogIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KDMyKTsKICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGJ1Zik7CiAgcmV0dXJuIGJ5dGVzVG9TdHJpbmcoYnVmKTsKfQpjb25zdCBBbm5vdGF0aW9uUHJlZml4ID0gInBkZmpzX2ludGVybmFsX2lkXyI7CmZ1bmN0aW9uIF9pc1ZhbGlkRXhwbGljaXREZXN0KHZhbGlkUmVmLCB2YWxpZE5hbWUsIGRlc3QpIHsKICBpZiAoIUFycmF5LmlzQXJyYXkoZGVzdCkgfHwgZGVzdC5sZW5ndGggPCAyKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGNvbnN0IFtwYWdlLCB6b29tLCAuLi5hcmdzXSA9IGRlc3Q7CiAgaWYgKCF2YWxpZFJlZihwYWdlKSAmJiAhTnVtYmVyLmlzSW50ZWdlcihwYWdlKSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpZiAoIXZhbGlkTmFtZSh6b29tKSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBjb25zdCBhcmdzTGVuID0gYXJncy5sZW5ndGg7CiAgbGV0IGFsbG93TnVsbCA9IHRydWU7CiAgc3dpdGNoICh6b29tLm5hbWUpIHsKICAgIGNhc2UgIlhZWiI6CiAgICAgIGlmIChhcmdzTGVuIDwgMiB8fCBhcmdzTGVuID4gMykgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgIkZpdCI6CiAgICBjYXNlICJGaXRCIjoKICAgICAgcmV0dXJuIGFyZ3NMZW4gPT09IDA7CiAgICBjYXNlICJGaXRIIjoKICAgIGNhc2UgIkZpdEJIIjoKICAgIGNhc2UgIkZpdFYiOgogICAgY2FzZSAiRml0QlYiOgogICAgICBpZiAoYXJnc0xlbiA+IDEpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlICJGaXRSIjoKICAgICAgaWYgKGFyZ3NMZW4gIT09IDQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgYWxsb3dOdWxsID0gZmFsc2U7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7CiAgICBpZiAodHlwZW9mIGFyZyA9PT0gIm51bWJlciIgfHwgYWxsb3dOdWxsICYmIGFyZyA9PT0gbnVsbCkgewogICAgICBjb250aW51ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gTWF0aENsYW1wKHYsIG1pbiwgbWF4KSB7CiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHYsIG1pbiksIG1heCk7Cn0KZnVuY3Rpb24gdG9IZXhVdGlsKGFycikgewogIGlmIChVaW50OEFycmF5LnByb3RvdHlwZS50b0hleCkgewogICAgcmV0dXJuIGFyci50b0hleCgpOwogIH0KICByZXR1cm4gQXJyYXkuZnJvbShhcnIsIG51bSA9PiBoZXhOdW1iZXJzW251bV0pLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIHRvQmFzZTY0VXRpbChhcnIpIHsKICBpZiAoVWludDhBcnJheS5wcm90b3R5cGUudG9CYXNlNjQpIHsKICAgIHJldHVybiBhcnIudG9CYXNlNjQoKTsKICB9CiAgcmV0dXJuIGJ0b2EoYnl0ZXNUb1N0cmluZyhhcnIpKTsKfQpmdW5jdGlvbiBmcm9tQmFzZTY0VXRpbChzdHIpIHsKICBpZiAoVWludDhBcnJheS5mcm9tQmFzZTY0KSB7CiAgICByZXR1cm4gVWludDhBcnJheS5mcm9tQmFzZTY0KHN0cik7CiAgfQogIHJldHVybiBzdHJpbmdUb0J5dGVzKGF0b2Ioc3RyKSk7Cn0KaWYgKHR5cGVvZiBQcm9taXNlLnRyeSAhPT0gImZ1bmN0aW9uIikgewogIFByb21pc2UudHJ5ID0gZnVuY3Rpb24gKGZuLCAuLi5hcmdzKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CiAgICAgIHJlc29sdmUoZm4oLi4uYXJncykpOwogICAgfSk7CiAgfTsKfQppZiAodHlwZW9mIE1hdGguc3VtUHJlY2lzZSAhPT0gImZ1bmN0aW9uIikgewogIE1hdGguc3VtUHJlY2lzZSA9IGZ1bmN0aW9uIChudW1iZXJzKSB7CiAgICByZXR1cm4gbnVtYmVycy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTsKICB9Owp9Cgo7Ly8gLi9zcmMvZGlzcGxheS94ZmFfdGV4dC5qcwpjbGFzcyBYZmFUZXh0IHsKICBzdGF0aWMgdGV4dENvbnRlbnQoeGZhKSB7CiAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgY29uc3Qgb3V0cHV0ID0gewogICAgICBpdGVtcywKICAgICAgc3R5bGVzOiBPYmplY3QuY3JlYXRlKG51bGwpCiAgICB9OwogICAgZnVuY3Rpb24gd2Fsayhub2RlKSB7CiAgICAgIGlmICghbm9kZSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBsZXQgc3RyID0gbnVsbDsKICAgICAgY29uc3QgbmFtZSA9IG5vZGUubmFtZTsKICAgICAgaWYgKG5hbWUgPT09ICIjdGV4dCIpIHsKICAgICAgICBzdHIgPSBub2RlLnZhbHVlOwogICAgICB9IGVsc2UgaWYgKCFYZmFUZXh0LnNob3VsZEJ1aWxkVGV4dChuYW1lKSkgewogICAgICAgIHJldHVybjsKICAgICAgfSBlbHNlIGlmIChub2RlPy5hdHRyaWJ1dGVzPy50ZXh0Q29udGVudCkgewogICAgICAgIHN0ciA9IG5vZGUuYXR0cmlidXRlcy50ZXh0Q29udGVudDsKICAgICAgfSBlbHNlIGlmIChub2RlLnZhbHVlKSB7CiAgICAgICAgc3RyID0gbm9kZS52YWx1ZTsKICAgICAgfQogICAgICBpZiAoc3RyICE9PSBudWxsKSB7CiAgICAgICAgaXRlbXMucHVzaCh7CiAgICAgICAgICBzdHIKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7CiAgICAgICAgd2FsayhjaGlsZCk7CiAgICAgIH0KICAgIH0KICAgIHdhbGsoeGZhKTsKICAgIHJldHVybiBvdXRwdXQ7CiAgfQogIHN0YXRpYyBzaG91bGRCdWlsZFRleHQobmFtZSkgewogICAgcmV0dXJuICEobmFtZSA9PT0gInRleHRhcmVhIiB8fCBuYW1lID09PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJvcHRpb24iIHx8IG5hbWUgPT09ICJzZWxlY3QiKTsKICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L3hmYV9sYXllci5qcwoKY2xhc3MgWGZhTGF5ZXIgewogIHN0YXRpYyBzZXR1cFN0b3JhZ2UoaHRtbCwgaWQsIGVsZW1lbnQsIHN0b3JhZ2UsIGludGVudCkgewogICAgY29uc3Qgc3RvcmVkRGF0YSA9IHN0b3JhZ2UuZ2V0VmFsdWUoaWQsIHsKICAgICAgdmFsdWU6IG51bGwKICAgIH0pOwogICAgc3dpdGNoIChlbGVtZW50Lm5hbWUpIHsKICAgICAgY2FzZSAidGV4dGFyZWEiOgogICAgICAgIGlmIChzdG9yZWREYXRhLnZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgICBodG1sLnRleHRDb250ZW50ID0gc3RvcmVkRGF0YS52YWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGludGVudCA9PT0gInByaW50IikgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGh0bWwuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBldmVudCA9PiB7CiAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7CiAgICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWUKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJpbnB1dCI6CiAgICAgICAgaWYgKGVsZW1lbnQuYXR0cmlidXRlcy50eXBlID09PSAicmFkaW8iIHx8IGVsZW1lbnQuYXR0cmlidXRlcy50eXBlID09PSAiY2hlY2tib3giKSB7CiAgICAgICAgICBpZiAoc3RvcmVkRGF0YS52YWx1ZSA9PT0gZWxlbWVudC5hdHRyaWJ1dGVzLnhmYU9uKSB7CiAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwgdHJ1ZSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHN0b3JlZERhdGEudmFsdWUgPT09IGVsZW1lbnQuYXR0cmlidXRlcy54ZmFPZmYpIHsKICAgICAgICAgICAgaHRtbC5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpbnRlbnQgPT09ICJwcmludCIpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBodG1sLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGV2ZW50ID0+IHsKICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwgewogICAgICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQuY2hlY2tlZCA/IGV2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoInhmYU9uIikgOiBldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCJ4ZmFPZmYiKQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RvcmVkRGF0YS52YWx1ZSAhPT0gbnVsbCkgewogICAgICAgICAgICBodG1sLnNldEF0dHJpYnV0ZSgidmFsdWUiLCBzdG9yZWREYXRhLnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpbnRlbnQgPT09ICJwcmludCIpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBodG1sLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZXZlbnQgPT4gewogICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7CiAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAic2VsZWN0IjoKICAgICAgICBpZiAoc3RvcmVkRGF0YS52YWx1ZSAhPT0gbnVsbCkgewogICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgc3RvcmVkRGF0YS52YWx1ZSk7CiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBlbGVtZW50LmNoaWxkcmVuKSB7CiAgICAgICAgICAgIGlmIChvcHRpb24uYXR0cmlidXRlcy52YWx1ZSA9PT0gc3RvcmVkRGF0YS52YWx1ZSkgewogICAgICAgICAgICAgIG9wdGlvbi5hdHRyaWJ1dGVzLnNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb24uYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eSgic2VsZWN0ZWQiKSkgewogICAgICAgICAgICAgIGRlbGV0ZSBvcHRpb24uYXR0cmlidXRlcy5zZWxlY3RlZDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBodG1sLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZXZlbnQgPT4gewogICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGV2ZW50LnRhcmdldC5vcHRpb25zOwogICAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnNlbGVjdGVkSW5kZXggPT09IC0xID8gIiIgOiBvcHRpb25zW29wdGlvbnMuc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7CiAgICAgICAgICAgIHZhbHVlCiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgIH0KICB9CiAgc3RhdGljIHNldEF0dHJpYnV0ZXMoewogICAgaHRtbCwKICAgIGVsZW1lbnQsCiAgICBzdG9yYWdlID0gbnVsbCwKICAgIGludGVudCwKICAgIGxpbmtTZXJ2aWNlCiAgfSkgewogICAgY29uc3QgewogICAgICBhdHRyaWJ1dGVzCiAgICB9ID0gZWxlbWVudDsKICAgIGNvbnN0IGlzSFRNTEFuY2hvckVsZW1lbnQgPSBodG1sIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQ7CiAgICBpZiAoYXR0cmlidXRlcy50eXBlID09PSAicmFkaW8iKSB7CiAgICAgIGF0dHJpYnV0ZXMubmFtZSA9IGAke2F0dHJpYnV0ZXMubmFtZX0tJHtpbnRlbnR9YDsKICAgIH0KICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7CiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgc3dpdGNoIChrZXkpIHsKICAgICAgICBjYXNlICJjbGFzcyI6CiAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKSB7CiAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUuam9pbigiICIpKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImRhdGFJZCI6CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJpZCI6CiAgICAgICAgICBodG1sLnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIiwgdmFsdWUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAic3R5bGUiOgogICAgICAgICAgT2JqZWN0LmFzc2lnbihodG1sLnN0eWxlLCB2YWx1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ0ZXh0Q29udGVudCI6CiAgICAgICAgICBodG1sLnRleHRDb250ZW50ID0gdmFsdWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgaWYgKCFpc0hUTUxBbmNob3JFbGVtZW50IHx8IGtleSAhPT0gImhyZWYiICYmIGtleSAhPT0gIm5ld1dpbmRvdyIpIHsKICAgICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChpc0hUTUxBbmNob3JFbGVtZW50KSB7CiAgICAgIGxpbmtTZXJ2aWNlLmFkZExpbmtBdHRyaWJ1dGVzKGh0bWwsIGF0dHJpYnV0ZXMuaHJlZiwgYXR0cmlidXRlcy5uZXdXaW5kb3cpOwogICAgfQogICAgaWYgKHN0b3JhZ2UgJiYgYXR0cmlidXRlcy5kYXRhSWQpIHsKICAgICAgdGhpcy5zZXR1cFN0b3JhZ2UoaHRtbCwgYXR0cmlidXRlcy5kYXRhSWQsIGVsZW1lbnQsIHN0b3JhZ2UpOwogICAgfQogIH0KICBzdGF0aWMgcmVuZGVyKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHN0b3JhZ2UgPSBwYXJhbWV0ZXJzLmFubm90YXRpb25TdG9yYWdlOwogICAgY29uc3QgbGlua1NlcnZpY2UgPSBwYXJhbWV0ZXJzLmxpbmtTZXJ2aWNlOwogICAgY29uc3Qgcm9vdCA9IHBhcmFtZXRlcnMueGZhSHRtbDsKICAgIGNvbnN0IGludGVudCA9IHBhcmFtZXRlcnMuaW50ZW50IHx8ICJkaXNwbGF5IjsKICAgIGNvbnN0IHJvb3RIdG1sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChyb290Lm5hbWUpOwogICAgaWYgKHJvb3QuYXR0cmlidXRlcykgewogICAgICB0aGlzLnNldEF0dHJpYnV0ZXMoewogICAgICAgIGh0bWw6IHJvb3RIdG1sLAogICAgICAgIGVsZW1lbnQ6IHJvb3QsCiAgICAgICAgaW50ZW50LAogICAgICAgIGxpbmtTZXJ2aWNlCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgaXNOb3RGb3JSaWNoVGV4dCA9IGludGVudCAhPT0gInJpY2hUZXh0IjsKICAgIGNvbnN0IHJvb3REaXYgPSBwYXJhbWV0ZXJzLmRpdjsKICAgIHJvb3REaXYuYXBwZW5kKHJvb3RIdG1sKTsKICAgIGlmIChwYXJhbWV0ZXJzLnZpZXdwb3J0KSB7CiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGBtYXRyaXgoJHtwYXJhbWV0ZXJzLnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIil9KWA7CiAgICAgIHJvb3REaXYuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtOwogICAgfQogICAgaWYgKGlzTm90Rm9yUmljaFRleHQpIHsKICAgICAgcm9vdERpdi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInhmYUxheWVyIHhmYUZvbnQiKTsKICAgIH0KICAgIGNvbnN0IHRleHREaXZzID0gW107CiAgICBpZiAocm9vdC5jaGlsZHJlbi5sZW5ndGggPT09IDApIHsKICAgICAgaWYgKHJvb3QudmFsdWUpIHsKICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocm9vdC52YWx1ZSk7CiAgICAgICAgcm9vdEh0bWwuYXBwZW5kKG5vZGUpOwogICAgICAgIGlmIChpc05vdEZvclJpY2hUZXh0ICYmIFhmYVRleHQuc2hvdWxkQnVpbGRUZXh0KHJvb3QubmFtZSkpIHsKICAgICAgICAgIHRleHREaXZzLnB1c2gobm9kZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgdGV4dERpdnMKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IHN0YWNrID0gW1tyb290LCAtMSwgcm9vdEh0bWxdXTsKICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7CiAgICAgIGNvbnN0IFtwYXJlbnQsIGksIGh0bWxdID0gc3RhY2suYXQoLTEpOwogICAgICBpZiAoaSArIDEgPT09IHBhcmVudC5jaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5jaGlsZHJlblsrK3N0YWNrLmF0KC0xKVsxXV07CiAgICAgIGlmIChjaGlsZCA9PT0gbnVsbCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IHsKICAgICAgICBuYW1lCiAgICAgIH0gPSBjaGlsZDsKICAgICAgaWYgKG5hbWUgPT09ICIjdGV4dCIpIHsKICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGQudmFsdWUpOwogICAgICAgIHRleHREaXZzLnB1c2gobm9kZSk7CiAgICAgICAgaHRtbC5hcHBlbmQobm9kZSk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgY2hpbGRIdG1sID0gY2hpbGQ/LmF0dHJpYnV0ZXM/LnhtbG5zID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGNoaWxkLmF0dHJpYnV0ZXMueG1sbnMsIG5hbWUpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKTsKICAgICAgaHRtbC5hcHBlbmQoY2hpbGRIdG1sKTsKICAgICAgaWYgKGNoaWxkLmF0dHJpYnV0ZXMpIHsKICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZXMoewogICAgICAgICAgaHRtbDogY2hpbGRIdG1sLAogICAgICAgICAgZWxlbWVudDogY2hpbGQsCiAgICAgICAgICBzdG9yYWdlLAogICAgICAgICAgaW50ZW50LAogICAgICAgICAgbGlua1NlcnZpY2UKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoY2hpbGQuY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHsKICAgICAgICBzdGFjay5wdXNoKFtjaGlsZCwgLTEsIGNoaWxkSHRtbF0pOwogICAgICB9IGVsc2UgaWYgKGNoaWxkLnZhbHVlKSB7CiAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoaWxkLnZhbHVlKTsKICAgICAgICBpZiAoaXNOb3RGb3JSaWNoVGV4dCAmJiBYZmFUZXh0LnNob3VsZEJ1aWxkVGV4dChuYW1lKSkgewogICAgICAgICAgdGV4dERpdnMucHVzaChub2RlKTsKICAgICAgICB9CiAgICAgICAgY2hpbGRIdG1sLmFwcGVuZChub2RlKTsKICAgICAgfQogICAgfQogICAgZm9yIChjb25zdCBlbCBvZiByb290RGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIi54ZmFOb25JbnRlcmFjdGl2ZSBpbnB1dCwgLnhmYU5vbkludGVyYWN0aXZlIHRleHRhcmVhIikpIHsKICAgICAgZWwuc2V0QXR0cmlidXRlKCJyZWFkT25seSIsIHRydWUpOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgdGV4dERpdnMKICAgIH07CiAgfQogIHN0YXRpYyB1cGRhdGUocGFyYW1ldGVycykgewogICAgY29uc3QgdHJhbnNmb3JtID0gYG1hdHJpeCgke3BhcmFtZXRlcnMudmlld3BvcnQudHJhbnNmb3JtLmpvaW4oIiwiKX0pYDsKICAgIHBhcmFtZXRlcnMuZGl2LnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKICAgIHBhcmFtZXRlcnMuZGl2LmhpZGRlbiA9IGZhbHNlOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZGlzcGxheV91dGlscy5qcwoKCmNvbnN0IFNWR19OUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7CmNsYXNzIFBpeGVsc1BlckluY2ggewogIHN0YXRpYyBDU1MgPSA5Ni4wOwogIHN0YXRpYyBQREYgPSA3Mi4wOwogIHN0YXRpYyBQREZfVE9fQ1NTX1VOSVRTID0gdGhpcy5DU1MgLyB0aGlzLlBERjsKfQphc3luYyBmdW5jdGlvbiBmZXRjaERhdGEodXJsLCB0eXBlID0gInRleHQiKSB7CiAgaWYgKGlzVmFsaWRGZXRjaFVybCh1cmwsIGRvY3VtZW50LmJhc2VVUkkpKSB7CiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7CiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0KTsKICAgIH0KICAgIHN3aXRjaCAodHlwZSkgewogICAgICBjYXNlICJhcnJheWJ1ZmZlciI6CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7CiAgICAgIGNhc2UgImJsb2IiOgogICAgICAgIHJldHVybiByZXNwb25zZS5ibG9iKCk7CiAgICAgIGNhc2UgImpzb24iOgogICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7CiAgICB9CiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpOwogIH0KICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgY29uc3QgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgcmVxdWVzdC5vcGVuKCJHRVQiLCB1cmwsIHRydWUpOwogICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSB0eXBlOwogICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7CiAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgIT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDAgfHwgcmVxdWVzdC5zdGF0dXMgPT09IDApIHsKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgIGNhc2UgImFycmF5YnVmZmVyIjoKICAgICAgICAgIGNhc2UgImJsb2IiOgogICAgICAgICAgY2FzZSAianNvbiI6CiAgICAgICAgICAgIHJlc29sdmUocmVxdWVzdC5yZXNwb25zZSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgcmVzb2x2ZShyZXF1ZXN0LnJlc3BvbnNlVGV4dCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHJlamVjdChuZXcgRXJyb3IocmVxdWVzdC5zdGF0dXNUZXh0KSk7CiAgICB9OwogICAgcmVxdWVzdC5zZW5kKG51bGwpOwogIH0pOwp9CmNsYXNzIFBhZ2VWaWV3cG9ydCB7CiAgY29uc3RydWN0b3IoewogICAgdmlld0JveCwKICAgIHVzZXJVbml0LAogICAgc2NhbGUsCiAgICByb3RhdGlvbiwKICAgIG9mZnNldFggPSAwLAogICAgb2Zmc2V0WSA9IDAsCiAgICBkb250RmxpcCA9IGZhbHNlCiAgfSkgewogICAgdGhpcy52aWV3Qm94ID0gdmlld0JveDsKICAgIHRoaXMudXNlclVuaXQgPSB1c2VyVW5pdDsKICAgIHRoaXMuc2NhbGUgPSBzY2FsZTsKICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbjsKICAgIHRoaXMub2Zmc2V0WCA9IG9mZnNldFg7CiAgICB0aGlzLm9mZnNldFkgPSBvZmZzZXRZOwogICAgc2NhbGUgKj0gdXNlclVuaXQ7CiAgICBjb25zdCBjZW50ZXJYID0gKHZpZXdCb3hbMl0gKyB2aWV3Qm94WzBdKSAvIDI7CiAgICBjb25zdCBjZW50ZXJZID0gKHZpZXdCb3hbM10gKyB2aWV3Qm94WzFdKSAvIDI7CiAgICBsZXQgcm90YXRlQSwgcm90YXRlQiwgcm90YXRlQywgcm90YXRlRDsKICAgIHJvdGF0aW9uICU9IDM2MDsKICAgIGlmIChyb3RhdGlvbiA8IDApIHsKICAgICAgcm90YXRpb24gKz0gMzYwOwogICAgfQogICAgc3dpdGNoIChyb3RhdGlvbikgewogICAgICBjYXNlIDE4MDoKICAgICAgICByb3RhdGVBID0gLTE7CiAgICAgICAgcm90YXRlQiA9IDA7CiAgICAgICAgcm90YXRlQyA9IDA7CiAgICAgICAgcm90YXRlRCA9IDE7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgOTA6CiAgICAgICAgcm90YXRlQSA9IDA7CiAgICAgICAgcm90YXRlQiA9IDE7CiAgICAgICAgcm90YXRlQyA9IDE7CiAgICAgICAgcm90YXRlRCA9IDA7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjcwOgogICAgICAgIHJvdGF0ZUEgPSAwOwogICAgICAgIHJvdGF0ZUIgPSAtMTsKICAgICAgICByb3RhdGVDID0gLTE7CiAgICAgICAgcm90YXRlRCA9IDA7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMDoKICAgICAgICByb3RhdGVBID0gMTsKICAgICAgICByb3RhdGVCID0gMDsKICAgICAgICByb3RhdGVDID0gMDsKICAgICAgICByb3RhdGVEID0gLTE7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJQYWdlVmlld3BvcnQ6IEludmFsaWQgcm90YXRpb24sIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA5MCBkZWdyZWVzLiIpOwogICAgfQogICAgaWYgKGRvbnRGbGlwKSB7CiAgICAgIHJvdGF0ZUMgPSAtcm90YXRlQzsKICAgICAgcm90YXRlRCA9IC1yb3RhdGVEOwogICAgfQogICAgbGV0IG9mZnNldENhbnZhc1gsIG9mZnNldENhbnZhc1k7CiAgICBsZXQgd2lkdGgsIGhlaWdodDsKICAgIGlmIChyb3RhdGVBID09PSAwKSB7CiAgICAgIG9mZnNldENhbnZhc1ggPSBNYXRoLmFicyhjZW50ZXJZIC0gdmlld0JveFsxXSkgKiBzY2FsZSArIG9mZnNldFg7CiAgICAgIG9mZnNldENhbnZhc1kgPSBNYXRoLmFicyhjZW50ZXJYIC0gdmlld0JveFswXSkgKiBzY2FsZSArIG9mZnNldFk7CiAgICAgIHdpZHRoID0gKHZpZXdCb3hbM10gLSB2aWV3Qm94WzFdKSAqIHNjYWxlOwogICAgICBoZWlnaHQgPSAodmlld0JveFsyXSAtIHZpZXdCb3hbMF0pICogc2NhbGU7CiAgICB9IGVsc2UgewogICAgICBvZmZzZXRDYW52YXNYID0gTWF0aC5hYnMoY2VudGVyWCAtIHZpZXdCb3hbMF0pICogc2NhbGUgKyBvZmZzZXRYOwogICAgICBvZmZzZXRDYW52YXNZID0gTWF0aC5hYnMoY2VudGVyWSAtIHZpZXdCb3hbMV0pICogc2NhbGUgKyBvZmZzZXRZOwogICAgICB3aWR0aCA9ICh2aWV3Qm94WzJdIC0gdmlld0JveFswXSkgKiBzY2FsZTsKICAgICAgaGVpZ2h0ID0gKHZpZXdCb3hbM10gLSB2aWV3Qm94WzFdKSAqIHNjYWxlOwogICAgfQogICAgdGhpcy50cmFuc2Zvcm0gPSBbcm90YXRlQSAqIHNjYWxlLCByb3RhdGVCICogc2NhbGUsIHJvdGF0ZUMgKiBzY2FsZSwgcm90YXRlRCAqIHNjYWxlLCBvZmZzZXRDYW52YXNYIC0gcm90YXRlQSAqIHNjYWxlICogY2VudGVyWCAtIHJvdGF0ZUMgKiBzY2FsZSAqIGNlbnRlclksIG9mZnNldENhbnZhc1kgLSByb3RhdGVCICogc2NhbGUgKiBjZW50ZXJYIC0gcm90YXRlRCAqIHNjYWxlICogY2VudGVyWV07CiAgICB0aGlzLndpZHRoID0gd2lkdGg7CiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKICB9CiAgZ2V0IHJhd0RpbXMoKSB7CiAgICBjb25zdCBkaW1zID0gdGhpcy52aWV3Qm94OwogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAicmF3RGltcyIsIHsKICAgICAgcGFnZVdpZHRoOiBkaW1zWzJdIC0gZGltc1swXSwKICAgICAgcGFnZUhlaWdodDogZGltc1szXSAtIGRpbXNbMV0sCiAgICAgIHBhZ2VYOiBkaW1zWzBdLAogICAgICBwYWdlWTogZGltc1sxXQogICAgfSk7CiAgfQogIGNsb25lKHsKICAgIHNjYWxlID0gdGhpcy5zY2FsZSwKICAgIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbiwKICAgIG9mZnNldFggPSB0aGlzLm9mZnNldFgsCiAgICBvZmZzZXRZID0gdGhpcy5vZmZzZXRZLAogICAgZG9udEZsaXAgPSBmYWxzZQogIH0gPSB7fSkgewogICAgcmV0dXJuIG5ldyBQYWdlVmlld3BvcnQoewogICAgICB2aWV3Qm94OiB0aGlzLnZpZXdCb3guc2xpY2UoKSwKICAgICAgdXNlclVuaXQ6IHRoaXMudXNlclVuaXQsCiAgICAgIHNjYWxlLAogICAgICByb3RhdGlvbiwKICAgICAgb2Zmc2V0WCwKICAgICAgb2Zmc2V0WSwKICAgICAgZG9udEZsaXAKICAgIH0pOwogIH0KICBjb252ZXJ0VG9WaWV3cG9ydFBvaW50KHgsIHkpIHsKICAgIGNvbnN0IHAgPSBbeCwgeV07CiAgICBVdGlsLmFwcGx5VHJhbnNmb3JtKHAsIHRoaXMudHJhbnNmb3JtKTsKICAgIHJldHVybiBwOwogIH0KICBjb252ZXJ0VG9WaWV3cG9ydFJlY3RhbmdsZShyZWN0KSB7CiAgICBjb25zdCB0b3BMZWZ0ID0gW3JlY3RbMF0sIHJlY3RbMV1dOwogICAgVXRpbC5hcHBseVRyYW5zZm9ybSh0b3BMZWZ0LCB0aGlzLnRyYW5zZm9ybSk7CiAgICBjb25zdCBib3R0b21SaWdodCA9IFtyZWN0WzJdLCByZWN0WzNdXTsKICAgIFV0aWwuYXBwbHlUcmFuc2Zvcm0oYm90dG9tUmlnaHQsIHRoaXMudHJhbnNmb3JtKTsKICAgIHJldHVybiBbdG9wTGVmdFswXSwgdG9wTGVmdFsxXSwgYm90dG9tUmlnaHRbMF0sIGJvdHRvbVJpZ2h0WzFdXTsKICB9CiAgY29udmVydFRvUGRmUG9pbnQoeCwgeSkgewogICAgY29uc3QgcCA9IFt4LCB5XTsKICAgIFV0aWwuYXBwbHlJbnZlcnNlVHJhbnNmb3JtKHAsIHRoaXMudHJhbnNmb3JtKTsKICAgIHJldHVybiBwOwogIH0KfQpjbGFzcyBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHsKICBjb25zdHJ1Y3Rvcihtc2csIGV4dHJhRGVsYXkgPSAwKSB7CiAgICBzdXBlcihtc2csICJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iKTsKICAgIHRoaXMuZXh0cmFEZWxheSA9IGV4dHJhRGVsYXk7CiAgfQp9CmZ1bmN0aW9uIGlzRGF0YVNjaGVtZSh1cmwpIHsKICBjb25zdCBpaSA9IHVybC5sZW5ndGg7CiAgbGV0IGkgPSAwOwogIHdoaWxlIChpIDwgaWkgJiYgdXJsW2ldLnRyaW0oKSA9PT0gIiIpIHsKICAgIGkrKzsKICB9CiAgcmV0dXJuIHVybC5zdWJzdHJpbmcoaSwgaSArIDUpLnRvTG93ZXJDYXNlKCkgPT09ICJkYXRhOiI7Cn0KZnVuY3Rpb24gaXNQZGZGaWxlKGZpbGVuYW1lKSB7CiAgcmV0dXJuIHR5cGVvZiBmaWxlbmFtZSA9PT0gInN0cmluZyIgJiYgL1wucGRmJC9pLnRlc3QoZmlsZW5hbWUpOwp9CmZ1bmN0aW9uIGdldEZpbGVuYW1lRnJvbVVybCh1cmwpIHsKICBbdXJsXSA9IHVybC5zcGxpdCgvWyM/XS8sIDEpOwogIHJldHVybiB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZigiLyIpICsgMSk7Cn0KZnVuY3Rpb24gZ2V0UGRmRmlsZW5hbWVGcm9tVXJsKHVybCwgZGVmYXVsdEZpbGVuYW1lID0gImRvY3VtZW50LnBkZiIpIHsKICBpZiAodHlwZW9mIHVybCAhPT0gInN0cmluZyIpIHsKICAgIHJldHVybiBkZWZhdWx0RmlsZW5hbWU7CiAgfQogIGlmIChpc0RhdGFTY2hlbWUodXJsKSkgewogICAgd2FybignZ2V0UGRmRmlsZW5hbWVGcm9tVXJsOiBpZ25vcmUgImRhdGE6Ii1VUkwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuJyk7CiAgICByZXR1cm4gZGVmYXVsdEZpbGVuYW1lOwogIH0KICBjb25zdCBnZXRVUkwgPSB1cmxTdHJpbmcgPT4gewogICAgdHJ5IHsKICAgICAgcmV0dXJuIG5ldyBVUkwodXJsU3RyaW5nKTsKICAgIH0gY2F0Y2ggewogICAgICB0cnkgewogICAgICAgIHJldHVybiBuZXcgVVJMKGRlY29kZVVSSUNvbXBvbmVudCh1cmxTdHJpbmcpKTsKICAgICAgfSBjYXRjaCB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBuZXcgVVJMKHVybFN0cmluZywgImh0dHBzOi8vZm9vLmJhciIpOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBVUkwoZGVjb2RlVVJJQ29tcG9uZW50KHVybFN0cmluZyksICJodHRwczovL2Zvby5iYXIiKTsKICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9OwogIGNvbnN0IG5ld1VSTCA9IGdldFVSTCh1cmwpOwogIGlmICghbmV3VVJMKSB7CiAgICByZXR1cm4gZGVmYXVsdEZpbGVuYW1lOwogIH0KICBjb25zdCBkZWNvZGUgPSBuYW1lID0+IHsKICAgIHRyeSB7CiAgICAgIGxldCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpOwogICAgICBpZiAoZGVjb2RlZC5pbmNsdWRlcygiLyIpKSB7CiAgICAgICAgZGVjb2RlZCA9IGRlY29kZWQuc3BsaXQoIi8iKS5hdCgtMSk7CiAgICAgICAgaWYgKGRlY29kZWQudGVzdCgvXlwucGRmJC9pKSkgewogICAgICAgICAgcmV0dXJuIGRlY29kZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuYW1lOwogICAgICB9CiAgICAgIHJldHVybiBkZWNvZGVkOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBuYW1lOwogICAgfQogIH07CiAgY29uc3QgcGRmUmVnZXggPSAvXC5wZGYkL2k7CiAgY29uc3QgZmlsZW5hbWUgPSBuZXdVUkwucGF0aG5hbWUuc3BsaXQoIi8iKS5hdCgtMSk7CiAgaWYgKHBkZlJlZ2V4LnRlc3QoZmlsZW5hbWUpKSB7CiAgICByZXR1cm4gZGVjb2RlKGZpbGVuYW1lKTsKICB9CiAgaWYgKG5ld1VSTC5zZWFyY2hQYXJhbXMuc2l6ZSA+IDApIHsKICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmZyb20obmV3VVJMLnNlYXJjaFBhcmFtcy52YWx1ZXMoKSkucmV2ZXJzZSgpOwogICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHsKICAgICAgaWYgKHBkZlJlZ2V4LnRlc3QodmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIGRlY29kZSh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGtleXMgPSBBcnJheS5mcm9tKG5ld1VSTC5zZWFyY2hQYXJhbXMua2V5cygpKS5yZXZlcnNlKCk7CiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7CiAgICAgIGlmIChwZGZSZWdleC50ZXN0KGtleSkpIHsKICAgICAgICByZXR1cm4gZGVjb2RlKGtleSk7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKG5ld1VSTC5oYXNoKSB7CiAgICBjb25zdCByZUZpbGVuYW1lID0gL1teLz8jPV0rXC5wZGZcYig/IS4qXC5wZGZcYikvaTsKICAgIGNvbnN0IGhhc2hGaWxlbmFtZSA9IHJlRmlsZW5hbWUuZXhlYyhuZXdVUkwuaGFzaCk7CiAgICBpZiAoaGFzaEZpbGVuYW1lKSB7CiAgICAgIHJldHVybiBkZWNvZGUoaGFzaEZpbGVuYW1lWzBdKTsKICAgIH0KICB9CiAgcmV0dXJuIGRlZmF1bHRGaWxlbmFtZTsKfQpjbGFzcyBTdGF0VGltZXIgewogIHN0YXJ0ZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogIHRpbWVzID0gW107CiAgdGltZShuYW1lKSB7CiAgICBpZiAobmFtZSBpbiB0aGlzLnN0YXJ0ZWQpIHsKICAgICAgd2FybihgVGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGZvciAke25hbWV9YCk7CiAgICB9CiAgICB0aGlzLnN0YXJ0ZWRbbmFtZV0gPSBEYXRlLm5vdygpOwogIH0KICB0aW1lRW5kKG5hbWUpIHsKICAgIGlmICghKG5hbWUgaW4gdGhpcy5zdGFydGVkKSkgewogICAgICB3YXJuKGBUaW1lciBoYXMgbm90IGJlZW4gc3RhcnRlZCBmb3IgJHtuYW1lfWApOwogICAgfQogICAgdGhpcy50aW1lcy5wdXNoKHsKICAgICAgbmFtZSwKICAgICAgc3RhcnQ6IHRoaXMuc3RhcnRlZFtuYW1lXSwKICAgICAgZW5kOiBEYXRlLm5vdygpCiAgICB9KTsKICAgIGRlbGV0ZSB0aGlzLnN0YXJ0ZWRbbmFtZV07CiAgfQogIHRvU3RyaW5nKCkgewogICAgY29uc3Qgb3V0QnVmID0gW107CiAgICBsZXQgbG9uZ2VzdCA9IDA7CiAgICBmb3IgKGNvbnN0IHsKICAgICAgbmFtZQogICAgfSBvZiB0aGlzLnRpbWVzKSB7CiAgICAgIGxvbmdlc3QgPSBNYXRoLm1heChuYW1lLmxlbmd0aCwgbG9uZ2VzdCk7CiAgICB9CiAgICBmb3IgKGNvbnN0IHsKICAgICAgbmFtZSwKICAgICAgc3RhcnQsCiAgICAgIGVuZAogICAgfSBvZiB0aGlzLnRpbWVzKSB7CiAgICAgIG91dEJ1Zi5wdXNoKGAke25hbWUucGFkRW5kKGxvbmdlc3QpfSAke2VuZCAtIHN0YXJ0fW1zXG5gKTsKICAgIH0KICAgIHJldHVybiBvdXRCdWYuam9pbigiIik7CiAgfQp9CmZ1bmN0aW9uIGlzVmFsaWRGZXRjaFVybCh1cmwsIGJhc2VVcmwpIHsKICBjb25zdCByZXMgPSBiYXNlVXJsID8gVVJMLnBhcnNlKHVybCwgYmFzZVVybCkgOiBVUkwucGFyc2UodXJsKTsKICByZXR1cm4gcmVzPy5wcm90b2NvbCA9PT0gImh0dHA6IiB8fCByZXM/LnByb3RvY29sID09PSAiaHR0cHM6IjsKfQpmdW5jdGlvbiBub0NvbnRleHRNZW51KGUpIHsKICBlLnByZXZlbnREZWZhdWx0KCk7Cn0KZnVuY3Rpb24gc3RvcEV2ZW50KGUpIHsKICBlLnByZXZlbnREZWZhdWx0KCk7CiAgZS5zdG9wUHJvcGFnYXRpb24oKTsKfQpmdW5jdGlvbiBkZXByZWNhdGVkKGRldGFpbHMpIHsKICBjb25zb2xlLmxvZygiRGVwcmVjYXRlZCBBUEkgdXNhZ2U6ICIgKyBkZXRhaWxzKTsKfQpjbGFzcyBQREZEYXRlU3RyaW5nIHsKICBzdGF0aWMgI3JlZ2V4OwogIHN0YXRpYyB0b0RhdGVPYmplY3QoaW5wdXQpIHsKICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIERhdGUpIHsKICAgICAgcmV0dXJuIGlucHV0OwogICAgfQogICAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICJzdHJpbmciKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgdGhpcy4jcmVnZXggfHw9IG5ldyBSZWdFeHAoIl5EOiIgKyAiKFxcZHs0fSkiICsgIihcXGR7Mn0pPyIgKyAiKFxcZHsyfSk/IiArICIoXFxkezJ9KT8iICsgIihcXGR7Mn0pPyIgKyAiKFxcZHsyfSk/IiArICIoW1p8K3wtXSk/IiArICIoXFxkezJ9KT8iICsgIic/IiArICIoXFxkezJ9KT8iICsgIic/Iik7CiAgICBjb25zdCBtYXRjaGVzID0gdGhpcy4jcmVnZXguZXhlYyhpbnB1dCk7CiAgICBpZiAoIW1hdGNoZXMpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApOwogICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTApOwogICAgbW9udGggPSBtb250aCA+PSAxICYmIG1vbnRoIDw9IDEyID8gbW9udGggLSAxIDogMDsKICAgIGxldCBkYXkgPSBwYXJzZUludChtYXRjaGVzWzNdLCAxMCk7CiAgICBkYXkgPSBkYXkgPj0gMSAmJiBkYXkgPD0gMzEgPyBkYXkgOiAxOwogICAgbGV0IGhvdXIgPSBwYXJzZUludChtYXRjaGVzWzRdLCAxMCk7CiAgICBob3VyID0gaG91ciA+PSAwICYmIGhvdXIgPD0gMjMgPyBob3VyIDogMDsKICAgIGxldCBtaW51dGUgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMCk7CiAgICBtaW51dGUgPSBtaW51dGUgPj0gMCAmJiBtaW51dGUgPD0gNTkgPyBtaW51dGUgOiAwOwogICAgbGV0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoZXNbNl0sIDEwKTsKICAgIHNlY29uZCA9IHNlY29uZCA+PSAwICYmIHNlY29uZCA8PSA1OSA/IHNlY29uZCA6IDA7CiAgICBjb25zdCB1bml2ZXJzYWxUaW1lUmVsYXRpb24gPSBtYXRjaGVzWzddIHx8ICJaIjsKICAgIGxldCBvZmZzZXRIb3VyID0gcGFyc2VJbnQobWF0Y2hlc1s4XSwgMTApOwogICAgb2Zmc2V0SG91ciA9IG9mZnNldEhvdXIgPj0gMCAmJiBvZmZzZXRIb3VyIDw9IDIzID8gb2Zmc2V0SG91ciA6IDA7CiAgICBsZXQgb2Zmc2V0TWludXRlID0gcGFyc2VJbnQobWF0Y2hlc1s5XSwgMTApIHx8IDA7CiAgICBvZmZzZXRNaW51dGUgPSBvZmZzZXRNaW51dGUgPj0gMCAmJiBvZmZzZXRNaW51dGUgPD0gNTkgPyBvZmZzZXRNaW51dGUgOiAwOwogICAgaWYgKHVuaXZlcnNhbFRpbWVSZWxhdGlvbiA9PT0gIi0iKSB7CiAgICAgIGhvdXIgKz0gb2Zmc2V0SG91cjsKICAgICAgbWludXRlICs9IG9mZnNldE1pbnV0ZTsKICAgIH0gZWxzZSBpZiAodW5pdmVyc2FsVGltZVJlbGF0aW9uID09PSAiKyIpIHsKICAgICAgaG91ciAtPSBvZmZzZXRIb3VyOwogICAgICBtaW51dGUgLT0gb2Zmc2V0TWludXRlOwogICAgfQogICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSk7CiAgfQp9CmZ1bmN0aW9uIGdldFhmYVBhZ2VWaWV3cG9ydCh4ZmFQYWdlLCB7CiAgc2NhbGUgPSAxLAogIHJvdGF0aW9uID0gMAp9KSB7CiAgY29uc3QgewogICAgd2lkdGgsCiAgICBoZWlnaHQKICB9ID0geGZhUGFnZS5hdHRyaWJ1dGVzLnN0eWxlOwogIGNvbnN0IHZpZXdCb3ggPSBbMCwgMCwgcGFyc2VJbnQod2lkdGgpLCBwYXJzZUludChoZWlnaHQpXTsKICByZXR1cm4gbmV3IFBhZ2VWaWV3cG9ydCh7CiAgICB2aWV3Qm94LAogICAgdXNlclVuaXQ6IDEsCiAgICBzY2FsZSwKICAgIHJvdGF0aW9uCiAgfSk7Cn0KZnVuY3Rpb24gZ2V0UkdCKGNvbG9yKSB7CiAgaWYgKGNvbG9yLnN0YXJ0c1dpdGgoIiMiKSkgewogICAgY29uc3QgY29sb3JSR0IgPSBwYXJzZUludChjb2xvci5zbGljZSgxKSwgMTYpOwogICAgcmV0dXJuIFsoY29sb3JSR0IgJiAweGZmMDAwMCkgPj4gMTYsIChjb2xvclJHQiAmIDB4MDBmZjAwKSA+PiA4LCBjb2xvclJHQiAmIDB4MDAwMGZmXTsKICB9CiAgaWYgKGNvbG9yLnN0YXJ0c1dpdGgoInJnYigiKSkgewogICAgcmV0dXJuIGNvbG9yLnNsaWNlKDQsIC0xKS5zcGxpdCgiLCIpLm1hcCh4ID0+IHBhcnNlSW50KHgpKTsKICB9CiAgaWYgKGNvbG9yLnN0YXJ0c1dpdGgoInJnYmEoIikpIHsKICAgIHJldHVybiBjb2xvci5zbGljZSg1LCAtMSkuc3BsaXQoIiwiKS5tYXAoeCA9PiBwYXJzZUludCh4KSkuc2xpY2UoMCwgMyk7CiAgfQogIHdhcm4oYE5vdCBhIHZhbGlkIGNvbG9yIGZvcm1hdDogIiR7Y29sb3J9ImApOwogIHJldHVybiBbMCwgMCwgMF07Cn0KZnVuY3Rpb24gZ2V0Q29sb3JWYWx1ZXMoY29sb3JzKSB7CiAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICBzcGFuLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICBzcGFuLnN0eWxlLmNvbG9yU2NoZW1lID0gIm9ubHkgbGlnaHQiOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kKHNwYW4pOwogIGZvciAoY29uc3QgbmFtZSBvZiBjb2xvcnMua2V5cygpKSB7CiAgICBzcGFuLnN0eWxlLmNvbG9yID0gbmFtZTsKICAgIGNvbnN0IGNvbXB1dGVkQ29sb3IgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzcGFuKS5jb2xvcjsKICAgIGNvbG9ycy5zZXQobmFtZSwgZ2V0UkdCKGNvbXB1dGVkQ29sb3IpKTsKICB9CiAgc3Bhbi5yZW1vdmUoKTsKfQpmdW5jdGlvbiBnZXRDdXJyZW50VHJhbnNmb3JtKGN0eCkgewogIGNvbnN0IHsKICAgIGEsCiAgICBiLAogICAgYywKICAgIGQsCiAgICBlLAogICAgZgogIH0gPSBjdHguZ2V0VHJhbnNmb3JtKCk7CiAgcmV0dXJuIFthLCBiLCBjLCBkLCBlLCBmXTsKfQpmdW5jdGlvbiBnZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZShjdHgpIHsKICBjb25zdCB7CiAgICBhLAogICAgYiwKICAgIGMsCiAgICBkLAogICAgZSwKICAgIGYKICB9ID0gY3R4LmdldFRyYW5zZm9ybSgpLmludmVydFNlbGYoKTsKICByZXR1cm4gW2EsIGIsIGMsIGQsIGUsIGZdOwp9CmZ1bmN0aW9uIHNldExheWVyRGltZW5zaW9ucyhkaXYsIHZpZXdwb3J0LCBtdXN0RmxpcCA9IGZhbHNlLCBtdXN0Um90YXRlID0gdHJ1ZSkgewogIGlmICh2aWV3cG9ydCBpbnN0YW5jZW9mIFBhZ2VWaWV3cG9ydCkgewogICAgY29uc3QgewogICAgICBwYWdlV2lkdGgsCiAgICAgIHBhZ2VIZWlnaHQKICAgIH0gPSB2aWV3cG9ydC5yYXdEaW1zOwogICAgY29uc3QgewogICAgICBzdHlsZQogICAgfSA9IGRpdjsKICAgIGNvbnN0IHVzZVJvdW5kID0gdXRpbF9GZWF0dXJlVGVzdC5pc0NTU1JvdW5kU3VwcG9ydGVkOwogICAgY29uc3QgdyA9IGB2YXIoLS10b3RhbC1zY2FsZS1mYWN0b3IpICogJHtwYWdlV2lkdGh9cHhgLAogICAgICBoID0gYHZhcigtLXRvdGFsLXNjYWxlLWZhY3RvcikgKiAke3BhZ2VIZWlnaHR9cHhgOwogICAgY29uc3Qgd2lkdGhTdHIgPSB1c2VSb3VuZCA/IGByb3VuZChkb3duLCAke3d9LCB2YXIoLS1zY2FsZS1yb3VuZC14KSlgIDogYGNhbGMoJHt3fSlgLAogICAgICBoZWlnaHRTdHIgPSB1c2VSb3VuZCA/IGByb3VuZChkb3duLCAke2h9LCB2YXIoLS1zY2FsZS1yb3VuZC15KSlgIDogYGNhbGMoJHtofSlgOwogICAgaWYgKCFtdXN0RmxpcCB8fCB2aWV3cG9ydC5yb3RhdGlvbiAlIDE4MCA9PT0gMCkgewogICAgICBzdHlsZS53aWR0aCA9IHdpZHRoU3RyOwogICAgICBzdHlsZS5oZWlnaHQgPSBoZWlnaHRTdHI7CiAgICB9IGVsc2UgewogICAgICBzdHlsZS53aWR0aCA9IGhlaWdodFN0cjsKICAgICAgc3R5bGUuaGVpZ2h0ID0gd2lkdGhTdHI7CiAgICB9CiAgfQogIGlmIChtdXN0Um90YXRlKSB7CiAgICBkaXYuc2V0QXR0cmlidXRlKCJkYXRhLW1haW4tcm90YXRpb24iLCB2aWV3cG9ydC5yb3RhdGlvbik7CiAgfQp9CmNsYXNzIE91dHB1dFNjYWxlIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIGNvbnN0IHsKICAgICAgcGl4ZWxSYXRpbwogICAgfSA9IE91dHB1dFNjYWxlOwogICAgdGhpcy5zeCA9IHBpeGVsUmF0aW87CiAgICB0aGlzLnN5ID0gcGl4ZWxSYXRpbzsKICB9CiAgZ2V0IHNjYWxlZCgpIHsKICAgIHJldHVybiB0aGlzLnN4ICE9PSAxIHx8IHRoaXMuc3kgIT09IDE7CiAgfQogIGdldCBzeW1tZXRyaWMoKSB7CiAgICByZXR1cm4gdGhpcy5zeCA9PT0gdGhpcy5zeTsKICB9CiAgbGltaXRDYW52YXMod2lkdGgsIGhlaWdodCwgbWF4UGl4ZWxzLCBtYXhEaW0sIGNhcEFyZWFGYWN0b3IgPSAtMSkgewogICAgbGV0IG1heEFyZWFTY2FsZSA9IEluZmluaXR5LAogICAgICBtYXhXaWR0aFNjYWxlID0gSW5maW5pdHksCiAgICAgIG1heEhlaWdodFNjYWxlID0gSW5maW5pdHk7CiAgICBtYXhQaXhlbHMgPSBPdXRwdXRTY2FsZS5jYXBQaXhlbHMobWF4UGl4ZWxzLCBjYXBBcmVhRmFjdG9yKTsKICAgIGlmIChtYXhQaXhlbHMgPiAwKSB7CiAgICAgIG1heEFyZWFTY2FsZSA9IE1hdGguc3FydChtYXhQaXhlbHMgLyAod2lkdGggKiBoZWlnaHQpKTsKICAgIH0KICAgIGlmIChtYXhEaW0gIT09IC0xKSB7CiAgICAgIG1heFdpZHRoU2NhbGUgPSBtYXhEaW0gLyB3aWR0aDsKICAgICAgbWF4SGVpZ2h0U2NhbGUgPSBtYXhEaW0gLyBoZWlnaHQ7CiAgICB9CiAgICBjb25zdCBtYXhTY2FsZSA9IE1hdGgubWluKG1heEFyZWFTY2FsZSwgbWF4V2lkdGhTY2FsZSwgbWF4SGVpZ2h0U2NhbGUpOwogICAgaWYgKHRoaXMuc3ggPiBtYXhTY2FsZSB8fCB0aGlzLnN5ID4gbWF4U2NhbGUpIHsKICAgICAgdGhpcy5zeCA9IG1heFNjYWxlOwogICAgICB0aGlzLnN5ID0gbWF4U2NhbGU7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICBzdGF0aWMgZ2V0IHBpeGVsUmF0aW8oKSB7CiAgICByZXR1cm4gZ2xvYmFsVGhpcy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7CiAgfQogIHN0YXRpYyBjYXBQaXhlbHMobWF4UGl4ZWxzLCBjYXBBcmVhRmFjdG9yKSB7CiAgICBpZiAoY2FwQXJlYUZhY3RvciA+PSAwKSB7CiAgICAgIGNvbnN0IHdpblBpeGVscyA9IE1hdGguY2VpbCh3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGggKiB3aW5kb3cuc2NyZWVuLmF2YWlsSGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvICoqIDIgKiAoMSArIGNhcEFyZWFGYWN0b3IgLyAxMDApKTsKICAgICAgcmV0dXJuIG1heFBpeGVscyA+IDAgPyBNYXRoLm1pbihtYXhQaXhlbHMsIHdpblBpeGVscykgOiB3aW5QaXhlbHM7CiAgICB9CiAgICByZXR1cm4gbWF4UGl4ZWxzOwogIH0KfQpjb25zdCBTdXBwb3J0ZWRJbWFnZU1pbWVUeXBlcyA9IFsiaW1hZ2UvYXBuZyIsICJpbWFnZS9hdmlmIiwgImltYWdlL2JtcCIsICJpbWFnZS9naWYiLCAiaW1hZ2UvanBlZyIsICJpbWFnZS9wbmciLCAiaW1hZ2Uvc3ZnK3htbCIsICJpbWFnZS93ZWJwIiwgImltYWdlL3gtaWNvbiJdOwpjbGFzcyBDb2xvclNjaGVtZSB7CiAgc3RhdGljIGdldCBpc0RhcmtNb2RlKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaXNEYXJrTW9kZSIsICEhd2luZG93Py5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzKTsKICB9Cn0KY2xhc3MgQ1NTQ29uc3RhbnRzIHsKICBzdGF0aWMgZ2V0IGNvbW1lbnRGb3JlZ3JvdW5kQ29sb3IoKSB7CiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb21tZW50IiwgInNpZGViYXIiKTsKICAgIGNvbnN0IHsKICAgICAgc3R5bGUKICAgIH0gPSBlbGVtZW50OwogICAgc3R5bGUud2lkdGggPSBzdHlsZS5oZWlnaHQgPSAiMCI7CiAgICBzdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgc3R5bGUuY29sb3IgPSAidmFyKC0tY29tbWVudC1mZy1jb2xvcikiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoZWxlbWVudCk7CiAgICBjb25zdCB7CiAgICAgIGNvbG9yCiAgICB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7CiAgICBlbGVtZW50LnJlbW92ZSgpOwogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiY29tbWVudEZvcmVncm91bmRDb2xvciIsIGdldFJHQihjb2xvcikpOwogIH0KfQpmdW5jdGlvbiBhcHBseU9wYWNpdHkociwgZywgYiwgb3BhY2l0eSkgewogIG9wYWNpdHkgPSBNYXRoLm1pbihNYXRoLm1heChvcGFjaXR5ID8/IDEsIDApLCAxKTsKICBjb25zdCB3aGl0ZSA9IDI1NSAqICgxIC0gb3BhY2l0eSk7CiAgciA9IE1hdGgucm91bmQociAqIG9wYWNpdHkgKyB3aGl0ZSk7CiAgZyA9IE1hdGgucm91bmQoZyAqIG9wYWNpdHkgKyB3aGl0ZSk7CiAgYiA9IE1hdGgucm91bmQoYiAqIG9wYWNpdHkgKyB3aGl0ZSk7CiAgcmV0dXJuIFtyLCBnLCBiXTsKfQpmdW5jdGlvbiBSR0JUb0hTTChyZ2IsIG91dHB1dCkgewogIGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7CiAgY29uc3QgZyA9IHJnYlsxXSAvIDI1NTsKICBjb25zdCBiID0gcmdiWzJdIC8gMjU1OwogIGNvbnN0IG1heCA9IE1hdGgubWF4KHIsIGcsIGIpOwogIGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpOwogIGNvbnN0IGwgPSAobWF4ICsgbWluKSAvIDI7CiAgaWYgKG1heCA9PT0gbWluKSB7CiAgICBvdXRwdXRbMF0gPSBvdXRwdXRbMV0gPSAwOwogIH0gZWxzZSB7CiAgICBjb25zdCBkID0gbWF4IC0gbWluOwogICAgb3V0cHV0WzFdID0gbCA8IDAuNSA/IGQgLyAobWF4ICsgbWluKSA6IGQgLyAoMiAtIG1heCAtIG1pbik7CiAgICBzd2l0Y2ggKG1heCkgewogICAgICBjYXNlIHI6CiAgICAgICAgb3V0cHV0WzBdID0gKChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApKSAqIDYwOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIGc6CiAgICAgICAgb3V0cHV0WzBdID0gKChiIC0gcikgLyBkICsgMikgKiA2MDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBiOgogICAgICAgIG91dHB1dFswXSA9ICgociAtIGcpIC8gZCArIDQpICogNjA7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQogIG91dHB1dFsyXSA9IGw7Cn0KZnVuY3Rpb24gSFNMVG9SR0IoaHNsLCBvdXRwdXQpIHsKICBjb25zdCBoID0gaHNsWzBdOwogIGNvbnN0IHMgPSBoc2xbMV07CiAgY29uc3QgbCA9IGhzbFsyXTsKICBjb25zdCBjID0gKDEgLSBNYXRoLmFicygyICogbCAtIDEpKSAqIHM7CiAgY29uc3QgeCA9IGMgKiAoMSAtIE1hdGguYWJzKGggLyA2MCAlIDIgLSAxKSk7CiAgY29uc3QgbSA9IGwgLSBjIC8gMjsKICBzd2l0Y2ggKE1hdGguZmxvb3IoaCAvIDYwKSkgewogICAgY2FzZSAwOgogICAgICBvdXRwdXRbMF0gPSBjICsgbTsKICAgICAgb3V0cHV0WzFdID0geCArIG07CiAgICAgIG91dHB1dFsyXSA9IG07CiAgICAgIGJyZWFrOwogICAgY2FzZSAxOgogICAgICBvdXRwdXRbMF0gPSB4ICsgbTsKICAgICAgb3V0cHV0WzFdID0gYyArIG07CiAgICAgIG91dHB1dFsyXSA9IG07CiAgICAgIGJyZWFrOwogICAgY2FzZSAyOgogICAgICBvdXRwdXRbMF0gPSBtOwogICAgICBvdXRwdXRbMV0gPSBjICsgbTsKICAgICAgb3V0cHV0WzJdID0geCArIG07CiAgICAgIGJyZWFrOwogICAgY2FzZSAzOgogICAgICBvdXRwdXRbMF0gPSBtOwogICAgICBvdXRwdXRbMV0gPSB4ICsgbTsKICAgICAgb3V0cHV0WzJdID0gYyArIG07CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OgogICAgICBvdXRwdXRbMF0gPSB4ICsgbTsKICAgICAgb3V0cHV0WzFdID0gbTsKICAgICAgb3V0cHV0WzJdID0gYyArIG07CiAgICAgIGJyZWFrOwogICAgY2FzZSA1OgogICAgY2FzZSA2OgogICAgICBvdXRwdXRbMF0gPSBjICsgbTsKICAgICAgb3V0cHV0WzFdID0gbTsKICAgICAgb3V0cHV0WzJdID0geCArIG07CiAgICAgIGJyZWFrOwogIH0KfQpmdW5jdGlvbiBjb21wdXRlTHVtaW5hbmNlKHgpIHsKICByZXR1cm4geCA8PSAwLjAzOTI4ID8geCAvIDEyLjkyIDogKCh4ICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNDsKfQpmdW5jdGlvbiBjb250cmFzdFJhdGlvKGhzbDEsIGhzbDIsIG91dHB1dCkgewogIEhTTFRvUkdCKGhzbDEsIG91dHB1dCk7CiAgb3V0cHV0Lm1hcChjb21wdXRlTHVtaW5hbmNlKTsKICBjb25zdCBsdW0xID0gMC4yMTI2ICogb3V0cHV0WzBdICsgMC43MTUyICogb3V0cHV0WzFdICsgMC4wNzIyICogb3V0cHV0WzJdOwogIEhTTFRvUkdCKGhzbDIsIG91dHB1dCk7CiAgb3V0cHV0Lm1hcChjb21wdXRlTHVtaW5hbmNlKTsKICBjb25zdCBsdW0yID0gMC4yMTI2ICogb3V0cHV0WzBdICsgMC43MTUyICogb3V0cHV0WzFdICsgMC4wNzIyICogb3V0cHV0WzJdOwogIHJldHVybiBsdW0xID4gbHVtMiA/IChsdW0xICsgMC4wNSkgLyAobHVtMiArIDAuMDUpIDogKGx1bTIgKyAwLjA1KSAvIChsdW0xICsgMC4wNSk7Cn0KY29uc3QgY29udHJhc3RDYWNoZSA9IG5ldyBNYXAoKTsKZnVuY3Rpb24gZmluZENvbnRyYXN0Q29sb3IoYmFzZUNvbG9yLCBmaXhlZENvbG9yKSB7CiAgY29uc3Qga2V5ID0gYmFzZUNvbG9yWzBdICsgYmFzZUNvbG9yWzFdICogMHgxMDAgKyBiYXNlQ29sb3JbMl0gKiAweDEwMDAwICsgZml4ZWRDb2xvclswXSAqIDB4MTAwMDAwMCArIGZpeGVkQ29sb3JbMV0gKiAweDEwMDAwMDAwMCArIGZpeGVkQ29sb3JbMl0gKiAweDEwMDAwMDAwMDAwOwogIGxldCBjYWNoZWRWYWx1ZSA9IGNvbnRyYXN0Q2FjaGUuZ2V0KGtleSk7CiAgaWYgKGNhY2hlZFZhbHVlKSB7CiAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgfQogIGNvbnN0IGFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSg5KTsKICBjb25zdCBvdXRwdXQgPSBhcnJheS5zdWJhcnJheSgwLCAzKTsKICBjb25zdCBiYXNlSFNMID0gYXJyYXkuc3ViYXJyYXkoMywgNik7CiAgUkdCVG9IU0woYmFzZUNvbG9yLCBiYXNlSFNMKTsKICBjb25zdCBmaXhlZEhTTCA9IGFycmF5LnN1YmFycmF5KDYsIDkpOwogIFJHQlRvSFNMKGZpeGVkQ29sb3IsIGZpeGVkSFNMKTsKICBjb25zdCBpc0ZpeGVkQ29sb3JEYXJrID0gZml4ZWRIU0xbMl0gPCAwLjU7CiAgY29uc3QgbWluQ29udHJhc3QgPSBpc0ZpeGVkQ29sb3JEYXJrID8gMTIgOiA0LjU7CiAgYmFzZUhTTFsyXSA9IGlzRml4ZWRDb2xvckRhcmsgPyBNYXRoLnNxcnQoYmFzZUhTTFsyXSkgOiAxIC0gTWF0aC5zcXJ0KDEgLSBiYXNlSFNMWzJdKTsKICBpZiAoY29udHJhc3RSYXRpbyhiYXNlSFNMLCBmaXhlZEhTTCwgb3V0cHV0KSA8IG1pbkNvbnRyYXN0KSB7CiAgICBsZXQgc3RhcnQsIGVuZDsKICAgIGlmIChpc0ZpeGVkQ29sb3JEYXJrKSB7CiAgICAgIHN0YXJ0ID0gYmFzZUhTTFsyXTsKICAgICAgZW5kID0gMTsKICAgIH0gZWxzZSB7CiAgICAgIHN0YXJ0ID0gMDsKICAgICAgZW5kID0gYmFzZUhTTFsyXTsKICAgIH0KICAgIGNvbnN0IFBSRUNJU0lPTiA9IDAuMDA1OwogICAgd2hpbGUgKGVuZCAtIHN0YXJ0ID4gUFJFQ0lTSU9OKSB7CiAgICAgIGNvbnN0IG1pZCA9IGJhc2VIU0xbMl0gPSAoc3RhcnQgKyBlbmQpIC8gMjsKICAgICAgaWYgKGlzRml4ZWRDb2xvckRhcmsgPT09IGNvbnRyYXN0UmF0aW8oYmFzZUhTTCwgZml4ZWRIU0wsIG91dHB1dCkgPCBtaW5Db250cmFzdCkgewogICAgICAgIHN0YXJ0ID0gbWlkOwogICAgICB9IGVsc2UgewogICAgICAgIGVuZCA9IG1pZDsKICAgICAgfQogICAgfQogICAgYmFzZUhTTFsyXSA9IGlzRml4ZWRDb2xvckRhcmsgPyBlbmQgOiBzdGFydDsKICB9CiAgSFNMVG9SR0IoYmFzZUhTTCwgb3V0cHV0KTsKICBjYWNoZWRWYWx1ZSA9IFV0aWwubWFrZUhleENvbG9yKE1hdGgucm91bmQob3V0cHV0WzBdICogMjU1KSwgTWF0aC5yb3VuZChvdXRwdXRbMV0gKiAyNTUpLCBNYXRoLnJvdW5kKG91dHB1dFsyXSAqIDI1NSkpOwogIGNvbnRyYXN0Q2FjaGUuc2V0KGtleSwgY2FjaGVkVmFsdWUpOwogIHJldHVybiBjYWNoZWRWYWx1ZTsKfQpmdW5jdGlvbiByZW5kZXJSaWNoVGV4dCh7CiAgaHRtbCwKICBkaXIsCiAgY2xhc3NOYW1lCn0sIGNvbnRhaW5lcikgewogIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogIGlmICh0eXBlb2YgaHRtbCA9PT0gInN0cmluZyIpIHsKICAgIGNvbnN0IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7CiAgICBwLmRpciA9IGRpciB8fCAiYXV0byI7CiAgICBjb25zdCBsaW5lcyA9IGh0bWwuc3BsaXQoLyg/OlxyXG4/fFxuKS8pOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGluZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkgewogICAgICBjb25zdCBsaW5lID0gbGluZXNbaV07CiAgICAgIHAuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmUpKTsKICAgICAgaWYgKGkgPCBpaSAtIDEpIHsKICAgICAgICBwLmFwcGVuZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKICAgICAgfQogICAgfQogICAgZnJhZ21lbnQuYXBwZW5kKHApOwogIH0gZWxzZSB7CiAgICBYZmFMYXllci5yZW5kZXIoewogICAgICB4ZmFIdG1sOiBodG1sLAogICAgICBkaXY6IGZyYWdtZW50LAogICAgICBpbnRlbnQ6ICJyaWNoVGV4dCIKICAgIH0pOwogIH0KICBmcmFnbWVudC5maXJzdENoaWxkLmNsYXNzTGlzdC5hZGQoInJpY2hUZXh0IiwgY2xhc3NOYW1lKTsKICBjb250YWluZXIuYXBwZW5kKGZyYWdtZW50KTsKfQpmdW5jdGlvbiBtYWtlUGF0aEZyb21EcmF3T1BTKGRhdGEpIHsKICBjb25zdCBwYXRoID0gbmV3IFBhdGgyRCgpOwogIGlmICghZGF0YSkgewogICAgcmV0dXJuIHBhdGg7CiAgfQogIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7KSB7CiAgICBzd2l0Y2ggKGRhdGFbaSsrXSkgewogICAgICBjYXNlIERyYXdPUFMubW92ZVRvOgogICAgICAgIHBhdGgubW92ZVRvKGRhdGFbaSsrXSwgZGF0YVtpKytdKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBEcmF3T1BTLmxpbmVUbzoKICAgICAgICBwYXRoLmxpbmVUbyhkYXRhW2krK10sIGRhdGFbaSsrXSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRHJhd09QUy5jdXJ2ZVRvOgogICAgICAgIHBhdGguYmV6aWVyQ3VydmVUbyhkYXRhW2krK10sIGRhdGFbaSsrXSwgZGF0YVtpKytdLCBkYXRhW2krK10sIGRhdGFbaSsrXSwgZGF0YVtpKytdKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBEcmF3T1BTLnF1YWRyYXRpY0N1cnZlVG86CiAgICAgICAgcGF0aC5xdWFkcmF0aWNDdXJ2ZVRvKGRhdGFbaSsrXSwgZGF0YVtpKytdLCBkYXRhW2krK10sIGRhdGFbaSsrXSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRHJhd09QUy5jbG9zZVBhdGg6CiAgICAgICAgcGF0aC5jbG9zZVBhdGgoKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB3YXJuKGBVbnJlY29nbml6ZWQgZHJhd2luZyBwYXRoIG9wZXJhdG9yOiAke2RhdGFbaSAtIDFdfWApOwogICAgICAgIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gcGF0aDsKfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL3Rvb2xiYXIuanMKCmNsYXNzIEVkaXRvclRvb2xiYXIgewogICN0b29sYmFyID0gbnVsbDsKICAjY29sb3JQaWNrZXIgPSBudWxsOwogICNlZGl0b3I7CiAgI2J1dHRvbnMgPSBudWxsOwogICNhbHRUZXh0ID0gbnVsbDsKICAjY29tbWVudCA9IG51bGw7CiAgI2NvbW1lbnRCdXR0b25EaXZpZGVyID0gbnVsbDsKICAjc2lnbmF0dXJlRGVzY3JpcHRpb25CdXR0b24gPSBudWxsOwogIHN0YXRpYyAjbDEwblJlbW92ZSA9IG51bGw7CiAgY29uc3RydWN0b3IoZWRpdG9yKSB7CiAgICB0aGlzLiNlZGl0b3IgPSBlZGl0b3I7CiAgICBFZGl0b3JUb29sYmFyLiNsMTBuUmVtb3ZlIHx8PSBPYmplY3QuZnJlZXplKHsKICAgICAgZnJlZXRleHQ6ICJwZGZqcy1lZGl0b3ItcmVtb3ZlLWZyZWV0ZXh0LWJ1dHRvbiIsCiAgICAgIGhpZ2hsaWdodDogInBkZmpzLWVkaXRvci1yZW1vdmUtaGlnaGxpZ2h0LWJ1dHRvbiIsCiAgICAgIGluazogInBkZmpzLWVkaXRvci1yZW1vdmUtaW5rLWJ1dHRvbiIsCiAgICAgIHN0YW1wOiAicGRmanMtZWRpdG9yLXJlbW92ZS1zdGFtcC1idXR0b24iLAogICAgICBzaWduYXR1cmU6ICJwZGZqcy1lZGl0b3ItcmVtb3ZlLXNpZ25hdHVyZS1idXR0b24iCiAgICB9KTsKICB9CiAgcmVuZGVyKCkgewogICAgY29uc3QgZWRpdFRvb2xiYXIgPSB0aGlzLiN0b29sYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBlZGl0VG9vbGJhci5jbGFzc0xpc3QuYWRkKCJlZGl0VG9vbGJhciIsICJoaWRkZW4iKTsKICAgIGVkaXRUb29sYmFyLnNldEF0dHJpYnV0ZSgicm9sZSIsICJ0b29sYmFyIik7CiAgICBjb25zdCBzaWduYWwgPSB0aGlzLiNlZGl0b3IuX3VpTWFuYWdlci5fc2lnbmFsOwogICAgaWYgKHNpZ25hbCBpbnN0YW5jZW9mIEFib3J0U2lnbmFsICYmICFzaWduYWwuYWJvcnRlZCkgewogICAgICBlZGl0VG9vbGJhci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIG5vQ29udGV4dE1lbnUsIHsKICAgICAgICBzaWduYWwKICAgICAgfSk7CiAgICAgIGVkaXRUb29sYmFyLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgRWRpdG9yVG9vbGJhci4jcG9pbnRlckRvd24sIHsKICAgICAgICBzaWduYWwKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBidXR0b25zID0gdGhpcy4jYnV0dG9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgYnV0dG9ucy5jbGFzc05hbWUgPSAiYnV0dG9ucyI7CiAgICBlZGl0VG9vbGJhci5hcHBlbmQoYnV0dG9ucyk7CiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuI2VkaXRvci50b29sYmFyUG9zaXRpb247CiAgICBpZiAocG9zaXRpb24pIHsKICAgICAgY29uc3QgewogICAgICAgIHN0eWxlCiAgICAgIH0gPSBlZGl0VG9vbGJhcjsKICAgICAgY29uc3QgeCA9IHRoaXMuI2VkaXRvci5fdWlNYW5hZ2VyLmRpcmVjdGlvbiA9PT0gImx0ciIgPyAxIC0gcG9zaXRpb25bMF0gOiBwb3NpdGlvblswXTsKICAgICAgc3R5bGUuaW5zZXRJbmxpbmVFbmQgPSBgJHsxMDAgKiB4fSVgOwogICAgICBzdHlsZS50b3AgPSBgY2FsYygkezEwMCAqIHBvc2l0aW9uWzFdfSUgKyB2YXIoLS1lZGl0b3ItdG9vbGJhci12ZXJ0LW9mZnNldCkpYDsKICAgIH0KICAgIHJldHVybiBlZGl0VG9vbGJhcjsKICB9CiAgZ2V0IGRpdigpIHsKICAgIHJldHVybiB0aGlzLiN0b29sYmFyOwogIH0KICBzdGF0aWMgI3BvaW50ZXJEb3duKGUpIHsKICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgfQogICNmb2N1c0luKGUpIHsKICAgIHRoaXMuI2VkaXRvci5fZm9jdXNFdmVudHNBbGxvd2VkID0gZmFsc2U7CiAgICBzdG9wRXZlbnQoZSk7CiAgfQogICNmb2N1c091dChlKSB7CiAgICB0aGlzLiNlZGl0b3IuX2ZvY3VzRXZlbnRzQWxsb3dlZCA9IHRydWU7CiAgICBzdG9wRXZlbnQoZSk7CiAgfQogICNhZGRMaXN0ZW5lcnNUb0VsZW1lbnQoZWxlbWVudCkgewogICAgY29uc3Qgc2lnbmFsID0gdGhpcy4jZWRpdG9yLl91aU1hbmFnZXIuX3NpZ25hbDsKICAgIGlmICghKHNpZ25hbCBpbnN0YW5jZW9mIEFib3J0U2lnbmFsKSB8fCBzaWduYWwuYWJvcnRlZCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLCB0aGlzLiNmb2N1c0luLmJpbmQodGhpcyksIHsKICAgICAgY2FwdHVyZTogdHJ1ZSwKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCB0aGlzLiNmb2N1c091dC5iaW5kKHRoaXMpLCB7CiAgICAgIGNhcHR1cmU6IHRydWUsCiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iiwgbm9Db250ZXh0TWVudSwgewogICAgICBzaWduYWwKICAgIH0pOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGhpZGUoKSB7CiAgICB0aGlzLiN0b29sYmFyLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOwogICAgdGhpcy4jY29sb3JQaWNrZXI/LmhpZGVEcm9wZG93bigpOwogIH0KICBzaG93KCkgewogICAgdGhpcy4jdG9vbGJhci5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTsKICAgIHRoaXMuI2FsdFRleHQ/LnNob3duKCk7CiAgICB0aGlzLiNjb21tZW50Py5zaG93bigpOwogIH0KICBhZGREZWxldGVCdXR0b24oKSB7CiAgICBjb25zdCB7CiAgICAgIGVkaXRvclR5cGUsCiAgICAgIF91aU1hbmFnZXIKICAgIH0gPSB0aGlzLiNlZGl0b3I7CiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJiYXNpYyIsICJkZWxldGVCdXR0b24iKTsKICAgIGJ1dHRvbi50YWJJbmRleCA9IDA7CiAgICBidXR0b24uc2V0QXR0cmlidXRlKCJkYXRhLWwxMG4taWQiLCBFZGl0b3JUb29sYmFyLiNsMTBuUmVtb3ZlW2VkaXRvclR5cGVdKTsKICAgIGlmICh0aGlzLiNhZGRMaXN0ZW5lcnNUb0VsZW1lbnQoYnV0dG9uKSkgewogICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBlID0+IHsKICAgICAgICBfdWlNYW5hZ2VyLmRlbGV0ZSgpOwogICAgICB9LCB7CiAgICAgICAgc2lnbmFsOiBfdWlNYW5hZ2VyLl9zaWduYWwKICAgICAgfSk7CiAgICB9CiAgICB0aGlzLiNidXR0b25zLmFwcGVuZChidXR0b24pOwogIH0KICBnZXQgI2RpdmlkZXIoKSB7CiAgICBjb25zdCBkaXZpZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXZpZGVyLmNsYXNzTmFtZSA9ICJkaXZpZGVyIjsKICAgIHJldHVybiBkaXZpZGVyOwogIH0KICBhc3luYyBhZGRBbHRUZXh0KGFsdFRleHQpIHsKICAgIGNvbnN0IGJ1dHRvbiA9IGF3YWl0IGFsdFRleHQucmVuZGVyKCk7CiAgICB0aGlzLiNhZGRMaXN0ZW5lcnNUb0VsZW1lbnQoYnV0dG9uKTsKICAgIHRoaXMuI2J1dHRvbnMuYXBwZW5kKGJ1dHRvbiwgdGhpcy4jZGl2aWRlcik7CiAgICB0aGlzLiNhbHRUZXh0ID0gYWx0VGV4dDsKICB9CiAgYWRkQ29tbWVudChjb21tZW50LCBiZWZvcmVFbGVtZW50ID0gbnVsbCkgewogICAgaWYgKHRoaXMuI2NvbW1lbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYnV0dG9uID0gY29tbWVudC5yZW5kZXJGb3JUb29sYmFyKCk7CiAgICBpZiAoIWJ1dHRvbikgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNhZGRMaXN0ZW5lcnNUb0VsZW1lbnQoYnV0dG9uKTsKICAgIGNvbnN0IGRpdmlkZXIgPSB0aGlzLiNjb21tZW50QnV0dG9uRGl2aWRlciA9IHRoaXMuI2RpdmlkZXI7CiAgICBpZiAoIWJlZm9yZUVsZW1lbnQpIHsKICAgICAgdGhpcy4jYnV0dG9ucy5hcHBlbmQoYnV0dG9uLCBkaXZpZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuI2J1dHRvbnMuaW5zZXJ0QmVmb3JlKGJ1dHRvbiwgYmVmb3JlRWxlbWVudCk7CiAgICAgIHRoaXMuI2J1dHRvbnMuaW5zZXJ0QmVmb3JlKGRpdmlkZXIsIGJlZm9yZUVsZW1lbnQpOwogICAgfQogICAgdGhpcy4jY29tbWVudCA9IGNvbW1lbnQ7CiAgICBjb21tZW50LnRvb2xiYXIgPSB0aGlzOwogIH0KICBhZGRDb2xvclBpY2tlcihjb2xvclBpY2tlcikgewogICAgaWYgKHRoaXMuI2NvbG9yUGlja2VyKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI2NvbG9yUGlja2VyID0gY29sb3JQaWNrZXI7CiAgICBjb25zdCBidXR0b24gPSBjb2xvclBpY2tlci5yZW5kZXJCdXR0b24oKTsKICAgIHRoaXMuI2FkZExpc3RlbmVyc1RvRWxlbWVudChidXR0b24pOwogICAgdGhpcy4jYnV0dG9ucy5hcHBlbmQoYnV0dG9uLCB0aGlzLiNkaXZpZGVyKTsKICB9CiAgYXN5bmMgYWRkRWRpdFNpZ25hdHVyZUJ1dHRvbihzaWduYXR1cmVNYW5hZ2VyKSB7CiAgICBjb25zdCBidXR0b24gPSB0aGlzLiNzaWduYXR1cmVEZXNjcmlwdGlvbkJ1dHRvbiA9IGF3YWl0IHNpZ25hdHVyZU1hbmFnZXIucmVuZGVyRWRpdEJ1dHRvbih0aGlzLiNlZGl0b3IpOwogICAgdGhpcy4jYWRkTGlzdGVuZXJzVG9FbGVtZW50KGJ1dHRvbik7CiAgICB0aGlzLiNidXR0b25zLmFwcGVuZChidXR0b24sIHRoaXMuI2RpdmlkZXIpOwogIH0KICByZW1vdmVCdXR0b24obmFtZSkgewogICAgc3dpdGNoIChuYW1lKSB7CiAgICAgIGNhc2UgImNvbW1lbnQiOgogICAgICAgIHRoaXMuI2NvbW1lbnQ/LnJlbW92ZVRvb2xiYXJDb21tZW50QnV0dG9uKCk7CiAgICAgICAgdGhpcy4jY29tbWVudCA9IG51bGw7CiAgICAgICAgdGhpcy4jY29tbWVudEJ1dHRvbkRpdmlkZXI/LnJlbW92ZSgpOwogICAgICAgIHRoaXMuI2NvbW1lbnRCdXR0b25EaXZpZGVyID0gbnVsbDsKICAgICAgICBicmVhazsKICAgIH0KICB9CiAgYXN5bmMgYWRkQnV0dG9uKG5hbWUsIHRvb2wpIHsKICAgIHN3aXRjaCAobmFtZSkgewogICAgICBjYXNlICJjb2xvclBpY2tlciI6CiAgICAgICAgaWYgKHRvb2wpIHsKICAgICAgICAgIHRoaXMuYWRkQ29sb3JQaWNrZXIodG9vbCk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJhbHRUZXh0IjoKICAgICAgICBpZiAodG9vbCkgewogICAgICAgICAgYXdhaXQgdGhpcy5hZGRBbHRUZXh0KHRvb2wpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAiZWRpdFNpZ25hdHVyZSI6CiAgICAgICAgaWYgKHRvb2wpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuYWRkRWRpdFNpZ25hdHVyZUJ1dHRvbih0b29sKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImRlbGV0ZSI6CiAgICAgICAgdGhpcy5hZGREZWxldGVCdXR0b24oKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiY29tbWVudCI6CiAgICAgICAgaWYgKHRvb2wpIHsKICAgICAgICAgIHRoaXMuYWRkQ29tbWVudCh0b29sKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQogIGFzeW5jIGFkZEJ1dHRvbkJlZm9yZShuYW1lLCB0b29sLCBiZWZvcmVTZWxlY3RvcikgewogICAgaWYgKCF0b29sICYmIG5hbWUgPT09ICJjb21tZW50IikgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBiZWZvcmVFbGVtZW50ID0gdGhpcy4jYnV0dG9ucy5xdWVyeVNlbGVjdG9yKGJlZm9yZVNlbGVjdG9yKTsKICAgIGlmICghYmVmb3JlRWxlbWVudCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobmFtZSA9PT0gImNvbW1lbnQiKSB7CiAgICAgIHRoaXMuYWRkQ29tbWVudCh0b29sLCBiZWZvcmVFbGVtZW50KTsKICAgIH0KICB9CiAgdXBkYXRlRWRpdFNpZ25hdHVyZUJ1dHRvbihkZXNjcmlwdGlvbikgewogICAgaWYgKHRoaXMuI3NpZ25hdHVyZURlc2NyaXB0aW9uQnV0dG9uKSB7CiAgICAgIHRoaXMuI3NpZ25hdHVyZURlc2NyaXB0aW9uQnV0dG9uLnRpdGxlID0gZGVzY3JpcHRpb247CiAgICB9CiAgfQogIHJlbW92ZSgpIHsKICAgIHRoaXMuI3Rvb2xiYXIucmVtb3ZlKCk7CiAgICB0aGlzLiNjb2xvclBpY2tlcj8uZGVzdHJveSgpOwogICAgdGhpcy4jY29sb3JQaWNrZXIgPSBudWxsOwogIH0KfQpjbGFzcyBGbG9hdGluZ1Rvb2xiYXIgewogICNidXR0b25zID0gbnVsbDsKICAjdG9vbGJhciA9IG51bGw7CiAgI3VpTWFuYWdlcjsKICBjb25zdHJ1Y3Rvcih1aU1hbmFnZXIpIHsKICAgIHRoaXMuI3VpTWFuYWdlciA9IHVpTWFuYWdlcjsKICB9CiAgI3JlbmRlcigpIHsKICAgIGNvbnN0IGVkaXRUb29sYmFyID0gdGhpcy4jdG9vbGJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZWRpdFRvb2xiYXIuY2xhc3NOYW1lID0gImVkaXRUb29sYmFyIjsKICAgIGVkaXRUb29sYmFyLnNldEF0dHJpYnV0ZSgicm9sZSIsICJ0b29sYmFyIik7CiAgICBjb25zdCBzaWduYWwgPSB0aGlzLiN1aU1hbmFnZXIuX3NpZ25hbDsKICAgIGlmIChzaWduYWwgaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCAmJiAhc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgZWRpdFRvb2xiYXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCBub0NvbnRleHRNZW51LCB7CiAgICAgICAgc2lnbmFsCiAgICAgIH0pOwogICAgfQogICAgY29uc3QgYnV0dG9ucyA9IHRoaXMuI2J1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGJ1dHRvbnMuY2xhc3NOYW1lID0gImJ1dHRvbnMiOwogICAgZWRpdFRvb2xiYXIuYXBwZW5kKGJ1dHRvbnMpOwogICAgaWYgKHRoaXMuI3VpTWFuYWdlci5oYXNDb21tZW50TWFuYWdlcigpKSB7CiAgICAgIHRoaXMuI21ha2VCdXR0b24oImNvbW1lbnRCdXR0b24iLCBgcGRmanMtY29tbWVudC1mbG9hdGluZy1idXR0b25gLCAicGRmanMtY29tbWVudC1mbG9hdGluZy1idXR0b24tbGFiZWwiLCAoKSA9PiB7CiAgICAgICAgdGhpcy4jdWlNYW5hZ2VyLmNvbW1lbnRTZWxlY3Rpb24oImZsb2F0aW5nX2J1dHRvbiIpOwogICAgICB9KTsKICAgIH0KICAgIHRoaXMuI21ha2VCdXR0b24oImhpZ2hsaWdodEJ1dHRvbiIsIGBwZGZqcy1oaWdobGlnaHQtZmxvYXRpbmctYnV0dG9uMWAsICJwZGZqcy1oaWdobGlnaHQtZmxvYXRpbmctYnV0dG9uLWxhYmVsIiwgKCkgPT4gewogICAgICB0aGlzLiN1aU1hbmFnZXIuaGlnaGxpZ2h0U2VsZWN0aW9uKCJmbG9hdGluZ19idXR0b24iKTsKICAgIH0pOwogICAgcmV0dXJuIGVkaXRUb29sYmFyOwogIH0KICAjZ2V0TGFzdFBvaW50KGJveGVzLCBpc0xUUikgewogICAgbGV0IGxhc3RZID0gMDsKICAgIGxldCBsYXN0WCA9IDA7CiAgICBmb3IgKGNvbnN0IGJveCBvZiBib3hlcykgewogICAgICBjb25zdCB5ID0gYm94LnkgKyBib3guaGVpZ2h0OwogICAgICBpZiAoeSA8IGxhc3RZKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgeCA9IGJveC54ICsgKGlzTFRSID8gYm94LndpZHRoIDogMCk7CiAgICAgIGlmICh5ID4gbGFzdFkpIHsKICAgICAgICBsYXN0WCA9IHg7CiAgICAgICAgbGFzdFkgPSB5OwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChpc0xUUikgewogICAgICAgIGlmICh4ID4gbGFzdFgpIHsKICAgICAgICAgIGxhc3RYID0geDsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoeCA8IGxhc3RYKSB7CiAgICAgICAgbGFzdFggPSB4OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gW2lzTFRSID8gMSAtIGxhc3RYIDogbGFzdFgsIGxhc3RZXTsKICB9CiAgc2hvdyhwYXJlbnQsIGJveGVzLCBpc0xUUikgewogICAgY29uc3QgW3gsIHldID0gdGhpcy4jZ2V0TGFzdFBvaW50KGJveGVzLCBpc0xUUik7CiAgICBjb25zdCB7CiAgICAgIHN0eWxlCiAgICB9ID0gdGhpcy4jdG9vbGJhciB8fD0gdGhpcy4jcmVuZGVyKCk7CiAgICBwYXJlbnQuYXBwZW5kKHRoaXMuI3Rvb2xiYXIpOwogICAgc3R5bGUuaW5zZXRJbmxpbmVFbmQgPSBgJHsxMDAgKiB4fSVgOwogICAgc3R5bGUudG9wID0gYGNhbGMoJHsxMDAgKiB5fSUgKyB2YXIoLS1lZGl0b3ItdG9vbGJhci12ZXJ0LW9mZnNldCkpYDsKICB9CiAgaGlkZSgpIHsKICAgIHRoaXMuI3Rvb2xiYXIucmVtb3ZlKCk7CiAgfQogICNtYWtlQnV0dG9uKGJ1dHRvbkNsYXNzLCBsMTBuSWQsIGxhYmVsTDEwbklkLCBjbGlja0hhbmRsZXIpIHsKICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoImJhc2ljIiwgYnV0dG9uQ2xhc3MpOwogICAgYnV0dG9uLnRhYkluZGV4ID0gMDsKICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsIGwxMG5JZCk7CiAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgYnV0dG9uLmFwcGVuZChzcGFuKTsKICAgIHNwYW4uY2xhc3NOYW1lID0gInZpc3VhbGx5SGlkZGVuIjsKICAgIHNwYW4uc2V0QXR0cmlidXRlKCJkYXRhLWwxMG4taWQiLCBsYWJlbEwxMG5JZCk7CiAgICBjb25zdCBzaWduYWwgPSB0aGlzLiN1aU1hbmFnZXIuX3NpZ25hbDsKICAgIGlmIChzaWduYWwgaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCAmJiAhc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iiwgbm9Db250ZXh0TWVudSwgewogICAgICAgIHNpZ25hbAogICAgICB9KTsKICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY2xpY2tIYW5kbGVyLCB7CiAgICAgICAgc2lnbmFsCiAgICAgIH0pOwogICAgfQogICAgdGhpcy4jYnV0dG9ucy5hcHBlbmQoYnV0dG9uKTsKICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L2VkaXRvci90b29scy5qcwoKCgpmdW5jdGlvbiBiaW5kRXZlbnRzKG9iaiwgZWxlbWVudCwgbmFtZXMpIHsKICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHsKICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBvYmpbbmFtZV0uYmluZChvYmopKTsKICB9Cn0KY2xhc3MgQ3VycmVudFBvaW50ZXJzIHsKICBzdGF0aWMgI3BvaW50ZXJJZCA9IE5hTjsKICBzdGF0aWMgI3BvaW50ZXJJZHMgPSBudWxsOwogIHN0YXRpYyAjbW92ZVRpbWVzdGFtcCA9IE5hTjsKICBzdGF0aWMgI3BvaW50ZXJUeXBlID0gbnVsbDsKICBzdGF0aWMgaW5pdGlhbGl6ZUFuZEFkZFBvaW50ZXJJZChwb2ludGVySWQpIHsKICAgIChDdXJyZW50UG9pbnRlcnMuI3BvaW50ZXJJZHMgfHw9IG5ldyBTZXQoKSkuYWRkKHBvaW50ZXJJZCk7CiAgfQogIHN0YXRpYyBzZXRQb2ludGVyKHBvaW50ZXJUeXBlLCBwb2ludGVySWQpIHsKICAgIEN1cnJlbnRQb2ludGVycy4jcG9pbnRlcklkIHx8PSBwb2ludGVySWQ7CiAgICBDdXJyZW50UG9pbnRlcnMuI3BvaW50ZXJUeXBlID8/PSBwb2ludGVyVHlwZTsKICB9CiAgc3RhdGljIHNldFRpbWVTdGFtcCh0aW1lU3RhbXApIHsKICAgIEN1cnJlbnRQb2ludGVycy4jbW92ZVRpbWVzdGFtcCA9IHRpbWVTdGFtcDsKICB9CiAgc3RhdGljIGlzU2FtZVBvaW50ZXJJZChwb2ludGVySWQpIHsKICAgIHJldHVybiBDdXJyZW50UG9pbnRlcnMuI3BvaW50ZXJJZCA9PT0gcG9pbnRlcklkOwogIH0KICBzdGF0aWMgaXNTYW1lUG9pbnRlcklkT3JSZW1vdmUocG9pbnRlcklkKSB7CiAgICBpZiAoQ3VycmVudFBvaW50ZXJzLiNwb2ludGVySWQgPT09IHBvaW50ZXJJZCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIEN1cnJlbnRQb2ludGVycy4jcG9pbnRlcklkcz8uZGVsZXRlKHBvaW50ZXJJZCk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHN0YXRpYyBpc1NhbWVQb2ludGVyVHlwZShwb2ludGVyVHlwZSkgewogICAgcmV0dXJuIEN1cnJlbnRQb2ludGVycy4jcG9pbnRlclR5cGUgPT09IHBvaW50ZXJUeXBlOwogIH0KICBzdGF0aWMgaXNJbml0aWFsaXplZEFuZERpZmZlcmVudFBvaW50ZXJUeXBlKHBvaW50ZXJUeXBlKSB7CiAgICByZXR1cm4gQ3VycmVudFBvaW50ZXJzLiNwb2ludGVyVHlwZSAhPT0gbnVsbCAmJiAhQ3VycmVudFBvaW50ZXJzLmlzU2FtZVBvaW50ZXJUeXBlKHBvaW50ZXJUeXBlKTsKICB9CiAgc3RhdGljIGlzU2FtZVRpbWVTdGFtcCh0aW1lU3RhbXApIHsKICAgIHJldHVybiBDdXJyZW50UG9pbnRlcnMuI21vdmVUaW1lc3RhbXAgPT09IHRpbWVTdGFtcDsKICB9CiAgc3RhdGljIGlzVXNpbmdNdWx0aXBsZVBvaW50ZXJzKCkgewogICAgcmV0dXJuIEN1cnJlbnRQb2ludGVycy4jcG9pbnRlcklkcz8uc2l6ZSA+PSAxOwogIH0KICBzdGF0aWMgY2xlYXJQb2ludGVyVHlwZSgpIHsKICAgIEN1cnJlbnRQb2ludGVycy4jcG9pbnRlclR5cGUgPSBudWxsOwogIH0KICBzdGF0aWMgY2xlYXJQb2ludGVySWRzKCkgewogICAgQ3VycmVudFBvaW50ZXJzLiNwb2ludGVySWQgPSBOYU47CiAgICBDdXJyZW50UG9pbnRlcnMuI3BvaW50ZXJJZHMgPSBudWxsOwogIH0KICBzdGF0aWMgY2xlYXJUaW1lU3RhbXAoKSB7CiAgICBDdXJyZW50UG9pbnRlcnMuI21vdmVUaW1lc3RhbXAgPSBOYU47CiAgfQp9CmNsYXNzIElkTWFuYWdlciB7CiAgI2lkID0gMDsKICBnZXQgaWQoKSB7CiAgICByZXR1cm4gYCR7QW5ub3RhdGlvbkVkaXRvclByZWZpeH0ke3RoaXMuI2lkKyt9YDsKICB9Cn0KY2xhc3MgSW1hZ2VNYW5hZ2VyIHsKICAjYmFzZUlkID0gZ2V0VXVpZCgpOwogICNpZCA9IDA7CiAgI2NhY2hlID0gbnVsbDsKICBzdGF0aWMgZ2V0IF9pc1NWR0ZpdHRpbmdDYW52YXMoKSB7CiAgICBjb25zdCBzdmcgPSBgZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsPHN2ZyB2aWV3Qm94PSIwIDAgMSAxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHN0eWxlPSJmaWxsOnJlZDsiLz48L3N2Zz5gOwogICAgY29uc3QgY2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcygxLCAzKTsKICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIsIHsKICAgICAgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlCiAgICB9KTsKICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7CiAgICBpbWFnZS5zcmMgPSBzdmc7CiAgICBjb25zdCBwcm9taXNlID0gaW1hZ2UuZGVjb2RlKCkudGhlbigoKSA9PiB7CiAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDMpOwogICAgICByZXR1cm4gbmV3IFVpbnQzMkFycmF5KGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgMSwgMSkuZGF0YS5idWZmZXIpWzBdID09PSAwOwogICAgfSk7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJfaXNTVkdGaXR0aW5nQ2FudmFzIiwgcHJvbWlzZSk7CiAgfQogIGFzeW5jICNnZXQoa2V5LCByYXdEYXRhKSB7CiAgICB0aGlzLiNjYWNoZSB8fD0gbmV3IE1hcCgpOwogICAgbGV0IGRhdGEgPSB0aGlzLiNjYWNoZS5nZXQoa2V5KTsKICAgIGlmIChkYXRhID09PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKGRhdGE/LmJpdG1hcCkgewogICAgICBkYXRhLnJlZkNvdW50ZXIgKz0gMTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CiAgICB0cnkgewogICAgICBkYXRhIHx8PSB7CiAgICAgICAgYml0bWFwOiBudWxsLAogICAgICAgIGlkOiBgaW1hZ2VfJHt0aGlzLiNiYXNlSWR9XyR7dGhpcy4jaWQrK31gLAogICAgICAgIHJlZkNvdW50ZXI6IDAsCiAgICAgICAgaXNTdmc6IGZhbHNlCiAgICAgIH07CiAgICAgIGxldCBpbWFnZTsKICAgICAgaWYgKHR5cGVvZiByYXdEYXRhID09PSAic3RyaW5nIikgewogICAgICAgIGRhdGEudXJsID0gcmF3RGF0YTsKICAgICAgICBpbWFnZSA9IGF3YWl0IGZldGNoRGF0YShyYXdEYXRhLCAiYmxvYiIpOwogICAgICB9IGVsc2UgaWYgKHJhd0RhdGEgaW5zdGFuY2VvZiBGaWxlKSB7CiAgICAgICAgaW1hZ2UgPSBkYXRhLmZpbGUgPSByYXdEYXRhOwogICAgICB9IGVsc2UgaWYgKHJhd0RhdGEgaW5zdGFuY2VvZiBCbG9iKSB7CiAgICAgICAgaW1hZ2UgPSByYXdEYXRhOwogICAgICB9CiAgICAgIGlmIChpbWFnZS50eXBlID09PSAiaW1hZ2Uvc3ZnK3htbCIpIHsKICAgICAgICBjb25zdCBtdXN0UmVtb3ZlQXNwZWN0UmF0aW9Qcm9taXNlID0gSW1hZ2VNYW5hZ2VyLl9pc1NWR0ZpdHRpbmdDYW52YXM7CiAgICAgICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgICAgY29uc3QgaW1hZ2VFbGVtZW50ID0gbmV3IEltYWdlKCk7CiAgICAgICAgY29uc3QgaW1hZ2VQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgaW1hZ2VFbGVtZW50Lm9ubG9hZCA9ICgpID0+IHsKICAgICAgICAgICAgZGF0YS5iaXRtYXAgPSBpbWFnZUVsZW1lbnQ7CiAgICAgICAgICAgIGRhdGEuaXNTdmcgPSB0cnVlOwogICAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgICB9OwogICAgICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHVybCA9IGRhdGEuc3ZnVXJsID0gZmlsZVJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgIGltYWdlRWxlbWVudC5zcmMgPSAoYXdhaXQgbXVzdFJlbW92ZUFzcGVjdFJhdGlvUHJvbWlzZSkgPyBgJHt1cmx9I3N2Z1ZpZXcocHJlc2VydmVBc3BlY3RSYXRpbyhub25lKSlgIDogdXJsOwogICAgICAgICAgfTsKICAgICAgICAgIGltYWdlRWxlbWVudC5vbmVycm9yID0gZmlsZVJlYWRlci5vbmVycm9yID0gcmVqZWN0OwogICAgICAgIH0pOwogICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChpbWFnZSk7CiAgICAgICAgYXdhaXQgaW1hZ2VQcm9taXNlOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGEuYml0bWFwID0gYXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoaW1hZ2UpOwogICAgICB9CiAgICAgIGRhdGEucmVmQ291bnRlciA9IDE7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHdhcm4oZSk7CiAgICAgIGRhdGEgPSBudWxsOwogICAgfQogICAgdGhpcy4jY2FjaGUuc2V0KGtleSwgZGF0YSk7CiAgICBpZiAoZGF0YSkgewogICAgICB0aGlzLiNjYWNoZS5zZXQoZGF0YS5pZCwgZGF0YSk7CiAgICB9CiAgICByZXR1cm4gZGF0YTsKICB9CiAgYXN5bmMgZ2V0RnJvbUZpbGUoZmlsZSkgewogICAgY29uc3QgewogICAgICBsYXN0TW9kaWZpZWQsCiAgICAgIG5hbWUsCiAgICAgIHNpemUsCiAgICAgIHR5cGUKICAgIH0gPSBmaWxlOwogICAgcmV0dXJuIHRoaXMuI2dldChgJHtsYXN0TW9kaWZpZWR9XyR7bmFtZX1fJHtzaXplfV8ke3R5cGV9YCwgZmlsZSk7CiAgfQogIGFzeW5jIGdldEZyb21VcmwodXJsKSB7CiAgICByZXR1cm4gdGhpcy4jZ2V0KHVybCwgdXJsKTsKICB9CiAgYXN5bmMgZ2V0RnJvbUJsb2IoaWQsIGJsb2JQcm9taXNlKSB7CiAgICBjb25zdCBibG9iID0gYXdhaXQgYmxvYlByb21pc2U7CiAgICByZXR1cm4gdGhpcy4jZ2V0KGlkLCBibG9iKTsKICB9CiAgYXN5bmMgZ2V0RnJvbUlkKGlkKSB7CiAgICB0aGlzLiNjYWNoZSB8fD0gbmV3IE1hcCgpOwogICAgY29uc3QgZGF0YSA9IHRoaXMuI2NhY2hlLmdldChpZCk7CiAgICBpZiAoIWRhdGEpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoZGF0YS5iaXRtYXApIHsKICAgICAgZGF0YS5yZWZDb3VudGVyICs9IDE7CiAgICAgIHJldHVybiBkYXRhOwogICAgfQogICAgaWYgKGRhdGEuZmlsZSkgewogICAgICByZXR1cm4gdGhpcy5nZXRGcm9tRmlsZShkYXRhLmZpbGUpOwogICAgfQogICAgaWYgKGRhdGEuYmxvYlByb21pc2UpIHsKICAgICAgY29uc3QgewogICAgICAgIGJsb2JQcm9taXNlCiAgICAgIH0gPSBkYXRhOwogICAgICBkZWxldGUgZGF0YS5ibG9iUHJvbWlzZTsKICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbUJsb2IoZGF0YS5pZCwgYmxvYlByb21pc2UpOwogICAgfQogICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVVybChkYXRhLnVybCk7CiAgfQogIGdldEZyb21DYW52YXMoaWQsIGNhbnZhcykgewogICAgdGhpcy4jY2FjaGUgfHw9IG5ldyBNYXAoKTsKICAgIGxldCBkYXRhID0gdGhpcy4jY2FjaGUuZ2V0KGlkKTsKICAgIGlmIChkYXRhPy5iaXRtYXApIHsKICAgICAgZGF0YS5yZWZDb3VudGVyICs9IDE7CiAgICAgIHJldHVybiBkYXRhOwogICAgfQogICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOwogICAgY29uc3QgY3R4ID0gb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICBjdHguZHJhd0ltYWdlKGNhbnZhcywgMCwgMCk7CiAgICBkYXRhID0gewogICAgICBiaXRtYXA6IG9mZnNjcmVlbi50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKSwKICAgICAgaWQ6IGBpbWFnZV8ke3RoaXMuI2Jhc2VJZH1fJHt0aGlzLiNpZCsrfWAsCiAgICAgIHJlZkNvdW50ZXI6IDEsCiAgICAgIGlzU3ZnOiBmYWxzZQogICAgfTsKICAgIHRoaXMuI2NhY2hlLnNldChpZCwgZGF0YSk7CiAgICB0aGlzLiNjYWNoZS5zZXQoZGF0YS5pZCwgZGF0YSk7CiAgICByZXR1cm4gZGF0YTsKICB9CiAgZ2V0U3ZnVXJsKGlkKSB7CiAgICBjb25zdCBkYXRhID0gdGhpcy4jY2FjaGUuZ2V0KGlkKTsKICAgIGlmICghZGF0YT8uaXNTdmcpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gZGF0YS5zdmdVcmw7CiAgfQogIGRlbGV0ZUlkKGlkKSB7CiAgICB0aGlzLiNjYWNoZSB8fD0gbmV3IE1hcCgpOwogICAgY29uc3QgZGF0YSA9IHRoaXMuI2NhY2hlLmdldChpZCk7CiAgICBpZiAoIWRhdGEpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZGF0YS5yZWZDb3VudGVyIC09IDE7CiAgICBpZiAoZGF0YS5yZWZDb3VudGVyICE9PSAwKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgYml0bWFwCiAgICB9ID0gZGF0YTsKICAgIGlmICghZGF0YS51cmwgJiYgIWRhdGEuZmlsZSkgewogICAgICBjb25zdCBjYW52YXMgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKGJpdG1hcC53aWR0aCwgYml0bWFwLmhlaWdodCk7CiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCJiaXRtYXByZW5kZXJlciIpOwogICAgICBjdHgudHJhbnNmZXJGcm9tSW1hZ2VCaXRtYXAoYml0bWFwKTsKICAgICAgZGF0YS5ibG9iUHJvbWlzZSA9IGNhbnZhcy5jb252ZXJ0VG9CbG9iKCk7CiAgICB9CiAgICBiaXRtYXAuY2xvc2U/LigpOwogICAgZGF0YS5iaXRtYXAgPSBudWxsOwogIH0KICBpc1ZhbGlkSWQoaWQpIHsKICAgIHJldHVybiBpZC5zdGFydHNXaXRoKGBpbWFnZV8ke3RoaXMuI2Jhc2VJZH1fYCk7CiAgfQp9CmNsYXNzIENvbW1hbmRNYW5hZ2VyIHsKICAjY29tbWFuZHMgPSBbXTsKICAjbG9ja2VkID0gZmFsc2U7CiAgI21heFNpemU7CiAgI3Bvc2l0aW9uID0gLTE7CiAgY29uc3RydWN0b3IobWF4U2l6ZSA9IDEyOCkgewogICAgdGhpcy4jbWF4U2l6ZSA9IG1heFNpemU7CiAgfQogIGFkZCh7CiAgICBjbWQsCiAgICB1bmRvLAogICAgcG9zdCwKICAgIG11c3RFeGVjLAogICAgdHlwZSA9IE5hTiwKICAgIG92ZXJ3cml0ZUlmU2FtZVR5cGUgPSBmYWxzZSwKICAgIGtlZXBVbmRvID0gZmFsc2UKICB9KSB7CiAgICBpZiAobXVzdEV4ZWMpIHsKICAgICAgY21kKCk7CiAgICB9CiAgICBpZiAodGhpcy4jbG9ja2VkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHNhdmUgPSB7CiAgICAgIGNtZCwKICAgICAgdW5kbywKICAgICAgcG9zdCwKICAgICAgdHlwZQogICAgfTsKICAgIGlmICh0aGlzLiNwb3NpdGlvbiA9PT0gLTEpIHsKICAgICAgaWYgKHRoaXMuI2NvbW1hbmRzLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLiNjb21tYW5kcy5sZW5ndGggPSAwOwogICAgICB9CiAgICAgIHRoaXMuI3Bvc2l0aW9uID0gMDsKICAgICAgdGhpcy4jY29tbWFuZHMucHVzaChzYXZlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG92ZXJ3cml0ZUlmU2FtZVR5cGUgJiYgdGhpcy4jY29tbWFuZHNbdGhpcy4jcG9zaXRpb25dLnR5cGUgPT09IHR5cGUpIHsKICAgICAgaWYgKGtlZXBVbmRvKSB7CiAgICAgICAgc2F2ZS51bmRvID0gdGhpcy4jY29tbWFuZHNbdGhpcy4jcG9zaXRpb25dLnVuZG87CiAgICAgIH0KICAgICAgdGhpcy4jY29tbWFuZHNbdGhpcy4jcG9zaXRpb25dID0gc2F2ZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbmV4dCA9IHRoaXMuI3Bvc2l0aW9uICsgMTsKICAgIGlmIChuZXh0ID09PSB0aGlzLiNtYXhTaXplKSB7CiAgICAgIHRoaXMuI2NvbW1hbmRzLnNwbGljZSgwLCAxKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uID0gbmV4dDsKICAgICAgaWYgKG5leHQgPCB0aGlzLiNjb21tYW5kcy5sZW5ndGgpIHsKICAgICAgICB0aGlzLiNjb21tYW5kcy5zcGxpY2UobmV4dCk7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuI2NvbW1hbmRzLnB1c2goc2F2ZSk7CiAgfQogIHVuZG8oKSB7CiAgICBpZiAodGhpcy4jcG9zaXRpb24gPT09IC0xKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI2xvY2tlZCA9IHRydWU7CiAgICBjb25zdCB7CiAgICAgIHVuZG8sCiAgICAgIHBvc3QKICAgIH0gPSB0aGlzLiNjb21tYW5kc1t0aGlzLiNwb3NpdGlvbl07CiAgICB1bmRvKCk7CiAgICBwb3N0Py4oKTsKICAgIHRoaXMuI2xvY2tlZCA9IGZhbHNlOwogICAgdGhpcy4jcG9zaXRpb24gLT0gMTsKICB9CiAgcmVkbygpIHsKICAgIGlmICh0aGlzLiNwb3NpdGlvbiA8IHRoaXMuI2NvbW1hbmRzLmxlbmd0aCAtIDEpIHsKICAgICAgdGhpcy4jcG9zaXRpb24gKz0gMTsKICAgICAgdGhpcy4jbG9ja2VkID0gdHJ1ZTsKICAgICAgY29uc3QgewogICAgICAgIGNtZCwKICAgICAgICBwb3N0CiAgICAgIH0gPSB0aGlzLiNjb21tYW5kc1t0aGlzLiNwb3NpdGlvbl07CiAgICAgIGNtZCgpOwogICAgICBwb3N0Py4oKTsKICAgICAgdGhpcy4jbG9ja2VkID0gZmFsc2U7CiAgICB9CiAgfQogIGhhc1NvbWV0aGluZ1RvVW5kbygpIHsKICAgIHJldHVybiB0aGlzLiNwb3NpdGlvbiAhPT0gLTE7CiAgfQogIGhhc1NvbWV0aGluZ1RvUmVkbygpIHsKICAgIHJldHVybiB0aGlzLiNwb3NpdGlvbiA8IHRoaXMuI2NvbW1hbmRzLmxlbmd0aCAtIDE7CiAgfQogIGNsZWFuVHlwZSh0eXBlKSB7CiAgICBpZiAodGhpcy4jcG9zaXRpb24gPT09IC0xKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGZvciAobGV0IGkgPSB0aGlzLiNwb3NpdGlvbjsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRoaXMuI2NvbW1hbmRzW2ldLnR5cGUgIT09IHR5cGUpIHsKICAgICAgICB0aGlzLiNjb21tYW5kcy5zcGxpY2UoaSArIDEsIHRoaXMuI3Bvc2l0aW9uIC0gaSk7CiAgICAgICAgdGhpcy4jcG9zaXRpb24gPSBpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgdGhpcy4jY29tbWFuZHMubGVuZ3RoID0gMDsKICAgIHRoaXMuI3Bvc2l0aW9uID0gLTE7CiAgfQogIGRlc3Ryb3koKSB7CiAgICB0aGlzLiNjb21tYW5kcyA9IG51bGw7CiAgfQp9CmNsYXNzIEtleWJvYXJkTWFuYWdlciB7CiAgY29uc3RydWN0b3IoY2FsbGJhY2tzKSB7CiAgICB0aGlzLmJ1ZmZlciA9IFtdOwogICAgdGhpcy5jYWxsYmFja3MgPSBuZXcgTWFwKCk7CiAgICB0aGlzLmFsbEtleXMgPSBuZXcgU2V0KCk7CiAgICBjb25zdCB7CiAgICAgIGlzTWFjCiAgICB9ID0gdXRpbF9GZWF0dXJlVGVzdC5wbGF0Zm9ybTsKICAgIGZvciAoY29uc3QgW2tleXMsIGNhbGxiYWNrLCBvcHRpb25zID0ge31dIG9mIGNhbGxiYWNrcykgewogICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7CiAgICAgICAgY29uc3QgaXNNYWNLZXkgPSBrZXkuc3RhcnRzV2l0aCgibWFjKyIpOwogICAgICAgIGlmIChpc01hYyAmJiBpc01hY0tleSkgewogICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2V0KGtleS5zbGljZSg0KSwgewogICAgICAgICAgICBjYWxsYmFjaywKICAgICAgICAgICAgb3B0aW9ucwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmFsbEtleXMuYWRkKGtleS5zcGxpdCgiKyIpLmF0KC0xKSk7CiAgICAgICAgfSBlbHNlIGlmICghaXNNYWMgJiYgIWlzTWFjS2V5KSB7CiAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zZXQoa2V5LCB7CiAgICAgICAgICAgIGNhbGxiYWNrLAogICAgICAgICAgICBvcHRpb25zCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuYWxsS2V5cy5hZGQoa2V5LnNwbGl0KCIrIikuYXQoLTEpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgI3NlcmlhbGl6ZShldmVudCkgewogICAgaWYgKGV2ZW50LmFsdEtleSkgewogICAgICB0aGlzLmJ1ZmZlci5wdXNoKCJhbHQiKTsKICAgIH0KICAgIGlmIChldmVudC5jdHJsS2V5KSB7CiAgICAgIHRoaXMuYnVmZmVyLnB1c2goImN0cmwiKTsKICAgIH0KICAgIGlmIChldmVudC5tZXRhS2V5KSB7CiAgICAgIHRoaXMuYnVmZmVyLnB1c2goIm1ldGEiKTsKICAgIH0KICAgIGlmIChldmVudC5zaGlmdEtleSkgewogICAgICB0aGlzLmJ1ZmZlci5wdXNoKCJzaGlmdCIpOwogICAgfQogICAgdGhpcy5idWZmZXIucHVzaChldmVudC5rZXkpOwogICAgY29uc3Qgc3RyID0gdGhpcy5idWZmZXIuam9pbigiKyIpOwogICAgdGhpcy5idWZmZXIubGVuZ3RoID0gMDsKICAgIHJldHVybiBzdHI7CiAgfQogIGV4ZWMoc2VsZiwgZXZlbnQpIHsKICAgIGlmICghdGhpcy5hbGxLZXlzLmhhcyhldmVudC5rZXkpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGluZm8gPSB0aGlzLmNhbGxiYWNrcy5nZXQodGhpcy4jc2VyaWFsaXplKGV2ZW50KSk7CiAgICBpZiAoIWluZm8pIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgewogICAgICBjYWxsYmFjaywKICAgICAgb3B0aW9uczogewogICAgICAgIGJ1YmJsZXMgPSBmYWxzZSwKICAgICAgICBhcmdzID0gW10sCiAgICAgICAgY2hlY2tlciA9IG51bGwKICAgICAgfQogICAgfSA9IGluZm87CiAgICBpZiAoY2hlY2tlciAmJiAhY2hlY2tlcihzZWxmLCBldmVudCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY2FsbGJhY2suYmluZChzZWxmLCAuLi5hcmdzLCBldmVudCkoKTsKICAgIGlmICghYnViYmxlcykgewogICAgICBzdG9wRXZlbnQoZXZlbnQpOwogICAgfQogIH0KfQpjbGFzcyBDb2xvck1hbmFnZXIgewogIHN0YXRpYyBfY29sb3JzTWFwcGluZyA9IG5ldyBNYXAoW1siQ2FudmFzVGV4dCIsIFswLCAwLCAwXV0sIFsiQ2FudmFzIiwgWzI1NSwgMjU1LCAyNTVdXV0pOwogIGdldCBfY29sb3JzKCkgewogICAgY29uc3QgY29sb3JzID0gbmV3IE1hcChbWyJDYW52YXNUZXh0IiwgbnVsbF0sIFsiQ2FudmFzIiwgbnVsbF1dKTsKICAgIGdldENvbG9yVmFsdWVzKGNvbG9ycyk7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJfY29sb3JzIiwgY29sb3JzKTsKICB9CiAgY29udmVydChjb2xvcikgewogICAgY29uc3QgcmdiID0gZ2V0UkdCKGNvbG9yKTsKICAgIGlmICghd2luZG93Lm1hdGNoTWVkaWEoIihmb3JjZWQtY29sb3JzOiBhY3RpdmUpIikubWF0Y2hlcykgewogICAgICByZXR1cm4gcmdiOwogICAgfQogICAgZm9yIChjb25zdCBbbmFtZSwgUkdCXSBvZiB0aGlzLl9jb2xvcnMpIHsKICAgICAgaWYgKFJHQi5ldmVyeSgoeCwgaSkgPT4geCA9PT0gcmdiW2ldKSkgewogICAgICAgIHJldHVybiBDb2xvck1hbmFnZXIuX2NvbG9yc01hcHBpbmcuZ2V0KG5hbWUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmdiOwogIH0KICBnZXRIZXhDb2RlKG5hbWUpIHsKICAgIGNvbnN0IHJnYiA9IHRoaXMuX2NvbG9ycy5nZXQobmFtZSk7CiAgICBpZiAoIXJnYikgewogICAgICByZXR1cm4gbmFtZTsKICAgIH0KICAgIHJldHVybiBVdGlsLm1ha2VIZXhDb2xvciguLi5yZ2IpOwogIH0KfQpjbGFzcyBBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyIHsKICAjYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICNhY3RpdmVFZGl0b3IgPSBudWxsOwogICNhbGxFZGl0YWJsZUFubm90YXRpb25zID0gbnVsbDsKICAjYWxsRWRpdG9ycyA9IG5ldyBNYXAoKTsKICAjYWxsTGF5ZXJzID0gbmV3IE1hcCgpOwogICNhbHRUZXh0TWFuYWdlciA9IG51bGw7CiAgI2Fubm90YXRpb25TdG9yYWdlID0gbnVsbDsKICAjY2hhbmdlZEV4aXN0aW5nQW5ub3RhdGlvbnMgPSBudWxsOwogICNjb21tYW5kTWFuYWdlciA9IG5ldyBDb21tYW5kTWFuYWdlcigpOwogICNjb21tZW50TWFuYWdlciA9IG51bGw7CiAgI2NvcHlQYXN0ZUFDID0gbnVsbDsKICAjY3VycmVudERyYXdpbmdTZXNzaW9uID0gbnVsbDsKICAjY3VycmVudFBhZ2VJbmRleCA9IDA7CiAgI2RlbGV0ZWRBbm5vdGF0aW9uc0VsZW1lbnRJZHMgPSBuZXcgU2V0KCk7CiAgI2RyYWdnaW5nRWRpdG9ycyA9IG51bGw7CiAgI2VkaXRvclR5cGVzID0gbnVsbDsKICAjZWRpdG9yc1RvUmVzY2FsZSA9IG5ldyBTZXQoKTsKICBfZWRpdG9yVW5kb0JhciA9IG51bGw7CiAgI2VuYWJsZUhpZ2hsaWdodEZsb2F0aW5nQnV0dG9uID0gZmFsc2U7CiAgI2VuYWJsZVVwZGF0ZWRBZGRJbWFnZSA9IGZhbHNlOwogICNlbmFibGVOZXdBbHRUZXh0V2hlbkFkZGluZ0ltYWdlID0gZmFsc2U7CiAgI2ZpbHRlckZhY3RvcnkgPSBudWxsOwogICNmb2N1c01haW5Db250YWluZXJUaW1lb3V0SWQgPSBudWxsOwogICNmb2N1c01hbmFnZXJBQyA9IG51bGw7CiAgI2hpZ2hsaWdodENvbG9ycyA9IG51bGw7CiAgI2hpZ2hsaWdodFdoZW5TaGlmdFVwID0gZmFsc2U7CiAgI2Zsb2F0aW5nVG9vbGJhciA9IG51bGw7CiAgI2lkTWFuYWdlciA9IG5ldyBJZE1hbmFnZXIoKTsKICAjaXNFbmFibGVkID0gZmFsc2U7CiAgI2lzUG9pbnRlckRvd24gPSBmYWxzZTsKICAjaXNXYWl0aW5nID0gZmFsc2U7CiAgI2tleWJvYXJkTWFuYWdlckFDID0gbnVsbDsKICAjbGFzdEFjdGl2ZUVsZW1lbnQgPSBudWxsOwogICNtYWluSGlnaGxpZ2h0Q29sb3JQaWNrZXIgPSBudWxsOwogICNtaXNzaW5nQ2FudmFzZXMgPSBudWxsOwogICNtbE1hbmFnZXIgPSBudWxsOwogICNtb2RlID0gQW5ub3RhdGlvbkVkaXRvclR5cGUuTk9ORTsKICAjc2VsZWN0ZWRFZGl0b3JzID0gbmV3IFNldCgpOwogICNzZWxlY3RlZFRleHROb2RlID0gbnVsbDsKICAjc2lnbmF0dXJlTWFuYWdlciA9IG51bGw7CiAgI3BhZ2VDb2xvcnMgPSBudWxsOwogICNzaG93QWxsU3RhdGVzID0gbnVsbDsKICAjcGRmRG9jdW1lbnQgPSBudWxsOwogICNwcmV2aW91c1N0YXRlcyA9IHsKICAgIGlzRWRpdGluZzogZmFsc2UsCiAgICBpc0VtcHR5OiB0cnVlLAogICAgaGFzU29tZXRoaW5nVG9VbmRvOiBmYWxzZSwKICAgIGhhc1NvbWV0aGluZ1RvUmVkbzogZmFsc2UsCiAgICBoYXNTZWxlY3RlZEVkaXRvcjogZmFsc2UsCiAgICBoYXNTZWxlY3RlZFRleHQ6IGZhbHNlCiAgfTsKICAjdHJhbnNsYXRpb24gPSBbMCwgMF07CiAgI3RyYW5zbGF0aW9uVGltZW91dElkID0gbnVsbDsKICAjY29udGFpbmVyID0gbnVsbDsKICAjdmlld2VyID0gbnVsbDsKICAjdmlld2VyQWxlcnQgPSBudWxsOwogICN1cGRhdGVNb2RlQ2FwYWJpbGl0eSA9IG51bGw7CiAgc3RhdGljIFRSQU5TTEFURV9TTUFMTCA9IDE7CiAgc3RhdGljIFRSQU5TTEFURV9CSUcgPSAxMDsKICBzdGF0aWMgZ2V0IF9rZXlib2FyZE1hbmFnZXIoKSB7CiAgICBjb25zdCBwcm90byA9IEFubm90YXRpb25FZGl0b3JVSU1hbmFnZXIucHJvdG90eXBlOwogICAgY29uc3QgYXJyb3dDaGVja2VyID0gc2VsZiA9PiBzZWxmLiNjb250YWluZXIuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lICE9PSAiQlVUVE9OIiAmJiBzZWxmLmhhc1NvbWV0aGluZ1RvQ29udHJvbCgpOwogICAgY29uc3QgdGV4dElucHV0Q2hlY2tlciA9IChfc2VsZiwgewogICAgICB0YXJnZXQ6IGVsCiAgICB9KSA9PiB7CiAgICAgIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHsKICAgICAgICBjb25zdCB7CiAgICAgICAgICB0eXBlCiAgICAgICAgfSA9IGVsOwogICAgICAgIHJldHVybiB0eXBlICE9PSAidGV4dCIgJiYgdHlwZSAhPT0gIm51bWJlciI7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgY29uc3Qgc21hbGwgPSB0aGlzLlRSQU5TTEFURV9TTUFMTDsKICAgIGNvbnN0IGJpZyA9IHRoaXMuVFJBTlNMQVRFX0JJRzsKICAgIHJldHVybiBzaGFkb3codGhpcywgIl9rZXlib2FyZE1hbmFnZXIiLCBuZXcgS2V5Ym9hcmRNYW5hZ2VyKFtbWyJjdHJsK2EiLCAibWFjK21ldGErYSJdLCBwcm90by5zZWxlY3RBbGwsIHsKICAgICAgY2hlY2tlcjogdGV4dElucHV0Q2hlY2tlcgogICAgfV0sIFtbImN0cmwreiIsICJtYWMrbWV0YSt6Il0sIHByb3RvLnVuZG8sIHsKICAgICAgY2hlY2tlcjogdGV4dElucHV0Q2hlY2tlcgogICAgfV0sIFtbImN0cmwreSIsICJjdHJsK3NoaWZ0K3oiLCAibWFjK21ldGErc2hpZnQreiIsICJjdHJsK3NoaWZ0K1oiLCAibWFjK21ldGErc2hpZnQrWiJdLCBwcm90by5yZWRvLCB7CiAgICAgIGNoZWNrZXI6IHRleHRJbnB1dENoZWNrZXIKICAgIH1dLCBbWyJCYWNrc3BhY2UiLCAiYWx0K0JhY2tzcGFjZSIsICJjdHJsK0JhY2tzcGFjZSIsICJzaGlmdCtCYWNrc3BhY2UiLCAibWFjK0JhY2tzcGFjZSIsICJtYWMrYWx0K0JhY2tzcGFjZSIsICJtYWMrY3RybCtCYWNrc3BhY2UiLCAiRGVsZXRlIiwgImN0cmwrRGVsZXRlIiwgInNoaWZ0K0RlbGV0ZSIsICJtYWMrRGVsZXRlIl0sIHByb3RvLmRlbGV0ZSwgewogICAgICBjaGVja2VyOiB0ZXh0SW5wdXRDaGVja2VyCiAgICB9XSwgW1siRW50ZXIiLCAibWFjK0VudGVyIl0sIHByb3RvLmFkZE5ld0VkaXRvckZyb21LZXlib2FyZCwgewogICAgICBjaGVja2VyOiAoc2VsZiwgewogICAgICAgIHRhcmdldDogZWwKICAgICAgfSkgPT4gIShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSAmJiBzZWxmLiNjb250YWluZXIuY29udGFpbnMoZWwpICYmICFzZWxmLmlzRW50ZXJIYW5kbGVkCiAgICB9XSwgW1siICIsICJtYWMrICJdLCBwcm90by5hZGROZXdFZGl0b3JGcm9tS2V5Ym9hcmQsIHsKICAgICAgY2hlY2tlcjogKHNlbGYsIHsKICAgICAgICB0YXJnZXQ6IGVsCiAgICAgIH0pID0+ICEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkgJiYgc2VsZi4jY29udGFpbmVyLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpCiAgICB9XSwgW1siRXNjYXBlIiwgIm1hYytFc2NhcGUiXSwgcHJvdG8udW5zZWxlY3RBbGxdLCBbWyJBcnJvd0xlZnQiLCAibWFjK0Fycm93TGVmdCJdLCBwcm90by50cmFuc2xhdGVTZWxlY3RlZEVkaXRvcnMsIHsKICAgICAgYXJnczogWy1zbWFsbCwgMF0sCiAgICAgIGNoZWNrZXI6IGFycm93Q2hlY2tlcgogICAgfV0sIFtbImN0cmwrQXJyb3dMZWZ0IiwgIm1hYytzaGlmdCtBcnJvd0xlZnQiXSwgcHJvdG8udHJhbnNsYXRlU2VsZWN0ZWRFZGl0b3JzLCB7CiAgICAgIGFyZ3M6IFstYmlnLCAwXSwKICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyCiAgICB9XSwgW1siQXJyb3dSaWdodCIsICJtYWMrQXJyb3dSaWdodCJdLCBwcm90by50cmFuc2xhdGVTZWxlY3RlZEVkaXRvcnMsIHsKICAgICAgYXJnczogW3NtYWxsLCAwXSwKICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyCiAgICB9XSwgW1siY3RybCtBcnJvd1JpZ2h0IiwgIm1hYytzaGlmdCtBcnJvd1JpZ2h0Il0sIHByb3RvLnRyYW5zbGF0ZVNlbGVjdGVkRWRpdG9ycywgewogICAgICBhcmdzOiBbYmlnLCAwXSwKICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyCiAgICB9XSwgW1siQXJyb3dVcCIsICJtYWMrQXJyb3dVcCJdLCBwcm90by50cmFuc2xhdGVTZWxlY3RlZEVkaXRvcnMsIHsKICAgICAgYXJnczogWzAsIC1zbWFsbF0sCiAgICAgIGNoZWNrZXI6IGFycm93Q2hlY2tlcgogICAgfV0sIFtbImN0cmwrQXJyb3dVcCIsICJtYWMrc2hpZnQrQXJyb3dVcCJdLCBwcm90by50cmFuc2xhdGVTZWxlY3RlZEVkaXRvcnMsIHsKICAgICAgYXJnczogWzAsIC1iaWddLAogICAgICBjaGVja2VyOiBhcnJvd0NoZWNrZXIKICAgIH1dLCBbWyJBcnJvd0Rvd24iLCAibWFjK0Fycm93RG93biJdLCBwcm90by50cmFuc2xhdGVTZWxlY3RlZEVkaXRvcnMsIHsKICAgICAgYXJnczogWzAsIHNtYWxsXSwKICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyCiAgICB9XSwgW1siY3RybCtBcnJvd0Rvd24iLCAibWFjK3NoaWZ0K0Fycm93RG93biJdLCBwcm90by50cmFuc2xhdGVTZWxlY3RlZEVkaXRvcnMsIHsKICAgICAgYXJnczogWzAsIGJpZ10sCiAgICAgIGNoZWNrZXI6IGFycm93Q2hlY2tlcgogICAgfV1dKSk7CiAgfQogIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgdmlld2VyLCB2aWV3ZXJBbGVydCwgYWx0VGV4dE1hbmFnZXIsIGNvbW1lbnRNYW5hZ2VyLCBzaWduYXR1cmVNYW5hZ2VyLCBldmVudEJ1cywgcGRmRG9jdW1lbnQsIHBhZ2VDb2xvcnMsIGhpZ2hsaWdodENvbG9ycywgZW5hYmxlSGlnaGxpZ2h0RmxvYXRpbmdCdXR0b24sIGVuYWJsZVVwZGF0ZWRBZGRJbWFnZSwgZW5hYmxlTmV3QWx0VGV4dFdoZW5BZGRpbmdJbWFnZSwgbWxNYW5hZ2VyLCBlZGl0b3JVbmRvQmFyLCBzdXBwb3J0c1BpbmNoVG9ab29tKSB7CiAgICBjb25zdCBzaWduYWwgPSB0aGlzLl9zaWduYWwgPSB0aGlzLiNhYm9ydENvbnRyb2xsZXIuc2lnbmFsOwogICAgdGhpcy4jY29udGFpbmVyID0gY29udGFpbmVyOwogICAgdGhpcy4jdmlld2VyID0gdmlld2VyOwogICAgdGhpcy4jdmlld2VyQWxlcnQgPSB2aWV3ZXJBbGVydDsKICAgIHRoaXMuI2FsdFRleHRNYW5hZ2VyID0gYWx0VGV4dE1hbmFnZXI7CiAgICB0aGlzLiNjb21tZW50TWFuYWdlciA9IGNvbW1lbnRNYW5hZ2VyOwogICAgdGhpcy4jc2lnbmF0dXJlTWFuYWdlciA9IHNpZ25hdHVyZU1hbmFnZXI7CiAgICB0aGlzLiNwZGZEb2N1bWVudCA9IHBkZkRvY3VtZW50OwogICAgdGhpcy5fZXZlbnRCdXMgPSBldmVudEJ1czsKICAgIGV2ZW50QnVzLl9vbigiZWRpdGluZ2FjdGlvbiIsIHRoaXMub25FZGl0aW5nQWN0aW9uLmJpbmQodGhpcyksIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIGV2ZW50QnVzLl9vbigicGFnZWNoYW5naW5nIiwgdGhpcy5vblBhZ2VDaGFuZ2luZy5iaW5kKHRoaXMpLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBldmVudEJ1cy5fb24oInNjYWxlY2hhbmdpbmciLCB0aGlzLm9uU2NhbGVDaGFuZ2luZy5iaW5kKHRoaXMpLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBldmVudEJ1cy5fb24oInJvdGF0aW9uY2hhbmdpbmciLCB0aGlzLm9uUm90YXRpb25DaGFuZ2luZy5iaW5kKHRoaXMpLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBldmVudEJ1cy5fb24oInNldHByZWZlcmVuY2UiLCB0aGlzLm9uU2V0UHJlZmVyZW5jZS5iaW5kKHRoaXMpLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBldmVudEJ1cy5fb24oInN3aXRjaGFubm90YXRpb25lZGl0b3JwYXJhbXMiLCBldnQgPT4gdGhpcy51cGRhdGVQYXJhbXMoZXZ0LnR5cGUsIGV2dC52YWx1ZSksIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsICgpID0+IHsKICAgICAgdGhpcy4jaXNQb2ludGVyRG93biA9IHRydWU7CiAgICB9LCB7CiAgICAgIGNhcHR1cmU6IHRydWUsCiAgICAgIHNpZ25hbAogICAgfSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgKCkgPT4gewogICAgICB0aGlzLiNpc1BvaW50ZXJEb3duID0gZmFsc2U7CiAgICB9LCB7CiAgICAgIGNhcHR1cmU6IHRydWUsCiAgICAgIHNpZ25hbAogICAgfSk7CiAgICB0aGlzLiNhZGRTZWxlY3Rpb25MaXN0ZW5lcigpOwogICAgdGhpcy4jYWRkRHJhZ0FuZERyb3BMaXN0ZW5lcnMoKTsKICAgIHRoaXMuI2FkZEtleWJvYXJkTWFuYWdlcigpOwogICAgdGhpcy4jYW5ub3RhdGlvblN0b3JhZ2UgPSBwZGZEb2N1bWVudC5hbm5vdGF0aW9uU3RvcmFnZTsKICAgIHRoaXMuI2ZpbHRlckZhY3RvcnkgPSBwZGZEb2N1bWVudC5maWx0ZXJGYWN0b3J5OwogICAgdGhpcy4jcGFnZUNvbG9ycyA9IHBhZ2VDb2xvcnM7CiAgICB0aGlzLiNoaWdobGlnaHRDb2xvcnMgPSBoaWdobGlnaHRDb2xvcnMgfHwgbnVsbDsKICAgIHRoaXMuI2VuYWJsZUhpZ2hsaWdodEZsb2F0aW5nQnV0dG9uID0gZW5hYmxlSGlnaGxpZ2h0RmxvYXRpbmdCdXR0b247CiAgICB0aGlzLiNlbmFibGVVcGRhdGVkQWRkSW1hZ2UgPSBlbmFibGVVcGRhdGVkQWRkSW1hZ2U7CiAgICB0aGlzLiNlbmFibGVOZXdBbHRUZXh0V2hlbkFkZGluZ0ltYWdlID0gZW5hYmxlTmV3QWx0VGV4dFdoZW5BZGRpbmdJbWFnZTsKICAgIHRoaXMuI21sTWFuYWdlciA9IG1sTWFuYWdlciB8fCBudWxsOwogICAgdGhpcy52aWV3UGFyYW1ldGVycyA9IHsKICAgICAgcmVhbFNjYWxlOiBQaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMsCiAgICAgIHJvdGF0aW9uOiAwCiAgICB9OwogICAgdGhpcy5pc1NoaWZ0S2V5RG93biA9IGZhbHNlOwogICAgdGhpcy5fZWRpdG9yVW5kb0JhciA9IGVkaXRvclVuZG9CYXIgfHwgbnVsbDsKICAgIHRoaXMuX3N1cHBvcnRzUGluY2hUb1pvb20gPSBzdXBwb3J0c1BpbmNoVG9ab29tICE9PSBmYWxzZTsKICAgIGNvbW1lbnRNYW5hZ2VyPy5zZXRTaWRlYmFyVWlNYW5hZ2VyKHRoaXMpOwogIH0KICBkZXN0cm95KCkgewogICAgdGhpcy4jdXBkYXRlTW9kZUNhcGFiaWxpdHk/LnJlc29sdmUoKTsKICAgIHRoaXMuI3VwZGF0ZU1vZGVDYXBhYmlsaXR5ID0gbnVsbDsKICAgIHRoaXMuI2Fib3J0Q29udHJvbGxlcj8uYWJvcnQoKTsKICAgIHRoaXMuI2Fib3J0Q29udHJvbGxlciA9IG51bGw7CiAgICB0aGlzLl9zaWduYWwgPSBudWxsOwogICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLiNhbGxMYXllcnMudmFsdWVzKCkpIHsKICAgICAgbGF5ZXIuZGVzdHJveSgpOwogICAgfQogICAgdGhpcy4jYWxsTGF5ZXJzLmNsZWFyKCk7CiAgICB0aGlzLiNhbGxFZGl0b3JzLmNsZWFyKCk7CiAgICB0aGlzLiNlZGl0b3JzVG9SZXNjYWxlLmNsZWFyKCk7CiAgICB0aGlzLiNtaXNzaW5nQ2FudmFzZXM/LmNsZWFyKCk7CiAgICB0aGlzLiNhY3RpdmVFZGl0b3IgPSBudWxsOwogICAgdGhpcy4jc2VsZWN0ZWRFZGl0b3JzLmNsZWFyKCk7CiAgICB0aGlzLiNjb21tYW5kTWFuYWdlci5kZXN0cm95KCk7CiAgICB0aGlzLiNhbHRUZXh0TWFuYWdlcj8uZGVzdHJveSgpOwogICAgdGhpcy4jY29tbWVudE1hbmFnZXI/LmRlc3Ryb3koKTsKICAgIHRoaXMuI3NpZ25hdHVyZU1hbmFnZXI/LmRlc3Ryb3koKTsKICAgIHRoaXMuI2Zsb2F0aW5nVG9vbGJhcj8uaGlkZSgpOwogICAgdGhpcy4jZmxvYXRpbmdUb29sYmFyID0gbnVsbDsKICAgIHRoaXMuI21haW5IaWdobGlnaHRDb2xvclBpY2tlcj8uZGVzdHJveSgpOwogICAgdGhpcy4jbWFpbkhpZ2hsaWdodENvbG9yUGlja2VyID0gbnVsbDsKICAgIHRoaXMuI2FsbEVkaXRhYmxlQW5ub3RhdGlvbnMgPSBudWxsOwogICAgaWYgKHRoaXMuI2ZvY3VzTWFpbkNvbnRhaW5lclRpbWVvdXRJZCkgewogICAgICBjbGVhclRpbWVvdXQodGhpcy4jZm9jdXNNYWluQ29udGFpbmVyVGltZW91dElkKTsKICAgICAgdGhpcy4jZm9jdXNNYWluQ29udGFpbmVyVGltZW91dElkID0gbnVsbDsKICAgIH0KICAgIGlmICh0aGlzLiN0cmFuc2xhdGlvblRpbWVvdXRJZCkgewogICAgICBjbGVhclRpbWVvdXQodGhpcy4jdHJhbnNsYXRpb25UaW1lb3V0SWQpOwogICAgICB0aGlzLiN0cmFuc2xhdGlvblRpbWVvdXRJZCA9IG51bGw7CiAgICB9CiAgICB0aGlzLl9lZGl0b3JVbmRvQmFyPy5kZXN0cm95KCk7CiAgICB0aGlzLiNwZGZEb2N1bWVudCA9IG51bGw7CiAgfQogIGNvbWJpbmVkU2lnbmFsKGFjKSB7CiAgICByZXR1cm4gQWJvcnRTaWduYWwuYW55KFt0aGlzLl9zaWduYWwsIGFjLnNpZ25hbF0pOwogIH0KICBnZXQgbWxNYW5hZ2VyKCkgewogICAgcmV0dXJuIHRoaXMuI21sTWFuYWdlcjsKICB9CiAgZ2V0IHVzZU5ld0FsdFRleHRGbG93KCkgewogICAgcmV0dXJuIHRoaXMuI2VuYWJsZVVwZGF0ZWRBZGRJbWFnZTsKICB9CiAgZ2V0IHVzZU5ld0FsdFRleHRXaGVuQWRkaW5nSW1hZ2UoKSB7CiAgICByZXR1cm4gdGhpcy4jZW5hYmxlTmV3QWx0VGV4dFdoZW5BZGRpbmdJbWFnZTsKICB9CiAgZ2V0IGhjbUZpbHRlcigpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgImhjbUZpbHRlciIsIHRoaXMuI3BhZ2VDb2xvcnMgPyB0aGlzLiNmaWx0ZXJGYWN0b3J5LmFkZEhDTUZpbHRlcih0aGlzLiNwYWdlQ29sb3JzLmZvcmVncm91bmQsIHRoaXMuI3BhZ2VDb2xvcnMuYmFja2dyb3VuZCkgOiAibm9uZSIpOwogIH0KICBnZXQgZGlyZWN0aW9uKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiZGlyZWN0aW9uIiwgZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiNjb250YWluZXIpLmRpcmVjdGlvbik7CiAgfQogIGdldCBfaGlnaGxpZ2h0Q29sb3JzKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiX2hpZ2hsaWdodENvbG9ycyIsIHRoaXMuI2hpZ2hsaWdodENvbG9ycyA/IG5ldyBNYXAodGhpcy4jaGlnaGxpZ2h0Q29sb3JzLnNwbGl0KCIsIikubWFwKHBhaXIgPT4gewogICAgICBwYWlyID0gcGFpci5zcGxpdCgiPSIpLm1hcCh4ID0+IHgudHJpbSgpKTsKICAgICAgcGFpclsxXSA9IHBhaXJbMV0udG9VcHBlckNhc2UoKTsKICAgICAgcmV0dXJuIHBhaXI7CiAgICB9KSkgOiBudWxsKTsKICB9CiAgZ2V0IGhpZ2hsaWdodENvbG9ycygpIHsKICAgIGNvbnN0IHsKICAgICAgX2hpZ2hsaWdodENvbG9ycwogICAgfSA9IHRoaXM7CiAgICBpZiAoIV9oaWdobGlnaHRDb2xvcnMpIHsKICAgICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaGlnaGxpZ2h0Q29sb3JzIiwgbnVsbCk7CiAgICB9CiAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7CiAgICBjb25zdCBoYXNIQ00gPSAhIXRoaXMuI3BhZ2VDb2xvcnM7CiAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb2xvcl0gb2YgX2hpZ2hsaWdodENvbG9ycykgewogICAgICBjb25zdCBpc05hbWVGb3JIQ00gPSBuYW1lLmVuZHNXaXRoKCJfSENNIik7CiAgICAgIGlmIChoYXNIQ00gJiYgaXNOYW1lRm9ySENNKSB7CiAgICAgICAgbWFwLnNldChuYW1lLnJlcGxhY2UoIl9IQ00iLCAiIiksIGNvbG9yKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoIWhhc0hDTSAmJiAhaXNOYW1lRm9ySENNKSB7CiAgICAgICAgbWFwLnNldChuYW1lLCBjb2xvcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzaGFkb3codGhpcywgImhpZ2hsaWdodENvbG9ycyIsIG1hcCk7CiAgfQogIGdldCBoaWdobGlnaHRDb2xvck5hbWVzKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaGlnaGxpZ2h0Q29sb3JOYW1lcyIsIHRoaXMuaGlnaGxpZ2h0Q29sb3JzID8gbmV3IE1hcChBcnJheS5mcm9tKHRoaXMuaGlnaGxpZ2h0Q29sb3JzLCBlID0+IGUucmV2ZXJzZSgpKSkgOiBudWxsKTsKICB9CiAgZ2V0Tm9uSENNQ29sb3IoY29sb3IpIHsKICAgIGlmICghdGhpcy5faGlnaGxpZ2h0Q29sb3JzKSB7CiAgICAgIHJldHVybiBjb2xvcjsKICAgIH0KICAgIGNvbnN0IGNvbG9yTmFtZSA9IHRoaXMuaGlnaGxpZ2h0Q29sb3JOYW1lcy5nZXQoY29sb3IpOwogICAgcmV0dXJuIHRoaXMuX2hpZ2hsaWdodENvbG9ycy5nZXQoY29sb3JOYW1lKSB8fCBjb2xvcjsKICB9CiAgZ2V0Tm9uSENNQ29sb3JOYW1lKGNvbG9yKSB7CiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRDb2xvck5hbWVzLmdldChjb2xvcikgfHwgY29sb3I7CiAgfQogIHNldEN1cnJlbnREcmF3aW5nU2Vzc2lvbihsYXllcikgewogICAgaWYgKGxheWVyKSB7CiAgICAgIHRoaXMudW5zZWxlY3RBbGwoKTsKICAgICAgdGhpcy5kaXNhYmxlVXNlclNlbGVjdCh0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuZGlzYWJsZVVzZXJTZWxlY3QoZmFsc2UpOwogICAgfQogICAgdGhpcy4jY3VycmVudERyYXdpbmdTZXNzaW9uID0gbGF5ZXI7CiAgfQogIHNldE1haW5IaWdobGlnaHRDb2xvclBpY2tlcihjb2xvclBpY2tlcikgewogICAgdGhpcy4jbWFpbkhpZ2hsaWdodENvbG9yUGlja2VyID0gY29sb3JQaWNrZXI7CiAgfQogIGVkaXRBbHRUZXh0KGVkaXRvciwgZmlyc3RUaW1lID0gZmFsc2UpIHsKICAgIHRoaXMuI2FsdFRleHRNYW5hZ2VyPy5lZGl0QWx0VGV4dCh0aGlzLCBlZGl0b3IsIGZpcnN0VGltZSk7CiAgfQogIGhhc0NvbW1lbnRNYW5hZ2VyKCkgewogICAgcmV0dXJuICEhdGhpcy4jY29tbWVudE1hbmFnZXI7CiAgfQogIGVkaXRDb21tZW50KGVkaXRvciwgcG9zWCwgcG9zWSwgb3B0aW9ucykgewogICAgdGhpcy4jY29tbWVudE1hbmFnZXI/LnNob3dEaWFsb2codGhpcywgZWRpdG9yLCBwb3NYLCBwb3NZLCBvcHRpb25zKTsKICB9CiAgc2VsZWN0Q29tbWVudChwYWdlSW5kZXgsIHVpZCkgewogICAgY29uc3QgbGF5ZXIgPSB0aGlzLiNhbGxMYXllcnMuZ2V0KHBhZ2VJbmRleCk7CiAgICBjb25zdCBlZGl0b3IgPSBsYXllcj8uZ2V0RWRpdG9yQnlVSUQodWlkKTsKICAgIGVkaXRvcj8udG9nZ2xlQ29tbWVudCh0cnVlLCB0cnVlKTsKICB9CiAgdXBkYXRlQ29tbWVudChlZGl0b3IpIHsKICAgIHRoaXMuI2NvbW1lbnRNYW5hZ2VyPy51cGRhdGVDb21tZW50KGVkaXRvci5nZXREYXRhKCkpOwogIH0KICB1cGRhdGVQb3B1cENvbG9yKGVkaXRvcikgewogICAgdGhpcy4jY29tbWVudE1hbmFnZXI/LnVwZGF0ZVBvcHVwQ29sb3IoZWRpdG9yKTsKICB9CiAgcmVtb3ZlQ29tbWVudChlZGl0b3IpIHsKICAgIHRoaXMuI2NvbW1lbnRNYW5hZ2VyPy5yZW1vdmVDb21tZW50cyhbZWRpdG9yLnVpZF0pOwogIH0KICB0b2dnbGVDb21tZW50KGVkaXRvciwgaXNTZWxlY3RlZCwgdmlzaWJpbGl0eSA9IHVuZGVmaW5lZCkgewogICAgdGhpcy4jY29tbWVudE1hbmFnZXI/LnRvZ2dsZUNvbW1lbnRQb3B1cChlZGl0b3IsIGlzU2VsZWN0ZWQsIHZpc2liaWxpdHkpOwogIH0KICBtYWtlQ29tbWVudENvbG9yKGNvbG9yLCBvcGFjaXR5KSB7CiAgICByZXR1cm4gY29sb3IgJiYgdGhpcy4jY29tbWVudE1hbmFnZXI/Lm1ha2VDb21tZW50Q29sb3IoY29sb3IsIG9wYWNpdHkpIHx8IG51bGw7CiAgfQogIGdldENvbW1lbnREaWFsb2dFbGVtZW50KCkgewogICAgcmV0dXJuIHRoaXMuI2NvbW1lbnRNYW5hZ2VyPy5kaWFsb2dFbGVtZW50IHx8IG51bGw7CiAgfQogIGFzeW5jIHdhaXRGb3JFZGl0b3JzUmVuZGVyZWQocGFnZU51bWJlcikgewogICAgaWYgKHRoaXMuI2FsbExheWVycy5oYXMocGFnZU51bWJlciAtIDEpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgcmVzb2x2ZSwKICAgICAgcHJvbWlzZQogICAgfSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgY29uc3Qgb25FZGl0b3JzUmVuZGVyZWQgPSBldnQgPT4gewogICAgICBpZiAoZXZ0LnBhZ2VOdW1iZXIgPT09IHBhZ2VOdW1iZXIpIHsKICAgICAgICB0aGlzLl9ldmVudEJ1cy5fb2ZmKCJlZGl0b3JzcmVuZGVyZWQiLCBvbkVkaXRvcnNSZW5kZXJlZCk7CiAgICAgICAgcmVzb2x2ZSgpOwogICAgICB9CiAgICB9OwogICAgdGhpcy5fZXZlbnRCdXMub24oImVkaXRvcnNyZW5kZXJlZCIsIG9uRWRpdG9yc1JlbmRlcmVkKTsKICAgIGF3YWl0IHByb21pc2U7CiAgfQogIGdldFNpZ25hdHVyZShlZGl0b3IpIHsKICAgIHRoaXMuI3NpZ25hdHVyZU1hbmFnZXI/LmdldFNpZ25hdHVyZSh7CiAgICAgIHVpTWFuYWdlcjogdGhpcywKICAgICAgZWRpdG9yCiAgICB9KTsKICB9CiAgZ2V0IHNpZ25hdHVyZU1hbmFnZXIoKSB7CiAgICByZXR1cm4gdGhpcy4jc2lnbmF0dXJlTWFuYWdlcjsKICB9CiAgc3dpdGNoVG9Nb2RlKG1vZGUsIGNhbGxiYWNrKSB7CiAgICB0aGlzLl9ldmVudEJ1cy5vbigiYW5ub3RhdGlvbmVkaXRvcm1vZGVjaGFuZ2VkIiwgY2FsbGJhY2ssIHsKICAgICAgb25jZTogdHJ1ZSwKICAgICAgc2lnbmFsOiB0aGlzLl9zaWduYWwKICAgIH0pOwogICAgdGhpcy5fZXZlbnRCdXMuZGlzcGF0Y2goInNob3dhbm5vdGF0aW9uZWRpdG9ydWkiLCB7CiAgICAgIHNvdXJjZTogdGhpcywKICAgICAgbW9kZQogICAgfSk7CiAgfQogIHNldFByZWZlcmVuY2UobmFtZSwgdmFsdWUpIHsKICAgIHRoaXMuX2V2ZW50QnVzLmRpc3BhdGNoKCJzZXRwcmVmZXJlbmNlIiwgewogICAgICBzb3VyY2U6IHRoaXMsCiAgICAgIG5hbWUsCiAgICAgIHZhbHVlCiAgICB9KTsKICB9CiAgb25TZXRQcmVmZXJlbmNlKHsKICAgIG5hbWUsCiAgICB2YWx1ZQogIH0pIHsKICAgIHN3aXRjaCAobmFtZSkgewogICAgICBjYXNlICJlbmFibGVOZXdBbHRUZXh0V2hlbkFkZGluZ0ltYWdlIjoKICAgICAgICB0aGlzLiNlbmFibGVOZXdBbHRUZXh0V2hlbkFkZGluZ0ltYWdlID0gdmFsdWU7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQogIG9uUGFnZUNoYW5naW5nKHsKICAgIHBhZ2VOdW1iZXIKICB9KSB7CiAgICB0aGlzLiNjdXJyZW50UGFnZUluZGV4ID0gcGFnZU51bWJlciAtIDE7CiAgfQogIGZvY3VzTWFpbkNvbnRhaW5lcigpIHsKICAgIHRoaXMuI2NvbnRhaW5lci5mb2N1cygpOwogIH0KICBmaW5kUGFyZW50KHgsIHkpIHsKICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy4jYWxsTGF5ZXJzLnZhbHVlcygpKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICB4OiBsYXllclgsCiAgICAgICAgeTogbGF5ZXJZLAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodAogICAgICB9ID0gbGF5ZXIuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBpZiAoeCA+PSBsYXllclggJiYgeCA8PSBsYXllclggKyB3aWR0aCAmJiB5ID49IGxheWVyWSAmJiB5IDw9IGxheWVyWSArIGhlaWdodCkgewogICAgICAgIHJldHVybiBsYXllcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGRpc2FibGVVc2VyU2VsZWN0KHZhbHVlID0gZmFsc2UpIHsKICAgIHRoaXMuI3ZpZXdlci5jbGFzc0xpc3QudG9nZ2xlKCJub1VzZXJTZWxlY3QiLCB2YWx1ZSk7CiAgfQogIGFkZFNob3VsZFJlc2NhbGUoZWRpdG9yKSB7CiAgICB0aGlzLiNlZGl0b3JzVG9SZXNjYWxlLmFkZChlZGl0b3IpOwogIH0KICByZW1vdmVTaG91bGRSZXNjYWxlKGVkaXRvcikgewogICAgdGhpcy4jZWRpdG9yc1RvUmVzY2FsZS5kZWxldGUoZWRpdG9yKTsKICB9CiAgb25TY2FsZUNoYW5naW5nKHsKICAgIHNjYWxlCiAgfSkgewogICAgdGhpcy5jb21taXRPclJlbW92ZSgpOwogICAgdGhpcy52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGUgPSBzY2FsZSAqIFBpeGVsc1BlckluY2guUERGX1RPX0NTU19VTklUUzsKICAgIGZvciAoY29uc3QgZWRpdG9yIG9mIHRoaXMuI2VkaXRvcnNUb1Jlc2NhbGUpIHsKICAgICAgZWRpdG9yLm9uU2NhbGVDaGFuZ2luZygpOwogICAgfQogICAgdGhpcy4jY3VycmVudERyYXdpbmdTZXNzaW9uPy5vblNjYWxlQ2hhbmdpbmcoKTsKICB9CiAgb25Sb3RhdGlvbkNoYW5naW5nKHsKICAgIHBhZ2VzUm90YXRpb24KICB9KSB7CiAgICB0aGlzLmNvbW1pdE9yUmVtb3ZlKCk7CiAgICB0aGlzLnZpZXdQYXJhbWV0ZXJzLnJvdGF0aW9uID0gcGFnZXNSb3RhdGlvbjsKICB9CiAgI2dldEFuY2hvckVsZW1lbnRGb3JTZWxlY3Rpb24oewogICAgYW5jaG9yTm9kZQogIH0pIHsKICAgIHJldHVybiBhbmNob3JOb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSA/IGFuY2hvck5vZGUucGFyZW50RWxlbWVudCA6IGFuY2hvck5vZGU7CiAgfQogICNnZXRMYXllckZvclRleHRMYXllcih0ZXh0TGF5ZXIpIHsKICAgIGNvbnN0IHsKICAgICAgY3VycmVudExheWVyCiAgICB9ID0gdGhpczsKICAgIGlmIChjdXJyZW50TGF5ZXIuaGFzVGV4dExheWVyKHRleHRMYXllcikpIHsKICAgICAgcmV0dXJuIGN1cnJlbnRMYXllcjsKICAgIH0KICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy4jYWxsTGF5ZXJzLnZhbHVlcygpKSB7CiAgICAgIGlmIChsYXllci5oYXNUZXh0TGF5ZXIodGV4dExheWVyKSkgewogICAgICAgIHJldHVybiBsYXllcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGhpZ2hsaWdodFNlbGVjdGlvbihtZXRob2RPZkNyZWF0aW9uID0gIiIsIGNvbW1lbnQgPSBmYWxzZSkgewogICAgY29uc3Qgc2VsZWN0aW9uID0gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgewogICAgICBhbmNob3JOb2RlLAogICAgICBhbmNob3JPZmZzZXQsCiAgICAgIGZvY3VzTm9kZSwKICAgICAgZm9jdXNPZmZzZXQKICAgIH0gPSBzZWxlY3Rpb247CiAgICBjb25zdCB0ZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICBjb25zdCBhbmNob3JFbGVtZW50ID0gdGhpcy4jZ2V0QW5jaG9yRWxlbWVudEZvclNlbGVjdGlvbihzZWxlY3Rpb24pOwogICAgY29uc3QgdGV4dExheWVyID0gYW5jaG9yRWxlbWVudC5jbG9zZXN0KCIudGV4dExheWVyIik7CiAgICBjb25zdCBib3hlcyA9IHRoaXMuZ2V0U2VsZWN0aW9uQm94ZXModGV4dExheWVyKTsKICAgIGlmICghYm94ZXMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc2VsZWN0aW9uLmVtcHR5KCk7CiAgICBjb25zdCBsYXllciA9IHRoaXMuI2dldExheWVyRm9yVGV4dExheWVyKHRleHRMYXllcik7CiAgICBjb25zdCBpc05vbmVNb2RlID0gdGhpcy4jbW9kZSA9PT0gQW5ub3RhdGlvbkVkaXRvclR5cGUuTk9ORTsKICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4gewogICAgICBjb25zdCBlZGl0b3IgPSBsYXllcj8uY3JlYXRlQW5kQWRkTmV3RWRpdG9yKHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAKICAgICAgfSwgZmFsc2UsIHsKICAgICAgICBtZXRob2RPZkNyZWF0aW9uLAogICAgICAgIGJveGVzLAogICAgICAgIGFuY2hvck5vZGUsCiAgICAgICAgYW5jaG9yT2Zmc2V0LAogICAgICAgIGZvY3VzTm9kZSwKICAgICAgICBmb2N1c09mZnNldCwKICAgICAgICB0ZXh0CiAgICAgIH0pOwogICAgICBpZiAoaXNOb25lTW9kZSkgewogICAgICAgIHRoaXMuc2hvd0FsbEVkaXRvcnMoImhpZ2hsaWdodCIsIHRydWUsIHRydWUpOwogICAgICB9CiAgICAgIGlmIChjb21tZW50KSB7CiAgICAgICAgZWRpdG9yPy5lZGl0Q29tbWVudCgpOwogICAgICB9CiAgICB9OwogICAgaWYgKGlzTm9uZU1vZGUpIHsKICAgICAgdGhpcy5zd2l0Y2hUb01vZGUoQW5ub3RhdGlvbkVkaXRvclR5cGUuSElHSExJR0hULCBjYWxsYmFjayk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNhbGxiYWNrKCk7CiAgfQogIGNvbW1lbnRTZWxlY3Rpb24obWV0aG9kT2ZDcmVhdGlvbiA9ICIiKSB7CiAgICB0aGlzLmhpZ2hsaWdodFNlbGVjdGlvbihtZXRob2RPZkNyZWF0aW9uLCB0cnVlKTsKICB9CiAgI2Rpc3BsYXlGbG9hdGluZ1Rvb2xiYXIoKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKTsKICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBhbmNob3JFbGVtZW50ID0gdGhpcy4jZ2V0QW5jaG9yRWxlbWVudEZvclNlbGVjdGlvbihzZWxlY3Rpb24pOwogICAgY29uc3QgdGV4dExheWVyID0gYW5jaG9yRWxlbWVudC5jbG9zZXN0KCIudGV4dExheWVyIik7CiAgICBjb25zdCBib3hlcyA9IHRoaXMuZ2V0U2VsZWN0aW9uQm94ZXModGV4dExheWVyKTsKICAgIGlmICghYm94ZXMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jZmxvYXRpbmdUb29sYmFyIHx8PSBuZXcgRmxvYXRpbmdUb29sYmFyKHRoaXMpOwogICAgdGhpcy4jZmxvYXRpbmdUb29sYmFyLnNob3codGV4dExheWVyLCBib3hlcywgdGhpcy5kaXJlY3Rpb24gPT09ICJsdHIiKTsKICB9CiAgZ2V0QW5kUmVtb3ZlRGF0YUZyb21Bbm5vdGF0aW9uU3RvcmFnZShhbm5vdGF0aW9uSWQpIHsKICAgIGlmICghdGhpcy4jYW5ub3RhdGlvblN0b3JhZ2UpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBrZXkgPSBgJHtBbm5vdGF0aW9uRWRpdG9yUHJlZml4fSR7YW5ub3RhdGlvbklkfWA7CiAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IHRoaXMuI2Fubm90YXRpb25TdG9yYWdlLmdldFJhd1ZhbHVlKGtleSk7CiAgICBpZiAoc3RvcmVkVmFsdWUpIHsKICAgICAgdGhpcy4jYW5ub3RhdGlvblN0b3JhZ2UucmVtb3ZlKGtleSk7CiAgICB9CiAgICByZXR1cm4gc3RvcmVkVmFsdWU7CiAgfQogIGFkZFRvQW5ub3RhdGlvblN0b3JhZ2UoZWRpdG9yKSB7CiAgICBpZiAoIWVkaXRvci5pc0VtcHR5KCkgJiYgdGhpcy4jYW5ub3RhdGlvblN0b3JhZ2UgJiYgIXRoaXMuI2Fubm90YXRpb25TdG9yYWdlLmhhcyhlZGl0b3IuaWQpKSB7CiAgICAgIHRoaXMuI2Fubm90YXRpb25TdG9yYWdlLnNldFZhbHVlKGVkaXRvci5pZCwgZWRpdG9yKTsKICAgIH0KICB9CiAgYTExeUFsZXJ0KG1lc3NhZ2VJZCwgYXJncyA9IG51bGwpIHsKICAgIGNvbnN0IHZpZXdlckFsZXJ0ID0gdGhpcy4jdmlld2VyQWxlcnQ7CiAgICBpZiAoIXZpZXdlckFsZXJ0KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZpZXdlckFsZXJ0LnNldEF0dHJpYnV0ZSgiZGF0YS1sMTBuLWlkIiwgbWVzc2FnZUlkKTsKICAgIGlmIChhcmdzKSB7CiAgICAgIHZpZXdlckFsZXJ0LnNldEF0dHJpYnV0ZSgiZGF0YS1sMTBuLWFyZ3MiLCBKU09OLnN0cmluZ2lmeShhcmdzKSk7CiAgICB9IGVsc2UgewogICAgICB2aWV3ZXJBbGVydC5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtbDEwbi1hcmdzIik7CiAgICB9CiAgfQogICNzZWxlY3Rpb25DaGFuZ2UoKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKTsKICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkgewogICAgICBpZiAodGhpcy4jc2VsZWN0ZWRUZXh0Tm9kZSkgewogICAgICAgIHRoaXMuI2Zsb2F0aW5nVG9vbGJhcj8uaGlkZSgpOwogICAgICAgIHRoaXMuI3NlbGVjdGVkVGV4dE5vZGUgPSBudWxsOwogICAgICAgIHRoaXMuI2Rpc3BhdGNoVXBkYXRlU3RhdGVzKHsKICAgICAgICAgIGhhc1NlbGVjdGVkVGV4dDogZmFsc2UKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCB7CiAgICAgIGFuY2hvck5vZGUKICAgIH0gPSBzZWxlY3Rpb247CiAgICBpZiAoYW5jaG9yTm9kZSA9PT0gdGhpcy4jc2VsZWN0ZWRUZXh0Tm9kZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBhbmNob3JFbGVtZW50ID0gdGhpcy4jZ2V0QW5jaG9yRWxlbWVudEZvclNlbGVjdGlvbihzZWxlY3Rpb24pOwogICAgY29uc3QgdGV4dExheWVyID0gYW5jaG9yRWxlbWVudC5jbG9zZXN0KCIudGV4dExheWVyIik7CiAgICBpZiAoIXRleHRMYXllcikgewogICAgICBpZiAodGhpcy4jc2VsZWN0ZWRUZXh0Tm9kZSkgewogICAgICAgIHRoaXMuI2Zsb2F0aW5nVG9vbGJhcj8uaGlkZSgpOwogICAgICAgIHRoaXMuI3NlbGVjdGVkVGV4dE5vZGUgPSBudWxsOwogICAgICAgIHRoaXMuI2Rpc3BhdGNoVXBkYXRlU3RhdGVzKHsKICAgICAgICAgIGhhc1NlbGVjdGVkVGV4dDogZmFsc2UKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNmbG9hdGluZ1Rvb2xiYXI/LmhpZGUoKTsKICAgIHRoaXMuI3NlbGVjdGVkVGV4dE5vZGUgPSBhbmNob3JOb2RlOwogICAgdGhpcy4jZGlzcGF0Y2hVcGRhdGVTdGF0ZXMoewogICAgICBoYXNTZWxlY3RlZFRleHQ6IHRydWUKICAgIH0pOwogICAgaWYgKHRoaXMuI21vZGUgIT09IEFubm90YXRpb25FZGl0b3JUeXBlLkhJR0hMSUdIVCAmJiB0aGlzLiNtb2RlICE9PSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5OT05FKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLiNtb2RlID09PSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5ISUdITElHSFQpIHsKICAgICAgdGhpcy5zaG93QWxsRWRpdG9ycygiaGlnaGxpZ2h0IiwgdHJ1ZSwgdHJ1ZSk7CiAgICB9CiAgICB0aGlzLiNoaWdobGlnaHRXaGVuU2hpZnRVcCA9IHRoaXMuaXNTaGlmdEtleURvd247CiAgICBpZiAoIXRoaXMuaXNTaGlmdEtleURvd24pIHsKICAgICAgY29uc3QgYWN0aXZlTGF5ZXIgPSB0aGlzLiNtb2RlID09PSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5ISUdITElHSFQgPyB0aGlzLiNnZXRMYXllckZvclRleHRMYXllcih0ZXh0TGF5ZXIpIDogbnVsbDsKICAgICAgYWN0aXZlTGF5ZXI/LnRvZ2dsZURyYXdpbmcoKTsKICAgICAgaWYgKHRoaXMuI2lzUG9pbnRlckRvd24pIHsKICAgICAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgICAgICBjb25zdCBzaWduYWwgPSB0aGlzLmNvbWJpbmVkU2lnbmFsKGFjKTsKICAgICAgICBjb25zdCBwb2ludGVydXAgPSBlID0+IHsKICAgICAgICAgIGlmIChlLnR5cGUgPT09ICJwb2ludGVydXAiICYmIGUuYnV0dG9uICE9PSAwKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGFjLmFib3J0KCk7CiAgICAgICAgICBhY3RpdmVMYXllcj8udG9nZ2xlRHJhd2luZyh0cnVlKTsKICAgICAgICAgIGlmIChlLnR5cGUgPT09ICJwb2ludGVydXAiKSB7CiAgICAgICAgICAgIHRoaXMuI29uU2VsZWN0RW5kKCJtYWluX3Rvb2xiYXIiKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCBwb2ludGVydXAsIHsKICAgICAgICAgIHNpZ25hbAogICAgICAgIH0pOwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgcG9pbnRlcnVwLCB7CiAgICAgICAgICBzaWduYWwKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhY3RpdmVMYXllcj8udG9nZ2xlRHJhd2luZyh0cnVlKTsKICAgICAgICB0aGlzLiNvblNlbGVjdEVuZCgibWFpbl90b29sYmFyIik7CiAgICAgIH0KICAgIH0KICB9CiAgI29uU2VsZWN0RW5kKG1ldGhvZE9mQ3JlYXRpb24gPSAiIikgewogICAgaWYgKHRoaXMuI21vZGUgPT09IEFubm90YXRpb25FZGl0b3JUeXBlLkhJR0hMSUdIVCkgewogICAgICB0aGlzLmhpZ2hsaWdodFNlbGVjdGlvbihtZXRob2RPZkNyZWF0aW9uKTsKICAgIH0gZWxzZSBpZiAodGhpcy4jZW5hYmxlSGlnaGxpZ2h0RmxvYXRpbmdCdXR0b24pIHsKICAgICAgdGhpcy4jZGlzcGxheUZsb2F0aW5nVG9vbGJhcigpOwogICAgfQogIH0KICAjYWRkU2VsZWN0aW9uTGlzdGVuZXIoKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLiNzZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSwgewogICAgICBzaWduYWw6IHRoaXMuX3NpZ25hbAogICAgfSk7CiAgfQogICNhZGRGb2N1c01hbmFnZXIoKSB7CiAgICBpZiAodGhpcy4jZm9jdXNNYW5hZ2VyQUMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jZm9jdXNNYW5hZ2VyQUMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICBjb25zdCBzaWduYWwgPSB0aGlzLmNvbWJpbmVkU2lnbmFsKHRoaXMuI2ZvY3VzTWFuYWdlckFDKTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMuZm9jdXMuYmluZCh0aGlzKSwgewogICAgICBzaWduYWwKICAgIH0pOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLmJsdXIuYmluZCh0aGlzKSwgewogICAgICBzaWduYWwKICAgIH0pOwogIH0KICAjcmVtb3ZlRm9jdXNNYW5hZ2VyKCkgewogICAgdGhpcy4jZm9jdXNNYW5hZ2VyQUM/LmFib3J0KCk7CiAgICB0aGlzLiNmb2N1c01hbmFnZXJBQyA9IG51bGw7CiAgfQogIGJsdXIoKSB7CiAgICB0aGlzLmlzU2hpZnRLZXlEb3duID0gZmFsc2U7CiAgICBpZiAodGhpcy4jaGlnaGxpZ2h0V2hlblNoaWZ0VXApIHsKICAgICAgdGhpcy4jaGlnaGxpZ2h0V2hlblNoaWZ0VXAgPSBmYWxzZTsKICAgICAgdGhpcy4jb25TZWxlY3RFbmQoIm1haW5fdG9vbGJhciIpOwogICAgfQogICAgaWYgKCF0aGlzLmhhc1NlbGVjdGlvbikgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCB7CiAgICAgIGFjdGl2ZUVsZW1lbnQKICAgIH0gPSBkb2N1bWVudDsKICAgIGZvciAoY29uc3QgZWRpdG9yIG9mIHRoaXMuI3NlbGVjdGVkRWRpdG9ycykgewogICAgICBpZiAoZWRpdG9yLmRpdi5jb250YWlucyhhY3RpdmVFbGVtZW50KSkgewogICAgICAgIHRoaXMuI2xhc3RBY3RpdmVFbGVtZW50ID0gW2VkaXRvciwgYWN0aXZlRWxlbWVudF07CiAgICAgICAgZWRpdG9yLl9mb2N1c0V2ZW50c0FsbG93ZWQgPSBmYWxzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KICBmb2N1cygpIHsKICAgIGlmICghdGhpcy4jbGFzdEFjdGl2ZUVsZW1lbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgW2xhc3RFZGl0b3IsIGxhc3RBY3RpdmVFbGVtZW50XSA9IHRoaXMuI2xhc3RBY3RpdmVFbGVtZW50OwogICAgdGhpcy4jbGFzdEFjdGl2ZUVsZW1lbnQgPSBudWxsOwogICAgbGFzdEFjdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsICgpID0+IHsKICAgICAgbGFzdEVkaXRvci5fZm9jdXNFdmVudHNBbGxvd2VkID0gdHJ1ZTsKICAgIH0sIHsKICAgICAgb25jZTogdHJ1ZSwKICAgICAgc2lnbmFsOiB0aGlzLl9zaWduYWwKICAgIH0pOwogICAgbGFzdEFjdGl2ZUVsZW1lbnQuZm9jdXMoKTsKICB9CiAgI2FkZEtleWJvYXJkTWFuYWdlcigpIHsKICAgIGlmICh0aGlzLiNrZXlib2FyZE1hbmFnZXJBQykgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNrZXlib2FyZE1hbmFnZXJBQyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuY29tYmluZWRTaWduYWwodGhpcy4ja2V5Ym9hcmRNYW5hZ2VyQUMpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmtleWRvd24uYmluZCh0aGlzKSwgewogICAgICBzaWduYWwKICAgIH0pOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgdGhpcy5rZXl1cC5iaW5kKHRoaXMpLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgfQogICNyZW1vdmVLZXlib2FyZE1hbmFnZXIoKSB7CiAgICB0aGlzLiNrZXlib2FyZE1hbmFnZXJBQz8uYWJvcnQoKTsKICAgIHRoaXMuI2tleWJvYXJkTWFuYWdlckFDID0gbnVsbDsKICB9CiAgI2FkZENvcHlQYXN0ZUxpc3RlbmVycygpIHsKICAgIGlmICh0aGlzLiNjb3B5UGFzdGVBQykgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNjb3B5UGFzdGVBQyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuY29tYmluZWRTaWduYWwodGhpcy4jY29weVBhc3RlQUMpOwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsIHRoaXMuY29weS5iaW5kKHRoaXMpLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjdXQiLCB0aGlzLmN1dC5iaW5kKHRoaXMpLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIHRoaXMucGFzdGUuYmluZCh0aGlzKSwgewogICAgICBzaWduYWwKICAgIH0pOwogIH0KICAjcmVtb3ZlQ29weVBhc3RlTGlzdGVuZXJzKCkgewogICAgdGhpcy4jY29weVBhc3RlQUM/LmFib3J0KCk7CiAgICB0aGlzLiNjb3B5UGFzdGVBQyA9IG51bGw7CiAgfQogICNhZGREcmFnQW5kRHJvcExpc3RlbmVycygpIHsKICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX3NpZ25hbDsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIiwgdGhpcy5kcmFnT3Zlci5iaW5kKHRoaXMpLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgdGhpcy5kcm9wLmJpbmQodGhpcyksIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICB9CiAgYWRkRWRpdExpc3RlbmVycygpIHsKICAgIHRoaXMuI2FkZEtleWJvYXJkTWFuYWdlcigpOwogICAgdGhpcy5zZXRFZGl0aW5nU3RhdGUodHJ1ZSk7CiAgfQogIHJlbW92ZUVkaXRMaXN0ZW5lcnMoKSB7CiAgICB0aGlzLiNyZW1vdmVLZXlib2FyZE1hbmFnZXIoKTsKICAgIHRoaXMuc2V0RWRpdGluZ1N0YXRlKGZhbHNlKTsKICB9CiAgZHJhZ092ZXIoZXZlbnQpIHsKICAgIGZvciAoY29uc3QgewogICAgICB0eXBlCiAgICB9IG9mIGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtcykgewogICAgICBmb3IgKGNvbnN0IGVkaXRvclR5cGUgb2YgdGhpcy4jZWRpdG9yVHlwZXMpIHsKICAgICAgICBpZiAoZWRpdG9yVHlwZS5pc0hhbmRsaW5nTWltZUZvclBhc3RpbmcodHlwZSkpIHsKICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOwogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgZHJvcChldmVudCkgewogICAgZm9yIChjb25zdCBpdGVtIG9mIGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtcykgewogICAgICBmb3IgKGNvbnN0IGVkaXRvclR5cGUgb2YgdGhpcy4jZWRpdG9yVHlwZXMpIHsKICAgICAgICBpZiAoZWRpdG9yVHlwZS5pc0hhbmRsaW5nTWltZUZvclBhc3RpbmcoaXRlbS50eXBlKSkgewogICAgICAgICAgZWRpdG9yVHlwZS5wYXN0ZShpdGVtLCB0aGlzLmN1cnJlbnRMYXllcik7CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBjb3B5KGV2ZW50KSB7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgdGhpcy4jYWN0aXZlRWRpdG9yPy5jb21taXRPclJlbW92ZSgpOwogICAgaWYgKCF0aGlzLmhhc1NlbGVjdGlvbikgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBlZGl0b3JzID0gW107CiAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiB0aGlzLiNzZWxlY3RlZEVkaXRvcnMpIHsKICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGVkaXRvci5zZXJpYWxpemUodHJ1ZSk7CiAgICAgIGlmIChzZXJpYWxpemVkKSB7CiAgICAgICAgZWRpdG9ycy5wdXNoKHNlcmlhbGl6ZWQpOwogICAgICB9CiAgICB9CiAgICBpZiAoZWRpdG9ycy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZXZlbnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJhcHBsaWNhdGlvbi9wZGZqcyIsIEpTT04uc3RyaW5naWZ5KGVkaXRvcnMpKTsKICB9CiAgY3V0KGV2ZW50KSB7CiAgICB0aGlzLmNvcHkoZXZlbnQpOwogICAgdGhpcy5kZWxldGUoKTsKICB9CiAgYXN5bmMgcGFzdGUoZXZlbnQpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCB7CiAgICAgIGNsaXBib2FyZERhdGEKICAgIH0gPSBldmVudDsKICAgIGZvciAoY29uc3QgaXRlbSBvZiBjbGlwYm9hcmREYXRhLml0ZW1zKSB7CiAgICAgIGZvciAoY29uc3QgZWRpdG9yVHlwZSBvZiB0aGlzLiNlZGl0b3JUeXBlcykgewogICAgICAgIGlmIChlZGl0b3JUeXBlLmlzSGFuZGxpbmdNaW1lRm9yUGFzdGluZyhpdGVtLnR5cGUpKSB7CiAgICAgICAgICBlZGl0b3JUeXBlLnBhc3RlKGl0ZW0sIHRoaXMuY3VycmVudExheWVyKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGxldCBkYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJhcHBsaWNhdGlvbi9wZGZqcyIpOwogICAgaWYgKCFkYXRhKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRyeSB7CiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOwogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgd2FybihgcGFzdGU6ICIke2V4Lm1lc3NhZ2V9Ii5gKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMudW5zZWxlY3RBbGwoKTsKICAgIGNvbnN0IGxheWVyID0gdGhpcy5jdXJyZW50TGF5ZXI7CiAgICB0cnkgewogICAgICBjb25zdCBuZXdFZGl0b3JzID0gW107CiAgICAgIGZvciAoY29uc3QgZWRpdG9yIG9mIGRhdGEpIHsKICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZWRFZGl0b3IgPSBhd2FpdCBsYXllci5kZXNlcmlhbGl6ZShlZGl0b3IpOwogICAgICAgIGlmICghZGVzZXJpYWxpemVkRWRpdG9yKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIG5ld0VkaXRvcnMucHVzaChkZXNlcmlhbGl6ZWRFZGl0b3IpOwogICAgICB9CiAgICAgIGNvbnN0IGNtZCA9ICgpID0+IHsKICAgICAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiBuZXdFZGl0b3JzKSB7CiAgICAgICAgICB0aGlzLiNhZGRFZGl0b3JUb0xheWVyKGVkaXRvcik7CiAgICAgICAgfQogICAgICAgIHRoaXMuI3NlbGVjdEVkaXRvcnMobmV3RWRpdG9ycyk7CiAgICAgIH07CiAgICAgIGNvbnN0IHVuZG8gPSAoKSA9PiB7CiAgICAgICAgZm9yIChjb25zdCBlZGl0b3Igb2YgbmV3RWRpdG9ycykgewogICAgICAgICAgZWRpdG9yLnJlbW92ZSgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgdGhpcy5hZGRDb21tYW5kcyh7CiAgICAgICAgY21kLAogICAgICAgIHVuZG8sCiAgICAgICAgbXVzdEV4ZWM6IHRydWUKICAgICAgfSk7CiAgICB9IGNhdGNoIChleCkgewogICAgICB3YXJuKGBwYXN0ZTogIiR7ZXgubWVzc2FnZX0iLmApOwogICAgfQogIH0KICBrZXlkb3duKGV2ZW50KSB7CiAgICBpZiAoIXRoaXMuaXNTaGlmdEtleURvd24gJiYgZXZlbnQua2V5ID09PSAiU2hpZnQiKSB7CiAgICAgIHRoaXMuaXNTaGlmdEtleURvd24gPSB0cnVlOwogICAgfQogICAgaWYgKHRoaXMuI21vZGUgIT09IEFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUgJiYgIXRoaXMuaXNFZGl0b3JIYW5kbGluZ0tleWJvYXJkKSB7CiAgICAgIEFubm90YXRpb25FZGl0b3JVSU1hbmFnZXIuX2tleWJvYXJkTWFuYWdlci5leGVjKHRoaXMsIGV2ZW50KTsKICAgIH0KICB9CiAga2V5dXAoZXZlbnQpIHsKICAgIGlmICh0aGlzLmlzU2hpZnRLZXlEb3duICYmIGV2ZW50LmtleSA9PT0gIlNoaWZ0IikgewogICAgICB0aGlzLmlzU2hpZnRLZXlEb3duID0gZmFsc2U7CiAgICAgIGlmICh0aGlzLiNoaWdobGlnaHRXaGVuU2hpZnRVcCkgewogICAgICAgIHRoaXMuI2hpZ2hsaWdodFdoZW5TaGlmdFVwID0gZmFsc2U7CiAgICAgICAgdGhpcy4jb25TZWxlY3RFbmQoIm1haW5fdG9vbGJhciIpOwogICAgICB9CiAgICB9CiAgfQogIG9uRWRpdGluZ0FjdGlvbih7CiAgICBuYW1lCiAgfSkgewogICAgc3dpdGNoIChuYW1lKSB7CiAgICAgIGNhc2UgInVuZG8iOgogICAgICBjYXNlICJyZWRvIjoKICAgICAgY2FzZSAiZGVsZXRlIjoKICAgICAgY2FzZSAic2VsZWN0QWxsIjoKICAgICAgICB0aGlzW25hbWVdKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImhpZ2hsaWdodFNlbGVjdGlvbiI6CiAgICAgICAgdGhpcy5oaWdobGlnaHRTZWxlY3Rpb24oImNvbnRleHRfbWVudSIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJjb21tZW50U2VsZWN0aW9uIjoKICAgICAgICB0aGlzLmNvbW1lbnRTZWxlY3Rpb24oImNvbnRleHRfbWVudSIpOwogICAgICAgIGJyZWFrOwogICAgfQogIH0KICAjZGlzcGF0Y2hVcGRhdGVTdGF0ZXMoZGV0YWlscykgewogICAgY29uc3QgaGFzQ2hhbmdlZCA9IE9iamVjdC5lbnRyaWVzKGRldGFpbHMpLnNvbWUoKFtrZXksIHZhbHVlXSkgPT4gdGhpcy4jcHJldmlvdXNTdGF0ZXNba2V5XSAhPT0gdmFsdWUpOwogICAgaWYgKGhhc0NoYW5nZWQpIHsKICAgICAgdGhpcy5fZXZlbnRCdXMuZGlzcGF0Y2goImFubm90YXRpb25lZGl0b3JzdGF0ZXNjaGFuZ2VkIiwgewogICAgICAgIHNvdXJjZTogdGhpcywKICAgICAgICBkZXRhaWxzOiBPYmplY3QuYXNzaWduKHRoaXMuI3ByZXZpb3VzU3RhdGVzLCBkZXRhaWxzKQogICAgICB9KTsKICAgICAgaWYgKHRoaXMuI21vZGUgPT09IEFubm90YXRpb25FZGl0b3JUeXBlLkhJR0hMSUdIVCAmJiBkZXRhaWxzLmhhc1NlbGVjdGVkRWRpdG9yID09PSBmYWxzZSkgewogICAgICAgIHRoaXMuI2Rpc3BhdGNoVXBkYXRlVUkoW1tBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5ISUdITElHSFRfRlJFRSwgdHJ1ZV1dKTsKICAgICAgfQogICAgfQogIH0KICAjZGlzcGF0Y2hVcGRhdGVVSShkZXRhaWxzKSB7CiAgICB0aGlzLl9ldmVudEJ1cy5kaXNwYXRjaCgiYW5ub3RhdGlvbmVkaXRvcnBhcmFtc2NoYW5nZWQiLCB7CiAgICAgIHNvdXJjZTogdGhpcywKICAgICAgZGV0YWlscwogICAgfSk7CiAgfQogIHNldEVkaXRpbmdTdGF0ZShpc0VkaXRpbmcpIHsKICAgIGlmIChpc0VkaXRpbmcpIHsKICAgICAgdGhpcy4jYWRkRm9jdXNNYW5hZ2VyKCk7CiAgICAgIHRoaXMuI2FkZENvcHlQYXN0ZUxpc3RlbmVycygpOwogICAgICB0aGlzLiNkaXNwYXRjaFVwZGF0ZVN0YXRlcyh7CiAgICAgICAgaXNFZGl0aW5nOiB0aGlzLiNtb2RlICE9PSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5OT05FLAogICAgICAgIGlzRW1wdHk6IHRoaXMuI2lzRW1wdHkoKSwKICAgICAgICBoYXNTb21ldGhpbmdUb1VuZG86IHRoaXMuI2NvbW1hbmRNYW5hZ2VyLmhhc1NvbWV0aGluZ1RvVW5kbygpLAogICAgICAgIGhhc1NvbWV0aGluZ1RvUmVkbzogdGhpcy4jY29tbWFuZE1hbmFnZXIuaGFzU29tZXRoaW5nVG9SZWRvKCksCiAgICAgICAgaGFzU2VsZWN0ZWRFZGl0b3I6IGZhbHNlCiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNNYW5hZ2VyKCk7CiAgICAgIHRoaXMuI3JlbW92ZUNvcHlQYXN0ZUxpc3RlbmVycygpOwogICAgICB0aGlzLiNkaXNwYXRjaFVwZGF0ZVN0YXRlcyh7CiAgICAgICAgaXNFZGl0aW5nOiBmYWxzZQogICAgICB9KTsKICAgICAgdGhpcy5kaXNhYmxlVXNlclNlbGVjdChmYWxzZSk7CiAgICB9CiAgfQogIHJlZ2lzdGVyRWRpdG9yVHlwZXModHlwZXMpIHsKICAgIGlmICh0aGlzLiNlZGl0b3JUeXBlcykgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNlZGl0b3JUeXBlcyA9IHR5cGVzOwogICAgZm9yIChjb25zdCBlZGl0b3JUeXBlIG9mIHRoaXMuI2VkaXRvclR5cGVzKSB7CiAgICAgIHRoaXMuI2Rpc3BhdGNoVXBkYXRlVUkoZWRpdG9yVHlwZS5kZWZhdWx0UHJvcGVydGllc1RvVXBkYXRlKTsKICAgIH0KICB9CiAgZ2V0SWQoKSB7CiAgICByZXR1cm4gdGhpcy4jaWRNYW5hZ2VyLmlkOwogIH0KICBnZXQgY3VycmVudExheWVyKCkgewogICAgcmV0dXJuIHRoaXMuI2FsbExheWVycy5nZXQodGhpcy4jY3VycmVudFBhZ2VJbmRleCk7CiAgfQogIGdldExheWVyKHBhZ2VJbmRleCkgewogICAgcmV0dXJuIHRoaXMuI2FsbExheWVycy5nZXQocGFnZUluZGV4KTsKICB9CiAgZ2V0IGN1cnJlbnRQYWdlSW5kZXgoKSB7CiAgICByZXR1cm4gdGhpcy4jY3VycmVudFBhZ2VJbmRleDsKICB9CiAgYWRkTGF5ZXIobGF5ZXIpIHsKICAgIHRoaXMuI2FsbExheWVycy5zZXQobGF5ZXIucGFnZUluZGV4LCBsYXllcik7CiAgICBpZiAodGhpcy4jaXNFbmFibGVkKSB7CiAgICAgIGxheWVyLmVuYWJsZSgpOwogICAgfSBlbHNlIHsKICAgICAgbGF5ZXIuZGlzYWJsZSgpOwogICAgfQogIH0KICByZW1vdmVMYXllcihsYXllcikgewogICAgdGhpcy4jYWxsTGF5ZXJzLmRlbGV0ZShsYXllci5wYWdlSW5kZXgpOwogIH0KICBhc3luYyB1cGRhdGVNb2RlKG1vZGUsIGVkaXRJZCA9IG51bGwsIGlzRnJvbUtleWJvYXJkID0gZmFsc2UsIG11c3RFbnRlckluRWRpdE1vZGUgPSBmYWxzZSwgZWRpdENvbW1lbnQgPSBmYWxzZSkgewogICAgaWYgKHRoaXMuI21vZGUgPT09IG1vZGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuI3VwZGF0ZU1vZGVDYXBhYmlsaXR5KSB7CiAgICAgIGF3YWl0IHRoaXMuI3VwZGF0ZU1vZGVDYXBhYmlsaXR5LnByb21pc2U7CiAgICAgIGlmICghdGhpcy4jdXBkYXRlTW9kZUNhcGFiaWxpdHkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIHRoaXMuI3VwZGF0ZU1vZGVDYXBhYmlsaXR5ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgICB0aGlzLiNjdXJyZW50RHJhd2luZ1Nlc3Npb24/LmNvbW1pdE9yUmVtb3ZlKCk7CiAgICBpZiAodGhpcy4jbW9kZSA9PT0gQW5ub3RhdGlvbkVkaXRvclR5cGUuUE9QVVApIHsKICAgICAgdGhpcy4jY29tbWVudE1hbmFnZXI/LmhpZGVTaWRlYmFyKCk7CiAgICB9CiAgICB0aGlzLiNjb21tZW50TWFuYWdlcj8uZGVzdHJveVBvcHVwKCk7CiAgICB0aGlzLiNtb2RlID0gbW9kZTsKICAgIGlmIChtb2RlID09PSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5OT05FKSB7CiAgICAgIHRoaXMuc2V0RWRpdGluZ1N0YXRlKGZhbHNlKTsKICAgICAgdGhpcy4jZGlzYWJsZUFsbCgpOwogICAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiB0aGlzLiNhbGxFZGl0b3JzLnZhbHVlcygpKSB7CiAgICAgICAgZWRpdG9yLmhpZGVTdGFuZGFsb25lQ29tbWVudEJ1dHRvbigpOwogICAgICB9CiAgICAgIHRoaXMuX2VkaXRvclVuZG9CYXI/LmhpZGUoKTsKICAgICAgdGhpcy50b2dnbGVDb21tZW50KG51bGwpOwogICAgICB0aGlzLiN1cGRhdGVNb2RlQ2FwYWJpbGl0eS5yZXNvbHZlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGZvciAoY29uc3QgZWRpdG9yIG9mIHRoaXMuI2FsbEVkaXRvcnMudmFsdWVzKCkpIHsKICAgICAgZWRpdG9yLmFkZFN0YW5kYWxvbmVDb21tZW50QnV0dG9uKCk7CiAgICB9CiAgICBpZiAobW9kZSA9PT0gQW5ub3RhdGlvbkVkaXRvclR5cGUuU0lHTkFUVVJFKSB7CiAgICAgIGF3YWl0IHRoaXMuI3NpZ25hdHVyZU1hbmFnZXI/LmxvYWRTaWduYXR1cmVzKCk7CiAgICB9CiAgICB0aGlzLnNldEVkaXRpbmdTdGF0ZSh0cnVlKTsKICAgIGF3YWl0IHRoaXMuI2VuYWJsZUFsbCgpOwogICAgdGhpcy51bnNlbGVjdEFsbCgpOwogICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLiNhbGxMYXllcnMudmFsdWVzKCkpIHsKICAgICAgbGF5ZXIudXBkYXRlTW9kZShtb2RlKTsKICAgIH0KICAgIGlmIChtb2RlID09PSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5QT1BVUCkgewogICAgICB0aGlzLiNhbGxFZGl0YWJsZUFubm90YXRpb25zIHx8PSBhd2FpdCB0aGlzLiNwZGZEb2N1bWVudC5nZXRBbm5vdGF0aW9uc0J5VHlwZShuZXcgU2V0KHRoaXMuI2VkaXRvclR5cGVzLm1hcChlZGl0b3JDbGFzcyA9PiBlZGl0b3JDbGFzcy5fZWRpdG9yVHlwZSkpKTsKICAgICAgY29uc3QgZWxlbWVudElkcyA9IG5ldyBTZXQoKTsKICAgICAgY29uc3QgYWxsQ29tbWVudHMgPSBbXTsKICAgICAgZm9yIChjb25zdCBlZGl0b3Igb2YgdGhpcy4jYWxsRWRpdG9ycy52YWx1ZXMoKSkgewogICAgICAgIGNvbnN0IHsKICAgICAgICAgIGFubm90YXRpb25FbGVtZW50SWQsCiAgICAgICAgICBoYXNDb21tZW50LAogICAgICAgICAgZGVsZXRlZAogICAgICAgIH0gPSBlZGl0b3I7CiAgICAgICAgaWYgKGFubm90YXRpb25FbGVtZW50SWQpIHsKICAgICAgICAgIGVsZW1lbnRJZHMuYWRkKGFubm90YXRpb25FbGVtZW50SWQpOwogICAgICAgIH0KICAgICAgICBpZiAoaGFzQ29tbWVudCAmJiAhZGVsZXRlZCkgewogICAgICAgICAgYWxsQ29tbWVudHMucHVzaChlZGl0b3IuZ2V0RGF0YSgpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBhbm5vdGF0aW9uIG9mIHRoaXMuI2FsbEVkaXRhYmxlQW5ub3RhdGlvbnMpIHsKICAgICAgICBjb25zdCB7CiAgICAgICAgICBpZCwKICAgICAgICAgIHBvcHVwUmVmLAogICAgICAgICAgY29udGVudHNPYmoKICAgICAgICB9ID0gYW5ub3RhdGlvbjsKICAgICAgICBpZiAocG9wdXBSZWYgJiYgY29udGVudHNPYmo/LnN0ciAmJiAhZWxlbWVudElkcy5oYXMoaWQpICYmICF0aGlzLiNkZWxldGVkQW5ub3RhdGlvbnNFbGVtZW50SWRzLmhhcyhpZCkpIHsKICAgICAgICAgIGFsbENvbW1lbnRzLnB1c2goYW5ub3RhdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuI2NvbW1lbnRNYW5hZ2VyPy5zaG93U2lkZWJhcihhbGxDb21tZW50cyk7CiAgICB9CiAgICBpZiAoIWVkaXRJZCkgewogICAgICBpZiAoaXNGcm9tS2V5Ym9hcmQpIHsKICAgICAgICB0aGlzLmFkZE5ld0VkaXRvckZyb21LZXlib2FyZCgpOwogICAgICB9CiAgICAgIHRoaXMuI3VwZGF0ZU1vZGVDYXBhYmlsaXR5LnJlc29sdmUoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChjb25zdCBlZGl0b3Igb2YgdGhpcy4jYWxsRWRpdG9ycy52YWx1ZXMoKSkgewogICAgICBpZiAoZWRpdG9yLnVpZCA9PT0gZWRpdElkKSB7CiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZChlZGl0b3IpOwogICAgICAgIGlmIChlZGl0Q29tbWVudCkgewogICAgICAgICAgZWRpdG9yLmVkaXRDb21tZW50KCk7CiAgICAgICAgfSBlbHNlIGlmIChtdXN0RW50ZXJJbkVkaXRNb2RlKSB7CiAgICAgICAgICBlZGl0b3IuZW50ZXJJbkVkaXRNb2RlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBlZGl0b3IudW5zZWxlY3QoKTsKICAgICAgfQogICAgfQogICAgdGhpcy4jdXBkYXRlTW9kZUNhcGFiaWxpdHkucmVzb2x2ZSgpOwogIH0KICBhZGROZXdFZGl0b3JGcm9tS2V5Ym9hcmQoKSB7CiAgICBpZiAodGhpcy5jdXJyZW50TGF5ZXIuY2FuQ3JlYXRlTmV3RW1wdHlFZGl0b3IoKSkgewogICAgICB0aGlzLmN1cnJlbnRMYXllci5hZGROZXdFZGl0b3IoKTsKICAgIH0KICB9CiAgdXBkYXRlVG9vbGJhcihvcHRpb25zKSB7CiAgICBpZiAob3B0aW9ucy5tb2RlID09PSB0aGlzLiNtb2RlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuX2V2ZW50QnVzLmRpc3BhdGNoKCJzd2l0Y2hhbm5vdGF0aW9uZWRpdG9ybW9kZSIsIHsKICAgICAgc291cmNlOiB0aGlzLAogICAgICAuLi5vcHRpb25zCiAgICB9KTsKICB9CiAgdXBkYXRlUGFyYW1zKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAoIXRoaXMuI2VkaXRvclR5cGVzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN3aXRjaCAodHlwZSkgewogICAgICBjYXNlIEFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkNSRUFURToKICAgICAgICB0aGlzLmN1cnJlbnRMYXllci5hZGROZXdFZGl0b3IodmFsdWUpOwogICAgICAgIHJldHVybjsKICAgICAgY2FzZSBBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5ISUdITElHSFRfU0hPV19BTEw6CiAgICAgICAgdGhpcy5fZXZlbnRCdXMuZGlzcGF0Y2goInJlcG9ydHRlbGVtZXRyeSIsIHsKICAgICAgICAgIHNvdXJjZTogdGhpcywKICAgICAgICAgIGRldGFpbHM6IHsKICAgICAgICAgICAgdHlwZTogImVkaXRpbmciLAogICAgICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAgdHlwZTogImhpZ2hsaWdodCIsCiAgICAgICAgICAgICAgYWN0aW9uOiAidG9nZ2xlX3Zpc2liaWxpdHkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAodGhpcy4jc2hvd0FsbFN0YXRlcyB8fD0gbmV3IE1hcCgpKS5zZXQodHlwZSwgdmFsdWUpOwogICAgICAgIHRoaXMuc2hvd0FsbEVkaXRvcnMoImhpZ2hsaWdodCIsIHZhbHVlKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIGlmICh0aGlzLmhhc1NlbGVjdGlvbikgewogICAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiB0aGlzLiNzZWxlY3RlZEVkaXRvcnMpIHsKICAgICAgICBlZGl0b3IudXBkYXRlUGFyYW1zKHR5cGUsIHZhbHVlKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChjb25zdCBlZGl0b3JUeXBlIG9mIHRoaXMuI2VkaXRvclR5cGVzKSB7CiAgICAgICAgZWRpdG9yVHlwZS51cGRhdGVEZWZhdWx0UGFyYW1zKHR5cGUsIHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KICBzaG93QWxsRWRpdG9ycyh0eXBlLCB2aXNpYmxlLCB1cGRhdGVCdXR0b24gPSBmYWxzZSkgewogICAgZm9yIChjb25zdCBlZGl0b3Igb2YgdGhpcy4jYWxsRWRpdG9ycy52YWx1ZXMoKSkgewogICAgICBpZiAoZWRpdG9yLmVkaXRvclR5cGUgPT09IHR5cGUpIHsKICAgICAgICBlZGl0b3Iuc2hvdyh2aXNpYmxlKTsKICAgICAgfQogICAgfQogICAgY29uc3Qgc3RhdGUgPSB0aGlzLiNzaG93QWxsU3RhdGVzPy5nZXQoQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSElHSExJR0hUX1NIT1dfQUxMKSA/PyB0cnVlOwogICAgaWYgKHN0YXRlICE9PSB2aXNpYmxlKSB7CiAgICAgIHRoaXMuI2Rpc3BhdGNoVXBkYXRlVUkoW1tBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5ISUdITElHSFRfU0hPV19BTEwsIHZpc2libGVdXSk7CiAgICB9CiAgfQogIGVuYWJsZVdhaXRpbmcobXVzdFdhaXQgPSBmYWxzZSkgewogICAgaWYgKHRoaXMuI2lzV2FpdGluZyA9PT0gbXVzdFdhaXQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jaXNXYWl0aW5nID0gbXVzdFdhaXQ7CiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMuI2FsbExheWVycy52YWx1ZXMoKSkgewogICAgICBpZiAobXVzdFdhaXQpIHsKICAgICAgICBsYXllci5kaXNhYmxlQ2xpY2soKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsYXllci5lbmFibGVDbGljaygpOwogICAgICB9CiAgICAgIGxheWVyLmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJ3YWl0aW5nIiwgbXVzdFdhaXQpOwogICAgfQogIH0KICBhc3luYyAjZW5hYmxlQWxsKCkgewogICAgaWYgKCF0aGlzLiNpc0VuYWJsZWQpIHsKICAgICAgdGhpcy4jaXNFbmFibGVkID0gdHJ1ZTsKICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTsKICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLiNhbGxMYXllcnMudmFsdWVzKCkpIHsKICAgICAgICBwcm9taXNlcy5wdXNoKGxheWVyLmVuYWJsZSgpKTsKICAgICAgfQogICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7CiAgICAgIGZvciAoY29uc3QgZWRpdG9yIG9mIHRoaXMuI2FsbEVkaXRvcnMudmFsdWVzKCkpIHsKICAgICAgICBlZGl0b3IuZW5hYmxlKCk7CiAgICAgIH0KICAgIH0KICB9CiAgI2Rpc2FibGVBbGwoKSB7CiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7CiAgICBpZiAodGhpcy4jaXNFbmFibGVkKSB7CiAgICAgIHRoaXMuI2lzRW5hYmxlZCA9IGZhbHNlOwogICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMuI2FsbExheWVycy52YWx1ZXMoKSkgewogICAgICAgIGxheWVyLmRpc2FibGUoKTsKICAgICAgfQogICAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiB0aGlzLiNhbGxFZGl0b3JzLnZhbHVlcygpKSB7CiAgICAgICAgZWRpdG9yLmRpc2FibGUoKTsKICAgICAgfQogICAgfQogIH0KICAqZ2V0RWRpdG9ycyhwYWdlSW5kZXgpIHsKICAgIGZvciAoY29uc3QgZWRpdG9yIG9mIHRoaXMuI2FsbEVkaXRvcnMudmFsdWVzKCkpIHsKICAgICAgaWYgKGVkaXRvci5wYWdlSW5kZXggPT09IHBhZ2VJbmRleCkgewogICAgICAgIHlpZWxkIGVkaXRvcjsKICAgICAgfQogICAgfQogIH0KICBnZXRFZGl0b3IoaWQpIHsKICAgIHJldHVybiB0aGlzLiNhbGxFZGl0b3JzLmdldChpZCk7CiAgfQogIGFkZEVkaXRvcihlZGl0b3IpIHsKICAgIHRoaXMuI2FsbEVkaXRvcnMuc2V0KGVkaXRvci5pZCwgZWRpdG9yKTsKICB9CiAgcmVtb3ZlRWRpdG9yKGVkaXRvcikgewogICAgaWYgKGVkaXRvci5kaXYuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHsKICAgICAgaWYgKHRoaXMuI2ZvY3VzTWFpbkNvbnRhaW5lclRpbWVvdXRJZCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLiNmb2N1c01haW5Db250YWluZXJUaW1lb3V0SWQpOwogICAgICB9CiAgICAgIHRoaXMuI2ZvY3VzTWFpbkNvbnRhaW5lclRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHRoaXMuZm9jdXNNYWluQ29udGFpbmVyKCk7CiAgICAgICAgdGhpcy4jZm9jdXNNYWluQ29udGFpbmVyVGltZW91dElkID0gbnVsbDsKICAgICAgfSwgMCk7CiAgICB9CiAgICB0aGlzLiNhbGxFZGl0b3JzLmRlbGV0ZShlZGl0b3IuaWQpOwogICAgaWYgKGVkaXRvci5hbm5vdGF0aW9uRWxlbWVudElkKSB7CiAgICAgIHRoaXMuI21pc3NpbmdDYW52YXNlcz8uZGVsZXRlKGVkaXRvci5hbm5vdGF0aW9uRWxlbWVudElkKTsKICAgIH0KICAgIHRoaXMudW5zZWxlY3QoZWRpdG9yKTsKICAgIGlmICghZWRpdG9yLmFubm90YXRpb25FbGVtZW50SWQgfHwgIXRoaXMuI2RlbGV0ZWRBbm5vdGF0aW9uc0VsZW1lbnRJZHMuaGFzKGVkaXRvci5hbm5vdGF0aW9uRWxlbWVudElkKSkgewogICAgICB0aGlzLiNhbm5vdGF0aW9uU3RvcmFnZT8ucmVtb3ZlKGVkaXRvci5pZCk7CiAgICB9CiAgfQogIGFkZERlbGV0ZWRBbm5vdGF0aW9uRWxlbWVudChlZGl0b3IpIHsKICAgIHRoaXMuI2RlbGV0ZWRBbm5vdGF0aW9uc0VsZW1lbnRJZHMuYWRkKGVkaXRvci5hbm5vdGF0aW9uRWxlbWVudElkKTsKICAgIHRoaXMuYWRkQ2hhbmdlZEV4aXN0aW5nQW5ub3RhdGlvbihlZGl0b3IpOwogICAgZWRpdG9yLmRlbGV0ZWQgPSB0cnVlOwogIH0KICBpc0RlbGV0ZWRBbm5vdGF0aW9uRWxlbWVudChhbm5vdGF0aW9uRWxlbWVudElkKSB7CiAgICByZXR1cm4gdGhpcy4jZGVsZXRlZEFubm90YXRpb25zRWxlbWVudElkcy5oYXMoYW5ub3RhdGlvbkVsZW1lbnRJZCk7CiAgfQogIHJlbW92ZURlbGV0ZWRBbm5vdGF0aW9uRWxlbWVudChlZGl0b3IpIHsKICAgIHRoaXMuI2RlbGV0ZWRBbm5vdGF0aW9uc0VsZW1lbnRJZHMuZGVsZXRlKGVkaXRvci5hbm5vdGF0aW9uRWxlbWVudElkKTsKICAgIHRoaXMucmVtb3ZlQ2hhbmdlZEV4aXN0aW5nQW5ub3RhdGlvbihlZGl0b3IpOwogICAgZWRpdG9yLmRlbGV0ZWQgPSBmYWxzZTsKICB9CiAgI2FkZEVkaXRvclRvTGF5ZXIoZWRpdG9yKSB7CiAgICBjb25zdCBsYXllciA9IHRoaXMuI2FsbExheWVycy5nZXQoZWRpdG9yLnBhZ2VJbmRleCk7CiAgICBpZiAobGF5ZXIpIHsKICAgICAgbGF5ZXIuYWRkT3JSZWJ1aWxkKGVkaXRvcik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmFkZEVkaXRvcihlZGl0b3IpOwogICAgICB0aGlzLmFkZFRvQW5ub3RhdGlvblN0b3JhZ2UoZWRpdG9yKTsKICAgIH0KICB9CiAgc2V0QWN0aXZlRWRpdG9yKGVkaXRvcikgewogICAgaWYgKHRoaXMuI2FjdGl2ZUVkaXRvciA9PT0gZWRpdG9yKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI2FjdGl2ZUVkaXRvciA9IGVkaXRvcjsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgdGhpcy4jZGlzcGF0Y2hVcGRhdGVVSShlZGl0b3IucHJvcGVydGllc1RvVXBkYXRlKTsKICAgIH0KICB9CiAgZ2V0ICNsYXN0U2VsZWN0ZWRFZGl0b3IoKSB7CiAgICBsZXQgZWQgPSBudWxsOwogICAgZm9yIChlZCBvZiB0aGlzLiNzZWxlY3RlZEVkaXRvcnMpIHt9CiAgICByZXR1cm4gZWQ7CiAgfQogIHVwZGF0ZVVJKGVkaXRvcikgewogICAgaWYgKHRoaXMuI2xhc3RTZWxlY3RlZEVkaXRvciA9PT0gZWRpdG9yKSB7CiAgICAgIHRoaXMuI2Rpc3BhdGNoVXBkYXRlVUkoZWRpdG9yLnByb3BlcnRpZXNUb1VwZGF0ZSk7CiAgICB9CiAgfQogIHVwZGF0ZVVJRm9yRGVmYXVsdFByb3BlcnRpZXMoZWRpdG9yVHlwZSkgewogICAgdGhpcy4jZGlzcGF0Y2hVcGRhdGVVSShlZGl0b3JUeXBlLmRlZmF1bHRQcm9wZXJ0aWVzVG9VcGRhdGUpOwogIH0KICB0b2dnbGVTZWxlY3RlZChlZGl0b3IpIHsKICAgIGlmICh0aGlzLiNzZWxlY3RlZEVkaXRvcnMuaGFzKGVkaXRvcikpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRFZGl0b3JzLmRlbGV0ZShlZGl0b3IpOwogICAgICBlZGl0b3IudW5zZWxlY3QoKTsKICAgICAgdGhpcy4jZGlzcGF0Y2hVcGRhdGVTdGF0ZXMoewogICAgICAgIGhhc1NlbGVjdGVkRWRpdG9yOiB0aGlzLmhhc1NlbGVjdGlvbgogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jc2VsZWN0ZWRFZGl0b3JzLmFkZChlZGl0b3IpOwogICAgZWRpdG9yLnNlbGVjdCgpOwogICAgdGhpcy4jZGlzcGF0Y2hVcGRhdGVVSShlZGl0b3IucHJvcGVydGllc1RvVXBkYXRlKTsKICAgIHRoaXMuI2Rpc3BhdGNoVXBkYXRlU3RhdGVzKHsKICAgICAgaGFzU2VsZWN0ZWRFZGl0b3I6IHRydWUKICAgIH0pOwogIH0KICBzZXRTZWxlY3RlZChlZGl0b3IpIHsKICAgIHRoaXMudXBkYXRlVG9vbGJhcih7CiAgICAgIG1vZGU6IGVkaXRvci5tb2RlLAogICAgICBlZGl0SWQ6IGVkaXRvci51aWQKICAgIH0pOwogICAgdGhpcy4jY3VycmVudERyYXdpbmdTZXNzaW9uPy5jb21taXRPclJlbW92ZSgpOwogICAgZm9yIChjb25zdCBlZCBvZiB0aGlzLiNzZWxlY3RlZEVkaXRvcnMpIHsKICAgICAgaWYgKGVkICE9PSBlZGl0b3IpIHsKICAgICAgICBlZC51bnNlbGVjdCgpOwogICAgICB9CiAgICB9CiAgICB0aGlzLiNzZWxlY3RlZEVkaXRvcnMuY2xlYXIoKTsKICAgIHRoaXMuI3NlbGVjdGVkRWRpdG9ycy5hZGQoZWRpdG9yKTsKICAgIGVkaXRvci5zZWxlY3QoKTsKICAgIHRoaXMuI2Rpc3BhdGNoVXBkYXRlVUkoZWRpdG9yLnByb3BlcnRpZXNUb1VwZGF0ZSk7CiAgICB0aGlzLiNkaXNwYXRjaFVwZGF0ZVN0YXRlcyh7CiAgICAgIGhhc1NlbGVjdGVkRWRpdG9yOiB0cnVlCiAgICB9KTsKICB9CiAgaXNTZWxlY3RlZChlZGl0b3IpIHsKICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZEVkaXRvcnMuaGFzKGVkaXRvcik7CiAgfQogIGdldCBmaXJzdFNlbGVjdGVkRWRpdG9yKCkgewogICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkRWRpdG9ycy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7CiAgfQogIHVuc2VsZWN0KGVkaXRvcikgewogICAgZWRpdG9yLnVuc2VsZWN0KCk7CiAgICB0aGlzLiNzZWxlY3RlZEVkaXRvcnMuZGVsZXRlKGVkaXRvcik7CiAgICB0aGlzLiNkaXNwYXRjaFVwZGF0ZVN0YXRlcyh7CiAgICAgIGhhc1NlbGVjdGVkRWRpdG9yOiB0aGlzLmhhc1NlbGVjdGlvbgogICAgfSk7CiAgfQogIGdldCBoYXNTZWxlY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRFZGl0b3JzLnNpemUgIT09IDA7CiAgfQogIGdldCBpc0VudGVySGFuZGxlZCgpIHsKICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZEVkaXRvcnMuc2l6ZSA9PT0gMSAmJiB0aGlzLmZpcnN0U2VsZWN0ZWRFZGl0b3IuaXNFbnRlckhhbmRsZWQ7CiAgfQogIHVuZG8oKSB7CiAgICB0aGlzLiNjb21tYW5kTWFuYWdlci51bmRvKCk7CiAgICB0aGlzLiNkaXNwYXRjaFVwZGF0ZVN0YXRlcyh7CiAgICAgIGhhc1NvbWV0aGluZ1RvVW5kbzogdGhpcy4jY29tbWFuZE1hbmFnZXIuaGFzU29tZXRoaW5nVG9VbmRvKCksCiAgICAgIGhhc1NvbWV0aGluZ1RvUmVkbzogdHJ1ZSwKICAgICAgaXNFbXB0eTogdGhpcy4jaXNFbXB0eSgpCiAgICB9KTsKICAgIHRoaXMuX2VkaXRvclVuZG9CYXI/LmhpZGUoKTsKICB9CiAgcmVkbygpIHsKICAgIHRoaXMuI2NvbW1hbmRNYW5hZ2VyLnJlZG8oKTsKICAgIHRoaXMuI2Rpc3BhdGNoVXBkYXRlU3RhdGVzKHsKICAgICAgaGFzU29tZXRoaW5nVG9VbmRvOiB0cnVlLAogICAgICBoYXNTb21ldGhpbmdUb1JlZG86IHRoaXMuI2NvbW1hbmRNYW5hZ2VyLmhhc1NvbWV0aGluZ1RvUmVkbygpLAogICAgICBpc0VtcHR5OiB0aGlzLiNpc0VtcHR5KCkKICAgIH0pOwogIH0KICBhZGRDb21tYW5kcyhwYXJhbXMpIHsKICAgIHRoaXMuI2NvbW1hbmRNYW5hZ2VyLmFkZChwYXJhbXMpOwogICAgdGhpcy4jZGlzcGF0Y2hVcGRhdGVTdGF0ZXMoewogICAgICBoYXNTb21ldGhpbmdUb1VuZG86IHRydWUsCiAgICAgIGhhc1NvbWV0aGluZ1RvUmVkbzogZmFsc2UsCiAgICAgIGlzRW1wdHk6IHRoaXMuI2lzRW1wdHkoKQogICAgfSk7CiAgfQogIGNsZWFuVW5kb1N0YWNrKHR5cGUpIHsKICAgIHRoaXMuI2NvbW1hbmRNYW5hZ2VyLmNsZWFuVHlwZSh0eXBlKTsKICB9CiAgI2lzRW1wdHkoKSB7CiAgICBpZiAodGhpcy4jYWxsRWRpdG9ycy5zaXplID09PSAwKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHRoaXMuI2FsbEVkaXRvcnMuc2l6ZSA9PT0gMSkgewogICAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiB0aGlzLiNhbGxFZGl0b3JzLnZhbHVlcygpKSB7CiAgICAgICAgcmV0dXJuIGVkaXRvci5pc0VtcHR5KCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgZGVsZXRlKCkgewogICAgdGhpcy5jb21taXRPclJlbW92ZSgpOwogICAgY29uc3QgZHJhd2luZ0VkaXRvciA9IHRoaXMuY3VycmVudExheWVyPy5lbmREcmF3aW5nU2Vzc2lvbih0cnVlKTsKICAgIGlmICghdGhpcy5oYXNTZWxlY3Rpb24gJiYgIWRyYXdpbmdFZGl0b3IpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgZWRpdG9ycyA9IGRyYXdpbmdFZGl0b3IgPyBbZHJhd2luZ0VkaXRvcl0gOiBbLi4udGhpcy4jc2VsZWN0ZWRFZGl0b3JzXTsKICAgIGNvbnN0IGNtZCA9ICgpID0+IHsKICAgICAgdGhpcy5fZWRpdG9yVW5kb0Jhcj8uc2hvdyh1bmRvLCBlZGl0b3JzLmxlbmd0aCA9PT0gMSA/IGVkaXRvcnNbMF0uZWRpdG9yVHlwZSA6IGVkaXRvcnMubGVuZ3RoKTsKICAgICAgZm9yIChjb25zdCBlZGl0b3Igb2YgZWRpdG9ycykgewogICAgICAgIGVkaXRvci5yZW1vdmUoKTsKICAgICAgfQogICAgfTsKICAgIGNvbnN0IHVuZG8gPSAoKSA9PiB7CiAgICAgIGZvciAoY29uc3QgZWRpdG9yIG9mIGVkaXRvcnMpIHsKICAgICAgICB0aGlzLiNhZGRFZGl0b3JUb0xheWVyKGVkaXRvcik7CiAgICAgIH0KICAgIH07CiAgICB0aGlzLmFkZENvbW1hbmRzKHsKICAgICAgY21kLAogICAgICB1bmRvLAogICAgICBtdXN0RXhlYzogdHJ1ZQogICAgfSk7CiAgfQogIGNvbW1pdE9yUmVtb3ZlKCkgewogICAgdGhpcy4jYWN0aXZlRWRpdG9yPy5jb21taXRPclJlbW92ZSgpOwogIH0KICBoYXNTb21ldGhpbmdUb0NvbnRyb2woKSB7CiAgICByZXR1cm4gdGhpcy4jYWN0aXZlRWRpdG9yIHx8IHRoaXMuaGFzU2VsZWN0aW9uOwogIH0KICAjc2VsZWN0RWRpdG9ycyhlZGl0b3JzKSB7CiAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiB0aGlzLiNzZWxlY3RlZEVkaXRvcnMpIHsKICAgICAgZWRpdG9yLnVuc2VsZWN0KCk7CiAgICB9CiAgICB0aGlzLiNzZWxlY3RlZEVkaXRvcnMuY2xlYXIoKTsKICAgIGZvciAoY29uc3QgZWRpdG9yIG9mIGVkaXRvcnMpIHsKICAgICAgaWYgKGVkaXRvci5pc0VtcHR5KCkpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB0aGlzLiNzZWxlY3RlZEVkaXRvcnMuYWRkKGVkaXRvcik7CiAgICAgIGVkaXRvci5zZWxlY3QoKTsKICAgIH0KICAgIHRoaXMuI2Rpc3BhdGNoVXBkYXRlU3RhdGVzKHsKICAgICAgaGFzU2VsZWN0ZWRFZGl0b3I6IHRoaXMuaGFzU2VsZWN0aW9uCiAgICB9KTsKICB9CiAgc2VsZWN0QWxsKCkgewogICAgZm9yIChjb25zdCBlZGl0b3Igb2YgdGhpcy4jc2VsZWN0ZWRFZGl0b3JzKSB7CiAgICAgIGVkaXRvci5jb21taXQoKTsKICAgIH0KICAgIHRoaXMuI3NlbGVjdEVkaXRvcnModGhpcy4jYWxsRWRpdG9ycy52YWx1ZXMoKSk7CiAgfQogIHVuc2VsZWN0QWxsKCkgewogICAgaWYgKHRoaXMuI2FjdGl2ZUVkaXRvcikgewogICAgICB0aGlzLiNhY3RpdmVFZGl0b3IuY29tbWl0T3JSZW1vdmUoKTsKICAgICAgaWYgKHRoaXMuI21vZGUgIT09IEFubm90YXRpb25FZGl0b3JUeXBlLk5PTkUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGlmICh0aGlzLiNjdXJyZW50RHJhd2luZ1Nlc3Npb24/LmNvbW1pdE9yUmVtb3ZlKCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCF0aGlzLmhhc1NlbGVjdGlvbikgewogICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiB0aGlzLiNzZWxlY3RlZEVkaXRvcnMpIHsKICAgICAgZWRpdG9yLnVuc2VsZWN0KCk7CiAgICB9CiAgICB0aGlzLiNzZWxlY3RlZEVkaXRvcnMuY2xlYXIoKTsKICAgIHRoaXMuI2Rpc3BhdGNoVXBkYXRlU3RhdGVzKHsKICAgICAgaGFzU2VsZWN0ZWRFZGl0b3I6IGZhbHNlCiAgICB9KTsKICB9CiAgdHJhbnNsYXRlU2VsZWN0ZWRFZGl0b3JzKHgsIHksIG5vQ29tbWl0ID0gZmFsc2UpIHsKICAgIGlmICghbm9Db21taXQpIHsKICAgICAgdGhpcy5jb21taXRPclJlbW92ZSgpOwogICAgfQogICAgaWYgKCF0aGlzLmhhc1NlbGVjdGlvbikgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiN0cmFuc2xhdGlvblswXSArPSB4OwogICAgdGhpcy4jdHJhbnNsYXRpb25bMV0gKz0geTsKICAgIGNvbnN0IFt0b3RhbFgsIHRvdGFsWV0gPSB0aGlzLiN0cmFuc2xhdGlvbjsKICAgIGNvbnN0IGVkaXRvcnMgPSBbLi4udGhpcy4jc2VsZWN0ZWRFZGl0b3JzXTsKICAgIGNvbnN0IFRJTUVfVE9fV0FJVCA9IDEwMDA7CiAgICBpZiAodGhpcy4jdHJhbnNsYXRpb25UaW1lb3V0SWQpIHsKICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI3RyYW5zbGF0aW9uVGltZW91dElkKTsKICAgIH0KICAgIHRoaXMuI3RyYW5zbGF0aW9uVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHRoaXMuI3RyYW5zbGF0aW9uVGltZW91dElkID0gbnVsbDsKICAgICAgdGhpcy4jdHJhbnNsYXRpb25bMF0gPSB0aGlzLiN0cmFuc2xhdGlvblsxXSA9IDA7CiAgICAgIHRoaXMuYWRkQ29tbWFuZHMoewogICAgICAgIGNtZDogKCkgPT4gewogICAgICAgICAgZm9yIChjb25zdCBlZGl0b3Igb2YgZWRpdG9ycykgewogICAgICAgICAgICBpZiAodGhpcy4jYWxsRWRpdG9ycy5oYXMoZWRpdG9yLmlkKSkgewogICAgICAgICAgICAgIGVkaXRvci50cmFuc2xhdGVJblBhZ2UodG90YWxYLCB0b3RhbFkpOwogICAgICAgICAgICAgIGVkaXRvci50cmFuc2xhdGlvbkRvbmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdW5kbzogKCkgPT4gewogICAgICAgICAgZm9yIChjb25zdCBlZGl0b3Igb2YgZWRpdG9ycykgewogICAgICAgICAgICBpZiAodGhpcy4jYWxsRWRpdG9ycy5oYXMoZWRpdG9yLmlkKSkgewogICAgICAgICAgICAgIGVkaXRvci50cmFuc2xhdGVJblBhZ2UoLXRvdGFsWCwgLXRvdGFsWSk7CiAgICAgICAgICAgICAgZWRpdG9yLnRyYW5zbGF0aW9uRG9uZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBtdXN0RXhlYzogZmFsc2UKICAgICAgfSk7CiAgICB9LCBUSU1FX1RPX1dBSVQpOwogICAgZm9yIChjb25zdCBlZGl0b3Igb2YgZWRpdG9ycykgewogICAgICBlZGl0b3IudHJhbnNsYXRlSW5QYWdlKHgsIHkpOwogICAgICBlZGl0b3IudHJhbnNsYXRpb25Eb25lKCk7CiAgICB9CiAgfQogIHNldFVwRHJhZ1Nlc3Npb24oKSB7CiAgICBpZiAoIXRoaXMuaGFzU2VsZWN0aW9uKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuZGlzYWJsZVVzZXJTZWxlY3QodHJ1ZSk7CiAgICB0aGlzLiNkcmFnZ2luZ0VkaXRvcnMgPSBuZXcgTWFwKCk7CiAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiB0aGlzLiNzZWxlY3RlZEVkaXRvcnMpIHsKICAgICAgdGhpcy4jZHJhZ2dpbmdFZGl0b3JzLnNldChlZGl0b3IsIHsKICAgICAgICBzYXZlZFg6IGVkaXRvci54LAogICAgICAgIHNhdmVkWTogZWRpdG9yLnksCiAgICAgICAgc2F2ZWRQYWdlSW5kZXg6IGVkaXRvci5wYWdlSW5kZXgsCiAgICAgICAgbmV3WDogMCwKICAgICAgICBuZXdZOiAwLAogICAgICAgIG5ld1BhZ2VJbmRleDogLTEKICAgICAgfSk7CiAgICB9CiAgfQogIGVuZERyYWdTZXNzaW9uKCkgewogICAgaWYgKCF0aGlzLiNkcmFnZ2luZ0VkaXRvcnMpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdGhpcy5kaXNhYmxlVXNlclNlbGVjdChmYWxzZSk7CiAgICBjb25zdCBtYXAgPSB0aGlzLiNkcmFnZ2luZ0VkaXRvcnM7CiAgICB0aGlzLiNkcmFnZ2luZ0VkaXRvcnMgPSBudWxsOwogICAgbGV0IG11c3RCZUFkZGVkSW5VbmRvU3RhY2sgPSBmYWxzZTsKICAgIGZvciAoY29uc3QgW3sKICAgICAgeCwKICAgICAgeSwKICAgICAgcGFnZUluZGV4CiAgICB9LCB2YWx1ZV0gb2YgbWFwKSB7CiAgICAgIHZhbHVlLm5ld1ggPSB4OwogICAgICB2YWx1ZS5uZXdZID0geTsKICAgICAgdmFsdWUubmV3UGFnZUluZGV4ID0gcGFnZUluZGV4OwogICAgICBtdXN0QmVBZGRlZEluVW5kb1N0YWNrIHx8PSB4ICE9PSB2YWx1ZS5zYXZlZFggfHwgeSAhPT0gdmFsdWUuc2F2ZWRZIHx8IHBhZ2VJbmRleCAhPT0gdmFsdWUuc2F2ZWRQYWdlSW5kZXg7CiAgICB9CiAgICBpZiAoIW11c3RCZUFkZGVkSW5VbmRvU3RhY2spIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3QgbW92ZSA9IChlZGl0b3IsIHgsIHksIHBhZ2VJbmRleCkgPT4gewogICAgICBpZiAodGhpcy4jYWxsRWRpdG9ycy5oYXMoZWRpdG9yLmlkKSkgewogICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuI2FsbExheWVycy5nZXQocGFnZUluZGV4KTsKICAgICAgICBpZiAocGFyZW50KSB7CiAgICAgICAgICBlZGl0b3IuX3NldFBhcmVudEFuZFBvc2l0aW9uKHBhcmVudCwgeCwgeSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVkaXRvci5wYWdlSW5kZXggPSBwYWdlSW5kZXg7CiAgICAgICAgICBlZGl0b3IueCA9IHg7CiAgICAgICAgICBlZGl0b3IueSA9IHk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgdGhpcy5hZGRDb21tYW5kcyh7CiAgICAgIGNtZDogKCkgPT4gewogICAgICAgIGZvciAoY29uc3QgW2VkaXRvciwgewogICAgICAgICAgbmV3WCwKICAgICAgICAgIG5ld1ksCiAgICAgICAgICBuZXdQYWdlSW5kZXgKICAgICAgICB9XSBvZiBtYXApIHsKICAgICAgICAgIG1vdmUoZWRpdG9yLCBuZXdYLCBuZXdZLCBuZXdQYWdlSW5kZXgpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdW5kbzogKCkgPT4gewogICAgICAgIGZvciAoY29uc3QgW2VkaXRvciwgewogICAgICAgICAgc2F2ZWRYLAogICAgICAgICAgc2F2ZWRZLAogICAgICAgICAgc2F2ZWRQYWdlSW5kZXgKICAgICAgICB9XSBvZiBtYXApIHsKICAgICAgICAgIG1vdmUoZWRpdG9yLCBzYXZlZFgsIHNhdmVkWSwgc2F2ZWRQYWdlSW5kZXgpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbXVzdEV4ZWM6IHRydWUKICAgIH0pOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGRyYWdTZWxlY3RlZEVkaXRvcnModHgsIHR5KSB7CiAgICBpZiAoIXRoaXMuI2RyYWdnaW5nRWRpdG9ycykgewogICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiB0aGlzLiNkcmFnZ2luZ0VkaXRvcnMua2V5cygpKSB7CiAgICAgIGVkaXRvci5kcmFnKHR4LCB0eSk7CiAgICB9CiAgfQogIHJlYnVpbGQoZWRpdG9yKSB7CiAgICBpZiAoZWRpdG9yLnBhcmVudCA9PT0gbnVsbCkgewogICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldExheWVyKGVkaXRvci5wYWdlSW5kZXgpOwogICAgICBpZiAocGFyZW50KSB7CiAgICAgICAgcGFyZW50LmNoYW5nZVBhcmVudChlZGl0b3IpOwogICAgICAgIHBhcmVudC5hZGRPclJlYnVpbGQoZWRpdG9yKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmFkZEVkaXRvcihlZGl0b3IpOwogICAgICAgIHRoaXMuYWRkVG9Bbm5vdGF0aW9uU3RvcmFnZShlZGl0b3IpOwogICAgICAgIGVkaXRvci5yZWJ1aWxkKCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGVkaXRvci5wYXJlbnQuYWRkT3JSZWJ1aWxkKGVkaXRvcik7CiAgICB9CiAgfQogIGdldCBpc0VkaXRvckhhbmRsaW5nS2V5Ym9hcmQoKSB7CiAgICByZXR1cm4gdGhpcy5nZXRBY3RpdmUoKT8uc2hvdWxkR2V0S2V5Ym9hcmRFdmVudHMoKSB8fCB0aGlzLiNzZWxlY3RlZEVkaXRvcnMuc2l6ZSA9PT0gMSAmJiB0aGlzLmZpcnN0U2VsZWN0ZWRFZGl0b3Iuc2hvdWxkR2V0S2V5Ym9hcmRFdmVudHMoKTsKICB9CiAgaXNBY3RpdmUoZWRpdG9yKSB7CiAgICByZXR1cm4gdGhpcy4jYWN0aXZlRWRpdG9yID09PSBlZGl0b3I7CiAgfQogIGdldEFjdGl2ZSgpIHsKICAgIHJldHVybiB0aGlzLiNhY3RpdmVFZGl0b3I7CiAgfQogIGdldE1vZGUoKSB7CiAgICByZXR1cm4gdGhpcy4jbW9kZTsKICB9CiAgaXNFZGl0aW5nTW9kZSgpIHsKICAgIHJldHVybiB0aGlzLiNtb2RlICE9PSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5OT05FOwogIH0KICBnZXQgaW1hZ2VNYW5hZ2VyKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaW1hZ2VNYW5hZ2VyIiwgbmV3IEltYWdlTWFuYWdlcigpKTsKICB9CiAgZ2V0U2VsZWN0aW9uQm94ZXModGV4dExheWVyKSB7CiAgICBpZiAoIXRleHRMYXllcikgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHNlbGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigpOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gc2VsZWN0aW9uLnJhbmdlQ291bnQ7IGkgPCBpaTsgaSsrKSB7CiAgICAgIGlmICghdGV4dExheWVyLmNvbnRhaW5zKHNlbGVjdGlvbi5nZXRSYW5nZUF0KGkpLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBjb25zdCB7CiAgICAgIHg6IGxheWVyWCwKICAgICAgeTogbGF5ZXJZLAogICAgICB3aWR0aDogcGFyZW50V2lkdGgsCiAgICAgIGhlaWdodDogcGFyZW50SGVpZ2h0CiAgICB9ID0gdGV4dExheWVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgbGV0IHJvdGF0b3I7CiAgICBzd2l0Y2ggKHRleHRMYXllci5nZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIpKSB7CiAgICAgIGNhc2UgIjkwIjoKICAgICAgICByb3RhdG9yID0gKHgsIHksIHcsIGgpID0+ICh7CiAgICAgICAgICB4OiAoeSAtIGxheWVyWSkgLyBwYXJlbnRIZWlnaHQsCiAgICAgICAgICB5OiAxIC0gKHggKyB3IC0gbGF5ZXJYKSAvIHBhcmVudFdpZHRoLAogICAgICAgICAgd2lkdGg6IGggLyBwYXJlbnRIZWlnaHQsCiAgICAgICAgICBoZWlnaHQ6IHcgLyBwYXJlbnRXaWR0aAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICIxODAiOgogICAgICAgIHJvdGF0b3IgPSAoeCwgeSwgdywgaCkgPT4gKHsKICAgICAgICAgIHg6IDEgLSAoeCArIHcgLSBsYXllclgpIC8gcGFyZW50V2lkdGgsCiAgICAgICAgICB5OiAxIC0gKHkgKyBoIC0gbGF5ZXJZKSAvIHBhcmVudEhlaWdodCwKICAgICAgICAgIHdpZHRoOiB3IC8gcGFyZW50V2lkdGgsCiAgICAgICAgICBoZWlnaHQ6IGggLyBwYXJlbnRIZWlnaHQKICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiMjcwIjoKICAgICAgICByb3RhdG9yID0gKHgsIHksIHcsIGgpID0+ICh7CiAgICAgICAgICB4OiAxIC0gKHkgKyBoIC0gbGF5ZXJZKSAvIHBhcmVudEhlaWdodCwKICAgICAgICAgIHk6ICh4IC0gbGF5ZXJYKSAvIHBhcmVudFdpZHRoLAogICAgICAgICAgd2lkdGg6IGggLyBwYXJlbnRIZWlnaHQsCiAgICAgICAgICBoZWlnaHQ6IHcgLyBwYXJlbnRXaWR0aAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHJvdGF0b3IgPSAoeCwgeSwgdywgaCkgPT4gKHsKICAgICAgICAgIHg6ICh4IC0gbGF5ZXJYKSAvIHBhcmVudFdpZHRoLAogICAgICAgICAgeTogKHkgLSBsYXllclkpIC8gcGFyZW50SGVpZ2h0LAogICAgICAgICAgd2lkdGg6IHcgLyBwYXJlbnRXaWR0aCwKICAgICAgICAgIGhlaWdodDogaCAvIHBhcmVudEhlaWdodAogICAgICAgIH0pOwogICAgICAgIGJyZWFrOwogICAgfQogICAgY29uc3QgYm94ZXMgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHNlbGVjdGlvbi5yYW5nZUNvdW50OyBpIDwgaWk7IGkrKykgewogICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KGkpOwogICAgICBpZiAocmFuZ2UuY29sbGFwc2VkKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCB7CiAgICAgICAgeCwKICAgICAgICB5LAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodAogICAgICB9IG9mIHJhbmdlLmdldENsaWVudFJlY3RzKCkpIHsKICAgICAgICBpZiAod2lkdGggPT09IDAgfHwgaGVpZ2h0ID09PSAwKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgYm94ZXMucHVzaChyb3RhdG9yKHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJveGVzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBib3hlczsKICB9CiAgYWRkQ2hhbmdlZEV4aXN0aW5nQW5ub3RhdGlvbih7CiAgICBhbm5vdGF0aW9uRWxlbWVudElkLAogICAgaWQKICB9KSB7CiAgICAodGhpcy4jY2hhbmdlZEV4aXN0aW5nQW5ub3RhdGlvbnMgfHw9IG5ldyBNYXAoKSkuc2V0KGFubm90YXRpb25FbGVtZW50SWQsIGlkKTsKICB9CiAgcmVtb3ZlQ2hhbmdlZEV4aXN0aW5nQW5ub3RhdGlvbih7CiAgICBhbm5vdGF0aW9uRWxlbWVudElkCiAgfSkgewogICAgdGhpcy4jY2hhbmdlZEV4aXN0aW5nQW5ub3RhdGlvbnM/LmRlbGV0ZShhbm5vdGF0aW9uRWxlbWVudElkKTsKICB9CiAgcmVuZGVyQW5ub3RhdGlvbkVsZW1lbnQoYW5ub3RhdGlvbikgewogICAgY29uc3QgZWRpdG9ySWQgPSB0aGlzLiNjaGFuZ2VkRXhpc3RpbmdBbm5vdGF0aW9ucz8uZ2V0KGFubm90YXRpb24uZGF0YS5pZCk7CiAgICBpZiAoIWVkaXRvcklkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuI2Fubm90YXRpb25TdG9yYWdlLmdldFJhd1ZhbHVlKGVkaXRvcklkKTsKICAgIGlmICghZWRpdG9yKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLiNtb2RlID09PSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5OT05FICYmICFlZGl0b3IuaGFzQmVlbk1vZGlmaWVkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVkaXRvci5yZW5kZXJBbm5vdGF0aW9uRWxlbWVudChhbm5vdGF0aW9uKTsKICB9CiAgc2V0TWlzc2luZ0NhbnZhcyhhbm5vdGF0aW9uSWQsIGFubm90YXRpb25FbGVtZW50SWQsIGNhbnZhcykgewogICAgY29uc3QgZWRpdG9yID0gdGhpcy4jbWlzc2luZ0NhbnZhc2VzPy5nZXQoYW5ub3RhdGlvbklkKTsKICAgIGlmICghZWRpdG9yKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVkaXRvci5zZXRDYW52YXMoYW5ub3RhdGlvbkVsZW1lbnRJZCwgY2FudmFzKTsKICAgIHRoaXMuI21pc3NpbmdDYW52YXNlcy5kZWxldGUoYW5ub3RhdGlvbklkKTsKICB9CiAgYWRkTWlzc2luZ0NhbnZhcyhhbm5vdGF0aW9uSWQsIGVkaXRvcikgewogICAgKHRoaXMuI21pc3NpbmdDYW52YXNlcyB8fD0gbmV3IE1hcCgpKS5zZXQoYW5ub3RhdGlvbklkLCBlZGl0b3IpOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL2FsdF90ZXh0LmpzCgpjbGFzcyBBbHRUZXh0IHsKICAjYWx0VGV4dCA9IG51bGw7CiAgI2FsdFRleHREZWNvcmF0aXZlID0gZmFsc2U7CiAgI2FsdFRleHRCdXR0b24gPSBudWxsOwogICNhbHRUZXh0QnV0dG9uTGFiZWwgPSBudWxsOwogICNhbHRUZXh0VG9vbHRpcCA9IG51bGw7CiAgI2FsdFRleHRUb29sdGlwVGltZW91dCA9IG51bGw7CiAgI2FsdFRleHRXYXNGcm9tS2V5Qm9hcmQgPSBmYWxzZTsKICAjYmFkZ2UgPSBudWxsOwogICNlZGl0b3IgPSBudWxsOwogICNndWVzc2VkVGV4dCA9IG51bGw7CiAgI3RleHRXaXRoRGlzY2xhaW1lciA9IG51bGw7CiAgI3VzZU5ld0FsdFRleHRGbG93ID0gZmFsc2U7CiAgc3RhdGljICNsMTBuTmV3QnV0dG9uID0gbnVsbDsKICBzdGF0aWMgX2wxMG4gPSBudWxsOwogIGNvbnN0cnVjdG9yKGVkaXRvcikgewogICAgdGhpcy4jZWRpdG9yID0gZWRpdG9yOwogICAgdGhpcy4jdXNlTmV3QWx0VGV4dEZsb3cgPSBlZGl0b3IuX3VpTWFuYWdlci51c2VOZXdBbHRUZXh0RmxvdzsKICAgIEFsdFRleHQuI2wxMG5OZXdCdXR0b24gfHw9IE9iamVjdC5mcmVlemUoewogICAgICBhZGRlZDogInBkZmpzLWVkaXRvci1uZXctYWx0LXRleHQtYWRkZWQtYnV0dG9uIiwKICAgICAgImFkZGVkLWxhYmVsIjogInBkZmpzLWVkaXRvci1uZXctYWx0LXRleHQtYWRkZWQtYnV0dG9uLWxhYmVsIiwKICAgICAgbWlzc2luZzogInBkZmpzLWVkaXRvci1uZXctYWx0LXRleHQtbWlzc2luZy1idXR0b24iLAogICAgICAibWlzc2luZy1sYWJlbCI6ICJwZGZqcy1lZGl0b3ItbmV3LWFsdC10ZXh0LW1pc3NpbmctYnV0dG9uLWxhYmVsIiwKICAgICAgcmV2aWV3OiAicGRmanMtZWRpdG9yLW5ldy1hbHQtdGV4dC10by1yZXZpZXctYnV0dG9uIiwKICAgICAgInJldmlldy1sYWJlbCI6ICJwZGZqcy1lZGl0b3ItbmV3LWFsdC10ZXh0LXRvLXJldmlldy1idXR0b24tbGFiZWwiCiAgICB9KTsKICB9CiAgc3RhdGljIGluaXRpYWxpemUobDEwbikgewogICAgQWx0VGV4dC5fbDEwbiA/Pz0gbDEwbjsKICB9CiAgYXN5bmMgcmVuZGVyKCkgewogICAgY29uc3QgYWx0VGV4dCA9IHRoaXMuI2FsdFRleHRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgIGFsdFRleHQuY2xhc3NOYW1lID0gImFsdFRleHQiOwogICAgYWx0VGV4dC50YWJJbmRleCA9ICIwIjsKICAgIGNvbnN0IGxhYmVsID0gdGhpcy4jYWx0VGV4dEJ1dHRvbkxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgYWx0VGV4dC5hcHBlbmQobGFiZWwpOwogICAgaWYgKHRoaXMuI3VzZU5ld0FsdFRleHRGbG93KSB7CiAgICAgIGFsdFRleHQuY2xhc3NMaXN0LmFkZCgibmV3Iik7CiAgICAgIGFsdFRleHQuc2V0QXR0cmlidXRlKCJkYXRhLWwxMG4taWQiLCBBbHRUZXh0LiNsMTBuTmV3QnV0dG9uLm1pc3NpbmcpOwogICAgICBsYWJlbC5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsIEFsdFRleHQuI2wxMG5OZXdCdXR0b25bIm1pc3NpbmctbGFiZWwiXSk7CiAgICB9IGVsc2UgewogICAgICBhbHRUZXh0LnNldEF0dHJpYnV0ZSgiZGF0YS1sMTBuLWlkIiwgInBkZmpzLWVkaXRvci1hbHQtdGV4dC1idXR0b24iKTsKICAgICAgbGFiZWwuc2V0QXR0cmlidXRlKCJkYXRhLWwxMG4taWQiLCAicGRmanMtZWRpdG9yLWFsdC10ZXh0LWJ1dHRvbi1sYWJlbCIpOwogICAgfQogICAgY29uc3Qgc2lnbmFsID0gdGhpcy4jZWRpdG9yLl91aU1hbmFnZXIuX3NpZ25hbDsKICAgIGFsdFRleHQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCBub0NvbnRleHRNZW51LCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBhbHRUZXh0LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgZXZlbnQgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCksIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIGNvbnN0IG9uQ2xpY2sgPSBldmVudCA9PiB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuI2VkaXRvci5fdWlNYW5hZ2VyLmVkaXRBbHRUZXh0KHRoaXMuI2VkaXRvcik7CiAgICAgIGlmICh0aGlzLiN1c2VOZXdBbHRUZXh0RmxvdykgewogICAgICAgIHRoaXMuI2VkaXRvci5fcmVwb3J0VGVsZW1ldHJ5KHsKICAgICAgICAgIGFjdGlvbjogInBkZmpzLmltYWdlLmFsdF90ZXh0LmltYWdlX3N0YXR1c19sYWJlbF9jbGlja2VkIiwKICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgbGFiZWw6IHRoaXMuI2xhYmVsCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBhbHRUZXh0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgb25DbGljaywgewogICAgICBjYXB0dXJlOiB0cnVlLAogICAgICBzaWduYWwKICAgIH0pOwogICAgYWx0VGV4dC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZXZlbnQgPT4gewogICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBhbHRUZXh0ICYmIGV2ZW50LmtleSA9PT0gIkVudGVyIikgewogICAgICAgIHRoaXMuI2FsdFRleHRXYXNGcm9tS2V5Qm9hcmQgPSB0cnVlOwogICAgICAgIG9uQ2xpY2soZXZlbnQpOwogICAgICB9CiAgICB9LCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBhd2FpdCB0aGlzLiNzZXRTdGF0ZSgpOwogICAgcmV0dXJuIGFsdFRleHQ7CiAgfQogIGdldCAjbGFiZWwoKSB7CiAgICByZXR1cm4gdGhpcy4jYWx0VGV4dCAmJiAiYWRkZWQiIHx8IHRoaXMuI2FsdFRleHQgPT09IG51bGwgJiYgdGhpcy5ndWVzc2VkVGV4dCAmJiAicmV2aWV3IiB8fCAibWlzc2luZyI7CiAgfQogIGZpbmlzaCgpIHsKICAgIGlmICghdGhpcy4jYWx0VGV4dEJ1dHRvbikgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNhbHRUZXh0QnV0dG9uLmZvY3VzKHsKICAgICAgZm9jdXNWaXNpYmxlOiB0aGlzLiNhbHRUZXh0V2FzRnJvbUtleUJvYXJkCiAgICB9KTsKICAgIHRoaXMuI2FsdFRleHRXYXNGcm9tS2V5Qm9hcmQgPSBmYWxzZTsKICB9CiAgaXNFbXB0eSgpIHsKICAgIGlmICh0aGlzLiN1c2VOZXdBbHRUZXh0RmxvdykgewogICAgICByZXR1cm4gdGhpcy4jYWx0VGV4dCA9PT0gbnVsbDsKICAgIH0KICAgIHJldHVybiAhdGhpcy4jYWx0VGV4dCAmJiAhdGhpcy4jYWx0VGV4dERlY29yYXRpdmU7CiAgfQogIGhhc0RhdGEoKSB7CiAgICBpZiAodGhpcy4jdXNlTmV3QWx0VGV4dEZsb3cpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FsdFRleHQgIT09IG51bGwgfHwgISF0aGlzLiNndWVzc2VkVGV4dDsKICAgIH0KICAgIHJldHVybiB0aGlzLmlzRW1wdHkoKTsKICB9CiAgZ2V0IGd1ZXNzZWRUZXh0KCkgewogICAgcmV0dXJuIHRoaXMuI2d1ZXNzZWRUZXh0OwogIH0KICBhc3luYyBzZXRHdWVzc2VkVGV4dChndWVzc2VkVGV4dCkgewogICAgaWYgKHRoaXMuI2FsdFRleHQgIT09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jZ3Vlc3NlZFRleHQgPSBndWVzc2VkVGV4dDsKICAgIHRoaXMuI3RleHRXaXRoRGlzY2xhaW1lciA9IGF3YWl0IEFsdFRleHQuX2wxMG4uZ2V0KCJwZGZqcy1lZGl0b3ItbmV3LWFsdC10ZXh0LWdlbmVyYXRlZC1hbHQtdGV4dC13aXRoLWRpc2NsYWltZXIiLCB7CiAgICAgIGdlbmVyYXRlZEFsdFRleHQ6IGd1ZXNzZWRUZXh0CiAgICB9KTsKICAgIHRoaXMuI3NldFN0YXRlKCk7CiAgfQogIHRvZ2dsZUFsdFRleHRCYWRnZSh2aXNpYmlsaXR5ID0gZmFsc2UpIHsKICAgIGlmICghdGhpcy4jdXNlTmV3QWx0VGV4dEZsb3cgfHwgdGhpcy4jYWx0VGV4dCkgewogICAgICB0aGlzLiNiYWRnZT8ucmVtb3ZlKCk7CiAgICAgIHRoaXMuI2JhZGdlID0gbnVsbDsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCF0aGlzLiNiYWRnZSkgewogICAgICBjb25zdCBiYWRnZSA9IHRoaXMuI2JhZGdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGJhZGdlLmNsYXNzTmFtZSA9ICJub0FsdFRleHRCYWRnZSI7CiAgICAgIHRoaXMuI2VkaXRvci5kaXYuYXBwZW5kKGJhZGdlKTsKICAgIH0KICAgIHRoaXMuI2JhZGdlLmNsYXNzTGlzdC50b2dnbGUoImhpZGRlbiIsICF2aXNpYmlsaXR5KTsKICB9CiAgc2VyaWFsaXplKGlzRm9yQ29weWluZykgewogICAgbGV0IGFsdFRleHQgPSB0aGlzLiNhbHRUZXh0OwogICAgaWYgKCFpc0ZvckNvcHlpbmcgJiYgdGhpcy4jZ3Vlc3NlZFRleHQgPT09IGFsdFRleHQpIHsKICAgICAgYWx0VGV4dCA9IHRoaXMuI3RleHRXaXRoRGlzY2xhaW1lcjsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGFsdFRleHQsCiAgICAgIGRlY29yYXRpdmU6IHRoaXMuI2FsdFRleHREZWNvcmF0aXZlLAogICAgICBndWVzc2VkVGV4dDogdGhpcy4jZ3Vlc3NlZFRleHQsCiAgICAgIHRleHRXaXRoRGlzY2xhaW1lcjogdGhpcy4jdGV4dFdpdGhEaXNjbGFpbWVyCiAgICB9OwogIH0KICBnZXQgZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIGFsdFRleHQ6IHRoaXMuI2FsdFRleHQsCiAgICAgIGRlY29yYXRpdmU6IHRoaXMuI2FsdFRleHREZWNvcmF0aXZlCiAgICB9OwogIH0KICBzZXQgZGF0YSh7CiAgICBhbHRUZXh0LAogICAgZGVjb3JhdGl2ZSwKICAgIGd1ZXNzZWRUZXh0LAogICAgdGV4dFdpdGhEaXNjbGFpbWVyLAogICAgY2FuY2VsID0gZmFsc2UKICB9KSB7CiAgICBpZiAoZ3Vlc3NlZFRleHQpIHsKICAgICAgdGhpcy4jZ3Vlc3NlZFRleHQgPSBndWVzc2VkVGV4dDsKICAgICAgdGhpcy4jdGV4dFdpdGhEaXNjbGFpbWVyID0gdGV4dFdpdGhEaXNjbGFpbWVyOwogICAgfQogICAgaWYgKHRoaXMuI2FsdFRleHQgPT09IGFsdFRleHQgJiYgdGhpcy4jYWx0VGV4dERlY29yYXRpdmUgPT09IGRlY29yYXRpdmUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFjYW5jZWwpIHsKICAgICAgdGhpcy4jYWx0VGV4dCA9IGFsdFRleHQ7CiAgICAgIHRoaXMuI2FsdFRleHREZWNvcmF0aXZlID0gZGVjb3JhdGl2ZTsKICAgIH0KICAgIHRoaXMuI3NldFN0YXRlKCk7CiAgfQogIHRvZ2dsZShlbmFibGVkID0gZmFsc2UpIHsKICAgIGlmICghdGhpcy4jYWx0VGV4dEJ1dHRvbikgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIWVuYWJsZWQgJiYgdGhpcy4jYWx0VGV4dFRvb2x0aXBUaW1lb3V0KSB7CiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiNhbHRUZXh0VG9vbHRpcFRpbWVvdXQpOwogICAgICB0aGlzLiNhbHRUZXh0VG9vbHRpcFRpbWVvdXQgPSBudWxsOwogICAgfQogICAgdGhpcy4jYWx0VGV4dEJ1dHRvbi5kaXNhYmxlZCA9ICFlbmFibGVkOwogIH0KICBzaG93bigpIHsKICAgIHRoaXMuI2VkaXRvci5fcmVwb3J0VGVsZW1ldHJ5KHsKICAgICAgYWN0aW9uOiAicGRmanMuaW1hZ2UuYWx0X3RleHQuaW1hZ2Vfc3RhdHVzX2xhYmVsX2Rpc3BsYXllZCIsCiAgICAgIGRhdGE6IHsKICAgICAgICBsYWJlbDogdGhpcy4jbGFiZWwKICAgICAgfQogICAgfSk7CiAgfQogIGRlc3Ryb3koKSB7CiAgICB0aGlzLiNhbHRUZXh0QnV0dG9uPy5yZW1vdmUoKTsKICAgIHRoaXMuI2FsdFRleHRCdXR0b24gPSBudWxsOwogICAgdGhpcy4jYWx0VGV4dEJ1dHRvbkxhYmVsID0gbnVsbDsKICAgIHRoaXMuI2FsdFRleHRUb29sdGlwID0gbnVsbDsKICAgIHRoaXMuI2JhZGdlPy5yZW1vdmUoKTsKICAgIHRoaXMuI2JhZGdlID0gbnVsbDsKICB9CiAgYXN5bmMgI3NldFN0YXRlKCkgewogICAgY29uc3QgYnV0dG9uID0gdGhpcy4jYWx0VGV4dEJ1dHRvbjsKICAgIGlmICghYnV0dG9uKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLiN1c2VOZXdBbHRUZXh0RmxvdykgewogICAgICBidXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgiZG9uZSIsICEhdGhpcy4jYWx0VGV4dCk7CiAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsIEFsdFRleHQuI2wxMG5OZXdCdXR0b25bdGhpcy4jbGFiZWxdKTsKICAgICAgdGhpcy4jYWx0VGV4dEJ1dHRvbkxhYmVsPy5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsIEFsdFRleHQuI2wxMG5OZXdCdXR0b25bYCR7dGhpcy4jbGFiZWx9LWxhYmVsYF0pOwogICAgICBpZiAoIXRoaXMuI2FsdFRleHQpIHsKICAgICAgICB0aGlzLiNhbHRUZXh0VG9vbHRpcD8ucmVtb3ZlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoIXRoaXMuI2FsdFRleHQgJiYgIXRoaXMuI2FsdFRleHREZWNvcmF0aXZlKSB7CiAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoImRvbmUiKTsKICAgICAgICB0aGlzLiNhbHRUZXh0VG9vbHRpcD8ucmVtb3ZlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJkb25lIik7CiAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsICJwZGZqcy1lZGl0b3ItYWx0LXRleHQtZWRpdC1idXR0b24iKTsKICAgIH0KICAgIGxldCB0b29sdGlwID0gdGhpcy4jYWx0VGV4dFRvb2x0aXA7CiAgICBpZiAoIXRvb2x0aXApIHsKICAgICAgdGhpcy4jYWx0VGV4dFRvb2x0aXAgPSB0b29sdGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICB0b29sdGlwLmNsYXNzTmFtZSA9ICJ0b29sdGlwIjsKICAgICAgdG9vbHRpcC5zZXRBdHRyaWJ1dGUoInJvbGUiLCAidG9vbHRpcCIpOwogICAgICB0b29sdGlwLmlkID0gYGFsdC10ZXh0LXRvb2x0aXAtJHt0aGlzLiNlZGl0b3IuaWR9YDsKICAgICAgY29uc3QgREVMQVlfVE9fU0hPV19UT09MVElQID0gMTAwOwogICAgICBjb25zdCBzaWduYWwgPSB0aGlzLiNlZGl0b3IuX3VpTWFuYWdlci5fc2lnbmFsOwogICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCAoKSA9PiB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI2FsdFRleHRUb29sdGlwVGltZW91dCk7CiAgICAgICAgdGhpcy4jYWx0VGV4dFRvb2x0aXBUaW1lb3V0ID0gbnVsbDsKICAgICAgfSwgewogICAgICAgIG9uY2U6IHRydWUKICAgICAgfSk7CiAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgKCkgPT4gewogICAgICAgIHRoaXMuI2FsdFRleHRUb29sdGlwVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgdGhpcy4jYWx0VGV4dFRvb2x0aXBUaW1lb3V0ID0gbnVsbDsKICAgICAgICAgIHRoaXMuI2FsdFRleHRUb29sdGlwLmNsYXNzTGlzdC5hZGQoInNob3ciKTsKICAgICAgICAgIHRoaXMuI2VkaXRvci5fcmVwb3J0VGVsZW1ldHJ5KHsKICAgICAgICAgICAgYWN0aW9uOiAiYWx0X3RleHRfdG9vbHRpcCIKICAgICAgICAgIH0pOwogICAgICAgIH0sIERFTEFZX1RPX1NIT1dfVE9PTFRJUCk7CiAgICAgIH0sIHsKICAgICAgICBzaWduYWwKICAgICAgfSk7CiAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgKCkgPT4gewogICAgICAgIGlmICh0aGlzLiNhbHRUZXh0VG9vbHRpcFRpbWVvdXQpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLiNhbHRUZXh0VG9vbHRpcFRpbWVvdXQpOwogICAgICAgICAgdGhpcy4jYWx0VGV4dFRvb2x0aXBUaW1lb3V0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgdGhpcy4jYWx0VGV4dFRvb2x0aXA/LmNsYXNzTGlzdC5yZW1vdmUoInNob3ciKTsKICAgICAgfSwgewogICAgICAgIHNpZ25hbAogICAgICB9KTsKICAgIH0KICAgIGlmICh0aGlzLiNhbHRUZXh0RGVjb3JhdGl2ZSkgewogICAgICB0b29sdGlwLnNldEF0dHJpYnV0ZSgiZGF0YS1sMTBuLWlkIiwgInBkZmpzLWVkaXRvci1hbHQtdGV4dC1kZWNvcmF0aXZlLXRvb2x0aXAiKTsKICAgIH0gZWxzZSB7CiAgICAgIHRvb2x0aXAucmVtb3ZlQXR0cmlidXRlKCJkYXRhLWwxMG4taWQiKTsKICAgICAgdG9vbHRpcC50ZXh0Q29udGVudCA9IHRoaXMuI2FsdFRleHQ7CiAgICB9CiAgICBpZiAoIXRvb2x0aXAucGFyZW50Tm9kZSkgewogICAgICBidXR0b24uYXBwZW5kKHRvb2x0aXApOwogICAgfQogICAgY29uc3QgZWxlbWVudCA9IHRoaXMuI2VkaXRvci5nZXRFbGVtZW50Rm9yQWx0VGV4dCgpOwogICAgZWxlbWVudD8uc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IiwgdG9vbHRpcC5pZCk7CiAgfQp9Cgo7Ly8gLi9zcmMvZGlzcGxheS9lZGl0b3IvY29tbWVudC5qcwoKY2xhc3MgQ29tbWVudCB7CiAgI2NvbW1lbnRTdGFuZGFsb25lQnV0dG9uID0gbnVsbDsKICAjY29tbWVudFRvb2xiYXJCdXR0b24gPSBudWxsOwogICNjb21tZW50V2FzRnJvbUtleUJvYXJkID0gZmFsc2U7CiAgI2VkaXRvciA9IG51bGw7CiAgI2luaXRpYWxUZXh0ID0gbnVsbDsKICAjcmljaFRleHQgPSBudWxsOwogICN0ZXh0ID0gbnVsbDsKICAjZGF0ZSA9IG51bGw7CiAgI2RlbGV0ZWQgPSBmYWxzZTsKICAjcG9wdXBQb3NpdGlvbiA9IG51bGw7CiAgY29uc3RydWN0b3IoZWRpdG9yKSB7CiAgICB0aGlzLiNlZGl0b3IgPSBlZGl0b3I7CiAgfQogIHJlbmRlckZvclRvb2xiYXIoKSB7CiAgICBjb25zdCBidXR0b24gPSB0aGlzLiNjb21tZW50VG9vbGJhckJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYnV0dG9uLmNsYXNzTmFtZSA9ICJjb21tZW50IjsKICAgIHJldHVybiB0aGlzLiNyZW5kZXIoYnV0dG9uLCBmYWxzZSk7CiAgfQogIHJlbmRlckZvclN0YW5kYWxvbmUoKSB7CiAgICBjb25zdCBidXR0b24gPSB0aGlzLiNjb21tZW50U3RhbmRhbG9uZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYnV0dG9uLmNsYXNzTmFtZSA9ICJhbm5vdGF0aW9uQ29tbWVudEJ1dHRvbiI7CiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuI2VkaXRvci5jb21tZW50QnV0dG9uUG9zaXRpb247CiAgICBpZiAocG9zaXRpb24pIHsKICAgICAgY29uc3QgewogICAgICAgIHN0eWxlCiAgICAgIH0gPSBidXR0b247CiAgICAgIHN0eWxlLmluc2V0SW5saW5lRW5kID0gYGNhbGMoJHsxMDAgKiAodGhpcy4jZWRpdG9yLl91aU1hbmFnZXIuZGlyZWN0aW9uID09PSAibHRyIiA/IDEgLSBwb3NpdGlvblswXSA6IHBvc2l0aW9uWzBdKX0lIC0gdmFyKC0tY29tbWVudC1idXR0b24tZGltKSlgOwogICAgICBzdHlsZS50b3AgPSBgY2FsYygkezEwMCAqIHBvc2l0aW9uWzFdfSUgLSB2YXIoLS1jb21tZW50LWJ1dHRvbi1kaW0pKWA7CiAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy4jZWRpdG9yLmNvbW1lbnRCdXR0b25Db2xvcjsKICAgICAgaWYgKGNvbG9yKSB7CiAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGlzLiNyZW5kZXIoYnV0dG9uLCB0cnVlKTsKICB9CiAgZm9jdXNCdXR0b24oKSB7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgKHRoaXMuI2NvbW1lbnRTdGFuZGFsb25lQnV0dG9uID8/IHRoaXMuI2NvbW1lbnRUb29sYmFyQnV0dG9uKT8uZm9jdXMoKTsKICAgIH0sIDApOwogIH0KICBvblVwZGF0ZWRDb2xvcigpIHsKICAgIGlmICghdGhpcy4jY29tbWVudFN0YW5kYWxvbmVCdXR0b24pIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgY29sb3IgPSB0aGlzLiNlZGl0b3IuY29tbWVudEJ1dHRvbkNvbG9yOwogICAgaWYgKGNvbG9yKSB7CiAgICAgIHRoaXMuI2NvbW1lbnRTdGFuZGFsb25lQnV0dG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yOwogICAgfQogICAgdGhpcy4jZWRpdG9yLl91aU1hbmFnZXIudXBkYXRlUG9wdXBDb2xvcih0aGlzLiNlZGl0b3IpOwogIH0KICBnZXQgY29tbWVudEJ1dHRvbldpZHRoKCkgewogICAgcmV0dXJuICh0aGlzLiNjb21tZW50U3RhbmRhbG9uZUJ1dHRvbj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPz8gMCkgLyB0aGlzLiNlZGl0b3IucGFyZW50LmJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aDsKICB9CiAgZ2V0IGNvbW1lbnRQb3B1cFBvc2l0aW9uSW5MYXllcigpIHsKICAgIGlmICh0aGlzLiNwb3B1cFBvc2l0aW9uKSB7CiAgICAgIHJldHVybiB0aGlzLiNwb3B1cFBvc2l0aW9uOwogICAgfQogICAgaWYgKCF0aGlzLiNjb21tZW50U3RhbmRhbG9uZUJ1dHRvbikgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgeCwKICAgICAgeSwKICAgICAgaGVpZ2h0CiAgICB9ID0gdGhpcy4jY29tbWVudFN0YW5kYWxvbmVCdXR0b24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBjb25zdCB7CiAgICAgIHg6IHBhcmVudFgsCiAgICAgIHk6IHBhcmVudFksCiAgICAgIHdpZHRoOiBwYXJlbnRXaWR0aCwKICAgICAgaGVpZ2h0OiBwYXJlbnRIZWlnaHQKICAgIH0gPSB0aGlzLiNlZGl0b3IucGFyZW50LmJvdW5kaW5nQ2xpZW50UmVjdDsKICAgIHJldHVybiBbKHggLSBwYXJlbnRYKSAvIHBhcmVudFdpZHRoLCAoeSArIGhlaWdodCAtIHBhcmVudFkpIC8gcGFyZW50SGVpZ2h0XTsKICB9CiAgc2V0IGNvbW1lbnRQb3B1cFBvc2l0aW9uSW5MYXllcihwb3MpIHsKICAgIHRoaXMuI3BvcHVwUG9zaXRpb24gPSBwb3M7CiAgfQogIGhhc0RlZmF1bHRQb3B1cFBvc2l0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuI3BvcHVwUG9zaXRpb24gPT09IG51bGw7CiAgfQogIHJlbW92ZVN0YW5kYWxvbmVDb21tZW50QnV0dG9uKCkgewogICAgdGhpcy4jY29tbWVudFN0YW5kYWxvbmVCdXR0b24/LnJlbW92ZSgpOwogICAgdGhpcy4jY29tbWVudFN0YW5kYWxvbmVCdXR0b24gPSBudWxsOwogIH0KICByZW1vdmVUb29sYmFyQ29tbWVudEJ1dHRvbigpIHsKICAgIHRoaXMuI2NvbW1lbnRUb29sYmFyQnV0dG9uPy5yZW1vdmUoKTsKICAgIHRoaXMuI2NvbW1lbnRUb29sYmFyQnV0dG9uID0gbnVsbDsKICB9CiAgc2V0Q29tbWVudEJ1dHRvblN0YXRlcyh7CiAgICBzZWxlY3RlZCwKICAgIGhhc1BvcHVwCiAgfSkgewogICAgaWYgKCF0aGlzLiNjb21tZW50U3RhbmRhbG9uZUJ1dHRvbikgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNjb21tZW50U3RhbmRhbG9uZUJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCJzZWxlY3RlZCIsIHNlbGVjdGVkKTsKICAgIHRoaXMuI2NvbW1lbnRTdGFuZGFsb25lQnV0dG9uLmFyaWFFeHBhbmRlZCA9IGhhc1BvcHVwOwogIH0KICAjcmVuZGVyKGNvbW1lbnQsIGlzU3RhbmRhbG9uZSkgewogICAgaWYgKCF0aGlzLiNlZGl0b3IuX3VpTWFuYWdlci5oYXNDb21tZW50TWFuYWdlcigpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29tbWVudC50YWJJbmRleCA9ICIwIjsKICAgIGNvbW1lbnQuYXJpYUhhc1BvcHVwID0gImRpYWxvZyI7CiAgICBpZiAoaXNTdGFuZGFsb25lKSB7CiAgICAgIGNvbW1lbnQuYXJpYUNvbnRyb2xzID0gImNvbW1lbnRQb3B1cCI7CiAgICAgIGNvbW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWwxMG4taWQiLCAicGRmanMtc2hvdy1jb21tZW50LWJ1dHRvbiIpOwogICAgfSBlbHNlIHsKICAgICAgY29tbWVudC5hcmlhQ29udHJvbHNFbGVtZW50cyA9IFt0aGlzLiNlZGl0b3IuX3VpTWFuYWdlci5nZXRDb21tZW50RGlhbG9nRWxlbWVudCgpXTsKICAgICAgY29tbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsICJwZGZqcy1lZGl0b3ItYWRkLWNvbW1lbnQtYnV0dG9uIik7CiAgICB9CiAgICBjb25zdCBzaWduYWwgPSB0aGlzLiNlZGl0b3IuX3VpTWFuYWdlci5fc2lnbmFsOwogICAgaWYgKCEoc2lnbmFsIGluc3RhbmNlb2YgQWJvcnRTaWduYWwpIHx8IHNpZ25hbC5hYm9ydGVkKSB7CiAgICAgIHJldHVybiBjb21tZW50OwogICAgfQogICAgY29tbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIG5vQ29udGV4dE1lbnUsIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIGlmIChpc1N0YW5kYWxvbmUpIHsKICAgICAgY29tbWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIiwgZSA9PiB7CiAgICAgICAgdGhpcy4jZWRpdG9yLl9mb2N1c0V2ZW50c0FsbG93ZWQgPSBmYWxzZTsKICAgICAgICBzdG9wRXZlbnQoZSk7CiAgICAgIH0sIHsKICAgICAgICBjYXB0dXJlOiB0cnVlLAogICAgICAgIHNpZ25hbAogICAgICB9KTsKICAgICAgY29tbWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsIGUgPT4gewogICAgICAgIHRoaXMuI2VkaXRvci5fZm9jdXNFdmVudHNBbGxvd2VkID0gdHJ1ZTsKICAgICAgICBzdG9wRXZlbnQoZSk7CiAgICAgIH0sIHsKICAgICAgICBjYXB0dXJlOiB0cnVlLAogICAgICAgIHNpZ25hbAogICAgICB9KTsKICAgIH0KICAgIGNvbW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLCBldmVudCA9PiBldmVudC5zdG9wUHJvcGFnYXRpb24oKSwgewogICAgICBzaWduYWwKICAgIH0pOwogICAgY29uc3Qgb25DbGljayA9IGV2ZW50ID0+IHsKICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgaWYgKGNvbW1lbnQgPT09IHRoaXMuI2NvbW1lbnRUb29sYmFyQnV0dG9uKSB7CiAgICAgICAgdGhpcy5lZGl0KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4jZWRpdG9yLnRvZ2dsZUNvbW1lbnQodHJ1ZSk7CiAgICAgIH0KICAgIH07CiAgICBjb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgb25DbGljaywgewogICAgICBjYXB0dXJlOiB0cnVlLAogICAgICBzaWduYWwKICAgIH0pOwogICAgY29tbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZXZlbnQgPT4gewogICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBjb21tZW50ICYmIGV2ZW50LmtleSA9PT0gIkVudGVyIikgewogICAgICAgIHRoaXMuI2NvbW1lbnRXYXNGcm9tS2V5Qm9hcmQgPSB0cnVlOwogICAgICAgIG9uQ2xpY2soZXZlbnQpOwogICAgICB9CiAgICB9LCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBjb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsICgpID0+IHsKICAgICAgdGhpcy4jZWRpdG9yLnRvZ2dsZUNvbW1lbnQoZmFsc2UsIHRydWUpOwogICAgfSwgewogICAgICBzaWduYWwKICAgIH0pOwogICAgY29tbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCAoKSA9PiB7CiAgICAgIHRoaXMuI2VkaXRvci50b2dnbGVDb21tZW50KGZhbHNlLCBmYWxzZSk7CiAgICB9LCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICByZXR1cm4gY29tbWVudDsKICB9CiAgZWRpdChvcHRpb25zKSB7CiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuY29tbWVudFBvcHVwUG9zaXRpb25JbkxheWVyOwogICAgbGV0IHBvc1gsIHBvc1k7CiAgICBpZiAocG9zaXRpb24pIHsKICAgICAgW3Bvc1gsIHBvc1ldID0gcG9zaXRpb247CiAgICB9IGVsc2UgewogICAgICBbcG9zWCwgcG9zWV0gPSB0aGlzLiNlZGl0b3IuY29tbWVudEJ1dHRvblBvc2l0aW9uOwogICAgICBjb25zdCB7CiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0LAogICAgICAgIHgsCiAgICAgICAgeQogICAgICB9ID0gdGhpcy4jZWRpdG9yOwogICAgICBwb3NYID0geCArIHBvc1ggKiB3aWR0aDsKICAgICAgcG9zWSA9IHkgKyBwb3NZICogaGVpZ2h0OwogICAgfQogICAgY29uc3QgcGFyZW50RGltZW5zaW9ucyA9IHRoaXMuI2VkaXRvci5wYXJlbnQuYm91bmRpbmdDbGllbnRSZWN0OwogICAgY29uc3QgewogICAgICB4OiBwYXJlbnRYLAogICAgICB5OiBwYXJlbnRZLAogICAgICB3aWR0aDogcGFyZW50V2lkdGgsCiAgICAgIGhlaWdodDogcGFyZW50SGVpZ2h0CiAgICB9ID0gcGFyZW50RGltZW5zaW9uczsKICAgIHRoaXMuI2VkaXRvci5fdWlNYW5hZ2VyLmVkaXRDb21tZW50KHRoaXMuI2VkaXRvciwgcGFyZW50WCArIHBvc1ggKiBwYXJlbnRXaWR0aCwgcGFyZW50WSArIHBvc1kgKiBwYXJlbnRIZWlnaHQsIHsKICAgICAgLi4ub3B0aW9ucywKICAgICAgcGFyZW50RGltZW5zaW9ucwogICAgfSk7CiAgfQogIGZpbmlzaCgpIHsKICAgIGlmICghdGhpcy4jY29tbWVudFRvb2xiYXJCdXR0b24pIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jY29tbWVudFRvb2xiYXJCdXR0b24uZm9jdXMoewogICAgICBmb2N1c1Zpc2libGU6IHRoaXMuI2NvbW1lbnRXYXNGcm9tS2V5Qm9hcmQKICAgIH0pOwogICAgdGhpcy4jY29tbWVudFdhc0Zyb21LZXlCb2FyZCA9IGZhbHNlOwogIH0KICBpc0RlbGV0ZWQoKSB7CiAgICByZXR1cm4gdGhpcy4jZGVsZXRlZCB8fCB0aGlzLiN0ZXh0ID09PSAiIjsKICB9CiAgaXNFbXB0eSgpIHsKICAgIHJldHVybiB0aGlzLiN0ZXh0ID09PSBudWxsOwogIH0KICBoYXNCZWVuRWRpdGVkKCkgewogICAgcmV0dXJuIHRoaXMuaXNEZWxldGVkKCkgfHwgdGhpcy4jdGV4dCAhPT0gdGhpcy4jaW5pdGlhbFRleHQ7CiAgfQogIHNlcmlhbGl6ZSgpIHsKICAgIHJldHVybiB0aGlzLmRhdGE7CiAgfQogIGdldCBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgdGV4dDogdGhpcy4jdGV4dCwKICAgICAgcmljaFRleHQ6IHRoaXMuI3JpY2hUZXh0LAogICAgICBkYXRlOiB0aGlzLiNkYXRlLAogICAgICBkZWxldGVkOiB0aGlzLmlzRGVsZXRlZCgpCiAgICB9OwogIH0KICBzZXQgZGF0YSh0ZXh0KSB7CiAgICBpZiAodGV4dCAhPT0gdGhpcy4jdGV4dCkgewogICAgICB0aGlzLiNyaWNoVGV4dCA9IG51bGw7CiAgICB9CiAgICBpZiAodGV4dCA9PT0gbnVsbCkgewogICAgICB0aGlzLiN0ZXh0ID0gIiI7CiAgICAgIHRoaXMuI2RlbGV0ZWQgPSB0cnVlOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiN0ZXh0ID0gdGV4dDsKICAgIHRoaXMuI2RhdGUgPSBuZXcgRGF0ZSgpOwogICAgdGhpcy4jZGVsZXRlZCA9IGZhbHNlOwogIH0KICBzZXRJbml0aWFsVGV4dCh0ZXh0LCByaWNoVGV4dCA9IG51bGwpIHsKICAgIHRoaXMuI2luaXRpYWxUZXh0ID0gdGV4dDsKICAgIHRoaXMuZGF0YSA9IHRleHQ7CiAgICB0aGlzLiNkYXRlID0gbnVsbDsKICAgIHRoaXMuI3JpY2hUZXh0ID0gcmljaFRleHQ7CiAgfQogIHNob3duKCkge30KICBkZXN0cm95KCkgewogICAgdGhpcy4jY29tbWVudFRvb2xiYXJCdXR0b24/LnJlbW92ZSgpOwogICAgdGhpcy4jY29tbWVudFRvb2xiYXJCdXR0b24gPSBudWxsOwogICAgdGhpcy4jY29tbWVudFN0YW5kYWxvbmVCdXR0b24/LnJlbW92ZSgpOwogICAgdGhpcy4jY29tbWVudFN0YW5kYWxvbmVCdXR0b24gPSBudWxsOwogICAgdGhpcy4jdGV4dCA9ICIiOwogICAgdGhpcy4jcmljaFRleHQgPSBudWxsOwogICAgdGhpcy4jZGF0ZSA9IG51bGw7CiAgICB0aGlzLiNlZGl0b3IgPSBudWxsOwogICAgdGhpcy4jY29tbWVudFdhc0Zyb21LZXlCb2FyZCA9IGZhbHNlOwogICAgdGhpcy4jZGVsZXRlZCA9IGZhbHNlOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvdG91Y2hfbWFuYWdlci5qcwoKY2xhc3MgVG91Y2hNYW5hZ2VyIHsKICAjY29udGFpbmVyOwogICNpc1BpbmNoaW5nID0gZmFsc2U7CiAgI2lzUGluY2hpbmdTdG9wcGVkID0gbnVsbDsKICAjaXNQaW5jaGluZ0Rpc2FibGVkOwogICNvblBpbmNoU3RhcnQ7CiAgI29uUGluY2hpbmc7CiAgI29uUGluY2hFbmQ7CiAgI3BvaW50ZXJEb3duQUMgPSBudWxsOwogICNzaWduYWw7CiAgI3RvdWNoSW5mbyA9IG51bGw7CiAgI3RvdWNoTWFuYWdlckFDOwogICN0b3VjaE1vdmVBQyA9IG51bGw7CiAgY29uc3RydWN0b3IoewogICAgY29udGFpbmVyLAogICAgaXNQaW5jaGluZ0Rpc2FibGVkID0gbnVsbCwKICAgIGlzUGluY2hpbmdTdG9wcGVkID0gbnVsbCwKICAgIG9uUGluY2hTdGFydCA9IG51bGwsCiAgICBvblBpbmNoaW5nID0gbnVsbCwKICAgIG9uUGluY2hFbmQgPSBudWxsLAogICAgc2lnbmFsCiAgfSkgewogICAgdGhpcy4jY29udGFpbmVyID0gY29udGFpbmVyOwogICAgdGhpcy4jaXNQaW5jaGluZ1N0b3BwZWQgPSBpc1BpbmNoaW5nU3RvcHBlZDsKICAgIHRoaXMuI2lzUGluY2hpbmdEaXNhYmxlZCA9IGlzUGluY2hpbmdEaXNhYmxlZDsKICAgIHRoaXMuI29uUGluY2hTdGFydCA9IG9uUGluY2hTdGFydDsKICAgIHRoaXMuI29uUGluY2hpbmcgPSBvblBpbmNoaW5nOwogICAgdGhpcy4jb25QaW5jaEVuZCA9IG9uUGluY2hFbmQ7CiAgICB0aGlzLiN0b3VjaE1hbmFnZXJBQyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgIHRoaXMuI3NpZ25hbCA9IEFib3J0U2lnbmFsLmFueShbc2lnbmFsLCB0aGlzLiN0b3VjaE1hbmFnZXJBQy5zaWduYWxdKTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgdGhpcy4jb25Ub3VjaFN0YXJ0LmJpbmQodGhpcyksIHsKICAgICAgcGFzc2l2ZTogZmFsc2UsCiAgICAgIHNpZ25hbDogdGhpcy4jc2lnbmFsCiAgICB9KTsKICB9CiAgZ2V0IE1JTl9UT1VDSF9ESVNUQU5DRV9UT19QSU5DSCgpIHsKICAgIHJldHVybiAzNSAvIE91dHB1dFNjYWxlLnBpeGVsUmF0aW87CiAgfQogICNvblRvdWNoU3RhcnQoZXZ0KSB7CiAgICBpZiAodGhpcy4jaXNQaW5jaGluZ0Rpc2FibGVkPy4oKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZXZ0LnRvdWNoZXMubGVuZ3RoID09PSAxKSB7CiAgICAgIGlmICh0aGlzLiNwb2ludGVyRG93bkFDKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHBvaW50ZXJEb3duQUMgPSB0aGlzLiNwb2ludGVyRG93bkFDID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICBjb25zdCBzaWduYWwgPSBBYm9ydFNpZ25hbC5hbnkoW3RoaXMuI3NpZ25hbCwgcG9pbnRlckRvd25BQy5zaWduYWxdKTsKICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy4jY29udGFpbmVyOwogICAgICBjb25zdCBvcHRzID0gewogICAgICAgIGNhcHR1cmU6IHRydWUsCiAgICAgICAgc2lnbmFsLAogICAgICAgIHBhc3NpdmU6IGZhbHNlCiAgICAgIH07CiAgICAgIGNvbnN0IGNhbmNlbFBvaW50ZXJEb3duID0gZSA9PiB7CiAgICAgICAgaWYgKGUucG9pbnRlclR5cGUgPT09ICJ0b3VjaCIpIHsKICAgICAgICAgIHRoaXMuI3BvaW50ZXJEb3duQUM/LmFib3J0KCk7CiAgICAgICAgICB0aGlzLiNwb2ludGVyRG93bkFDID0gbnVsbDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsIGUgPT4gewogICAgICAgIGlmIChlLnBvaW50ZXJUeXBlID09PSAidG91Y2giKSB7CiAgICAgICAgICBzdG9wRXZlbnQoZSk7CiAgICAgICAgICBjYW5jZWxQb2ludGVyRG93bihlKTsKICAgICAgICB9CiAgICAgIH0sIG9wdHMpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgY2FuY2VsUG9pbnRlckRvd24sIG9wdHMpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsIGNhbmNlbFBvaW50ZXJEb3duLCBvcHRzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCF0aGlzLiN0b3VjaE1vdmVBQykgewogICAgICB0aGlzLiN0b3VjaE1vdmVBQyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgICAgY29uc3Qgc2lnbmFsID0gQWJvcnRTaWduYWwuYW55KFt0aGlzLiNzaWduYWwsIHRoaXMuI3RvdWNoTW92ZUFDLnNpZ25hbF0pOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLiNjb250YWluZXI7CiAgICAgIGNvbnN0IG9wdCA9IHsKICAgICAgICBzaWduYWwsCiAgICAgICAgY2FwdHVyZTogZmFsc2UsCiAgICAgICAgcGFzc2l2ZTogZmFsc2UKICAgICAgfTsKICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIHRoaXMuI29uVG91Y2hNb3ZlLmJpbmQodGhpcyksIG9wdCk7CiAgICAgIGNvbnN0IG9uVG91Y2hFbmQgPSB0aGlzLiNvblRvdWNoRW5kLmJpbmQodGhpcyk7CiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsIG9uVG91Y2hFbmQsIG9wdCk7CiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGNhbmNlbCIsIG9uVG91Y2hFbmQsIG9wdCk7CiAgICAgIG9wdC5jYXB0dXJlID0gdHJ1ZTsKICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgc3RvcEV2ZW50LCBvcHQpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCBzdG9wRXZlbnQsIG9wdCk7CiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIiwgc3RvcEV2ZW50LCBvcHQpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgc3RvcEV2ZW50LCBvcHQpOwogICAgICB0aGlzLiNvblBpbmNoU3RhcnQ/LigpOwogICAgfQogICAgc3RvcEV2ZW50KGV2dCk7CiAgICBpZiAoZXZ0LnRvdWNoZXMubGVuZ3RoICE9PSAyIHx8IHRoaXMuI2lzUGluY2hpbmdTdG9wcGVkPy4oKSkgewogICAgICB0aGlzLiN0b3VjaEluZm8gPSBudWxsOwogICAgICByZXR1cm47CiAgICB9CiAgICBsZXQgW3RvdWNoMCwgdG91Y2gxXSA9IGV2dC50b3VjaGVzOwogICAgaWYgKHRvdWNoMC5pZGVudGlmaWVyID4gdG91Y2gxLmlkZW50aWZpZXIpIHsKICAgICAgW3RvdWNoMCwgdG91Y2gxXSA9IFt0b3VjaDEsIHRvdWNoMF07CiAgICB9CiAgICB0aGlzLiN0b3VjaEluZm8gPSB7CiAgICAgIHRvdWNoMFg6IHRvdWNoMC5zY3JlZW5YLAogICAgICB0b3VjaDBZOiB0b3VjaDAuc2NyZWVuWSwKICAgICAgdG91Y2gxWDogdG91Y2gxLnNjcmVlblgsCiAgICAgIHRvdWNoMVk6IHRvdWNoMS5zY3JlZW5ZCiAgICB9OwogIH0KICAjb25Ub3VjaE1vdmUoZXZ0KSB7CiAgICBpZiAoIXRoaXMuI3RvdWNoSW5mbyB8fCBldnQudG91Y2hlcy5sZW5ndGggIT09IDIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3RvcEV2ZW50KGV2dCk7CiAgICBsZXQgW3RvdWNoMCwgdG91Y2gxXSA9IGV2dC50b3VjaGVzOwogICAgaWYgKHRvdWNoMC5pZGVudGlmaWVyID4gdG91Y2gxLmlkZW50aWZpZXIpIHsKICAgICAgW3RvdWNoMCwgdG91Y2gxXSA9IFt0b3VjaDEsIHRvdWNoMF07CiAgICB9CiAgICBjb25zdCB7CiAgICAgIHNjcmVlblg6IHNjcmVlbjBYLAogICAgICBzY3JlZW5ZOiBzY3JlZW4wWQogICAgfSA9IHRvdWNoMDsKICAgIGNvbnN0IHsKICAgICAgc2NyZWVuWDogc2NyZWVuMVgsCiAgICAgIHNjcmVlblk6IHNjcmVlbjFZCiAgICB9ID0gdG91Y2gxOwogICAgY29uc3QgdG91Y2hJbmZvID0gdGhpcy4jdG91Y2hJbmZvOwogICAgY29uc3QgewogICAgICB0b3VjaDBYOiBwVG91Y2gwWCwKICAgICAgdG91Y2gwWTogcFRvdWNoMFksCiAgICAgIHRvdWNoMVg6IHBUb3VjaDFYLAogICAgICB0b3VjaDFZOiBwVG91Y2gxWQogICAgfSA9IHRvdWNoSW5mbzsKICAgIGNvbnN0IHByZXZHYXBYID0gcFRvdWNoMVggLSBwVG91Y2gwWDsKICAgIGNvbnN0IHByZXZHYXBZID0gcFRvdWNoMVkgLSBwVG91Y2gwWTsKICAgIGNvbnN0IGN1cnJHYXBYID0gc2NyZWVuMVggLSBzY3JlZW4wWDsKICAgIGNvbnN0IGN1cnJHYXBZID0gc2NyZWVuMVkgLSBzY3JlZW4wWTsKICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5oeXBvdChjdXJyR2FwWCwgY3VyckdhcFkpIHx8IDE7CiAgICBjb25zdCBwRGlzdGFuY2UgPSBNYXRoLmh5cG90KHByZXZHYXBYLCBwcmV2R2FwWSkgfHwgMTsKICAgIGlmICghdGhpcy4jaXNQaW5jaGluZyAmJiBNYXRoLmFicyhwRGlzdGFuY2UgLSBkaXN0YW5jZSkgPD0gVG91Y2hNYW5hZ2VyLk1JTl9UT1VDSF9ESVNUQU5DRV9UT19QSU5DSCkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0b3VjaEluZm8udG91Y2gwWCA9IHNjcmVlbjBYOwogICAgdG91Y2hJbmZvLnRvdWNoMFkgPSBzY3JlZW4wWTsKICAgIHRvdWNoSW5mby50b3VjaDFYID0gc2NyZWVuMVg7CiAgICB0b3VjaEluZm8udG91Y2gxWSA9IHNjcmVlbjFZOwogICAgaWYgKCF0aGlzLiNpc1BpbmNoaW5nKSB7CiAgICAgIHRoaXMuI2lzUGluY2hpbmcgPSB0cnVlOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBvcmlnaW4gPSBbKHNjcmVlbjBYICsgc2NyZWVuMVgpIC8gMiwgKHNjcmVlbjBZICsgc2NyZWVuMVkpIC8gMl07CiAgICB0aGlzLiNvblBpbmNoaW5nPy4ob3JpZ2luLCBwRGlzdGFuY2UsIGRpc3RhbmNlKTsKICB9CiAgI29uVG91Y2hFbmQoZXZ0KSB7CiAgICBpZiAoZXZ0LnRvdWNoZXMubGVuZ3RoID49IDIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuI3RvdWNoTW92ZUFDKSB7CiAgICAgIHRoaXMuI3RvdWNoTW92ZUFDLmFib3J0KCk7CiAgICAgIHRoaXMuI3RvdWNoTW92ZUFDID0gbnVsbDsKICAgICAgdGhpcy4jb25QaW5jaEVuZD8uKCk7CiAgICB9CiAgICBpZiAoIXRoaXMuI3RvdWNoSW5mbykgewogICAgICByZXR1cm47CiAgICB9CiAgICBzdG9wRXZlbnQoZXZ0KTsKICAgIHRoaXMuI3RvdWNoSW5mbyA9IG51bGw7CiAgICB0aGlzLiNpc1BpbmNoaW5nID0gZmFsc2U7CiAgfQogIGRlc3Ryb3koKSB7CiAgICB0aGlzLiN0b3VjaE1hbmFnZXJBQz8uYWJvcnQoKTsKICAgIHRoaXMuI3RvdWNoTWFuYWdlckFDID0gbnVsbDsKICAgIHRoaXMuI3BvaW50ZXJEb3duQUM/LmFib3J0KCk7CiAgICB0aGlzLiNwb2ludGVyRG93bkFDID0gbnVsbDsKICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L2VkaXRvci9lZGl0b3IuanMKCgoKCgoKCmNsYXNzIEFubm90YXRpb25FZGl0b3IgewogICNhY2Nlc3NpYmlsaXR5RGF0YSA9IG51bGw7CiAgI2FsbFJlc2l6ZXJEaXZzID0gbnVsbDsKICAjYWx0VGV4dCA9IG51bGw7CiAgI2NvbW1lbnQgPSBudWxsOwogICNjb21tZW50U3RhbmRhbG9uZUJ1dHRvbiA9IG51bGw7CiAgI2Rpc2FibGVkID0gZmFsc2U7CiAgI2RyYWdQb2ludGVySWQgPSBudWxsOwogICNkcmFnUG9pbnRlclR5cGUgPSAiIjsKICAjcmVzaXplcnNEaXYgPSBudWxsOwogICNsYXN0UG9pbnRlckNvb3JkcyA9IG51bGw7CiAgI3NhdmVkRGltZW5zaW9ucyA9IG51bGw7CiAgI2Zha2VBbm5vdGF0aW9uID0gbnVsbDsKICAjZm9jdXNBQyA9IG51bGw7CiAgI2ZvY3VzZWRSZXNpemVyTmFtZSA9ICIiOwogICNoYXNCZWVuQ2xpY2tlZCA9IGZhbHNlOwogICNpbml0aWFsUmVjdCA9IG51bGw7CiAgI2lzRWRpdGluZyA9IGZhbHNlOwogICNpc0luRWRpdE1vZGUgPSBmYWxzZTsKICAjaXNSZXNpemVyRW5hYmxlZEZvcktleWJvYXJkID0gZmFsc2U7CiAgI21vdmVJbkRPTVRpbWVvdXQgPSBudWxsOwogICNwcmV2RHJhZ1ggPSAwOwogICNwcmV2RHJhZ1kgPSAwOwogICN0ZWxlbWV0cnlUaW1lb3V0cyA9IG51bGw7CiAgI3RvdWNoTWFuYWdlciA9IG51bGw7CiAgaXNTZWxlY3RlZCA9IGZhbHNlOwogIF9pc0NvcHkgPSBmYWxzZTsKICBfZWRpdFRvb2xiYXIgPSBudWxsOwogIF9pbml0aWFsT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgX2luaXRpYWxEYXRhID0gbnVsbDsKICBfaXNWaXNpYmxlID0gdHJ1ZTsKICBfdWlNYW5hZ2VyID0gbnVsbDsKICBfZm9jdXNFdmVudHNBbGxvd2VkID0gdHJ1ZTsKICBzdGF0aWMgX2wxMG4gPSBudWxsOwogIHN0YXRpYyBfbDEwblJlc2l6ZXIgPSBudWxsOwogICNpc0RyYWdnYWJsZSA9IGZhbHNlOwogICN6SW5kZXggPSBBbm5vdGF0aW9uRWRpdG9yLl96SW5kZXgrKzsKICBzdGF0aWMgX2JvcmRlckxpbmVXaWR0aCA9IC0xOwogIHN0YXRpYyBfY29sb3JNYW5hZ2VyID0gbmV3IENvbG9yTWFuYWdlcigpOwogIHN0YXRpYyBfekluZGV4ID0gMTsKICBzdGF0aWMgX3RlbGVtZXRyeVRpbWVvdXQgPSAxMDAwOwogIHN0YXRpYyBnZXQgX3Jlc2l6ZXJLZXlib2FyZE1hbmFnZXIoKSB7CiAgICBjb25zdCByZXNpemUgPSBBbm5vdGF0aW9uRWRpdG9yLnByb3RvdHlwZS5fcmVzaXplV2l0aEtleWJvYXJkOwogICAgY29uc3Qgc21hbGwgPSBBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyLlRSQU5TTEFURV9TTUFMTDsKICAgIGNvbnN0IGJpZyA9IEFubm90YXRpb25FZGl0b3JVSU1hbmFnZXIuVFJBTlNMQVRFX0JJRzsKICAgIHJldHVybiBzaGFkb3codGhpcywgIl9yZXNpemVyS2V5Ym9hcmRNYW5hZ2VyIiwgbmV3IEtleWJvYXJkTWFuYWdlcihbW1siQXJyb3dMZWZ0IiwgIm1hYytBcnJvd0xlZnQiXSwgcmVzaXplLCB7CiAgICAgIGFyZ3M6IFstc21hbGwsIDBdCiAgICB9XSwgW1siY3RybCtBcnJvd0xlZnQiLCAibWFjK3NoaWZ0K0Fycm93TGVmdCJdLCByZXNpemUsIHsKICAgICAgYXJnczogWy1iaWcsIDBdCiAgICB9XSwgW1siQXJyb3dSaWdodCIsICJtYWMrQXJyb3dSaWdodCJdLCByZXNpemUsIHsKICAgICAgYXJnczogW3NtYWxsLCAwXQogICAgfV0sIFtbImN0cmwrQXJyb3dSaWdodCIsICJtYWMrc2hpZnQrQXJyb3dSaWdodCJdLCByZXNpemUsIHsKICAgICAgYXJnczogW2JpZywgMF0KICAgIH1dLCBbWyJBcnJvd1VwIiwgIm1hYytBcnJvd1VwIl0sIHJlc2l6ZSwgewogICAgICBhcmdzOiBbMCwgLXNtYWxsXQogICAgfV0sIFtbImN0cmwrQXJyb3dVcCIsICJtYWMrc2hpZnQrQXJyb3dVcCJdLCByZXNpemUsIHsKICAgICAgYXJnczogWzAsIC1iaWddCiAgICB9XSwgW1siQXJyb3dEb3duIiwgIm1hYytBcnJvd0Rvd24iXSwgcmVzaXplLCB7CiAgICAgIGFyZ3M6IFswLCBzbWFsbF0KICAgIH1dLCBbWyJjdHJsK0Fycm93RG93biIsICJtYWMrc2hpZnQrQXJyb3dEb3duIl0sIHJlc2l6ZSwgewogICAgICBhcmdzOiBbMCwgYmlnXQogICAgfV0sIFtbIkVzY2FwZSIsICJtYWMrRXNjYXBlIl0sIEFubm90YXRpb25FZGl0b3IucHJvdG90eXBlLl9zdG9wUmVzaXppbmdXaXRoS2V5Ym9hcmRdXSkpOwogIH0KICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7CiAgICB0aGlzLnBhcmVudCA9IHBhcmFtZXRlcnMucGFyZW50OwogICAgdGhpcy5pZCA9IHBhcmFtZXRlcnMuaWQ7CiAgICB0aGlzLndpZHRoID0gdGhpcy5oZWlnaHQgPSBudWxsOwogICAgdGhpcy5wYWdlSW5kZXggPSBwYXJhbWV0ZXJzLnBhcmVudC5wYWdlSW5kZXg7CiAgICB0aGlzLm5hbWUgPSBwYXJhbWV0ZXJzLm5hbWU7CiAgICB0aGlzLmRpdiA9IG51bGw7CiAgICB0aGlzLl91aU1hbmFnZXIgPSBwYXJhbWV0ZXJzLnVpTWFuYWdlcjsKICAgIHRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCA9IG51bGw7CiAgICB0aGlzLl93aWxsS2VlcEFzcGVjdFJhdGlvID0gZmFsc2U7CiAgICB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc0NlbnRlcmVkID0gcGFyYW1ldGVycy5pc0NlbnRlcmVkOwogICAgdGhpcy5fc3RydWN0VHJlZVBhcmVudElkID0gbnVsbDsKICAgIHRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCA9IHBhcmFtZXRlcnMuYW5ub3RhdGlvbkVsZW1lbnRJZCB8fCBudWxsOwogICAgdGhpcy5jcmVhdGlvbkRhdGUgPSBwYXJhbWV0ZXJzLmNyZWF0aW9uRGF0ZSB8fCBuZXcgRGF0ZSgpOwogICAgdGhpcy5tb2RpZmljYXRpb25EYXRlID0gcGFyYW1ldGVycy5tb2RpZmljYXRpb25EYXRlIHx8IG51bGw7CiAgICB0aGlzLmNhbkFkZENvbW1lbnQgPSB0cnVlOwogICAgY29uc3QgewogICAgICByb3RhdGlvbiwKICAgICAgcmF3RGltczogewogICAgICAgIHBhZ2VXaWR0aCwKICAgICAgICBwYWdlSGVpZ2h0LAogICAgICAgIHBhZ2VYLAogICAgICAgIHBhZ2VZCiAgICAgIH0KICAgIH0gPSB0aGlzLnBhcmVudC52aWV3cG9ydDsKICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbjsKICAgIHRoaXMucGFnZVJvdGF0aW9uID0gKDM2MCArIHJvdGF0aW9uIC0gdGhpcy5fdWlNYW5hZ2VyLnZpZXdQYXJhbWV0ZXJzLnJvdGF0aW9uKSAlIDM2MDsKICAgIHRoaXMucGFnZURpbWVuc2lvbnMgPSBbcGFnZVdpZHRoLCBwYWdlSGVpZ2h0XTsKICAgIHRoaXMucGFnZVRyYW5zbGF0aW9uID0gW3BhZ2VYLCBwYWdlWV07CiAgICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnM7CiAgICB0aGlzLnggPSBwYXJhbWV0ZXJzLnggLyB3aWR0aDsKICAgIHRoaXMueSA9IHBhcmFtZXRlcnMueSAvIGhlaWdodDsKICAgIHRoaXMuaXNBdHRhY2hlZFRvRE9NID0gZmFsc2U7CiAgICB0aGlzLmRlbGV0ZWQgPSBmYWxzZTsKICB9CiAgZ2V0IGVkaXRvclR5cGUoKSB7CiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yLl90eXBlOwogIH0KICBnZXQgbW9kZSgpIHsKICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IuX2VkaXRvclR5cGU7CiAgfQogIHN0YXRpYyBnZXQgaXNEcmF3ZXIoKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHN0YXRpYyBnZXQgX2RlZmF1bHRMaW5lQ29sb3IoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJfZGVmYXVsdExpbmVDb2xvciIsIHRoaXMuX2NvbG9yTWFuYWdlci5nZXRIZXhDb2RlKCJDYW52YXNUZXh0IikpOwogIH0KICBzdGF0aWMgZGVsZXRlQW5ub3RhdGlvbkVsZW1lbnQoZWRpdG9yKSB7CiAgICBjb25zdCBmYWtlRWRpdG9yID0gbmV3IEZha2VFZGl0b3IoewogICAgICBpZDogZWRpdG9yLnBhcmVudC5nZXROZXh0SWQoKSwKICAgICAgcGFyZW50OiBlZGl0b3IucGFyZW50LAogICAgICB1aU1hbmFnZXI6IGVkaXRvci5fdWlNYW5hZ2VyCiAgICB9KTsKICAgIGZha2VFZGl0b3IuYW5ub3RhdGlvbkVsZW1lbnRJZCA9IGVkaXRvci5hbm5vdGF0aW9uRWxlbWVudElkOwogICAgZmFrZUVkaXRvci5kZWxldGVkID0gdHJ1ZTsKICAgIGZha2VFZGl0b3IuX3VpTWFuYWdlci5hZGRUb0Fubm90YXRpb25TdG9yYWdlKGZha2VFZGl0b3IpOwogIH0KICBzdGF0aWMgaW5pdGlhbGl6ZShsMTBuLCBfdWlNYW5hZ2VyKSB7CiAgICBBbm5vdGF0aW9uRWRpdG9yLl9sMTBuID8/PSBsMTBuOwogICAgQW5ub3RhdGlvbkVkaXRvci5fbDEwblJlc2l6ZXIgfHw9IE9iamVjdC5mcmVlemUoewogICAgICB0b3BMZWZ0OiAicGRmanMtZWRpdG9yLXJlc2l6ZXItdG9wLWxlZnQiLAogICAgICB0b3BNaWRkbGU6ICJwZGZqcy1lZGl0b3ItcmVzaXplci10b3AtbWlkZGxlIiwKICAgICAgdG9wUmlnaHQ6ICJwZGZqcy1lZGl0b3ItcmVzaXplci10b3AtcmlnaHQiLAogICAgICBtaWRkbGVSaWdodDogInBkZmpzLWVkaXRvci1yZXNpemVyLW1pZGRsZS1yaWdodCIsCiAgICAgIGJvdHRvbVJpZ2h0OiAicGRmanMtZWRpdG9yLXJlc2l6ZXItYm90dG9tLXJpZ2h0IiwKICAgICAgYm90dG9tTWlkZGxlOiAicGRmanMtZWRpdG9yLXJlc2l6ZXItYm90dG9tLW1pZGRsZSIsCiAgICAgIGJvdHRvbUxlZnQ6ICJwZGZqcy1lZGl0b3ItcmVzaXplci1ib3R0b20tbGVmdCIsCiAgICAgIG1pZGRsZUxlZnQ6ICJwZGZqcy1lZGl0b3ItcmVzaXplci1taWRkbGUtbGVmdCIKICAgIH0pOwogICAgaWYgKEFubm90YXRpb25FZGl0b3IuX2JvcmRlckxpbmVXaWR0aCAhPT0gLTEpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICBBbm5vdGF0aW9uRWRpdG9yLl9ib3JkZXJMaW5lV2lkdGggPSBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tb3V0bGluZS13aWR0aCIpKSB8fCAwOwogIH0KICBzdGF0aWMgdXBkYXRlRGVmYXVsdFBhcmFtcyhfdHlwZSwgX3ZhbHVlKSB7fQogIHN0YXRpYyBnZXQgZGVmYXVsdFByb3BlcnRpZXNUb1VwZGF0ZSgpIHsKICAgIHJldHVybiBbXTsKICB9CiAgc3RhdGljIGlzSGFuZGxpbmdNaW1lRm9yUGFzdGluZyhtaW1lKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHN0YXRpYyBwYXN0ZShpdGVtLCBwYXJlbnQpIHsKICAgIHVucmVhY2hhYmxlKCJOb3QgaW1wbGVtZW50ZWQiKTsKICB9CiAgZ2V0IHByb3BlcnRpZXNUb1VwZGF0ZSgpIHsKICAgIHJldHVybiBbXTsKICB9CiAgZ2V0IF9pc0RyYWdnYWJsZSgpIHsKICAgIHJldHVybiB0aGlzLiNpc0RyYWdnYWJsZTsKICB9CiAgc2V0IF9pc0RyYWdnYWJsZSh2YWx1ZSkgewogICAgdGhpcy4jaXNEcmFnZ2FibGUgPSB2YWx1ZTsKICAgIHRoaXMuZGl2Py5jbGFzc0xpc3QudG9nZ2xlKCJkcmFnZ2FibGUiLCB2YWx1ZSk7CiAgfQogIGdldCB1aWQoKSB7CiAgICByZXR1cm4gdGhpcy5hbm5vdGF0aW9uRWxlbWVudElkIHx8IHRoaXMuaWQ7CiAgfQogIGdldCBpc0VudGVySGFuZGxlZCgpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBjZW50ZXIoKSB7CiAgICBjb25zdCBbcGFnZVdpZHRoLCBwYWdlSGVpZ2h0XSA9IHRoaXMucGFnZURpbWVuc2lvbnM7CiAgICBzd2l0Y2ggKHRoaXMucGFyZW50Um90YXRpb24pIHsKICAgICAgY2FzZSA5MDoKICAgICAgICB0aGlzLnggLT0gdGhpcy5oZWlnaHQgKiBwYWdlSGVpZ2h0IC8gKHBhZ2VXaWR0aCAqIDIpOwogICAgICAgIHRoaXMueSArPSB0aGlzLndpZHRoICogcGFnZVdpZHRoIC8gKHBhZ2VIZWlnaHQgKiAyKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxODA6CiAgICAgICAgdGhpcy54ICs9IHRoaXMud2lkdGggLyAyOwogICAgICAgIHRoaXMueSArPSB0aGlzLmhlaWdodCAvIDI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjcwOgogICAgICAgIHRoaXMueCArPSB0aGlzLmhlaWdodCAqIHBhZ2VIZWlnaHQgLyAocGFnZVdpZHRoICogMik7CiAgICAgICAgdGhpcy55IC09IHRoaXMud2lkdGggKiBwYWdlV2lkdGggLyAocGFnZUhlaWdodCAqIDIpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRoaXMueCAtPSB0aGlzLndpZHRoIC8gMjsKICAgICAgICB0aGlzLnkgLT0gdGhpcy5oZWlnaHQgLyAyOwogICAgICAgIGJyZWFrOwogICAgfQogICAgdGhpcy5maXhBbmRTZXRQb3NpdGlvbigpOwogIH0KICBhZGRDb21tYW5kcyhwYXJhbXMpIHsKICAgIHRoaXMuX3VpTWFuYWdlci5hZGRDb21tYW5kcyhwYXJhbXMpOwogIH0KICBnZXQgY3VycmVudExheWVyKCkgewogICAgcmV0dXJuIHRoaXMuX3VpTWFuYWdlci5jdXJyZW50TGF5ZXI7CiAgfQogIHNldEluQmFja2dyb3VuZCgpIHsKICAgIHRoaXMuZGl2LnN0eWxlLnpJbmRleCA9IDA7CiAgfQogIHNldEluRm9yZWdyb3VuZCgpIHsKICAgIHRoaXMuZGl2LnN0eWxlLnpJbmRleCA9IHRoaXMuI3pJbmRleDsKICB9CiAgc2V0UGFyZW50KHBhcmVudCkgewogICAgaWYgKHBhcmVudCAhPT0gbnVsbCkgewogICAgICB0aGlzLnBhZ2VJbmRleCA9IHBhcmVudC5wYWdlSW5kZXg7CiAgICAgIHRoaXMucGFnZURpbWVuc2lvbnMgPSBwYXJlbnQucGFnZURpbWVuc2lvbnM7CiAgICB9IGVsc2UgewogICAgICB0aGlzLiNzdG9wUmVzaXppbmcoKTsKICAgICAgdGhpcy4jZmFrZUFubm90YXRpb24/LnJlbW92ZSgpOwogICAgICB0aGlzLiNmYWtlQW5ub3RhdGlvbiA9IG51bGw7CiAgICB9CiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDsKICB9CiAgZm9jdXNpbihldmVudCkgewogICAgaWYgKCF0aGlzLl9mb2N1c0V2ZW50c0FsbG93ZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCF0aGlzLiNoYXNCZWVuQ2xpY2tlZCkgewogICAgICB0aGlzLnBhcmVudC5zZXRTZWxlY3RlZCh0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuI2hhc0JlZW5DbGlja2VkID0gZmFsc2U7CiAgICB9CiAgfQogIGZvY3Vzb3V0KGV2ZW50KSB7CiAgICBpZiAoIXRoaXMuX2ZvY3VzRXZlbnRzQWxsb3dlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXRoaXMuaXNBdHRhY2hlZFRvRE9NKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7CiAgICBpZiAodGFyZ2V0Py5jbG9zZXN0KGAjJHt0aGlzLmlkfWApKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoIXRoaXMucGFyZW50Py5pc011bHRpcGxlU2VsZWN0aW9uKSB7CiAgICAgIHRoaXMuY29tbWl0T3JSZW1vdmUoKTsKICAgIH0KICB9CiAgY29tbWl0T3JSZW1vdmUoKSB7CiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKICAgICAgdGhpcy5yZW1vdmUoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuY29tbWl0KCk7CiAgICB9CiAgfQogIGNvbW1pdCgpIHsKICAgIGlmICghdGhpcy5pc0luRWRpdE1vZGUoKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmFkZFRvQW5ub3RhdGlvblN0b3JhZ2UoKTsKICB9CiAgYWRkVG9Bbm5vdGF0aW9uU3RvcmFnZSgpIHsKICAgIHRoaXMuX3VpTWFuYWdlci5hZGRUb0Fubm90YXRpb25TdG9yYWdlKHRoaXMpOwogIH0KICBzZXRBdCh4LCB5LCB0eCwgdHkpIHsKICAgIGNvbnN0IFt3aWR0aCwgaGVpZ2h0XSA9IHRoaXMucGFyZW50RGltZW5zaW9uczsKICAgIFt0eCwgdHldID0gdGhpcy5zY3JlZW5Ub1BhZ2VUcmFuc2xhdGlvbih0eCwgdHkpOwogICAgdGhpcy54ID0gKHggKyB0eCkgLyB3aWR0aDsKICAgIHRoaXMueSA9ICh5ICsgdHkpIC8gaGVpZ2h0OwogICAgdGhpcy5maXhBbmRTZXRQb3NpdGlvbigpOwogIH0KICBfbW92ZUFmdGVyUGFzdGUoYmFzZVgsIGJhc2VZKSB7CiAgICBjb25zdCBbcGFyZW50V2lkdGgsIHBhcmVudEhlaWdodF0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnM7CiAgICB0aGlzLnNldEF0KGJhc2VYICogcGFyZW50V2lkdGgsIGJhc2VZICogcGFyZW50SGVpZ2h0LCB0aGlzLndpZHRoICogcGFyZW50V2lkdGgsIHRoaXMuaGVpZ2h0ICogcGFyZW50SGVpZ2h0KTsKICAgIHRoaXMuX29uVHJhbnNsYXRlZCgpOwogIH0KICAjdHJhbnNsYXRlKFt3aWR0aCwgaGVpZ2h0XSwgeCwgeSkgewogICAgW3gsIHldID0gdGhpcy5zY3JlZW5Ub1BhZ2VUcmFuc2xhdGlvbih4LCB5KTsKICAgIHRoaXMueCArPSB4IC8gd2lkdGg7CiAgICB0aGlzLnkgKz0geSAvIGhlaWdodDsKICAgIHRoaXMuX29uVHJhbnNsYXRpbmcodGhpcy54LCB0aGlzLnkpOwogICAgdGhpcy5maXhBbmRTZXRQb3NpdGlvbigpOwogIH0KICB0cmFuc2xhdGUoeCwgeSkgewogICAgdGhpcy4jdHJhbnNsYXRlKHRoaXMucGFyZW50RGltZW5zaW9ucywgeCwgeSk7CiAgfQogIHRyYW5zbGF0ZUluUGFnZSh4LCB5KSB7CiAgICB0aGlzLiNpbml0aWFsUmVjdCB8fD0gW3RoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF07CiAgICB0aGlzLiN0cmFuc2xhdGUodGhpcy5wYWdlRGltZW5zaW9ucywgeCwgeSk7CiAgICB0aGlzLmRpdi5zY3JvbGxJbnRvVmlldyh7CiAgICAgIGJsb2NrOiAibmVhcmVzdCIKICAgIH0pOwogIH0KICB0cmFuc2xhdGlvbkRvbmUoKSB7CiAgICB0aGlzLl9vblRyYW5zbGF0ZWQodGhpcy54LCB0aGlzLnkpOwogIH0KICBkcmFnKHR4LCB0eSkgewogICAgdGhpcy4jaW5pdGlhbFJlY3QgfHw9IFt0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdOwogICAgY29uc3QgewogICAgICBkaXYsCiAgICAgIHBhcmVudERpbWVuc2lvbnM6IFtwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0XQogICAgfSA9IHRoaXM7CiAgICB0aGlzLnggKz0gdHggLyBwYXJlbnRXaWR0aDsKICAgIHRoaXMueSArPSB0eSAvIHBhcmVudEhlaWdodDsKICAgIGlmICh0aGlzLnBhcmVudCAmJiAodGhpcy54IDwgMCB8fCB0aGlzLnggPiAxIHx8IHRoaXMueSA8IDAgfHwgdGhpcy55ID4gMSkpIHsKICAgICAgY29uc3QgewogICAgICAgIHgsCiAgICAgICAgeQogICAgICB9ID0gdGhpcy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGlmICh0aGlzLnBhcmVudC5maW5kTmV3UGFyZW50KHRoaXMsIHgsIHkpKSB7CiAgICAgICAgdGhpcy54IC09IE1hdGguZmxvb3IodGhpcy54KTsKICAgICAgICB0aGlzLnkgLT0gTWF0aC5mbG9vcih0aGlzLnkpOwogICAgICB9CiAgICB9CiAgICBsZXQgewogICAgICB4LAogICAgICB5CiAgICB9ID0gdGhpczsKICAgIGNvbnN0IFtieCwgYnldID0gdGhpcy5nZXRCYXNlVHJhbnNsYXRpb24oKTsKICAgIHggKz0gYng7CiAgICB5ICs9IGJ5OwogICAgY29uc3QgewogICAgICBzdHlsZQogICAgfSA9IGRpdjsKICAgIHN0eWxlLmxlZnQgPSBgJHsoMTAwICogeCkudG9GaXhlZCgyKX0lYDsKICAgIHN0eWxlLnRvcCA9IGAkeygxMDAgKiB5KS50b0ZpeGVkKDIpfSVgOwogICAgdGhpcy5fb25UcmFuc2xhdGluZyh4LCB5KTsKICAgIGRpdi5zY3JvbGxJbnRvVmlldyh7CiAgICAgIGJsb2NrOiAibmVhcmVzdCIKICAgIH0pOwogIH0KICBfb25UcmFuc2xhdGluZyh4LCB5KSB7fQogIF9vblRyYW5zbGF0ZWQoeCwgeSkge30KICBnZXQgX2hhc0JlZW5Nb3ZlZCgpIHsKICAgIHJldHVybiAhIXRoaXMuI2luaXRpYWxSZWN0ICYmICh0aGlzLiNpbml0aWFsUmVjdFswXSAhPT0gdGhpcy54IHx8IHRoaXMuI2luaXRpYWxSZWN0WzFdICE9PSB0aGlzLnkpOwogIH0KICBnZXQgX2hhc0JlZW5SZXNpemVkKCkgewogICAgcmV0dXJuICEhdGhpcy4jaW5pdGlhbFJlY3QgJiYgKHRoaXMuI2luaXRpYWxSZWN0WzJdICE9PSB0aGlzLndpZHRoIHx8IHRoaXMuI2luaXRpYWxSZWN0WzNdICE9PSB0aGlzLmhlaWdodCk7CiAgfQogIGdldEJhc2VUcmFuc2xhdGlvbigpIHsKICAgIGNvbnN0IFtwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0XSA9IHRoaXMucGFyZW50RGltZW5zaW9uczsKICAgIGNvbnN0IHsKICAgICAgX2JvcmRlckxpbmVXaWR0aAogICAgfSA9IEFubm90YXRpb25FZGl0b3I7CiAgICBjb25zdCB4ID0gX2JvcmRlckxpbmVXaWR0aCAvIHBhcmVudFdpZHRoOwogICAgY29uc3QgeSA9IF9ib3JkZXJMaW5lV2lkdGggLyBwYXJlbnRIZWlnaHQ7CiAgICBzd2l0Y2ggKHRoaXMucm90YXRpb24pIHsKICAgICAgY2FzZSA5MDoKICAgICAgICByZXR1cm4gWy14LCB5XTsKICAgICAgY2FzZSAxODA6CiAgICAgICAgcmV0dXJuIFt4LCB5XTsKICAgICAgY2FzZSAyNzA6CiAgICAgICAgcmV0dXJuIFt4LCAteV07CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIFsteCwgLXldOwogICAgfQogIH0KICBnZXQgX211c3RGaXhQb3NpdGlvbigpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBmaXhBbmRTZXRQb3NpdGlvbihyb3RhdGlvbiA9IHRoaXMucm90YXRpb24pIHsKICAgIGNvbnN0IHsKICAgICAgZGl2OiB7CiAgICAgICAgc3R5bGUKICAgICAgfSwKICAgICAgcGFnZURpbWVuc2lvbnM6IFtwYWdlV2lkdGgsIHBhZ2VIZWlnaHRdCiAgICB9ID0gdGhpczsKICAgIGxldCB7CiAgICAgIHgsCiAgICAgIHksCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQKICAgIH0gPSB0aGlzOwogICAgd2lkdGggKj0gcGFnZVdpZHRoOwogICAgaGVpZ2h0ICo9IHBhZ2VIZWlnaHQ7CiAgICB4ICo9IHBhZ2VXaWR0aDsKICAgIHkgKj0gcGFnZUhlaWdodDsKICAgIGlmICh0aGlzLl9tdXN0Rml4UG9zaXRpb24pIHsKICAgICAgc3dpdGNoIChyb3RhdGlvbikgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIHggPSBNYXRoQ2xhbXAoeCwgMCwgcGFnZVdpZHRoIC0gd2lkdGgpOwogICAgICAgICAgeSA9IE1hdGhDbGFtcCh5LCAwLCBwYWdlSGVpZ2h0IC0gaGVpZ2h0KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgOTA6CiAgICAgICAgICB4ID0gTWF0aENsYW1wKHgsIDAsIHBhZ2VXaWR0aCAtIGhlaWdodCk7CiAgICAgICAgICB5ID0gTWF0aENsYW1wKHksIHdpZHRoLCBwYWdlSGVpZ2h0KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMTgwOgogICAgICAgICAgeCA9IE1hdGhDbGFtcCh4LCB3aWR0aCwgcGFnZVdpZHRoKTsKICAgICAgICAgIHkgPSBNYXRoQ2xhbXAoeSwgaGVpZ2h0LCBwYWdlSGVpZ2h0KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjcwOgogICAgICAgICAgeCA9IE1hdGhDbGFtcCh4LCBoZWlnaHQsIHBhZ2VXaWR0aCk7CiAgICAgICAgICB5ID0gTWF0aENsYW1wKHksIDAsIHBhZ2VIZWlnaHQgLSB3aWR0aCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgdGhpcy54ID0geCAvPSBwYWdlV2lkdGg7CiAgICB0aGlzLnkgPSB5IC89IHBhZ2VIZWlnaHQ7CiAgICBjb25zdCBbYngsIGJ5XSA9IHRoaXMuZ2V0QmFzZVRyYW5zbGF0aW9uKCk7CiAgICB4ICs9IGJ4OwogICAgeSArPSBieTsKICAgIHN0eWxlLmxlZnQgPSBgJHsoMTAwICogeCkudG9GaXhlZCgyKX0lYDsKICAgIHN0eWxlLnRvcCA9IGAkeygxMDAgKiB5KS50b0ZpeGVkKDIpfSVgOwogICAgdGhpcy5tb3ZlSW5ET00oKTsKICB9CiAgc3RhdGljICNyb3RhdGVQb2ludCh4LCB5LCBhbmdsZSkgewogICAgc3dpdGNoIChhbmdsZSkgewogICAgICBjYXNlIDkwOgogICAgICAgIHJldHVybiBbeSwgLXhdOwogICAgICBjYXNlIDE4MDoKICAgICAgICByZXR1cm4gWy14LCAteV07CiAgICAgIGNhc2UgMjcwOgogICAgICAgIHJldHVybiBbLXksIHhdOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBbeCwgeV07CiAgICB9CiAgfQogIHNjcmVlblRvUGFnZVRyYW5zbGF0aW9uKHgsIHkpIHsKICAgIHJldHVybiBBbm5vdGF0aW9uRWRpdG9yLiNyb3RhdGVQb2ludCh4LCB5LCB0aGlzLnBhcmVudFJvdGF0aW9uKTsKICB9CiAgcGFnZVRyYW5zbGF0aW9uVG9TY3JlZW4oeCwgeSkgewogICAgcmV0dXJuIEFubm90YXRpb25FZGl0b3IuI3JvdGF0ZVBvaW50KHgsIHksIDM2MCAtIHRoaXMucGFyZW50Um90YXRpb24pOwogIH0KICAjZ2V0Um90YXRpb25NYXRyaXgocm90YXRpb24pIHsKICAgIHN3aXRjaCAocm90YXRpb24pIHsKICAgICAgY2FzZSA5MDoKICAgICAgICB7CiAgICAgICAgICBjb25zdCBbcGFnZVdpZHRoLCBwYWdlSGVpZ2h0XSA9IHRoaXMucGFnZURpbWVuc2lvbnM7CiAgICAgICAgICByZXR1cm4gWzAsIC1wYWdlV2lkdGggLyBwYWdlSGVpZ2h0LCBwYWdlSGVpZ2h0IC8gcGFnZVdpZHRoLCAwXTsKICAgICAgICB9CiAgICAgIGNhc2UgMTgwOgogICAgICAgIHJldHVybiBbLTEsIDAsIDAsIC0xXTsKICAgICAgY2FzZSAyNzA6CiAgICAgICAgewogICAgICAgICAgY29uc3QgW3BhZ2VXaWR0aCwgcGFnZUhlaWdodF0gPSB0aGlzLnBhZ2VEaW1lbnNpb25zOwogICAgICAgICAgcmV0dXJuIFswLCBwYWdlV2lkdGggLyBwYWdlSGVpZ2h0LCAtcGFnZUhlaWdodCAvIHBhZ2VXaWR0aCwgMF07CiAgICAgICAgfQogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBbMSwgMCwgMCwgMV07CiAgICB9CiAgfQogIGdldCBwYXJlbnRTY2FsZSgpIHsKICAgIHJldHVybiB0aGlzLl91aU1hbmFnZXIudmlld1BhcmFtZXRlcnMucmVhbFNjYWxlOwogIH0KICBnZXQgcGFyZW50Um90YXRpb24oKSB7CiAgICByZXR1cm4gKHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yb3RhdGlvbiArIHRoaXMucGFnZVJvdGF0aW9uKSAlIDM2MDsKICB9CiAgZ2V0IHBhcmVudERpbWVuc2lvbnMoKSB7CiAgICBjb25zdCB7CiAgICAgIHBhcmVudFNjYWxlLAogICAgICBwYWdlRGltZW5zaW9uczogW3BhZ2VXaWR0aCwgcGFnZUhlaWdodF0KICAgIH0gPSB0aGlzOwogICAgcmV0dXJuIFtwYWdlV2lkdGggKiBwYXJlbnRTY2FsZSwgcGFnZUhlaWdodCAqIHBhcmVudFNjYWxlXTsKICB9CiAgc2V0RGltcygpIHsKICAgIGNvbnN0IHsKICAgICAgZGl2OiB7CiAgICAgICAgc3R5bGUKICAgICAgfSwKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfSA9IHRoaXM7CiAgICBzdHlsZS53aWR0aCA9IGAkeygxMDAgKiB3aWR0aCkudG9GaXhlZCgyKX0lYDsKICAgIHN0eWxlLmhlaWdodCA9IGAkeygxMDAgKiBoZWlnaHQpLnRvRml4ZWQoMil9JWA7CiAgfQogIGdldEluaXRpYWxUcmFuc2xhdGlvbigpIHsKICAgIHJldHVybiBbMCwgMF07CiAgfQogICNjcmVhdGVSZXNpemVycygpIHsKICAgIGlmICh0aGlzLiNyZXNpemVyc0RpdikgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNyZXNpemVyc0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy4jcmVzaXplcnNEaXYuY2xhc3NMaXN0LmFkZCgicmVzaXplcnMiKTsKICAgIGNvbnN0IGNsYXNzZXMgPSB0aGlzLl93aWxsS2VlcEFzcGVjdFJhdGlvID8gWyJ0b3BMZWZ0IiwgInRvcFJpZ2h0IiwgImJvdHRvbVJpZ2h0IiwgImJvdHRvbUxlZnQiXSA6IFsidG9wTGVmdCIsICJ0b3BNaWRkbGUiLCAidG9wUmlnaHQiLCAibWlkZGxlUmlnaHQiLCAiYm90dG9tUmlnaHQiLCAiYm90dG9tTWlkZGxlIiwgImJvdHRvbUxlZnQiLCAibWlkZGxlTGVmdCJdOwogICAgY29uc3Qgc2lnbmFsID0gdGhpcy5fdWlNYW5hZ2VyLl9zaWduYWw7CiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgY2xhc3NlcykgewogICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgdGhpcy4jcmVzaXplcnNEaXYuYXBwZW5kKGRpdik7CiAgICAgIGRpdi5jbGFzc0xpc3QuYWRkKCJyZXNpemVyIiwgbmFtZSk7CiAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoImRhdGEtcmVzaXplci1uYW1lIiwgbmFtZSk7CiAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsIHRoaXMuI3Jlc2l6ZXJQb2ludGVyZG93bi5iaW5kKHRoaXMsIG5hbWUpLCB7CiAgICAgICAgc2lnbmFsCiAgICAgIH0pOwogICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCBub0NvbnRleHRNZW51LCB7CiAgICAgICAgc2lnbmFsCiAgICAgIH0pOwogICAgICBkaXYudGFiSW5kZXggPSAtMTsKICAgIH0KICAgIHRoaXMuZGl2LnByZXBlbmQodGhpcy4jcmVzaXplcnNEaXYpOwogIH0KICAjcmVzaXplclBvaW50ZXJkb3duKG5hbWUsIGV2ZW50KSB7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgY29uc3QgewogICAgICBpc01hYwogICAgfSA9IHV0aWxfRmVhdHVyZVRlc3QucGxhdGZvcm07CiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwIHx8IGV2ZW50LmN0cmxLZXkgJiYgaXNNYWMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jYWx0VGV4dD8udG9nZ2xlKGZhbHNlKTsKICAgIGNvbnN0IHNhdmVkRHJhZ2dhYmxlID0gdGhpcy5faXNEcmFnZ2FibGU7CiAgICB0aGlzLl9pc0RyYWdnYWJsZSA9IGZhbHNlOwogICAgdGhpcy4jbGFzdFBvaW50ZXJDb29yZHMgPSBbZXZlbnQuc2NyZWVuWCwgZXZlbnQuc2NyZWVuWV07CiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX3VpTWFuYWdlci5jb21iaW5lZFNpZ25hbChhYyk7CiAgICB0aGlzLnBhcmVudC50b2dnbGVQb2ludGVyRXZlbnRzKGZhbHNlKTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIHRoaXMuI3Jlc2l6ZXJQb2ludGVybW92ZS5iaW5kKHRoaXMsIG5hbWUpLCB7CiAgICAgIHBhc3NpdmU6IHRydWUsCiAgICAgIGNhcHR1cmU6IHRydWUsCiAgICAgIHNpZ25hbAogICAgfSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgc3RvcEV2ZW50LCB7CiAgICAgIHBhc3NpdmU6IGZhbHNlLAogICAgICBzaWduYWwKICAgIH0pOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iiwgbm9Db250ZXh0TWVudSwgewogICAgICBzaWduYWwKICAgIH0pOwogICAgdGhpcy4jc2F2ZWREaW1lbnNpb25zID0gewogICAgICBzYXZlZFg6IHRoaXMueCwKICAgICAgc2F2ZWRZOiB0aGlzLnksCiAgICAgIHNhdmVkV2lkdGg6IHRoaXMud2lkdGgsCiAgICAgIHNhdmVkSGVpZ2h0OiB0aGlzLmhlaWdodAogICAgfTsKICAgIGNvbnN0IHNhdmVkUGFyZW50Q3Vyc29yID0gdGhpcy5wYXJlbnQuZGl2LnN0eWxlLmN1cnNvcjsKICAgIGNvbnN0IHNhdmVkQ3Vyc29yID0gdGhpcy5kaXYuc3R5bGUuY3Vyc29yOwogICAgdGhpcy5kaXYuc3R5bGUuY3Vyc29yID0gdGhpcy5wYXJlbnQuZGl2LnN0eWxlLmN1cnNvciA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGV2ZW50LnRhcmdldCkuY3Vyc29yOwogICAgY29uc3QgcG9pbnRlclVwQ2FsbGJhY2sgPSAoKSA9PiB7CiAgICAgIGFjLmFib3J0KCk7CiAgICAgIHRoaXMucGFyZW50LnRvZ2dsZVBvaW50ZXJFdmVudHModHJ1ZSk7CiAgICAgIHRoaXMuI2FsdFRleHQ/LnRvZ2dsZSh0cnVlKTsKICAgICAgdGhpcy5faXNEcmFnZ2FibGUgPSBzYXZlZERyYWdnYWJsZTsKICAgICAgdGhpcy5wYXJlbnQuZGl2LnN0eWxlLmN1cnNvciA9IHNhdmVkUGFyZW50Q3Vyc29yOwogICAgICB0aGlzLmRpdi5zdHlsZS5jdXJzb3IgPSBzYXZlZEN1cnNvcjsKICAgICAgdGhpcy4jYWRkUmVzaXplVG9VbmRvU3RhY2soKTsKICAgIH07CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgcG9pbnRlclVwQ2FsbGJhY2ssIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgcG9pbnRlclVwQ2FsbGJhY2ssIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICB9CiAgI3Jlc2l6ZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7CiAgICB0aGlzLndpZHRoID0gd2lkdGg7CiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKICAgIHRoaXMueCA9IHg7CiAgICB0aGlzLnkgPSB5OwogICAgdGhpcy5zZXREaW1zKCk7CiAgICB0aGlzLmZpeEFuZFNldFBvc2l0aW9uKCk7CiAgICB0aGlzLl9vblJlc2l6ZWQoKTsKICB9CiAgX29uUmVzaXplZCgpIHt9CiAgI2FkZFJlc2l6ZVRvVW5kb1N0YWNrKCkgewogICAgaWYgKCF0aGlzLiNzYXZlZERpbWVuc2lvbnMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgewogICAgICBzYXZlZFgsCiAgICAgIHNhdmVkWSwKICAgICAgc2F2ZWRXaWR0aCwKICAgICAgc2F2ZWRIZWlnaHQKICAgIH0gPSB0aGlzLiNzYXZlZERpbWVuc2lvbnM7CiAgICB0aGlzLiNzYXZlZERpbWVuc2lvbnMgPSBudWxsOwogICAgY29uc3QgbmV3WCA9IHRoaXMueDsKICAgIGNvbnN0IG5ld1kgPSB0aGlzLnk7CiAgICBjb25zdCBuZXdXaWR0aCA9IHRoaXMud2lkdGg7CiAgICBjb25zdCBuZXdIZWlnaHQgPSB0aGlzLmhlaWdodDsKICAgIGlmIChuZXdYID09PSBzYXZlZFggJiYgbmV3WSA9PT0gc2F2ZWRZICYmIG5ld1dpZHRoID09PSBzYXZlZFdpZHRoICYmIG5ld0hlaWdodCA9PT0gc2F2ZWRIZWlnaHQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5hZGRDb21tYW5kcyh7CiAgICAgIGNtZDogdGhpcy4jcmVzaXplLmJpbmQodGhpcywgbmV3WCwgbmV3WSwgbmV3V2lkdGgsIG5ld0hlaWdodCksCiAgICAgIHVuZG86IHRoaXMuI3Jlc2l6ZS5iaW5kKHRoaXMsIHNhdmVkWCwgc2F2ZWRZLCBzYXZlZFdpZHRoLCBzYXZlZEhlaWdodCksCiAgICAgIG11c3RFeGVjOiB0cnVlCiAgICB9KTsKICB9CiAgc3RhdGljIF9yb3VuZCh4KSB7CiAgICByZXR1cm4gTWF0aC5yb3VuZCh4ICogMTAwMDApIC8gMTAwMDA7CiAgfQogICNyZXNpemVyUG9pbnRlcm1vdmUobmFtZSwgZXZlbnQpIHsKICAgIGNvbnN0IFtwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0XSA9IHRoaXMucGFyZW50RGltZW5zaW9uczsKICAgIGNvbnN0IHNhdmVkWCA9IHRoaXMueDsKICAgIGNvbnN0IHNhdmVkWSA9IHRoaXMueTsKICAgIGNvbnN0IHNhdmVkV2lkdGggPSB0aGlzLndpZHRoOwogICAgY29uc3Qgc2F2ZWRIZWlnaHQgPSB0aGlzLmhlaWdodDsKICAgIGNvbnN0IG1pbldpZHRoID0gQW5ub3RhdGlvbkVkaXRvci5NSU5fU0laRSAvIHBhcmVudFdpZHRoOwogICAgY29uc3QgbWluSGVpZ2h0ID0gQW5ub3RhdGlvbkVkaXRvci5NSU5fU0laRSAvIHBhcmVudEhlaWdodDsKICAgIGNvbnN0IHJvdGF0aW9uTWF0cml4ID0gdGhpcy4jZ2V0Um90YXRpb25NYXRyaXgodGhpcy5yb3RhdGlvbik7CiAgICBjb25zdCB0cmFuc2YgPSAoeCwgeSkgPT4gW3JvdGF0aW9uTWF0cml4WzBdICogeCArIHJvdGF0aW9uTWF0cml4WzJdICogeSwgcm90YXRpb25NYXRyaXhbMV0gKiB4ICsgcm90YXRpb25NYXRyaXhbM10gKiB5XTsKICAgIGNvbnN0IGludlJvdGF0aW9uTWF0cml4ID0gdGhpcy4jZ2V0Um90YXRpb25NYXRyaXgoMzYwIC0gdGhpcy5yb3RhdGlvbik7CiAgICBjb25zdCBpbnZUcmFuc2YgPSAoeCwgeSkgPT4gW2ludlJvdGF0aW9uTWF0cml4WzBdICogeCArIGludlJvdGF0aW9uTWF0cml4WzJdICogeSwgaW52Um90YXRpb25NYXRyaXhbMV0gKiB4ICsgaW52Um90YXRpb25NYXRyaXhbM10gKiB5XTsKICAgIGxldCBnZXRQb2ludDsKICAgIGxldCBnZXRPcHBvc2l0ZTsKICAgIGxldCBpc0RpYWdvbmFsID0gZmFsc2U7CiAgICBsZXQgaXNIb3Jpem9udGFsID0gZmFsc2U7CiAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgY2FzZSAidG9wTGVmdCI6CiAgICAgICAgaXNEaWFnb25hbCA9IHRydWU7CiAgICAgICAgZ2V0UG9pbnQgPSAodywgaCkgPT4gWzAsIDBdOwogICAgICAgIGdldE9wcG9zaXRlID0gKHcsIGgpID0+IFt3LCBoXTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidG9wTWlkZGxlIjoKICAgICAgICBnZXRQb2ludCA9ICh3LCBoKSA9PiBbdyAvIDIsIDBdOwogICAgICAgIGdldE9wcG9zaXRlID0gKHcsIGgpID0+IFt3IC8gMiwgaF07CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgInRvcFJpZ2h0IjoKICAgICAgICBpc0RpYWdvbmFsID0gdHJ1ZTsKICAgICAgICBnZXRQb2ludCA9ICh3LCBoKSA9PiBbdywgMF07CiAgICAgICAgZ2V0T3Bwb3NpdGUgPSAodywgaCkgPT4gWzAsIGhdOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJtaWRkbGVSaWdodCI6CiAgICAgICAgaXNIb3Jpem9udGFsID0gdHJ1ZTsKICAgICAgICBnZXRQb2ludCA9ICh3LCBoKSA9PiBbdywgaCAvIDJdOwogICAgICAgIGdldE9wcG9zaXRlID0gKHcsIGgpID0+IFswLCBoIC8gMl07CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImJvdHRvbVJpZ2h0IjoKICAgICAgICBpc0RpYWdvbmFsID0gdHJ1ZTsKICAgICAgICBnZXRQb2ludCA9ICh3LCBoKSA9PiBbdywgaF07CiAgICAgICAgZ2V0T3Bwb3NpdGUgPSAodywgaCkgPT4gWzAsIDBdOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJib3R0b21NaWRkbGUiOgogICAgICAgIGdldFBvaW50ID0gKHcsIGgpID0+IFt3IC8gMiwgaF07CiAgICAgICAgZ2V0T3Bwb3NpdGUgPSAodywgaCkgPT4gW3cgLyAyLCAwXTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiYm90dG9tTGVmdCI6CiAgICAgICAgaXNEaWFnb25hbCA9IHRydWU7CiAgICAgICAgZ2V0UG9pbnQgPSAodywgaCkgPT4gWzAsIGhdOwogICAgICAgIGdldE9wcG9zaXRlID0gKHcsIGgpID0+IFt3LCAwXTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAibWlkZGxlTGVmdCI6CiAgICAgICAgaXNIb3Jpem9udGFsID0gdHJ1ZTsKICAgICAgICBnZXRQb2ludCA9ICh3LCBoKSA9PiBbMCwgaCAvIDJdOwogICAgICAgIGdldE9wcG9zaXRlID0gKHcsIGgpID0+IFt3LCBoIC8gMl07CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBjb25zdCBwb2ludCA9IGdldFBvaW50KHNhdmVkV2lkdGgsIHNhdmVkSGVpZ2h0KTsKICAgIGNvbnN0IG9wcG9zaXRlUG9pbnQgPSBnZXRPcHBvc2l0ZShzYXZlZFdpZHRoLCBzYXZlZEhlaWdodCk7CiAgICBsZXQgdHJhbnNmT3Bwb3NpdGVQb2ludCA9IHRyYW5zZiguLi5vcHBvc2l0ZVBvaW50KTsKICAgIGNvbnN0IG9wcG9zaXRlWCA9IEFubm90YXRpb25FZGl0b3IuX3JvdW5kKHNhdmVkWCArIHRyYW5zZk9wcG9zaXRlUG9pbnRbMF0pOwogICAgY29uc3Qgb3Bwb3NpdGVZID0gQW5ub3RhdGlvbkVkaXRvci5fcm91bmQoc2F2ZWRZICsgdHJhbnNmT3Bwb3NpdGVQb2ludFsxXSk7CiAgICBsZXQgcmF0aW9YID0gMTsKICAgIGxldCByYXRpb1kgPSAxOwogICAgbGV0IGRlbHRhWCwgZGVsdGFZOwogICAgaWYgKCFldmVudC5mcm9tS2V5Ym9hcmQpIHsKICAgICAgY29uc3QgewogICAgICAgIHNjcmVlblgsCiAgICAgICAgc2NyZWVuWQogICAgICB9ID0gZXZlbnQ7CiAgICAgIGNvbnN0IFtsYXN0U2NyZWVuWCwgbGFzdFNjcmVlblldID0gdGhpcy4jbGFzdFBvaW50ZXJDb29yZHM7CiAgICAgIFtkZWx0YVgsIGRlbHRhWV0gPSB0aGlzLnNjcmVlblRvUGFnZVRyYW5zbGF0aW9uKHNjcmVlblggLSBsYXN0U2NyZWVuWCwgc2NyZWVuWSAtIGxhc3RTY3JlZW5ZKTsKICAgICAgdGhpcy4jbGFzdFBvaW50ZXJDb29yZHNbMF0gPSBzY3JlZW5YOwogICAgICB0aGlzLiNsYXN0UG9pbnRlckNvb3Jkc1sxXSA9IHNjcmVlblk7CiAgICB9IGVsc2UgewogICAgICAoewogICAgICAgIGRlbHRhWCwKICAgICAgICBkZWx0YVkKICAgICAgfSA9IGV2ZW50KTsKICAgIH0KICAgIFtkZWx0YVgsIGRlbHRhWV0gPSBpbnZUcmFuc2YoZGVsdGFYIC8gcGFyZW50V2lkdGgsIGRlbHRhWSAvIHBhcmVudEhlaWdodCk7CiAgICBpZiAoaXNEaWFnb25hbCkgewogICAgICBjb25zdCBvbGREaWFnID0gTWF0aC5oeXBvdChzYXZlZFdpZHRoLCBzYXZlZEhlaWdodCk7CiAgICAgIHJhdGlvWCA9IHJhdGlvWSA9IE1hdGgubWF4KE1hdGgubWluKE1hdGguaHlwb3Qob3Bwb3NpdGVQb2ludFswXSAtIHBvaW50WzBdIC0gZGVsdGFYLCBvcHBvc2l0ZVBvaW50WzFdIC0gcG9pbnRbMV0gLSBkZWx0YVkpIC8gb2xkRGlhZywgMSAvIHNhdmVkV2lkdGgsIDEgLyBzYXZlZEhlaWdodCksIG1pbldpZHRoIC8gc2F2ZWRXaWR0aCwgbWluSGVpZ2h0IC8gc2F2ZWRIZWlnaHQpOwogICAgfSBlbHNlIGlmIChpc0hvcml6b250YWwpIHsKICAgICAgcmF0aW9YID0gTWF0aENsYW1wKE1hdGguYWJzKG9wcG9zaXRlUG9pbnRbMF0gLSBwb2ludFswXSAtIGRlbHRhWCksIG1pbldpZHRoLCAxKSAvIHNhdmVkV2lkdGg7CiAgICB9IGVsc2UgewogICAgICByYXRpb1kgPSBNYXRoQ2xhbXAoTWF0aC5hYnMob3Bwb3NpdGVQb2ludFsxXSAtIHBvaW50WzFdIC0gZGVsdGFZKSwgbWluSGVpZ2h0LCAxKSAvIHNhdmVkSGVpZ2h0OwogICAgfQogICAgY29uc3QgbmV3V2lkdGggPSBBbm5vdGF0aW9uRWRpdG9yLl9yb3VuZChzYXZlZFdpZHRoICogcmF0aW9YKTsKICAgIGNvbnN0IG5ld0hlaWdodCA9IEFubm90YXRpb25FZGl0b3IuX3JvdW5kKHNhdmVkSGVpZ2h0ICogcmF0aW9ZKTsKICAgIHRyYW5zZk9wcG9zaXRlUG9pbnQgPSB0cmFuc2YoLi4uZ2V0T3Bwb3NpdGUobmV3V2lkdGgsIG5ld0hlaWdodCkpOwogICAgY29uc3QgbmV3WCA9IG9wcG9zaXRlWCAtIHRyYW5zZk9wcG9zaXRlUG9pbnRbMF07CiAgICBjb25zdCBuZXdZID0gb3Bwb3NpdGVZIC0gdHJhbnNmT3Bwb3NpdGVQb2ludFsxXTsKICAgIHRoaXMuI2luaXRpYWxSZWN0IHx8PSBbdGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0XTsKICAgIHRoaXMud2lkdGggPSBuZXdXaWR0aDsKICAgIHRoaXMuaGVpZ2h0ID0gbmV3SGVpZ2h0OwogICAgdGhpcy54ID0gbmV3WDsKICAgIHRoaXMueSA9IG5ld1k7CiAgICB0aGlzLnNldERpbXMoKTsKICAgIHRoaXMuZml4QW5kU2V0UG9zaXRpb24oKTsKICAgIHRoaXMuX29uUmVzaXppbmcoKTsKICB9CiAgX29uUmVzaXppbmcoKSB7fQogIGFsdFRleHRGaW5pc2goKSB7CiAgICB0aGlzLiNhbHRUZXh0Py5maW5pc2goKTsKICB9CiAgZ2V0IHRvb2xiYXJCdXR0b25zKCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGFzeW5jIGFkZEVkaXRUb29sYmFyKCkgewogICAgaWYgKHRoaXMuX2VkaXRUb29sYmFyIHx8IHRoaXMuI2lzSW5FZGl0TW9kZSkgewogICAgICByZXR1cm4gdGhpcy5fZWRpdFRvb2xiYXI7CiAgICB9CiAgICB0aGlzLl9lZGl0VG9vbGJhciA9IG5ldyBFZGl0b3JUb29sYmFyKHRoaXMpOwogICAgdGhpcy5kaXYuYXBwZW5kKHRoaXMuX2VkaXRUb29sYmFyLnJlbmRlcigpKTsKICAgIGNvbnN0IHsKICAgICAgdG9vbGJhckJ1dHRvbnMKICAgIH0gPSB0aGlzOwogICAgaWYgKHRvb2xiYXJCdXR0b25zKSB7CiAgICAgIGZvciAoY29uc3QgW25hbWUsIHRvb2xdIG9mIHRvb2xiYXJCdXR0b25zKSB7CiAgICAgICAgYXdhaXQgdGhpcy5fZWRpdFRvb2xiYXIuYWRkQnV0dG9uKG5hbWUsIHRvb2wpOwogICAgICB9CiAgICB9CiAgICBpZiAoIXRoaXMuaGFzQ29tbWVudCkgewogICAgICB0aGlzLl9lZGl0VG9vbGJhci5hZGRCdXR0b24oImNvbW1lbnQiLCB0aGlzLmFkZENvbW1lbnRCdXR0b24oKSk7CiAgICB9CiAgICB0aGlzLl9lZGl0VG9vbGJhci5hZGRCdXR0b24oImRlbGV0ZSIpOwogICAgcmV0dXJuIHRoaXMuX2VkaXRUb29sYmFyOwogIH0KICBhZGRDb21tZW50QnV0dG9uSW5Ub29sYmFyKCkgewogICAgdGhpcy5fZWRpdFRvb2xiYXI/LmFkZEJ1dHRvbkJlZm9yZSgiY29tbWVudCIsIHRoaXMuYWRkQ29tbWVudEJ1dHRvbigpLCAiLmRlbGV0ZUJ1dHRvbiIpOwogIH0KICByZW1vdmVDb21tZW50QnV0dG9uRnJvbVRvb2xiYXIoKSB7CiAgICB0aGlzLl9lZGl0VG9vbGJhcj8ucmVtb3ZlQnV0dG9uKCJjb21tZW50Iik7CiAgfQogIHJlbW92ZUVkaXRUb29sYmFyKCkgewogICAgdGhpcy5fZWRpdFRvb2xiYXI/LnJlbW92ZSgpOwogICAgdGhpcy5fZWRpdFRvb2xiYXIgPSBudWxsOwogICAgdGhpcy4jYWx0VGV4dD8uZGVzdHJveSgpOwogIH0KICBhZGRDb250YWluZXIoY29udGFpbmVyKSB7CiAgICBjb25zdCBlZGl0VG9vbGJhckRpdiA9IHRoaXMuX2VkaXRUb29sYmFyPy5kaXY7CiAgICBpZiAoZWRpdFRvb2xiYXJEaXYpIHsKICAgICAgZWRpdFRvb2xiYXJEaXYuYmVmb3JlKGNvbnRhaW5lcik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmRpdi5hcHBlbmQoY29udGFpbmVyKTsKICAgIH0KICB9CiAgZ2V0Q2xpZW50RGltZW5zaW9ucygpIHsKICAgIHJldHVybiB0aGlzLmRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICB9CiAgY3JlYXRlQWx0VGV4dCgpIHsKICAgIGlmICghdGhpcy4jYWx0VGV4dCkgewogICAgICBBbHRUZXh0LmluaXRpYWxpemUoQW5ub3RhdGlvbkVkaXRvci5fbDEwbik7CiAgICAgIHRoaXMuI2FsdFRleHQgPSBuZXcgQWx0VGV4dCh0aGlzKTsKICAgICAgaWYgKHRoaXMuI2FjY2Vzc2liaWxpdHlEYXRhKSB7CiAgICAgICAgdGhpcy4jYWx0VGV4dC5kYXRhID0gdGhpcy4jYWNjZXNzaWJpbGl0eURhdGE7CiAgICAgICAgdGhpcy4jYWNjZXNzaWJpbGl0eURhdGEgPSBudWxsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGhpcy4jYWx0VGV4dDsKICB9CiAgZ2V0IGFsdFRleHREYXRhKCkgewogICAgcmV0dXJuIHRoaXMuI2FsdFRleHQ/LmRhdGE7CiAgfQogIHNldCBhbHRUZXh0RGF0YShkYXRhKSB7CiAgICBpZiAoIXRoaXMuI2FsdFRleHQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jYWx0VGV4dC5kYXRhID0gZGF0YTsKICB9CiAgZ2V0IGd1ZXNzZWRBbHRUZXh0KCkgewogICAgcmV0dXJuIHRoaXMuI2FsdFRleHQ/Lmd1ZXNzZWRUZXh0OwogIH0KICBhc3luYyBzZXRHdWVzc2VkQWx0VGV4dCh0ZXh0KSB7CiAgICBhd2FpdCB0aGlzLiNhbHRUZXh0Py5zZXRHdWVzc2VkVGV4dCh0ZXh0KTsKICB9CiAgc2VyaWFsaXplQWx0VGV4dChpc0ZvckNvcHlpbmcpIHsKICAgIHJldHVybiB0aGlzLiNhbHRUZXh0Py5zZXJpYWxpemUoaXNGb3JDb3B5aW5nKTsKICB9CiAgaGFzQWx0VGV4dCgpIHsKICAgIHJldHVybiAhIXRoaXMuI2FsdFRleHQgJiYgIXRoaXMuI2FsdFRleHQuaXNFbXB0eSgpOwogIH0KICBoYXNBbHRUZXh0RGF0YSgpIHsKICAgIHJldHVybiB0aGlzLiNhbHRUZXh0Py5oYXNEYXRhKCkgPz8gZmFsc2U7CiAgfQogIGZvY3VzQ29tbWVudEJ1dHRvbigpIHsKICAgIHRoaXMuI2NvbW1lbnQ/LmZvY3VzQnV0dG9uKCk7CiAgfQogIGFkZENvbW1lbnRCdXR0b24oKSB7CiAgICByZXR1cm4gdGhpcy5jYW5BZGRDb21tZW50ID8gdGhpcy4jY29tbWVudCB8fD0gbmV3IENvbW1lbnQodGhpcykgOiBudWxsOwogIH0KICBhZGRTdGFuZGFsb25lQ29tbWVudEJ1dHRvbigpIHsKICAgIGlmICghdGhpcy5fdWlNYW5hZ2VyLmhhc0NvbW1lbnRNYW5hZ2VyKCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuI2NvbW1lbnRTdGFuZGFsb25lQnV0dG9uKSB7CiAgICAgIGlmICh0aGlzLl91aU1hbmFnZXIuaXNFZGl0aW5nTW9kZSgpKSB7CiAgICAgICAgdGhpcy4jY29tbWVudFN0YW5kYWxvbmVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCF0aGlzLmhhc0NvbW1lbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jY29tbWVudFN0YW5kYWxvbmVCdXR0b24gPSB0aGlzLiNjb21tZW50LnJlbmRlckZvclN0YW5kYWxvbmUoKTsKICAgIHRoaXMuZGl2LmFwcGVuZCh0aGlzLiNjb21tZW50U3RhbmRhbG9uZUJ1dHRvbik7CiAgfQogIHJlbW92ZVN0YW5kYWxvbmVDb21tZW50QnV0dG9uKCkgewogICAgdGhpcy4jY29tbWVudC5yZW1vdmVTdGFuZGFsb25lQ29tbWVudEJ1dHRvbigpOwogICAgdGhpcy4jY29tbWVudFN0YW5kYWxvbmVCdXR0b24gPSBudWxsOwogIH0KICBoaWRlU3RhbmRhbG9uZUNvbW1lbnRCdXR0b24oKSB7CiAgICB0aGlzLiNjb21tZW50U3RhbmRhbG9uZUJ1dHRvbj8uY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7CiAgfQogIGdldCBjb21tZW50KCkgewogICAgY29uc3QgewogICAgICBkYXRhOiB7CiAgICAgICAgcmljaFRleHQsCiAgICAgICAgdGV4dCwKICAgICAgICBkYXRlLAogICAgICAgIGRlbGV0ZWQKICAgICAgfQogICAgfSA9IHRoaXMuI2NvbW1lbnQ7CiAgICByZXR1cm4gewogICAgICB0ZXh0LAogICAgICByaWNoVGV4dCwKICAgICAgZGF0ZSwKICAgICAgZGVsZXRlZCwKICAgICAgY29sb3I6IHRoaXMuZ2V0Tm9uSENNQ29sb3IoKSwKICAgICAgb3BhY2l0eTogdGhpcy5vcGFjaXR5ID8/IDEKICAgIH07CiAgfQogIHNldCBjb21tZW50KHRleHQpIHsKICAgIHRoaXMuI2NvbW1lbnQgfHw9IG5ldyBDb21tZW50KHRoaXMpOwogICAgdGhpcy4jY29tbWVudC5kYXRhID0gdGV4dDsKICAgIGlmICh0aGlzLmhhc0NvbW1lbnQpIHsKICAgICAgdGhpcy5yZW1vdmVDb21tZW50QnV0dG9uRnJvbVRvb2xiYXIoKTsKICAgICAgdGhpcy5hZGRTdGFuZGFsb25lQ29tbWVudEJ1dHRvbigpOwogICAgICB0aGlzLl91aU1hbmFnZXIudXBkYXRlQ29tbWVudCh0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuYWRkQ29tbWVudEJ1dHRvbkluVG9vbGJhcigpOwogICAgICB0aGlzLnJlbW92ZVN0YW5kYWxvbmVDb21tZW50QnV0dG9uKCk7CiAgICAgIHRoaXMuX3VpTWFuYWdlci5yZW1vdmVDb21tZW50KHRoaXMpOwogICAgfQogIH0KICBzZXRDb21tZW50RGF0YSh7CiAgICBjb21tZW50LAogICAgcG9wdXBSZWYsCiAgICByaWNoVGV4dAogIH0pIHsKICAgIGlmICghcG9wdXBSZWYpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jY29tbWVudCB8fD0gbmV3IENvbW1lbnQodGhpcyk7CiAgICB0aGlzLiNjb21tZW50LnNldEluaXRpYWxUZXh0KGNvbW1lbnQsIHJpY2hUZXh0KTsKICAgIGlmICghdGhpcy5hbm5vdGF0aW9uRWxlbWVudElkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHN0b3JlZERhdGEgPSB0aGlzLl91aU1hbmFnZXIuZ2V0QW5kUmVtb3ZlRGF0YUZyb21Bbm5vdGF0aW9uU3RvcmFnZSh0aGlzLmFubm90YXRpb25FbGVtZW50SWQpOwogICAgaWYgKHN0b3JlZERhdGEpIHsKICAgICAgdGhpcy51cGRhdGVGcm9tQW5ub3RhdGlvbkxheWVyKHN0b3JlZERhdGEpOwogICAgfQogIH0KICBnZXQgaGFzRWRpdGVkQ29tbWVudCgpIHsKICAgIHJldHVybiB0aGlzLiNjb21tZW50Py5oYXNCZWVuRWRpdGVkKCk7CiAgfQogIGdldCBoYXNEZWxldGVkQ29tbWVudCgpIHsKICAgIHJldHVybiB0aGlzLiNjb21tZW50Py5pc0RlbGV0ZWQoKTsKICB9CiAgZ2V0IGhhc0NvbW1lbnQoKSB7CiAgICByZXR1cm4gISF0aGlzLiNjb21tZW50ICYmICF0aGlzLiNjb21tZW50LmlzRW1wdHkoKSAmJiAhdGhpcy4jY29tbWVudC5pc0RlbGV0ZWQoKTsKICB9CiAgYXN5bmMgZWRpdENvbW1lbnQob3B0aW9ucykgewogICAgdGhpcy4jY29tbWVudCB8fD0gbmV3IENvbW1lbnQodGhpcyk7CiAgICB0aGlzLiNjb21tZW50LmVkaXQob3B0aW9ucyk7CiAgfQogIHRvZ2dsZUNvbW1lbnQoaXNTZWxlY3RlZCwgdmlzaWJpbGl0eSA9IHVuZGVmaW5lZCkgewogICAgaWYgKHRoaXMuaGFzQ29tbWVudCkgewogICAgICB0aGlzLl91aU1hbmFnZXIudG9nZ2xlQ29tbWVudCh0aGlzLCBpc1NlbGVjdGVkLCB2aXNpYmlsaXR5KTsKICAgIH0KICB9CiAgc2V0U2VsZWN0ZWRDb21tZW50QnV0dG9uKHNlbGVjdGVkKSB7CiAgICB0aGlzLiNjb21tZW50LnNldFNlbGVjdGVkQnV0dG9uKHNlbGVjdGVkKTsKICB9CiAgYWRkQ29tbWVudChzZXJpYWxpemVkKSB7CiAgICBpZiAodGhpcy5oYXNFZGl0ZWRDb21tZW50KSB7CiAgICAgIGNvbnN0IERFRkFVTFRfUE9QVVBfV0lEVEggPSAxODA7CiAgICAgIGNvbnN0IERFRkFVTFRfUE9QVVBfSEVJR0hUID0gMTAwOwogICAgICBjb25zdCBbLCwsIHRyWV0gPSBzZXJpYWxpemVkLnJlY3Q7CiAgICAgIGNvbnN0IFtwYWdlV2lkdGhdID0gdGhpcy5wYWdlRGltZW5zaW9uczsKICAgICAgY29uc3QgW3BhZ2VYXSA9IHRoaXMucGFnZVRyYW5zbGF0aW9uOwogICAgICBjb25zdCBibFggPSBwYWdlWCArIHBhZ2VXaWR0aCArIDE7CiAgICAgIGNvbnN0IGJsWSA9IHRyWSAtIERFRkFVTFRfUE9QVVBfSEVJR0hUOwogICAgICBjb25zdCB0clggPSBibFggKyBERUZBVUxUX1BPUFVQX1dJRFRIOwogICAgICBzZXJpYWxpemVkLnBvcHVwID0gewogICAgICAgIGNvbnRlbnRzOiB0aGlzLmNvbW1lbnQudGV4dCwKICAgICAgICBkZWxldGVkOiB0aGlzLmNvbW1lbnQuZGVsZXRlZCwKICAgICAgICByZWN0OiBbYmxYLCBibFksIHRyWCwgdHJZXQogICAgICB9OwogICAgfQogIH0KICB1cGRhdGVGcm9tQW5ub3RhdGlvbkxheWVyKHsKICAgIHBvcHVwOiB7CiAgICAgIGNvbnRlbnRzLAogICAgICBkZWxldGVkCiAgICB9CiAgfSkgewogICAgdGhpcy4jY29tbWVudC5kYXRhID0gZGVsZXRlZCA/IG51bGwgOiBjb250ZW50czsKICB9CiAgZ2V0IHBhcmVudEJvdW5kaW5nQ2xpZW50UmVjdCgpIHsKICAgIHJldHVybiB0aGlzLnBhcmVudC5ib3VuZGluZ0NsaWVudFJlY3Q7CiAgfQogIHJlbmRlcigpIHsKICAgIGNvbnN0IGRpdiA9IHRoaXMuZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXYuc2V0QXR0cmlidXRlKCJkYXRhLWVkaXRvci1yb3RhdGlvbiIsICgzNjAgLSB0aGlzLnJvdGF0aW9uKSAlIDM2MCk7CiAgICBkaXYuY2xhc3NOYW1lID0gdGhpcy5uYW1lOwogICAgZGl2LnNldEF0dHJpYnV0ZSgiaWQiLCB0aGlzLmlkKTsKICAgIGRpdi50YWJJbmRleCA9IHRoaXMuI2Rpc2FibGVkID8gLTEgOiAwOwogICAgZGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsICJhcHBsaWNhdGlvbiIpOwogICAgaWYgKHRoaXMuZGVmYXVsdEwxMG5JZCkgewogICAgICBkaXYuc2V0QXR0cmlidXRlKCJkYXRhLWwxMG4taWQiLCB0aGlzLmRlZmF1bHRMMTBuSWQpOwogICAgfQogICAgaWYgKCF0aGlzLl9pc1Zpc2libGUpIHsKICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOwogICAgfQogICAgdGhpcy5zZXRJbkZvcmVncm91bmQoKTsKICAgIHRoaXMuI2FkZEZvY3VzTGlzdGVuZXJzKCk7CiAgICBjb25zdCBbcGFyZW50V2lkdGgsIHBhcmVudEhlaWdodF0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnM7CiAgICBpZiAodGhpcy5wYXJlbnRSb3RhdGlvbiAlIDE4MCAhPT0gMCkgewogICAgICBkaXYuc3R5bGUubWF4V2lkdGggPSBgJHsoMTAwICogcGFyZW50SGVpZ2h0IC8gcGFyZW50V2lkdGgpLnRvRml4ZWQoMil9JWA7CiAgICAgIGRpdi5zdHlsZS5tYXhIZWlnaHQgPSBgJHsoMTAwICogcGFyZW50V2lkdGggLyBwYXJlbnRIZWlnaHQpLnRvRml4ZWQoMil9JWA7CiAgICB9CiAgICBjb25zdCBbdHgsIHR5XSA9IHRoaXMuZ2V0SW5pdGlhbFRyYW5zbGF0aW9uKCk7CiAgICB0aGlzLnRyYW5zbGF0ZSh0eCwgdHkpOwogICAgYmluZEV2ZW50cyh0aGlzLCBkaXYsIFsia2V5ZG93biIsICJwb2ludGVyZG93biIsICJkYmxjbGljayJdKTsKICAgIGlmICh0aGlzLmlzUmVzaXphYmxlICYmIHRoaXMuX3VpTWFuYWdlci5fc3VwcG9ydHNQaW5jaFRvWm9vbSkgewogICAgICB0aGlzLiN0b3VjaE1hbmFnZXIgfHw9IG5ldyBUb3VjaE1hbmFnZXIoewogICAgICAgIGNvbnRhaW5lcjogZGl2LAogICAgICAgIGlzUGluY2hpbmdEaXNhYmxlZDogKCkgPT4gIXRoaXMuaXNTZWxlY3RlZCwKICAgICAgICBvblBpbmNoU3RhcnQ6IHRoaXMuI3RvdWNoUGluY2hTdGFydENhbGxiYWNrLmJpbmQodGhpcyksCiAgICAgICAgb25QaW5jaGluZzogdGhpcy4jdG91Y2hQaW5jaENhbGxiYWNrLmJpbmQodGhpcyksCiAgICAgICAgb25QaW5jaEVuZDogdGhpcy4jdG91Y2hQaW5jaEVuZENhbGxiYWNrLmJpbmQodGhpcyksCiAgICAgICAgc2lnbmFsOiB0aGlzLl91aU1hbmFnZXIuX3NpZ25hbAogICAgICB9KTsKICAgIH0KICAgIHRoaXMuYWRkU3RhbmRhbG9uZUNvbW1lbnRCdXR0b24oKTsKICAgIHRoaXMuX3VpTWFuYWdlci5fZWRpdG9yVW5kb0Jhcj8uaGlkZSgpOwogICAgcmV0dXJuIGRpdjsKICB9CiAgI3RvdWNoUGluY2hTdGFydENhbGxiYWNrKCkgewogICAgdGhpcy4jc2F2ZWREaW1lbnNpb25zID0gewogICAgICBzYXZlZFg6IHRoaXMueCwKICAgICAgc2F2ZWRZOiB0aGlzLnksCiAgICAgIHNhdmVkV2lkdGg6IHRoaXMud2lkdGgsCiAgICAgIHNhdmVkSGVpZ2h0OiB0aGlzLmhlaWdodAogICAgfTsKICAgIHRoaXMuI2FsdFRleHQ/LnRvZ2dsZShmYWxzZSk7CiAgICB0aGlzLnBhcmVudC50b2dnbGVQb2ludGVyRXZlbnRzKGZhbHNlKTsKICB9CiAgI3RvdWNoUGluY2hDYWxsYmFjayhfb3JpZ2luLCBwcmV2RGlzdGFuY2UsIGRpc3RhbmNlKSB7CiAgICBjb25zdCBzbG93RG93bkZhY3RvciA9IDAuNzsKICAgIGxldCBmYWN0b3IgPSBzbG93RG93bkZhY3RvciAqIChkaXN0YW5jZSAvIHByZXZEaXN0YW5jZSkgKyAxIC0gc2xvd0Rvd25GYWN0b3I7CiAgICBpZiAoZmFjdG9yID09PSAxKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHJvdGF0aW9uTWF0cml4ID0gdGhpcy4jZ2V0Um90YXRpb25NYXRyaXgodGhpcy5yb3RhdGlvbik7CiAgICBjb25zdCB0cmFuc2YgPSAoeCwgeSkgPT4gW3JvdGF0aW9uTWF0cml4WzBdICogeCArIHJvdGF0aW9uTWF0cml4WzJdICogeSwgcm90YXRpb25NYXRyaXhbMV0gKiB4ICsgcm90YXRpb25NYXRyaXhbM10gKiB5XTsKICAgIGNvbnN0IFtwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0XSA9IHRoaXMucGFyZW50RGltZW5zaW9uczsKICAgIGNvbnN0IHNhdmVkWCA9IHRoaXMueDsKICAgIGNvbnN0IHNhdmVkWSA9IHRoaXMueTsKICAgIGNvbnN0IHNhdmVkV2lkdGggPSB0aGlzLndpZHRoOwogICAgY29uc3Qgc2F2ZWRIZWlnaHQgPSB0aGlzLmhlaWdodDsKICAgIGNvbnN0IG1pbldpZHRoID0gQW5ub3RhdGlvbkVkaXRvci5NSU5fU0laRSAvIHBhcmVudFdpZHRoOwogICAgY29uc3QgbWluSGVpZ2h0ID0gQW5ub3RhdGlvbkVkaXRvci5NSU5fU0laRSAvIHBhcmVudEhlaWdodDsKICAgIGZhY3RvciA9IE1hdGgubWF4KE1hdGgubWluKGZhY3RvciwgMSAvIHNhdmVkV2lkdGgsIDEgLyBzYXZlZEhlaWdodCksIG1pbldpZHRoIC8gc2F2ZWRXaWR0aCwgbWluSGVpZ2h0IC8gc2F2ZWRIZWlnaHQpOwogICAgY29uc3QgbmV3V2lkdGggPSBBbm5vdGF0aW9uRWRpdG9yLl9yb3VuZChzYXZlZFdpZHRoICogZmFjdG9yKTsKICAgIGNvbnN0IG5ld0hlaWdodCA9IEFubm90YXRpb25FZGl0b3IuX3JvdW5kKHNhdmVkSGVpZ2h0ICogZmFjdG9yKTsKICAgIGlmIChuZXdXaWR0aCA9PT0gc2F2ZWRXaWR0aCAmJiBuZXdIZWlnaHQgPT09IHNhdmVkSGVpZ2h0KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI2luaXRpYWxSZWN0IHx8PSBbc2F2ZWRYLCBzYXZlZFksIHNhdmVkV2lkdGgsIHNhdmVkSGVpZ2h0XTsKICAgIGNvbnN0IHRyYW5zZkNlbnRlclBvaW50ID0gdHJhbnNmKHNhdmVkV2lkdGggLyAyLCBzYXZlZEhlaWdodCAvIDIpOwogICAgY29uc3QgY2VudGVyWCA9IEFubm90YXRpb25FZGl0b3IuX3JvdW5kKHNhdmVkWCArIHRyYW5zZkNlbnRlclBvaW50WzBdKTsKICAgIGNvbnN0IGNlbnRlclkgPSBBbm5vdGF0aW9uRWRpdG9yLl9yb3VuZChzYXZlZFkgKyB0cmFuc2ZDZW50ZXJQb2ludFsxXSk7CiAgICBjb25zdCBuZXdUcmFuc2ZDZW50ZXJQb2ludCA9IHRyYW5zZihuZXdXaWR0aCAvIDIsIG5ld0hlaWdodCAvIDIpOwogICAgdGhpcy54ID0gY2VudGVyWCAtIG5ld1RyYW5zZkNlbnRlclBvaW50WzBdOwogICAgdGhpcy55ID0gY2VudGVyWSAtIG5ld1RyYW5zZkNlbnRlclBvaW50WzFdOwogICAgdGhpcy53aWR0aCA9IG5ld1dpZHRoOwogICAgdGhpcy5oZWlnaHQgPSBuZXdIZWlnaHQ7CiAgICB0aGlzLnNldERpbXMoKTsKICAgIHRoaXMuZml4QW5kU2V0UG9zaXRpb24oKTsKICAgIHRoaXMuX29uUmVzaXppbmcoKTsKICB9CiAgI3RvdWNoUGluY2hFbmRDYWxsYmFjaygpIHsKICAgIHRoaXMuI2FsdFRleHQ/LnRvZ2dsZSh0cnVlKTsKICAgIHRoaXMucGFyZW50LnRvZ2dsZVBvaW50ZXJFdmVudHModHJ1ZSk7CiAgICB0aGlzLiNhZGRSZXNpemVUb1VuZG9TdGFjaygpOwogIH0KICBwb2ludGVyZG93bihldmVudCkgewogICAgY29uc3QgewogICAgICBpc01hYwogICAgfSA9IHV0aWxfRmVhdHVyZVRlc3QucGxhdGZvcm07CiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwIHx8IGV2ZW50LmN0cmxLZXkgJiYgaXNNYWMpIHsKICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jaGFzQmVlbkNsaWNrZWQgPSB0cnVlOwogICAgaWYgKHRoaXMuX2lzRHJhZ2dhYmxlKSB7CiAgICAgIHRoaXMuI3NldFVwRHJhZ1Nlc3Npb24oZXZlbnQpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNzZWxlY3RPblBvaW50ZXJFdmVudChldmVudCk7CiAgfQogICNzZWxlY3RPblBvaW50ZXJFdmVudChldmVudCkgewogICAgY29uc3QgewogICAgICBpc01hYwogICAgfSA9IHV0aWxfRmVhdHVyZVRlc3QucGxhdGZvcm07CiAgICBpZiAoZXZlbnQuY3RybEtleSAmJiAhaXNNYWMgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSAmJiBpc01hYykgewogICAgICB0aGlzLnBhcmVudC50b2dnbGVTZWxlY3RlZCh0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpOwogICAgfQogIH0KICAjc2V0VXBEcmFnU2Vzc2lvbihldmVudCkgewogICAgY29uc3QgewogICAgICBpc1NlbGVjdGVkCiAgICB9ID0gdGhpczsKICAgIHRoaXMuX3VpTWFuYWdlci5zZXRVcERyYWdTZXNzaW9uKCk7CiAgICBsZXQgaGFzRHJhZ2dpbmdTdGFydGVkID0gZmFsc2U7CiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX3VpTWFuYWdlci5jb21iaW5lZFNpZ25hbChhYyk7CiAgICBjb25zdCBvcHRzID0gewogICAgICBjYXB0dXJlOiB0cnVlLAogICAgICBwYXNzaXZlOiBmYWxzZSwKICAgICAgc2lnbmFsCiAgICB9OwogICAgY29uc3QgY2FuY2VsRHJhZyA9IGUgPT4gewogICAgICBhYy5hYm9ydCgpOwogICAgICB0aGlzLiNkcmFnUG9pbnRlcklkID0gbnVsbDsKICAgICAgdGhpcy4jaGFzQmVlbkNsaWNrZWQgPSBmYWxzZTsKICAgICAgaWYgKCF0aGlzLl91aU1hbmFnZXIuZW5kRHJhZ1Nlc3Npb24oKSkgewogICAgICAgIHRoaXMuI3NlbGVjdE9uUG9pbnRlckV2ZW50KGUpOwogICAgICB9CiAgICAgIGlmIChoYXNEcmFnZ2luZ1N0YXJ0ZWQpIHsKICAgICAgICB0aGlzLl9vblN0b3BEcmFnZ2luZygpOwogICAgICB9CiAgICB9OwogICAgaWYgKGlzU2VsZWN0ZWQpIHsKICAgICAgdGhpcy4jcHJldkRyYWdYID0gZXZlbnQuY2xpZW50WDsKICAgICAgdGhpcy4jcHJldkRyYWdZID0gZXZlbnQuY2xpZW50WTsKICAgICAgdGhpcy4jZHJhZ1BvaW50ZXJJZCA9IGV2ZW50LnBvaW50ZXJJZDsKICAgICAgdGhpcy4jZHJhZ1BvaW50ZXJUeXBlID0gZXZlbnQucG9pbnRlclR5cGU7CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGUgPT4gewogICAgICAgIGlmICghaGFzRHJhZ2dpbmdTdGFydGVkKSB7CiAgICAgICAgICBoYXNEcmFnZ2luZ1N0YXJ0ZWQgPSB0cnVlOwogICAgICAgICAgdGhpcy5fdWlNYW5hZ2VyLnRvZ2dsZUNvbW1lbnQodGhpcywgdHJ1ZSwgZmFsc2UpOwogICAgICAgICAgdGhpcy5fb25TdGFydERyYWdnaW5nKCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHsKICAgICAgICAgIGNsaWVudFg6IHgsCiAgICAgICAgICBjbGllbnRZOiB5LAogICAgICAgICAgcG9pbnRlcklkCiAgICAgICAgfSA9IGU7CiAgICAgICAgaWYgKHBvaW50ZXJJZCAhPT0gdGhpcy4jZHJhZ1BvaW50ZXJJZCkgewogICAgICAgICAgc3RvcEV2ZW50KGUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBbdHgsIHR5XSA9IHRoaXMuc2NyZWVuVG9QYWdlVHJhbnNsYXRpb24oeCAtIHRoaXMuI3ByZXZEcmFnWCwgeSAtIHRoaXMuI3ByZXZEcmFnWSk7CiAgICAgICAgdGhpcy4jcHJldkRyYWdYID0geDsKICAgICAgICB0aGlzLiNwcmV2RHJhZ1kgPSB5OwogICAgICAgIHRoaXMuX3VpTWFuYWdlci5kcmFnU2VsZWN0ZWRFZGl0b3JzKHR4LCB0eSk7CiAgICAgIH0sIG9wdHMpOwogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgc3RvcEV2ZW50LCBvcHRzKTsKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgZSA9PiB7CiAgICAgICAgaWYgKGUucG9pbnRlclR5cGUgPT09IHRoaXMuI2RyYWdQb2ludGVyVHlwZSkgewogICAgICAgICAgaWYgKHRoaXMuI3RvdWNoTWFuYWdlciB8fCBlLmlzUHJpbWFyeSkgewogICAgICAgICAgICBjYW5jZWxEcmFnKGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdG9wRXZlbnQoZSk7CiAgICAgIH0sIG9wdHMpOwogICAgfQogICAgY29uc3QgcG9pbnRlclVwQ2FsbGJhY2sgPSBlID0+IHsKICAgICAgaWYgKCF0aGlzLiNkcmFnUG9pbnRlcklkIHx8IHRoaXMuI2RyYWdQb2ludGVySWQgPT09IGUucG9pbnRlcklkKSB7CiAgICAgICAgY2FuY2VsRHJhZyhlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgc3RvcEV2ZW50KGUpOwogICAgfTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCBwb2ludGVyVXBDYWxsYmFjaywgewogICAgICBzaWduYWwKICAgIH0pOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCBwb2ludGVyVXBDYWxsYmFjaywgewogICAgICBzaWduYWwKICAgIH0pOwogIH0KICBfb25TdGFydERyYWdnaW5nKCkge30KICBfb25TdG9wRHJhZ2dpbmcoKSB7fQogIG1vdmVJbkRPTSgpIHsKICAgIGlmICh0aGlzLiNtb3ZlSW5ET01UaW1lb3V0KSB7CiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiNtb3ZlSW5ET01UaW1lb3V0KTsKICAgIH0KICAgIHRoaXMuI21vdmVJbkRPTVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgdGhpcy4jbW92ZUluRE9NVGltZW91dCA9IG51bGw7CiAgICAgIHRoaXMucGFyZW50Py5tb3ZlRWRpdG9ySW5ET00odGhpcyk7CiAgICB9LCAwKTsKICB9CiAgX3NldFBhcmVudEFuZFBvc2l0aW9uKHBhcmVudCwgeCwgeSkgewogICAgcGFyZW50LmNoYW5nZVBhcmVudCh0aGlzKTsKICAgIHRoaXMueCA9IHg7CiAgICB0aGlzLnkgPSB5OwogICAgdGhpcy5maXhBbmRTZXRQb3NpdGlvbigpOwogICAgdGhpcy5fb25UcmFuc2xhdGVkKCk7CiAgfQogIGdldFJlY3QodHgsIHR5LCByb3RhdGlvbiA9IHRoaXMucm90YXRpb24pIHsKICAgIGNvbnN0IHNjYWxlID0gdGhpcy5wYXJlbnRTY2FsZTsKICAgIGNvbnN0IFtwYWdlV2lkdGgsIHBhZ2VIZWlnaHRdID0gdGhpcy5wYWdlRGltZW5zaW9uczsKICAgIGNvbnN0IFtwYWdlWCwgcGFnZVldID0gdGhpcy5wYWdlVHJhbnNsYXRpb247CiAgICBjb25zdCBzaGlmdFggPSB0eCAvIHNjYWxlOwogICAgY29uc3Qgc2hpZnRZID0gdHkgLyBzY2FsZTsKICAgIGNvbnN0IHggPSB0aGlzLnggKiBwYWdlV2lkdGg7CiAgICBjb25zdCB5ID0gdGhpcy55ICogcGFnZUhlaWdodDsKICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aCAqIHBhZ2VXaWR0aDsKICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaGVpZ2h0ICogcGFnZUhlaWdodDsKICAgIHN3aXRjaCAocm90YXRpb24pIHsKICAgICAgY2FzZSAwOgogICAgICAgIHJldHVybiBbeCArIHNoaWZ0WCArIHBhZ2VYLCBwYWdlSGVpZ2h0IC0geSAtIHNoaWZ0WSAtIGhlaWdodCArIHBhZ2VZLCB4ICsgc2hpZnRYICsgd2lkdGggKyBwYWdlWCwgcGFnZUhlaWdodCAtIHkgLSBzaGlmdFkgKyBwYWdlWV07CiAgICAgIGNhc2UgOTA6CiAgICAgICAgcmV0dXJuIFt4ICsgc2hpZnRZICsgcGFnZVgsIHBhZ2VIZWlnaHQgLSB5ICsgc2hpZnRYICsgcGFnZVksIHggKyBzaGlmdFkgKyBoZWlnaHQgKyBwYWdlWCwgcGFnZUhlaWdodCAtIHkgKyBzaGlmdFggKyB3aWR0aCArIHBhZ2VZXTsKICAgICAgY2FzZSAxODA6CiAgICAgICAgcmV0dXJuIFt4IC0gc2hpZnRYIC0gd2lkdGggKyBwYWdlWCwgcGFnZUhlaWdodCAtIHkgKyBzaGlmdFkgKyBwYWdlWSwgeCAtIHNoaWZ0WCArIHBhZ2VYLCBwYWdlSGVpZ2h0IC0geSArIHNoaWZ0WSArIGhlaWdodCArIHBhZ2VZXTsKICAgICAgY2FzZSAyNzA6CiAgICAgICAgcmV0dXJuIFt4IC0gc2hpZnRZIC0gaGVpZ2h0ICsgcGFnZVgsIHBhZ2VIZWlnaHQgLSB5IC0gc2hpZnRYIC0gd2lkdGggKyBwYWdlWSwgeCAtIHNoaWZ0WSArIHBhZ2VYLCBwYWdlSGVpZ2h0IC0geSAtIHNoaWZ0WCArIHBhZ2VZXTsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKTsKICAgIH0KICB9CiAgZ2V0UmVjdEluQ3VycmVudENvb3JkcyhyZWN0LCBwYWdlSGVpZ2h0KSB7CiAgICBjb25zdCBbeDEsIHkxLCB4MiwgeTJdID0gcmVjdDsKICAgIGNvbnN0IHdpZHRoID0geDIgLSB4MTsKICAgIGNvbnN0IGhlaWdodCA9IHkyIC0geTE7CiAgICBzd2l0Y2ggKHRoaXMucm90YXRpb24pIHsKICAgICAgY2FzZSAwOgogICAgICAgIHJldHVybiBbeDEsIHBhZ2VIZWlnaHQgLSB5Miwgd2lkdGgsIGhlaWdodF07CiAgICAgIGNhc2UgOTA6CiAgICAgICAgcmV0dXJuIFt4MSwgcGFnZUhlaWdodCAtIHkxLCBoZWlnaHQsIHdpZHRoXTsKICAgICAgY2FzZSAxODA6CiAgICAgICAgcmV0dXJuIFt4MiwgcGFnZUhlaWdodCAtIHkxLCB3aWR0aCwgaGVpZ2h0XTsKICAgICAgY2FzZSAyNzA6CiAgICAgICAgcmV0dXJuIFt4MiwgcGFnZUhlaWdodCAtIHkyLCBoZWlnaHQsIHdpZHRoXTsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKTsKICAgIH0KICB9CiAgZ2V0UERGUmVjdCgpIHsKICAgIHJldHVybiB0aGlzLmdldFJlY3QoMCwgMCk7CiAgfQogIGdldE5vbkhDTUNvbG9yKCkgewogICAgcmV0dXJuIHRoaXMuY29sb3IgJiYgQW5ub3RhdGlvbkVkaXRvci5fY29sb3JNYW5hZ2VyLmNvbnZlcnQodGhpcy5fdWlNYW5hZ2VyLmdldE5vbkhDTUNvbG9yKHRoaXMuY29sb3IpKTsKICB9CiAgb25VcGRhdGVkQ29sb3IoKSB7CiAgICB0aGlzLiNjb21tZW50Py5vblVwZGF0ZWRDb2xvcigpOwogIH0KICBnZXREYXRhKCkgewogICAgY29uc3QgewogICAgICBjb21tZW50OiB7CiAgICAgICAgdGV4dDogc3RyLAogICAgICAgIGNvbG9yLAogICAgICAgIGRhdGUsCiAgICAgICAgb3BhY2l0eSwKICAgICAgICBkZWxldGVkLAogICAgICAgIHJpY2hUZXh0CiAgICAgIH0sCiAgICAgIHVpZDogaWQsCiAgICAgIHBhZ2VJbmRleCwKICAgICAgY3JlYXRpb25EYXRlLAogICAgICBtb2RpZmljYXRpb25EYXRlCiAgICB9ID0gdGhpczsKICAgIHJldHVybiB7CiAgICAgIGlkLAogICAgICBwYWdlSW5kZXgsCiAgICAgIHJlY3Q6IHRoaXMuZ2V0UERGUmVjdCgpLAogICAgICByaWNoVGV4dCwKICAgICAgY29udGVudHNPYmo6IHsKICAgICAgICBzdHIKICAgICAgfSwKICAgICAgY3JlYXRpb25EYXRlLAogICAgICBtb2RpZmljYXRpb25EYXRlOiBkYXRlIHx8IG1vZGlmaWNhdGlvbkRhdGUsCiAgICAgIHBvcHVwUmVmOiAhZGVsZXRlZCwKICAgICAgY29sb3IsCiAgICAgIG9wYWNpdHkKICAgIH07CiAgfQogIG9uY2VBZGRlZChmb2N1cykge30KICBpc0VtcHR5KCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBlbmFibGVFZGl0TW9kZSgpIHsKICAgIGlmICh0aGlzLmlzSW5FZGl0TW9kZSgpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHRoaXMucGFyZW50LnNldEVkaXRpbmdTdGF0ZShmYWxzZSk7CiAgICB0aGlzLiNpc0luRWRpdE1vZGUgPSB0cnVlOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGRpc2FibGVFZGl0TW9kZSgpIHsKICAgIGlmICghdGhpcy5pc0luRWRpdE1vZGUoKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB0aGlzLnBhcmVudC5zZXRFZGl0aW5nU3RhdGUodHJ1ZSk7CiAgICB0aGlzLiNpc0luRWRpdE1vZGUgPSBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KICBpc0luRWRpdE1vZGUoKSB7CiAgICByZXR1cm4gdGhpcy4jaXNJbkVkaXRNb2RlOwogIH0KICBzaG91bGRHZXRLZXlib2FyZEV2ZW50cygpIHsKICAgIHJldHVybiB0aGlzLiNpc1Jlc2l6ZXJFbmFibGVkRm9yS2V5Ym9hcmQ7CiAgfQogIG5lZWRzVG9CZVJlYnVpbHQoKSB7CiAgICByZXR1cm4gdGhpcy5kaXYgJiYgIXRoaXMuaXNBdHRhY2hlZFRvRE9NOwogIH0KICBnZXQgaXNPblNjcmVlbigpIHsKICAgIGNvbnN0IHsKICAgICAgdG9wLAogICAgICBsZWZ0LAogICAgICBib3R0b20sCiAgICAgIHJpZ2h0CiAgICB9ID0gdGhpcy5nZXRDbGllbnREaW1lbnNpb25zKCk7CiAgICBjb25zdCB7CiAgICAgIGlubmVySGVpZ2h0LAogICAgICBpbm5lcldpZHRoCiAgICB9ID0gd2luZG93OwogICAgcmV0dXJuIGxlZnQgPCBpbm5lcldpZHRoICYmIHJpZ2h0ID4gMCAmJiB0b3AgPCBpbm5lckhlaWdodCAmJiBib3R0b20gPiAwOwogIH0KICAjYWRkRm9jdXNMaXN0ZW5lcnMoKSB7CiAgICBpZiAodGhpcy4jZm9jdXNBQyB8fCAhdGhpcy5kaXYpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jZm9jdXNBQyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX3VpTWFuYWdlci5jb21iaW5lZFNpZ25hbCh0aGlzLiNmb2N1c0FDKTsKICAgIHRoaXMuZGl2LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLCB0aGlzLmZvY3VzaW4uYmluZCh0aGlzKSwgewogICAgICBzaWduYWwKICAgIH0pOwogICAgdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCB0aGlzLmZvY3Vzb3V0LmJpbmQodGhpcyksIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICB9CiAgcmVidWlsZCgpIHsKICAgIHRoaXMuI2FkZEZvY3VzTGlzdGVuZXJzKCk7CiAgfQogIHJvdGF0ZShfYW5nbGUpIHt9CiAgcmVzaXplKCkge30KICBzZXJpYWxpemVEZWxldGVkKCkgewogICAgcmV0dXJuIHsKICAgICAgaWQ6IHRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCwKICAgICAgZGVsZXRlZDogdHJ1ZSwKICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwKICAgICAgcG9wdXBSZWY6IHRoaXMuX2luaXRpYWxEYXRhPy5wb3B1cFJlZiB8fCAiIgogICAgfTsKICB9CiAgc2VyaWFsaXplKGlzRm9yQ29weWluZyA9IGZhbHNlLCBjb250ZXh0ID0gbnVsbCkgewogICAgcmV0dXJuIHsKICAgICAgYW5ub3RhdGlvblR5cGU6IHRoaXMubW9kZSwKICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwKICAgICAgcmVjdDogdGhpcy5nZXRQREZSZWN0KCksCiAgICAgIHJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uLAogICAgICBzdHJ1Y3RUcmVlUGFyZW50SWQ6IHRoaXMuX3N0cnVjdFRyZWVQYXJlbnRJZCwKICAgICAgcG9wdXBSZWY6IHRoaXMuX2luaXRpYWxEYXRhPy5wb3B1cFJlZiB8fCAiIgogICAgfTsKICB9CiAgc3RhdGljIGFzeW5jIGRlc2VyaWFsaXplKGRhdGEsIHBhcmVudCwgdWlNYW5hZ2VyKSB7CiAgICBjb25zdCBlZGl0b3IgPSBuZXcgdGhpcy5wcm90b3R5cGUuY29uc3RydWN0b3IoewogICAgICBwYXJlbnQsCiAgICAgIGlkOiBwYXJlbnQuZ2V0TmV4dElkKCksCiAgICAgIHVpTWFuYWdlciwKICAgICAgYW5ub3RhdGlvbkVsZW1lbnRJZDogZGF0YS5hbm5vdGF0aW9uRWxlbWVudElkLAogICAgICBjcmVhdGlvbkRhdGU6IGRhdGEuY3JlYXRpb25EYXRlLAogICAgICBtb2RpZmljYXRpb25EYXRlOiBkYXRhLm1vZGlmaWNhdGlvbkRhdGUKICAgIH0pOwogICAgZWRpdG9yLnJvdGF0aW9uID0gZGF0YS5yb3RhdGlvbjsKICAgIGVkaXRvci4jYWNjZXNzaWJpbGl0eURhdGEgPSBkYXRhLmFjY2Vzc2liaWxpdHlEYXRhOwogICAgZWRpdG9yLl9pc0NvcHkgPSBkYXRhLmlzQ29weSB8fCBmYWxzZTsKICAgIGNvbnN0IFtwYWdlV2lkdGgsIHBhZ2VIZWlnaHRdID0gZWRpdG9yLnBhZ2VEaW1lbnNpb25zOwogICAgY29uc3QgW3gsIHksIHdpZHRoLCBoZWlnaHRdID0gZWRpdG9yLmdldFJlY3RJbkN1cnJlbnRDb29yZHMoZGF0YS5yZWN0LCBwYWdlSGVpZ2h0KTsKICAgIGVkaXRvci54ID0geCAvIHBhZ2VXaWR0aDsKICAgIGVkaXRvci55ID0geSAvIHBhZ2VIZWlnaHQ7CiAgICBlZGl0b3Iud2lkdGggPSB3aWR0aCAvIHBhZ2VXaWR0aDsKICAgIGVkaXRvci5oZWlnaHQgPSBoZWlnaHQgLyBwYWdlSGVpZ2h0OwogICAgcmV0dXJuIGVkaXRvcjsKICB9CiAgZ2V0IGhhc0JlZW5Nb2RpZmllZCgpIHsKICAgIHJldHVybiAhIXRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCAmJiAodGhpcy5kZWxldGVkIHx8IHRoaXMuc2VyaWFsaXplKCkgIT09IG51bGwpOwogIH0KICByZW1vdmUoKSB7CiAgICB0aGlzLiNmb2N1c0FDPy5hYm9ydCgpOwogICAgdGhpcy4jZm9jdXNBQyA9IG51bGw7CiAgICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7CiAgICAgIHRoaXMuY29tbWl0KCk7CiAgICB9CiAgICBpZiAodGhpcy5wYXJlbnQpIHsKICAgICAgdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5fdWlNYW5hZ2VyLnJlbW92ZUVkaXRvcih0aGlzKTsKICAgIH0KICAgIHRoaXMuaGlkZUNvbW1lbnRQb3B1cCgpOwogICAgaWYgKHRoaXMuI21vdmVJbkRPTVRpbWVvdXQpIHsKICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI21vdmVJbkRPTVRpbWVvdXQpOwogICAgICB0aGlzLiNtb3ZlSW5ET01UaW1lb3V0ID0gbnVsbDsKICAgIH0KICAgIHRoaXMuI3N0b3BSZXNpemluZygpOwogICAgdGhpcy5yZW1vdmVFZGl0VG9vbGJhcigpOwogICAgaWYgKHRoaXMuI3RlbGVtZXRyeVRpbWVvdXRzKSB7CiAgICAgIGZvciAoY29uc3QgdGltZW91dCBvZiB0aGlzLiN0ZWxlbWV0cnlUaW1lb3V0cy52YWx1ZXMoKSkgewogICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTsKICAgICAgfQogICAgICB0aGlzLiN0ZWxlbWV0cnlUaW1lb3V0cyA9IG51bGw7CiAgICB9CiAgICB0aGlzLnBhcmVudCA9IG51bGw7CiAgICB0aGlzLiN0b3VjaE1hbmFnZXI/LmRlc3Ryb3koKTsKICAgIHRoaXMuI3RvdWNoTWFuYWdlciA9IG51bGw7CiAgICB0aGlzLiNmYWtlQW5ub3RhdGlvbj8ucmVtb3ZlKCk7CiAgICB0aGlzLiNmYWtlQW5ub3RhdGlvbiA9IG51bGw7CiAgfQogIGdldCBpc1Jlc2l6YWJsZSgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgbWFrZVJlc2l6YWJsZSgpIHsKICAgIGlmICh0aGlzLmlzUmVzaXphYmxlKSB7CiAgICAgIHRoaXMuI2NyZWF0ZVJlc2l6ZXJzKCk7CiAgICAgIHRoaXMuI3Jlc2l6ZXJzRGl2LmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOwogICAgfQogIH0KICBnZXQgdG9vbGJhclBvc2l0aW9uKCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGdldCBjb21tZW50QnV0dG9uUG9zaXRpb24oKSB7CiAgICByZXR1cm4gdGhpcy5fdWlNYW5hZ2VyLmRpcmVjdGlvbiA9PT0gImx0ciIgPyBbMSwgMF0gOiBbMCwgMF07CiAgfQogIGdldCBjb21tZW50QnV0dG9uUG9zaXRpb25JblBhZ2UoKSB7CiAgICBjb25zdCB7CiAgICAgIGNvbW1lbnRCdXR0b25Qb3NpdGlvbjogW3Bvc1gsIHBvc1ldCiAgICB9ID0gdGhpczsKICAgIGNvbnN0IFtibFgsIGJsWSwgdHJYLCB0clldID0gdGhpcy5nZXRQREZSZWN0KCk7CiAgICByZXR1cm4gW0Fubm90YXRpb25FZGl0b3IuX3JvdW5kKGJsWCArICh0clggLSBibFgpICogcG9zWCksIEFubm90YXRpb25FZGl0b3IuX3JvdW5kKGJsWSArICh0clkgLSBibFkpICogKDEgLSBwb3NZKSldOwogIH0KICBnZXQgY29tbWVudEJ1dHRvbkNvbG9yKCkgewogICAgcmV0dXJuIHRoaXMuX3VpTWFuYWdlci5tYWtlQ29tbWVudENvbG9yKHRoaXMuZ2V0Tm9uSENNQ29sb3IoKSwgdGhpcy5vcGFjaXR5KTsKICB9CiAgZ2V0IGNvbW1lbnRQb3B1cFBvc2l0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuI2NvbW1lbnQuY29tbWVudFBvcHVwUG9zaXRpb25JbkxheWVyOwogIH0KICBzZXQgY29tbWVudFBvcHVwUG9zaXRpb24ocG9zKSB7CiAgICB0aGlzLiNjb21tZW50LmNvbW1lbnRQb3B1cFBvc2l0aW9uSW5MYXllciA9IHBvczsKICB9CiAgaGFzRGVmYXVsdFBvcHVwUG9zaXRpb24oKSB7CiAgICByZXR1cm4gdGhpcy4jY29tbWVudC5oYXNEZWZhdWx0UG9wdXBQb3NpdGlvbigpOwogIH0KICBnZXQgY29tbWVudEJ1dHRvbldpZHRoKCkgewogICAgcmV0dXJuIHRoaXMuI2NvbW1lbnQuY29tbWVudEJ1dHRvbldpZHRoOwogIH0KICBnZXQgZWxlbWVudEJlZm9yZVBvcHVwKCkgewogICAgcmV0dXJuIHRoaXMuZGl2OwogIH0KICBzZXRDb21tZW50QnV0dG9uU3RhdGVzKG9wdGlvbnMpIHsKICAgIHRoaXMuI2NvbW1lbnQ/LnNldENvbW1lbnRCdXR0b25TdGF0ZXMob3B0aW9ucyk7CiAgfQogIGtleWRvd24oZXZlbnQpIHsKICAgIGlmICghdGhpcy5pc1Jlc2l6YWJsZSB8fCBldmVudC50YXJnZXQgIT09IHRoaXMuZGl2IHx8IGV2ZW50LmtleSAhPT0gIkVudGVyIikgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLl91aU1hbmFnZXIuc2V0U2VsZWN0ZWQodGhpcyk7CiAgICB0aGlzLiNzYXZlZERpbWVuc2lvbnMgPSB7CiAgICAgIHNhdmVkWDogdGhpcy54LAogICAgICBzYXZlZFk6IHRoaXMueSwKICAgICAgc2F2ZWRXaWR0aDogdGhpcy53aWR0aCwKICAgICAgc2F2ZWRIZWlnaHQ6IHRoaXMuaGVpZ2h0CiAgICB9OwogICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLiNyZXNpemVyc0Rpdi5jaGlsZHJlbjsKICAgIGlmICghdGhpcy4jYWxsUmVzaXplckRpdnMpIHsKICAgICAgdGhpcy4jYWxsUmVzaXplckRpdnMgPSBBcnJheS5mcm9tKGNoaWxkcmVuKTsKICAgICAgY29uc3QgYm91bmRSZXNpemVyS2V5ZG93biA9IHRoaXMuI3Jlc2l6ZXJLZXlkb3duLmJpbmQodGhpcyk7CiAgICAgIGNvbnN0IGJvdW5kUmVzaXplckJsdXIgPSB0aGlzLiNyZXNpemVyQmx1ci5iaW5kKHRoaXMpOwogICAgICBjb25zdCBzaWduYWwgPSB0aGlzLl91aU1hbmFnZXIuX3NpZ25hbDsKICAgICAgZm9yIChjb25zdCBkaXYgb2YgdGhpcy4jYWxsUmVzaXplckRpdnMpIHsKICAgICAgICBjb25zdCBuYW1lID0gZGl2LmdldEF0dHJpYnV0ZSgiZGF0YS1yZXNpemVyLW5hbWUiKTsKICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCJyb2xlIiwgInNwaW5idXR0b24iKTsKICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGJvdW5kUmVzaXplcktleWRvd24sIHsKICAgICAgICAgIHNpZ25hbAogICAgICAgIH0pOwogICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgYm91bmRSZXNpemVyQmx1ciwgewogICAgICAgICAgc2lnbmFsCiAgICAgICAgfSk7CiAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgdGhpcy4jcmVzaXplckZvY3VzLmJpbmQodGhpcywgbmFtZSksIHsKICAgICAgICAgIHNpZ25hbAogICAgICAgIH0pOwogICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsIEFubm90YXRpb25FZGl0b3IuX2wxMG5SZXNpemVyW25hbWVdKTsKICAgICAgfQogICAgfQogICAgY29uc3QgZmlyc3QgPSB0aGlzLiNhbGxSZXNpemVyRGl2c1swXTsKICAgIGxldCBmaXJzdFBvc2l0aW9uID0gMDsKICAgIGZvciAoY29uc3QgZGl2IG9mIGNoaWxkcmVuKSB7CiAgICAgIGlmIChkaXYgPT09IGZpcnN0KSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZmlyc3RQb3NpdGlvbisrOwogICAgfQogICAgY29uc3QgbmV4dEZpcnN0UG9zaXRpb24gPSAoMzYwIC0gdGhpcy5yb3RhdGlvbiArIHRoaXMucGFyZW50Um90YXRpb24pICUgMzYwIC8gOTAgKiAodGhpcy4jYWxsUmVzaXplckRpdnMubGVuZ3RoIC8gNCk7CiAgICBpZiAobmV4dEZpcnN0UG9zaXRpb24gIT09IGZpcnN0UG9zaXRpb24pIHsKICAgICAgaWYgKG5leHRGaXJzdFBvc2l0aW9uIDwgZmlyc3RQb3NpdGlvbikgewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3RQb3NpdGlvbiAtIG5leHRGaXJzdFBvc2l0aW9uOyBpKyspIHsKICAgICAgICAgIHRoaXMuI3Jlc2l6ZXJzRGl2LmFwcGVuZCh0aGlzLiNyZXNpemVyc0Rpdi5maXJzdENoaWxkKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobmV4dEZpcnN0UG9zaXRpb24gPiBmaXJzdFBvc2l0aW9uKSB7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXh0Rmlyc3RQb3NpdGlvbiAtIGZpcnN0UG9zaXRpb247IGkrKykgewogICAgICAgICAgdGhpcy4jcmVzaXplcnNEaXYuZmlyc3RDaGlsZC5iZWZvcmUodGhpcy4jcmVzaXplcnNEaXYubGFzdENoaWxkKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGV0IGkgPSAwOwogICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7CiAgICAgICAgY29uc3QgZGl2ID0gdGhpcy4jYWxsUmVzaXplckRpdnNbaSsrXTsKICAgICAgICBjb25zdCBuYW1lID0gZGl2LmdldEF0dHJpYnV0ZSgiZGF0YS1yZXNpemVyLW5hbWUiKTsKICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsIEFubm90YXRpb25FZGl0b3IuX2wxMG5SZXNpemVyW25hbWVdKTsKICAgICAgfQogICAgfQogICAgdGhpcy4jc2V0UmVzaXplclRhYkluZGV4KDApOwogICAgdGhpcy4jaXNSZXNpemVyRW5hYmxlZEZvcktleWJvYXJkID0gdHJ1ZTsKICAgIHRoaXMuI3Jlc2l6ZXJzRGl2LmZpcnN0Q2hpbGQuZm9jdXMoewogICAgICBmb2N1c1Zpc2libGU6IHRydWUKICAgIH0pOwogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwogIH0KICAjcmVzaXplcktleWRvd24oZXZlbnQpIHsKICAgIEFubm90YXRpb25FZGl0b3IuX3Jlc2l6ZXJLZXlib2FyZE1hbmFnZXIuZXhlYyh0aGlzLCBldmVudCk7CiAgfQogICNyZXNpemVyQmx1cihldmVudCkgewogICAgaWYgKHRoaXMuI2lzUmVzaXplckVuYWJsZWRGb3JLZXlib2FyZCAmJiBldmVudC5yZWxhdGVkVGFyZ2V0Py5wYXJlbnROb2RlICE9PSB0aGlzLiNyZXNpemVyc0RpdikgewogICAgICB0aGlzLiNzdG9wUmVzaXppbmcoKTsKICAgIH0KICB9CiAgI3Jlc2l6ZXJGb2N1cyhuYW1lKSB7CiAgICB0aGlzLiNmb2N1c2VkUmVzaXplck5hbWUgPSB0aGlzLiNpc1Jlc2l6ZXJFbmFibGVkRm9yS2V5Ym9hcmQgPyBuYW1lIDogIiI7CiAgfQogICNzZXRSZXNpemVyVGFiSW5kZXgodmFsdWUpIHsKICAgIGlmICghdGhpcy4jYWxsUmVzaXplckRpdnMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChjb25zdCBkaXYgb2YgdGhpcy4jYWxsUmVzaXplckRpdnMpIHsKICAgICAgZGl2LnRhYkluZGV4ID0gdmFsdWU7CiAgICB9CiAgfQogIF9yZXNpemVXaXRoS2V5Ym9hcmQoeCwgeSkgewogICAgaWYgKCF0aGlzLiNpc1Jlc2l6ZXJFbmFibGVkRm9yS2V5Ym9hcmQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jcmVzaXplclBvaW50ZXJtb3ZlKHRoaXMuI2ZvY3VzZWRSZXNpemVyTmFtZSwgewogICAgICBkZWx0YVg6IHgsCiAgICAgIGRlbHRhWTogeSwKICAgICAgZnJvbUtleWJvYXJkOiB0cnVlCiAgICB9KTsKICB9CiAgI3N0b3BSZXNpemluZygpIHsKICAgIHRoaXMuI2lzUmVzaXplckVuYWJsZWRGb3JLZXlib2FyZCA9IGZhbHNlOwogICAgdGhpcy4jc2V0UmVzaXplclRhYkluZGV4KC0xKTsKICAgIHRoaXMuI2FkZFJlc2l6ZVRvVW5kb1N0YWNrKCk7CiAgfQogIF9zdG9wUmVzaXppbmdXaXRoS2V5Ym9hcmQoKSB7CiAgICB0aGlzLiNzdG9wUmVzaXppbmcoKTsKICAgIHRoaXMuZGl2LmZvY3VzKCk7CiAgfQogIHNlbGVjdCgpIHsKICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQgJiYgdGhpcy5fZWRpdFRvb2xiYXIpIHsKICAgICAgdGhpcy5fZWRpdFRvb2xiYXIuc2hvdygpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmlzU2VsZWN0ZWQgPSB0cnVlOwogICAgdGhpcy5tYWtlUmVzaXphYmxlKCk7CiAgICB0aGlzLmRpdj8uY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWRFZGl0b3IiKTsKICAgIGlmICghdGhpcy5fZWRpdFRvb2xiYXIpIHsKICAgICAgdGhpcy5hZGRFZGl0VG9vbGJhcigpLnRoZW4oKCkgPT4gewogICAgICAgIGlmICh0aGlzLmRpdj8uY2xhc3NMaXN0LmNvbnRhaW5zKCJzZWxlY3RlZEVkaXRvciIpKSB7CiAgICAgICAgICB0aGlzLl9lZGl0VG9vbGJhcj8uc2hvdygpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuX2VkaXRUb29sYmFyPy5zaG93KCk7CiAgICB0aGlzLiNhbHRUZXh0Py50b2dnbGVBbHRUZXh0QmFkZ2UoZmFsc2UpOwogIH0KICBmb2N1cygpIHsKICAgIGlmICh0aGlzLmRpdiAmJiAhdGhpcy5kaXYuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRpdj8uZm9jdXMoewogICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWUKICAgICAgfSksIDApOwogICAgfQogIH0KICB1bnNlbGVjdCgpIHsKICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuaXNTZWxlY3RlZCA9IGZhbHNlOwogICAgdGhpcy4jcmVzaXplcnNEaXY/LmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOwogICAgdGhpcy5kaXY/LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkRWRpdG9yIik7CiAgICBpZiAodGhpcy5kaXY/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7CiAgICAgIHRoaXMuX3VpTWFuYWdlci5jdXJyZW50TGF5ZXIuZGl2LmZvY3VzKHsKICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlCiAgICAgIH0pOwogICAgfQogICAgdGhpcy5fZWRpdFRvb2xiYXI/LmhpZGUoKTsKICAgIHRoaXMuI2FsdFRleHQ/LnRvZ2dsZUFsdFRleHRCYWRnZSh0cnVlKTsKICAgIHRoaXMuaGlkZUNvbW1lbnRQb3B1cCgpOwogIH0KICBoaWRlQ29tbWVudFBvcHVwKCkgewogICAgaWYgKHRoaXMuaGFzQ29tbWVudCkgewogICAgICB0aGlzLl91aU1hbmFnZXIudG9nZ2xlQ29tbWVudChudWxsKTsKICAgIH0KICB9CiAgdXBkYXRlUGFyYW1zKHR5cGUsIHZhbHVlKSB7fQogIGRpc2FibGVFZGl0aW5nKCkge30KICBlbmFibGVFZGl0aW5nKCkge30KICBnZXQgY2FuQ2hhbmdlQ29udGVudCgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZW50ZXJJbkVkaXRNb2RlKCkgewogICAgaWYgKCF0aGlzLmNhbkNoYW5nZUNvbnRlbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpOwogICAgdGhpcy5kaXYuZm9jdXMoKTsKICB9CiAgZGJsY2xpY2soZXZlbnQpIHsKICAgIGlmIChldmVudC50YXJnZXQubm9kZU5hbWUgPT09ICJCVVRUT04iKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuZW50ZXJJbkVkaXRNb2RlKCk7CiAgICB0aGlzLnBhcmVudC51cGRhdGVUb29sYmFyKHsKICAgICAgbW9kZTogdGhpcy5jb25zdHJ1Y3Rvci5fZWRpdG9yVHlwZSwKICAgICAgZWRpdElkOiB0aGlzLnVpZAogICAgfSk7CiAgfQogIGdldEVsZW1lbnRGb3JBbHRUZXh0KCkgewogICAgcmV0dXJuIHRoaXMuZGl2OwogIH0KICBnZXQgY29udGVudERpdigpIHsKICAgIHJldHVybiB0aGlzLmRpdjsKICB9CiAgZ2V0IGlzRWRpdGluZygpIHsKICAgIHJldHVybiB0aGlzLiNpc0VkaXRpbmc7CiAgfQogIHNldCBpc0VkaXRpbmcodmFsdWUpIHsKICAgIHRoaXMuI2lzRWRpdGluZyA9IHZhbHVlOwogICAgaWYgKCF0aGlzLnBhcmVudCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodmFsdWUpIHsKICAgICAgdGhpcy5wYXJlbnQuc2V0U2VsZWN0ZWQodGhpcyk7CiAgICAgIHRoaXMucGFyZW50LnNldEFjdGl2ZUVkaXRvcih0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMucGFyZW50LnNldEFjdGl2ZUVkaXRvcihudWxsKTsKICAgIH0KICB9CiAgc3RhdGljIGdldCBNSU5fU0laRSgpIHsKICAgIHJldHVybiAxNjsKICB9CiAgc3RhdGljIGNhbkNyZWF0ZU5ld0VtcHR5RWRpdG9yKCkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGdldCB0ZWxlbWV0cnlJbml0aWFsRGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIGFjdGlvbjogImFkZGVkIgogICAgfTsKICB9CiAgZ2V0IHRlbGVtZXRyeUZpbmFsRGF0YSgpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBfcmVwb3J0VGVsZW1ldHJ5KGRhdGEsIG11c3RXYWl0ID0gZmFsc2UpIHsKICAgIGlmIChtdXN0V2FpdCkgewogICAgICB0aGlzLiN0ZWxlbWV0cnlUaW1lb3V0cyB8fD0gbmV3IE1hcCgpOwogICAgICBjb25zdCB7CiAgICAgICAgYWN0aW9uCiAgICAgIH0gPSBkYXRhOwogICAgICBsZXQgdGltZW91dCA9IHRoaXMuI3RlbGVtZXRyeVRpbWVvdXRzLmdldChhY3Rpb24pOwogICAgICBpZiAodGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTsKICAgICAgfQogICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgdGhpcy5fcmVwb3J0VGVsZW1ldHJ5KGRhdGEpOwogICAgICAgIHRoaXMuI3RlbGVtZXRyeVRpbWVvdXRzLmRlbGV0ZShhY3Rpb24pOwogICAgICAgIGlmICh0aGlzLiN0ZWxlbWV0cnlUaW1lb3V0cy5zaXplID09PSAwKSB7CiAgICAgICAgICB0aGlzLiN0ZWxlbWV0cnlUaW1lb3V0cyA9IG51bGw7CiAgICAgICAgfQogICAgICB9LCBBbm5vdGF0aW9uRWRpdG9yLl90ZWxlbWV0cnlUaW1lb3V0KTsKICAgICAgdGhpcy4jdGVsZW1ldHJ5VGltZW91dHMuc2V0KGFjdGlvbiwgdGltZW91dCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGRhdGEudHlwZSB8fD0gdGhpcy5lZGl0b3JUeXBlOwogICAgdGhpcy5fdWlNYW5hZ2VyLl9ldmVudEJ1cy5kaXNwYXRjaCgicmVwb3J0dGVsZW1ldHJ5IiwgewogICAgICBzb3VyY2U6IHRoaXMsCiAgICAgIGRldGFpbHM6IHsKICAgICAgICB0eXBlOiAiZWRpdGluZyIsCiAgICAgICAgZGF0YQogICAgICB9CiAgICB9KTsKICB9CiAgc2hvdyh2aXNpYmxlID0gdGhpcy5faXNWaXNpYmxlKSB7CiAgICB0aGlzLmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJoaWRkZW4iLCAhdmlzaWJsZSk7CiAgICB0aGlzLl9pc1Zpc2libGUgPSB2aXNpYmxlOwogIH0KICBlbmFibGUoKSB7CiAgICBpZiAodGhpcy5kaXYpIHsKICAgICAgdGhpcy5kaXYudGFiSW5kZXggPSAwOwogICAgfQogICAgdGhpcy4jZGlzYWJsZWQgPSBmYWxzZTsKICB9CiAgZGlzYWJsZSgpIHsKICAgIGlmICh0aGlzLmRpdikgewogICAgICB0aGlzLmRpdi50YWJJbmRleCA9IC0xOwogICAgfQogICAgdGhpcy4jZGlzYWJsZWQgPSB0cnVlOwogIH0KICB1cGRhdGVGYWtlQW5ub3RhdGlvbkVsZW1lbnQoYW5ub3RhdGlvbkxheWVyKSB7CiAgICBpZiAoIXRoaXMuI2Zha2VBbm5vdGF0aW9uICYmICF0aGlzLmRlbGV0ZWQpIHsKICAgICAgdGhpcy4jZmFrZUFubm90YXRpb24gPSBhbm5vdGF0aW9uTGF5ZXIuYWRkRmFrZUFubm90YXRpb24odGhpcyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLmRlbGV0ZWQpIHsKICAgICAgdGhpcy4jZmFrZUFubm90YXRpb24ucmVtb3ZlKCk7CiAgICAgIHRoaXMuI2Zha2VBbm5vdGF0aW9uID0gbnVsbDsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuaGFzRWRpdGVkQ29tbWVudCB8fCB0aGlzLl9oYXNCZWVuTW92ZWQgfHwgdGhpcy5faGFzQmVlblJlc2l6ZWQpIHsKICAgICAgdGhpcy4jZmFrZUFubm90YXRpb24udXBkYXRlRWRpdGVkKHsKICAgICAgICByZWN0OiB0aGlzLmdldFBERlJlY3QoKSwKICAgICAgICBwb3B1cDogdGhpcy5jb21tZW50CiAgICAgIH0pOwogICAgfQogIH0KICByZW5kZXJBbm5vdGF0aW9uRWxlbWVudChhbm5vdGF0aW9uKSB7CiAgICBpZiAodGhpcy5kZWxldGVkKSB7CiAgICAgIGFubm90YXRpb24uaGlkZSgpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxldCBjb250ZW50ID0gYW5ub3RhdGlvbi5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLmFubm90YXRpb25Db250ZW50Iik7CiAgICBpZiAoIWNvbnRlbnQpIHsKICAgICAgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoImFubm90YXRpb25Db250ZW50IiwgdGhpcy5lZGl0b3JUeXBlKTsKICAgICAgYW5ub3RhdGlvbi5jb250YWluZXIucHJlcGVuZChjb250ZW50KTsKICAgIH0gZWxzZSBpZiAoY29udGVudC5ub2RlTmFtZSA9PT0gIkNBTlZBUyIpIHsKICAgICAgY29uc3QgY2FudmFzID0gY29udGVudDsKICAgICAgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoImFubm90YXRpb25Db250ZW50IiwgdGhpcy5lZGl0b3JUeXBlKTsKICAgICAgY2FudmFzLmJlZm9yZShjb250ZW50KTsKICAgIH0KICAgIHJldHVybiBjb250ZW50OwogIH0KICByZXNldEFubm90YXRpb25FbGVtZW50KGFubm90YXRpb24pIHsKICAgIGNvbnN0IHsKICAgICAgZmlyc3RDaGlsZAogICAgfSA9IGFubm90YXRpb24uY29udGFpbmVyOwogICAgaWYgKGZpcnN0Q2hpbGQ/Lm5vZGVOYW1lID09PSAiRElWIiAmJiBmaXJzdENoaWxkLmNsYXNzTGlzdC5jb250YWlucygiYW5ub3RhdGlvbkNvbnRlbnQiKSkgewogICAgICBmaXJzdENoaWxkLnJlbW92ZSgpOwogICAgfQogIH0KfQpjbGFzcyBGYWtlRWRpdG9yIGV4dGVuZHMgQW5ub3RhdGlvbkVkaXRvciB7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcihwYXJhbXMpOwogICAgdGhpcy5hbm5vdGF0aW9uRWxlbWVudElkID0gcGFyYW1zLmFubm90YXRpb25FbGVtZW50SWQ7CiAgICB0aGlzLmRlbGV0ZWQgPSB0cnVlOwogIH0KICBzZXJpYWxpemUoKSB7CiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVEZWxldGVkKCk7CiAgfQp9Cgo7Ly8gLi9zcmMvc2hhcmVkL211cm11cmhhc2gzLmpzCmNvbnN0IFNFRUQgPSAweGMzZDJlMWYwOwpjb25zdCBNQVNLX0hJR0ggPSAweGZmZmYwMDAwOwpjb25zdCBNQVNLX0xPVyA9IDB4ZmZmZjsKY2xhc3MgTXVybXVySGFzaDNfNjQgewogIGNvbnN0cnVjdG9yKHNlZWQpIHsKICAgIHRoaXMuaDEgPSBzZWVkID8gc2VlZCAmIDB4ZmZmZmZmZmYgOiBTRUVEOwogICAgdGhpcy5oMiA9IHNlZWQgPyBzZWVkICYgMHhmZmZmZmZmZiA6IFNFRUQ7CiAgfQogIHVwZGF0ZShpbnB1dCkgewogICAgbGV0IGRhdGEsIGxlbmd0aDsKICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICJzdHJpbmciKSB7CiAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShpbnB1dC5sZW5ndGggKiAyKTsKICAgICAgbGVuZ3RoID0gMDsKICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gaW5wdXQubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIGNvbnN0IGNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkpOwogICAgICAgIGlmIChjb2RlIDw9IDB4ZmYpIHsKICAgICAgICAgIGRhdGFbbGVuZ3RoKytdID0gY29kZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0YVtsZW5ndGgrK10gPSBjb2RlID4+PiA4OwogICAgICAgICAgZGF0YVtsZW5ndGgrK10gPSBjb2RlICYgMHhmZjsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGlucHV0KSkgewogICAgICBkYXRhID0gaW5wdXQuc2xpY2UoKTsKICAgICAgbGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGEgZm9ybWF0LCBtdXN0IGJlIGEgc3RyaW5nIG9yIFR5cGVkQXJyYXkuIik7CiAgICB9CiAgICBjb25zdCBibG9ja0NvdW50cyA9IGxlbmd0aCA+PiAyOwogICAgY29uc3QgdGFpbExlbmd0aCA9IGxlbmd0aCAtIGJsb2NrQ291bnRzICogNDsKICAgIGNvbnN0IGRhdGFVaW50MzIgPSBuZXcgVWludDMyQXJyYXkoZGF0YS5idWZmZXIsIDAsIGJsb2NrQ291bnRzKTsKICAgIGxldCBrMSA9IDAsCiAgICAgIGsyID0gMDsKICAgIGxldCBoMSA9IHRoaXMuaDEsCiAgICAgIGgyID0gdGhpcy5oMjsKICAgIGNvbnN0IEMxID0gMHhjYzllMmQ1MSwKICAgICAgQzIgPSAweDFiODczNTkzOwogICAgY29uc3QgQzFfTE9XID0gQzEgJiBNQVNLX0xPVywKICAgICAgQzJfTE9XID0gQzIgJiBNQVNLX0xPVzsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxvY2tDb3VudHM7IGkrKykgewogICAgICBpZiAoaSAmIDEpIHsKICAgICAgICBrMSA9IGRhdGFVaW50MzJbaV07CiAgICAgICAgazEgPSBrMSAqIEMxICYgTUFTS19ISUdIIHwgazEgKiBDMV9MT1cgJiBNQVNLX0xPVzsKICAgICAgICBrMSA9IGsxIDw8IDE1IHwgazEgPj4+IDE3OwogICAgICAgIGsxID0gazEgKiBDMiAmIE1BU0tfSElHSCB8IGsxICogQzJfTE9XICYgTUFTS19MT1c7CiAgICAgICAgaDEgXj0gazE7CiAgICAgICAgaDEgPSBoMSA8PCAxMyB8IGgxID4+PiAxOTsKICAgICAgICBoMSA9IGgxICogNSArIDB4ZTY1NDZiNjQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgazIgPSBkYXRhVWludDMyW2ldOwogICAgICAgIGsyID0gazIgKiBDMSAmIE1BU0tfSElHSCB8IGsyICogQzFfTE9XICYgTUFTS19MT1c7CiAgICAgICAgazIgPSBrMiA8PCAxNSB8IGsyID4+PiAxNzsKICAgICAgICBrMiA9IGsyICogQzIgJiBNQVNLX0hJR0ggfCBrMiAqIEMyX0xPVyAmIE1BU0tfTE9XOwogICAgICAgIGgyIF49IGsyOwogICAgICAgIGgyID0gaDIgPDwgMTMgfCBoMiA+Pj4gMTk7CiAgICAgICAgaDIgPSBoMiAqIDUgKyAweGU2NTQ2YjY0OwogICAgICB9CiAgICB9CiAgICBrMSA9IDA7CiAgICBzd2l0Y2ggKHRhaWxMZW5ndGgpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGsxIF49IGRhdGFbYmxvY2tDb3VudHMgKiA0ICsgMl0gPDwgMTY7CiAgICAgIGNhc2UgMjoKICAgICAgICBrMSBePSBkYXRhW2Jsb2NrQ291bnRzICogNCArIDFdIDw8IDg7CiAgICAgIGNhc2UgMToKICAgICAgICBrMSBePSBkYXRhW2Jsb2NrQ291bnRzICogNF07CiAgICAgICAgazEgPSBrMSAqIEMxICYgTUFTS19ISUdIIHwgazEgKiBDMV9MT1cgJiBNQVNLX0xPVzsKICAgICAgICBrMSA9IGsxIDw8IDE1IHwgazEgPj4+IDE3OwogICAgICAgIGsxID0gazEgKiBDMiAmIE1BU0tfSElHSCB8IGsxICogQzJfTE9XICYgTUFTS19MT1c7CiAgICAgICAgaWYgKGJsb2NrQ291bnRzICYgMSkgewogICAgICAgICAgaDEgXj0gazE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGgyIF49IGsxOwogICAgICAgIH0KICAgIH0KICAgIHRoaXMuaDEgPSBoMTsKICAgIHRoaXMuaDIgPSBoMjsKICB9CiAgaGV4ZGlnZXN0KCkgewogICAgbGV0IGgxID0gdGhpcy5oMSwKICAgICAgaDIgPSB0aGlzLmgyOwogICAgaDEgXj0gaDIgPj4+IDE7CiAgICBoMSA9IGgxICogMHhlZDU1OGNjZCAmIE1BU0tfSElHSCB8IGgxICogMHg4Y2NkICYgTUFTS19MT1c7CiAgICBoMiA9IGgyICogMHhmZjUxYWZkNyAmIE1BU0tfSElHSCB8ICgoaDIgPDwgMTYgfCBoMSA+Pj4gMTYpICogMHhhZmQ3ZWQ1NSAmIE1BU0tfSElHSCkgPj4+IDE2OwogICAgaDEgXj0gaDIgPj4+IDE7CiAgICBoMSA9IGgxICogMHgxYTg1ZWM1MyAmIE1BU0tfSElHSCB8IGgxICogMHhlYzUzICYgTUFTS19MT1c7CiAgICBoMiA9IGgyICogMHhjNGNlYjlmZSAmIE1BU0tfSElHSCB8ICgoaDIgPDwgMTYgfCBoMSA+Pj4gMTYpICogMHhiOWZlMWE4NSAmIE1BU0tfSElHSCkgPj4+IDE2OwogICAgaDEgXj0gaDIgPj4+IDE7CiAgICByZXR1cm4gKGgxID4+PiAwKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwgIjAiKSArIChoMiA+Pj4gMCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsICIwIik7CiAgfQp9Cgo7Ly8gLi9zcmMvZGlzcGxheS9hbm5vdGF0aW9uX3N0b3JhZ2UuanMKCgoKY29uc3QgU2VyaWFsaXphYmxlRW1wdHkgPSBPYmplY3QuZnJlZXplKHsKICBtYXA6IG51bGwsCiAgaGFzaDogIiIsCiAgdHJhbnNmZXI6IHVuZGVmaW5lZAp9KTsKY2xhc3MgQW5ub3RhdGlvblN0b3JhZ2UgewogICNtb2RpZmllZCA9IGZhbHNlOwogICNtb2RpZmllZElkcyA9IG51bGw7CiAgI2VkaXRvcnNNYXAgPSBudWxsOwogICNzdG9yYWdlID0gbmV3IE1hcCgpOwogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy5vblNldE1vZGlmaWVkID0gbnVsbDsKICAgIHRoaXMub25SZXNldE1vZGlmaWVkID0gbnVsbDsKICAgIHRoaXMub25Bbm5vdGF0aW9uRWRpdG9yID0gbnVsbDsKICB9CiAgZ2V0VmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUpIHsKICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jc3RvcmFnZS5nZXQoa2V5KTsKICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CiAgICB9CiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihkZWZhdWx0VmFsdWUsIHZhbHVlKTsKICB9CiAgZ2V0UmF3VmFsdWUoa2V5KSB7CiAgICByZXR1cm4gdGhpcy4jc3RvcmFnZS5nZXQoa2V5KTsKICB9CiAgcmVtb3ZlKGtleSkgewogICAgY29uc3Qgc3RvcmVkVmFsdWUgPSB0aGlzLiNzdG9yYWdlLmdldChrZXkpOwogICAgaWYgKHN0b3JlZFZhbHVlID09PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHN0b3JlZFZhbHVlIGluc3RhbmNlb2YgQW5ub3RhdGlvbkVkaXRvcikgewogICAgICB0aGlzLiNlZGl0b3JzTWFwLmRlbGV0ZShzdG9yZWRWYWx1ZS5hbm5vdGF0aW9uRWxlbWVudElkKTsKICAgIH0KICAgIHRoaXMuI3N0b3JhZ2UuZGVsZXRlKGtleSk7CiAgICBpZiAodGhpcy4jc3RvcmFnZS5zaXplID09PSAwKSB7CiAgICAgIHRoaXMucmVzZXRNb2RpZmllZCgpOwogICAgfQogICAgaWYgKHR5cGVvZiB0aGlzLm9uQW5ub3RhdGlvbkVkaXRvciA9PT0gImZ1bmN0aW9uIikgewogICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMuI3N0b3JhZ2UudmFsdWVzKCkpIHsKICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBbm5vdGF0aW9uRWRpdG9yKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMub25Bbm5vdGF0aW9uRWRpdG9yKG51bGwpOwogICAgfQogIH0KICBzZXRWYWx1ZShrZXksIHZhbHVlKSB7CiAgICBjb25zdCBvYmogPSB0aGlzLiNzdG9yYWdlLmdldChrZXkpOwogICAgbGV0IG1vZGlmaWVkID0gZmFsc2U7CiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQpIHsKICAgICAgZm9yIChjb25zdCBbZW50cnksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7CiAgICAgICAgaWYgKG9ialtlbnRyeV0gIT09IHZhbCkgewogICAgICAgICAgbW9kaWZpZWQgPSB0cnVlOwogICAgICAgICAgb2JqW2VudHJ5XSA9IHZhbDsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG1vZGlmaWVkID0gdHJ1ZTsKICAgICAgdGhpcy4jc3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7CiAgICB9CiAgICBpZiAobW9kaWZpZWQpIHsKICAgICAgdGhpcy4jc2V0TW9kaWZpZWQoKTsKICAgIH0KICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFubm90YXRpb25FZGl0b3IpIHsKICAgICAgKHRoaXMuI2VkaXRvcnNNYXAgfHw9IG5ldyBNYXAoKSkuc2V0KHZhbHVlLmFubm90YXRpb25FbGVtZW50SWQsIHZhbHVlKTsKICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uQW5ub3RhdGlvbkVkaXRvciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHRoaXMub25Bbm5vdGF0aW9uRWRpdG9yKHZhbHVlLmNvbnN0cnVjdG9yLl90eXBlKTsKICAgICAgfQogICAgfQogIH0KICBoYXMoa2V5KSB7CiAgICByZXR1cm4gdGhpcy4jc3RvcmFnZS5oYXMoa2V5KTsKICB9CiAgZ2V0IHNpemUoKSB7CiAgICByZXR1cm4gdGhpcy4jc3RvcmFnZS5zaXplOwogIH0KICAjc2V0TW9kaWZpZWQoKSB7CiAgICBpZiAoIXRoaXMuI21vZGlmaWVkKSB7CiAgICAgIHRoaXMuI21vZGlmaWVkID0gdHJ1ZTsKICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uU2V0TW9kaWZpZWQgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0aGlzLm9uU2V0TW9kaWZpZWQoKTsKICAgICAgfQogICAgfQogIH0KICByZXNldE1vZGlmaWVkKCkgewogICAgaWYgKHRoaXMuI21vZGlmaWVkKSB7CiAgICAgIHRoaXMuI21vZGlmaWVkID0gZmFsc2U7CiAgICAgIGlmICh0eXBlb2YgdGhpcy5vblJlc2V0TW9kaWZpZWQgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0aGlzLm9uUmVzZXRNb2RpZmllZCgpOwogICAgICB9CiAgICB9CiAgfQogIGdldCBwcmludCgpIHsKICAgIHJldHVybiBuZXcgUHJpbnRBbm5vdGF0aW9uU3RvcmFnZSh0aGlzKTsKICB9CiAgZ2V0IHNlcmlhbGl6YWJsZSgpIHsKICAgIGlmICh0aGlzLiNzdG9yYWdlLnNpemUgPT09IDApIHsKICAgICAgcmV0dXJuIFNlcmlhbGl6YWJsZUVtcHR5OwogICAgfQogICAgY29uc3QgbWFwID0gbmV3IE1hcCgpLAogICAgICBoYXNoID0gbmV3IE11cm11ckhhc2gzXzY0KCksCiAgICAgIHRyYW5zZmVyID0gW107CiAgICBjb25zdCBjb250ZXh0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGxldCBoYXNCaXRtYXAgPSBmYWxzZTsKICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzLiNzdG9yYWdlKSB7CiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB2YWwgaW5zdGFuY2VvZiBBbm5vdGF0aW9uRWRpdG9yID8gdmFsLnNlcmlhbGl6ZShmYWxzZSwgY29udGV4dCkgOiB2YWw7CiAgICAgIGlmIChzZXJpYWxpemVkKSB7CiAgICAgICAgbWFwLnNldChrZXksIHNlcmlhbGl6ZWQpOwogICAgICAgIGhhc2gudXBkYXRlKGAke2tleX06JHtKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkKX1gKTsKICAgICAgICBoYXNCaXRtYXAgfHw9ICEhc2VyaWFsaXplZC5iaXRtYXA7CiAgICAgIH0KICAgIH0KICAgIGlmIChoYXNCaXRtYXApIHsKICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBtYXAudmFsdWVzKCkpIHsKICAgICAgICBpZiAodmFsdWUuYml0bWFwKSB7CiAgICAgICAgICB0cmFuc2Zlci5wdXNoKHZhbHVlLmJpdG1hcCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbWFwLnNpemUgPiAwID8gewogICAgICBtYXAsCiAgICAgIGhhc2g6IGhhc2guaGV4ZGlnZXN0KCksCiAgICAgIHRyYW5zZmVyCiAgICB9IDogU2VyaWFsaXphYmxlRW1wdHk7CiAgfQogIGdldCBlZGl0b3JTdGF0cygpIHsKICAgIGxldCBzdGF0cyA9IG51bGw7CiAgICBjb25zdCB0eXBlVG9FZGl0b3IgPSBuZXcgTWFwKCk7CiAgICBsZXQgbnVtYmVyT2ZFZGl0ZWRDb21tZW50cyA9IDA7CiAgICBsZXQgbnVtYmVyT2ZEZWxldGVkQ29tbWVudHMgPSAwOwogICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLiNzdG9yYWdlLnZhbHVlcygpKSB7CiAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgQW5ub3RhdGlvbkVkaXRvcikpIHsKICAgICAgICBpZiAodmFsdWUucG9wdXApIHsKICAgICAgICAgIGlmICh2YWx1ZS5wb3B1cC5kZWxldGVkKSB7CiAgICAgICAgICAgIG51bWJlck9mRGVsZXRlZENvbW1lbnRzICs9IDE7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBudW1iZXJPZkVkaXRlZENvbW1lbnRzICs9IDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICh2YWx1ZS5pc0NvbW1lbnREZWxldGVkKSB7CiAgICAgICAgbnVtYmVyT2ZEZWxldGVkQ29tbWVudHMgKz0gMTsKICAgICAgfSBlbHNlIGlmICh2YWx1ZS5oYXNFZGl0ZWRDb21tZW50KSB7CiAgICAgICAgbnVtYmVyT2ZFZGl0ZWRDb21tZW50cyArPSAxOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRvclN0YXRzID0gdmFsdWUudGVsZW1ldHJ5RmluYWxEYXRhOwogICAgICBpZiAoIWVkaXRvclN0YXRzKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgewogICAgICAgIHR5cGUKICAgICAgfSA9IGVkaXRvclN0YXRzOwogICAgICBpZiAoIXR5cGVUb0VkaXRvci5oYXModHlwZSkpIHsKICAgICAgICB0eXBlVG9FZGl0b3Iuc2V0KHR5cGUsIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkuY29uc3RydWN0b3IpOwogICAgICB9CiAgICAgIHN0YXRzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICBjb25zdCBtYXAgPSBzdGF0c1t0eXBlXSB8fD0gbmV3IE1hcCgpOwogICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoZWRpdG9yU3RhdHMpKSB7CiAgICAgICAgaWYgKGtleSA9PT0gInR5cGUiKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgbGV0IGNvdW50ZXJzID0gbWFwLmdldChrZXkpOwogICAgICAgIGlmICghY291bnRlcnMpIHsKICAgICAgICAgIGNvdW50ZXJzID0gbmV3IE1hcCgpOwogICAgICAgICAgbWFwLnNldChrZXksIGNvdW50ZXJzKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgY291bnQgPSBjb3VudGVycy5nZXQodmFsKSA/PyAwOwogICAgICAgIGNvdW50ZXJzLnNldCh2YWwsIGNvdW50ICsgMSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChudW1iZXJPZkRlbGV0ZWRDb21tZW50cyA+IDAgfHwgbnVtYmVyT2ZFZGl0ZWRDb21tZW50cyA+IDApIHsKICAgICAgc3RhdHMgfHw9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgIHN0YXRzLmNvbW1lbnRzID0gewogICAgICAgIGRlbGV0ZWQ6IG51bWJlck9mRGVsZXRlZENvbW1lbnRzLAogICAgICAgIGVkaXRlZDogbnVtYmVyT2ZFZGl0ZWRDb21tZW50cwogICAgICB9OwogICAgfQogICAgaWYgKCFzdGF0cykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGZvciAoY29uc3QgW3R5cGUsIGVkaXRvcl0gb2YgdHlwZVRvRWRpdG9yKSB7CiAgICAgIHN0YXRzW3R5cGVdID0gZWRpdG9yLmNvbXB1dGVUZWxlbWV0cnlGaW5hbERhdGEoc3RhdHNbdHlwZV0pOwogICAgfQogICAgcmV0dXJuIHN0YXRzOwogIH0KICByZXNldE1vZGlmaWVkSWRzKCkgewogICAgdGhpcy4jbW9kaWZpZWRJZHMgPSBudWxsOwogIH0KICB1cGRhdGVFZGl0b3IoYW5ub3RhdGlvbklkLCBkYXRhKSB7CiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2VkaXRvcnNNYXA/LmdldChhbm5vdGF0aW9uSWQpOwogICAgaWYgKHZhbHVlKSB7CiAgICAgIHZhbHVlLnVwZGF0ZUZyb21Bbm5vdGF0aW9uTGF5ZXIoZGF0YSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICBnZXRFZGl0b3IoYW5ub3RhdGlvbklkKSB7CiAgICByZXR1cm4gdGhpcy4jZWRpdG9yc01hcD8uZ2V0KGFubm90YXRpb25JZCkgfHwgbnVsbDsKICB9CiAgZ2V0IG1vZGlmaWVkSWRzKCkgewogICAgaWYgKHRoaXMuI21vZGlmaWVkSWRzKSB7CiAgICAgIHJldHVybiB0aGlzLiNtb2RpZmllZElkczsKICAgIH0KICAgIGNvbnN0IGlkcyA9IFtdOwogICAgaWYgKHRoaXMuI2VkaXRvcnNNYXApIHsKICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLiNlZGl0b3JzTWFwLnZhbHVlcygpKSB7CiAgICAgICAgaWYgKCF2YWx1ZS5zZXJpYWxpemUoKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlkcy5wdXNoKHZhbHVlLmFubm90YXRpb25FbGVtZW50SWQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGhpcy4jbW9kaWZpZWRJZHMgPSB7CiAgICAgIGlkczogbmV3IFNldChpZHMpLAogICAgICBoYXNoOiBpZHMuam9pbigiLCIpCiAgICB9OwogIH0KICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsKICAgIHJldHVybiB0aGlzLiNzdG9yYWdlLmVudHJpZXMoKTsKICB9Cn0KY2xhc3MgUHJpbnRBbm5vdGF0aW9uU3RvcmFnZSBleHRlbmRzIEFubm90YXRpb25TdG9yYWdlIHsKICAjc2VyaWFsaXphYmxlOwogIGNvbnN0cnVjdG9yKHBhcmVudCkgewogICAgc3VwZXIoKTsKICAgIGNvbnN0IHsKICAgICAgbWFwLAogICAgICBoYXNoLAogICAgICB0cmFuc2ZlcgogICAgfSA9IHBhcmVudC5zZXJpYWxpemFibGU7CiAgICBjb25zdCBjbG9uZSA9IHN0cnVjdHVyZWRDbG9uZShtYXAsIHRyYW5zZmVyID8gewogICAgICB0cmFuc2ZlcgogICAgfSA6IG51bGwpOwogICAgdGhpcy4jc2VyaWFsaXphYmxlID0gewogICAgICBtYXA6IGNsb25lLAogICAgICBoYXNoLAogICAgICB0cmFuc2ZlcgogICAgfTsKICB9CiAgZ2V0IHByaW50KCkgewogICAgdW5yZWFjaGFibGUoIlNob3VsZCBub3QgY2FsbCBQcmludEFubm90YXRpb25TdG9yYWdlLnByaW50Iik7CiAgfQogIGdldCBzZXJpYWxpemFibGUoKSB7CiAgICByZXR1cm4gdGhpcy4jc2VyaWFsaXphYmxlOwogIH0KICBnZXQgbW9kaWZpZWRJZHMoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJtb2RpZmllZElkcyIsIHsKICAgICAgaWRzOiBuZXcgU2V0KCksCiAgICAgIGhhc2g6ICIiCiAgICB9KTsKICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L2ZvbnRfbG9hZGVyLmpzCgoKY2xhc3MgRm9udExvYWRlciB7CiAgI3N5c3RlbUZvbnRzID0gbmV3IFNldCgpOwogIGNvbnN0cnVjdG9yKHsKICAgIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50LAogICAgc3R5bGVFbGVtZW50ID0gbnVsbAogIH0pIHsKICAgIHRoaXMuX2RvY3VtZW50ID0gb3duZXJEb2N1bWVudDsKICAgIHRoaXMubmF0aXZlRm9udEZhY2VzID0gbmV3IFNldCgpOwogICAgdGhpcy5zdHlsZUVsZW1lbnQgPSBudWxsOwogICAgdGhpcy5sb2FkaW5nUmVxdWVzdHMgPSBbXTsKICAgIHRoaXMubG9hZFRlc3RGb250SWQgPSAwOwogIH0KICBhZGROYXRpdmVGb250RmFjZShuYXRpdmVGb250RmFjZSkgewogICAgdGhpcy5uYXRpdmVGb250RmFjZXMuYWRkKG5hdGl2ZUZvbnRGYWNlKTsKICAgIHRoaXMuX2RvY3VtZW50LmZvbnRzLmFkZChuYXRpdmVGb250RmFjZSk7CiAgfQogIHJlbW92ZU5hdGl2ZUZvbnRGYWNlKG5hdGl2ZUZvbnRGYWNlKSB7CiAgICB0aGlzLm5hdGl2ZUZvbnRGYWNlcy5kZWxldGUobmF0aXZlRm9udEZhY2UpOwogICAgdGhpcy5fZG9jdW1lbnQuZm9udHMuZGVsZXRlKG5hdGl2ZUZvbnRGYWNlKTsKICB9CiAgaW5zZXJ0UnVsZShydWxlKSB7CiAgICBpZiAoIXRoaXMuc3R5bGVFbGVtZW50KSB7CiAgICAgIHRoaXMuc3R5bGVFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgdGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kKHRoaXMuc3R5bGVFbGVtZW50KTsKICAgIH0KICAgIGNvbnN0IHN0eWxlU2hlZXQgPSB0aGlzLnN0eWxlRWxlbWVudC5zaGVldDsKICAgIHN0eWxlU2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7CiAgfQogIGNsZWFyKCkgewogICAgZm9yIChjb25zdCBuYXRpdmVGb250RmFjZSBvZiB0aGlzLm5hdGl2ZUZvbnRGYWNlcykgewogICAgICB0aGlzLl9kb2N1bWVudC5mb250cy5kZWxldGUobmF0aXZlRm9udEZhY2UpOwogICAgfQogICAgdGhpcy5uYXRpdmVGb250RmFjZXMuY2xlYXIoKTsKICAgIHRoaXMuI3N5c3RlbUZvbnRzLmNsZWFyKCk7CiAgICBpZiAodGhpcy5zdHlsZUVsZW1lbnQpIHsKICAgICAgdGhpcy5zdHlsZUVsZW1lbnQucmVtb3ZlKCk7CiAgICAgIHRoaXMuc3R5bGVFbGVtZW50ID0gbnVsbDsKICAgIH0KICB9CiAgYXN5bmMgbG9hZFN5c3RlbUZvbnQoewogICAgc3lzdGVtRm9udEluZm86IGluZm8sCiAgICBkaXNhYmxlRm9udEZhY2UsCiAgICBfaW5zcGVjdEZvbnQKICB9KSB7CiAgICBpZiAoIWluZm8gfHwgdGhpcy4jc3lzdGVtRm9udHMuaGFzKGluZm8ubG9hZGVkTmFtZSkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgYXNzZXJ0KCFkaXNhYmxlRm9udEZhY2UsICJsb2FkU3lzdGVtRm9udCBzaG91bGRuJ3QgYmUgY2FsbGVkIHdoZW4gYGRpc2FibGVGb250RmFjZWAgaXMgc2V0LiIpOwogICAgaWYgKHRoaXMuaXNGb250TG9hZGluZ0FQSVN1cHBvcnRlZCkgewogICAgICBjb25zdCB7CiAgICAgICAgbG9hZGVkTmFtZSwKICAgICAgICBzcmMsCiAgICAgICAgc3R5bGUKICAgICAgfSA9IGluZm87CiAgICAgIGNvbnN0IGZvbnRGYWNlID0gbmV3IEZvbnRGYWNlKGxvYWRlZE5hbWUsIHNyYywgc3R5bGUpOwogICAgICB0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKGZvbnRGYWNlKTsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCBmb250RmFjZS5sb2FkKCk7CiAgICAgICAgdGhpcy4jc3lzdGVtRm9udHMuYWRkKGxvYWRlZE5hbWUpOwogICAgICAgIF9pbnNwZWN0Rm9udD8uKGluZm8pOwogICAgICB9IGNhdGNoIHsKICAgICAgICB3YXJuKGBDYW5ub3QgbG9hZCBzeXN0ZW0gZm9udDogJHtpbmZvLmJhc2VGb250TmFtZX0sIGluc3RhbGxpbmcgaXQgY291bGQgaGVscCB0byBpbXByb3ZlIFBERiByZW5kZXJpbmcuYCk7CiAgICAgICAgdGhpcy5yZW1vdmVOYXRpdmVGb250RmFjZShmb250RmFjZSk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgdW5yZWFjaGFibGUoIk5vdCBpbXBsZW1lbnRlZDogbG9hZFN5c3RlbUZvbnQgd2l0aG91dCB0aGUgRm9udCBMb2FkaW5nIEFQSS4iKTsKICB9CiAgYXN5bmMgYmluZChmb250KSB7CiAgICBpZiAoZm9udC5hdHRhY2hlZCB8fCBmb250Lm1pc3NpbmdGaWxlICYmICFmb250LnN5c3RlbUZvbnRJbmZvKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGZvbnQuYXR0YWNoZWQgPSB0cnVlOwogICAgaWYgKGZvbnQuc3lzdGVtRm9udEluZm8pIHsKICAgICAgYXdhaXQgdGhpcy5sb2FkU3lzdGVtRm9udChmb250KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuaXNGb250TG9hZGluZ0FQSVN1cHBvcnRlZCkgewogICAgICBjb25zdCBuYXRpdmVGb250RmFjZSA9IGZvbnQuY3JlYXRlTmF0aXZlRm9udEZhY2UoKTsKICAgICAgaWYgKG5hdGl2ZUZvbnRGYWNlKSB7CiAgICAgICAgdGhpcy5hZGROYXRpdmVGb250RmFjZShuYXRpdmVGb250RmFjZSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IG5hdGl2ZUZvbnRGYWNlLmxvYWRlZDsKICAgICAgICB9IGNhdGNoIChleCkgewogICAgICAgICAgd2FybihgRmFpbGVkIHRvIGxvYWQgZm9udCAnJHtuYXRpdmVGb250RmFjZS5mYW1pbHl9JzogJyR7ZXh9Jy5gKTsKICAgICAgICAgIGZvbnQuZGlzYWJsZUZvbnRGYWNlID0gdHJ1ZTsKICAgICAgICAgIHRocm93IGV4OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBydWxlID0gZm9udC5jcmVhdGVGb250RmFjZVJ1bGUoKTsKICAgIGlmIChydWxlKSB7CiAgICAgIHRoaXMuaW5zZXJ0UnVsZShydWxlKTsKICAgICAgaWYgKHRoaXMuaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuX3F1ZXVlTG9hZGluZ0NhbGxiYWNrKHJlc29sdmUpOwogICAgICAgIHRoaXMuX3ByZXBhcmVGb250TG9hZEV2ZW50KGZvbnQsIHJlcXVlc3QpOwogICAgICB9KTsKICAgIH0KICB9CiAgZ2V0IGlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQoKSB7CiAgICBjb25zdCBoYXNGb250cyA9ICEhdGhpcy5fZG9jdW1lbnQ/LmZvbnRzOwogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaXNGb250TG9hZGluZ0FQSVN1cHBvcnRlZCIsIGhhc0ZvbnRzKTsKICB9CiAgZ2V0IGlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLCBpc05vZGVKUyB8fCB1dGlsX0ZlYXR1cmVUZXN0LnBsYXRmb3JtLmlzRmlyZWZveCk7CiAgfQogIF9xdWV1ZUxvYWRpbmdDYWxsYmFjayhjYWxsYmFjaykgewogICAgZnVuY3Rpb24gY29tcGxldGVSZXF1ZXN0KCkgewogICAgICBhc3NlcnQoIXJlcXVlc3QuZG9uZSwgImNvbXBsZXRlUmVxdWVzdCgpIGNhbm5vdCBiZSBjYWxsZWQgdHdpY2UuIik7CiAgICAgIHJlcXVlc3QuZG9uZSA9IHRydWU7CiAgICAgIHdoaWxlIChsb2FkaW5nUmVxdWVzdHMubGVuZ3RoID4gMCAmJiBsb2FkaW5nUmVxdWVzdHNbMF0uZG9uZSkgewogICAgICAgIGNvbnN0IG90aGVyUmVxdWVzdCA9IGxvYWRpbmdSZXF1ZXN0cy5zaGlmdCgpOwogICAgICAgIHNldFRpbWVvdXQob3RoZXJSZXF1ZXN0LmNhbGxiYWNrLCAwKTsKICAgICAgfQogICAgfQogICAgY29uc3QgewogICAgICBsb2FkaW5nUmVxdWVzdHMKICAgIH0gPSB0aGlzOwogICAgY29uc3QgcmVxdWVzdCA9IHsKICAgICAgZG9uZTogZmFsc2UsCiAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZVJlcXVlc3QsCiAgICAgIGNhbGxiYWNrCiAgICB9OwogICAgbG9hZGluZ1JlcXVlc3RzLnB1c2gocmVxdWVzdCk7CiAgICByZXR1cm4gcmVxdWVzdDsKICB9CiAgZ2V0IF9sb2FkVGVzdEZvbnQoKSB7CiAgICBjb25zdCB0ZXN0Rm9udCA9IGF0b2IoIlQxUlVUd0FMQUlBQUF3QXdRMFpHSURIdFpnNEFBQU9ZQUFBQWdVWkdWRTFsa3pad0FBQUVIQUFBQUJ4SFJFVkdBQlFBIiArICJGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQSIgKyAiQUx3QUFBQTJhR2hsWVFka0Erb0FBQUQwQUFBQUpHaHRkSGdENkFBQUFBQUVXQUFBQUFadFlYaHdBQUpRQUFBQUFSZ0EiICsgIkFBQUdibUZ0WlZqbWRINEFBQUdBQUFBQXNYQnZjM1QvaGdBekFBQURlQUFBQUNBQUFRQUFBQUVBQUxaUkZzUmZEenoxIiArICJBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRCIgKyAiNkFBQUFBQUQ2QUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBVUFBQUFnQUFBQVFENkFIMEFBVUFBQUtLQXJ3QUFBQ00iICsgIkFvb0N2QUFBQWVBQU1RRUNBQUFDQUFZSkFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBRkJtUldRQXdBQXVBQzREIiArICJJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQSIgKyAiQUFFQUFRQUFBQUVBQUFBQUFBSUFBUUFBQUFFQUFBQUFBQU1BQVFBQUFBRUFBQUFBQUFRQUFRQUFBQUVBQUFBQUFBVUEiICsgIkFRQUFBQUVBQUFBQUFBWUFBUUFBQUFNQUFRUUpBQUFBQWdBQkFBTUFBUVFKQUFFQUFnQUJBQU1BQVFRSkFBSUFBZ0FCIiArICJBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWSIgKyAiQUFBQUFBQUFBd0FBQUFNQUFBQWNBQUVBQUFBQUFEd0FBd0FCQUFBQUhBQUVBQ0FBQUFBRUFBUUFBUUFBQUM3Ly93QUEiICsgIkFDNy8vLy9UQUFFQUFBQUFBQUFCQmdBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIiArICJBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIgKyAiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiICsgIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIiArICJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIgKyAiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBQUFBQUFEL2d3QXlBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUEiICsgIkFBQUJBQVFFQUFFQkFRSllBQUVCQVNINER3RDRHd0hFQXZnY0EvZ1hCSXdNQVl1TCtuejV0UVhrRDVqM0NCTG5FUUFDIiArICJBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90MyIgKyAiRG92NmZBSDZmQVQrZlBwOCtud0hEb3NNQ3ZtMUN2bTFEQXo2ZkJRQUFBQUFBQUFCQUFBQUFNbUpiekVBQUFBQXpnVGoiICsgIkZRQUFBQURPQk9RcEFBRUFBQUFBQUFBQURBQVVBQVFBQUFBQkFBQUFBZ0FCQUFBQUFBQUFBQUFENkFBQUFBQUFBQT09Iik7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJfbG9hZFRlc3RGb250IiwgdGVzdEZvbnQpOwogIH0KICBfcHJlcGFyZUZvbnRMb2FkRXZlbnQoZm9udCwgcmVxdWVzdCkgewogICAgZnVuY3Rpb24gaW50MzIoZGF0YSwgb2Zmc2V0KSB7CiAgICAgIHJldHVybiBkYXRhLmNoYXJDb2RlQXQob2Zmc2V0KSA8PCAyNCB8IGRhdGEuY2hhckNvZGVBdChvZmZzZXQgKyAxKSA8PCAxNiB8IGRhdGEuY2hhckNvZGVBdChvZmZzZXQgKyAyKSA8PCA4IHwgZGF0YS5jaGFyQ29kZUF0KG9mZnNldCArIDMpICYgMHhmZjsKICAgIH0KICAgIGZ1bmN0aW9uIHNwbGljZVN0cmluZyhzLCBvZmZzZXQsIHJlbW92ZSwgaW5zZXJ0KSB7CiAgICAgIGNvbnN0IGNodW5rMSA9IHMuc3Vic3RyaW5nKDAsIG9mZnNldCk7CiAgICAgIGNvbnN0IGNodW5rMiA9IHMuc3Vic3RyaW5nKG9mZnNldCArIHJlbW92ZSk7CiAgICAgIHJldHVybiBjaHVuazEgKyBpbnNlcnQgKyBjaHVuazI7CiAgICB9CiAgICBsZXQgaSwgaWk7CiAgICBjb25zdCBjYW52YXMgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgIGNhbnZhcy53aWR0aCA9IDE7CiAgICBjYW52YXMuaGVpZ2h0ID0gMTsKICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgbGV0IGNhbGxlZCA9IDA7CiAgICBmdW5jdGlvbiBpc0ZvbnRSZWFkeShuYW1lLCBjYWxsYmFjaykgewogICAgICBpZiAoKytjYWxsZWQgPiAzMCkgewogICAgICAgIHdhcm4oIkxvYWQgdGVzdCBmb250IG5ldmVyIGxvYWRlZC4iKTsKICAgICAgICBjYWxsYmFjaygpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjdHguZm9udCA9ICIzMHB4ICIgKyBuYW1lOwogICAgICBjdHguZmlsbFRleHQoIi4iLCAwLCAyMCk7CiAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgMSwgMSk7CiAgICAgIGlmIChpbWFnZURhdGEuZGF0YVszXSA+IDApIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KGlzRm9udFJlYWR5LmJpbmQobnVsbCwgbmFtZSwgY2FsbGJhY2spKTsKICAgIH0KICAgIGNvbnN0IGxvYWRUZXN0Rm9udElkID0gYGx0JHtEYXRlLm5vdygpfSR7dGhpcy5sb2FkVGVzdEZvbnRJZCsrfWA7CiAgICBsZXQgZGF0YSA9IHRoaXMuX2xvYWRUZXN0Rm9udDsKICAgIGNvbnN0IENPTU1FTlRfT0ZGU0VUID0gOTc2OwogICAgZGF0YSA9IHNwbGljZVN0cmluZyhkYXRhLCBDT01NRU5UX09GRlNFVCwgbG9hZFRlc3RGb250SWQubGVuZ3RoLCBsb2FkVGVzdEZvbnRJZCk7CiAgICBjb25zdCBDRkZfQ0hFQ0tTVU1fT0ZGU0VUID0gMTY7CiAgICBjb25zdCBYWFhYX1ZBTFVFID0gMHg1ODU4NTg1ODsKICAgIGxldCBjaGVja3N1bSA9IGludDMyKGRhdGEsIENGRl9DSEVDS1NVTV9PRkZTRVQpOwogICAgZm9yIChpID0gMCwgaWkgPSBsb2FkVGVzdEZvbnRJZC5sZW5ndGggLSAzOyBpIDwgaWk7IGkgKz0gNCkgewogICAgICBjaGVja3N1bSA9IGNoZWNrc3VtIC0gWFhYWF9WQUxVRSArIGludDMyKGxvYWRUZXN0Rm9udElkLCBpKSB8IDA7CiAgICB9CiAgICBpZiAoaSA8IGxvYWRUZXN0Rm9udElkLmxlbmd0aCkgewogICAgICBjaGVja3N1bSA9IGNoZWNrc3VtIC0gWFhYWF9WQUxVRSArIGludDMyKGxvYWRUZXN0Rm9udElkICsgIlhYWCIsIGkpIHwgMDsKICAgIH0KICAgIGRhdGEgPSBzcGxpY2VTdHJpbmcoZGF0YSwgQ0ZGX0NIRUNLU1VNX09GRlNFVCwgNCwgc3RyaW5nMzIoY2hlY2tzdW0pKTsKICAgIGNvbnN0IHVybCA9IGB1cmwoZGF0YTpmb250L29wZW50eXBlO2Jhc2U2NCwke2J0b2EoZGF0YSl9KTtgOwogICAgY29uc3QgcnVsZSA9IGBAZm9udC1mYWNlIHtmb250LWZhbWlseToiJHtsb2FkVGVzdEZvbnRJZH0iO3NyYzoke3VybH19YDsKICAgIHRoaXMuaW5zZXJ0UnVsZShydWxlKTsKICAgIGNvbnN0IGRpdiA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgIGRpdi5zdHlsZS53aWR0aCA9IGRpdi5zdHlsZS5oZWlnaHQgPSAiMTBweCI7CiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgZGl2LnN0eWxlLnRvcCA9IGRpdi5zdHlsZS5sZWZ0ID0gIjBweCI7CiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgW2ZvbnQubG9hZGVkTmFtZSwgbG9hZFRlc3RGb250SWRdKSB7CiAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgIHNwYW4udGV4dENvbnRlbnQgPSAiSGkiOwogICAgICBzcGFuLnN0eWxlLmZvbnRGYW1pbHkgPSBuYW1lOwogICAgICBkaXYuYXBwZW5kKHNwYW4pOwogICAgfQogICAgdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmQoZGl2KTsKICAgIGlzRm9udFJlYWR5KGxvYWRUZXN0Rm9udElkLCAoKSA9PiB7CiAgICAgIGRpdi5yZW1vdmUoKTsKICAgICAgcmVxdWVzdC5jb21wbGV0ZSgpOwogICAgfSk7CiAgfQp9CmNsYXNzIEZvbnRGYWNlT2JqZWN0IHsKICAjZm9udERhdGE7CiAgY29uc3RydWN0b3IodHJhbnNsYXRlZERhdGEsIGluc3BlY3RGb250ID0gbnVsbCwgZXh0cmEsIGNoYXJQcm9jT3BlcmF0b3JMaXN0KSB7CiAgICB0aGlzLmNvbXBpbGVkR2x5cGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIHRoaXMuI2ZvbnREYXRhID0gdHJhbnNsYXRlZERhdGE7CiAgICB0aGlzLl9pbnNwZWN0Rm9udCA9IGluc3BlY3RGb250OwogICAgaWYgKGV4dHJhKSB7CiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgZXh0cmEpOwogICAgfQogICAgaWYgKGNoYXJQcm9jT3BlcmF0b3JMaXN0KSB7CiAgICAgIHRoaXMuY2hhclByb2NPcGVyYXRvckxpc3QgPSBjaGFyUHJvY09wZXJhdG9yTGlzdDsKICAgIH0KICB9CiAgY3JlYXRlTmF0aXZlRm9udEZhY2UoKSB7CiAgICBpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRpc2FibGVGb250RmFjZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxldCBuYXRpdmVGb250RmFjZTsKICAgIGlmICghdGhpcy5jc3NGb250SW5mbykgewogICAgICBuYXRpdmVGb250RmFjZSA9IG5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsIHRoaXMuZGF0YSwge30pOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgY3NzID0gewogICAgICAgIHdlaWdodDogdGhpcy5jc3NGb250SW5mby5mb250V2VpZ2h0CiAgICAgIH07CiAgICAgIGlmICh0aGlzLmNzc0ZvbnRJbmZvLml0YWxpY0FuZ2xlKSB7CiAgICAgICAgY3NzLnN0eWxlID0gYG9ibGlxdWUgJHt0aGlzLmNzc0ZvbnRJbmZvLml0YWxpY0FuZ2xlfWRlZ2A7CiAgICAgIH0KICAgICAgbmF0aXZlRm9udEZhY2UgPSBuZXcgRm9udEZhY2UodGhpcy5jc3NGb250SW5mby5mb250RmFtaWx5LCB0aGlzLmRhdGEsIGNzcyk7CiAgICB9CiAgICB0aGlzLl9pbnNwZWN0Rm9udD8uKHRoaXMpOwogICAgcmV0dXJuIG5hdGl2ZUZvbnRGYWNlOwogIH0KICBjcmVhdGVGb250RmFjZVJ1bGUoKSB7CiAgICBpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRpc2FibGVGb250RmFjZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHVybCA9IGB1cmwoZGF0YToke3RoaXMubWltZXR5cGV9O2Jhc2U2NCwke3RvQmFzZTY0VXRpbCh0aGlzLmRhdGEpfSk7YDsKICAgIGxldCBydWxlOwogICAgaWYgKCF0aGlzLmNzc0ZvbnRJbmZvKSB7CiAgICAgIHJ1bGUgPSBgQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6IiR7dGhpcy5sb2FkZWROYW1lfSI7c3JjOiR7dXJsfX1gOwogICAgfSBlbHNlIHsKICAgICAgbGV0IGNzcyA9IGBmb250LXdlaWdodDogJHt0aGlzLmNzc0ZvbnRJbmZvLmZvbnRXZWlnaHR9O2A7CiAgICAgIGlmICh0aGlzLmNzc0ZvbnRJbmZvLml0YWxpY0FuZ2xlKSB7CiAgICAgICAgY3NzICs9IGBmb250LXN0eWxlOiBvYmxpcXVlICR7dGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZX1kZWc7YDsKICAgICAgfQogICAgICBydWxlID0gYEBmb250LWZhY2Uge2ZvbnQtZmFtaWx5OiIke3RoaXMuY3NzRm9udEluZm8uZm9udEZhbWlseX0iOyR7Y3NzfXNyYzoke3VybH19YDsKICAgIH0KICAgIHRoaXMuX2luc3BlY3RGb250Py4odGhpcywgdXJsKTsKICAgIHJldHVybiBydWxlOwogIH0KICBnZXRQYXRoR2VuZXJhdG9yKG9ianMsIGNoYXJhY3RlcikgewogICAgaWYgKHRoaXMuY29tcGlsZWRHbHlwaHNbY2hhcmFjdGVyXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl07CiAgICB9CiAgICBjb25zdCBvYmpJZCA9IHRoaXMubG9hZGVkTmFtZSArICJfcGF0aF8iICsgY2hhcmFjdGVyOwogICAgbGV0IGNtZHM7CiAgICB0cnkgewogICAgICBjbWRzID0gb2Jqcy5nZXQob2JqSWQpOwogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgd2FybihgZ2V0UGF0aEdlbmVyYXRvciAtIGlnbm9yaW5nIGNoYXJhY3RlcjogIiR7ZXh9Ii5gKTsKICAgIH0KICAgIGNvbnN0IHBhdGggPSBtYWtlUGF0aEZyb21EcmF3T1BTKGNtZHMpOwogICAgaWYgKCF0aGlzLmZvbnRFeHRyYVByb3BlcnRpZXMpIHsKICAgICAgb2Jqcy5kZWxldGUob2JqSWQpOwogICAgfQogICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbY2hhcmFjdGVyXSA9IHBhdGg7CiAgfQogIGdldCBibGFjaygpIHsKICAgIHJldHVybiB0aGlzLiNmb250RGF0YS5ibGFjazsKICB9CiAgZ2V0IGJvbGQoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEuYm9sZDsKICB9CiAgZ2V0IGRpc2FibGVGb250RmFjZSgpIHsKICAgIHJldHVybiB0aGlzLiNmb250RGF0YS5kaXNhYmxlRm9udEZhY2UgPz8gZmFsc2U7CiAgfQogIGdldCBmb250RXh0cmFQcm9wZXJ0aWVzKCkgewogICAgcmV0dXJuIHRoaXMuI2ZvbnREYXRhLmZvbnRFeHRyYVByb3BlcnRpZXMgPz8gZmFsc2U7CiAgfQogIGdldCBpc0ludmFsaWRQREZqc0ZvbnQoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEuaXNJbnZhbGlkUERGanNGb250OwogIH0KICBnZXQgaXNUeXBlM0ZvbnQoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEuaXNUeXBlM0ZvbnQ7CiAgfQogIGdldCBpdGFsaWMoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEuaXRhbGljOwogIH0KICBnZXQgbWlzc2luZ0ZpbGUoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEubWlzc2luZ0ZpbGU7CiAgfQogIGdldCByZW1lYXN1cmUoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEucmVtZWFzdXJlOwogIH0KICBnZXQgdmVydGljYWwoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEudmVydGljYWw7CiAgfQogIGdldCBhc2NlbnQoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEuYXNjZW50OwogIH0KICBnZXQgZGVmYXVsdFdpZHRoKCkgewogICAgcmV0dXJuIHRoaXMuI2ZvbnREYXRhLmRlZmF1bHRXaWR0aDsKICB9CiAgZ2V0IGRlc2NlbnQoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEuZGVzY2VudDsKICB9CiAgZ2V0IGJib3goKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEuYmJveDsKICB9CiAgZ2V0IGZvbnRNYXRyaXgoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEuZm9udE1hdHJpeDsKICB9CiAgZ2V0IGZhbGxiYWNrTmFtZSgpIHsKICAgIHJldHVybiB0aGlzLiNmb250RGF0YS5mYWxsYmFja05hbWU7CiAgfQogIGdldCBsb2FkZWROYW1lKCkgewogICAgcmV0dXJuIHRoaXMuI2ZvbnREYXRhLmxvYWRlZE5hbWU7CiAgfQogIGdldCBtaW1ldHlwZSgpIHsKICAgIHJldHVybiB0aGlzLiNmb250RGF0YS5taW1ldHlwZTsKICB9CiAgZ2V0IG5hbWUoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEubmFtZTsKICB9CiAgZ2V0IGRhdGEoKSB7CiAgICByZXR1cm4gdGhpcy4jZm9udERhdGEuZGF0YTsKICB9CiAgY2xlYXJEYXRhKCkgewogICAgdGhpcy4jZm9udERhdGEuY2xlYXJEYXRhKCk7CiAgfQogIGdldCBjc3NGb250SW5mbygpIHsKICAgIHJldHVybiB0aGlzLiNmb250RGF0YS5jc3NGb250SW5mbzsKICB9CiAgZ2V0IHN5c3RlbUZvbnRJbmZvKCkgewogICAgcmV0dXJuIHRoaXMuI2ZvbnREYXRhLnN5c3RlbUZvbnRJbmZvOwogIH0KICBnZXQgZGVmYXVsdFZNZXRyaWNzKCkgewogICAgcmV0dXJuIHRoaXMuI2ZvbnREYXRhLmRlZmF1bHRWTWV0cmljczsKICB9Cn0KCjsvLyAuL3NyYy9zaGFyZWQvb2JqLWJpbi10cmFuc2Zvcm0uanMKCmNsYXNzIENzc0ZvbnRJbmZvIHsKICAjYnVmZmVyOwogICN2aWV3OwogICNkZWNvZGVyOwogIHN0YXRpYyBzdHJpbmdzID0gWyJmb250RmFtaWx5IiwgImZvbnRXZWlnaHQiLCAiaXRhbGljQW5nbGUiXTsKICBzdGF0aWMgd3JpdGUoaW5mbykgewogICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpOwogICAgY29uc3QgZW5jb2RlZFN0cmluZ3MgPSB7fTsKICAgIGxldCBzdHJpbmdzTGVuZ3RoID0gMDsKICAgIGZvciAoY29uc3QgcHJvcCBvZiBDc3NGb250SW5mby5zdHJpbmdzKSB7CiAgICAgIGNvbnN0IGVuY29kZWQgPSBlbmNvZGVyLmVuY29kZShpbmZvW3Byb3BdKTsKICAgICAgZW5jb2RlZFN0cmluZ3NbcHJvcF0gPSBlbmNvZGVkOwogICAgICBzdHJpbmdzTGVuZ3RoICs9IDQgKyBlbmNvZGVkLmxlbmd0aDsKICAgIH0KICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHJpbmdzTGVuZ3RoKTsKICAgIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShidWZmZXIpOwogICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpOwogICAgbGV0IG9mZnNldCA9IDA7CiAgICBmb3IgKGNvbnN0IHByb3Agb2YgQ3NzRm9udEluZm8uc3RyaW5ncykgewogICAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlZFN0cmluZ3NbcHJvcF07CiAgICAgIGNvbnN0IGxlbmd0aCA9IGVuY29kZWQubGVuZ3RoOwogICAgICB2aWV3LnNldFVpbnQzMihvZmZzZXQsIGxlbmd0aCk7CiAgICAgIGRhdGEuc2V0KGVuY29kZWQsIG9mZnNldCArIDQpOwogICAgICBvZmZzZXQgKz0gNCArIGxlbmd0aDsKICAgIH0KICAgIGFzc2VydChvZmZzZXQgPT09IGJ1ZmZlci5ieXRlTGVuZ3RoLCAiQ3NzRm9udEluZm8ud3JpdGU6IEJ1ZmZlciBvdmVyZmxvdyIpOwogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CiAgY29uc3RydWN0b3IoYnVmZmVyKSB7CiAgICB0aGlzLiNidWZmZXIgPSBidWZmZXI7CiAgICB0aGlzLiN2aWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuI2J1ZmZlcik7CiAgICB0aGlzLiNkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7CiAgfQogICNyZWFkU3RyaW5nKGluZGV4KSB7CiAgICBhc3NlcnQoaW5kZXggPCBDc3NGb250SW5mby5zdHJpbmdzLmxlbmd0aCwgIkludmFsaWQgc3RyaW5nIGluZGV4Iik7CiAgICBsZXQgb2Zmc2V0ID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykgewogICAgICBvZmZzZXQgKz0gdGhpcy4jdmlldy5nZXRVaW50MzIob2Zmc2V0KSArIDQ7CiAgICB9CiAgICBjb25zdCBsZW5ndGggPSB0aGlzLiN2aWV3LmdldFVpbnQzMihvZmZzZXQpOwogICAgcmV0dXJuIHRoaXMuI2RlY29kZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KHRoaXMuI2J1ZmZlciwgb2Zmc2V0ICsgNCwgbGVuZ3RoKSk7CiAgfQogIGdldCBmb250RmFtaWx5KCkgewogICAgcmV0dXJuIHRoaXMuI3JlYWRTdHJpbmcoMCk7CiAgfQogIGdldCBmb250V2VpZ2h0KCkgewogICAgcmV0dXJuIHRoaXMuI3JlYWRTdHJpbmcoMSk7CiAgfQogIGdldCBpdGFsaWNBbmdsZSgpIHsKICAgIHJldHVybiB0aGlzLiNyZWFkU3RyaW5nKDIpOwogIH0KfQpjbGFzcyBTeXN0ZW1Gb250SW5mbyB7CiAgI2J1ZmZlcjsKICAjdmlldzsKICAjZGVjb2RlcjsKICBzdGF0aWMgc3RyaW5ncyA9IFsiY3NzIiwgImxvYWRlZE5hbWUiLCAiYmFzZUZvbnROYW1lIiwgInNyYyJdOwogIHN0YXRpYyB3cml0ZShpbmZvKSB7CiAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7CiAgICBjb25zdCBlbmNvZGVkU3RyaW5ncyA9IHt9OwogICAgbGV0IHN0cmluZ3NMZW5ndGggPSAwOwogICAgZm9yIChjb25zdCBwcm9wIG9mIFN5c3RlbUZvbnRJbmZvLnN0cmluZ3MpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGVuY29kZXIuZW5jb2RlKGluZm9bcHJvcF0pOwogICAgICBlbmNvZGVkU3RyaW5nc1twcm9wXSA9IGVuY29kZWQ7CiAgICAgIHN0cmluZ3NMZW5ndGggKz0gNCArIGVuY29kZWQubGVuZ3RoOwogICAgfQogICAgc3RyaW5nc0xlbmd0aCArPSA0OwogICAgbGV0IGVuY29kZWRTdHlsZVN0eWxlLAogICAgICBlbmNvZGVkU3R5bGVXZWlnaHQsCiAgICAgIGxlbmd0aEVzdGltYXRlID0gMSArIHN0cmluZ3NMZW5ndGg7CiAgICBpZiAoaW5mby5zdHlsZSkgewogICAgICBlbmNvZGVkU3R5bGVTdHlsZSA9IGVuY29kZXIuZW5jb2RlKGluZm8uc3R5bGUuc3R5bGUpOwogICAgICBlbmNvZGVkU3R5bGVXZWlnaHQgPSBlbmNvZGVyLmVuY29kZShpbmZvLnN0eWxlLndlaWdodCk7CiAgICAgIGxlbmd0aEVzdGltYXRlICs9IDQgKyBlbmNvZGVkU3R5bGVTdHlsZS5sZW5ndGggKyA0ICsgZW5jb2RlZFN0eWxlV2VpZ2h0Lmxlbmd0aDsKICAgIH0KICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihsZW5ndGhFc3RpbWF0ZSk7CiAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTsKICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgaW5mby5ndWVzc0ZhbGxiYWNrID8gMSA6IDApOwogICAgdmlldy5zZXRVaW50MzIob2Zmc2V0LCAwKTsKICAgIG9mZnNldCArPSA0OwogICAgc3RyaW5nc0xlbmd0aCA9IDA7CiAgICBmb3IgKGNvbnN0IHByb3Agb2YgU3lzdGVtRm9udEluZm8uc3RyaW5ncykgewogICAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlZFN0cmluZ3NbcHJvcF07CiAgICAgIGNvbnN0IGxlbmd0aCA9IGVuY29kZWQubGVuZ3RoOwogICAgICBzdHJpbmdzTGVuZ3RoICs9IDQgKyBsZW5ndGg7CiAgICAgIHZpZXcuc2V0VWludDMyKG9mZnNldCwgbGVuZ3RoKTsKICAgICAgZGF0YS5zZXQoZW5jb2RlZCwgb2Zmc2V0ICsgNCk7CiAgICAgIG9mZnNldCArPSA0ICsgbGVuZ3RoOwogICAgfQogICAgdmlldy5zZXRVaW50MzIob2Zmc2V0IC0gc3RyaW5nc0xlbmd0aCAtIDQsIHN0cmluZ3NMZW5ndGgpOwogICAgaWYgKGluZm8uc3R5bGUpIHsKICAgICAgdmlldy5zZXRVaW50MzIob2Zmc2V0LCBlbmNvZGVkU3R5bGVTdHlsZS5sZW5ndGgpOwogICAgICBkYXRhLnNldChlbmNvZGVkU3R5bGVTdHlsZSwgb2Zmc2V0ICsgNCk7CiAgICAgIG9mZnNldCArPSA0ICsgZW5jb2RlZFN0eWxlU3R5bGUubGVuZ3RoOwogICAgICB2aWV3LnNldFVpbnQzMihvZmZzZXQsIGVuY29kZWRTdHlsZVdlaWdodC5sZW5ndGgpOwogICAgICBkYXRhLnNldChlbmNvZGVkU3R5bGVXZWlnaHQsIG9mZnNldCArIDQpOwogICAgICBvZmZzZXQgKz0gNCArIGVuY29kZWRTdHlsZVdlaWdodC5sZW5ndGg7CiAgICB9CiAgICBhc3NlcnQob2Zmc2V0IDw9IGJ1ZmZlci5ieXRlTGVuZ3RoLCAiU3Vic3RpdGlvbkluZm8ud3JpdGU6IEJ1ZmZlciBvdmVyZmxvdyIpOwogICAgcmV0dXJuIGJ1ZmZlci50cmFuc2ZlclRvRml4ZWRMZW5ndGgob2Zmc2V0KTsKICB9CiAgY29uc3RydWN0b3IoYnVmZmVyKSB7CiAgICB0aGlzLiNidWZmZXIgPSBidWZmZXI7CiAgICB0aGlzLiN2aWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuI2J1ZmZlcik7CiAgICB0aGlzLiNkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7CiAgfQogIGdldCBndWVzc0ZhbGxiYWNrKCkgewogICAgcmV0dXJuIHRoaXMuI3ZpZXcuZ2V0VWludDgoMCkgIT09IDA7CiAgfQogICNyZWFkU3RyaW5nKGluZGV4KSB7CiAgICBhc3NlcnQoaW5kZXggPCBTeXN0ZW1Gb250SW5mby5zdHJpbmdzLmxlbmd0aCwgIkludmFsaWQgc3RyaW5nIGluZGV4Iik7CiAgICBsZXQgb2Zmc2V0ID0gNTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykgewogICAgICBvZmZzZXQgKz0gdGhpcy4jdmlldy5nZXRVaW50MzIob2Zmc2V0KSArIDQ7CiAgICB9CiAgICBjb25zdCBsZW5ndGggPSB0aGlzLiN2aWV3LmdldFVpbnQzMihvZmZzZXQpOwogICAgcmV0dXJuIHRoaXMuI2RlY29kZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KHRoaXMuI2J1ZmZlciwgb2Zmc2V0ICsgNCwgbGVuZ3RoKSk7CiAgfQogIGdldCBjc3MoKSB7CiAgICByZXR1cm4gdGhpcy4jcmVhZFN0cmluZygwKTsKICB9CiAgZ2V0IGxvYWRlZE5hbWUoKSB7CiAgICByZXR1cm4gdGhpcy4jcmVhZFN0cmluZygxKTsKICB9CiAgZ2V0IGJhc2VGb250TmFtZSgpIHsKICAgIHJldHVybiB0aGlzLiNyZWFkU3RyaW5nKDIpOwogIH0KICBnZXQgc3JjKCkgewogICAgcmV0dXJuIHRoaXMuI3JlYWRTdHJpbmcoMyk7CiAgfQogIGdldCBzdHlsZSgpIHsKICAgIGxldCBvZmZzZXQgPSAxOwogICAgb2Zmc2V0ICs9IDQgKyB0aGlzLiN2aWV3LmdldFVpbnQzMihvZmZzZXQpOwogICAgY29uc3Qgc3R5bGVMZW5ndGggPSB0aGlzLiN2aWV3LmdldFVpbnQzMihvZmZzZXQpOwogICAgY29uc3Qgc3R5bGUgPSB0aGlzLiNkZWNvZGVyLmRlY29kZShuZXcgVWludDhBcnJheSh0aGlzLiNidWZmZXIsIG9mZnNldCArIDQsIHN0eWxlTGVuZ3RoKSk7CiAgICBvZmZzZXQgKz0gNCArIHN0eWxlTGVuZ3RoOwogICAgY29uc3Qgd2VpZ2h0TGVuZ3RoID0gdGhpcy4jdmlldy5nZXRVaW50MzIob2Zmc2V0KTsKICAgIGNvbnN0IHdlaWdodCA9IHRoaXMuI2RlY29kZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KHRoaXMuI2J1ZmZlciwgb2Zmc2V0ICsgNCwgd2VpZ2h0TGVuZ3RoKSk7CiAgICByZXR1cm4gewogICAgICBzdHlsZSwKICAgICAgd2VpZ2h0CiAgICB9OwogIH0KfQpjbGFzcyBGb250SW5mbyB7CiAgc3RhdGljIGJvb2xzID0gWyJibGFjayIsICJib2xkIiwgImRpc2FibGVGb250RmFjZSIsICJmb250RXh0cmFQcm9wZXJ0aWVzIiwgImlzSW52YWxpZFBERmpzRm9udCIsICJpc1R5cGUzRm9udCIsICJpdGFsaWMiLCAibWlzc2luZ0ZpbGUiLCAicmVtZWFzdXJlIiwgInZlcnRpY2FsIl07CiAgc3RhdGljIG51bWJlcnMgPSBbImFzY2VudCIsICJkZWZhdWx0V2lkdGgiLCAiZGVzY2VudCJdOwogIHN0YXRpYyBzdHJpbmdzID0gWyJmYWxsYmFja05hbWUiLCAibG9hZGVkTmFtZSIsICJtaW1ldHlwZSIsICJuYW1lIl07CiAgc3RhdGljICNPRkZTRVRfTlVNQkVSUyA9IE1hdGguY2VpbCh0aGlzLmJvb2xzLmxlbmd0aCAqIDIgLyA4KTsKICBzdGF0aWMgI09GRlNFVF9CQk9YID0gdGhpcy4jT0ZGU0VUX05VTUJFUlMgKyB0aGlzLm51bWJlcnMubGVuZ3RoICogODsKICBzdGF0aWMgI09GRlNFVF9GT05UX01BVFJJWCA9IHRoaXMuI09GRlNFVF9CQk9YICsgMSArIDIgKiA0OwogIHN0YXRpYyAjT0ZGU0VUX0RFRkFVTFRfVk1FVFJJQ1MgPSB0aGlzLiNPRkZTRVRfRk9OVF9NQVRSSVggKyAxICsgOCAqIDY7CiAgc3RhdGljICNPRkZTRVRfU1RSSU5HUyA9IHRoaXMuI09GRlNFVF9ERUZBVUxUX1ZNRVRSSUNTICsgMSArIDIgKiAzOwogICNidWZmZXI7CiAgI2RlY29kZXI7CiAgI3ZpZXc7CiAgY29uc3RydWN0b3IoewogICAgZGF0YSwKICAgIGV4dHJhCiAgfSkgewogICAgdGhpcy4jYnVmZmVyID0gZGF0YTsKICAgIHRoaXMuI2RlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTsKICAgIHRoaXMuI3ZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy4jYnVmZmVyKTsKICAgIGlmIChleHRyYSkgewogICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGV4dHJhKTsKICAgIH0KICB9CiAgI3JlYWRCb29sZWFuKGluZGV4KSB7CiAgICBhc3NlcnQoaW5kZXggPCBGb250SW5mby5ib29scy5sZW5ndGgsICJJbnZhbGlkIGJvb2xlYW4gaW5kZXgiKTsKICAgIGNvbnN0IGJ5dGVPZmZzZXQgPSBNYXRoLmZsb29yKGluZGV4IC8gNCk7CiAgICBjb25zdCBiaXRPZmZzZXQgPSBpbmRleCAqIDIgJSA4OwogICAgY29uc3QgdmFsdWUgPSB0aGlzLiN2aWV3LmdldFVpbnQ4KGJ5dGVPZmZzZXQpID4+IGJpdE9mZnNldCAmIDB4MDM7CiAgICByZXR1cm4gdmFsdWUgPT09IDB4MDAgPyB1bmRlZmluZWQgOiB2YWx1ZSA9PT0gMHgwMjsKICB9CiAgZ2V0IGJsYWNrKCkgewogICAgcmV0dXJuIHRoaXMuI3JlYWRCb29sZWFuKDApOwogIH0KICBnZXQgYm9sZCgpIHsKICAgIHJldHVybiB0aGlzLiNyZWFkQm9vbGVhbigxKTsKICB9CiAgZ2V0IGRpc2FibGVGb250RmFjZSgpIHsKICAgIHJldHVybiB0aGlzLiNyZWFkQm9vbGVhbigyKTsKICB9CiAgZ2V0IGZvbnRFeHRyYVByb3BlcnRpZXMoKSB7CiAgICByZXR1cm4gdGhpcy4jcmVhZEJvb2xlYW4oMyk7CiAgfQogIGdldCBpc0ludmFsaWRQREZqc0ZvbnQoKSB7CiAgICByZXR1cm4gdGhpcy4jcmVhZEJvb2xlYW4oNCk7CiAgfQogIGdldCBpc1R5cGUzRm9udCgpIHsKICAgIHJldHVybiB0aGlzLiNyZWFkQm9vbGVhbig1KTsKICB9CiAgZ2V0IGl0YWxpYygpIHsKICAgIHJldHVybiB0aGlzLiNyZWFkQm9vbGVhbig2KTsKICB9CiAgZ2V0IG1pc3NpbmdGaWxlKCkgewogICAgcmV0dXJuIHRoaXMuI3JlYWRCb29sZWFuKDcpOwogIH0KICBnZXQgcmVtZWFzdXJlKCkgewogICAgcmV0dXJuIHRoaXMuI3JlYWRCb29sZWFuKDgpOwogIH0KICBnZXQgdmVydGljYWwoKSB7CiAgICByZXR1cm4gdGhpcy4jcmVhZEJvb2xlYW4oOSk7CiAgfQogICNyZWFkTnVtYmVyKGluZGV4KSB7CiAgICBhc3NlcnQoaW5kZXggPCBGb250SW5mby5udW1iZXJzLmxlbmd0aCwgIkludmFsaWQgbnVtYmVyIGluZGV4Iik7CiAgICByZXR1cm4gdGhpcy4jdmlldy5nZXRGbG9hdDY0KEZvbnRJbmZvLiNPRkZTRVRfTlVNQkVSUyArIGluZGV4ICogOCk7CiAgfQogIGdldCBhc2NlbnQoKSB7CiAgICByZXR1cm4gdGhpcy4jcmVhZE51bWJlcigwKTsKICB9CiAgZ2V0IGRlZmF1bHRXaWR0aCgpIHsKICAgIHJldHVybiB0aGlzLiNyZWFkTnVtYmVyKDEpOwogIH0KICBnZXQgZGVzY2VudCgpIHsKICAgIHJldHVybiB0aGlzLiNyZWFkTnVtYmVyKDIpOwogIH0KICBnZXQgYmJveCgpIHsKICAgIGxldCBvZmZzZXQgPSBGb250SW5mby4jT0ZGU0VUX0JCT1g7CiAgICBjb25zdCBudW1Db29yZHMgPSB0aGlzLiN2aWV3LmdldFVpbnQ4KG9mZnNldCk7CiAgICBpZiAobnVtQ29vcmRzID09PSAwKSB7CiAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICB9CiAgICBvZmZzZXQgKz0gMTsKICAgIGNvbnN0IGJib3ggPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgIGJib3gucHVzaCh0aGlzLiN2aWV3LmdldEludDE2KG9mZnNldCwgdHJ1ZSkpOwogICAgICBvZmZzZXQgKz0gMjsKICAgIH0KICAgIHJldHVybiBiYm94OwogIH0KICBnZXQgZm9udE1hdHJpeCgpIHsKICAgIGxldCBvZmZzZXQgPSBGb250SW5mby4jT0ZGU0VUX0ZPTlRfTUFUUklYOwogICAgY29uc3QgbnVtUG9pbnRzID0gdGhpcy4jdmlldy5nZXRVaW50OChvZmZzZXQpOwogICAgaWYgKG51bVBvaW50cyA9PT0gMCkgewogICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgfQogICAgb2Zmc2V0ICs9IDE7CiAgICBjb25zdCBmb250TWF0cml4ID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykgewogICAgICBmb250TWF0cml4LnB1c2godGhpcy4jdmlldy5nZXRGbG9hdDY0KG9mZnNldCwgdHJ1ZSkpOwogICAgICBvZmZzZXQgKz0gODsKICAgIH0KICAgIHJldHVybiBmb250TWF0cml4OwogIH0KICBnZXQgZGVmYXVsdFZNZXRyaWNzKCkgewogICAgbGV0IG9mZnNldCA9IEZvbnRJbmZvLiNPRkZTRVRfREVGQVVMVF9WTUVUUklDUzsKICAgIGNvbnN0IG51bU1ldHJpY3MgPSB0aGlzLiN2aWV3LmdldFVpbnQ4KG9mZnNldCk7CiAgICBpZiAobnVtTWV0cmljcyA9PT0gMCkgewogICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgfQogICAgb2Zmc2V0ICs9IDE7CiAgICBjb25zdCBkZWZhdWx0Vk1ldHJpY3MgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgIGRlZmF1bHRWTWV0cmljcy5wdXNoKHRoaXMuI3ZpZXcuZ2V0SW50MTYob2Zmc2V0LCB0cnVlKSk7CiAgICAgIG9mZnNldCArPSAyOwogICAgfQogICAgcmV0dXJuIGRlZmF1bHRWTWV0cmljczsKICB9CiAgI3JlYWRTdHJpbmcoaW5kZXgpIHsKICAgIGFzc2VydChpbmRleCA8IEZvbnRJbmZvLnN0cmluZ3MubGVuZ3RoLCAiSW52YWxpZCBzdHJpbmcgaW5kZXgiKTsKICAgIGxldCBvZmZzZXQgPSBGb250SW5mby4jT0ZGU0VUX1NUUklOR1MgKyA0OwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7CiAgICAgIG9mZnNldCArPSB0aGlzLiN2aWV3LmdldFVpbnQzMihvZmZzZXQpICsgNDsKICAgIH0KICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuI3ZpZXcuZ2V0VWludDMyKG9mZnNldCk7CiAgICBjb25zdCBzdHJpbmdEYXRhID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTsKICAgIHN0cmluZ0RhdGEuc2V0KG5ldyBVaW50OEFycmF5KHRoaXMuI2J1ZmZlciwgb2Zmc2V0ICsgNCwgbGVuZ3RoKSk7CiAgICByZXR1cm4gdGhpcy4jZGVjb2Rlci5kZWNvZGUoc3RyaW5nRGF0YSk7CiAgfQogIGdldCBmYWxsYmFja05hbWUoKSB7CiAgICByZXR1cm4gdGhpcy4jcmVhZFN0cmluZygwKTsKICB9CiAgZ2V0IGxvYWRlZE5hbWUoKSB7CiAgICByZXR1cm4gdGhpcy4jcmVhZFN0cmluZygxKTsKICB9CiAgZ2V0IG1pbWV0eXBlKCkgewogICAgcmV0dXJuIHRoaXMuI3JlYWRTdHJpbmcoMik7CiAgfQogIGdldCBuYW1lKCkgewogICAgcmV0dXJuIHRoaXMuI3JlYWRTdHJpbmcoMyk7CiAgfQogIGdldCBkYXRhKCkgewogICAgbGV0IG9mZnNldCA9IEZvbnRJbmZvLiNPRkZTRVRfU1RSSU5HUzsKICAgIGNvbnN0IHN0cmluZ3NMZW5ndGggPSB0aGlzLiN2aWV3LmdldFVpbnQzMihvZmZzZXQpOwogICAgb2Zmc2V0ICs9IDQgKyBzdHJpbmdzTGVuZ3RoOwogICAgY29uc3Qgc3lzdGVtRm9udEluZm9MZW5ndGggPSB0aGlzLiN2aWV3LmdldFVpbnQzMihvZmZzZXQpOwogICAgb2Zmc2V0ICs9IDQgKyBzeXN0ZW1Gb250SW5mb0xlbmd0aDsKICAgIGNvbnN0IGNzc0ZvbnRJbmZvTGVuZ3RoID0gdGhpcy4jdmlldy5nZXRVaW50MzIob2Zmc2V0KTsKICAgIG9mZnNldCArPSA0ICsgY3NzRm9udEluZm9MZW5ndGg7CiAgICBjb25zdCBsZW5ndGggPSB0aGlzLiN2aWV3LmdldFVpbnQzMihvZmZzZXQpOwogICAgaWYgKGxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgfQogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHRoaXMuI2J1ZmZlciwgb2Zmc2V0ICsgNCwgbGVuZ3RoKTsKICB9CiAgY2xlYXJEYXRhKCkgewogICAgbGV0IG9mZnNldCA9IEZvbnRJbmZvLiNPRkZTRVRfU1RSSU5HUzsKICAgIGNvbnN0IHN0cmluZ3NMZW5ndGggPSB0aGlzLiN2aWV3LmdldFVpbnQzMihvZmZzZXQpOwogICAgb2Zmc2V0ICs9IDQgKyBzdHJpbmdzTGVuZ3RoOwogICAgY29uc3Qgc3lzdGVtRm9udEluZm9MZW5ndGggPSB0aGlzLiN2aWV3LmdldFVpbnQzMihvZmZzZXQpOwogICAgb2Zmc2V0ICs9IDQgKyBzeXN0ZW1Gb250SW5mb0xlbmd0aDsKICAgIGNvbnN0IGNzc0ZvbnRJbmZvTGVuZ3RoID0gdGhpcy4jdmlldy5nZXRVaW50MzIob2Zmc2V0KTsKICAgIG9mZnNldCArPSA0ICsgY3NzRm9udEluZm9MZW5ndGg7CiAgICBjb25zdCBsZW5ndGggPSB0aGlzLiN2aWV3LmdldFVpbnQzMihvZmZzZXQpOwogICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMuI2J1ZmZlciwgb2Zmc2V0ICsgNCwgbGVuZ3RoKTsKICAgIGRhdGEuZmlsbCgwKTsKICAgIHRoaXMuI3ZpZXcuc2V0VWludDMyKG9mZnNldCwgMCk7CiAgfQogIGdldCBjc3NGb250SW5mbygpIHsKICAgIGxldCBvZmZzZXQgPSBGb250SW5mby4jT0ZGU0VUX1NUUklOR1M7CiAgICBjb25zdCBzdHJpbmdzTGVuZ3RoID0gdGhpcy4jdmlldy5nZXRVaW50MzIob2Zmc2V0KTsKICAgIG9mZnNldCArPSA0ICsgc3RyaW5nc0xlbmd0aDsKICAgIGNvbnN0IHN5c3RlbUZvbnRJbmZvTGVuZ3RoID0gdGhpcy4jdmlldy5nZXRVaW50MzIob2Zmc2V0KTsKICAgIG9mZnNldCArPSA0ICsgc3lzdGVtRm9udEluZm9MZW5ndGg7CiAgICBjb25zdCBjc3NGb250SW5mb0xlbmd0aCA9IHRoaXMuI3ZpZXcuZ2V0VWludDMyKG9mZnNldCk7CiAgICBpZiAoY3NzRm9udEluZm9MZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBjc3NGb250SW5mb0RhdGEgPSBuZXcgVWludDhBcnJheShjc3NGb250SW5mb0xlbmd0aCk7CiAgICBjc3NGb250SW5mb0RhdGEuc2V0KG5ldyBVaW50OEFycmF5KHRoaXMuI2J1ZmZlciwgb2Zmc2V0ICsgNCwgY3NzRm9udEluZm9MZW5ndGgpKTsKICAgIHJldHVybiBuZXcgQ3NzRm9udEluZm8oY3NzRm9udEluZm9EYXRhLmJ1ZmZlcik7CiAgfQogIGdldCBzeXN0ZW1Gb250SW5mbygpIHsKICAgIGxldCBvZmZzZXQgPSBGb250SW5mby4jT0ZGU0VUX1NUUklOR1M7CiAgICBjb25zdCBzdHJpbmdzTGVuZ3RoID0gdGhpcy4jdmlldy5nZXRVaW50MzIob2Zmc2V0KTsKICAgIG9mZnNldCArPSA0ICsgc3RyaW5nc0xlbmd0aDsKICAgIGNvbnN0IHN5c3RlbUZvbnRJbmZvTGVuZ3RoID0gdGhpcy4jdmlldy5nZXRVaW50MzIob2Zmc2V0KTsKICAgIGlmIChzeXN0ZW1Gb250SW5mb0xlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHN5c3RlbUZvbnRJbmZvRGF0YSA9IG5ldyBVaW50OEFycmF5KHN5c3RlbUZvbnRJbmZvTGVuZ3RoKTsKICAgIHN5c3RlbUZvbnRJbmZvRGF0YS5zZXQobmV3IFVpbnQ4QXJyYXkodGhpcy4jYnVmZmVyLCBvZmZzZXQgKyA0LCBzeXN0ZW1Gb250SW5mb0xlbmd0aCkpOwogICAgcmV0dXJuIG5ldyBTeXN0ZW1Gb250SW5mbyhzeXN0ZW1Gb250SW5mb0RhdGEuYnVmZmVyKTsKICB9CiAgc3RhdGljIHdyaXRlKGZvbnQpIHsKICAgIGNvbnN0IHN5c3RlbUZvbnRJbmZvQnVmZmVyID0gZm9udC5zeXN0ZW1Gb250SW5mbyA/IFN5c3RlbUZvbnRJbmZvLndyaXRlKGZvbnQuc3lzdGVtRm9udEluZm8pIDogbnVsbDsKICAgIGNvbnN0IGNzc0ZvbnRJbmZvQnVmZmVyID0gZm9udC5jc3NGb250SW5mbyA/IENzc0ZvbnRJbmZvLndyaXRlKGZvbnQuY3NzRm9udEluZm8pIDogbnVsbDsKICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTsKICAgIGNvbnN0IGVuY29kZWRTdHJpbmdzID0ge307CiAgICBsZXQgc3RyaW5nc0xlbmd0aCA9IDA7CiAgICBmb3IgKGNvbnN0IHByb3Agb2YgRm9udEluZm8uc3RyaW5ncykgewogICAgICBlbmNvZGVkU3RyaW5nc1twcm9wXSA9IGVuY29kZXIuZW5jb2RlKGZvbnRbcHJvcF0pOwogICAgICBzdHJpbmdzTGVuZ3RoICs9IDQgKyBlbmNvZGVkU3RyaW5nc1twcm9wXS5sZW5ndGg7CiAgICB9CiAgICBjb25zdCBsZW5ndGhFc3RpbWF0ZSA9IEZvbnRJbmZvLiNPRkZTRVRfU1RSSU5HUyArIDQgKyBzdHJpbmdzTGVuZ3RoICsgNCArIChzeXN0ZW1Gb250SW5mb0J1ZmZlciA/IHN5c3RlbUZvbnRJbmZvQnVmZmVyLmJ5dGVMZW5ndGggOiAwKSArIDQgKyAoY3NzRm9udEluZm9CdWZmZXIgPyBjc3NGb250SW5mb0J1ZmZlci5ieXRlTGVuZ3RoIDogMCkgKyA0ICsgKGZvbnQuZGF0YSA/IGZvbnQuZGF0YS5sZW5ndGggOiAwKTsKICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihsZW5ndGhFc3RpbWF0ZSk7CiAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTsKICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgY29uc3QgbnVtQm9vbHMgPSBGb250SW5mby5ib29scy5sZW5ndGg7CiAgICBsZXQgYm9vbEJ5dGUgPSAwLAogICAgICBib29sQml0ID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQm9vbHM7IGkrKykgewogICAgICBjb25zdCB2YWx1ZSA9IGZvbnRbRm9udEluZm8uYm9vbHNbaV1dOwogICAgICBjb25zdCBiaXRzID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IDB4MDAgOiB2YWx1ZSA/IDB4MDIgOiAweDAxOwogICAgICBib29sQnl0ZSB8PSBiaXRzIDw8IGJvb2xCaXQ7CiAgICAgIGJvb2xCaXQgKz0gMjsKICAgICAgaWYgKGJvb2xCaXQgPT09IDggfHwgaSA9PT0gbnVtQm9vbHMgLSAxKSB7CiAgICAgICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgYm9vbEJ5dGUpOwogICAgICAgIGJvb2xCeXRlID0gMDsKICAgICAgICBib29sQml0ID0gMDsKICAgICAgfQogICAgfQogICAgYXNzZXJ0KG9mZnNldCA9PT0gRm9udEluZm8uI09GRlNFVF9OVU1CRVJTLCAiRm9udEluZm8ud3JpdGU6IEJvb2xlYW4gcHJvcGVydGllcyBvZmZzZXQgbWlzbWF0Y2giKTsKICAgIGZvciAoY29uc3QgcHJvcCBvZiBGb250SW5mby5udW1iZXJzKSB7CiAgICAgIHZpZXcuc2V0RmxvYXQ2NChvZmZzZXQsIGZvbnRbcHJvcF0pOwogICAgICBvZmZzZXQgKz0gODsKICAgIH0KICAgIGFzc2VydChvZmZzZXQgPT09IEZvbnRJbmZvLiNPRkZTRVRfQkJPWCwgIkZvbnRJbmZvLndyaXRlOiBOdW1iZXIgcHJvcGVydGllcyBvZmZzZXQgbWlzbWF0Y2giKTsKICAgIGlmIChmb250LmJib3gpIHsKICAgICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgNCk7CiAgICAgIGZvciAoY29uc3QgY29vcmQgb2YgZm9udC5iYm94KSB7CiAgICAgICAgdmlldy5zZXRJbnQxNihvZmZzZXQsIGNvb3JkLCB0cnVlKTsKICAgICAgICBvZmZzZXQgKz0gMjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgMCk7CiAgICAgIG9mZnNldCArPSAyICogNDsKICAgIH0KICAgIGFzc2VydChvZmZzZXQgPT09IEZvbnRJbmZvLiNPRkZTRVRfRk9OVF9NQVRSSVgsICJGb250SW5mby53cml0ZTogQkJveCBwcm9wZXJ0aWVzIG9mZnNldCBtaXNtYXRjaCIpOwogICAgaWYgKGZvbnQuZm9udE1hdHJpeCkgewogICAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCA2KTsKICAgICAgZm9yIChjb25zdCBwb2ludCBvZiBmb250LmZvbnRNYXRyaXgpIHsKICAgICAgICB2aWV3LnNldEZsb2F0NjQob2Zmc2V0LCBwb2ludCwgdHJ1ZSk7CiAgICAgICAgb2Zmc2V0ICs9IDg7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIDApOwogICAgICBvZmZzZXQgKz0gOCAqIDY7CiAgICB9CiAgICBhc3NlcnQob2Zmc2V0ID09PSBGb250SW5mby4jT0ZGU0VUX0RFRkFVTFRfVk1FVFJJQ1MsICJGb250SW5mby53cml0ZTogRm9udE1hdHJpeCBwcm9wZXJ0aWVzIG9mZnNldCBtaXNtYXRjaCIpOwogICAgaWYgKGZvbnQuZGVmYXVsdFZNZXRyaWNzKSB7CiAgICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIDEpOwogICAgICBmb3IgKGNvbnN0IG1ldHJpYyBvZiBmb250LmRlZmF1bHRWTWV0cmljcykgewogICAgICAgIHZpZXcuc2V0SW50MTYob2Zmc2V0LCBtZXRyaWMsIHRydWUpOwogICAgICAgIG9mZnNldCArPSAyOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCAwKTsKICAgICAgb2Zmc2V0ICs9IDMgKiAyOwogICAgfQogICAgYXNzZXJ0KG9mZnNldCA9PT0gRm9udEluZm8uI09GRlNFVF9TVFJJTkdTLCAiRm9udEluZm8ud3JpdGU6IERlZmF1bHRWTWV0cmljcyBwcm9wZXJ0aWVzIG9mZnNldCBtaXNtYXRjaCIpOwogICAgdmlldy5zZXRVaW50MzIoRm9udEluZm8uI09GRlNFVF9TVFJJTkdTLCAwKTsKICAgIG9mZnNldCArPSA0OwogICAgZm9yIChjb25zdCBwcm9wIG9mIEZvbnRJbmZvLnN0cmluZ3MpIHsKICAgICAgY29uc3QgZW5jb2RlZCA9IGVuY29kZWRTdHJpbmdzW3Byb3BdOwogICAgICBjb25zdCBsZW5ndGggPSBlbmNvZGVkLmxlbmd0aDsKICAgICAgdmlldy5zZXRVaW50MzIob2Zmc2V0LCBsZW5ndGgpOwogICAgICBkYXRhLnNldChlbmNvZGVkLCBvZmZzZXQgKyA0KTsKICAgICAgb2Zmc2V0ICs9IDQgKyBsZW5ndGg7CiAgICB9CiAgICB2aWV3LnNldFVpbnQzMihGb250SW5mby4jT0ZGU0VUX1NUUklOR1MsIG9mZnNldCAtIEZvbnRJbmZvLiNPRkZTRVRfU1RSSU5HUyAtIDQpOwogICAgaWYgKCFzeXN0ZW1Gb250SW5mb0J1ZmZlcikgewogICAgICB2aWV3LnNldFVpbnQzMihvZmZzZXQsIDApOwogICAgICBvZmZzZXQgKz0gNDsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IHN5c3RlbUZvbnRJbmZvQnVmZmVyLmJ5dGVMZW5ndGg7CiAgICAgIHZpZXcuc2V0VWludDMyKG9mZnNldCwgbGVuZ3RoKTsKICAgICAgYXNzZXJ0KG9mZnNldCArIDQgKyBsZW5ndGggPD0gYnVmZmVyLmJ5dGVMZW5ndGgsICJGb250SW5mby53cml0ZTogQnVmZmVyIG92ZXJmbG93IGF0IHN5c3RlbUZvbnRJbmZvIik7CiAgICAgIGRhdGEuc2V0KG5ldyBVaW50OEFycmF5KHN5c3RlbUZvbnRJbmZvQnVmZmVyKSwgb2Zmc2V0ICsgNCk7CiAgICAgIG9mZnNldCArPSA0ICsgbGVuZ3RoOwogICAgfQogICAgaWYgKCFjc3NGb250SW5mb0J1ZmZlcikgewogICAgICB2aWV3LnNldFVpbnQzMihvZmZzZXQsIDApOwogICAgICBvZmZzZXQgKz0gNDsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IGNzc0ZvbnRJbmZvQnVmZmVyLmJ5dGVMZW5ndGg7CiAgICAgIHZpZXcuc2V0VWludDMyKG9mZnNldCwgbGVuZ3RoKTsKICAgICAgYXNzZXJ0KG9mZnNldCArIDQgKyBsZW5ndGggPD0gYnVmZmVyLmJ5dGVMZW5ndGgsICJGb250SW5mby53cml0ZTogQnVmZmVyIG92ZXJmbG93IGF0IGNzc0ZvbnRJbmZvIik7CiAgICAgIGRhdGEuc2V0KG5ldyBVaW50OEFycmF5KGNzc0ZvbnRJbmZvQnVmZmVyKSwgb2Zmc2V0ICsgNCk7CiAgICAgIG9mZnNldCArPSA0ICsgbGVuZ3RoOwogICAgfQogICAgaWYgKGZvbnQuZGF0YSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHZpZXcuc2V0VWludDMyKG9mZnNldCwgMCk7CiAgICAgIG9mZnNldCArPSA0OwogICAgfSBlbHNlIHsKICAgICAgdmlldy5zZXRVaW50MzIob2Zmc2V0LCBmb250LmRhdGEubGVuZ3RoKTsKICAgICAgZGF0YS5zZXQoZm9udC5kYXRhLCBvZmZzZXQgKyA0KTsKICAgICAgb2Zmc2V0ICs9IDQgKyBmb250LmRhdGEubGVuZ3RoOwogICAgfQogICAgYXNzZXJ0KG9mZnNldCA8PSBidWZmZXIuYnl0ZUxlbmd0aCwgIkZvbnRJbmZvLndyaXRlOiBCdWZmZXIgb3ZlcmZsb3ciKTsKICAgIHJldHVybiBidWZmZXIudHJhbnNmZXJUb0ZpeGVkTGVuZ3RoKG9mZnNldCk7CiAgfQp9CmNsYXNzIFBhdHRlcm5JbmZvIHsKICBzdGF0aWMgI0tJTkQgPSAwOwogIHN0YXRpYyAjSEFTX0JCT1ggPSAxOwogIHN0YXRpYyAjSEFTX0JBQ0tHUk9VTkQgPSAyOwogIHN0YXRpYyAjU0hBRElOR19UWVBFID0gMzsKICBzdGF0aWMgI05fQ09PUkQgPSA0OwogIHN0YXRpYyAjTl9DT0xPUiA9IDg7CiAgc3RhdGljICNOX1NUT1AgPSAxMjsKICBzdGF0aWMgI05fRklHVVJFUyA9IDE2OwogIGNvbnN0cnVjdG9yKGJ1ZmZlcikgewogICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CiAgICB0aGlzLnZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTsKICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7CiAgfQogIHN0YXRpYyB3cml0ZShpcikgewogICAgbGV0IGtpbmQsCiAgICAgIGJib3ggPSBudWxsLAogICAgICBjb29yZHMgPSBbXSwKICAgICAgY29sb3JzID0gW10sCiAgICAgIGNvbG9yU3RvcHMgPSBbXSwKICAgICAgZmlndXJlcyA9IFtdLAogICAgICBzaGFkaW5nVHlwZSA9IG51bGwsCiAgICAgIGJhY2tncm91bmQgPSBudWxsOwogICAgc3dpdGNoIChpclswXSkgewogICAgICBjYXNlICJSYWRpYWxBeGlhbCI6CiAgICAgICAga2luZCA9IGlyWzFdID09PSAiYXhpYWwiID8gMSA6IDI7CiAgICAgICAgYmJveCA9IGlyWzJdOwogICAgICAgIGNvbG9yU3RvcHMgPSBpclszXTsKICAgICAgICBpZiAoa2luZCA9PT0gMSkgewogICAgICAgICAgY29vcmRzLnB1c2goLi4uaXJbNF0sIC4uLmlyWzVdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29vcmRzLnB1c2goaXJbNF1bMF0sIGlyWzRdWzFdLCBpcls2XSwgaXJbNV1bMF0sIGlyWzVdWzFdLCBpcls3XSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJNZXNoIjoKICAgICAgICBraW5kID0gMzsKICAgICAgICBzaGFkaW5nVHlwZSA9IGlyWzFdOwogICAgICAgIGNvb3JkcyA9IGlyWzJdOwogICAgICAgIGNvbG9ycyA9IGlyWzNdOwogICAgICAgIGZpZ3VyZXMgPSBpcls0XSB8fCBbXTsKICAgICAgICBiYm94ID0gaXJbNl07CiAgICAgICAgYmFja2dyb3VuZCA9IGlyWzddOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcGF0dGVybiB0eXBlOiAke2lyWzBdfWApOwogICAgfQogICAgY29uc3QgbkNvb3JkID0gTWF0aC5mbG9vcihjb29yZHMubGVuZ3RoIC8gMik7CiAgICBjb25zdCBuQ29sb3IgPSBNYXRoLmZsb29yKGNvbG9ycy5sZW5ndGggLyAzKTsKICAgIGNvbnN0IG5TdG9wID0gY29sb3JTdG9wcy5sZW5ndGg7CiAgICBjb25zdCBuRmlndXJlcyA9IGZpZ3VyZXMubGVuZ3RoOwogICAgbGV0IGZpZ3VyZXNTaXplID0gMDsKICAgIGZvciAoY29uc3QgZmlndXJlIG9mIGZpZ3VyZXMpIHsKICAgICAgZmlndXJlc1NpemUgKz0gMTsKICAgICAgZmlndXJlc1NpemUgPSBNYXRoLmNlaWwoZmlndXJlc1NpemUgLyA0KSAqIDQ7CiAgICAgIGZpZ3VyZXNTaXplICs9IDQgKyBmaWd1cmUuY29vcmRzLmxlbmd0aCAqIDQ7CiAgICAgIGZpZ3VyZXNTaXplICs9IDQgKyBmaWd1cmUuY29sb3JzLmxlbmd0aCAqIDQ7CiAgICAgIGlmIChmaWd1cmUudmVydGljZXNQZXJSb3cgIT09IHVuZGVmaW5lZCkgewogICAgICAgIGZpZ3VyZXNTaXplICs9IDQ7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGJ5dGVMZW4gPSAyMCArIG5Db29yZCAqIDggKyBuQ29sb3IgKiAzICsgblN0b3AgKiA4ICsgKGJib3ggPyAxNiA6IDApICsgKGJhY2tncm91bmQgPyAzIDogMCkgKyBmaWd1cmVzU2l6ZTsKICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlTGVuKTsKICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcik7CiAgICBjb25zdCB1OGRhdGEgPSBuZXcgVWludDhBcnJheShidWZmZXIpOwogICAgZGF0YVZpZXcuc2V0VWludDgoUGF0dGVybkluZm8uI0tJTkQsIGtpbmQpOwogICAgZGF0YVZpZXcuc2V0VWludDgoUGF0dGVybkluZm8uI0hBU19CQk9YLCBiYm94ID8gMSA6IDApOwogICAgZGF0YVZpZXcuc2V0VWludDgoUGF0dGVybkluZm8uI0hBU19CQUNLR1JPVU5ELCBiYWNrZ3JvdW5kID8gMSA6IDApOwogICAgZGF0YVZpZXcuc2V0VWludDgoUGF0dGVybkluZm8uI1NIQURJTkdfVFlQRSwgc2hhZGluZ1R5cGUpOwogICAgZGF0YVZpZXcuc2V0VWludDMyKFBhdHRlcm5JbmZvLiNOX0NPT1JELCBuQ29vcmQsIHRydWUpOwogICAgZGF0YVZpZXcuc2V0VWludDMyKFBhdHRlcm5JbmZvLiNOX0NPTE9SLCBuQ29sb3IsIHRydWUpOwogICAgZGF0YVZpZXcuc2V0VWludDMyKFBhdHRlcm5JbmZvLiNOX1NUT1AsIG5TdG9wLCB0cnVlKTsKICAgIGRhdGFWaWV3LnNldFVpbnQzMihQYXR0ZXJuSW5mby4jTl9GSUdVUkVTLCBuRmlndXJlcywgdHJ1ZSk7CiAgICBsZXQgb2Zmc2V0ID0gMjA7CiAgICBjb25zdCBjb29yZHNWaWV3ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgbkNvb3JkICogMik7CiAgICBjb29yZHNWaWV3LnNldChjb29yZHMpOwogICAgb2Zmc2V0ICs9IG5Db29yZCAqIDg7CiAgICB1OGRhdGEuc2V0KGNvbG9ycywgb2Zmc2V0KTsKICAgIG9mZnNldCArPSBuQ29sb3IgKiAzOwogICAgZm9yIChjb25zdCBbcG9zLCBoZXhdIG9mIGNvbG9yU3RvcHMpIHsKICAgICAgZGF0YVZpZXcuc2V0RmxvYXQzMihvZmZzZXQsIHBvcywgdHJ1ZSk7CiAgICAgIG9mZnNldCArPSA0OwogICAgICBkYXRhVmlldy5zZXRVaW50MzIob2Zmc2V0LCBwYXJzZUludChoZXguc2xpY2UoMSksIDE2KSwgdHJ1ZSk7CiAgICAgIG9mZnNldCArPSA0OwogICAgfQogICAgaWYgKGJib3gpIHsKICAgICAgZm9yIChjb25zdCB2IG9mIGJib3gpIHsKICAgICAgICBkYXRhVmlldy5zZXRGbG9hdDMyKG9mZnNldCwgdiwgdHJ1ZSk7CiAgICAgICAgb2Zmc2V0ICs9IDQ7CiAgICAgIH0KICAgIH0KICAgIGlmIChiYWNrZ3JvdW5kKSB7CiAgICAgIHU4ZGF0YS5zZXQoYmFja2dyb3VuZCwgb2Zmc2V0KTsKICAgICAgb2Zmc2V0ICs9IDM7CiAgICB9CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZ3VyZXMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgZmlndXJlID0gZmlndXJlc1tpXTsKICAgICAgZGF0YVZpZXcuc2V0VWludDgob2Zmc2V0LCBmaWd1cmUudHlwZSk7CiAgICAgIG9mZnNldCArPSAxOwogICAgICBvZmZzZXQgPSBNYXRoLmNlaWwob2Zmc2V0IC8gNCkgKiA0OwogICAgICBkYXRhVmlldy5zZXRVaW50MzIob2Zmc2V0LCBmaWd1cmUuY29vcmRzLmxlbmd0aCwgdHJ1ZSk7CiAgICAgIG9mZnNldCArPSA0OwogICAgICBjb25zdCBmaWd1cmVDb29yZHNWaWV3ID0gbmV3IEludDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZpZ3VyZS5jb29yZHMubGVuZ3RoKTsKICAgICAgZmlndXJlQ29vcmRzVmlldy5zZXQoZmlndXJlLmNvb3Jkcyk7CiAgICAgIG9mZnNldCArPSBmaWd1cmUuY29vcmRzLmxlbmd0aCAqIDQ7CiAgICAgIGRhdGFWaWV3LnNldFVpbnQzMihvZmZzZXQsIGZpZ3VyZS5jb2xvcnMubGVuZ3RoLCB0cnVlKTsKICAgICAgb2Zmc2V0ICs9IDQ7CiAgICAgIGNvbnN0IGNvbG9yc1ZpZXcgPSBuZXcgSW50MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmlndXJlLmNvbG9ycy5sZW5ndGgpOwogICAgICBjb2xvcnNWaWV3LnNldChmaWd1cmUuY29sb3JzKTsKICAgICAgb2Zmc2V0ICs9IGZpZ3VyZS5jb2xvcnMubGVuZ3RoICogNDsKICAgICAgaWYgKGZpZ3VyZS52ZXJ0aWNlc1BlclJvdyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgZGF0YVZpZXcuc2V0VWludDMyKG9mZnNldCwgZmlndXJlLnZlcnRpY2VzUGVyUm93LCB0cnVlKTsKICAgICAgICBvZmZzZXQgKz0gNDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CiAgZ2V0SVIoKSB7CiAgICBjb25zdCBkYXRhVmlldyA9IHRoaXMudmlldzsKICAgIGNvbnN0IGtpbmQgPSB0aGlzLmRhdGFbUGF0dGVybkluZm8uI0tJTkRdOwogICAgY29uc3QgaGFzQkJveCA9ICEhdGhpcy5kYXRhW1BhdHRlcm5JbmZvLiNIQVNfQkJPWF07CiAgICBjb25zdCBoYXNCYWNrZ3JvdW5kID0gISF0aGlzLmRhdGFbUGF0dGVybkluZm8uI0hBU19CQUNLR1JPVU5EXTsKICAgIGNvbnN0IG5Db29yZCA9IGRhdGFWaWV3LmdldFVpbnQzMihQYXR0ZXJuSW5mby4jTl9DT09SRCwgdHJ1ZSk7CiAgICBjb25zdCBuQ29sb3IgPSBkYXRhVmlldy5nZXRVaW50MzIoUGF0dGVybkluZm8uI05fQ09MT1IsIHRydWUpOwogICAgY29uc3QgblN0b3AgPSBkYXRhVmlldy5nZXRVaW50MzIoUGF0dGVybkluZm8uI05fU1RPUCwgdHJ1ZSk7CiAgICBjb25zdCBuRmlndXJlcyA9IGRhdGFWaWV3LmdldFVpbnQzMihQYXR0ZXJuSW5mby4jTl9GSUdVUkVTLCB0cnVlKTsKICAgIGxldCBvZmZzZXQgPSAyMDsKICAgIGNvbnN0IGNvb3JkcyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5idWZmZXIsIG9mZnNldCwgbkNvb3JkICogMik7CiAgICBvZmZzZXQgKz0gbkNvb3JkICogODsKICAgIGNvbnN0IGNvbG9ycyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLCBvZmZzZXQsIG5Db2xvciAqIDMpOwogICAgb2Zmc2V0ICs9IG5Db2xvciAqIDM7CiAgICBjb25zdCBzdG9wcyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuU3RvcDsgKytpKSB7CiAgICAgIGNvbnN0IHAgPSBkYXRhVmlldy5nZXRGbG9hdDMyKG9mZnNldCwgdHJ1ZSk7CiAgICAgIG9mZnNldCArPSA0OwogICAgICBjb25zdCByZ2IgPSBkYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCB0cnVlKTsKICAgICAgb2Zmc2V0ICs9IDQ7CiAgICAgIHN0b3BzLnB1c2goW3AsIGAjJHtyZ2IudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDYsICIwIil9YF0pOwogICAgfQogICAgbGV0IGJib3ggPSBudWxsOwogICAgaWYgKGhhc0JCb3gpIHsKICAgICAgYmJveCA9IFtdOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgIGJib3gucHVzaChkYXRhVmlldy5nZXRGbG9hdDMyKG9mZnNldCwgdHJ1ZSkpOwogICAgICAgIG9mZnNldCArPSA0OwogICAgICB9CiAgICB9CiAgICBsZXQgYmFja2dyb3VuZCA9IG51bGw7CiAgICBpZiAoaGFzQmFja2dyb3VuZCkgewogICAgICBiYWNrZ3JvdW5kID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsIG9mZnNldCwgMyk7CiAgICAgIG9mZnNldCArPSAzOwogICAgfQogICAgY29uc3QgZmlndXJlcyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuRmlndXJlczsgKytpKSB7CiAgICAgIGNvbnN0IHR5cGUgPSBkYXRhVmlldy5nZXRVaW50OChvZmZzZXQpOwogICAgICBvZmZzZXQgKz0gMTsKICAgICAgb2Zmc2V0ID0gTWF0aC5jZWlsKG9mZnNldCAvIDQpICogNDsKICAgICAgY29uc3QgY29vcmRzTGVuZ3RoID0gZGF0YVZpZXcuZ2V0VWludDMyKG9mZnNldCwgdHJ1ZSk7CiAgICAgIG9mZnNldCArPSA0OwogICAgICBjb25zdCBmaWd1cmVDb29yZHMgPSBuZXcgSW50MzJBcnJheSh0aGlzLmJ1ZmZlciwgb2Zmc2V0LCBjb29yZHNMZW5ndGgpOwogICAgICBvZmZzZXQgKz0gY29vcmRzTGVuZ3RoICogNDsKICAgICAgY29uc3QgY29sb3JzTGVuZ3RoID0gZGF0YVZpZXcuZ2V0VWludDMyKG9mZnNldCwgdHJ1ZSk7CiAgICAgIG9mZnNldCArPSA0OwogICAgICBjb25zdCBmaWd1cmVDb2xvcnMgPSBuZXcgSW50MzJBcnJheSh0aGlzLmJ1ZmZlciwgb2Zmc2V0LCBjb2xvcnNMZW5ndGgpOwogICAgICBvZmZzZXQgKz0gY29sb3JzTGVuZ3RoICogNDsKICAgICAgY29uc3QgZmlndXJlID0gewogICAgICAgIHR5cGUsCiAgICAgICAgY29vcmRzOiBmaWd1cmVDb29yZHMsCiAgICAgICAgY29sb3JzOiBmaWd1cmVDb2xvcnMKICAgICAgfTsKICAgICAgaWYgKHR5cGUgPT09IE1lc2hGaWd1cmVUeXBlLkxBVFRJQ0UpIHsKICAgICAgICBmaWd1cmUudmVydGljZXNQZXJSb3cgPSBkYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCB0cnVlKTsKICAgICAgICBvZmZzZXQgKz0gNDsKICAgICAgfQogICAgICBmaWd1cmVzLnB1c2goZmlndXJlKTsKICAgIH0KICAgIGlmIChraW5kID09PSAxKSB7CiAgICAgIHJldHVybiBbIlJhZGlhbEF4aWFsIiwgImF4aWFsIiwgYmJveCwgc3RvcHMsIEFycmF5LmZyb20oY29vcmRzLnNsaWNlKDAsIDIpKSwgQXJyYXkuZnJvbShjb29yZHMuc2xpY2UoMiwgNCkpLCBudWxsLCBudWxsXTsKICAgIH0KICAgIGlmIChraW5kID09PSAyKSB7CiAgICAgIHJldHVybiBbIlJhZGlhbEF4aWFsIiwgInJhZGlhbCIsIGJib3gsIHN0b3BzLCBbY29vcmRzWzBdLCBjb29yZHNbMV1dLCBbY29vcmRzWzNdLCBjb29yZHNbNF1dLCBjb29yZHNbMl0sIGNvb3Jkc1s1XV07CiAgICB9CiAgICBpZiAoa2luZCA9PT0gMykgewogICAgICBjb25zdCBzaGFkaW5nVHlwZSA9IHRoaXMuZGF0YVtQYXR0ZXJuSW5mby4jU0hBRElOR19UWVBFXTsKICAgICAgbGV0IGJvdW5kcyA9IG51bGw7CiAgICAgIGlmIChjb29yZHMubGVuZ3RoID4gMCkgewogICAgICAgIGxldCBtaW5YID0gY29vcmRzWzBdLAogICAgICAgICAgbWF4WCA9IGNvb3Jkc1swXTsKICAgICAgICBsZXQgbWluWSA9IGNvb3Jkc1sxXSwKICAgICAgICAgIG1heFkgPSBjb29yZHNbMV07CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgIGNvbnN0IHggPSBjb29yZHNbaV0sCiAgICAgICAgICAgIHkgPSBjb29yZHNbaSArIDFdOwogICAgICAgICAgbWluWCA9IG1pblggPiB4ID8geCA6IG1pblg7CiAgICAgICAgICBtaW5ZID0gbWluWSA+IHkgPyB5IDogbWluWTsKICAgICAgICAgIG1heFggPSBtYXhYIDwgeCA/IHggOiBtYXhYOwogICAgICAgICAgbWF4WSA9IG1heFkgPCB5ID8geSA6IG1heFk7CiAgICAgICAgfQogICAgICAgIGJvdW5kcyA9IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXTsKICAgICAgfQogICAgICByZXR1cm4gWyJNZXNoIiwgc2hhZGluZ1R5cGUsIGNvb3JkcywgY29sb3JzLCBmaWd1cmVzLCBib3VuZHMsIGJib3gsIGJhY2tncm91bmRdOwogICAgfQogICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBwYXR0ZXJuIGtpbmQ6ICR7a2luZH1gKTsKICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L2FwaV91dGlscy5qcwoKZnVuY3Rpb24gZ2V0VXJsUHJvcCh2YWwpIHsKICBpZiAodmFsIGluc3RhbmNlb2YgVVJMKSB7CiAgICByZXR1cm4gdmFsLmhyZWY7CiAgfQogIGlmICh0eXBlb2YgdmFsID09PSAic3RyaW5nIikgewogICAgaWYgKGlzTm9kZUpTKSB7CiAgICAgIHJldHVybiB2YWw7CiAgICB9CiAgICBjb25zdCB1cmwgPSBVUkwucGFyc2UodmFsLCB3aW5kb3cubG9jYXRpb24pOwogICAgaWYgKHVybCkgewogICAgICByZXR1cm4gdXJsLmhyZWY7CiAgICB9CiAgfQogIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBQREYgdXJsIGRhdGE6ICIgKyAiZWl0aGVyIHN0cmluZyBvciBVUkwtb2JqZWN0IGlzIGV4cGVjdGVkIGluIHRoZSB1cmwgcHJvcGVydHkuIik7Cn0KZnVuY3Rpb24gZ2V0RGF0YVByb3AodmFsKSB7CiAgaWYgKGlzTm9kZUpTICYmIHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiICYmIHZhbCBpbnN0YW5jZW9mIEJ1ZmZlcikgewogICAgdGhyb3cgbmV3IEVycm9yKCJQbGVhc2UgcHJvdmlkZSBiaW5hcnkgZGF0YSBhcyBgVWludDhBcnJheWAsIHJhdGhlciB0aGFuIGBCdWZmZXJgLiIpOwogIH0KICBpZiAodmFsIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiB2YWwuYnl0ZUxlbmd0aCA9PT0gdmFsLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7CiAgICByZXR1cm4gdmFsOwogIH0KICBpZiAodHlwZW9mIHZhbCA9PT0gInN0cmluZyIpIHsKICAgIHJldHVybiBzdHJpbmdUb0J5dGVzKHZhbCk7CiAgfQogIGlmICh2YWwgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKSB8fCB0eXBlb2YgdmFsID09PSAib2JqZWN0IiAmJiAhaXNOYU4odmFsPy5sZW5ndGgpKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodmFsKTsKICB9CiAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFBERiBiaW5hcnkgZGF0YTogZWl0aGVyIFR5cGVkQXJyYXksICIgKyAic3RyaW5nLCBvciBhcnJheS1saWtlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0aGUgZGF0YSBwcm9wZXJ0eS4iKTsKfQpmdW5jdGlvbiBnZXRGYWN0b3J5VXJsUHJvcCh2YWwpIHsKICBpZiAodHlwZW9mIHZhbCAhPT0gInN0cmluZyIpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBpZiAodmFsLmVuZHNXaXRoKCIvIikpIHsKICAgIHJldHVybiB2YWw7CiAgfQogIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmYWN0b3J5IHVybDogIiR7dmFsfSIgbXVzdCBpbmNsdWRlIHRyYWlsaW5nIHNsYXNoLmApOwp9CmNvbnN0IGlzUmVmUHJveHkgPSB2ID0+IHR5cGVvZiB2ID09PSAib2JqZWN0IiAmJiBOdW1iZXIuaXNJbnRlZ2VyKHY/Lm51bSkgJiYgdi5udW0gPj0gMCAmJiBOdW1iZXIuaXNJbnRlZ2VyKHY/LmdlbikgJiYgdi5nZW4gPj0gMDsKY29uc3QgaXNOYW1lUHJveHkgPSB2ID0+IHR5cGVvZiB2ID09PSAib2JqZWN0IiAmJiB0eXBlb2Ygdj8ubmFtZSA9PT0gInN0cmluZyI7CmNvbnN0IGlzVmFsaWRFeHBsaWNpdERlc3QgPSBfaXNWYWxpZEV4cGxpY2l0RGVzdC5iaW5kKG51bGwsIGlzUmVmUHJveHksIGlzTmFtZVByb3h5KTsKY2xhc3MgTG9vcGJhY2tQb3J0IHsKICAjbGlzdGVuZXJzID0gbmV3IE1hcCgpOwogICNkZWZlcnJlZCA9IFByb21pc2UucmVzb2x2ZSgpOwogIHBvc3RNZXNzYWdlKG9iaiwgdHJhbnNmZXIpIHsKICAgIGNvbnN0IGV2ZW50ID0gewogICAgICBkYXRhOiBzdHJ1Y3R1cmVkQ2xvbmUob2JqLCB0cmFuc2ZlciA/IHsKICAgICAgICB0cmFuc2ZlcgogICAgICB9IDogbnVsbCkKICAgIH07CiAgICB0aGlzLiNkZWZlcnJlZC50aGVuKCgpID0+IHsKICAgICAgZm9yIChjb25zdCBbbGlzdGVuZXJdIG9mIHRoaXMuI2xpc3RlbmVycykgewogICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpOwogICAgICB9CiAgICB9KTsKICB9CiAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lciwgb3B0aW9ucyA9IG51bGwpIHsKICAgIGxldCBybUFib3J0ID0gbnVsbDsKICAgIGlmIChvcHRpb25zPy5zaWduYWwgaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCkgewogICAgICBjb25zdCB7CiAgICAgICAgc2lnbmFsCiAgICAgIH0gPSBvcHRpb25zOwogICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICB3YXJuKCJMb29wYmFja1BvcnQgLSBjYW5ub3QgdXNlIGFuIGBhYm9ydGVkYCBzaWduYWwuIik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIpOwogICAgICBybUFib3J0ID0gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iiwgb25BYm9ydCk7CiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsIG9uQWJvcnQpOwogICAgfQogICAgdGhpcy4jbGlzdGVuZXJzLnNldChsaXN0ZW5lciwgcm1BYm9ydCk7CiAgfQogIHJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIpIHsKICAgIGNvbnN0IHJtQWJvcnQgPSB0aGlzLiNsaXN0ZW5lcnMuZ2V0KGxpc3RlbmVyKTsKICAgIHJtQWJvcnQ/LigpOwogICAgdGhpcy4jbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7CiAgfQogIHRlcm1pbmF0ZSgpIHsKICAgIGZvciAoY29uc3QgWywgcm1BYm9ydF0gb2YgdGhpcy4jbGlzdGVuZXJzKSB7CiAgICAgIHJtQWJvcnQ/LigpOwogICAgfQogICAgdGhpcy4jbGlzdGVuZXJzLmNsZWFyKCk7CiAgfQp9Cgo7Ly8gLi9zcmMvc2hhcmVkL21lc3NhZ2VfaGFuZGxlci5qcwoKY29uc3QgQ2FsbGJhY2tLaW5kID0gewogIERBVEE6IDEsCiAgRVJST1I6IDIKfTsKY29uc3QgU3RyZWFtS2luZCA9IHsKICBDQU5DRUw6IDEsCiAgQ0FOQ0VMX0NPTVBMRVRFOiAyLAogIENMT1NFOiAzLAogIEVOUVVFVUU6IDQsCiAgRVJST1I6IDUsCiAgUFVMTDogNiwKICBQVUxMX0NPTVBMRVRFOiA3LAogIFNUQVJUX0NPTVBMRVRFOiA4Cn07CmZ1bmN0aW9uIG9uRm4oKSB7fQpmdW5jdGlvbiB3cmFwUmVhc29uKGV4KSB7CiAgaWYgKGV4IGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24gfHwgZXggaW5zdGFuY2VvZiBJbnZhbGlkUERGRXhjZXB0aW9uIHx8IGV4IGluc3RhbmNlb2YgUGFzc3dvcmRFeGNlcHRpb24gfHwgZXggaW5zdGFuY2VvZiBSZXNwb25zZUV4Y2VwdGlvbiB8fCBleCBpbnN0YW5jZW9mIFVua25vd25FcnJvckV4Y2VwdGlvbikgewogICAgcmV0dXJuIGV4OwogIH0KICBpZiAoIShleCBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiBleCA9PT0gIm9iamVjdCIgJiYgZXggIT09IG51bGwpKSB7CiAgICB1bnJlYWNoYWJsZSgnd3JhcFJlYXNvbjogRXhwZWN0ZWQgInJlYXNvbiIgdG8gYmUgYSAocG9zc2libHkgY2xvbmVkKSBFcnJvci4nKTsKICB9CiAgc3dpdGNoIChleC5uYW1lKSB7CiAgICBjYXNlICJBYm9ydEV4Y2VwdGlvbiI6CiAgICAgIHJldHVybiBuZXcgQWJvcnRFeGNlcHRpb24oZXgubWVzc2FnZSk7CiAgICBjYXNlICJJbnZhbGlkUERGRXhjZXB0aW9uIjoKICAgICAgcmV0dXJuIG5ldyBJbnZhbGlkUERGRXhjZXB0aW9uKGV4Lm1lc3NhZ2UpOwogICAgY2FzZSAiUGFzc3dvcmRFeGNlcHRpb24iOgogICAgICByZXR1cm4gbmV3IFBhc3N3b3JkRXhjZXB0aW9uKGV4Lm1lc3NhZ2UsIGV4LmNvZGUpOwogICAgY2FzZSAiUmVzcG9uc2VFeGNlcHRpb24iOgogICAgICByZXR1cm4gbmV3IFJlc3BvbnNlRXhjZXB0aW9uKGV4Lm1lc3NhZ2UsIGV4LnN0YXR1cywgZXgubWlzc2luZyk7CiAgICBjYXNlICJVbmtub3duRXJyb3JFeGNlcHRpb24iOgogICAgICByZXR1cm4gbmV3IFVua25vd25FcnJvckV4Y2VwdGlvbihleC5tZXNzYWdlLCBleC5kZXRhaWxzKTsKICB9CiAgcmV0dXJuIG5ldyBVbmtub3duRXJyb3JFeGNlcHRpb24oZXgubWVzc2FnZSwgZXgudG9TdHJpbmcoKSk7Cn0KY2xhc3MgTWVzc2FnZUhhbmRsZXIgewogICNtZXNzYWdlQUMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgY29uc3RydWN0b3Ioc291cmNlTmFtZSwgdGFyZ2V0TmFtZSwgY29tT2JqKSB7CiAgICB0aGlzLnNvdXJjZU5hbWUgPSBzb3VyY2VOYW1lOwogICAgdGhpcy50YXJnZXROYW1lID0gdGFyZ2V0TmFtZTsKICAgIHRoaXMuY29tT2JqID0gY29tT2JqOwogICAgdGhpcy5jYWxsYmFja0lkID0gMTsKICAgIHRoaXMuc3RyZWFtSWQgPSAxOwogICAgdGhpcy5zdHJlYW1TaW5rcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgdGhpcy5hY3Rpb25IYW5kbGVyID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGNvbU9iai5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgdGhpcy4jb25NZXNzYWdlLmJpbmQodGhpcyksIHsKICAgICAgc2lnbmFsOiB0aGlzLiNtZXNzYWdlQUMuc2lnbmFsCiAgICB9KTsKICB9CiAgI29uTWVzc2FnZSh7CiAgICBkYXRhCiAgfSkgewogICAgaWYgKGRhdGEudGFyZ2V0TmFtZSAhPT0gdGhpcy5zb3VyY2VOYW1lKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChkYXRhLnN0cmVhbSkgewogICAgICB0aGlzLiNwcm9jZXNzU3RyZWFtTWVzc2FnZShkYXRhKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGRhdGEuY2FsbGJhY2spIHsKICAgICAgY29uc3QgY2FsbGJhY2tJZCA9IGRhdGEuY2FsbGJhY2tJZDsKICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF07CiAgICAgIGlmICghY2FwYWJpbGl0eSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgY2FsbGJhY2sgJHtjYWxsYmFja0lkfWApOwogICAgICB9CiAgICAgIGRlbGV0ZSB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2NhbGxiYWNrSWRdOwogICAgICBpZiAoZGF0YS5jYWxsYmFjayA9PT0gQ2FsbGJhY2tLaW5kLkRBVEEpIHsKICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoZGF0YS5kYXRhKTsKICAgICAgfSBlbHNlIGlmIChkYXRhLmNhbGxiYWNrID09PSBDYWxsYmFja0tpbmQuRVJST1IpIHsKICAgICAgICBjYXBhYmlsaXR5LnJlamVjdCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNhbGxiYWNrIGNhc2UiKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbkhhbmRsZXJbZGF0YS5hY3Rpb25dOwogICAgaWYgKCFhY3Rpb24pIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogJHtkYXRhLmFjdGlvbn1gKTsKICAgIH0KICAgIGlmIChkYXRhLmNhbGxiYWNrSWQpIHsKICAgICAgY29uc3Qgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSwKICAgICAgICB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lLAogICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqOwogICAgICBQcm9taXNlLnRyeShhY3Rpb24sIGRhdGEuZGF0YSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHsKICAgICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgICB0YXJnZXROYW1lLAogICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrS2luZC5EQVRBLAogICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLAogICAgICAgICAgZGF0YTogcmVzdWx0CiAgICAgICAgfSk7CiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICBjYWxsYmFjazogQ2FsbGJhY2tLaW5kLkVSUk9SLAogICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLAogICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbikKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChkYXRhLnN0cmVhbUlkKSB7CiAgICAgIHRoaXMuI2NyZWF0ZVN0cmVhbVNpbmsoZGF0YSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGFjdGlvbihkYXRhLmRhdGEpOwogIH0KICBvbihhY3Rpb25OYW1lLCBoYW5kbGVyKSB7CiAgICBjb25zdCBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlcjsKICAgIGlmIChhaFthY3Rpb25OYW1lXSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIiR7YWN0aW9uTmFtZX0iYCk7CiAgICB9CiAgICBhaFthY3Rpb25OYW1lXSA9IGhhbmRsZXI7CiAgfQogIHNlbmQoYWN0aW9uTmFtZSwgZGF0YSwgdHJhbnNmZXJzKSB7CiAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7CiAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSwKICAgICAgdGFyZ2V0TmFtZTogdGhpcy50YXJnZXROYW1lLAogICAgICBhY3Rpb246IGFjdGlvbk5hbWUsCiAgICAgIGRhdGEKICAgIH0sIHRyYW5zZmVycyk7CiAgfQogIHNlbmRXaXRoUHJvbWlzZShhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHsKICAgIGNvbnN0IGNhbGxiYWNrSWQgPSB0aGlzLmNhbGxiYWNrSWQrKzsKICAgIGNvbnN0IGNhcGFiaWxpdHkgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTsKICAgIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF0gPSBjYXBhYmlsaXR5OwogICAgdHJ5IHsKICAgICAgdGhpcy5jb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSwKICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsCiAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLAogICAgICAgIGNhbGxiYWNrSWQsCiAgICAgICAgZGF0YQogICAgICB9LCB0cmFuc2ZlcnMpOwogICAgfSBjYXRjaCAoZXgpIHsKICAgICAgY2FwYWJpbGl0eS5yZWplY3QoZXgpOwogICAgfQogICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTsKICB9CiAgc2VuZFdpdGhTdHJlYW0oYWN0aW9uTmFtZSwgZGF0YSwgcXVldWVpbmdTdHJhdGVneSwgdHJhbnNmZXJzKSB7CiAgICBjb25zdCBzdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQrKywKICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSwKICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMudGFyZ2V0TmFtZSwKICAgICAgY29tT2JqID0gdGhpcy5jb21PYmo7CiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHsKICAgICAgc3RhcnQ6IGNvbnRyb2xsZXIgPT4gewogICAgICAgIGNvbnN0IHN0YXJ0Q2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdID0gewogICAgICAgICAgY29udHJvbGxlciwKICAgICAgICAgIHN0YXJ0Q2FsbDogc3RhcnRDYXBhYmlsaXR5LAogICAgICAgICAgcHVsbENhbGw6IG51bGwsCiAgICAgICAgICBjYW5jZWxDYWxsOiBudWxsLAogICAgICAgICAgaXNDbG9zZWQ6IGZhbHNlCiAgICAgICAgfTsKICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICBhY3Rpb246IGFjdGlvbk5hbWUsCiAgICAgICAgICBzdHJlYW1JZCwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICBkZXNpcmVkU2l6ZTogY29udHJvbGxlci5kZXNpcmVkU2l6ZQogICAgICAgIH0sIHRyYW5zZmVycyk7CiAgICAgICAgcmV0dXJuIHN0YXJ0Q2FwYWJpbGl0eS5wcm9taXNlOwogICAgICB9LAogICAgICBwdWxsOiBjb250cm9sbGVyID0+IHsKICAgICAgICBjb25zdCBwdWxsQ2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnB1bGxDYWxsID0gcHVsbENhcGFiaWxpdHk7CiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHsKICAgICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgICB0YXJnZXROYW1lLAogICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTEwsCiAgICAgICAgICBzdHJlYW1JZCwKICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHB1bGxDYXBhYmlsaXR5LnByb21pc2U7CiAgICAgIH0sCiAgICAgIGNhbmNlbDogcmVhc29uID0+IHsKICAgICAgICBhc3NlcnQocmVhc29uIGluc3RhbmNlb2YgRXJyb3IsICJjYW5jZWwgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIik7CiAgICAgICAgY29uc3QgY2FuY2VsQ2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwgPSBjYW5jZWxDYXBhYmlsaXR5OwogICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTsKICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMLAogICAgICAgICAgc3RyZWFtSWQsCiAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBjYW5jZWxDYXBhYmlsaXR5LnByb21pc2U7CiAgICAgIH0KICAgIH0sIHF1ZXVlaW5nU3RyYXRlZ3kpOwogIH0KICAjY3JlYXRlU3RyZWFtU2luayhkYXRhKSB7CiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsCiAgICAgIHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWUsCiAgICAgIHRhcmdldE5hbWUgPSBkYXRhLnNvdXJjZU5hbWUsCiAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqOwogICAgY29uc3Qgc2VsZiA9IHRoaXMsCiAgICAgIGFjdGlvbiA9IHRoaXMuYWN0aW9uSGFuZGxlcltkYXRhLmFjdGlvbl07CiAgICBjb25zdCBzdHJlYW1TaW5rID0gewogICAgICBlbnF1ZXVlKGNodW5rLCBzaXplID0gMSwgdHJhbnNmZXJzKSB7CiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGFzdERlc2lyZWRTaXplID0gdGhpcy5kZXNpcmVkU2l6ZTsKICAgICAgICB0aGlzLmRlc2lyZWRTaXplIC09IHNpemU7CiAgICAgICAgaWYgKGxhc3REZXNpcmVkU2l6ZSA+IDAgJiYgdGhpcy5kZXNpcmVkU2l6ZSA8PSAwKSB7CiAgICAgICAgICB0aGlzLnNpbmtDYXBhYmlsaXR5ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgICAgICAgICB0aGlzLnJlYWR5ID0gdGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlOwogICAgICAgIH0KICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuRU5RVUVVRSwKICAgICAgICAgIHN0cmVhbUlkLAogICAgICAgICAgY2h1bmsKICAgICAgICB9LCB0cmFuc2ZlcnMpOwogICAgICB9LAogICAgICBjbG9zZSgpIHsKICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLmlzQ2FuY2VsbGVkID0gdHJ1ZTsKICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0xPU0UsCiAgICAgICAgICBzdHJlYW1JZAogICAgICAgIH0pOwogICAgICAgIGRlbGV0ZSBzZWxmLnN0cmVhbVNpbmtzW3N0cmVhbUlkXTsKICAgICAgfSwKICAgICAgZXJyb3IocmVhc29uKSB7CiAgICAgICAgYXNzZXJ0KHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yLCAiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIik7CiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7CiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHsKICAgICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgICB0YXJnZXROYW1lLAogICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVSUk9SLAogICAgICAgICAgc3RyZWFtSWQsCiAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKQogICAgICAgIH0pOwogICAgICB9LAogICAgICBzaW5rQ2FwYWJpbGl0eTogUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCksCiAgICAgIG9uUHVsbDogbnVsbCwKICAgICAgb25DYW5jZWw6IG51bGwsCiAgICAgIGlzQ2FuY2VsbGVkOiBmYWxzZSwKICAgICAgZGVzaXJlZFNpemU6IGRhdGEuZGVzaXJlZFNpemUsCiAgICAgIHJlYWR5OiBudWxsCiAgICB9OwogICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCk7CiAgICBzdHJlYW1TaW5rLnJlYWR5ID0gc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlOwogICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0gPSBzdHJlYW1TaW5rOwogICAgUHJvbWlzZS50cnkoYWN0aW9uLCBkYXRhLmRhdGEsIHN0cmVhbVNpbmspLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgdGFyZ2V0TmFtZSwKICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuU1RBUlRfQ09NUExFVEUsCiAgICAgICAgc3RyZWFtSWQsCiAgICAgICAgc3VjY2VzczogdHJ1ZQogICAgICB9KTsKICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHsKICAgICAgICBzb3VyY2VOYW1lLAogICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLAogICAgICAgIHN0cmVhbUlkLAogICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pCiAgICAgIH0pOwogICAgfSk7CiAgfQogICNwcm9jZXNzU3RyZWFtTWVzc2FnZShkYXRhKSB7CiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsCiAgICAgIHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWUsCiAgICAgIHRhcmdldE5hbWUgPSBkYXRhLnNvdXJjZU5hbWUsCiAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqOwogICAgY29uc3Qgc3RyZWFtQ29udHJvbGxlciA9IHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLAogICAgICBzdHJlYW1TaW5rID0gdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF07CiAgICBzd2l0Y2ggKGRhdGEuc3RyZWFtKSB7CiAgICAgIGNhc2UgU3RyZWFtS2luZC5TVEFSVF9DT01QTEVURToKICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7CiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLnN0YXJ0Q2FsbC5yZXNvbHZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuc3RhcnRDYWxsLnJlamVjdCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURToKICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7CiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLnB1bGxDYWxsLnJlc29sdmUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RyZWFtQ29udHJvbGxlci5wdWxsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdHJlYW1LaW5kLlBVTEw6CiAgICAgICAgaWYgKCFzdHJlYW1TaW5rKSB7CiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgICBzb3VyY2VOYW1lLAogICAgICAgICAgICB0YXJnZXROYW1lLAogICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURSwKICAgICAgICAgICAgc3RyZWFtSWQsCiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW1TaW5rLmRlc2lyZWRTaXplIDw9IDAgJiYgZGF0YS5kZXNpcmVkU2l6ZSA+IDApIHsKICAgICAgICAgIHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpOwogICAgICAgIH0KICAgICAgICBzdHJlYW1TaW5rLmRlc2lyZWRTaXplID0gZGF0YS5kZXNpcmVkU2l6ZTsKICAgICAgICBQcm9taXNlLnRyeShzdHJlYW1TaW5rLm9uUHVsbCB8fCBvbkZuKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7CiAgICAgICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMX0NPTVBMRVRFLAogICAgICAgICAgICBzdHJlYW1JZCwKICAgICAgICAgICAgc3VjY2VzczogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgewogICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgc291cmNlTmFtZSwKICAgICAgICAgICAgdGFyZ2V0TmFtZSwKICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsCiAgICAgICAgICAgIHN0cmVhbUlkLAogICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RyZWFtS2luZC5FTlFVRVVFOgogICAgICAgIGFzc2VydChzdHJlYW1Db250cm9sbGVyLCAiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpOwogICAgICAgIGlmIChzdHJlYW1Db250cm9sbGVyLmlzQ2xvc2VkKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc3RyZWFtQ29udHJvbGxlci5jb250cm9sbGVyLmVucXVldWUoZGF0YS5jaHVuayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RyZWFtS2luZC5DTE9TRToKICAgICAgICBhc3NlcnQoc3RyZWFtQ29udHJvbGxlciwgImNsb3NlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIik7CiAgICAgICAgaWYgKHN0cmVhbUNvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzdHJlYW1Db250cm9sbGVyLmlzQ2xvc2VkID0gdHJ1ZTsKICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgICB0aGlzLiNkZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUNvbnRyb2xsZXIsIHN0cmVhbUlkKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdHJlYW1LaW5kLkVSUk9SOgogICAgICAgIGFzc2VydChzdHJlYW1Db250cm9sbGVyLCAiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTsKICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3Iod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpOwogICAgICAgIHRoaXMuI2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtQ29udHJvbGxlciwgc3RyZWFtSWQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFOgogICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHsKICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbC5yZXNvbHZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpOwogICAgICAgIH0KICAgICAgICB0aGlzLiNkZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUNvbnRyb2xsZXIsIHN0cmVhbUlkKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdHJlYW1LaW5kLkNBTkNFTDoKICAgICAgICBpZiAoIXN0cmVhbVNpbmspIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjb25zdCBkYXRhUmVhc29uID0gd3JhcFJlYXNvbihkYXRhLnJlYXNvbik7CiAgICAgICAgUHJvbWlzZS50cnkoc3RyZWFtU2luay5vbkNhbmNlbCB8fCBvbkZuLCBkYXRhUmVhc29uKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7CiAgICAgICAgICAgIHNvdXJjZU5hbWUsCiAgICAgICAgICAgIHRhcmdldE5hbWUsCiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5DQU5DRUxfQ09NUExFVEUsCiAgICAgICAgICAgIHN0cmVhbUlkLAogICAgICAgICAgICBzdWNjZXNzOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2UoewogICAgICAgICAgICBzb3VyY2VOYW1lLAogICAgICAgICAgICB0YXJnZXROYW1lLAogICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLAogICAgICAgICAgICBzdHJlYW1JZCwKICAgICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbikKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucmVqZWN0KGRhdGFSZWFzb24pOwogICAgICAgIHN0cmVhbVNpbmsuaXNDYW5jZWxsZWQgPSB0cnVlOwogICAgICAgIGRlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKTsKICAgIH0KICB9CiAgYXN5bmMgI2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtQ29udHJvbGxlciwgc3RyZWFtSWQpIHsKICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGw/LnByb21pc2UsIHN0cmVhbUNvbnRyb2xsZXIucHVsbENhbGw/LnByb21pc2UsIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbD8ucHJvbWlzZV0pOwogICAgZGVsZXRlIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdOwogIH0KICBkZXN0cm95KCkgewogICAgdGhpcy4jbWVzc2FnZUFDPy5hYm9ydCgpOwogICAgdGhpcy4jbWVzc2FnZUFDID0gbnVsbDsKICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L2NhbnZhc19mYWN0b3J5LmpzCgpjbGFzcyBCYXNlQ2FudmFzRmFjdG9yeSB7CiAgI2VuYWJsZUhXQSA9IGZhbHNlOwogIGNvbnN0cnVjdG9yKHsKICAgIGVuYWJsZUhXQSA9IGZhbHNlCiAgfSkgewogICAgdGhpcy4jZW5hYmxlSFdBID0gZW5hYmxlSFdBOwogIH0KICBjcmVhdGUod2lkdGgsIGhlaWdodCkgewogICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNhbnZhcyBzaXplIik7CiAgICB9CiAgICBjb25zdCBjYW52YXMgPSB0aGlzLl9jcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCk7CiAgICByZXR1cm4gewogICAgICBjYW52YXMsCiAgICAgIGNvbnRleHQ6IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIsIHsKICAgICAgICB3aWxsUmVhZEZyZXF1ZW50bHk6ICF0aGlzLiNlbmFibGVIV0EKICAgICAgfSkKICAgIH07CiAgfQogIHJlc2V0KGNhbnZhc0FuZENvbnRleHQsIHdpZHRoLCBoZWlnaHQpIHsKICAgIGlmICghY2FudmFzQW5kQ29udGV4dC5jYW52YXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW52YXMgaXMgbm90IHNwZWNpZmllZCIpOwogICAgfQogICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNhbnZhcyBzaXplIik7CiAgICB9CiAgICBjYW52YXNBbmRDb250ZXh0LmNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwogIH0KICBkZXN0cm95KGNhbnZhc0FuZENvbnRleHQpIHsKICAgIGlmICghY2FudmFzQW5kQ29udGV4dC5jYW52YXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW52YXMgaXMgbm90IHNwZWNpZmllZCIpOwogICAgfQogICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMud2lkdGggPSAwOwogICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMuaGVpZ2h0ID0gMDsKICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzID0gbnVsbDsKICAgIGNhbnZhc0FuZENvbnRleHQuY29udGV4dCA9IG51bGw7CiAgfQogIF9jcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgX2NyZWF0ZUNhbnZhc2AgY2FsbGVkLiIpOwogIH0KfQpjbGFzcyBET01DYW52YXNGYWN0b3J5IGV4dGVuZHMgQmFzZUNhbnZhc0ZhY3RvcnkgewogIGNvbnN0cnVjdG9yKHsKICAgIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50LAogICAgZW5hYmxlSFdBID0gZmFsc2UKICB9KSB7CiAgICBzdXBlcih7CiAgICAgIGVuYWJsZUhXQQogICAgfSk7CiAgICB0aGlzLl9kb2N1bWVudCA9IG93bmVyRG9jdW1lbnQ7CiAgfQogIF9jcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCkgewogICAgY29uc3QgY2FudmFzID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICBjYW52YXMud2lkdGggPSB3aWR0aDsKICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7CiAgICByZXR1cm4gY2FudmFzOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvY21hcF9yZWFkZXJfZmFjdG9yeS5qcwoKCmNsYXNzIEJhc2VDTWFwUmVhZGVyRmFjdG9yeSB7CiAgY29uc3RydWN0b3IoewogICAgYmFzZVVybCA9IG51bGwsCiAgICBpc0NvbXByZXNzZWQgPSB0cnVlCiAgfSkgewogICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDsKICAgIHRoaXMuaXNDb21wcmVzc2VkID0gaXNDb21wcmVzc2VkOwogIH0KICBhc3luYyBmZXRjaCh7CiAgICBuYW1lCiAgfSkgewogICAgaWYgKCF0aGlzLmJhc2VVcmwpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJFbnN1cmUgdGhhdCB0aGUgYGNNYXBVcmxgIGFuZCBgY01hcFBhY2tlZGAgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLiIpOwogICAgfQogICAgaWYgKCFuYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQ01hcCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLiIpOwogICAgfQogICAgY29uc3QgdXJsID0gdGhpcy5iYXNlVXJsICsgbmFtZSArICh0aGlzLmlzQ29tcHJlc3NlZCA/ICIuYmNtYXAiIDogIiIpOwogICAgcmV0dXJuIHRoaXMuX2ZldGNoKHVybCkudGhlbihjTWFwRGF0YSA9PiAoewogICAgICBjTWFwRGF0YSwKICAgICAgaXNDb21wcmVzc2VkOiB0aGlzLmlzQ29tcHJlc3NlZAogICAgfSkpLmNhdGNoKHJlYXNvbiA9PiB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgJHt0aGlzLmlzQ29tcHJlc3NlZCA/ICJiaW5hcnkgIiA6ICIifUNNYXAgYXQ6ICR7dXJsfWApOwogICAgfSk7CiAgfQogIGFzeW5jIF9mZXRjaCh1cmwpIHsKICAgIHVucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYF9mZXRjaGAgY2FsbGVkLiIpOwogIH0KfQpjbGFzcyBET01DTWFwUmVhZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VDTWFwUmVhZGVyRmFjdG9yeSB7CiAgYXN5bmMgX2ZldGNoKHVybCkgewogICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoRGF0YSh1cmwsIHRoaXMuaXNDb21wcmVzc2VkID8gImFycmF5YnVmZmVyIiA6ICJ0ZXh0Iik7CiAgICByZXR1cm4gZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoZGF0YSkgOiBzdHJpbmdUb0J5dGVzKGRhdGEpOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZmlsdGVyX2ZhY3RvcnkuanMKCgpjbGFzcyBCYXNlRmlsdGVyRmFjdG9yeSB7CiAgYWRkRmlsdGVyKG1hcHMpIHsKICAgIHJldHVybiAibm9uZSI7CiAgfQogIGFkZEhDTUZpbHRlcihmZ0NvbG9yLCBiZ0NvbG9yKSB7CiAgICByZXR1cm4gIm5vbmUiOwogIH0KICBhZGRBbHBoYUZpbHRlcihtYXApIHsKICAgIHJldHVybiAibm9uZSI7CiAgfQogIGFkZEx1bWlub3NpdHlGaWx0ZXIobWFwKSB7CiAgICByZXR1cm4gIm5vbmUiOwogIH0KICBhZGRIaWdobGlnaHRIQ01GaWx0ZXIoZmlsdGVyTmFtZSwgZmdDb2xvciwgYmdDb2xvciwgbmV3RmdDb2xvciwgbmV3QmdDb2xvcikgewogICAgcmV0dXJuICJub25lIjsKICB9CiAgZGVzdHJveShrZWVwSENNID0gZmFsc2UpIHt9Cn0KY2xhc3MgRE9NRmlsdGVyRmFjdG9yeSBleHRlbmRzIEJhc2VGaWx0ZXJGYWN0b3J5IHsKICAjYmFzZVVybDsKICAjX2NhY2hlOwogICNfZGVmczsKICAjZG9jSWQ7CiAgI2RvY3VtZW50OwogICNfaGNtQ2FjaGU7CiAgI2lkID0gMDsKICBjb25zdHJ1Y3Rvcih7CiAgICBkb2NJZCwKICAgIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50CiAgfSkgewogICAgc3VwZXIoKTsKICAgIHRoaXMuI2RvY0lkID0gZG9jSWQ7CiAgICB0aGlzLiNkb2N1bWVudCA9IG93bmVyRG9jdW1lbnQ7CiAgfQogIGdldCAjY2FjaGUoKSB7CiAgICByZXR1cm4gdGhpcy4jX2NhY2hlIHx8PSBuZXcgTWFwKCk7CiAgfQogIGdldCAjaGNtQ2FjaGUoKSB7CiAgICByZXR1cm4gdGhpcy4jX2hjbUNhY2hlIHx8PSBuZXcgTWFwKCk7CiAgfQogIGdldCAjZGVmcygpIHsKICAgIGlmICghdGhpcy4jX2RlZnMpIHsKICAgICAgY29uc3QgZGl2ID0gdGhpcy4jZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGNvbnN0IHsKICAgICAgICBzdHlsZQogICAgICB9ID0gZGl2OwogICAgICBzdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgIHN0eWxlLmNvbnRhaW4gPSAic3RyaWN0IjsKICAgICAgc3R5bGUud2lkdGggPSBzdHlsZS5oZWlnaHQgPSAwOwogICAgICBzdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgIHN0eWxlLnRvcCA9IHN0eWxlLmxlZnQgPSAwOwogICAgICBzdHlsZS56SW5kZXggPSAtMTsKICAgICAgY29uc3Qgc3ZnID0gdGhpcy4jZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgInN2ZyIpOwogICAgICBzdmcuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIDApOwogICAgICBzdmcuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCAwKTsKICAgICAgdGhpcy4jX2RlZnMgPSB0aGlzLiNkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAiZGVmcyIpOwogICAgICBkaXYuYXBwZW5kKHN2Zyk7CiAgICAgIHN2Zy5hcHBlbmQodGhpcy4jX2RlZnMpOwogICAgICB0aGlzLiNkb2N1bWVudC5ib2R5LmFwcGVuZChkaXYpOwogICAgfQogICAgcmV0dXJuIHRoaXMuI19kZWZzOwogIH0KICAjY3JlYXRlVGFibGVzKG1hcHMpIHsKICAgIGlmIChtYXBzLmxlbmd0aCA9PT0gMSkgewogICAgICBjb25zdCBtYXBSID0gbWFwc1swXTsKICAgICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5KDI1Nik7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKICAgICAgICBidWZmZXJbaV0gPSBtYXBSW2ldIC8gMjU1OwogICAgICB9CiAgICAgIGNvbnN0IHRhYmxlID0gYnVmZmVyLmpvaW4oIiwiKTsKICAgICAgcmV0dXJuIFt0YWJsZSwgdGFibGUsIHRhYmxlXTsKICAgIH0KICAgIGNvbnN0IFttYXBSLCBtYXBHLCBtYXBCXSA9IG1hcHM7CiAgICBjb25zdCBidWZmZXJSID0gbmV3IEFycmF5KDI1Nik7CiAgICBjb25zdCBidWZmZXJHID0gbmV3IEFycmF5KDI1Nik7CiAgICBjb25zdCBidWZmZXJCID0gbmV3IEFycmF5KDI1Nik7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAgICAgIGJ1ZmZlclJbaV0gPSBtYXBSW2ldIC8gMjU1OwogICAgICBidWZmZXJHW2ldID0gbWFwR1tpXSAvIDI1NTsKICAgICAgYnVmZmVyQltpXSA9IG1hcEJbaV0gLyAyNTU7CiAgICB9CiAgICByZXR1cm4gW2J1ZmZlclIuam9pbigiLCIpLCBidWZmZXJHLmpvaW4oIiwiKSwgYnVmZmVyQi5qb2luKCIsIildOwogIH0KICAjY3JlYXRlVXJsKGlkKSB7CiAgICBpZiAodGhpcy4jYmFzZVVybCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHRoaXMuI2Jhc2VVcmwgPSAiIjsKICAgICAgY29uc3QgdXJsID0gdGhpcy4jZG9jdW1lbnQuVVJMOwogICAgICBpZiAodXJsICE9PSB0aGlzLiNkb2N1bWVudC5iYXNlVVJJKSB7CiAgICAgICAgaWYgKGlzRGF0YVNjaGVtZSh1cmwpKSB7CiAgICAgICAgICB3YXJuKCcjY3JlYXRlVXJsOiBpZ25vcmUgImRhdGE6Ii1VUkwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuI2Jhc2VVcmwgPSB1cGRhdGVVcmxIYXNoKHVybCwgIiIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGB1cmwoJHt0aGlzLiNiYXNlVXJsfSMke2lkfSlgOwogIH0KICBhZGRGaWx0ZXIobWFwcykgewogICAgaWYgKCFtYXBzKSB7CiAgICAgIHJldHVybiAibm9uZSI7CiAgICB9CiAgICBsZXQgdmFsdWUgPSB0aGlzLiNjYWNoZS5nZXQobWFwcyk7CiAgICBpZiAodmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQogICAgY29uc3QgW3RhYmxlUiwgdGFibGVHLCB0YWJsZUJdID0gdGhpcy4jY3JlYXRlVGFibGVzKG1hcHMpOwogICAgY29uc3Qga2V5ID0gbWFwcy5sZW5ndGggPT09IDEgPyB0YWJsZVIgOiBgJHt0YWJsZVJ9JHt0YWJsZUd9JHt0YWJsZUJ9YDsKICAgIHZhbHVlID0gdGhpcy4jY2FjaGUuZ2V0KGtleSk7CiAgICBpZiAodmFsdWUpIHsKICAgICAgdGhpcy4jY2FjaGUuc2V0KG1hcHMsIHZhbHVlKTsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQogICAgY29uc3QgaWQgPSBgZ18ke3RoaXMuI2RvY0lkfV90cmFuc2Zlcl9tYXBfJHt0aGlzLiNpZCsrfWA7CiAgICBjb25zdCB1cmwgPSB0aGlzLiNjcmVhdGVVcmwoaWQpOwogICAgdGhpcy4jY2FjaGUuc2V0KG1hcHMsIHVybCk7CiAgICB0aGlzLiNjYWNoZS5zZXQoa2V5LCB1cmwpOwogICAgY29uc3QgZmlsdGVyID0gdGhpcy4jY3JlYXRlRmlsdGVyKGlkKTsKICAgIHRoaXMuI2FkZFRyYW5zZmVyTWFwQ29udmVyc2lvbih0YWJsZVIsIHRhYmxlRywgdGFibGVCLCBmaWx0ZXIpOwogICAgcmV0dXJuIHVybDsKICB9CiAgYWRkSENNRmlsdGVyKGZnQ29sb3IsIGJnQ29sb3IpIHsKICAgIGNvbnN0IGtleSA9IGAke2ZnQ29sb3J9LSR7YmdDb2xvcn1gOwogICAgY29uc3QgZmlsdGVyTmFtZSA9ICJiYXNlIjsKICAgIGxldCBpbmZvID0gdGhpcy4jaGNtQ2FjaGUuZ2V0KGZpbHRlck5hbWUpOwogICAgaWYgKGluZm8/LmtleSA9PT0ga2V5KSB7CiAgICAgIHJldHVybiBpbmZvLnVybDsKICAgIH0KICAgIGlmIChpbmZvKSB7CiAgICAgIGluZm8uZmlsdGVyPy5yZW1vdmUoKTsKICAgICAgaW5mby5rZXkgPSBrZXk7CiAgICAgIGluZm8udXJsID0gIm5vbmUiOwogICAgICBpbmZvLmZpbHRlciA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICBpbmZvID0gewogICAgICAgIGtleSwKICAgICAgICB1cmw6ICJub25lIiwKICAgICAgICBmaWx0ZXI6IG51bGwKICAgICAgfTsKICAgICAgdGhpcy4jaGNtQ2FjaGUuc2V0KGZpbHRlck5hbWUsIGluZm8pOwogICAgfQogICAgaWYgKCFmZ0NvbG9yIHx8ICFiZ0NvbG9yKSB7CiAgICAgIHJldHVybiBpbmZvLnVybDsKICAgIH0KICAgIGNvbnN0IGZnUkdCID0gdGhpcy4jZ2V0UkdCKGZnQ29sb3IpOwogICAgZmdDb2xvciA9IFV0aWwubWFrZUhleENvbG9yKC4uLmZnUkdCKTsKICAgIGNvbnN0IGJnUkdCID0gdGhpcy4jZ2V0UkdCKGJnQ29sb3IpOwogICAgYmdDb2xvciA9IFV0aWwubWFrZUhleENvbG9yKC4uLmJnUkdCKTsKICAgIHRoaXMuI2RlZnMuc3R5bGUuY29sb3IgPSAiIjsKICAgIGlmIChmZ0NvbG9yID09PSAiIzAwMDAwMCIgJiYgYmdDb2xvciA9PT0gIiNmZmZmZmYiIHx8IGZnQ29sb3IgPT09IGJnQ29sb3IpIHsKICAgICAgcmV0dXJuIGluZm8udXJsOwogICAgfQogICAgY29uc3QgbWFwID0gbmV3IEFycmF5KDI1Nik7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAyNTU7IGkrKykgewogICAgICBjb25zdCB4ID0gaSAvIDI1NTsKICAgICAgbWFwW2ldID0geCA8PSAwLjAzOTI4ID8geCAvIDEyLjkyIDogKCh4ICsgMC4wNTUpIC8gMS4wNTUpICoqIDIuNDsKICAgIH0KICAgIGNvbnN0IHRhYmxlID0gbWFwLmpvaW4oIiwiKTsKICAgIGNvbnN0IGlkID0gYGdfJHt0aGlzLiNkb2NJZH1faGNtX2ZpbHRlcmA7CiAgICBjb25zdCBmaWx0ZXIgPSBpbmZvLmZpbHRlciA9IHRoaXMuI2NyZWF0ZUZpbHRlcihpZCk7CiAgICB0aGlzLiNhZGRUcmFuc2Zlck1hcENvbnZlcnNpb24odGFibGUsIHRhYmxlLCB0YWJsZSwgZmlsdGVyKTsKICAgIHRoaXMuI2FkZEdyYXlDb252ZXJzaW9uKGZpbHRlcik7CiAgICBjb25zdCBnZXRTdGVwcyA9IChjLCBuKSA9PiB7CiAgICAgIGNvbnN0IHN0YXJ0ID0gZmdSR0JbY10gLyAyNTU7CiAgICAgIGNvbnN0IGVuZCA9IGJnUkdCW2NdIC8gMjU1OwogICAgICBjb25zdCBhcnIgPSBuZXcgQXJyYXkobiArIDEpOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBuOyBpKyspIHsKICAgICAgICBhcnJbaV0gPSBzdGFydCArIGkgLyBuICogKGVuZCAtIHN0YXJ0KTsKICAgICAgfQogICAgICByZXR1cm4gYXJyLmpvaW4oIiwiKTsKICAgIH07CiAgICB0aGlzLiNhZGRUcmFuc2Zlck1hcENvbnZlcnNpb24oZ2V0U3RlcHMoMCwgNSksIGdldFN0ZXBzKDEsIDUpLCBnZXRTdGVwcygyLCA1KSwgZmlsdGVyKTsKICAgIGluZm8udXJsID0gdGhpcy4jY3JlYXRlVXJsKGlkKTsKICAgIHJldHVybiBpbmZvLnVybDsKICB9CiAgYWRkQWxwaGFGaWx0ZXIobWFwKSB7CiAgICBsZXQgdmFsdWUgPSB0aGlzLiNjYWNoZS5nZXQobWFwKTsKICAgIGlmICh2YWx1ZSkgewogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CiAgICBjb25zdCBbdGFibGVBXSA9IHRoaXMuI2NyZWF0ZVRhYmxlcyhbbWFwXSk7CiAgICBjb25zdCBrZXkgPSBgYWxwaGFfJHt0YWJsZUF9YDsKICAgIHZhbHVlID0gdGhpcy4jY2FjaGUuZ2V0KGtleSk7CiAgICBpZiAodmFsdWUpIHsKICAgICAgdGhpcy4jY2FjaGUuc2V0KG1hcCwgdmFsdWUpOwogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CiAgICBjb25zdCBpZCA9IGBnXyR7dGhpcy4jZG9jSWR9X2FscGhhX21hcF8ke3RoaXMuI2lkKyt9YDsKICAgIGNvbnN0IHVybCA9IHRoaXMuI2NyZWF0ZVVybChpZCk7CiAgICB0aGlzLiNjYWNoZS5zZXQobWFwLCB1cmwpOwogICAgdGhpcy4jY2FjaGUuc2V0KGtleSwgdXJsKTsKICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuI2NyZWF0ZUZpbHRlcihpZCk7CiAgICB0aGlzLiNhZGRUcmFuc2Zlck1hcEFscGhhQ29udmVyc2lvbih0YWJsZUEsIGZpbHRlcik7CiAgICByZXR1cm4gdXJsOwogIH0KICBhZGRMdW1pbm9zaXR5RmlsdGVyKG1hcCkgewogICAgbGV0IHZhbHVlID0gdGhpcy4jY2FjaGUuZ2V0KG1hcCB8fCAibHVtaW5vc2l0eSIpOwogICAgaWYgKHZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIGxldCB0YWJsZUEsIGtleTsKICAgIGlmIChtYXApIHsKICAgICAgW3RhYmxlQV0gPSB0aGlzLiNjcmVhdGVUYWJsZXMoW21hcF0pOwogICAgICBrZXkgPSBgbHVtaW5vc2l0eV8ke3RhYmxlQX1gOwogICAgfSBlbHNlIHsKICAgICAga2V5ID0gImx1bWlub3NpdHkiOwogICAgfQogICAgdmFsdWUgPSB0aGlzLiNjYWNoZS5nZXQoa2V5KTsKICAgIGlmICh2YWx1ZSkgewogICAgICB0aGlzLiNjYWNoZS5zZXQobWFwLCB2YWx1ZSk7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIGNvbnN0IGlkID0gYGdfJHt0aGlzLiNkb2NJZH1fbHVtaW5vc2l0eV9tYXBfJHt0aGlzLiNpZCsrfWA7CiAgICBjb25zdCB1cmwgPSB0aGlzLiNjcmVhdGVVcmwoaWQpOwogICAgdGhpcy4jY2FjaGUuc2V0KG1hcCwgdXJsKTsKICAgIHRoaXMuI2NhY2hlLnNldChrZXksIHVybCk7CiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLiNjcmVhdGVGaWx0ZXIoaWQpOwogICAgdGhpcy4jYWRkTHVtaW5vc2l0eUNvbnZlcnNpb24oZmlsdGVyKTsKICAgIGlmIChtYXApIHsKICAgICAgdGhpcy4jYWRkVHJhbnNmZXJNYXBBbHBoYUNvbnZlcnNpb24odGFibGVBLCBmaWx0ZXIpOwogICAgfQogICAgcmV0dXJuIHVybDsKICB9CiAgYWRkSGlnaGxpZ2h0SENNRmlsdGVyKGZpbHRlck5hbWUsIGZnQ29sb3IsIGJnQ29sb3IsIG5ld0ZnQ29sb3IsIG5ld0JnQ29sb3IpIHsKICAgIGNvbnN0IGtleSA9IGAke2ZnQ29sb3J9LSR7YmdDb2xvcn0tJHtuZXdGZ0NvbG9yfS0ke25ld0JnQ29sb3J9YDsKICAgIGxldCBpbmZvID0gdGhpcy4jaGNtQ2FjaGUuZ2V0KGZpbHRlck5hbWUpOwogICAgaWYgKGluZm8/LmtleSA9PT0ga2V5KSB7CiAgICAgIHJldHVybiBpbmZvLnVybDsKICAgIH0KICAgIGlmIChpbmZvKSB7CiAgICAgIGluZm8uZmlsdGVyPy5yZW1vdmUoKTsKICAgICAgaW5mby5rZXkgPSBrZXk7CiAgICAgIGluZm8udXJsID0gIm5vbmUiOwogICAgICBpbmZvLmZpbHRlciA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICBpbmZvID0gewogICAgICAgIGtleSwKICAgICAgICB1cmw6ICJub25lIiwKICAgICAgICBmaWx0ZXI6IG51bGwKICAgICAgfTsKICAgICAgdGhpcy4jaGNtQ2FjaGUuc2V0KGZpbHRlck5hbWUsIGluZm8pOwogICAgfQogICAgaWYgKCFmZ0NvbG9yIHx8ICFiZ0NvbG9yKSB7CiAgICAgIHJldHVybiBpbmZvLnVybDsKICAgIH0KICAgIGNvbnN0IFtmZ1JHQiwgYmdSR0JdID0gW2ZnQ29sb3IsIGJnQ29sb3JdLm1hcCh0aGlzLiNnZXRSR0IuYmluZCh0aGlzKSk7CiAgICBsZXQgZmdHcmF5ID0gTWF0aC5yb3VuZCgwLjIxMjYgKiBmZ1JHQlswXSArIDAuNzE1MiAqIGZnUkdCWzFdICsgMC4wNzIyICogZmdSR0JbMl0pOwogICAgbGV0IGJnR3JheSA9IE1hdGgucm91bmQoMC4yMTI2ICogYmdSR0JbMF0gKyAwLjcxNTIgKiBiZ1JHQlsxXSArIDAuMDcyMiAqIGJnUkdCWzJdKTsKICAgIGxldCBbbmV3RmdSR0IsIG5ld0JnUkdCXSA9IFtuZXdGZ0NvbG9yLCBuZXdCZ0NvbG9yXS5tYXAodGhpcy4jZ2V0UkdCLmJpbmQodGhpcykpOwogICAgaWYgKGJnR3JheSA8IGZnR3JheSkgewogICAgICBbZmdHcmF5LCBiZ0dyYXksIG5ld0ZnUkdCLCBuZXdCZ1JHQl0gPSBbYmdHcmF5LCBmZ0dyYXksIG5ld0JnUkdCLCBuZXdGZ1JHQl07CiAgICB9CiAgICB0aGlzLiNkZWZzLnN0eWxlLmNvbG9yID0gIiI7CiAgICBjb25zdCBnZXRTdGVwcyA9IChmZywgYmcsIG4pID0+IHsKICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KDI1Nik7CiAgICAgIGNvbnN0IHN0ZXAgPSAoYmdHcmF5IC0gZmdHcmF5KSAvIG47CiAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gZmcgLyAyNTU7CiAgICAgIGNvbnN0IG5ld1N0ZXAgPSAoYmcgLSBmZykgLyAoMjU1ICogbik7CiAgICAgIGxldCBwcmV2ID0gMDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgY29uc3QgayA9IE1hdGgucm91bmQoZmdHcmF5ICsgaSAqIHN0ZXApOwogICAgICAgIGNvbnN0IHZhbHVlID0gbmV3U3RhcnQgKyBpICogbmV3U3RlcDsKICAgICAgICBmb3IgKGxldCBqID0gcHJldjsgaiA8PSBrOyBqKyspIHsKICAgICAgICAgIGFycltqXSA9IHZhbHVlOwogICAgICAgIH0KICAgICAgICBwcmV2ID0gayArIDE7CiAgICAgIH0KICAgICAgZm9yIChsZXQgaSA9IHByZXY7IGkgPCAyNTY7IGkrKykgewogICAgICAgIGFycltpXSA9IGFycltwcmV2IC0gMV07CiAgICAgIH0KICAgICAgcmV0dXJuIGFyci5qb2luKCIsIik7CiAgICB9OwogICAgY29uc3QgaWQgPSBgZ18ke3RoaXMuI2RvY0lkfV9oY21fJHtmaWx0ZXJOYW1lfV9maWx0ZXJgOwogICAgY29uc3QgZmlsdGVyID0gaW5mby5maWx0ZXIgPSB0aGlzLiNjcmVhdGVGaWx0ZXIoaWQpOwogICAgdGhpcy4jYWRkR3JheUNvbnZlcnNpb24oZmlsdGVyKTsKICAgIHRoaXMuI2FkZFRyYW5zZmVyTWFwQ29udmVyc2lvbihnZXRTdGVwcyhuZXdGZ1JHQlswXSwgbmV3QmdSR0JbMF0sIDUpLCBnZXRTdGVwcyhuZXdGZ1JHQlsxXSwgbmV3QmdSR0JbMV0sIDUpLCBnZXRTdGVwcyhuZXdGZ1JHQlsyXSwgbmV3QmdSR0JbMl0sIDUpLCBmaWx0ZXIpOwogICAgaW5mby51cmwgPSB0aGlzLiNjcmVhdGVVcmwoaWQpOwogICAgcmV0dXJuIGluZm8udXJsOwogIH0KICBkZXN0cm95KGtlZXBIQ00gPSBmYWxzZSkgewogICAgaWYgKGtlZXBIQ00gJiYgdGhpcy4jX2hjbUNhY2hlPy5zaXplKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI19kZWZzPy5wYXJlbnROb2RlLnBhcmVudE5vZGUucmVtb3ZlKCk7CiAgICB0aGlzLiNfZGVmcyA9IG51bGw7CiAgICB0aGlzLiNfY2FjaGU/LmNsZWFyKCk7CiAgICB0aGlzLiNfY2FjaGUgPSBudWxsOwogICAgdGhpcy4jX2hjbUNhY2hlPy5jbGVhcigpOwogICAgdGhpcy4jX2hjbUNhY2hlID0gbnVsbDsKICAgIHRoaXMuI2lkID0gMDsKICB9CiAgI2FkZEx1bWlub3NpdHlDb252ZXJzaW9uKGZpbHRlcikgewogICAgY29uc3QgZmVDb2xvck1hdHJpeCA9IHRoaXMuI2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICJmZUNvbG9yTWF0cml4Iik7CiAgICBmZUNvbG9yTWF0cml4LnNldEF0dHJpYnV0ZSgidHlwZSIsICJtYXRyaXgiKTsKICAgIGZlQ29sb3JNYXRyaXguc2V0QXR0cmlidXRlKCJ2YWx1ZXMiLCAiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4zIDAuNTkgMC4xMSAwIDAiKTsKICAgIGZpbHRlci5hcHBlbmQoZmVDb2xvck1hdHJpeCk7CiAgfQogICNhZGRHcmF5Q29udmVyc2lvbihmaWx0ZXIpIHsKICAgIGNvbnN0IGZlQ29sb3JNYXRyaXggPSB0aGlzLiNkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAiZmVDb2xvck1hdHJpeCIpOwogICAgZmVDb2xvck1hdHJpeC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAibWF0cml4Iik7CiAgICBmZUNvbG9yTWF0cml4LnNldEF0dHJpYnV0ZSgidmFsdWVzIiwgIjAuMjEyNiAwLjcxNTIgMC4wNzIyIDAgMCAwLjIxMjYgMC43MTUyIDAuMDcyMiAwIDAgMC4yMTI2IDAuNzE1MiAwLjA3MjIgMCAwIDAgMCAwIDEgMCIpOwogICAgZmlsdGVyLmFwcGVuZChmZUNvbG9yTWF0cml4KTsKICB9CiAgI2NyZWF0ZUZpbHRlcihpZCkgewogICAgY29uc3QgZmlsdGVyID0gdGhpcy4jZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgImZpbHRlciIpOwogICAgZmlsdGVyLnNldEF0dHJpYnV0ZSgiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwgInNSR0IiKTsKICAgIGZpbHRlci5zZXRBdHRyaWJ1dGUoImlkIiwgaWQpOwogICAgdGhpcy4jZGVmcy5hcHBlbmQoZmlsdGVyKTsKICAgIHJldHVybiBmaWx0ZXI7CiAgfQogICNhcHBlbmRGZUZ1bmMoZmVDb21wb25lbnRUcmFuc2ZlciwgZnVuYywgdGFibGUpIHsKICAgIGNvbnN0IGZlRnVuYyA9IHRoaXMuI2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIGZ1bmMpOwogICAgZmVGdW5jLnNldEF0dHJpYnV0ZSgidHlwZSIsICJkaXNjcmV0ZSIpOwogICAgZmVGdW5jLnNldEF0dHJpYnV0ZSgidGFibGVWYWx1ZXMiLCB0YWJsZSk7CiAgICBmZUNvbXBvbmVudFRyYW5zZmVyLmFwcGVuZChmZUZ1bmMpOwogIH0KICAjYWRkVHJhbnNmZXJNYXBDb252ZXJzaW9uKHJUYWJsZSwgZ1RhYmxlLCBiVGFibGUsIGZpbHRlcikgewogICAgY29uc3QgZmVDb21wb25lbnRUcmFuc2ZlciA9IHRoaXMuI2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICJmZUNvbXBvbmVudFRyYW5zZmVyIik7CiAgICBmaWx0ZXIuYXBwZW5kKGZlQ29tcG9uZW50VHJhbnNmZXIpOwogICAgdGhpcy4jYXBwZW5kRmVGdW5jKGZlQ29tcG9uZW50VHJhbnNmZXIsICJmZUZ1bmNSIiwgclRhYmxlKTsKICAgIHRoaXMuI2FwcGVuZEZlRnVuYyhmZUNvbXBvbmVudFRyYW5zZmVyLCAiZmVGdW5jRyIsIGdUYWJsZSk7CiAgICB0aGlzLiNhcHBlbmRGZUZ1bmMoZmVDb21wb25lbnRUcmFuc2ZlciwgImZlRnVuY0IiLCBiVGFibGUpOwogIH0KICAjYWRkVHJhbnNmZXJNYXBBbHBoYUNvbnZlcnNpb24oYVRhYmxlLCBmaWx0ZXIpIHsKICAgIGNvbnN0IGZlQ29tcG9uZW50VHJhbnNmZXIgPSB0aGlzLiNkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAiZmVDb21wb25lbnRUcmFuc2ZlciIpOwogICAgZmlsdGVyLmFwcGVuZChmZUNvbXBvbmVudFRyYW5zZmVyKTsKICAgIHRoaXMuI2FwcGVuZEZlRnVuYyhmZUNvbXBvbmVudFRyYW5zZmVyLCAiZmVGdW5jQSIsIGFUYWJsZSk7CiAgfQogICNnZXRSR0IoY29sb3IpIHsKICAgIHRoaXMuI2RlZnMuc3R5bGUuY29sb3IgPSBjb2xvcjsKICAgIHJldHVybiBnZXRSR0IoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiNkZWZzKS5nZXRQcm9wZXJ0eVZhbHVlKCJjb2xvciIpKTsKICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L3N0YW5kYXJkX2ZvbnRkYXRhX2ZhY3RvcnkuanMKCgpjbGFzcyBCYXNlU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgewogIGNvbnN0cnVjdG9yKHsKICAgIGJhc2VVcmwgPSBudWxsCiAgfSkgewogICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDsKICB9CiAgYXN5bmMgZmV0Y2goewogICAgZmlsZW5hbWUKICB9KSB7CiAgICBpZiAoIXRoaXMuYmFzZVVybCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkVuc3VyZSB0aGF0IHRoZSBgc3RhbmRhcmRGb250RGF0YVVybGAgQVBJIHBhcmFtZXRlciBpcyBwcm92aWRlZC4iKTsKICAgIH0KICAgIGlmICghZmlsZW5hbWUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJGb250IGZpbGVuYW1lIG11c3QgYmUgc3BlY2lmaWVkLiIpOwogICAgfQogICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfSR7ZmlsZW5hbWV9YDsKICAgIHJldHVybiB0aGlzLl9mZXRjaCh1cmwpLmNhdGNoKHJlYXNvbiA9PiB7CiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZm9udCBkYXRhIGF0OiAke3VybH1gKTsKICAgIH0pOwogIH0KICBhc3luYyBfZmV0Y2godXJsKSB7CiAgICB1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBfZmV0Y2hgIGNhbGxlZC4iKTsKICB9Cn0KY2xhc3MgRE9NU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgZXh0ZW5kcyBCYXNlU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgewogIGFzeW5jIF9mZXRjaCh1cmwpIHsKICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaERhdGEodXJsLCAiYXJyYXlidWZmZXIiKTsKICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTsKICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L3dhc21fZmFjdG9yeS5qcwoKCmNsYXNzIEJhc2VXYXNtRmFjdG9yeSB7CiAgY29uc3RydWN0b3IoewogICAgYmFzZVVybCA9IG51bGwKICB9KSB7CiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsOwogIH0KICBhc3luYyBmZXRjaCh7CiAgICBmaWxlbmFtZQogIH0pIHsKICAgIGlmICghdGhpcy5iYXNlVXJsKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiRW5zdXJlIHRoYXQgdGhlIGB3YXNtVXJsYCBBUEkgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLiIpOwogICAgfQogICAgaWYgKCFmaWxlbmFtZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldhc20gZmlsZW5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuIik7CiAgICB9CiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9JHtmaWxlbmFtZX1gOwogICAgcmV0dXJuIHRoaXMuX2ZldGNoKHVybCkuY2F0Y2gocmVhc29uID0+IHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCB3YXNtIGRhdGEgYXQ6ICR7dXJsfWApOwogICAgfSk7CiAgfQogIGFzeW5jIF9mZXRjaCh1cmwpIHsKICAgIHVucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYF9mZXRjaGAgY2FsbGVkLiIpOwogIH0KfQpjbGFzcyBET01XYXNtRmFjdG9yeSBleHRlbmRzIEJhc2VXYXNtRmFjdG9yeSB7CiAgYXN5bmMgX2ZldGNoKHVybCkgewogICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoRGF0YSh1cmwsICJhcnJheWJ1ZmZlciIpOwogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEpOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvbm9kZV91dGlscy5qcwoKCgoKCgppZiAoaXNOb2RlSlMpIHsKICB3YXJuKCJQbGVhc2UgdXNlIHRoZSBgbGVnYWN5YCBidWlsZCBpbiBOb2RlLmpzIGVudmlyb25tZW50cy4iKTsKfQphc3luYyBmdW5jdGlvbiBub2RlX3V0aWxzX2ZldGNoRGF0YSh1cmwpIHsKICBjb25zdCBmcyA9IHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSgiZnMiKTsKICBjb25zdCBkYXRhID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUodXJsKTsKICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7Cn0KY2xhc3MgTm9kZUZpbHRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlRmlsdGVyRmFjdG9yeSB7fQpjbGFzcyBOb2RlQ2FudmFzRmFjdG9yeSBleHRlbmRzIEJhc2VDYW52YXNGYWN0b3J5IHsKICBfY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpIHsKICAgIGNvbnN0IHJlcXVpcmUgPSBwcm9jZXNzLmdldEJ1aWx0aW5Nb2R1bGUoIm1vZHVsZSIpLmNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTsKICAgIGNvbnN0IGNhbnZhcyA9IHJlcXVpcmUoIkBuYXBpLXJzL2NhbnZhcyIpOwogICAgcmV0dXJuIGNhbnZhcy5jcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCk7CiAgfQp9CmNsYXNzIE5vZGVDTWFwUmVhZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VDTWFwUmVhZGVyRmFjdG9yeSB7CiAgYXN5bmMgX2ZldGNoKHVybCkgewogICAgcmV0dXJuIG5vZGVfdXRpbHNfZmV0Y2hEYXRhKHVybCk7CiAgfQp9CmNsYXNzIE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSBleHRlbmRzIEJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSB7CiAgYXN5bmMgX2ZldGNoKHVybCkgewogICAgcmV0dXJuIG5vZGVfdXRpbHNfZmV0Y2hEYXRhKHVybCk7CiAgfQp9CmNsYXNzIE5vZGVXYXNtRmFjdG9yeSBleHRlbmRzIEJhc2VXYXNtRmFjdG9yeSB7CiAgYXN5bmMgX2ZldGNoKHVybCkgewogICAgcmV0dXJuIG5vZGVfdXRpbHNfZmV0Y2hEYXRhKHVybCk7CiAgfQp9Cgo7Ly8gLi9zcmMvZGlzcGxheS9jYW52YXNfZGVwZW5kZW5jeV90cmFja2VyLmpzCgpjb25zdCBGT1JDRURfREVQRU5ERU5DWV9MQUJFTCA9ICJfX2ZvcmNlZERlcGVuZGVuY3kiOwpjb25zdCB7CiAgZmxvb3IsCiAgY2VpbAp9ID0gTWF0aDsKZnVuY3Rpb24gZXhwYW5kQkJveChhcnJheSwgaW5kZXgsIG1pblgsIG1pblksIG1heFgsIG1heFkpIHsKICBhcnJheVtpbmRleCAqIDQgKyAwXSA9IE1hdGgubWluKGFycmF5W2luZGV4ICogNCArIDBdLCBtaW5YKTsKICBhcnJheVtpbmRleCAqIDQgKyAxXSA9IE1hdGgubWluKGFycmF5W2luZGV4ICogNCArIDFdLCBtaW5ZKTsKICBhcnJheVtpbmRleCAqIDQgKyAyXSA9IE1hdGgubWF4KGFycmF5W2luZGV4ICogNCArIDJdLCBtYXhYKTsKICBhcnJheVtpbmRleCAqIDQgKyAzXSA9IE1hdGgubWF4KGFycmF5W2luZGV4ICogNCArIDNdLCBtYXhZKTsKfQpjb25zdCBFTVBUWV9CQk9YID0gbmV3IFVpbnQzMkFycmF5KG5ldyBVaW50OEFycmF5KFsyNTUsIDI1NSwgMCwgMF0pLmJ1ZmZlcilbMF07CmNsYXNzIEJCb3hSZWFkZXIgewogICNiYm94ZXM7CiAgI2Nvb3JkczsKICBjb25zdHJ1Y3RvcihiYm94ZXMsIGNvb3JkcykgewogICAgdGhpcy4jYmJveGVzID0gYmJveGVzOwogICAgdGhpcy4jY29vcmRzID0gY29vcmRzOwogIH0KICBnZXQgbGVuZ3RoKCkgewogICAgcmV0dXJuIHRoaXMuI2Jib3hlcy5sZW5ndGg7CiAgfQogIGlzRW1wdHkoaSkgewogICAgcmV0dXJuIHRoaXMuI2Jib3hlc1tpXSA9PT0gRU1QVFlfQkJPWDsKICB9CiAgbWluWChpKSB7CiAgICByZXR1cm4gdGhpcy4jY29vcmRzW2kgKiA0ICsgMF0gLyAyNTY7CiAgfQogIG1pblkoaSkgewogICAgcmV0dXJuIHRoaXMuI2Nvb3Jkc1tpICogNCArIDFdIC8gMjU2OwogIH0KICBtYXhYKGkpIHsKICAgIHJldHVybiAodGhpcy4jY29vcmRzW2kgKiA0ICsgMl0gKyAxKSAvIDI1NjsKICB9CiAgbWF4WShpKSB7CiAgICByZXR1cm4gKHRoaXMuI2Nvb3Jkc1tpICogNCArIDNdICsgMSkgLyAyNTY7CiAgfQp9CmNvbnN0IGVuc3VyZURlYnVnTWV0YWRhdGEgPSAobWFwLCBrZXkpID0+IHsKICBpZiAoIW1hcCkgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CiAgbGV0IHZhbHVlID0gbWFwLmdldChrZXkpOwogIGlmICghdmFsdWUpIHsKICAgIHZhbHVlID0gewogICAgICBkZXBlbmRlbmNpZXM6IG5ldyBTZXQoKSwKICAgICAgaXNSZW5kZXJpbmdPcGVyYXRpb246IGZhbHNlCiAgICB9OwogICAgbWFwLnNldChrZXksIHZhbHVlKTsKICB9CiAgcmV0dXJuIHZhbHVlOwp9OwpjbGFzcyBDYW52YXNEZXBlbmRlbmN5VHJhY2tlciB7CiAgI3NpbXBsZSA9IHsKICAgIF9fcHJvdG9fXzogbnVsbAogIH07CiAgI2luY3JlbWVudGFsID0gewogICAgX19wcm90b19fOiBudWxsLAogICAgdHJhbnNmb3JtOiBbXSwKICAgIG1vdmVUZXh0OiBbXSwKICAgIHNhbWVMaW5lVGV4dDogW10sCiAgICBbRk9SQ0VEX0RFUEVOREVOQ1lfTEFCRUxdOiBbXQogIH07CiAgI25hbWVkRGVwZW5kZW5jaWVzID0gbmV3IE1hcCgpOwogICNzYXZlc1N0YWNrID0gW107CiAgI21hcmtlZENvbnRlbnRTdGFjayA9IFtdOwogICNiYXNlVHJhbnNmb3JtU3RhY2sgPSBbWzEsIDAsIDAsIDEsIDAsIDBdXTsKICAjY2xpcEJveCA9IFstSW5maW5pdHksIC1JbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5XTsKICAjcGVuZGluZ0JCb3ggPSBuZXcgRmxvYXQ2NEFycmF5KFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XSk7CiAgI3BlbmRpbmdCQm94SWR4ID0gLTE7CiAgI3BlbmRpbmdEZXBlbmRlbmNpZXMgPSBuZXcgU2V0KCk7CiAgI29wZXJhdGlvbnMgPSBuZXcgTWFwKCk7CiAgI2ZvbnRCQm94VHJ1c3R3b3J0aHkgPSBuZXcgTWFwKCk7CiAgI2NhbnZhc1dpZHRoOwogICNjYW52YXNIZWlnaHQ7CiAgI2Jib3hlc0Nvb3JkczsKICAjYmJveGVzOwogICNkZWJ1Z01ldGFkYXRhOwogIGNvbnN0cnVjdG9yKGNhbnZhcywgb3BlcmF0aW9uc0NvdW50LCByZWNvcmREZWJ1Z01ldGFkYXRhID0gZmFsc2UpIHsKICAgIHRoaXMuI2NhbnZhc1dpZHRoID0gY2FudmFzLndpZHRoOwogICAgdGhpcy4jY2FudmFzSGVpZ2h0ID0gY2FudmFzLmhlaWdodDsKICAgIHRoaXMuI2luaXRpYWxpemVCQm94ZXMob3BlcmF0aW9uc0NvdW50KTsKICAgIGlmIChyZWNvcmREZWJ1Z01ldGFkYXRhKSB7CiAgICAgIHRoaXMuI2RlYnVnTWV0YWRhdGEgPSBuZXcgTWFwKCk7CiAgICB9CiAgfQogIGdyb3dPcGVyYXRpb25zQ291bnQob3BlcmF0aW9uc0NvdW50KSB7CiAgICBpZiAob3BlcmF0aW9uc0NvdW50ID49IHRoaXMuI2Jib3hlcy5sZW5ndGgpIHsKICAgICAgdGhpcy4jaW5pdGlhbGl6ZUJCb3hlcyhvcGVyYXRpb25zQ291bnQsIHRoaXMuI2Jib3hlcyk7CiAgICB9CiAgfQogICNpbml0aWFsaXplQkJveGVzKG9wZXJhdGlvbnNDb3VudCwgb2xkQkJveGVzKSB7CiAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIob3BlcmF0aW9uc0NvdW50ICogNCk7CiAgICB0aGlzLiNiYm94ZXNDb29yZHMgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoYnVmZmVyKTsKICAgIHRoaXMuI2Jib3hlcyA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpOwogICAgaWYgKG9sZEJCb3hlcyAmJiBvbGRCQm94ZXMubGVuZ3RoID4gMCkgewogICAgICB0aGlzLiNiYm94ZXMuc2V0KG9sZEJCb3hlcyk7CiAgICAgIHRoaXMuI2Jib3hlcy5maWxsKEVNUFRZX0JCT1gsIG9sZEJCb3hlcy5sZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy4jYmJveGVzLmZpbGwoRU1QVFlfQkJPWCk7CiAgICB9CiAgfQogIHNhdmUob3BJZHgpIHsKICAgIHRoaXMuI3NpbXBsZSA9IHsKICAgICAgX19wcm90b19fOiB0aGlzLiNzaW1wbGUKICAgIH07CiAgICB0aGlzLiNpbmNyZW1lbnRhbCA9IHsKICAgICAgX19wcm90b19fOiB0aGlzLiNpbmNyZW1lbnRhbCwKICAgICAgdHJhbnNmb3JtOiB7CiAgICAgICAgX19wcm90b19fOiB0aGlzLiNpbmNyZW1lbnRhbC50cmFuc2Zvcm0KICAgICAgfSwKICAgICAgbW92ZVRleHQ6IHsKICAgICAgICBfX3Byb3RvX186IHRoaXMuI2luY3JlbWVudGFsLm1vdmVUZXh0CiAgICAgIH0sCiAgICAgIHNhbWVMaW5lVGV4dDogewogICAgICAgIF9fcHJvdG9fXzogdGhpcy4jaW5jcmVtZW50YWwuc2FtZUxpbmVUZXh0CiAgICAgIH0sCiAgICAgIFtGT1JDRURfREVQRU5ERU5DWV9MQUJFTF06IHsKICAgICAgICBfX3Byb3RvX186IHRoaXMuI2luY3JlbWVudGFsW0ZPUkNFRF9ERVBFTkRFTkNZX0xBQkVMXQogICAgICB9CiAgICB9OwogICAgdGhpcy4jY2xpcEJveCA9IHsKICAgICAgX19wcm90b19fOiB0aGlzLiNjbGlwQm94CiAgICB9OwogICAgdGhpcy4jc2F2ZXNTdGFjay5wdXNoKG9wSWR4KTsKICAgIHJldHVybiB0aGlzOwogIH0KICByZXN0b3JlKG9wSWR4KSB7CiAgICBjb25zdCBwcmV2aW91cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLiNzaW1wbGUpOwogICAgaWYgKHByZXZpb3VzID09PSBudWxsKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgdGhpcy4jc2ltcGxlID0gcHJldmlvdXM7CiAgICB0aGlzLiNpbmNyZW1lbnRhbCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLiNpbmNyZW1lbnRhbCk7CiAgICB0aGlzLiNjbGlwQm94ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMuI2NsaXBCb3gpOwogICAgY29uc3QgbGFzdFNhdmUgPSB0aGlzLiNzYXZlc1N0YWNrLnBvcCgpOwogICAgaWYgKGxhc3RTYXZlICE9PSB1bmRlZmluZWQpIHsKICAgICAgZW5zdXJlRGVidWdNZXRhZGF0YSh0aGlzLiNkZWJ1Z01ldGFkYXRhLCBvcElkeCk/LmRlcGVuZGVuY2llcy5hZGQobGFzdFNhdmUpOwogICAgICB0aGlzLiNiYm94ZXNbb3BJZHhdID0gdGhpcy4jYmJveGVzW2xhc3RTYXZlXTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KICByZWNvcmRPcGVuTWFya2VyKGlkeCkgewogICAgdGhpcy4jc2F2ZXNTdGFjay5wdXNoKGlkeCk7CiAgICByZXR1cm4gdGhpczsKICB9CiAgZ2V0T3Blbk1hcmtlcigpIHsKICAgIGlmICh0aGlzLiNzYXZlc1N0YWNrLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiB0aGlzLiNzYXZlc1N0YWNrLmF0KC0xKTsKICB9CiAgcmVjb3JkQ2xvc2VNYXJrZXIob3BJZHgpIHsKICAgIGNvbnN0IGxhc3RTYXZlID0gdGhpcy4jc2F2ZXNTdGFjay5wb3AoKTsKICAgIGlmIChsYXN0U2F2ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIGVuc3VyZURlYnVnTWV0YWRhdGEodGhpcy4jZGVidWdNZXRhZGF0YSwgb3BJZHgpPy5kZXBlbmRlbmNpZXMuYWRkKGxhc3RTYXZlKTsKICAgICAgdGhpcy4jYmJveGVzW29wSWR4XSA9IHRoaXMuI2Jib3hlc1tsYXN0U2F2ZV07CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CiAgYmVnaW5NYXJrZWRDb250ZW50KG9wSWR4KSB7CiAgICB0aGlzLiNtYXJrZWRDb250ZW50U3RhY2sucHVzaChvcElkeCk7CiAgICByZXR1cm4gdGhpczsKICB9CiAgZW5kTWFya2VkQ29udGVudChvcElkeCkgewogICAgY29uc3QgbGFzdFNhdmUgPSB0aGlzLiNtYXJrZWRDb250ZW50U3RhY2sucG9wKCk7CiAgICBpZiAobGFzdFNhdmUgIT09IHVuZGVmaW5lZCkgewogICAgICBlbnN1cmVEZWJ1Z01ldGFkYXRhKHRoaXMuI2RlYnVnTWV0YWRhdGEsIG9wSWR4KT8uZGVwZW5kZW5jaWVzLmFkZChsYXN0U2F2ZSk7CiAgICAgIHRoaXMuI2Jib3hlc1tvcElkeF0gPSB0aGlzLiNiYm94ZXNbbGFzdFNhdmVdOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQogIHB1c2hCYXNlVHJhbnNmb3JtKGN0eCkgewogICAgdGhpcy4jYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2goVXRpbC5tdWx0aXBseUJ5RE9NTWF0cml4KHRoaXMuI2Jhc2VUcmFuc2Zvcm1TdGFjay5hdCgtMSksIGN0eC5nZXRUcmFuc2Zvcm0oKSkpOwogICAgcmV0dXJuIHRoaXM7CiAgfQogIHBvcEJhc2VUcmFuc2Zvcm0oKSB7CiAgICBpZiAodGhpcy4jYmFzZVRyYW5zZm9ybVN0YWNrLmxlbmd0aCA+IDEpIHsKICAgICAgdGhpcy4jYmFzZVRyYW5zZm9ybVN0YWNrLnBvcCgpOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQogIHJlY29yZFNpbXBsZURhdGEobmFtZSwgaWR4KSB7CiAgICB0aGlzLiNzaW1wbGVbbmFtZV0gPSBpZHg7CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVjb3JkSW5jcmVtZW50YWxEYXRhKG5hbWUsIGlkeCkgewogICAgdGhpcy4jaW5jcmVtZW50YWxbbmFtZV0ucHVzaChpZHgpOwogICAgcmV0dXJuIHRoaXM7CiAgfQogIHJlc2V0SW5jcmVtZW50YWxEYXRhKG5hbWUsIGlkeCkgewogICAgdGhpcy4jaW5jcmVtZW50YWxbbmFtZV0ubGVuZ3RoID0gMDsKICAgIHJldHVybiB0aGlzOwogIH0KICByZWNvcmROYW1lZERhdGEobmFtZSwgaWR4KSB7CiAgICB0aGlzLiNuYW1lZERlcGVuZGVuY2llcy5zZXQobmFtZSwgaWR4KTsKICAgIHJldHVybiB0aGlzOwogIH0KICByZWNvcmRTaW1wbGVEYXRhRnJvbU5hbWVkKG5hbWUsIGRlcE5hbWUsIGZhbGxiYWNrSWR4KSB7CiAgICB0aGlzLiNzaW1wbGVbbmFtZV0gPSB0aGlzLiNuYW1lZERlcGVuZGVuY2llcy5nZXQoZGVwTmFtZSkgPz8gZmFsbGJhY2tJZHg7CiAgfQogIHJlY29yZEZ1dHVyZUZvcmNlZERlcGVuZGVuY3kobmFtZSwgaWR4KSB7CiAgICB0aGlzLnJlY29yZEluY3JlbWVudGFsRGF0YShGT1JDRURfREVQRU5ERU5DWV9MQUJFTCwgaWR4KTsKICAgIHJldHVybiB0aGlzOwogIH0KICBpbmhlcml0U2ltcGxlRGF0YUFzRnV0dXJlRm9yY2VkRGVwZW5kZW5jaWVzKG5hbWVzKSB7CiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHsKICAgICAgaWYgKG5hbWUgaW4gdGhpcy4jc2ltcGxlKSB7CiAgICAgICAgdGhpcy5yZWNvcmRGdXR1cmVGb3JjZWREZXBlbmRlbmN5KG5hbWUsIHRoaXMuI3NpbXBsZVtuYW1lXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KICBpbmhlcml0UGVuZGluZ0RlcGVuZGVuY2llc0FzRnV0dXJlRm9yY2VkRGVwZW5kZW5jaWVzKCkgewogICAgZm9yIChjb25zdCBkZXAgb2YgdGhpcy4jcGVuZGluZ0RlcGVuZGVuY2llcykgewogICAgICB0aGlzLnJlY29yZEZ1dHVyZUZvcmNlZERlcGVuZGVuY3koRk9SQ0VEX0RFUEVOREVOQ1lfTEFCRUwsIGRlcCk7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVzZXRCQm94KGlkeCkgewogICAgaWYgKHRoaXMuI3BlbmRpbmdCQm94SWR4ICE9PSBpZHgpIHsKICAgICAgdGhpcy4jcGVuZGluZ0JCb3hJZHggPSBpZHg7CiAgICAgIHRoaXMuI3BlbmRpbmdCQm94WzBdID0gSW5maW5pdHk7CiAgICAgIHRoaXMuI3BlbmRpbmdCQm94WzFdID0gSW5maW5pdHk7CiAgICAgIHRoaXMuI3BlbmRpbmdCQm94WzJdID0gLUluZmluaXR5OwogICAgICB0aGlzLiNwZW5kaW5nQkJveFszXSA9IC1JbmZpbml0eTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KICByZWNvcmRDbGlwQm94KGlkeCwgY3R4LCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZKSB7CiAgICBjb25zdCB0cmFuc2Zvcm0gPSBVdGlsLm11bHRpcGx5QnlET01NYXRyaXgodGhpcy4jYmFzZVRyYW5zZm9ybVN0YWNrLmF0KC0xKSwgY3R4LmdldFRyYW5zZm9ybSgpKTsKICAgIGNvbnN0IGNsaXBCb3ggPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07CiAgICBVdGlsLmF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSwgdHJhbnNmb3JtLCBjbGlwQm94KTsKICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IFV0aWwuaW50ZXJzZWN0KHRoaXMuI2NsaXBCb3gsIGNsaXBCb3gpOwogICAgaWYgKGludGVyc2VjdGlvbikgewogICAgICB0aGlzLiNjbGlwQm94WzBdID0gaW50ZXJzZWN0aW9uWzBdOwogICAgICB0aGlzLiNjbGlwQm94WzFdID0gaW50ZXJzZWN0aW9uWzFdOwogICAgICB0aGlzLiNjbGlwQm94WzJdID0gaW50ZXJzZWN0aW9uWzJdOwogICAgICB0aGlzLiNjbGlwQm94WzNdID0gaW50ZXJzZWN0aW9uWzNdOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy4jY2xpcEJveFswXSA9IHRoaXMuI2NsaXBCb3hbMV0gPSBJbmZpbml0eTsKICAgICAgdGhpcy4jY2xpcEJveFsyXSA9IHRoaXMuI2NsaXBCb3hbM10gPSAtSW5maW5pdHk7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVjb3JkQkJveChpZHgsIGN0eCwgbWluWCwgbWF4WCwgbWluWSwgbWF4WSkgewogICAgY29uc3QgY2xpcEJveCA9IHRoaXMuI2NsaXBCb3g7CiAgICBpZiAoY2xpcEJveFswXSA9PT0gSW5maW5pdHkpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBjb25zdCB0cmFuc2Zvcm0gPSBVdGlsLm11bHRpcGx5QnlET01NYXRyaXgodGhpcy4jYmFzZVRyYW5zZm9ybVN0YWNrLmF0KC0xKSwgY3R4LmdldFRyYW5zZm9ybSgpKTsKICAgIGlmIChjbGlwQm94WzBdID09PSAtSW5maW5pdHkpIHsKICAgICAgVXRpbC5heGlhbEFsaWduZWRCb3VuZGluZ0JveChbbWluWCwgbWluWSwgbWF4WCwgbWF4WV0sIHRyYW5zZm9ybSwgdGhpcy4jcGVuZGluZ0JCb3gpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGNvbnN0IGJib3ggPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07CiAgICBVdGlsLmF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSwgdHJhbnNmb3JtLCBiYm94KTsKICAgIHRoaXMuI3BlbmRpbmdCQm94WzBdID0gTWF0aC5taW4odGhpcy4jcGVuZGluZ0JCb3hbMF0sIE1hdGgubWF4KGJib3hbMF0sIGNsaXBCb3hbMF0pKTsKICAgIHRoaXMuI3BlbmRpbmdCQm94WzFdID0gTWF0aC5taW4odGhpcy4jcGVuZGluZ0JCb3hbMV0sIE1hdGgubWF4KGJib3hbMV0sIGNsaXBCb3hbMV0pKTsKICAgIHRoaXMuI3BlbmRpbmdCQm94WzJdID0gTWF0aC5tYXgodGhpcy4jcGVuZGluZ0JCb3hbMl0sIE1hdGgubWluKGJib3hbMl0sIGNsaXBCb3hbMl0pKTsKICAgIHRoaXMuI3BlbmRpbmdCQm94WzNdID0gTWF0aC5tYXgodGhpcy4jcGVuZGluZ0JCb3hbM10sIE1hdGgubWluKGJib3hbM10sIGNsaXBCb3hbM10pKTsKICAgIHJldHVybiB0aGlzOwogIH0KICByZWNvcmRDaGFyYWN0ZXJCQm94KGlkeCwgY3R4LCBmb250LCBzY2FsZSA9IDEsIHggPSAwLCB5ID0gMCwgZ2V0TWVhc3VyZSkgewogICAgY29uc3QgZm9udEJCb3ggPSBmb250LmJib3g7CiAgICBsZXQgaXNCQm94VHJ1c3R3b3J0aHk7CiAgICBsZXQgY29tcHV0ZWRCQm94OwogICAgaWYgKGZvbnRCQm94KSB7CiAgICAgIGlzQkJveFRydXN0d29ydGh5ID0gZm9udEJCb3hbMl0gIT09IGZvbnRCQm94WzBdICYmIGZvbnRCQm94WzNdICE9PSBmb250QkJveFsxXSAmJiB0aGlzLiNmb250QkJveFRydXN0d29ydGh5LmdldChmb250KTsKICAgICAgaWYgKGlzQkJveFRydXN0d29ydGh5ICE9PSBmYWxzZSkgewogICAgICAgIGNvbXB1dGVkQkJveCA9IFswLCAwLCAwLCAwXTsKICAgICAgICBVdGlsLmF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGZvbnRCQm94LCBmb250LmZvbnRNYXRyaXgsIGNvbXB1dGVkQkJveCk7CiAgICAgICAgaWYgKHNjYWxlICE9PSAxIHx8IHggIT09IDAgfHwgeSAhPT0gMCkgewogICAgICAgICAgVXRpbC5zY2FsZU1pbk1heChbc2NhbGUsIDAsIDAsIC1zY2FsZSwgeCwgeV0sIGNvbXB1dGVkQkJveCk7CiAgICAgICAgfQogICAgICAgIGlmIChpc0JCb3hUcnVzdHdvcnRoeSkgewogICAgICAgICAgcmV0dXJuIHRoaXMucmVjb3JkQkJveChpZHgsIGN0eCwgY29tcHV0ZWRCQm94WzBdLCBjb21wdXRlZEJCb3hbMl0sIGNvbXB1dGVkQkJveFsxXSwgY29tcHV0ZWRCQm94WzNdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICghZ2V0TWVhc3VyZSkgewogICAgICByZXR1cm4gdGhpcy5yZWNvcmRGdWxsUGFnZUJCb3goaWR4KTsKICAgIH0KICAgIGNvbnN0IG1lYXN1cmUgPSBnZXRNZWFzdXJlKCk7CiAgICBpZiAoZm9udEJCb3ggJiYgY29tcHV0ZWRCQm94ICYmIGlzQkJveFRydXN0d29ydGh5ID09PSB1bmRlZmluZWQpIHsKICAgICAgaXNCQm94VHJ1c3R3b3J0aHkgPSBjb21wdXRlZEJCb3hbMF0gPD0geCAtIG1lYXN1cmUuYWN0dWFsQm91bmRpbmdCb3hMZWZ0ICYmIGNvbXB1dGVkQkJveFsyXSA+PSB4ICsgbWVhc3VyZS5hY3R1YWxCb3VuZGluZ0JveFJpZ2h0ICYmIGNvbXB1dGVkQkJveFsxXSA8PSB5IC0gbWVhc3VyZS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudCAmJiBjb21wdXRlZEJCb3hbM10gPj0geSArIG1lYXN1cmUuYWN0dWFsQm91bmRpbmdCb3hEZXNjZW50OwogICAgICB0aGlzLiNmb250QkJveFRydXN0d29ydGh5LnNldChmb250LCBpc0JCb3hUcnVzdHdvcnRoeSk7CiAgICAgIGlmIChpc0JCb3hUcnVzdHdvcnRoeSkgewogICAgICAgIHJldHVybiB0aGlzLnJlY29yZEJCb3goaWR4LCBjdHgsIGNvbXB1dGVkQkJveFswXSwgY29tcHV0ZWRCQm94WzJdLCBjb21wdXRlZEJCb3hbMV0sIGNvbXB1dGVkQkJveFszXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGlzLnJlY29yZEJCb3goaWR4LCBjdHgsIHggLSBtZWFzdXJlLmFjdHVhbEJvdW5kaW5nQm94TGVmdCwgeCArIG1lYXN1cmUuYWN0dWFsQm91bmRpbmdCb3hSaWdodCwgeSAtIG1lYXN1cmUuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQsIHkgKyBtZWFzdXJlLmFjdHVhbEJvdW5kaW5nQm94RGVzY2VudCk7CiAgfQogIHJlY29yZEZ1bGxQYWdlQkJveChpZHgpIHsKICAgIHRoaXMuI3BlbmRpbmdCQm94WzBdID0gTWF0aC5tYXgoMCwgdGhpcy4jY2xpcEJveFswXSk7CiAgICB0aGlzLiNwZW5kaW5nQkJveFsxXSA9IE1hdGgubWF4KDAsIHRoaXMuI2NsaXBCb3hbMV0pOwogICAgdGhpcy4jcGVuZGluZ0JCb3hbMl0gPSBNYXRoLm1pbih0aGlzLiNjYW52YXNXaWR0aCwgdGhpcy4jY2xpcEJveFsyXSk7CiAgICB0aGlzLiNwZW5kaW5nQkJveFszXSA9IE1hdGgubWluKHRoaXMuI2NhbnZhc0hlaWdodCwgdGhpcy4jY2xpcEJveFszXSk7CiAgICByZXR1cm4gdGhpczsKICB9CiAgZ2V0U2ltcGxlSW5kZXgoZGVwZW5kZW5jeU5hbWUpIHsKICAgIHJldHVybiB0aGlzLiNzaW1wbGVbZGVwZW5kZW5jeU5hbWVdOwogIH0KICByZWNvcmREZXBlbmRlbmNpZXMoaWR4LCBkZXBlbmRlbmN5TmFtZXMpIHsKICAgIGNvbnN0IHBlbmRpbmdEZXBlbmRlbmNpZXMgPSB0aGlzLiNwZW5kaW5nRGVwZW5kZW5jaWVzOwogICAgY29uc3Qgc2ltcGxlID0gdGhpcy4jc2ltcGxlOwogICAgY29uc3QgaW5jcmVtZW50YWwgPSB0aGlzLiNpbmNyZW1lbnRhbDsKICAgIGZvciAoY29uc3QgbmFtZSBvZiBkZXBlbmRlbmN5TmFtZXMpIHsKICAgICAgaWYgKG5hbWUgaW4gdGhpcy4jc2ltcGxlKSB7CiAgICAgICAgcGVuZGluZ0RlcGVuZGVuY2llcy5hZGQoc2ltcGxlW25hbWVdKTsKICAgICAgfSBlbHNlIGlmIChuYW1lIGluIGluY3JlbWVudGFsKSB7CiAgICAgICAgaW5jcmVtZW50YWxbbmFtZV0uZm9yRWFjaChwZW5kaW5nRGVwZW5kZW5jaWVzLmFkZCwgcGVuZGluZ0RlcGVuZGVuY2llcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KICByZWNvcmROYW1lZERlcGVuZGVuY3koaWR4LCBuYW1lKSB7CiAgICBpZiAodGhpcy4jbmFtZWREZXBlbmRlbmNpZXMuaGFzKG5hbWUpKSB7CiAgICAgIHRoaXMuI3BlbmRpbmdEZXBlbmRlbmNpZXMuYWRkKHRoaXMuI25hbWVkRGVwZW5kZW5jaWVzLmdldChuYW1lKSk7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVjb3JkT3BlcmF0aW9uKGlkeCwgcHJlc2VydmUgPSBmYWxzZSkgewogICAgdGhpcy5yZWNvcmREZXBlbmRlbmNpZXMoaWR4LCBbRk9SQ0VEX0RFUEVOREVOQ1lfTEFCRUxdKTsKICAgIGlmICh0aGlzLiNkZWJ1Z01ldGFkYXRhKSB7CiAgICAgIGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlRGVidWdNZXRhZGF0YSh0aGlzLiNkZWJ1Z01ldGFkYXRhLCBpZHgpOwogICAgICBjb25zdCB7CiAgICAgICAgZGVwZW5kZW5jaWVzCiAgICAgIH0gPSBtZXRhZGF0YTsKICAgICAgdGhpcy4jcGVuZGluZ0RlcGVuZGVuY2llcy5mb3JFYWNoKGRlcGVuZGVuY2llcy5hZGQsIGRlcGVuZGVuY2llcyk7CiAgICAgIHRoaXMuI3NhdmVzU3RhY2suZm9yRWFjaChkZXBlbmRlbmNpZXMuYWRkLCBkZXBlbmRlbmNpZXMpOwogICAgICB0aGlzLiNtYXJrZWRDb250ZW50U3RhY2suZm9yRWFjaChkZXBlbmRlbmNpZXMuYWRkLCBkZXBlbmRlbmNpZXMpOwogICAgICBkZXBlbmRlbmNpZXMuZGVsZXRlKGlkeCk7CiAgICAgIG1ldGFkYXRhLmlzUmVuZGVyaW5nT3BlcmF0aW9uID0gdHJ1ZTsKICAgIH0KICAgIGlmICh0aGlzLiNwZW5kaW5nQkJveElkeCA9PT0gaWR4KSB7CiAgICAgIGNvbnN0IG1pblggPSBmbG9vcih0aGlzLiNwZW5kaW5nQkJveFswXSAqIDI1NiAvIHRoaXMuI2NhbnZhc1dpZHRoKTsKICAgICAgY29uc3QgbWluWSA9IGZsb29yKHRoaXMuI3BlbmRpbmdCQm94WzFdICogMjU2IC8gdGhpcy4jY2FudmFzSGVpZ2h0KTsKICAgICAgY29uc3QgbWF4WCA9IGNlaWwodGhpcy4jcGVuZGluZ0JCb3hbMl0gKiAyNTYgLyB0aGlzLiNjYW52YXNXaWR0aCk7CiAgICAgIGNvbnN0IG1heFkgPSBjZWlsKHRoaXMuI3BlbmRpbmdCQm94WzNdICogMjU2IC8gdGhpcy4jY2FudmFzSGVpZ2h0KTsKICAgICAgZXhwYW5kQkJveCh0aGlzLiNiYm94ZXNDb29yZHMsIGlkeCwgbWluWCwgbWluWSwgbWF4WCwgbWF4WSk7CiAgICAgIGZvciAoY29uc3QgZGVwSWR4IG9mIHRoaXMuI3BlbmRpbmdEZXBlbmRlbmNpZXMpIHsKICAgICAgICBpZiAoZGVwSWR4ICE9PSBpZHgpIHsKICAgICAgICAgIGV4cGFuZEJCb3godGhpcy4jYmJveGVzQ29vcmRzLCBkZXBJZHgsIG1pblgsIG1pblksIG1heFgsIG1heFkpOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKGNvbnN0IHNhdmVJZHggb2YgdGhpcy4jc2F2ZXNTdGFjaykgewogICAgICAgIGlmIChzYXZlSWR4ICE9PSBpZHgpIHsKICAgICAgICAgIGV4cGFuZEJCb3godGhpcy4jYmJveGVzQ29vcmRzLCBzYXZlSWR4LCBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBzYXZlSWR4IG9mIHRoaXMuI21hcmtlZENvbnRlbnRTdGFjaykgewogICAgICAgIGlmIChzYXZlSWR4ICE9PSBpZHgpIHsKICAgICAgICAgIGV4cGFuZEJCb3godGhpcy4jYmJveGVzQ29vcmRzLCBzYXZlSWR4LCBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFwcmVzZXJ2ZSkgewogICAgICAgIHRoaXMuI3BlbmRpbmdEZXBlbmRlbmNpZXMuY2xlYXIoKTsKICAgICAgICB0aGlzLiNwZW5kaW5nQkJveElkeCA9IC0xOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVjb3JkU2hvd1RleHRPcGVyYXRpb24oaWR4LCBwcmVzZXJ2ZSA9IGZhbHNlKSB7CiAgICBjb25zdCBkZXBzID0gQXJyYXkuZnJvbSh0aGlzLiNwZW5kaW5nRGVwZW5kZW5jaWVzKTsKICAgIHRoaXMucmVjb3JkT3BlcmF0aW9uKGlkeCwgcHJlc2VydmUpOwogICAgdGhpcy5yZWNvcmRJbmNyZW1lbnRhbERhdGEoInNhbWVMaW5lVGV4dCIsIGlkeCk7CiAgICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBzKSB7CiAgICAgIHRoaXMucmVjb3JkSW5jcmVtZW50YWxEYXRhKCJzYW1lTGluZVRleHQiLCBkZXApOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQogIGJib3hUb0NsaXBCb3hEcm9wT3BlcmF0aW9uKGlkeCwgcHJlc2VydmUgPSBmYWxzZSkgewogICAgaWYgKHRoaXMuI3BlbmRpbmdCQm94SWR4ID09PSBpZHgpIHsKICAgICAgdGhpcy4jcGVuZGluZ0JCb3hJZHggPSAtMTsKICAgICAgdGhpcy4jY2xpcEJveFswXSA9IE1hdGgubWF4KHRoaXMuI2NsaXBCb3hbMF0sIHRoaXMuI3BlbmRpbmdCQm94WzBdKTsKICAgICAgdGhpcy4jY2xpcEJveFsxXSA9IE1hdGgubWF4KHRoaXMuI2NsaXBCb3hbMV0sIHRoaXMuI3BlbmRpbmdCQm94WzFdKTsKICAgICAgdGhpcy4jY2xpcEJveFsyXSA9IE1hdGgubWluKHRoaXMuI2NsaXBCb3hbMl0sIHRoaXMuI3BlbmRpbmdCQm94WzJdKTsKICAgICAgdGhpcy4jY2xpcEJveFszXSA9IE1hdGgubWluKHRoaXMuI2NsaXBCb3hbM10sIHRoaXMuI3BlbmRpbmdCQm94WzNdKTsKICAgICAgaWYgKCFwcmVzZXJ2ZSkgewogICAgICAgIHRoaXMuI3BlbmRpbmdEZXBlbmRlbmNpZXMuY2xlYXIoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQogIF90YWtlUGVuZGluZ0RlcGVuZGVuY2llcygpIHsKICAgIGNvbnN0IHBlbmRpbmdEZXBlbmRlbmNpZXMgPSB0aGlzLiNwZW5kaW5nRGVwZW5kZW5jaWVzOwogICAgdGhpcy4jcGVuZGluZ0RlcGVuZGVuY2llcyA9IG5ldyBTZXQoKTsKICAgIHJldHVybiBwZW5kaW5nRGVwZW5kZW5jaWVzOwogIH0KICBfZXh0cmFjdE9wZXJhdGlvbihpZHgpIHsKICAgIGNvbnN0IG9wZXJhdGlvbiA9IHRoaXMuI29wZXJhdGlvbnMuZ2V0KGlkeCk7CiAgICB0aGlzLiNvcGVyYXRpb25zLmRlbGV0ZShpZHgpOwogICAgcmV0dXJuIG9wZXJhdGlvbjsKICB9CiAgX3B1c2hQZW5kaW5nRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcykgewogICAgZm9yIChjb25zdCBkZXAgb2YgZGVwZW5kZW5jaWVzKSB7CiAgICAgIHRoaXMuI3BlbmRpbmdEZXBlbmRlbmNpZXMuYWRkKGRlcCk7CiAgICB9CiAgfQogIHRha2UoKSB7CiAgICB0aGlzLiNmb250QkJveFRydXN0d29ydGh5LmNsZWFyKCk7CiAgICByZXR1cm4gbmV3IEJCb3hSZWFkZXIodGhpcy4jYmJveGVzLCB0aGlzLiNiYm94ZXNDb29yZHMpOwogIH0KICB0YWtlRGVidWdNZXRhZGF0YSgpIHsKICAgIHJldHVybiB0aGlzLiNkZWJ1Z01ldGFkYXRhOwogIH0KfQpjbGFzcyBDYW52YXNOZXN0ZWREZXBlbmRlbmN5VHJhY2tlciB7CiAgI2RlcGVuZGVuY3lUcmFja2VyOwogICNvcElkeDsKICAjaWdub3JlQkJveGVzOwogICNuZXN0aW5nTGV2ZWwgPSAwOwogICNzYXZlc0xldmVsID0gMDsKICBjb25zdHJ1Y3RvcihkZXBlbmRlbmN5VHJhY2tlciwgb3BJZHgsIGlnbm9yZUJCb3hlcykgewogICAgaWYgKGRlcGVuZGVuY3lUcmFja2VyIGluc3RhbmNlb2YgQ2FudmFzTmVzdGVkRGVwZW5kZW5jeVRyYWNrZXIgJiYgZGVwZW5kZW5jeVRyYWNrZXIuI2lnbm9yZUJCb3hlcyA9PT0gISFpZ25vcmVCQm94ZXMpIHsKICAgICAgcmV0dXJuIGRlcGVuZGVuY3lUcmFja2VyOwogICAgfQogICAgdGhpcy4jZGVwZW5kZW5jeVRyYWNrZXIgPSBkZXBlbmRlbmN5VHJhY2tlcjsKICAgIHRoaXMuI29wSWR4ID0gb3BJZHg7CiAgICB0aGlzLiNpZ25vcmVCQm94ZXMgPSAhIWlnbm9yZUJCb3hlczsKICB9CiAgZ3Jvd09wZXJhdGlvbnNDb3VudCgpIHsKICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWFjaGFibGUiKTsKICB9CiAgc2F2ZShvcElkeCkgewogICAgdGhpcy4jc2F2ZXNMZXZlbCsrOwogICAgdGhpcy4jZGVwZW5kZW5jeVRyYWNrZXIuc2F2ZSh0aGlzLiNvcElkeCk7CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVzdG9yZShvcElkeCkgewogICAgaWYgKHRoaXMuI3NhdmVzTGV2ZWwgPiAwKSB7CiAgICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLnJlc3RvcmUodGhpcy4jb3BJZHgpOwogICAgICB0aGlzLiNzYXZlc0xldmVsLS07CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVjb3JkT3Blbk1hcmtlcihpZHgpIHsKICAgIHRoaXMuI25lc3RpbmdMZXZlbCsrOwogICAgcmV0dXJuIHRoaXM7CiAgfQogIGdldE9wZW5NYXJrZXIoKSB7CiAgICByZXR1cm4gdGhpcy4jbmVzdGluZ0xldmVsID4gMCA/IHRoaXMuI29wSWR4IDogdGhpcy4jZGVwZW5kZW5jeVRyYWNrZXIuZ2V0T3Blbk1hcmtlcigpOwogIH0KICByZWNvcmRDbG9zZU1hcmtlcihpZHgpIHsKICAgIHRoaXMuI25lc3RpbmdMZXZlbC0tOwogICAgcmV0dXJuIHRoaXM7CiAgfQogIGJlZ2luTWFya2VkQ29udGVudChvcElkeCkgewogICAgcmV0dXJuIHRoaXM7CiAgfQogIGVuZE1hcmtlZENvbnRlbnQob3BJZHgpIHsKICAgIHJldHVybiB0aGlzOwogIH0KICBwdXNoQmFzZVRyYW5zZm9ybShjdHgpIHsKICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLnB1c2hCYXNlVHJhbnNmb3JtKGN0eCk7CiAgICByZXR1cm4gdGhpczsKICB9CiAgcG9wQmFzZVRyYW5zZm9ybSgpIHsKICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLnBvcEJhc2VUcmFuc2Zvcm0oKTsKICAgIHJldHVybiB0aGlzOwogIH0KICByZWNvcmRTaW1wbGVEYXRhKG5hbWUsIGlkeCkgewogICAgdGhpcy4jZGVwZW5kZW5jeVRyYWNrZXIucmVjb3JkU2ltcGxlRGF0YShuYW1lLCB0aGlzLiNvcElkeCk7CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVjb3JkSW5jcmVtZW50YWxEYXRhKG5hbWUsIGlkeCkgewogICAgdGhpcy4jZGVwZW5kZW5jeVRyYWNrZXIucmVjb3JkSW5jcmVtZW50YWxEYXRhKG5hbWUsIHRoaXMuI29wSWR4KTsKICAgIHJldHVybiB0aGlzOwogIH0KICByZXNldEluY3JlbWVudGFsRGF0YShuYW1lLCBpZHgpIHsKICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLnJlc2V0SW5jcmVtZW50YWxEYXRhKG5hbWUsIHRoaXMuI29wSWR4KTsKICAgIHJldHVybiB0aGlzOwogIH0KICByZWNvcmROYW1lZERhdGEobmFtZSwgaWR4KSB7CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVjb3JkU2ltcGxlRGF0YUZyb21OYW1lZChuYW1lLCBkZXBOYW1lLCBmYWxsYmFja0lkeCkgewogICAgdGhpcy4jZGVwZW5kZW5jeVRyYWNrZXIucmVjb3JkU2ltcGxlRGF0YUZyb21OYW1lZChuYW1lLCBkZXBOYW1lLCB0aGlzLiNvcElkeCk7CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVjb3JkRnV0dXJlRm9yY2VkRGVwZW5kZW5jeShuYW1lLCBpZHgpIHsKICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLnJlY29yZEZ1dHVyZUZvcmNlZERlcGVuZGVuY3kobmFtZSwgdGhpcy4jb3BJZHgpOwogICAgcmV0dXJuIHRoaXM7CiAgfQogIGluaGVyaXRTaW1wbGVEYXRhQXNGdXR1cmVGb3JjZWREZXBlbmRlbmNpZXMobmFtZXMpIHsKICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLmluaGVyaXRTaW1wbGVEYXRhQXNGdXR1cmVGb3JjZWREZXBlbmRlbmNpZXMobmFtZXMpOwogICAgcmV0dXJuIHRoaXM7CiAgfQogIGluaGVyaXRQZW5kaW5nRGVwZW5kZW5jaWVzQXNGdXR1cmVGb3JjZWREZXBlbmRlbmNpZXMoKSB7CiAgICB0aGlzLiNkZXBlbmRlbmN5VHJhY2tlci5pbmhlcml0UGVuZGluZ0RlcGVuZGVuY2llc0FzRnV0dXJlRm9yY2VkRGVwZW5kZW5jaWVzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVzZXRCQm94KGlkeCkgewogICAgaWYgKCF0aGlzLiNpZ25vcmVCQm94ZXMpIHsKICAgICAgdGhpcy4jZGVwZW5kZW5jeVRyYWNrZXIucmVzZXRCQm94KHRoaXMuI29wSWR4KTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KICByZWNvcmRDbGlwQm94KGlkeCwgY3R4LCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZKSB7CiAgICBpZiAoIXRoaXMuI2lnbm9yZUJCb3hlcykgewogICAgICB0aGlzLiNkZXBlbmRlbmN5VHJhY2tlci5yZWNvcmRDbGlwQm94KHRoaXMuI29wSWR4LCBjdHgsIG1pblgsIG1heFgsIG1pblksIG1heFkpOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQogIHJlY29yZEJCb3goaWR4LCBjdHgsIG1pblgsIG1heFgsIG1pblksIG1heFkpIHsKICAgIGlmICghdGhpcy4jaWdub3JlQkJveGVzKSB7CiAgICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLnJlY29yZEJCb3godGhpcy4jb3BJZHgsIGN0eCwgbWluWCwgbWF4WCwgbWluWSwgbWF4WSk7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVjb3JkQ2hhcmFjdGVyQkJveChpZHgsIGN0eCwgZm9udCwgc2NhbGUsIHgsIHksIGdldE1lYXN1cmUpIHsKICAgIGlmICghdGhpcy4jaWdub3JlQkJveGVzKSB7CiAgICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLnJlY29yZENoYXJhY3RlckJCb3godGhpcy4jb3BJZHgsIGN0eCwgZm9udCwgc2NhbGUsIHgsIHksIGdldE1lYXN1cmUpOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQogIHJlY29yZEZ1bGxQYWdlQkJveChpZHgpIHsKICAgIGlmICghdGhpcy4jaWdub3JlQkJveGVzKSB7CiAgICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLnJlY29yZEZ1bGxQYWdlQkJveCh0aGlzLiNvcElkeCk7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CiAgZ2V0U2ltcGxlSW5kZXgoZGVwZW5kZW5jeU5hbWUpIHsKICAgIHJldHVybiB0aGlzLiNkZXBlbmRlbmN5VHJhY2tlci5nZXRTaW1wbGVJbmRleChkZXBlbmRlbmN5TmFtZSk7CiAgfQogIHJlY29yZERlcGVuZGVuY2llcyhpZHgsIGRlcGVuZGVuY3lOYW1lcykgewogICAgdGhpcy4jZGVwZW5kZW5jeVRyYWNrZXIucmVjb3JkRGVwZW5kZW5jaWVzKHRoaXMuI29wSWR4LCBkZXBlbmRlbmN5TmFtZXMpOwogICAgcmV0dXJuIHRoaXM7CiAgfQogIHJlY29yZE5hbWVkRGVwZW5kZW5jeShpZHgsIG5hbWUpIHsKICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLnJlY29yZE5hbWVkRGVwZW5kZW5jeSh0aGlzLiNvcElkeCwgbmFtZSk7CiAgICByZXR1cm4gdGhpczsKICB9CiAgcmVjb3JkT3BlcmF0aW9uKGlkeCkgewogICAgdGhpcy4jZGVwZW5kZW5jeVRyYWNrZXIucmVjb3JkT3BlcmF0aW9uKHRoaXMuI29wSWR4LCB0cnVlKTsKICAgIHJldHVybiB0aGlzOwogIH0KICByZWNvcmRTaG93VGV4dE9wZXJhdGlvbihpZHgpIHsKICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLnJlY29yZFNob3dUZXh0T3BlcmF0aW9uKHRoaXMuI29wSWR4LCB0cnVlKTsKICAgIHJldHVybiB0aGlzOwogIH0KICBiYm94VG9DbGlwQm94RHJvcE9wZXJhdGlvbihpZHgpIHsKICAgIGlmICghdGhpcy4jaWdub3JlQkJveGVzKSB7CiAgICAgIHRoaXMuI2RlcGVuZGVuY3lUcmFja2VyLmJib3hUb0NsaXBCb3hEcm9wT3BlcmF0aW9uKHRoaXMuI29wSWR4LCB0cnVlKTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KICB0YWtlKCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJVbnJlYWNoYWJsZSIpOwogIH0KICB0YWtlRGVidWdNZXRhZGF0YSgpIHsKICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWFjaGFibGUiKTsKICB9Cn0KY29uc3QgRGVwZW5kZW5jaWVzID0gewogIHN0cm9rZTogWyJwYXRoIiwgInRyYW5zZm9ybSIsICJmaWx0ZXIiLCAic3Ryb2tlQ29sb3IiLCAic3Ryb2tlQWxwaGEiLCAibGluZVdpZHRoIiwgImxpbmVDYXAiLCAibGluZUpvaW4iLCAibWl0ZXJMaW1pdCIsICJkYXNoIl0sCiAgZmlsbDogWyJwYXRoIiwgInRyYW5zZm9ybSIsICJmaWx0ZXIiLCAiZmlsbENvbG9yIiwgImZpbGxBbHBoYSIsICJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCAiU01hc2siXSwKICBpbWFnZVhPYmplY3Q6IFsidHJhbnNmb3JtIiwgIlNNYXNrIiwgImZpbHRlciIsICJmaWxsQWxwaGEiLCAic3Ryb2tlQWxwaGEiLCAiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIl0sCiAgcmF3RmlsbFBhdGg6IFsiZmlsdGVyIiwgImZpbGxDb2xvciIsICJmaWxsQWxwaGEiXSwKICBzaG93VGV4dDogWyJ0cmFuc2Zvcm0iLCAibGVhZGluZyIsICJjaGFyU3BhY2luZyIsICJ3b3JkU3BhY2luZyIsICJoU2NhbGUiLCAidGV4dFJpc2UiLCAibW92ZVRleHQiLCAidGV4dE1hdHJpeCIsICJmb250IiwgImZvbnRPYmoiLCAiZmlsdGVyIiwgImZpbGxDb2xvciIsICJ0ZXh0UmVuZGVyaW5nTW9kZSIsICJTTWFzayIsICJmaWxsQWxwaGEiLCAic3Ryb2tlQWxwaGEiLCAiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIiwgInNhbWVMaW5lVGV4dCJdLAogIHRyYW5zZm9ybTogWyJ0cmFuc2Zvcm0iXSwKICB0cmFuc2Zvcm1BbmRGaWxsOiBbInRyYW5zZm9ybSIsICJmaWxsQ29sb3IiXQp9OwoKOy8vIC4vc3JjL2Rpc3BsYXkvcGF0dGVybl9oZWxwZXIuanMKCgpjb25zdCBQYXRoVHlwZSA9IHsKICBGSUxMOiAiRmlsbCIsCiAgU1RST0tFOiAiU3Ryb2tlIiwKICBTSEFESU5HOiAiU2hhZGluZyIKfTsKZnVuY3Rpb24gYXBwbHlCb3VuZGluZ0JveChjdHgsIGJib3gpIHsKICBpZiAoIWJib3gpIHsKICAgIHJldHVybjsKICB9CiAgY29uc3Qgd2lkdGggPSBiYm94WzJdIC0gYmJveFswXTsKICBjb25zdCBoZWlnaHQgPSBiYm94WzNdIC0gYmJveFsxXTsKICBjb25zdCByZWdpb24gPSBuZXcgUGF0aDJEKCk7CiAgcmVnaW9uLnJlY3QoYmJveFswXSwgYmJveFsxXSwgd2lkdGgsIGhlaWdodCk7CiAgY3R4LmNsaXAocmVnaW9uKTsKfQpjbGFzcyBCYXNlU2hhZGluZ1BhdHRlcm4gewogIGlzTW9kaWZ5aW5nQ3VycmVudFRyYW5zZm9ybSgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZ2V0UGF0dGVybigpIHsKICAgIHVucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGdldFBhdHRlcm5gIGNhbGxlZC4iKTsKICB9Cn0KY2xhc3MgUmFkaWFsQXhpYWxTaGFkaW5nUGF0dGVybiBleHRlbmRzIEJhc2VTaGFkaW5nUGF0dGVybiB7CiAgY29uc3RydWN0b3IoSVIpIHsKICAgIHN1cGVyKCk7CiAgICB0aGlzLl90eXBlID0gSVJbMV07CiAgICB0aGlzLl9iYm94ID0gSVJbMl07CiAgICB0aGlzLl9jb2xvclN0b3BzID0gSVJbM107CiAgICB0aGlzLl9wMCA9IElSWzRdOwogICAgdGhpcy5fcDEgPSBJUls1XTsKICAgIHRoaXMuX3IwID0gSVJbNl07CiAgICB0aGlzLl9yMSA9IElSWzddOwogICAgdGhpcy5tYXRyaXggPSBudWxsOwogIH0KICBfY3JlYXRlR3JhZGllbnQoY3R4KSB7CiAgICBsZXQgZ3JhZDsKICAgIGlmICh0aGlzLl90eXBlID09PSAiYXhpYWwiKSB7CiAgICAgIGdyYWQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQodGhpcy5fcDBbMF0sIHRoaXMuX3AwWzFdLCB0aGlzLl9wMVswXSwgdGhpcy5fcDFbMV0pOwogICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSAicmFkaWFsIikgewogICAgICBncmFkID0gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHRoaXMuX3AwWzBdLCB0aGlzLl9wMFsxXSwgdGhpcy5fcjAsIHRoaXMuX3AxWzBdLCB0aGlzLl9wMVsxXSwgdGhpcy5fcjEpOwogICAgfQogICAgZm9yIChjb25zdCBjb2xvclN0b3Agb2YgdGhpcy5fY29sb3JTdG9wcykgewogICAgICBncmFkLmFkZENvbG9yU3RvcChjb2xvclN0b3BbMF0sIGNvbG9yU3RvcFsxXSk7CiAgICB9CiAgICByZXR1cm4gZ3JhZDsKICB9CiAgZ2V0UGF0dGVybihjdHgsIG93bmVyLCBpbnZlcnNlLCBwYXRoVHlwZSkgewogICAgbGV0IHBhdHRlcm47CiAgICBpZiAocGF0aFR5cGUgPT09IFBhdGhUeXBlLlNUUk9LRSB8fCBwYXRoVHlwZSA9PT0gUGF0aFR5cGUuRklMTCkgewogICAgICBjb25zdCBvd25lckJCb3ggPSBvd25lci5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3gocGF0aFR5cGUsIGdldEN1cnJlbnRUcmFuc2Zvcm0oY3R4KSkgfHwgWzAsIDAsIDAsIDBdOwogICAgICBjb25zdCB3aWR0aCA9IE1hdGguY2VpbChvd25lckJCb3hbMl0gLSBvd25lckJCb3hbMF0pIHx8IDE7CiAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGguY2VpbChvd25lckJCb3hbM10gLSBvd25lckJCb3hbMV0pIHx8IDE7CiAgICAgIGNvbnN0IHRtcENhbnZhcyA9IG93bmVyLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygicGF0dGVybiIsIHdpZHRoLCBoZWlnaHQpOwogICAgICBjb25zdCB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDsKICAgICAgdG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0bXBDdHguY2FudmFzLndpZHRoLCB0bXBDdHguY2FudmFzLmhlaWdodCk7CiAgICAgIHRtcEN0eC5iZWdpblBhdGgoKTsKICAgICAgdG1wQ3R4LnJlY3QoMCwgMCwgdG1wQ3R4LmNhbnZhcy53aWR0aCwgdG1wQ3R4LmNhbnZhcy5oZWlnaHQpOwogICAgICB0bXBDdHgudHJhbnNsYXRlKC1vd25lckJCb3hbMF0sIC1vd25lckJCb3hbMV0pOwogICAgICBpbnZlcnNlID0gVXRpbC50cmFuc2Zvcm0oaW52ZXJzZSwgWzEsIDAsIDAsIDEsIG93bmVyQkJveFswXSwgb3duZXJCQm94WzFdXSk7CiAgICAgIHRtcEN0eC50cmFuc2Zvcm0oLi4ub3duZXIuYmFzZVRyYW5zZm9ybSk7CiAgICAgIGlmICh0aGlzLm1hdHJpeCkgewogICAgICAgIHRtcEN0eC50cmFuc2Zvcm0oLi4udGhpcy5tYXRyaXgpOwogICAgICB9CiAgICAgIGFwcGx5Qm91bmRpbmdCb3godG1wQ3R4LCB0aGlzLl9iYm94KTsKICAgICAgdG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuX2NyZWF0ZUdyYWRpZW50KHRtcEN0eCk7CiAgICAgIHRtcEN0eC5maWxsKCk7CiAgICAgIHBhdHRlcm4gPSBjdHguY3JlYXRlUGF0dGVybih0bXBDYW52YXMuY2FudmFzLCAibm8tcmVwZWF0Iik7CiAgICAgIGNvbnN0IGRvbU1hdHJpeCA9IG5ldyBET01NYXRyaXgoaW52ZXJzZSk7CiAgICAgIHBhdHRlcm4uc2V0VHJhbnNmb3JtKGRvbU1hdHJpeCk7CiAgICB9IGVsc2UgewogICAgICBhcHBseUJvdW5kaW5nQm94KGN0eCwgdGhpcy5fYmJveCk7CiAgICAgIHBhdHRlcm4gPSB0aGlzLl9jcmVhdGVHcmFkaWVudChjdHgpOwogICAgfQogICAgcmV0dXJuIHBhdHRlcm47CiAgfQp9CmZ1bmN0aW9uIGRyYXdUcmlhbmdsZShkYXRhLCBjb250ZXh0LCBwMSwgcDIsIHAzLCBjMSwgYzIsIGMzKSB7CiAgY29uc3QgY29vcmRzID0gY29udGV4dC5jb29yZHMsCiAgICBjb2xvcnMgPSBjb250ZXh0LmNvbG9yczsKICBjb25zdCBieXRlcyA9IGRhdGEuZGF0YSwKICAgIHJvd1NpemUgPSBkYXRhLndpZHRoICogNDsKICBsZXQgdG1wOwogIGlmIChjb29yZHNbcDEgKyAxXSA+IGNvb3Jkc1twMiArIDFdKSB7CiAgICB0bXAgPSBwMTsKICAgIHAxID0gcDI7CiAgICBwMiA9IHRtcDsKICAgIHRtcCA9IGMxOwogICAgYzEgPSBjMjsKICAgIGMyID0gdG1wOwogIH0KICBpZiAoY29vcmRzW3AyICsgMV0gPiBjb29yZHNbcDMgKyAxXSkgewogICAgdG1wID0gcDI7CiAgICBwMiA9IHAzOwogICAgcDMgPSB0bXA7CiAgICB0bXAgPSBjMjsKICAgIGMyID0gYzM7CiAgICBjMyA9IHRtcDsKICB9CiAgaWYgKGNvb3Jkc1twMSArIDFdID4gY29vcmRzW3AyICsgMV0pIHsKICAgIHRtcCA9IHAxOwogICAgcDEgPSBwMjsKICAgIHAyID0gdG1wOwogICAgdG1wID0gYzE7CiAgICBjMSA9IGMyOwogICAgYzIgPSB0bXA7CiAgfQogIGNvbnN0IHgxID0gKGNvb3Jkc1twMV0gKyBjb250ZXh0Lm9mZnNldFgpICogY29udGV4dC5zY2FsZVg7CiAgY29uc3QgeTEgPSAoY29vcmRzW3AxICsgMV0gKyBjb250ZXh0Lm9mZnNldFkpICogY29udGV4dC5zY2FsZVk7CiAgY29uc3QgeDIgPSAoY29vcmRzW3AyXSArIGNvbnRleHQub2Zmc2V0WCkgKiBjb250ZXh0LnNjYWxlWDsKICBjb25zdCB5MiA9IChjb29yZHNbcDIgKyAxXSArIGNvbnRleHQub2Zmc2V0WSkgKiBjb250ZXh0LnNjYWxlWTsKICBjb25zdCB4MyA9IChjb29yZHNbcDNdICsgY29udGV4dC5vZmZzZXRYKSAqIGNvbnRleHQuc2NhbGVYOwogIGNvbnN0IHkzID0gKGNvb3Jkc1twMyArIDFdICsgY29udGV4dC5vZmZzZXRZKSAqIGNvbnRleHQuc2NhbGVZOwogIGlmICh5MSA+PSB5MykgewogICAgcmV0dXJuOwogIH0KICBjb25zdCBjMXIgPSBjb2xvcnNbYzFdLAogICAgYzFnID0gY29sb3JzW2MxICsgMV0sCiAgICBjMWIgPSBjb2xvcnNbYzEgKyAyXTsKICBjb25zdCBjMnIgPSBjb2xvcnNbYzJdLAogICAgYzJnID0gY29sb3JzW2MyICsgMV0sCiAgICBjMmIgPSBjb2xvcnNbYzIgKyAyXTsKICBjb25zdCBjM3IgPSBjb2xvcnNbYzNdLAogICAgYzNnID0gY29sb3JzW2MzICsgMV0sCiAgICBjM2IgPSBjb2xvcnNbYzMgKyAyXTsKICBjb25zdCBtaW5ZID0gTWF0aC5yb3VuZCh5MSksCiAgICBtYXhZID0gTWF0aC5yb3VuZCh5Myk7CiAgbGV0IHhhLCBjYXIsIGNhZywgY2FiOwogIGxldCB4YiwgY2JyLCBjYmcsIGNiYjsKICBmb3IgKGxldCB5ID0gbWluWTsgeSA8PSBtYXhZOyB5KyspIHsKICAgIGlmICh5IDwgeTIpIHsKICAgICAgY29uc3QgayA9IHkgPCB5MSA/IDAgOiAoeTEgLSB5KSAvICh5MSAtIHkyKTsKICAgICAgeGEgPSB4MSAtICh4MSAtIHgyKSAqIGs7CiAgICAgIGNhciA9IGMxciAtIChjMXIgLSBjMnIpICogazsKICAgICAgY2FnID0gYzFnIC0gKGMxZyAtIGMyZykgKiBrOwogICAgICBjYWIgPSBjMWIgLSAoYzFiIC0gYzJiKSAqIGs7CiAgICB9IGVsc2UgewogICAgICBsZXQgazsKICAgICAgaWYgKHkgPiB5MykgewogICAgICAgIGsgPSAxOwogICAgICB9IGVsc2UgaWYgKHkyID09PSB5MykgewogICAgICAgIGsgPSAwOwogICAgICB9IGVsc2UgewogICAgICAgIGsgPSAoeTIgLSB5KSAvICh5MiAtIHkzKTsKICAgICAgfQogICAgICB4YSA9IHgyIC0gKHgyIC0geDMpICogazsKICAgICAgY2FyID0gYzJyIC0gKGMyciAtIGMzcikgKiBrOwogICAgICBjYWcgPSBjMmcgLSAoYzJnIC0gYzNnKSAqIGs7CiAgICAgIGNhYiA9IGMyYiAtIChjMmIgLSBjM2IpICogazsKICAgIH0KICAgIGxldCBrOwogICAgaWYgKHkgPCB5MSkgewogICAgICBrID0gMDsKICAgIH0gZWxzZSBpZiAoeSA+IHkzKSB7CiAgICAgIGsgPSAxOwogICAgfSBlbHNlIHsKICAgICAgayA9ICh5MSAtIHkpIC8gKHkxIC0geTMpOwogICAgfQogICAgeGIgPSB4MSAtICh4MSAtIHgzKSAqIGs7CiAgICBjYnIgPSBjMXIgLSAoYzFyIC0gYzNyKSAqIGs7CiAgICBjYmcgPSBjMWcgLSAoYzFnIC0gYzNnKSAqIGs7CiAgICBjYmIgPSBjMWIgLSAoYzFiIC0gYzNiKSAqIGs7CiAgICBjb25zdCB4MV8gPSBNYXRoLnJvdW5kKE1hdGgubWluKHhhLCB4YikpOwogICAgY29uc3QgeDJfID0gTWF0aC5yb3VuZChNYXRoLm1heCh4YSwgeGIpKTsKICAgIGxldCBqID0gcm93U2l6ZSAqIHkgKyB4MV8gKiA0OwogICAgZm9yIChsZXQgeCA9IHgxXzsgeCA8PSB4Ml87IHgrKykgewogICAgICBrID0gKHhhIC0geCkgLyAoeGEgLSB4Yik7CiAgICAgIGlmIChrIDwgMCkgewogICAgICAgIGsgPSAwOwogICAgICB9IGVsc2UgaWYgKGsgPiAxKSB7CiAgICAgICAgayA9IDE7CiAgICAgIH0KICAgICAgYnl0ZXNbaisrXSA9IGNhciAtIChjYXIgLSBjYnIpICogayB8IDA7CiAgICAgIGJ5dGVzW2orK10gPSBjYWcgLSAoY2FnIC0gY2JnKSAqIGsgfCAwOwogICAgICBieXRlc1tqKytdID0gY2FiIC0gKGNhYiAtIGNiYikgKiBrIHwgMDsKICAgICAgYnl0ZXNbaisrXSA9IDI1NTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gZHJhd0ZpZ3VyZShkYXRhLCBmaWd1cmUsIGNvbnRleHQpIHsKICBjb25zdCBwcyA9IGZpZ3VyZS5jb29yZHM7CiAgY29uc3QgY3MgPSBmaWd1cmUuY29sb3JzOwogIGxldCBpLCBpaTsKICBzd2l0Y2ggKGZpZ3VyZS50eXBlKSB7CiAgICBjYXNlIE1lc2hGaWd1cmVUeXBlLkxBVFRJQ0U6CiAgICAgIGNvbnN0IHZlcnRpY2VzUGVyUm93ID0gZmlndXJlLnZlcnRpY2VzUGVyUm93OwogICAgICBjb25zdCByb3dzID0gTWF0aC5mbG9vcihwcy5sZW5ndGggLyB2ZXJ0aWNlc1BlclJvdykgLSAxOwogICAgICBjb25zdCBjb2xzID0gdmVydGljZXNQZXJSb3cgLSAxOwogICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAgICAgICAgbGV0IHEgPSBpICogdmVydGljZXNQZXJSb3c7CiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyssIHErKykgewogICAgICAgICAgZHJhd1RyaWFuZ2xlKGRhdGEsIGNvbnRleHQsIHBzW3FdLCBwc1txICsgMV0sIHBzW3EgKyB2ZXJ0aWNlc1BlclJvd10sIGNzW3FdLCBjc1txICsgMV0sIGNzW3EgKyB2ZXJ0aWNlc1BlclJvd10pOwogICAgICAgICAgZHJhd1RyaWFuZ2xlKGRhdGEsIGNvbnRleHQsIHBzW3EgKyB2ZXJ0aWNlc1BlclJvdyArIDFdLCBwc1txICsgMV0sIHBzW3EgKyB2ZXJ0aWNlc1BlclJvd10sIGNzW3EgKyB2ZXJ0aWNlc1BlclJvdyArIDFdLCBjc1txICsgMV0sIGNzW3EgKyB2ZXJ0aWNlc1BlclJvd10pOwogICAgICAgIH0KICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgTWVzaEZpZ3VyZVR5cGUuVFJJQU5HTEVTOgogICAgICBmb3IgKGkgPSAwLCBpaSA9IHBzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDMpIHsKICAgICAgICBkcmF3VHJpYW5nbGUoZGF0YSwgY29udGV4dCwgcHNbaV0sIHBzW2kgKyAxXSwgcHNbaSArIDJdLCBjc1tpXSwgY3NbaSArIDFdLCBjc1tpICsgMl0pOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGZpZ3VyZSIpOwogIH0KfQpjbGFzcyBNZXNoU2hhZGluZ1BhdHRlcm4gZXh0ZW5kcyBCYXNlU2hhZGluZ1BhdHRlcm4gewogIGNvbnN0cnVjdG9yKElSKSB7CiAgICBzdXBlcigpOwogICAgdGhpcy5fY29vcmRzID0gSVJbMl07CiAgICB0aGlzLl9jb2xvcnMgPSBJUlszXTsKICAgIHRoaXMuX2ZpZ3VyZXMgPSBJUls0XTsKICAgIHRoaXMuX2JvdW5kcyA9IElSWzVdOwogICAgdGhpcy5fYmJveCA9IElSWzZdOwogICAgdGhpcy5fYmFja2dyb3VuZCA9IElSWzddOwogICAgdGhpcy5tYXRyaXggPSBudWxsOwogIH0KICBfY3JlYXRlTWVzaENhbnZhcyhjb21iaW5lZFNjYWxlLCBiYWNrZ3JvdW5kQ29sb3IsIGNhY2hlZENhbnZhc2VzKSB7CiAgICBjb25zdCBFWFBFQ1RFRF9TQ0FMRSA9IDEuMTsKICAgIGNvbnN0IE1BWF9QQVRURVJOX1NJWkUgPSAzMDAwOwogICAgY29uc3QgQk9SREVSX1NJWkUgPSAyOwogICAgY29uc3Qgb2Zmc2V0WCA9IE1hdGguZmxvb3IodGhpcy5fYm91bmRzWzBdKTsKICAgIGNvbnN0IG9mZnNldFkgPSBNYXRoLmZsb29yKHRoaXMuX2JvdW5kc1sxXSk7CiAgICBjb25zdCBib3VuZHNXaWR0aCA9IE1hdGguY2VpbCh0aGlzLl9ib3VuZHNbMl0pIC0gb2Zmc2V0WDsKICAgIGNvbnN0IGJvdW5kc0hlaWdodCA9IE1hdGguY2VpbCh0aGlzLl9ib3VuZHNbM10pIC0gb2Zmc2V0WTsKICAgIGNvbnN0IHdpZHRoID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKGJvdW5kc1dpZHRoICogY29tYmluZWRTY2FsZVswXSAqIEVYUEVDVEVEX1NDQUxFKSksIE1BWF9QQVRURVJOX1NJWkUpOwogICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKGJvdW5kc0hlaWdodCAqIGNvbWJpbmVkU2NhbGVbMV0gKiBFWFBFQ1RFRF9TQ0FMRSkpLCBNQVhfUEFUVEVSTl9TSVpFKTsKICAgIGNvbnN0IHNjYWxlWCA9IGJvdW5kc1dpZHRoIC8gd2lkdGg7CiAgICBjb25zdCBzY2FsZVkgPSBib3VuZHNIZWlnaHQgLyBoZWlnaHQ7CiAgICBjb25zdCBjb250ZXh0ID0gewogICAgICBjb29yZHM6IHRoaXMuX2Nvb3JkcywKICAgICAgY29sb3JzOiB0aGlzLl9jb2xvcnMsCiAgICAgIG9mZnNldFg6IC1vZmZzZXRYLAogICAgICBvZmZzZXRZOiAtb2Zmc2V0WSwKICAgICAgc2NhbGVYOiAxIC8gc2NhbGVYLAogICAgICBzY2FsZVk6IDEgLyBzY2FsZVkKICAgIH07CiAgICBjb25zdCBwYWRkZWRXaWR0aCA9IHdpZHRoICsgQk9SREVSX1NJWkUgKiAyOwogICAgY29uc3QgcGFkZGVkSGVpZ2h0ID0gaGVpZ2h0ICsgQk9SREVSX1NJWkUgKiAyOwogICAgY29uc3QgdG1wQ2FudmFzID0gY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJtZXNoIiwgcGFkZGVkV2lkdGgsIHBhZGRlZEhlaWdodCk7CiAgICBjb25zdCB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDsKICAgIGNvbnN0IGRhdGEgPSB0bXBDdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpOwogICAgaWYgKGJhY2tncm91bmRDb2xvcikgewogICAgICBjb25zdCBieXRlcyA9IGRhdGEuZGF0YTsKICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYnl0ZXMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gNCkgewogICAgICAgIGJ5dGVzW2ldID0gYmFja2dyb3VuZENvbG9yWzBdOwogICAgICAgIGJ5dGVzW2kgKyAxXSA9IGJhY2tncm91bmRDb2xvclsxXTsKICAgICAgICBieXRlc1tpICsgMl0gPSBiYWNrZ3JvdW5kQ29sb3JbMl07CiAgICAgICAgYnl0ZXNbaSArIDNdID0gMjU1OwogICAgICB9CiAgICB9CiAgICBmb3IgKGNvbnN0IGZpZ3VyZSBvZiB0aGlzLl9maWd1cmVzKSB7CiAgICAgIGRyYXdGaWd1cmUoZGF0YSwgZmlndXJlLCBjb250ZXh0KTsKICAgIH0KICAgIHRtcEN0eC5wdXRJbWFnZURhdGEoZGF0YSwgQk9SREVSX1NJWkUsIEJPUkRFUl9TSVpFKTsKICAgIGNvbnN0IGNhbnZhcyA9IHRtcENhbnZhcy5jYW52YXM7CiAgICByZXR1cm4gewogICAgICBjYW52YXMsCiAgICAgIG9mZnNldFg6IG9mZnNldFggLSBCT1JERVJfU0laRSAqIHNjYWxlWCwKICAgICAgb2Zmc2V0WTogb2Zmc2V0WSAtIEJPUkRFUl9TSVpFICogc2NhbGVZLAogICAgICBzY2FsZVgsCiAgICAgIHNjYWxlWQogICAgfTsKICB9CiAgaXNNb2RpZnlpbmdDdXJyZW50VHJhbnNmb3JtKCkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGdldFBhdHRlcm4oY3R4LCBvd25lciwgaW52ZXJzZSwgcGF0aFR5cGUpIHsKICAgIGFwcGx5Qm91bmRpbmdCb3goY3R4LCB0aGlzLl9iYm94KTsKICAgIGNvbnN0IHNjYWxlID0gbmV3IEZsb2F0MzJBcnJheSgyKTsKICAgIGlmIChwYXRoVHlwZSA9PT0gUGF0aFR5cGUuU0hBRElORykgewogICAgICBVdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGdldEN1cnJlbnRUcmFuc2Zvcm0oY3R4KSwgc2NhbGUpOwogICAgfSBlbHNlIGlmICh0aGlzLm1hdHJpeCkgewogICAgICBVdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMubWF0cml4LCBzY2FsZSk7CiAgICAgIGNvbnN0IFttYXRyaXhTY2FsZVgsIG1hdHJpeFNjYWxlWV0gPSBzY2FsZTsKICAgICAgVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShvd25lci5iYXNlVHJhbnNmb3JtLCBzY2FsZSk7CiAgICAgIHNjYWxlWzBdICo9IG1hdHJpeFNjYWxlWDsKICAgICAgc2NhbGVbMV0gKj0gbWF0cml4U2NhbGVZOwogICAgfSBlbHNlIHsKICAgICAgVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShvd25lci5iYXNlVHJhbnNmb3JtLCBzY2FsZSk7CiAgICB9CiAgICBjb25zdCB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzID0gdGhpcy5fY3JlYXRlTWVzaENhbnZhcyhzY2FsZSwgcGF0aFR5cGUgPT09IFBhdGhUeXBlLlNIQURJTkcgPyBudWxsIDogdGhpcy5fYmFja2dyb3VuZCwgb3duZXIuY2FjaGVkQ2FudmFzZXMpOwogICAgaWYgKHBhdGhUeXBlICE9PSBQYXRoVHlwZS5TSEFESU5HKSB7CiAgICAgIGN0eC5zZXRUcmFuc2Zvcm0oLi4ub3duZXIuYmFzZVRyYW5zZm9ybSk7CiAgICAgIGlmICh0aGlzLm1hdHJpeCkgewogICAgICAgIGN0eC50cmFuc2Zvcm0oLi4udGhpcy5tYXRyaXgpOwogICAgICB9CiAgICB9CiAgICBjdHgudHJhbnNsYXRlKHRlbXBvcmFyeVBhdHRlcm5DYW52YXMub2Zmc2V0WCwgdGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5vZmZzZXRZKTsKICAgIGN0eC5zY2FsZSh0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLnNjYWxlWCwgdGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5zY2FsZVkpOwogICAgcmV0dXJuIGN0eC5jcmVhdGVQYXR0ZXJuKHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuY2FudmFzLCAibm8tcmVwZWF0Iik7CiAgfQp9CmNsYXNzIER1bW15U2hhZGluZ1BhdHRlcm4gZXh0ZW5kcyBCYXNlU2hhZGluZ1BhdHRlcm4gewogIGdldFBhdHRlcm4oKSB7CiAgICByZXR1cm4gImhvdHBpbmsiOwogIH0KfQpmdW5jdGlvbiBnZXRTaGFkaW5nUGF0dGVybihJUikgewogIHN3aXRjaCAoSVJbMF0pIHsKICAgIGNhc2UgIlJhZGlhbEF4aWFsIjoKICAgICAgcmV0dXJuIG5ldyBSYWRpYWxBeGlhbFNoYWRpbmdQYXR0ZXJuKElSKTsKICAgIGNhc2UgIk1lc2giOgogICAgICByZXR1cm4gbmV3IE1lc2hTaGFkaW5nUGF0dGVybihJUik7CiAgICBjYXNlICJEdW1teSI6CiAgICAgIHJldHVybiBuZXcgRHVtbXlTaGFkaW5nUGF0dGVybigpOwogIH0KICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gSVIgdHlwZTogJHtJUlswXX1gKTsKfQpjb25zdCBQYWludFR5cGUgPSB7CiAgQ09MT1JFRDogMSwKICBVTkNPTE9SRUQ6IDIKfTsKY2xhc3MgVGlsaW5nUGF0dGVybiB7CiAgc3RhdGljIE1BWF9QQVRURVJOX1NJWkUgPSAzMDAwOwogIGNvbnN0cnVjdG9yKElSLCBjdHgsIGNhbnZhc0dyYXBoaWNzRmFjdG9yeSwgYmFzZVRyYW5zZm9ybSkgewogICAgdGhpcy5jb2xvciA9IElSWzFdOwogICAgdGhpcy5vcGVyYXRvckxpc3QgPSBJUlsyXTsKICAgIHRoaXMubWF0cml4ID0gSVJbM107CiAgICB0aGlzLmJib3ggPSBJUls0XTsKICAgIHRoaXMueHN0ZXAgPSBJUls1XTsKICAgIHRoaXMueXN0ZXAgPSBJUls2XTsKICAgIHRoaXMucGFpbnRUeXBlID0gSVJbN107CiAgICB0aGlzLnRpbGluZ1R5cGUgPSBJUls4XTsKICAgIHRoaXMuY3R4ID0gY3R4OwogICAgdGhpcy5jYW52YXNHcmFwaGljc0ZhY3RvcnkgPSBjYW52YXNHcmFwaGljc0ZhY3Rvcnk7CiAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSBiYXNlVHJhbnNmb3JtOwogIH0KICBjcmVhdGVQYXR0ZXJuQ2FudmFzKG93bmVyLCBvcElkeCkgewogICAgY29uc3QgewogICAgICBiYm94LAogICAgICBvcGVyYXRvckxpc3QsCiAgICAgIHBhaW50VHlwZSwKICAgICAgdGlsaW5nVHlwZSwKICAgICAgY29sb3IsCiAgICAgIGNhbnZhc0dyYXBoaWNzRmFjdG9yeQogICAgfSA9IHRoaXM7CiAgICBsZXQgewogICAgICB4c3RlcCwKICAgICAgeXN0ZXAKICAgIH0gPSB0aGlzOwogICAgeHN0ZXAgPSBNYXRoLmFicyh4c3RlcCk7CiAgICB5c3RlcCA9IE1hdGguYWJzKHlzdGVwKTsKICAgIGluZm8oIlRpbGluZ1R5cGU6ICIgKyB0aWxpbmdUeXBlKTsKICAgIGNvbnN0IHgwID0gYmJveFswXSwKICAgICAgeTAgPSBiYm94WzFdLAogICAgICB4MSA9IGJib3hbMl0sCiAgICAgIHkxID0gYmJveFszXTsKICAgIGNvbnN0IHdpZHRoID0geDEgLSB4MDsKICAgIGNvbnN0IGhlaWdodCA9IHkxIC0geTA7CiAgICBjb25zdCBzY2FsZSA9IG5ldyBGbG9hdDMyQXJyYXkoMik7CiAgICBVdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMubWF0cml4LCBzY2FsZSk7CiAgICBjb25zdCBbbWF0cml4U2NhbGVYLCBtYXRyaXhTY2FsZVldID0gc2NhbGU7CiAgICBVdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuYmFzZVRyYW5zZm9ybSwgc2NhbGUpOwogICAgY29uc3QgY29tYmluZWRTY2FsZVggPSBtYXRyaXhTY2FsZVggKiBzY2FsZVswXTsKICAgIGNvbnN0IGNvbWJpbmVkU2NhbGVZID0gbWF0cml4U2NhbGVZICogc2NhbGVbMV07CiAgICBsZXQgY2FudmFzV2lkdGggPSB3aWR0aCwKICAgICAgY2FudmFzSGVpZ2h0ID0gaGVpZ2h0LAogICAgICByZWRyYXdIb3Jpem9udGFsbHkgPSBmYWxzZSwKICAgICAgcmVkcmF3VmVydGljYWxseSA9IGZhbHNlOwogICAgY29uc3QgeFNjYWxlZFN0ZXAgPSBNYXRoLmNlaWwoeHN0ZXAgKiBjb21iaW5lZFNjYWxlWCk7CiAgICBjb25zdCB5U2NhbGVkU3RlcCA9IE1hdGguY2VpbCh5c3RlcCAqIGNvbWJpbmVkU2NhbGVZKTsKICAgIGNvbnN0IHhTY2FsZWRXaWR0aCA9IE1hdGguY2VpbCh3aWR0aCAqIGNvbWJpbmVkU2NhbGVYKTsKICAgIGNvbnN0IHlTY2FsZWRIZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0ICogY29tYmluZWRTY2FsZVkpOwogICAgaWYgKHhTY2FsZWRTdGVwID49IHhTY2FsZWRXaWR0aCkgewogICAgICBjYW52YXNXaWR0aCA9IHhzdGVwOwogICAgfSBlbHNlIHsKICAgICAgcmVkcmF3SG9yaXpvbnRhbGx5ID0gdHJ1ZTsKICAgIH0KICAgIGlmICh5U2NhbGVkU3RlcCA+PSB5U2NhbGVkSGVpZ2h0KSB7CiAgICAgIGNhbnZhc0hlaWdodCA9IHlzdGVwOwogICAgfSBlbHNlIHsKICAgICAgcmVkcmF3VmVydGljYWxseSA9IHRydWU7CiAgICB9CiAgICBjb25zdCBkaW14ID0gdGhpcy5nZXRTaXplQW5kU2NhbGUoY2FudmFzV2lkdGgsIHRoaXMuY3R4LmNhbnZhcy53aWR0aCwgY29tYmluZWRTY2FsZVgpOwogICAgY29uc3QgZGlteSA9IHRoaXMuZ2V0U2l6ZUFuZFNjYWxlKGNhbnZhc0hlaWdodCwgdGhpcy5jdHguY2FudmFzLmhlaWdodCwgY29tYmluZWRTY2FsZVkpOwogICAgY29uc3QgdG1wQ2FudmFzID0gb3duZXIuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIiwgZGlteC5zaXplLCBkaW15LnNpemUpOwogICAgY29uc3QgdG1wQ3R4ID0gdG1wQ2FudmFzLmNvbnRleHQ7CiAgICBjb25zdCBncmFwaGljcyA9IGNhbnZhc0dyYXBoaWNzRmFjdG9yeS5jcmVhdGVDYW52YXNHcmFwaGljcyh0bXBDdHgsIG9wSWR4KTsKICAgIGdyYXBoaWNzLmdyb3VwTGV2ZWwgPSBvd25lci5ncm91cExldmVsOwogICAgdGhpcy5zZXRGaWxsQW5kU3Ryb2tlU3R5bGVUb0NvbnRleHQoZ3JhcGhpY3MsIHBhaW50VHlwZSwgY29sb3IpOwogICAgdG1wQ3R4LnRyYW5zbGF0ZSgtZGlteC5zY2FsZSAqIHgwLCAtZGlteS5zY2FsZSAqIHkwKTsKICAgIGdyYXBoaWNzLnRyYW5zZm9ybSgwLCBkaW14LnNjYWxlLCAwLCAwLCBkaW15LnNjYWxlLCAwLCAwKTsKICAgIHRtcEN0eC5zYXZlKCk7CiAgICBncmFwaGljcy5kZXBlbmRlbmN5VHJhY2tlcj8uc2F2ZSgpOwogICAgdGhpcy5jbGlwQmJveChncmFwaGljcywgeDAsIHkwLCB4MSwgeTEpOwogICAgZ3JhcGhpY3MuYmFzZVRyYW5zZm9ybSA9IGdldEN1cnJlbnRUcmFuc2Zvcm0oZ3JhcGhpY3MuY3R4KTsKICAgIGdyYXBoaWNzLmV4ZWN1dGVPcGVyYXRvckxpc3Qob3BlcmF0b3JMaXN0KTsKICAgIGdyYXBoaWNzLmVuZERyYXdpbmcoKTsKICAgIGdyYXBoaWNzLmRlcGVuZGVuY3lUcmFja2VyPy5yZXN0b3JlKCk7CiAgICB0bXBDdHgucmVzdG9yZSgpOwogICAgaWYgKHJlZHJhd0hvcml6b250YWxseSB8fCByZWRyYXdWZXJ0aWNhbGx5KSB7CiAgICAgIGNvbnN0IGltYWdlID0gdG1wQ2FudmFzLmNhbnZhczsKICAgICAgaWYgKHJlZHJhd0hvcml6b250YWxseSkgewogICAgICAgIGNhbnZhc1dpZHRoID0geHN0ZXA7CiAgICAgIH0KICAgICAgaWYgKHJlZHJhd1ZlcnRpY2FsbHkpIHsKICAgICAgICBjYW52YXNIZWlnaHQgPSB5c3RlcDsKICAgICAgfQogICAgICBjb25zdCBkaW14MiA9IHRoaXMuZ2V0U2l6ZUFuZFNjYWxlKGNhbnZhc1dpZHRoLCB0aGlzLmN0eC5jYW52YXMud2lkdGgsIGNvbWJpbmVkU2NhbGVYKTsKICAgICAgY29uc3QgZGlteTIgPSB0aGlzLmdldFNpemVBbmRTY2FsZShjYW52YXNIZWlnaHQsIHRoaXMuY3R4LmNhbnZhcy5oZWlnaHQsIGNvbWJpbmVkU2NhbGVZKTsKICAgICAgY29uc3QgeFNpemUgPSBkaW14Mi5zaXplOwogICAgICBjb25zdCB5U2l6ZSA9IGRpbXkyLnNpemU7CiAgICAgIGNvbnN0IHRtcENhbnZhczIgPSBvd25lci5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoInBhdHRlcm4td29ya2Fyb3VuZCIsIHhTaXplLCB5U2l6ZSk7CiAgICAgIGNvbnN0IHRtcEN0eDIgPSB0bXBDYW52YXMyLmNvbnRleHQ7CiAgICAgIGNvbnN0IGlpID0gcmVkcmF3SG9yaXpvbnRhbGx5ID8gTWF0aC5mbG9vcih3aWR0aCAvIHhzdGVwKSA6IDA7CiAgICAgIGNvbnN0IGpqID0gcmVkcmF3VmVydGljYWxseSA/IE1hdGguZmxvb3IoaGVpZ2h0IC8geXN0ZXApIDogMDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gaWk7IGkrKykgewogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDw9IGpqOyBqKyspIHsKICAgICAgICAgIHRtcEN0eDIuZHJhd0ltYWdlKGltYWdlLCB4U2l6ZSAqIGksIHlTaXplICogaiwgeFNpemUsIHlTaXplLCAwLCAwLCB4U2l6ZSwgeVNpemUpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIGNhbnZhczogdG1wQ2FudmFzMi5jYW52YXMsCiAgICAgICAgc2NhbGVYOiBkaW14Mi5zY2FsZSwKICAgICAgICBzY2FsZVk6IGRpbXkyLnNjYWxlLAogICAgICAgIG9mZnNldFg6IHgwLAogICAgICAgIG9mZnNldFk6IHkwCiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gewogICAgICBjYW52YXM6IHRtcENhbnZhcy5jYW52YXMsCiAgICAgIHNjYWxlWDogZGlteC5zY2FsZSwKICAgICAgc2NhbGVZOiBkaW15LnNjYWxlLAogICAgICBvZmZzZXRYOiB4MCwKICAgICAgb2Zmc2V0WTogeTAKICAgIH07CiAgfQogIGdldFNpemVBbmRTY2FsZShzdGVwLCByZWFsT3V0cHV0U2l6ZSwgc2NhbGUpIHsKICAgIGNvbnN0IG1heFNpemUgPSBNYXRoLm1heChUaWxpbmdQYXR0ZXJuLk1BWF9QQVRURVJOX1NJWkUsIHJlYWxPdXRwdXRTaXplKTsKICAgIGxldCBzaXplID0gTWF0aC5jZWlsKHN0ZXAgKiBzY2FsZSk7CiAgICBpZiAoc2l6ZSA+PSBtYXhTaXplKSB7CiAgICAgIHNpemUgPSBtYXhTaXplOwogICAgfSBlbHNlIHsKICAgICAgc2NhbGUgPSBzaXplIC8gc3RlcDsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIHNjYWxlLAogICAgICBzaXplCiAgICB9OwogIH0KICBjbGlwQmJveChncmFwaGljcywgeDAsIHkwLCB4MSwgeTEpIHsKICAgIGNvbnN0IGJib3hXaWR0aCA9IHgxIC0geDA7CiAgICBjb25zdCBiYm94SGVpZ2h0ID0geTEgLSB5MDsKICAgIGdyYXBoaWNzLmN0eC5yZWN0KHgwLCB5MCwgYmJveFdpZHRoLCBiYm94SGVpZ2h0KTsKICAgIFV0aWwuYXhpYWxBbGlnbmVkQm91bmRpbmdCb3goW3gwLCB5MCwgeDEsIHkxXSwgZ2V0Q3VycmVudFRyYW5zZm9ybShncmFwaGljcy5jdHgpLCBncmFwaGljcy5jdXJyZW50Lm1pbk1heCk7CiAgICBncmFwaGljcy5jbGlwKCk7CiAgICBncmFwaGljcy5lbmRQYXRoKCk7CiAgfQogIHNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChncmFwaGljcywgcGFpbnRUeXBlLCBjb2xvcikgewogICAgY29uc3QgY29udGV4dCA9IGdyYXBoaWNzLmN0eCwKICAgICAgY3VycmVudCA9IGdyYXBoaWNzLmN1cnJlbnQ7CiAgICBzd2l0Y2ggKHBhaW50VHlwZSkgewogICAgICBjYXNlIFBhaW50VHlwZS5DT0xPUkVEOgogICAgICAgIGNvbnN0IHsKICAgICAgICAgIGZpbGxTdHlsZSwKICAgICAgICAgIHN0cm9rZVN0eWxlCiAgICAgICAgfSA9IHRoaXMuY3R4OwogICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY3VycmVudC5maWxsQ29sb3IgPSBmaWxsU3R5bGU7CiAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBzdHJva2VTdHlsZTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBQYWludFR5cGUuVU5DT0xPUkVEOgogICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY29udGV4dC5zdHJva2VTdHlsZSA9IGNvbG9yOwogICAgICAgIGN1cnJlbnQuZmlsbENvbG9yID0gY3VycmVudC5zdHJva2VDb2xvciA9IGNvbG9yOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5zdXBwb3J0ZWQgcGFpbnQgdHlwZTogJHtwYWludFR5cGV9YCk7CiAgICB9CiAgfQogIGlzTW9kaWZ5aW5nQ3VycmVudFRyYW5zZm9ybSgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZ2V0UGF0dGVybihjdHgsIG93bmVyLCBpbnZlcnNlLCBwYXRoVHlwZSwgb3BJZHgpIHsKICAgIGxldCBtYXRyaXggPSBpbnZlcnNlOwogICAgaWYgKHBhdGhUeXBlICE9PSBQYXRoVHlwZS5TSEFESU5HKSB7CiAgICAgIG1hdHJpeCA9IFV0aWwudHJhbnNmb3JtKG1hdHJpeCwgb3duZXIuYmFzZVRyYW5zZm9ybSk7CiAgICAgIGlmICh0aGlzLm1hdHJpeCkgewogICAgICAgIG1hdHJpeCA9IFV0aWwudHJhbnNmb3JtKG1hdHJpeCwgdGhpcy5tYXRyaXgpOwogICAgICB9CiAgICB9CiAgICBjb25zdCB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzID0gdGhpcy5jcmVhdGVQYXR0ZXJuQ2FudmFzKG93bmVyLCBvcElkeCk7CiAgICBsZXQgZG9tTWF0cml4ID0gbmV3IERPTU1hdHJpeChtYXRyaXgpOwogICAgZG9tTWF0cml4ID0gZG9tTWF0cml4LnRyYW5zbGF0ZSh0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLm9mZnNldFgsIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMub2Zmc2V0WSk7CiAgICBkb21NYXRyaXggPSBkb21NYXRyaXguc2NhbGUoMSAvIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuc2NhbGVYLCAxIC8gdGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5zY2FsZVkpOwogICAgY29uc3QgcGF0dGVybiA9IGN0eC5jcmVhdGVQYXR0ZXJuKHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuY2FudmFzLCAicmVwZWF0Iik7CiAgICBwYXR0ZXJuLnNldFRyYW5zZm9ybShkb21NYXRyaXgpOwogICAgcmV0dXJuIHBhdHRlcm47CiAgfQp9Cgo7Ly8gLi9zcmMvc2hhcmVkL2ltYWdlX3V0aWxzLmpzCgpmdW5jdGlvbiBjb252ZXJ0VG9SR0JBKHBhcmFtcykgewogIHN3aXRjaCAocGFyYW1zLmtpbmQpIHsKICAgIGNhc2UgSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQOgogICAgICByZXR1cm4gY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEocGFyYW1zKTsKICAgIGNhc2UgSW1hZ2VLaW5kLlJHQl8yNEJQUDoKICAgICAgcmV0dXJuIGNvbnZlcnRSR0JUb1JHQkEocGFyYW1zKTsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEoewogIHNyYywKICBzcmNQb3MgPSAwLAogIGRlc3QsCiAgd2lkdGgsCiAgaGVpZ2h0LAogIG5vbkJsYWNrQ29sb3IgPSAweGZmZmZmZmZmLAogIGludmVyc2VEZWNvZGUgPSBmYWxzZQp9KSB7CiAgY29uc3QgYmxhY2sgPSB1dGlsX0ZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuID8gMHhmZjAwMDAwMCA6IDB4MDAwMDAwZmY7CiAgY29uc3QgW3plcm9NYXBwaW5nLCBvbmVNYXBwaW5nXSA9IGludmVyc2VEZWNvZGUgPyBbbm9uQmxhY2tDb2xvciwgYmxhY2tdIDogW2JsYWNrLCBub25CbGFja0NvbG9yXTsKICBjb25zdCB3aWR0aEluU291cmNlID0gd2lkdGggPj4gMzsKICBjb25zdCB3aWR0aFJlbWFpbmRlciA9IHdpZHRoICYgNzsKICBjb25zdCBzcmNMZW5ndGggPSBzcmMubGVuZ3RoOwogIGRlc3QgPSBuZXcgVWludDMyQXJyYXkoZGVzdC5idWZmZXIpOwogIGxldCBkZXN0UG9zID0gMDsKICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CiAgICBmb3IgKGNvbnN0IG1heCA9IHNyY1BvcyArIHdpZHRoSW5Tb3VyY2U7IHNyY1BvcyA8IG1heDsgc3JjUG9zKyspIHsKICAgICAgY29uc3QgZWxlbSA9IHNyY1BvcyA8IHNyY0xlbmd0aCA/IHNyY1tzcmNQb3NdIDogMjU1OwogICAgICBkZXN0W2Rlc3RQb3MrK10gPSBlbGVtICYgMGIxMDAwMDAwMCA/IG9uZU1hcHBpbmcgOiB6ZXJvTWFwcGluZzsKICAgICAgZGVzdFtkZXN0UG9zKytdID0gZWxlbSAmIDBiMTAwMDAwMCA/IG9uZU1hcHBpbmcgOiB6ZXJvTWFwcGluZzsKICAgICAgZGVzdFtkZXN0UG9zKytdID0gZWxlbSAmIDBiMTAwMDAwID8gb25lTWFwcGluZyA6IHplcm9NYXBwaW5nOwogICAgICBkZXN0W2Rlc3RQb3MrK10gPSBlbGVtICYgMGIxMDAwMCA/IG9uZU1hcHBpbmcgOiB6ZXJvTWFwcGluZzsKICAgICAgZGVzdFtkZXN0UG9zKytdID0gZWxlbSAmIDBiMTAwMCA/IG9uZU1hcHBpbmcgOiB6ZXJvTWFwcGluZzsKICAgICAgZGVzdFtkZXN0UG9zKytdID0gZWxlbSAmIDBiMTAwID8gb25lTWFwcGluZyA6IHplcm9NYXBwaW5nOwogICAgICBkZXN0W2Rlc3RQb3MrK10gPSBlbGVtICYgMGIxMCA/IG9uZU1hcHBpbmcgOiB6ZXJvTWFwcGluZzsKICAgICAgZGVzdFtkZXN0UG9zKytdID0gZWxlbSAmIDBiMSA/IG9uZU1hcHBpbmcgOiB6ZXJvTWFwcGluZzsKICAgIH0KICAgIGlmICh3aWR0aFJlbWFpbmRlciA9PT0gMCkgewogICAgICBjb250aW51ZTsKICAgIH0KICAgIGNvbnN0IGVsZW0gPSBzcmNQb3MgPCBzcmNMZW5ndGggPyBzcmNbc3JjUG9zKytdIDogMjU1OwogICAgZm9yIChsZXQgaiA9IDA7IGogPCB3aWR0aFJlbWFpbmRlcjsgaisrKSB7CiAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGVsZW0gJiAxIDw8IDcgLSBqID8gb25lTWFwcGluZyA6IHplcm9NYXBwaW5nOwogICAgfQogIH0KICByZXR1cm4gewogICAgc3JjUG9zLAogICAgZGVzdFBvcwogIH07Cn0KZnVuY3Rpb24gY29udmVydFJHQlRvUkdCQSh7CiAgc3JjLAogIHNyY1BvcyA9IDAsCiAgZGVzdCwKICBkZXN0UG9zID0gMCwKICB3aWR0aCwKICBoZWlnaHQKfSkgewogIGxldCBpID0gMDsKICBjb25zdCBsZW4gPSB3aWR0aCAqIGhlaWdodCAqIDM7CiAgY29uc3QgbGVuMzIgPSBsZW4gPj4gMjsKICBjb25zdCBzcmMzMiA9IG5ldyBVaW50MzJBcnJheShzcmMuYnVmZmVyLCBzcmNQb3MsIGxlbjMyKTsKICBpZiAoRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4pIHsKICAgIGZvciAoOyBpIDwgbGVuMzIgLSAyOyBpICs9IDMsIGRlc3RQb3MgKz0gNCkgewogICAgICBjb25zdCBzMSA9IHNyYzMyW2ldOwogICAgICBjb25zdCBzMiA9IHNyYzMyW2kgKyAxXTsKICAgICAgY29uc3QgczMgPSBzcmMzMltpICsgMl07CiAgICAgIGRlc3RbZGVzdFBvc10gPSBzMSB8IDB4ZmYwMDAwMDA7CiAgICAgIGRlc3RbZGVzdFBvcyArIDFdID0gczEgPj4+IDI0IHwgczIgPDwgOCB8IDB4ZmYwMDAwMDA7CiAgICAgIGRlc3RbZGVzdFBvcyArIDJdID0gczIgPj4+IDE2IHwgczMgPDwgMTYgfCAweGZmMDAwMDAwOwogICAgICBkZXN0W2Rlc3RQb3MgKyAzXSA9IHMzID4+PiA4IHwgMHhmZjAwMDAwMDsKICAgIH0KICAgIGZvciAobGV0IGogPSBpICogNCwgamogPSBzcmNQb3MgKyBsZW47IGogPCBqajsgaiArPSAzKSB7CiAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHNyY1tqXSB8IHNyY1tqICsgMV0gPDwgOCB8IHNyY1tqICsgMl0gPDwgMTYgfCAweGZmMDAwMDAwOwogICAgfQogIH0gZWxzZSB7CiAgICBmb3IgKDsgaSA8IGxlbjMyIC0gMjsgaSArPSAzLCBkZXN0UG9zICs9IDQpIHsKICAgICAgY29uc3QgczEgPSBzcmMzMltpXTsKICAgICAgY29uc3QgczIgPSBzcmMzMltpICsgMV07CiAgICAgIGNvbnN0IHMzID0gc3JjMzJbaSArIDJdOwogICAgICBkZXN0W2Rlc3RQb3NdID0gczEgfCAweGZmOwogICAgICBkZXN0W2Rlc3RQb3MgKyAxXSA9IHMxIDw8IDI0IHwgczIgPj4+IDggfCAweGZmOwogICAgICBkZXN0W2Rlc3RQb3MgKyAyXSA9IHMyIDw8IDE2IHwgczMgPj4+IDE2IHwgMHhmZjsKICAgICAgZGVzdFtkZXN0UG9zICsgM10gPSBzMyA8PCA4IHwgMHhmZjsKICAgIH0KICAgIGZvciAobGV0IGogPSBpICogNCwgamogPSBzcmNQb3MgKyBsZW47IGogPCBqajsgaiArPSAzKSB7CiAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHNyY1tqXSA8PCAyNCB8IHNyY1tqICsgMV0gPDwgMTYgfCBzcmNbaiArIDJdIDw8IDggfCAweGZmOwogICAgfQogIH0KICByZXR1cm4gewogICAgc3JjUG9zOiBzcmNQb3MgKyBsZW4sCiAgICBkZXN0UG9zCiAgfTsKfQpmdW5jdGlvbiBncmF5VG9SR0JBKHNyYywgZGVzdCkgewogIGlmIChGZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbikgewogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gc3JjLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgZGVzdFtpXSA9IHNyY1tpXSAqIDB4MTAxMDEgfCAweGZmMDAwMDAwOwogICAgfQogIH0gZWxzZSB7CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzcmMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBkZXN0W2ldID0gc3JjW2ldICogMHgxMDEwMTAwIHwgMHgwMDAwMDBmZjsKICAgIH0KICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L2NhbnZhcy5qcwoKCgoKCmNvbnN0IE1JTl9GT05UX1NJWkUgPSAxNjsKY29uc3QgTUFYX0ZPTlRfU0laRSA9IDEwMDsKY29uc3QgRVhFQ1VUSU9OX1RJTUUgPSAxNTsKY29uc3QgRVhFQ1VUSU9OX1NURVBTID0gMTA7CmNvbnN0IEZVTExfQ0hVTktfSEVJR0hUID0gMTY7CmNvbnN0IFNDQUxFX01BVFJJWCA9IG5ldyBET01NYXRyaXgoKTsKY29uc3QgWFkgPSBuZXcgRmxvYXQzMkFycmF5KDIpOwpjb25zdCBNSU5fTUFYX0lOSVQgPSBuZXcgRmxvYXQzMkFycmF5KFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XSk7CmZ1bmN0aW9uIG1pcnJvckNvbnRleHRPcGVyYXRpb25zKGN0eCwgZGVzdEN0eCkgewogIGlmIChjdHguX3JlbW92ZU1pcnJvcmluZykgewogICAgdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IGlzIGFscmVhZHkgZm9yd2FyZGluZyBvcGVyYXRpb25zLiIpOwogIH0KICBjdHguX19vcmlnaW5hbFNhdmUgPSBjdHguc2F2ZTsKICBjdHguX19vcmlnaW5hbFJlc3RvcmUgPSBjdHgucmVzdG9yZTsKICBjdHguX19vcmlnaW5hbFJvdGF0ZSA9IGN0eC5yb3RhdGU7CiAgY3R4Ll9fb3JpZ2luYWxTY2FsZSA9IGN0eC5zY2FsZTsKICBjdHguX19vcmlnaW5hbFRyYW5zbGF0ZSA9IGN0eC50cmFuc2xhdGU7CiAgY3R4Ll9fb3JpZ2luYWxUcmFuc2Zvcm0gPSBjdHgudHJhbnNmb3JtOwogIGN0eC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtID0gY3R4LnNldFRyYW5zZm9ybTsKICBjdHguX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtID0gY3R4LnJlc2V0VHJhbnNmb3JtOwogIGN0eC5fX29yaWdpbmFsQ2xpcCA9IGN0eC5jbGlwOwogIGN0eC5fX29yaWdpbmFsTW92ZVRvID0gY3R4Lm1vdmVUbzsKICBjdHguX19vcmlnaW5hbExpbmVUbyA9IGN0eC5saW5lVG87CiAgY3R4Ll9fb3JpZ2luYWxCZXppZXJDdXJ2ZVRvID0gY3R4LmJlemllckN1cnZlVG87CiAgY3R4Ll9fb3JpZ2luYWxSZWN0ID0gY3R4LnJlY3Q7CiAgY3R4Ll9fb3JpZ2luYWxDbG9zZVBhdGggPSBjdHguY2xvc2VQYXRoOwogIGN0eC5fX29yaWdpbmFsQmVnaW5QYXRoID0gY3R4LmJlZ2luUGF0aDsKICBjdHguX3JlbW92ZU1pcnJvcmluZyA9ICgpID0+IHsKICAgIGN0eC5zYXZlID0gY3R4Ll9fb3JpZ2luYWxTYXZlOwogICAgY3R4LnJlc3RvcmUgPSBjdHguX19vcmlnaW5hbFJlc3RvcmU7CiAgICBjdHgucm90YXRlID0gY3R4Ll9fb3JpZ2luYWxSb3RhdGU7CiAgICBjdHguc2NhbGUgPSBjdHguX19vcmlnaW5hbFNjYWxlOwogICAgY3R4LnRyYW5zbGF0ZSA9IGN0eC5fX29yaWdpbmFsVHJhbnNsYXRlOwogICAgY3R4LnRyYW5zZm9ybSA9IGN0eC5fX29yaWdpbmFsVHJhbnNmb3JtOwogICAgY3R4LnNldFRyYW5zZm9ybSA9IGN0eC5fX29yaWdpbmFsU2V0VHJhbnNmb3JtOwogICAgY3R4LnJlc2V0VHJhbnNmb3JtID0gY3R4Ll9fb3JpZ2luYWxSZXNldFRyYW5zZm9ybTsKICAgIGN0eC5jbGlwID0gY3R4Ll9fb3JpZ2luYWxDbGlwOwogICAgY3R4Lm1vdmVUbyA9IGN0eC5fX29yaWdpbmFsTW92ZVRvOwogICAgY3R4LmxpbmVUbyA9IGN0eC5fX29yaWdpbmFsTGluZVRvOwogICAgY3R4LmJlemllckN1cnZlVG8gPSBjdHguX19vcmlnaW5hbEJlemllckN1cnZlVG87CiAgICBjdHgucmVjdCA9IGN0eC5fX29yaWdpbmFsUmVjdDsKICAgIGN0eC5jbG9zZVBhdGggPSBjdHguX19vcmlnaW5hbENsb3NlUGF0aDsKICAgIGN0eC5iZWdpblBhdGggPSBjdHguX19vcmlnaW5hbEJlZ2luUGF0aDsKICAgIGRlbGV0ZSBjdHguX3JlbW92ZU1pcnJvcmluZzsKICB9OwogIGN0eC5zYXZlID0gZnVuY3Rpb24gKCkgewogICAgZGVzdEN0eC5zYXZlKCk7CiAgICB0aGlzLl9fb3JpZ2luYWxTYXZlKCk7CiAgfTsKICBjdHgucmVzdG9yZSA9IGZ1bmN0aW9uICgpIHsKICAgIGRlc3RDdHgucmVzdG9yZSgpOwogICAgdGhpcy5fX29yaWdpbmFsUmVzdG9yZSgpOwogIH07CiAgY3R4LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uICh4LCB5KSB7CiAgICBkZXN0Q3R4LnRyYW5zbGF0ZSh4LCB5KTsKICAgIHRoaXMuX19vcmlnaW5hbFRyYW5zbGF0ZSh4LCB5KTsKICB9OwogIGN0eC5zY2FsZSA9IGZ1bmN0aW9uICh4LCB5KSB7CiAgICBkZXN0Q3R4LnNjYWxlKHgsIHkpOwogICAgdGhpcy5fX29yaWdpbmFsU2NhbGUoeCwgeSk7CiAgfTsKICBjdHgudHJhbnNmb3JtID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIGUsIGYpIHsKICAgIGRlc3RDdHgudHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpOwogICAgdGhpcy5fX29yaWdpbmFsVHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpOwogIH07CiAgY3R4LnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlLCBmKSB7CiAgICBkZXN0Q3R4LnNldFRyYW5zZm9ybShhLCBiLCBjLCBkLCBlLCBmKTsKICAgIHRoaXMuX19vcmlnaW5hbFNldFRyYW5zZm9ybShhLCBiLCBjLCBkLCBlLCBmKTsKICB9OwogIGN0eC5yZXNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICgpIHsKICAgIGRlc3RDdHgucmVzZXRUcmFuc2Zvcm0oKTsKICAgIHRoaXMuX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtKCk7CiAgfTsKICBjdHgucm90YXRlID0gZnVuY3Rpb24gKGFuZ2xlKSB7CiAgICBkZXN0Q3R4LnJvdGF0ZShhbmdsZSk7CiAgICB0aGlzLl9fb3JpZ2luYWxSb3RhdGUoYW5nbGUpOwogIH07CiAgY3R4LmNsaXAgPSBmdW5jdGlvbiAocnVsZSkgewogICAgZGVzdEN0eC5jbGlwKHJ1bGUpOwogICAgdGhpcy5fX29yaWdpbmFsQ2xpcChydWxlKTsKICB9OwogIGN0eC5tb3ZlVG8gPSBmdW5jdGlvbiAoeCwgeSkgewogICAgZGVzdEN0eC5tb3ZlVG8oeCwgeSk7CiAgICB0aGlzLl9fb3JpZ2luYWxNb3ZlVG8oeCwgeSk7CiAgfTsKICBjdHgubGluZVRvID0gZnVuY3Rpb24gKHgsIHkpIHsKICAgIGRlc3RDdHgubGluZVRvKHgsIHkpOwogICAgdGhpcy5fX29yaWdpbmFsTGluZVRvKHgsIHkpOwogIH07CiAgY3R4LmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3AxeCwgY3AxeSwgY3AyeCwgY3AyeSwgeCwgeSkgewogICAgZGVzdEN0eC5iZXppZXJDdXJ2ZVRvKGNwMXgsIGNwMXksIGNwMngsIGNwMnksIHgsIHkpOwogICAgdGhpcy5fX29yaWdpbmFsQmV6aWVyQ3VydmVUbyhjcDF4LCBjcDF5LCBjcDJ4LCBjcDJ5LCB4LCB5KTsKICB9OwogIGN0eC5yZWN0ID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpIHsKICAgIGRlc3RDdHgucmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgIHRoaXMuX19vcmlnaW5hbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgfTsKICBjdHguY2xvc2VQYXRoID0gZnVuY3Rpb24gKCkgewogICAgZGVzdEN0eC5jbG9zZVBhdGgoKTsKICAgIHRoaXMuX19vcmlnaW5hbENsb3NlUGF0aCgpOwogIH07CiAgY3R4LmJlZ2luUGF0aCA9IGZ1bmN0aW9uICgpIHsKICAgIGRlc3RDdHguYmVnaW5QYXRoKCk7CiAgICB0aGlzLl9fb3JpZ2luYWxCZWdpblBhdGgoKTsKICB9Owp9CmNsYXNzIENhY2hlZENhbnZhc2VzIHsKICBjb25zdHJ1Y3RvcihjYW52YXNGYWN0b3J5KSB7CiAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSBjYW52YXNGYWN0b3J5OwogICAgdGhpcy5jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgfQogIGdldENhbnZhcyhpZCwgd2lkdGgsIGhlaWdodCkgewogICAgbGV0IGNhbnZhc0VudHJ5OwogICAgaWYgKHRoaXMuY2FjaGVbaWRdICE9PSB1bmRlZmluZWQpIHsKICAgICAgY2FudmFzRW50cnkgPSB0aGlzLmNhY2hlW2lkXTsKICAgICAgdGhpcy5jYW52YXNGYWN0b3J5LnJlc2V0KGNhbnZhc0VudHJ5LCB3aWR0aCwgaGVpZ2h0KTsKICAgIH0gZWxzZSB7CiAgICAgIGNhbnZhc0VudHJ5ID0gdGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgdGhpcy5jYWNoZVtpZF0gPSBjYW52YXNFbnRyeTsKICAgIH0KICAgIHJldHVybiBjYW52YXNFbnRyeTsKICB9CiAgZGVsZXRlKGlkKSB7CiAgICBkZWxldGUgdGhpcy5jYWNoZVtpZF07CiAgfQogIGNsZWFyKCkgewogICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmNhY2hlKSB7CiAgICAgIGNvbnN0IGNhbnZhc0VudHJ5ID0gdGhpcy5jYWNoZVtpZF07CiAgICAgIHRoaXMuY2FudmFzRmFjdG9yeS5kZXN0cm95KGNhbnZhc0VudHJ5KTsKICAgICAgZGVsZXRlIHRoaXMuY2FjaGVbaWRdOwogICAgfQogIH0KfQpmdW5jdGlvbiBkcmF3SW1hZ2VBdEludGVnZXJDb29yZHMoY3R4LCBzcmNJbWcsIHNyY1gsIHNyY1ksIHNyY1csIHNyY0gsIGRlc3RYLCBkZXN0WSwgZGVzdFcsIGRlc3RIKSB7CiAgY29uc3QgW2EsIGIsIGMsIGQsIHR4LCB0eV0gPSBnZXRDdXJyZW50VHJhbnNmb3JtKGN0eCk7CiAgaWYgKGIgPT09IDAgJiYgYyA9PT0gMCkgewogICAgY29uc3QgdGxYID0gZGVzdFggKiBhICsgdHg7CiAgICBjb25zdCByVGxYID0gTWF0aC5yb3VuZCh0bFgpOwogICAgY29uc3QgdGxZID0gZGVzdFkgKiBkICsgdHk7CiAgICBjb25zdCByVGxZID0gTWF0aC5yb3VuZCh0bFkpOwogICAgY29uc3QgYnJYID0gKGRlc3RYICsgZGVzdFcpICogYSArIHR4OwogICAgY29uc3QgcldpZHRoID0gTWF0aC5hYnMoTWF0aC5yb3VuZChiclgpIC0gclRsWCkgfHwgMTsKICAgIGNvbnN0IGJyWSA9IChkZXN0WSArIGRlc3RIKSAqIGQgKyB0eTsKICAgIGNvbnN0IHJIZWlnaHQgPSBNYXRoLmFicyhNYXRoLnJvdW5kKGJyWSkgLSByVGxZKSB8fCAxOwogICAgY3R4LnNldFRyYW5zZm9ybShNYXRoLnNpZ24oYSksIDAsIDAsIE1hdGguc2lnbihkKSwgclRsWCwgclRsWSk7CiAgICBjdHguZHJhd0ltYWdlKHNyY0ltZywgc3JjWCwgc3JjWSwgc3JjVywgc3JjSCwgMCwgMCwgcldpZHRoLCBySGVpZ2h0KTsKICAgIGN0eC5zZXRUcmFuc2Zvcm0oYSwgYiwgYywgZCwgdHgsIHR5KTsKICAgIHJldHVybiBbcldpZHRoLCBySGVpZ2h0XTsKICB9CiAgaWYgKGEgPT09IDAgJiYgZCA9PT0gMCkgewogICAgY29uc3QgdGxYID0gZGVzdFkgKiBjICsgdHg7CiAgICBjb25zdCByVGxYID0gTWF0aC5yb3VuZCh0bFgpOwogICAgY29uc3QgdGxZID0gZGVzdFggKiBiICsgdHk7CiAgICBjb25zdCByVGxZID0gTWF0aC5yb3VuZCh0bFkpOwogICAgY29uc3QgYnJYID0gKGRlc3RZICsgZGVzdEgpICogYyArIHR4OwogICAgY29uc3QgcldpZHRoID0gTWF0aC5hYnMoTWF0aC5yb3VuZChiclgpIC0gclRsWCkgfHwgMTsKICAgIGNvbnN0IGJyWSA9IChkZXN0WCArIGRlc3RXKSAqIGIgKyB0eTsKICAgIGNvbnN0IHJIZWlnaHQgPSBNYXRoLmFicyhNYXRoLnJvdW5kKGJyWSkgLSByVGxZKSB8fCAxOwogICAgY3R4LnNldFRyYW5zZm9ybSgwLCBNYXRoLnNpZ24oYiksIE1hdGguc2lnbihjKSwgMCwgclRsWCwgclRsWSk7CiAgICBjdHguZHJhd0ltYWdlKHNyY0ltZywgc3JjWCwgc3JjWSwgc3JjVywgc3JjSCwgMCwgMCwgckhlaWdodCwgcldpZHRoKTsKICAgIGN0eC5zZXRUcmFuc2Zvcm0oYSwgYiwgYywgZCwgdHgsIHR5KTsKICAgIHJldHVybiBbckhlaWdodCwgcldpZHRoXTsKICB9CiAgY3R4LmRyYXdJbWFnZShzcmNJbWcsIHNyY1gsIHNyY1ksIHNyY1csIHNyY0gsIGRlc3RYLCBkZXN0WSwgZGVzdFcsIGRlc3RIKTsKICBjb25zdCBzY2FsZVggPSBNYXRoLmh5cG90KGEsIGIpOwogIGNvbnN0IHNjYWxlWSA9IE1hdGguaHlwb3QoYywgZCk7CiAgcmV0dXJuIFtzY2FsZVggKiBkZXN0Vywgc2NhbGVZICogZGVzdEhdOwp9CmNsYXNzIENhbnZhc0V4dHJhU3RhdGUgewogIGFscGhhSXNTaGFwZSA9IGZhbHNlOwogIGZvbnRTaXplID0gMDsKICBmb250U2l6ZVNjYWxlID0gMTsKICB0ZXh0TWF0cml4ID0gbnVsbDsKICB0ZXh0TWF0cml4U2NhbGUgPSAxOwogIGZvbnRNYXRyaXggPSBGT05UX0lERU5USVRZX01BVFJJWDsKICBsZWFkaW5nID0gMDsKICB4ID0gMDsKICB5ID0gMDsKICBsaW5lWCA9IDA7CiAgbGluZVkgPSAwOwogIGNoYXJTcGFjaW5nID0gMDsKICB3b3JkU3BhY2luZyA9IDA7CiAgdGV4dEhTY2FsZSA9IDE7CiAgdGV4dFJlbmRlcmluZ01vZGUgPSBUZXh0UmVuZGVyaW5nTW9kZS5GSUxMOwogIHRleHRSaXNlID0gMDsKICBmaWxsQ29sb3IgPSAiIzAwMDAwMCI7CiAgc3Ryb2tlQ29sb3IgPSAiIzAwMDAwMCI7CiAgcGF0dGVybkZpbGwgPSBmYWxzZTsKICBwYXR0ZXJuU3Ryb2tlID0gZmFsc2U7CiAgZmlsbEFscGhhID0gMTsKICBzdHJva2VBbHBoYSA9IDE7CiAgbGluZVdpZHRoID0gMTsKICBhY3RpdmVTTWFzayA9IG51bGw7CiAgdHJhbnNmZXJNYXBzID0gIm5vbmUiOwogIGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIHByZUluaXQpIHsKICAgIHByZUluaXQ/Lih0aGlzKTsKICAgIHRoaXMuY2xpcEJveCA9IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIHdpZHRoLCBoZWlnaHRdKTsKICAgIHRoaXMubWluTWF4ID0gTUlOX01BWF9JTklULnNsaWNlKCk7CiAgfQogIGNsb25lKCkgewogICAgY29uc3QgY2xvbmUgPSBPYmplY3QuY3JlYXRlKHRoaXMpOwogICAgY2xvbmUuY2xpcEJveCA9IHRoaXMuY2xpcEJveC5zbGljZSgpOwogICAgY2xvbmUubWluTWF4ID0gdGhpcy5taW5NYXguc2xpY2UoKTsKICAgIHJldHVybiBjbG9uZTsKICB9CiAgZ2V0UGF0aEJvdW5kaW5nQm94KHBhdGhUeXBlID0gUGF0aFR5cGUuRklMTCwgdHJhbnNmb3JtID0gbnVsbCkgewogICAgY29uc3QgYm94ID0gdGhpcy5taW5NYXguc2xpY2UoKTsKICAgIGlmIChwYXRoVHlwZSA9PT0gUGF0aFR5cGUuU1RST0tFKSB7CiAgICAgIGlmICghdHJhbnNmb3JtKSB7CiAgICAgICAgdW5yZWFjaGFibGUoIlN0cm9rZSBib3VuZGluZyBib3ggbXVzdCBpbmNsdWRlIHRyYW5zZm9ybS4iKTsKICAgICAgfQogICAgICBVdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRyYW5zZm9ybSwgWFkpOwogICAgICBjb25zdCB4U3Ryb2tlUGFkID0gWFlbMF0gKiB0aGlzLmxpbmVXaWR0aCAvIDI7CiAgICAgIGNvbnN0IHlTdHJva2VQYWQgPSBYWVsxXSAqIHRoaXMubGluZVdpZHRoIC8gMjsKICAgICAgYm94WzBdIC09IHhTdHJva2VQYWQ7CiAgICAgIGJveFsxXSAtPSB5U3Ryb2tlUGFkOwogICAgICBib3hbMl0gKz0geFN0cm9rZVBhZDsKICAgICAgYm94WzNdICs9IHlTdHJva2VQYWQ7CiAgICB9CiAgICByZXR1cm4gYm94OwogIH0KICB1cGRhdGVDbGlwRnJvbVBhdGgoKSB7CiAgICBjb25zdCBpbnRlcnNlY3QgPSBVdGlsLmludGVyc2VjdCh0aGlzLmNsaXBCb3gsIHRoaXMuZ2V0UGF0aEJvdW5kaW5nQm94KCkpOwogICAgdGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KGludGVyc2VjdCB8fCBbMCwgMCwgMCwgMF0pOwogIH0KICBpc0VtcHR5Q2xpcCgpIHsKICAgIHJldHVybiB0aGlzLm1pbk1heFswXSA9PT0gSW5maW5pdHk7CiAgfQogIHN0YXJ0TmV3UGF0aEFuZENsaXBCb3goYm94KSB7CiAgICB0aGlzLmNsaXBCb3guc2V0KGJveCwgMCk7CiAgICB0aGlzLm1pbk1heC5zZXQoTUlOX01BWF9JTklULCAwKTsKICB9CiAgZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveChwYXRoVHlwZSA9IFBhdGhUeXBlLkZJTEwsIHRyYW5zZm9ybSA9IG51bGwpIHsKICAgIHJldHVybiBVdGlsLmludGVyc2VjdCh0aGlzLmNsaXBCb3gsIHRoaXMuZ2V0UGF0aEJvdW5kaW5nQm94KHBhdGhUeXBlLCB0cmFuc2Zvcm0pKTsKICB9Cn0KZnVuY3Rpb24gcHV0QmluYXJ5SW1hZ2VEYXRhKGN0eCwgaW1nRGF0YSkgewogIGlmIChpbWdEYXRhIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7CiAgICBjdHgucHV0SW1hZ2VEYXRhKGltZ0RhdGEsIDAsIDApOwogICAgcmV0dXJuOwogIH0KICBjb25zdCBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodCwKICAgIHdpZHRoID0gaW1nRGF0YS53aWR0aDsKICBjb25zdCBwYXJ0aWFsQ2h1bmtIZWlnaHQgPSBoZWlnaHQgJSBGVUxMX0NIVU5LX0hFSUdIVDsKICBjb25zdCBmdWxsQ2h1bmtzID0gKGhlaWdodCAtIHBhcnRpYWxDaHVua0hlaWdodCkgLyBGVUxMX0NIVU5LX0hFSUdIVDsKICBjb25zdCB0b3RhbENodW5rcyA9IHBhcnRpYWxDaHVua0hlaWdodCA9PT0gMCA/IGZ1bGxDaHVua3MgOiBmdWxsQ2h1bmtzICsgMTsKICBjb25zdCBjaHVua0ltZ0RhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBGVUxMX0NIVU5LX0hFSUdIVCk7CiAgbGV0IHNyY1BvcyA9IDAsCiAgICBkZXN0UG9zOwogIGNvbnN0IHNyYyA9IGltZ0RhdGEuZGF0YTsKICBjb25zdCBkZXN0ID0gY2h1bmtJbWdEYXRhLmRhdGE7CiAgbGV0IGksIGosIHRoaXNDaHVua0hlaWdodCwgZWxlbXNJblRoaXNDaHVuazsKICBpZiAoaW1nRGF0YS5raW5kID09PSB1dGlsX0ltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCkgewogICAgY29uc3Qgc3JjTGVuZ3RoID0gc3JjLmJ5dGVMZW5ndGg7CiAgICBjb25zdCBkZXN0MzIgPSBuZXcgVWludDMyQXJyYXkoZGVzdC5idWZmZXIsIDAsIGRlc3QuYnl0ZUxlbmd0aCA+PiAyKTsKICAgIGNvbnN0IGRlc3QzMkRhdGFMZW5ndGggPSBkZXN0MzIubGVuZ3RoOwogICAgY29uc3QgZnVsbFNyY0RpZmYgPSB3aWR0aCArIDcgPj4gMzsKICAgIGNvbnN0IHdoaXRlID0gMHhmZmZmZmZmZjsKICAgIGNvbnN0IGJsYWNrID0gdXRpbF9GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbiA/IDB4ZmYwMDAwMDAgOiAweDAwMDAwMGZmOwogICAgZm9yIChpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHsKICAgICAgdGhpc0NodW5rSGVpZ2h0ID0gaSA8IGZ1bGxDaHVua3MgPyBGVUxMX0NIVU5LX0hFSUdIVCA6IHBhcnRpYWxDaHVua0hlaWdodDsKICAgICAgZGVzdFBvcyA9IDA7CiAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzQ2h1bmtIZWlnaHQ7IGorKykgewogICAgICAgIGNvbnN0IHNyY0RpZmYgPSBzcmNMZW5ndGggLSBzcmNQb3M7CiAgICAgICAgbGV0IGsgPSAwOwogICAgICAgIGNvbnN0IGtFbmQgPSBzcmNEaWZmID4gZnVsbFNyY0RpZmYgPyB3aWR0aCA6IHNyY0RpZmYgKiA4IC0gNzsKICAgICAgICBjb25zdCBrRW5kVW5yb2xsZWQgPSBrRW5kICYgfjc7CiAgICAgICAgbGV0IG1hc2sgPSAwOwogICAgICAgIGxldCBzcmNCeXRlID0gMDsKICAgICAgICBmb3IgKDsgayA8IGtFbmRVbnJvbGxlZDsgayArPSA4KSB7CiAgICAgICAgICBzcmNCeXRlID0gc3JjW3NyY1BvcysrXTsKICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDEyOCA/IHdoaXRlIDogYmxhY2s7CiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA2NCA/IHdoaXRlIDogYmxhY2s7CiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAzMiA/IHdoaXRlIDogYmxhY2s7CiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAxNiA/IHdoaXRlIDogYmxhY2s7CiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA4ID8gd2hpdGUgOiBibGFjazsKICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDQgPyB3aGl0ZSA6IGJsYWNrOwogICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgMiA/IHdoaXRlIDogYmxhY2s7CiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAxID8gd2hpdGUgOiBibGFjazsKICAgICAgICB9CiAgICAgICAgZm9yICg7IGsgPCBrRW5kOyBrKyspIHsKICAgICAgICAgIGlmIChtYXNrID09PSAwKSB7CiAgICAgICAgICAgIHNyY0J5dGUgPSBzcmNbc3JjUG9zKytdOwogICAgICAgICAgICBtYXNrID0gMTI4OwogICAgICAgICAgfQogICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgbWFzayA/IHdoaXRlIDogYmxhY2s7CiAgICAgICAgICBtYXNrID4+PSAxOwogICAgICAgIH0KICAgICAgfQogICAgICB3aGlsZSAoZGVzdFBvcyA8IGRlc3QzMkRhdGFMZW5ndGgpIHsKICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IDA7CiAgICAgIH0KICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGkgKiBGVUxMX0NIVU5LX0hFSUdIVCk7CiAgICB9CiAgfSBlbHNlIGlmIChpbWdEYXRhLmtpbmQgPT09IHV0aWxfSW1hZ2VLaW5kLlJHQkFfMzJCUFApIHsKICAgIGogPSAwOwogICAgZWxlbXNJblRoaXNDaHVuayA9IHdpZHRoICogRlVMTF9DSFVOS19IRUlHSFQgKiA0OwogICAgZm9yIChpID0gMDsgaSA8IGZ1bGxDaHVua3M7IGkrKykgewogICAgICBkZXN0LnNldChzcmMuc3ViYXJyYXkoc3JjUG9zLCBzcmNQb3MgKyBlbGVtc0luVGhpc0NodW5rKSk7CiAgICAgIHNyY1BvcyArPSBlbGVtc0luVGhpc0NodW5rOwogICAgICBjdHgucHV0SW1hZ2VEYXRhKGNodW5rSW1nRGF0YSwgMCwgaik7CiAgICAgIGogKz0gRlVMTF9DSFVOS19IRUlHSFQ7CiAgICB9CiAgICBpZiAoaSA8IHRvdGFsQ2h1bmtzKSB7CiAgICAgIGVsZW1zSW5UaGlzQ2h1bmsgPSB3aWR0aCAqIHBhcnRpYWxDaHVua0hlaWdodCAqIDQ7CiAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNQb3MsIHNyY1BvcyArIGVsZW1zSW5UaGlzQ2h1bmspKTsKICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGopOwogICAgfQogIH0gZWxzZSBpZiAoaW1nRGF0YS5raW5kID09PSB1dGlsX0ltYWdlS2luZC5SR0JfMjRCUFApIHsKICAgIHRoaXNDaHVua0hlaWdodCA9IEZVTExfQ0hVTktfSEVJR0hUOwogICAgZWxlbXNJblRoaXNDaHVuayA9IHdpZHRoICogdGhpc0NodW5rSGVpZ2h0OwogICAgZm9yIChpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHsKICAgICAgaWYgKGkgPj0gZnVsbENodW5rcykgewogICAgICAgIHRoaXNDaHVua0hlaWdodCA9IHBhcnRpYWxDaHVua0hlaWdodDsKICAgICAgICBlbGVtc0luVGhpc0NodW5rID0gd2lkdGggKiB0aGlzQ2h1bmtIZWlnaHQ7CiAgICAgIH0KICAgICAgZGVzdFBvcyA9IDA7CiAgICAgIGZvciAoaiA9IGVsZW1zSW5UaGlzQ2h1bms7IGotLTspIHsKICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSBzcmNbc3JjUG9zKytdOwogICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHNyY1tzcmNQb3MrK107CiAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW3NyY1BvcysrXTsKICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSAyNTU7CiAgICAgIH0KICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGkgKiBGVUxMX0NIVU5LX0hFSUdIVCk7CiAgICB9CiAgfSBlbHNlIHsKICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGltYWdlIGtpbmQ6ICR7aW1nRGF0YS5raW5kfWApOwogIH0KfQpmdW5jdGlvbiBwdXRCaW5hcnlJbWFnZU1hc2soY3R4LCBpbWdEYXRhKSB7CiAgaWYgKGltZ0RhdGEuYml0bWFwKSB7CiAgICBjdHguZHJhd0ltYWdlKGltZ0RhdGEuYml0bWFwLCAwLCAwKTsKICAgIHJldHVybjsKICB9CiAgY29uc3QgaGVpZ2h0ID0gaW1nRGF0YS5oZWlnaHQsCiAgICB3aWR0aCA9IGltZ0RhdGEud2lkdGg7CiAgY29uc3QgcGFydGlhbENodW5rSGVpZ2h0ID0gaGVpZ2h0ICUgRlVMTF9DSFVOS19IRUlHSFQ7CiAgY29uc3QgZnVsbENodW5rcyA9IChoZWlnaHQgLSBwYXJ0aWFsQ2h1bmtIZWlnaHQpIC8gRlVMTF9DSFVOS19IRUlHSFQ7CiAgY29uc3QgdG90YWxDaHVua3MgPSBwYXJ0aWFsQ2h1bmtIZWlnaHQgPT09IDAgPyBmdWxsQ2h1bmtzIDogZnVsbENodW5rcyArIDE7CiAgY29uc3QgY2h1bmtJbWdEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgRlVMTF9DSFVOS19IRUlHSFQpOwogIGxldCBzcmNQb3MgPSAwOwogIGNvbnN0IHNyYyA9IGltZ0RhdGEuZGF0YTsKICBjb25zdCBkZXN0ID0gY2h1bmtJbWdEYXRhLmRhdGE7CiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbENodW5rczsgaSsrKSB7CiAgICBjb25zdCB0aGlzQ2h1bmtIZWlnaHQgPSBpIDwgZnVsbENodW5rcyA/IEZVTExfQ0hVTktfSEVJR0hUIDogcGFydGlhbENodW5rSGVpZ2h0OwogICAgKHsKICAgICAgc3JjUG9zCiAgICB9ID0gY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEoewogICAgICBzcmMsCiAgICAgIHNyY1BvcywKICAgICAgZGVzdCwKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodDogdGhpc0NodW5rSGVpZ2h0LAogICAgICBub25CbGFja0NvbG9yOiAwCiAgICB9KSk7CiAgICBjdHgucHV0SW1hZ2VEYXRhKGNodW5rSW1nRGF0YSwgMCwgaSAqIEZVTExfQ0hVTktfSEVJR0hUKTsKICB9Cn0KZnVuY3Rpb24gY29weUN0eFN0YXRlKHNvdXJjZUN0eCwgZGVzdEN0eCkgewogIGNvbnN0IHByb3BlcnRpZXMgPSBbInN0cm9rZVN0eWxlIiwgImZpbGxTdHlsZSIsICJmaWxsUnVsZSIsICJnbG9iYWxBbHBoYSIsICJsaW5lV2lkdGgiLCAibGluZUNhcCIsICJsaW5lSm9pbiIsICJtaXRlckxpbWl0IiwgImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsICJmb250IiwgImZpbHRlciJdOwogIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykgewogICAgaWYgKHNvdXJjZUN0eFtwcm9wZXJ0eV0gIT09IHVuZGVmaW5lZCkgewogICAgICBkZXN0Q3R4W3Byb3BlcnR5XSA9IHNvdXJjZUN0eFtwcm9wZXJ0eV07CiAgICB9CiAgfQogIGlmIChzb3VyY2VDdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkgewogICAgZGVzdEN0eC5zZXRMaW5lRGFzaChzb3VyY2VDdHguZ2V0TGluZURhc2goKSk7CiAgICBkZXN0Q3R4LmxpbmVEYXNoT2Zmc2V0ID0gc291cmNlQ3R4LmxpbmVEYXNoT2Zmc2V0OwogIH0KfQpmdW5jdGlvbiByZXNldEN0eFRvRGVmYXVsdChjdHgpIHsKICBjdHguc3Ryb2tlU3R5bGUgPSBjdHguZmlsbFN0eWxlID0gIiMwMDAwMDAiOwogIGN0eC5maWxsUnVsZSA9ICJub256ZXJvIjsKICBjdHguZ2xvYmFsQWxwaGEgPSAxOwogIGN0eC5saW5lV2lkdGggPSAxOwogIGN0eC5saW5lQ2FwID0gImJ1dHQiOwogIGN0eC5saW5lSm9pbiA9ICJtaXRlciI7CiAgY3R4Lm1pdGVyTGltaXQgPSAxMDsKICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gInNvdXJjZS1vdmVyIjsKICBjdHguZm9udCA9ICIxMHB4IHNhbnMtc2VyaWYiOwogIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkgewogICAgY3R4LnNldExpbmVEYXNoKFtdKTsKICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IDA7CiAgfQogIGNvbnN0IHsKICAgIGZpbHRlcgogIH0gPSBjdHg7CiAgaWYgKGZpbHRlciAhPT0gIm5vbmUiICYmIGZpbHRlciAhPT0gIiIpIHsKICAgIGN0eC5maWx0ZXIgPSAibm9uZSI7CiAgfQp9CmZ1bmN0aW9uIGdldEltYWdlU21vb3RoaW5nRW5hYmxlZCh0cmFuc2Zvcm0sIGludGVycG9sYXRlKSB7CiAgaWYgKGludGVycG9sYXRlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0cmFuc2Zvcm0sIFhZKTsKICBjb25zdCBhY3R1YWxTY2FsZSA9IE1hdGguZnJvdW5kKE91dHB1dFNjYWxlLnBpeGVsUmF0aW8gKiBQaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMpOwogIHJldHVybiBYWVswXSA8PSBhY3R1YWxTY2FsZSAmJiBYWVsxXSA8PSBhY3R1YWxTY2FsZTsKfQpjb25zdCBMSU5FX0NBUF9TVFlMRVMgPSBbImJ1dHQiLCAicm91bmQiLCAic3F1YXJlIl07CmNvbnN0IExJTkVfSk9JTl9TVFlMRVMgPSBbIm1pdGVyIiwgInJvdW5kIiwgImJldmVsIl07CmNvbnN0IE5PUk1BTF9DTElQID0ge307CmNvbnN0IEVPX0NMSVAgPSB7fTsKY2xhc3MgQ2FudmFzR3JhcGhpY3MgewogIGNvbnN0cnVjdG9yKGNhbnZhc0N0eCwgY29tbW9uT2Jqcywgb2JqcywgY2FudmFzRmFjdG9yeSwgZmlsdGVyRmFjdG9yeSwgewogICAgb3B0aW9uYWxDb250ZW50Q29uZmlnLAogICAgbWFya2VkQ29udGVudFN0YWNrID0gbnVsbAogIH0sIGFubm90YXRpb25DYW52YXNNYXAsIHBhZ2VDb2xvcnMsIGRlcGVuZGVuY3lUcmFja2VyKSB7CiAgICB0aGlzLmN0eCA9IGNhbnZhc0N0eDsKICAgIHRoaXMuY3VycmVudCA9IG5ldyBDYW52YXNFeHRyYVN0YXRlKHRoaXMuY3R4LmNhbnZhcy53aWR0aCwgdGhpcy5jdHguY2FudmFzLmhlaWdodCk7CiAgICB0aGlzLnN0YXRlU3RhY2sgPSBbXTsKICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsOwogICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7CiAgICB0aGlzLnJlcyA9IG51bGw7CiAgICB0aGlzLnhvYmpzID0gbnVsbDsKICAgIHRoaXMuY29tbW9uT2JqcyA9IGNvbW1vbk9ianM7CiAgICB0aGlzLm9ianMgPSBvYmpzOwogICAgdGhpcy5jYW52YXNGYWN0b3J5ID0gY2FudmFzRmFjdG9yeTsKICAgIHRoaXMuZmlsdGVyRmFjdG9yeSA9IGZpbHRlckZhY3Rvcnk7CiAgICB0aGlzLmdyb3VwU3RhY2sgPSBbXTsKICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IG51bGw7CiAgICB0aGlzLmJhc2VUcmFuc2Zvcm1TdGFjayA9IFtdOwogICAgdGhpcy5ncm91cExldmVsID0gMDsKICAgIHRoaXMuc21hc2tTdGFjayA9IFtdOwogICAgdGhpcy5zbWFza0NvdW50ZXIgPSAwOwogICAgdGhpcy50ZW1wU01hc2sgPSBudWxsOwogICAgdGhpcy5zdXNwZW5kZWRDdHggPSBudWxsOwogICAgdGhpcy5jb250ZW50VmlzaWJsZSA9IHRydWU7CiAgICB0aGlzLm1hcmtlZENvbnRlbnRTdGFjayA9IG1hcmtlZENvbnRlbnRTdGFjayB8fCBbXTsKICAgIHRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnID0gb3B0aW9uYWxDb250ZW50Q29uZmlnOwogICAgdGhpcy5jYWNoZWRDYW52YXNlcyA9IG5ldyBDYWNoZWRDYW52YXNlcyh0aGlzLmNhbnZhc0ZhY3RvcnkpOwogICAgdGhpcy5jYWNoZWRQYXR0ZXJucyA9IG5ldyBNYXAoKTsKICAgIHRoaXMuYW5ub3RhdGlvbkNhbnZhc01hcCA9IGFubm90YXRpb25DYW52YXNNYXA7CiAgICB0aGlzLnZpZXdwb3J0U2NhbGUgPSAxOwogICAgdGhpcy5vdXRwdXRTY2FsZVggPSAxOwogICAgdGhpcy5vdXRwdXRTY2FsZVkgPSAxOwogICAgdGhpcy5wYWdlQ29sb3JzID0gcGFnZUNvbG9yczsKICAgIHRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmcgPSBbLTEsIDBdOwogICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IG51bGw7CiAgICB0aGlzLl9jYWNoZWRCaXRtYXBzTWFwID0gbmV3IE1hcCgpOwogICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlciA9IGRlcGVuZGVuY3lUcmFja2VyID8/IG51bGw7CiAgfQogIGdldE9iamVjdChvcElkeCwgZGF0YSwgZmFsbGJhY2sgPSBudWxsKSB7CiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICJzdHJpbmciKSB7CiAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZE5hbWVkRGVwZW5kZW5jeShvcElkeCwgZGF0YSk7CiAgICAgIHJldHVybiBkYXRhLnN0YXJ0c1dpdGgoImdfIikgPyB0aGlzLmNvbW1vbk9ianMuZ2V0KGRhdGEpIDogdGhpcy5vYmpzLmdldChkYXRhKTsKICAgIH0KICAgIHJldHVybiBmYWxsYmFjazsKICB9CiAgYmVnaW5EcmF3aW5nKHsKICAgIHRyYW5zZm9ybSwKICAgIHZpZXdwb3J0LAogICAgdHJhbnNwYXJlbmN5ID0gZmFsc2UsCiAgICBiYWNrZ3JvdW5kID0gbnVsbAogIH0pIHsKICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jdHguY2FudmFzLndpZHRoOwogICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5jdHguY2FudmFzLmhlaWdodDsKICAgIGNvbnN0IHNhdmVkRmlsbFN0eWxlID0gdGhpcy5jdHguZmlsbFN0eWxlOwogICAgdGhpcy5jdHguZmlsbFN0eWxlID0gYmFja2dyb3VuZCB8fCAiI2ZmZmZmZiI7CiAgICB0aGlzLmN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHNhdmVkRmlsbFN0eWxlOwogICAgaWYgKHRyYW5zcGFyZW5jeSkgewogICAgICBjb25zdCB0cmFuc3BhcmVudENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJ0cmFuc3BhcmVudCIsIHdpZHRoLCBoZWlnaHQpOwogICAgICB0aGlzLmNvbXBvc2l0ZUN0eCA9IHRoaXMuY3R4OwogICAgICB0aGlzLnRyYW5zcGFyZW50Q2FudmFzID0gdHJhbnNwYXJlbnRDYW52YXMuY2FudmFzOwogICAgICB0aGlzLmN0eCA9IHRyYW5zcGFyZW50Q2FudmFzLmNvbnRleHQ7CiAgICAgIHRoaXMuY3R4LnNhdmUoKTsKICAgICAgdGhpcy5jdHgudHJhbnNmb3JtKC4uLmdldEN1cnJlbnRUcmFuc2Zvcm0odGhpcy5jb21wb3NpdGVDdHgpKTsKICAgIH0KICAgIHRoaXMuY3R4LnNhdmUoKTsKICAgIHJlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4KTsKICAgIGlmICh0cmFuc2Zvcm0pIHsKICAgICAgdGhpcy5jdHgudHJhbnNmb3JtKC4uLnRyYW5zZm9ybSk7CiAgICAgIHRoaXMub3V0cHV0U2NhbGVYID0gdHJhbnNmb3JtWzBdOwogICAgICB0aGlzLm91dHB1dFNjYWxlWSA9IHRyYW5zZm9ybVswXTsKICAgIH0KICAgIHRoaXMuY3R4LnRyYW5zZm9ybSguLi52aWV3cG9ydC50cmFuc2Zvcm0pOwogICAgdGhpcy52aWV3cG9ydFNjYWxlID0gdmlld3BvcnQuc2NhbGU7CiAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSBnZXRDdXJyZW50VHJhbnNmb3JtKHRoaXMuY3R4KTsKICB9CiAgZXhlY3V0ZU9wZXJhdG9yTGlzdChvcGVyYXRvckxpc3QsIGV4ZWN1dGlvblN0YXJ0SWR4LCBjb250aW51ZUNhbGxiYWNrLCBzdGVwcGVyLCBvcGVyYXRpb25zRmlsdGVyKSB7CiAgICBjb25zdCBhcmdzQXJyYXkgPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5OwogICAgY29uc3QgZm5BcnJheSA9IG9wZXJhdG9yTGlzdC5mbkFycmF5OwogICAgbGV0IGkgPSBleGVjdXRpb25TdGFydElkeCB8fCAwOwogICAgY29uc3QgYXJnc0FycmF5TGVuID0gYXJnc0FycmF5Lmxlbmd0aDsKICAgIGlmIChhcmdzQXJyYXlMZW4gPT09IGkpIHsKICAgICAgcmV0dXJuIGk7CiAgICB9CiAgICBjb25zdCBjaHVua09wZXJhdGlvbnMgPSBhcmdzQXJyYXlMZW4gLSBpID4gRVhFQ1VUSU9OX1NURVBTICYmIHR5cGVvZiBjb250aW51ZUNhbGxiYWNrID09PSAiZnVuY3Rpb24iOwogICAgY29uc3QgZW5kVGltZSA9IGNodW5rT3BlcmF0aW9ucyA/IERhdGUubm93KCkgKyBFWEVDVVRJT05fVElNRSA6IDA7CiAgICBsZXQgc3RlcHMgPSAwOwogICAgY29uc3QgY29tbW9uT2JqcyA9IHRoaXMuY29tbW9uT2JqczsKICAgIGNvbnN0IG9ianMgPSB0aGlzLm9ianM7CiAgICBsZXQgZm5JZCwgZm5BcmdzOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKHN0ZXBwZXIgIT09IHVuZGVmaW5lZCAmJiBpID09PSBzdGVwcGVyLm5leHRCcmVha1BvaW50KSB7CiAgICAgICAgc3RlcHBlci5icmVha0l0KGksIGNvbnRpbnVlQ2FsbGJhY2spOwogICAgICAgIHJldHVybiBpOwogICAgICB9CiAgICAgIGlmICghb3BlcmF0aW9uc0ZpbHRlciB8fCBvcGVyYXRpb25zRmlsdGVyKGkpKSB7CiAgICAgICAgZm5JZCA9IGZuQXJyYXlbaV07CiAgICAgICAgZm5BcmdzID0gYXJnc0FycmF5W2ldID8/IG51bGw7CiAgICAgICAgaWYgKGZuSWQgIT09IE9QUy5kZXBlbmRlbmN5KSB7CiAgICAgICAgICBpZiAoZm5BcmdzID09PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXNbZm5JZF0oaSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzW2ZuSWRdKGksIC4uLmZuQXJncyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAoY29uc3QgZGVwT2JqSWQgb2YgZm5BcmdzKSB7CiAgICAgICAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZE5hbWVkRGF0YShkZXBPYmpJZCwgaSk7CiAgICAgICAgICAgIGNvbnN0IG9ianNQb29sID0gZGVwT2JqSWQuc3RhcnRzV2l0aCgiZ18iKSA/IGNvbW1vbk9ianMgOiBvYmpzOwogICAgICAgICAgICBpZiAoIW9ianNQb29sLmhhcyhkZXBPYmpJZCkpIHsKICAgICAgICAgICAgICBvYmpzUG9vbC5nZXQoZGVwT2JqSWQsIGNvbnRpbnVlQ2FsbGJhY2spOwogICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGkrKzsKICAgICAgaWYgKGkgPT09IGFyZ3NBcnJheUxlbikgewogICAgICAgIHJldHVybiBpOwogICAgICB9CiAgICAgIGlmIChjaHVua09wZXJhdGlvbnMgJiYgKytzdGVwcyA+IEVYRUNVVElPTl9TVEVQUykgewogICAgICAgIGlmIChEYXRlLm5vdygpID4gZW5kVGltZSkgewogICAgICAgICAgY29udGludWVDYWxsYmFjaygpOwogICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgfQogICAgICAgIHN0ZXBzID0gMDsKICAgICAgfQogICAgfQogIH0KICAjcmVzdG9yZUluaXRpYWxTdGF0ZSgpIHsKICAgIHdoaWxlICh0aGlzLnN0YXRlU3RhY2subGVuZ3RoIHx8IHRoaXMuaW5TTWFza01vZGUpIHsKICAgICAgdGhpcy5yZXN0b3JlKCk7CiAgICB9CiAgICB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgPSBudWxsOwogICAgdGhpcy5jdHgucmVzdG9yZSgpOwogICAgaWYgKHRoaXMudHJhbnNwYXJlbnRDYW52YXMpIHsKICAgICAgdGhpcy5jdHggPSB0aGlzLmNvbXBvc2l0ZUN0eDsKICAgICAgdGhpcy5jdHguc2F2ZSgpOwogICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7CiAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSh0aGlzLnRyYW5zcGFyZW50Q2FudmFzLCAwLCAwKTsKICAgICAgdGhpcy5jdHgucmVzdG9yZSgpOwogICAgICB0aGlzLnRyYW5zcGFyZW50Q2FudmFzID0gbnVsbDsKICAgIH0KICB9CiAgZW5kRHJhd2luZygpIHsKICAgIHRoaXMuI3Jlc3RvcmVJbml0aWFsU3RhdGUoKTsKICAgIHRoaXMuY2FjaGVkQ2FudmFzZXMuY2xlYXIoKTsKICAgIHRoaXMuY2FjaGVkUGF0dGVybnMuY2xlYXIoKTsKICAgIGZvciAoY29uc3QgY2FjaGUgb2YgdGhpcy5fY2FjaGVkQml0bWFwc01hcC52YWx1ZXMoKSkgewogICAgICBmb3IgKGNvbnN0IGNhbnZhcyBvZiBjYWNoZS52YWx1ZXMoKSkgewogICAgICAgIGlmICh0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQgIT09ICJ1bmRlZmluZWQiICYmIGNhbnZhcyBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KSB7CiAgICAgICAgICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2FjaGUuY2xlYXIoKTsKICAgIH0KICAgIHRoaXMuX2NhY2hlZEJpdG1hcHNNYXAuY2xlYXIoKTsKICAgIHRoaXMuI2RyYXdGaWx0ZXIoKTsKICB9CiAgI2RyYXdGaWx0ZXIoKSB7CiAgICBpZiAodGhpcy5wYWdlQ29sb3JzKSB7CiAgICAgIGNvbnN0IGhjbUZpbHRlcklkID0gdGhpcy5maWx0ZXJGYWN0b3J5LmFkZEhDTUZpbHRlcih0aGlzLnBhZ2VDb2xvcnMuZm9yZWdyb3VuZCwgdGhpcy5wYWdlQ29sb3JzLmJhY2tncm91bmQpOwogICAgICBpZiAoaGNtRmlsdGVySWQgIT09ICJub25lIikgewogICAgICAgIGNvbnN0IHNhdmVkRmlsdGVyID0gdGhpcy5jdHguZmlsdGVyOwogICAgICAgIHRoaXMuY3R4LmZpbHRlciA9IGhjbUZpbHRlcklkOwogICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSh0aGlzLmN0eC5jYW52YXMsIDAsIDApOwogICAgICAgIHRoaXMuY3R4LmZpbHRlciA9IHNhdmVkRmlsdGVyOwogICAgICB9CiAgICB9CiAgfQogIF9zY2FsZUltYWdlKGltZywgaW52ZXJzZVRyYW5zZm9ybSkgewogICAgY29uc3Qgd2lkdGggPSBpbWcud2lkdGggPz8gaW1nLmRpc3BsYXlXaWR0aDsKICAgIGNvbnN0IGhlaWdodCA9IGltZy5oZWlnaHQgPz8gaW1nLmRpc3BsYXlIZWlnaHQ7CiAgICBsZXQgd2lkdGhTY2FsZSA9IE1hdGgubWF4KE1hdGguaHlwb3QoaW52ZXJzZVRyYW5zZm9ybVswXSwgaW52ZXJzZVRyYW5zZm9ybVsxXSksIDEpOwogICAgbGV0IGhlaWdodFNjYWxlID0gTWF0aC5tYXgoTWF0aC5oeXBvdChpbnZlcnNlVHJhbnNmb3JtWzJdLCBpbnZlcnNlVHJhbnNmb3JtWzNdKSwgMSk7CiAgICBsZXQgcGFpbnRXaWR0aCA9IHdpZHRoLAogICAgICBwYWludEhlaWdodCA9IGhlaWdodDsKICAgIGxldCB0bXBDYW52YXNJZCA9ICJwcmVzY2FsZTEiOwogICAgbGV0IHRtcENhbnZhcywgdG1wQ3R4OwogICAgd2hpbGUgKHdpZHRoU2NhbGUgPiAyICYmIHBhaW50V2lkdGggPiAxIHx8IGhlaWdodFNjYWxlID4gMiAmJiBwYWludEhlaWdodCA+IDEpIHsKICAgICAgbGV0IG5ld1dpZHRoID0gcGFpbnRXaWR0aCwKICAgICAgICBuZXdIZWlnaHQgPSBwYWludEhlaWdodDsKICAgICAgaWYgKHdpZHRoU2NhbGUgPiAyICYmIHBhaW50V2lkdGggPiAxKSB7CiAgICAgICAgbmV3V2lkdGggPSBwYWludFdpZHRoID49IDE2Mzg0ID8gTWF0aC5mbG9vcihwYWludFdpZHRoIC8gMikgLSAxIHx8IDEgOiBNYXRoLmNlaWwocGFpbnRXaWR0aCAvIDIpOwogICAgICAgIHdpZHRoU2NhbGUgLz0gcGFpbnRXaWR0aCAvIG5ld1dpZHRoOwogICAgICB9CiAgICAgIGlmIChoZWlnaHRTY2FsZSA+IDIgJiYgcGFpbnRIZWlnaHQgPiAxKSB7CiAgICAgICAgbmV3SGVpZ2h0ID0gcGFpbnRIZWlnaHQgPj0gMTYzODQgPyBNYXRoLmZsb29yKHBhaW50SGVpZ2h0IC8gMikgLSAxIHx8IDEgOiBNYXRoLmNlaWwocGFpbnRIZWlnaHQpIC8gMjsKICAgICAgICBoZWlnaHRTY2FsZSAvPSBwYWludEhlaWdodCAvIG5ld0hlaWdodDsKICAgICAgfQogICAgICB0bXBDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyh0bXBDYW52YXNJZCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7CiAgICAgIHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0OwogICAgICB0bXBDdHguY2xlYXJSZWN0KDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpOwogICAgICB0bXBDdHguZHJhd0ltYWdlKGltZywgMCwgMCwgcGFpbnRXaWR0aCwgcGFpbnRIZWlnaHQsIDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpOwogICAgICBpbWcgPSB0bXBDYW52YXMuY2FudmFzOwogICAgICBwYWludFdpZHRoID0gbmV3V2lkdGg7CiAgICAgIHBhaW50SGVpZ2h0ID0gbmV3SGVpZ2h0OwogICAgICB0bXBDYW52YXNJZCA9IHRtcENhbnZhc0lkID09PSAicHJlc2NhbGUxIiA/ICJwcmVzY2FsZTIiIDogInByZXNjYWxlMSI7CiAgICB9CiAgICByZXR1cm4gewogICAgICBpbWcsCiAgICAgIHBhaW50V2lkdGgsCiAgICAgIHBhaW50SGVpZ2h0CiAgICB9OwogIH0KICBfY3JlYXRlTWFza0NhbnZhcyhvcElkeCwgaW1nKSB7CiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDsKICAgIGNvbnN0IHsKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfSA9IGltZzsKICAgIGNvbnN0IGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7CiAgICBjb25zdCBpc1BhdHRlcm5GaWxsID0gdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsOwogICAgY29uc3QgY3VycmVudFRyYW5zZm9ybSA9IGdldEN1cnJlbnRUcmFuc2Zvcm0oY3R4KTsKICAgIGxldCBjYWNoZSwgY2FjaGVLZXksIHNjYWxlZCwgbWFza0NhbnZhczsKICAgIGlmICgoaW1nLmJpdG1hcCB8fCBpbWcuZGF0YSkgJiYgaW1nLmNvdW50ID4gMSkgewogICAgICBjb25zdCBtYWluS2V5ID0gaW1nLmJpdG1hcCB8fCBpbWcuZGF0YS5idWZmZXI7CiAgICAgIGNhY2hlS2V5ID0gSlNPTi5zdHJpbmdpZnkoaXNQYXR0ZXJuRmlsbCA/IGN1cnJlbnRUcmFuc2Zvcm0gOiBbY3VycmVudFRyYW5zZm9ybS5zbGljZSgwLCA0KSwgZmlsbENvbG9yXSk7CiAgICAgIGNhY2hlID0gdGhpcy5fY2FjaGVkQml0bWFwc01hcC5nZXQobWFpbktleSk7CiAgICAgIGlmICghY2FjaGUpIHsKICAgICAgICBjYWNoZSA9IG5ldyBNYXAoKTsKICAgICAgICB0aGlzLl9jYWNoZWRCaXRtYXBzTWFwLnNldChtYWluS2V5LCBjYWNoZSk7CiAgICAgIH0KICAgICAgY29uc3QgY2FjaGVkSW1hZ2UgPSBjYWNoZS5nZXQoY2FjaGVLZXkpOwogICAgICBpZiAoY2FjaGVkSW1hZ2UgJiYgIWlzUGF0dGVybkZpbGwpIHsKICAgICAgICBjb25zdCBvZmZzZXRYID0gTWF0aC5yb3VuZChNYXRoLm1pbihjdXJyZW50VHJhbnNmb3JtWzBdLCBjdXJyZW50VHJhbnNmb3JtWzJdKSArIGN1cnJlbnRUcmFuc2Zvcm1bNF0pOwogICAgICAgIGNvbnN0IG9mZnNldFkgPSBNYXRoLnJvdW5kKE1hdGgubWluKGN1cnJlbnRUcmFuc2Zvcm1bMV0sIGN1cnJlbnRUcmFuc2Zvcm1bM10pICsgY3VycmVudFRyYW5zZm9ybVs1XSk7CiAgICAgICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucmVjb3JkRGVwZW5kZW5jaWVzKG9wSWR4LCBEZXBlbmRlbmNpZXMudHJhbnNmb3JtQW5kRmlsbCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGNhbnZhczogY2FjaGVkSW1hZ2UsCiAgICAgICAgICBvZmZzZXRYLAogICAgICAgICAgb2Zmc2V0WQogICAgICAgIH07CiAgICAgIH0KICAgICAgc2NhbGVkID0gY2FjaGVkSW1hZ2U7CiAgICB9CiAgICBpZiAoIXNjYWxlZCkgewogICAgICBtYXNrQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoIm1hc2tDYW52YXMiLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKG1hc2tDYW52YXMuY29udGV4dCwgaW1nKTsKICAgIH0KICAgIGxldCBtYXNrVG9DYW52YXMgPSBVdGlsLnRyYW5zZm9ybShjdXJyZW50VHJhbnNmb3JtLCBbMSAvIHdpZHRoLCAwLCAwLCAtMSAvIGhlaWdodCwgMCwgMF0pOwogICAgbWFza1RvQ2FudmFzID0gVXRpbC50cmFuc2Zvcm0obWFza1RvQ2FudmFzLCBbMSwgMCwgMCwgMSwgMCwgLWhlaWdodF0pOwogICAgY29uc3QgbWluTWF4ID0gTUlOX01BWF9JTklULnNsaWNlKCk7CiAgICBVdGlsLmF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLCAwLCB3aWR0aCwgaGVpZ2h0XSwgbWFza1RvQ2FudmFzLCBtaW5NYXgpOwogICAgY29uc3QgW21pblgsIG1pblksIG1heFgsIG1heFldID0gbWluTWF4OwogICAgY29uc3QgZHJhd25XaWR0aCA9IE1hdGgucm91bmQobWF4WCAtIG1pblgpIHx8IDE7CiAgICBjb25zdCBkcmF3bkhlaWdodCA9IE1hdGgucm91bmQobWF4WSAtIG1pblkpIHx8IDE7CiAgICBjb25zdCBmaWxsQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImZpbGxDYW52YXMiLCBkcmF3bldpZHRoLCBkcmF3bkhlaWdodCk7CiAgICBjb25zdCBmaWxsQ3R4ID0gZmlsbENhbnZhcy5jb250ZXh0OwogICAgY29uc3Qgb2Zmc2V0WCA9IG1pblg7CiAgICBjb25zdCBvZmZzZXRZID0gbWluWTsKICAgIGZpbGxDdHgudHJhbnNsYXRlKC1vZmZzZXRYLCAtb2Zmc2V0WSk7CiAgICBmaWxsQ3R4LnRyYW5zZm9ybSguLi5tYXNrVG9DYW52YXMpOwogICAgaWYgKCFzY2FsZWQpIHsKICAgICAgc2NhbGVkID0gdGhpcy5fc2NhbGVJbWFnZShtYXNrQ2FudmFzLmNhbnZhcywgZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UoZmlsbEN0eCkpOwogICAgICBzY2FsZWQgPSBzY2FsZWQuaW1nOwogICAgICBpZiAoY2FjaGUgJiYgaXNQYXR0ZXJuRmlsbCkgewogICAgICAgIGNhY2hlLnNldChjYWNoZUtleSwgc2NhbGVkKTsKICAgICAgfQogICAgfQogICAgZmlsbEN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBnZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoZ2V0Q3VycmVudFRyYW5zZm9ybShmaWxsQ3R4KSwgaW1nLmludGVycG9sYXRlKTsKICAgIGRyYXdJbWFnZUF0SW50ZWdlckNvb3JkcyhmaWxsQ3R4LCBzY2FsZWQsIDAsIDAsIHNjYWxlZC53aWR0aCwgc2NhbGVkLmhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICBmaWxsQ3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICJzb3VyY2UtaW4iOwogICAgY29uc3QgaW52ZXJzZSA9IFV0aWwudHJhbnNmb3JtKGdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKGZpbGxDdHgpLCBbMSwgMCwgMCwgMSwgLW9mZnNldFgsIC1vZmZzZXRZXSk7CiAgICBmaWxsQ3R4LmZpbGxTdHlsZSA9IGlzUGF0dGVybkZpbGwgPyBmaWxsQ29sb3IuZ2V0UGF0dGVybihjdHgsIHRoaXMsIGludmVyc2UsIFBhdGhUeXBlLkZJTEwsIG9wSWR4KSA6IGZpbGxDb2xvcjsKICAgIGZpbGxDdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICBpZiAoY2FjaGUgJiYgIWlzUGF0dGVybkZpbGwpIHsKICAgICAgdGhpcy5jYWNoZWRDYW52YXNlcy5kZWxldGUoImZpbGxDYW52YXMiKTsKICAgICAgY2FjaGUuc2V0KGNhY2hlS2V5LCBmaWxsQ2FudmFzLmNhbnZhcyk7CiAgICB9CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmREZXBlbmRlbmNpZXMob3BJZHgsIERlcGVuZGVuY2llcy50cmFuc2Zvcm1BbmRGaWxsKTsKICAgIHJldHVybiB7CiAgICAgIGNhbnZhczogZmlsbENhbnZhcy5jYW52YXMsCiAgICAgIG9mZnNldFg6IE1hdGgucm91bmQob2Zmc2V0WCksCiAgICAgIG9mZnNldFk6IE1hdGgucm91bmQob2Zmc2V0WSkKICAgIH07CiAgfQogIHNldExpbmVXaWR0aChvcElkeCwgd2lkdGgpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNpbXBsZURhdGEoImxpbmVXaWR0aCIsIG9wSWR4KTsKICAgIGlmICh3aWR0aCAhPT0gdGhpcy5jdXJyZW50LmxpbmVXaWR0aCkgewogICAgICB0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nWzBdID0gLTE7CiAgICB9CiAgICB0aGlzLmN1cnJlbnQubGluZVdpZHRoID0gd2lkdGg7CiAgICB0aGlzLmN0eC5saW5lV2lkdGggPSB3aWR0aDsKICB9CiAgc2V0TGluZUNhcChvcElkeCwgc3R5bGUpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNpbXBsZURhdGEoImxpbmVDYXAiLCBvcElkeCk7CiAgICB0aGlzLmN0eC5saW5lQ2FwID0gTElORV9DQVBfU1RZTEVTW3N0eWxlXTsKICB9CiAgc2V0TGluZUpvaW4ob3BJZHgsIHN0eWxlKSB7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRTaW1wbGVEYXRhKCJsaW5lSm9pbiIsIG9wSWR4KTsKICAgIHRoaXMuY3R4LmxpbmVKb2luID0gTElORV9KT0lOX1NUWUxFU1tzdHlsZV07CiAgfQogIHNldE1pdGVyTGltaXQob3BJZHgsIGxpbWl0KSB7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRTaW1wbGVEYXRhKCJtaXRlckxpbWl0Iiwgb3BJZHgpOwogICAgdGhpcy5jdHgubWl0ZXJMaW1pdCA9IGxpbWl0OwogIH0KICBzZXREYXNoKG9wSWR4LCBkYXNoQXJyYXksIGRhc2hQaGFzZSkgewogICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucmVjb3JkU2ltcGxlRGF0YSgiZGFzaCIsIG9wSWR4KTsKICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4OwogICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIGN0eC5zZXRMaW5lRGFzaChkYXNoQXJyYXkpOwogICAgICBjdHgubGluZURhc2hPZmZzZXQgPSBkYXNoUGhhc2U7CiAgICB9CiAgfQogIHNldFJlbmRlcmluZ0ludGVudChvcElkeCwgaW50ZW50KSB7fQogIHNldEZsYXRuZXNzKG9wSWR4LCBmbGF0bmVzcykge30KICBzZXRHU3RhdGUob3BJZHgsIHN0YXRlcykgewogICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc3RhdGVzKSB7CiAgICAgIHN3aXRjaCAoa2V5KSB7CiAgICAgICAgY2FzZSAiTFciOgogICAgICAgICAgdGhpcy5zZXRMaW5lV2lkdGgob3BJZHgsIHZhbHVlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkxDIjoKICAgICAgICAgIHRoaXMuc2V0TGluZUNhcChvcElkeCwgdmFsdWUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiTEoiOgogICAgICAgICAgdGhpcy5zZXRMaW5lSm9pbihvcElkeCwgdmFsdWUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiTUwiOgogICAgICAgICAgdGhpcy5zZXRNaXRlckxpbWl0KG9wSWR4LCB2YWx1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJEIjoKICAgICAgICAgIHRoaXMuc2V0RGFzaChvcElkeCwgdmFsdWVbMF0sIHZhbHVlWzFdKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlJJIjoKICAgICAgICAgIHRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KG9wSWR4LCB2YWx1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJGTCI6CiAgICAgICAgICB0aGlzLnNldEZsYXRuZXNzKG9wSWR4LCB2YWx1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJGb250IjoKICAgICAgICAgIHRoaXMuc2V0Rm9udChvcElkeCwgdmFsdWVbMF0sIHZhbHVlWzFdKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkNBIjoKICAgICAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNpbXBsZURhdGEoInN0cm9rZUFscGhhIiwgb3BJZHgpOwogICAgICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUFscGhhID0gdmFsdWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJjYSI6CiAgICAgICAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRTaW1wbGVEYXRhKCJmaWxsQWxwaGEiLCBvcElkeCk7CiAgICAgICAgICB0aGlzLmN0eC5nbG9iYWxBbHBoYSA9IHRoaXMuY3VycmVudC5maWxsQWxwaGEgPSB2YWx1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkJNIjoKICAgICAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNpbXBsZURhdGEoImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsIG9wSWR4KTsKICAgICAgICAgIHRoaXMuY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHZhbHVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiU01hc2siOgogICAgICAgICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucmVjb3JkU2ltcGxlRGF0YSgiU01hc2siLCBvcElkeCk7CiAgICAgICAgICB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgPSB2YWx1ZSA/IHRoaXMudGVtcFNNYXNrIDogbnVsbDsKICAgICAgICAgIHRoaXMudGVtcFNNYXNrID0gbnVsbDsKICAgICAgICAgIHRoaXMuY2hlY2tTTWFza1N0YXRlKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJUUiI6CiAgICAgICAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRTaW1wbGVEYXRhKCJmaWx0ZXIiLCBvcElkeCk7CiAgICAgICAgICB0aGlzLmN0eC5maWx0ZXIgPSB0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzID0gdGhpcy5maWx0ZXJGYWN0b3J5LmFkZEZpbHRlcih2YWx1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KICBnZXQgaW5TTWFza01vZGUoKSB7CiAgICByZXR1cm4gISF0aGlzLnN1c3BlbmRlZEN0eDsKICB9CiAgY2hlY2tTTWFza1N0YXRlKCkgewogICAgY29uc3QgaW5TTWFza01vZGUgPSB0aGlzLmluU01hc2tNb2RlOwogICAgaWYgKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayAmJiAhaW5TTWFza01vZGUpIHsKICAgICAgdGhpcy5iZWdpblNNYXNrTW9kZSgpOwogICAgfSBlbHNlIGlmICghdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrICYmIGluU01hc2tNb2RlKSB7CiAgICAgIHRoaXMuZW5kU01hc2tNb2RlKCk7CiAgICB9CiAgfQogIGJlZ2luU01hc2tNb2RlKG9wSWR4KSB7CiAgICBpZiAodGhpcy5pblNNYXNrTW9kZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoImJlZ2luU01hc2tNb2RlIGNhbGxlZCB3aGlsZSBhbHJlYWR5IGluIHNtYXNrIG1vZGUiKTsKICAgIH0KICAgIGNvbnN0IGRyYXduV2lkdGggPSB0aGlzLmN0eC5jYW52YXMud2lkdGg7CiAgICBjb25zdCBkcmF3bkhlaWdodCA9IHRoaXMuY3R4LmNhbnZhcy5oZWlnaHQ7CiAgICBjb25zdCBjYWNoZUlkID0gInNtYXNrR3JvdXBBdCIgKyB0aGlzLmdyb3VwTGV2ZWw7CiAgICBjb25zdCBzY3JhdGNoQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoY2FjaGVJZCwgZHJhd25XaWR0aCwgZHJhd25IZWlnaHQpOwogICAgdGhpcy5zdXNwZW5kZWRDdHggPSB0aGlzLmN0eDsKICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4ID0gc2NyYXRjaENhbnZhcy5jb250ZXh0OwogICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnN1c3BlbmRlZEN0eC5nZXRUcmFuc2Zvcm0oKSk7CiAgICBjb3B5Q3R4U3RhdGUodGhpcy5zdXNwZW5kZWRDdHgsIGN0eCk7CiAgICBtaXJyb3JDb250ZXh0T3BlcmF0aW9ucyhjdHgsIHRoaXMuc3VzcGVuZGVkQ3R4KTsKICAgIHRoaXMuc2V0R1N0YXRlKG9wSWR4LCBbWyJCTSIsICJzb3VyY2Utb3ZlciJdXSk7CiAgfQogIGVuZFNNYXNrTW9kZSgpIHsKICAgIGlmICghdGhpcy5pblNNYXNrTW9kZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoImVuZFNNYXNrTW9kZSBjYWxsZWQgd2hpbGUgbm90IGluIHNtYXNrIG1vZGUiKTsKICAgIH0KICAgIHRoaXMuY3R4Ll9yZW1vdmVNaXJyb3JpbmcoKTsKICAgIGNvcHlDdHhTdGF0ZSh0aGlzLmN0eCwgdGhpcy5zdXNwZW5kZWRDdHgpOwogICAgdGhpcy5jdHggPSB0aGlzLnN1c3BlbmRlZEN0eDsKICAgIHRoaXMuc3VzcGVuZGVkQ3R4ID0gbnVsbDsKICB9CiAgY29tcG9zZShkaXJ0eUJveCkgewogICAgaWYgKCF0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2spIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFkaXJ0eUJveCkgewogICAgICBkaXJ0eUJveCA9IFswLCAwLCB0aGlzLmN0eC5jYW52YXMud2lkdGgsIHRoaXMuY3R4LmNhbnZhcy5oZWlnaHRdOwogICAgfSBlbHNlIHsKICAgICAgZGlydHlCb3hbMF0gPSBNYXRoLmZsb29yKGRpcnR5Qm94WzBdKTsKICAgICAgZGlydHlCb3hbMV0gPSBNYXRoLmZsb29yKGRpcnR5Qm94WzFdKTsKICAgICAgZGlydHlCb3hbMl0gPSBNYXRoLmNlaWwoZGlydHlCb3hbMl0pOwogICAgICBkaXJ0eUJveFszXSA9IE1hdGguY2VpbChkaXJ0eUJveFszXSk7CiAgICB9CiAgICBjb25zdCBzbWFzayA9IHRoaXMuY3VycmVudC5hY3RpdmVTTWFzazsKICAgIGNvbnN0IHN1c3BlbmRlZEN0eCA9IHRoaXMuc3VzcGVuZGVkQ3R4OwogICAgdGhpcy5jb21wb3NlU01hc2soc3VzcGVuZGVkQ3R4LCBzbWFzaywgdGhpcy5jdHgsIGRpcnR5Qm94KTsKICAgIHRoaXMuY3R4LnNhdmUoKTsKICAgIHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTsKICAgIHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmN0eC5jYW52YXMud2lkdGgsIHRoaXMuY3R4LmNhbnZhcy5oZWlnaHQpOwogICAgdGhpcy5jdHgucmVzdG9yZSgpOwogIH0KICBjb21wb3NlU01hc2soY3R4LCBzbWFzaywgbGF5ZXJDdHgsIGxheWVyQm94KSB7CiAgICBjb25zdCBsYXllck9mZnNldFggPSBsYXllckJveFswXTsKICAgIGNvbnN0IGxheWVyT2Zmc2V0WSA9IGxheWVyQm94WzFdOwogICAgY29uc3QgbGF5ZXJXaWR0aCA9IGxheWVyQm94WzJdIC0gbGF5ZXJPZmZzZXRYOwogICAgY29uc3QgbGF5ZXJIZWlnaHQgPSBsYXllckJveFszXSAtIGxheWVyT2Zmc2V0WTsKICAgIGlmIChsYXllcldpZHRoID09PSAwIHx8IGxheWVySGVpZ2h0ID09PSAwKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuZ2VuZXJpY0NvbXBvc2VTTWFzayhzbWFzay5jb250ZXh0LCBsYXllckN0eCwgbGF5ZXJXaWR0aCwgbGF5ZXJIZWlnaHQsIHNtYXNrLnN1YnR5cGUsIHNtYXNrLmJhY2tkcm9wLCBzbWFzay50cmFuc2Zlck1hcCwgbGF5ZXJPZmZzZXRYLCBsYXllck9mZnNldFksIHNtYXNrLm9mZnNldFgsIHNtYXNrLm9mZnNldFkpOwogICAgY3R4LnNhdmUoKTsKICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7CiAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gInNvdXJjZS1vdmVyIjsKICAgIGN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7CiAgICBjdHguZHJhd0ltYWdlKGxheWVyQ3R4LmNhbnZhcywgMCwgMCk7CiAgICBjdHgucmVzdG9yZSgpOwogIH0KICBnZW5lcmljQ29tcG9zZVNNYXNrKG1hc2tDdHgsIGxheWVyQ3R4LCB3aWR0aCwgaGVpZ2h0LCBzdWJ0eXBlLCBiYWNrZHJvcCwgdHJhbnNmZXJNYXAsIGxheWVyT2Zmc2V0WCwgbGF5ZXJPZmZzZXRZLCBtYXNrT2Zmc2V0WCwgbWFza09mZnNldFkpIHsKICAgIGxldCBtYXNrQ2FudmFzID0gbWFza0N0eC5jYW52YXM7CiAgICBsZXQgbWFza1ggPSBsYXllck9mZnNldFggLSBtYXNrT2Zmc2V0WDsKICAgIGxldCBtYXNrWSA9IGxheWVyT2Zmc2V0WSAtIG1hc2tPZmZzZXRZOwogICAgaWYgKGJhY2tkcm9wKSB7CiAgICAgIGlmIChtYXNrWCA8IDAgfHwgbWFza1kgPCAwIHx8IG1hc2tYICsgd2lkdGggPiBtYXNrQ2FudmFzLndpZHRoIHx8IG1hc2tZICsgaGVpZ2h0ID4gbWFza0NhbnZhcy5oZWlnaHQpIHsKICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0V4dGVuc2lvbiIsIHdpZHRoLCBoZWlnaHQpOwogICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5jb250ZXh0OwogICAgICAgIGN0eC5kcmF3SW1hZ2UobWFza0NhbnZhcywgLW1hc2tYLCAtbWFza1kpOwogICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAiZGVzdGluYXRpb24tYXRvcCI7CiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGJhY2tkcm9wOwogICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gInNvdXJjZS1vdmVyIjsKICAgICAgICBtYXNrQ2FudmFzID0gY2FudmFzLmNhbnZhczsKICAgICAgICBtYXNrWCA9IG1hc2tZID0gMDsKICAgICAgfSBlbHNlIHsKICAgICAgICBtYXNrQ3R4LnNhdmUoKTsKICAgICAgICBtYXNrQ3R4Lmdsb2JhbEFscGhhID0gMTsKICAgICAgICBtYXNrQ3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTsKICAgICAgICBjb25zdCBjbGlwID0gbmV3IFBhdGgyRCgpOwogICAgICAgIGNsaXAucmVjdChtYXNrWCwgbWFza1ksIHdpZHRoLCBoZWlnaHQpOwogICAgICAgIG1hc2tDdHguY2xpcChjbGlwKTsKICAgICAgICBtYXNrQ3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICJkZXN0aW5hdGlvbi1hdG9wIjsKICAgICAgICBtYXNrQ3R4LmZpbGxTdHlsZSA9IGJhY2tkcm9wOwogICAgICAgIG1hc2tDdHguZmlsbFJlY3QobWFza1gsIG1hc2tZLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICBtYXNrQ3R4LnJlc3RvcmUoKTsKICAgICAgfQogICAgfQogICAgbGF5ZXJDdHguc2F2ZSgpOwogICAgbGF5ZXJDdHguZ2xvYmFsQWxwaGEgPSAxOwogICAgbGF5ZXJDdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApOwogICAgaWYgKHN1YnR5cGUgPT09ICJBbHBoYSIgJiYgdHJhbnNmZXJNYXApIHsKICAgICAgbGF5ZXJDdHguZmlsdGVyID0gdGhpcy5maWx0ZXJGYWN0b3J5LmFkZEFscGhhRmlsdGVyKHRyYW5zZmVyTWFwKTsKICAgIH0gZWxzZSBpZiAoc3VidHlwZSA9PT0gIkx1bWlub3NpdHkiKSB7CiAgICAgIGxheWVyQ3R4LmZpbHRlciA9IHRoaXMuZmlsdGVyRmFjdG9yeS5hZGRMdW1pbm9zaXR5RmlsdGVyKHRyYW5zZmVyTWFwKTsKICAgIH0KICAgIGNvbnN0IGNsaXAgPSBuZXcgUGF0aDJEKCk7CiAgICBjbGlwLnJlY3QobGF5ZXJPZmZzZXRYLCBsYXllck9mZnNldFksIHdpZHRoLCBoZWlnaHQpOwogICAgbGF5ZXJDdHguY2xpcChjbGlwKTsKICAgIGxheWVyQ3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICJkZXN0aW5hdGlvbi1pbiI7CiAgICBsYXllckN0eC5kcmF3SW1hZ2UobWFza0NhbnZhcywgbWFza1gsIG1hc2tZLCB3aWR0aCwgaGVpZ2h0LCBsYXllck9mZnNldFgsIGxheWVyT2Zmc2V0WSwgd2lkdGgsIGhlaWdodCk7CiAgICBsYXllckN0eC5yZXN0b3JlKCk7CiAgfQogIHNhdmUob3BJZHgpIHsKICAgIGlmICh0aGlzLmluU01hc2tNb2RlKSB7CiAgICAgIGNvcHlDdHhTdGF0ZSh0aGlzLmN0eCwgdGhpcy5zdXNwZW5kZWRDdHgpOwogICAgfQogICAgdGhpcy5jdHguc2F2ZSgpOwogICAgY29uc3Qgb2xkID0gdGhpcy5jdXJyZW50OwogICAgdGhpcy5zdGF0ZVN0YWNrLnB1c2gob2xkKTsKICAgIHRoaXMuY3VycmVudCA9IG9sZC5jbG9uZSgpOwogICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8uc2F2ZShvcElkeCk7CiAgfQogIHJlc3RvcmUob3BJZHgpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlc3RvcmUob3BJZHgpOwogICAgaWYgKHRoaXMuc3RhdGVTdGFjay5sZW5ndGggPT09IDApIHsKICAgICAgaWYgKHRoaXMuaW5TTWFza01vZGUpIHsKICAgICAgICB0aGlzLmVuZFNNYXNrTW9kZSgpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuY3VycmVudCA9IHRoaXMuc3RhdGVTdGFjay5wb3AoKTsKICAgIHRoaXMuY3R4LnJlc3RvcmUoKTsKICAgIGlmICh0aGlzLmluU01hc2tNb2RlKSB7CiAgICAgIGNvcHlDdHhTdGF0ZSh0aGlzLnN1c3BlbmRlZEN0eCwgdGhpcy5jdHgpOwogICAgfQogICAgdGhpcy5jaGVja1NNYXNrU3RhdGUoKTsKICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsOwogICAgdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZ1swXSA9IC0xOwogICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IG51bGw7CiAgfQogIHRyYW5zZm9ybShvcElkeCwgYSwgYiwgYywgZCwgZSwgZikgewogICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucmVjb3JkSW5jcmVtZW50YWxEYXRhKCJ0cmFuc2Zvcm0iLCBvcElkeCk7CiAgICB0aGlzLmN0eC50cmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZik7CiAgICB0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nWzBdID0gLTE7CiAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDsKICB9CiAgY29uc3RydWN0UGF0aChvcElkeCwgb3AsIGRhdGEsIG1pbk1heCkgewogICAgbGV0IFtwYXRoXSA9IGRhdGE7CiAgICBpZiAoIW1pbk1heCkgewogICAgICBwYXRoIHx8PSBkYXRhWzBdID0gbmV3IFBhdGgyRCgpOwogICAgICB0aGlzW29wXShvcElkeCwgcGF0aCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLmRlcGVuZGVuY3lUcmFja2VyICE9PSBudWxsKSB7CiAgICAgIGNvbnN0IG91dGVyRXh0cmFTaXplID0gb3AgPT09IE9QUy5zdHJva2UgPyB0aGlzLmN1cnJlbnQubGluZVdpZHRoIC8gMiA6IDA7CiAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXIucmVzZXRCQm94KG9wSWR4KS5yZWNvcmRCQm94KG9wSWR4LCB0aGlzLmN0eCwgbWluTWF4WzBdIC0gb3V0ZXJFeHRyYVNpemUsIG1pbk1heFsyXSArIG91dGVyRXh0cmFTaXplLCBtaW5NYXhbMV0gLSBvdXRlckV4dHJhU2l6ZSwgbWluTWF4WzNdICsgb3V0ZXJFeHRyYVNpemUpLnJlY29yZERlcGVuZGVuY2llcyhvcElkeCwgWyJ0cmFuc2Zvcm0iXSk7CiAgICB9CiAgICBpZiAoIShwYXRoIGluc3RhbmNlb2YgUGF0aDJEKSkgewogICAgICBwYXRoID0gZGF0YVswXSA9IG1ha2VQYXRoRnJvbURyYXdPUFMocGF0aCk7CiAgICB9CiAgICBVdGlsLmF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KG1pbk1heCwgZ2V0Q3VycmVudFRyYW5zZm9ybSh0aGlzLmN0eCksIHRoaXMuY3VycmVudC5taW5NYXgpOwogICAgdGhpc1tvcF0ob3BJZHgsIHBhdGgpOwogICAgdGhpcy5fcGF0aFN0YXJ0SWR4ID0gb3BJZHg7CiAgfQogIGNsb3NlUGF0aChvcElkeCkgewogICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7CiAgfQogIHN0cm9rZShvcElkeCwgcGF0aCwgY29uc3VtZVBhdGggPSB0cnVlKSB7CiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDsKICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yOwogICAgY3R4Lmdsb2JhbEFscGhhID0gdGhpcy5jdXJyZW50LnN0cm9rZUFscGhhOwogICAgaWYgKHRoaXMuY29udGVudFZpc2libGUpIHsKICAgICAgaWYgKHR5cGVvZiBzdHJva2VDb2xvciA9PT0gIm9iamVjdCIgJiYgc3Ryb2tlQ29sb3I/LmdldFBhdHRlcm4pIHsKICAgICAgICBjb25zdCBiYXNlVHJhbnNmb3JtID0gc3Ryb2tlQ29sb3IuaXNNb2RpZnlpbmdDdXJyZW50VHJhbnNmb3JtKCkgPyBjdHguZ2V0VHJhbnNmb3JtKCkgOiBudWxsOwogICAgICAgIGN0eC5zYXZlKCk7CiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3IuZ2V0UGF0dGVybihjdHgsIHRoaXMsIGdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKGN0eCksIFBhdGhUeXBlLlNUUk9LRSwgb3BJZHgpOwogICAgICAgIGlmIChiYXNlVHJhbnNmb3JtKSB7CiAgICAgICAgICBjb25zdCBuZXdQYXRoID0gbmV3IFBhdGgyRCgpOwogICAgICAgICAgbmV3UGF0aC5hZGRQYXRoKHBhdGgsIGN0eC5nZXRUcmFuc2Zvcm0oKS5pbnZlcnRTZWxmKCkubXVsdGlwbHlTZWxmKGJhc2VUcmFuc2Zvcm0pKTsKICAgICAgICAgIHBhdGggPSBuZXdQYXRoOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlc2NhbGVBbmRTdHJva2UocGF0aCwgZmFsc2UpOwogICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5yZXNjYWxlQW5kU3Ryb2tlKHBhdGgsIHRydWUpOwogICAgICB9CiAgICB9CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmREZXBlbmRlbmNpZXMob3BJZHgsIERlcGVuZGVuY2llcy5zdHJva2UpOwogICAgaWYgKGNvbnN1bWVQYXRoKSB7CiAgICAgIHRoaXMuY29uc3VtZVBhdGgob3BJZHgsIHBhdGgsIHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KFBhdGhUeXBlLlNUUk9LRSwgZ2V0Q3VycmVudFRyYW5zZm9ybSh0aGlzLmN0eCkpKTsKICAgIH0KICAgIGN0eC5nbG9iYWxBbHBoYSA9IHRoaXMuY3VycmVudC5maWxsQWxwaGE7CiAgfQogIGNsb3NlU3Ryb2tlKG9wSWR4LCBwYXRoKSB7CiAgICB0aGlzLnN0cm9rZShvcElkeCwgcGF0aCk7CiAgfQogIGZpbGwob3BJZHgsIHBhdGgsIGNvbnN1bWVQYXRoID0gdHJ1ZSkgewogICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7CiAgICBjb25zdCBmaWxsQ29sb3IgPSB0aGlzLmN1cnJlbnQuZmlsbENvbG9yOwogICAgY29uc3QgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDsKICAgIGxldCBuZWVkUmVzdG9yZSA9IGZhbHNlOwogICAgaWYgKGlzUGF0dGVybkZpbGwpIHsKICAgICAgY29uc3QgYmFzZVRyYW5zZm9ybSA9IGZpbGxDb2xvci5pc01vZGlmeWluZ0N1cnJlbnRUcmFuc2Zvcm0oKSA/IGN0eC5nZXRUcmFuc2Zvcm0oKSA6IG51bGw7CiAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnNhdmUob3BJZHgpOwogICAgICBjdHguc2F2ZSgpOwogICAgICBjdHguZmlsbFN0eWxlID0gZmlsbENvbG9yLmdldFBhdHRlcm4oY3R4LCB0aGlzLCBnZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZShjdHgpLCBQYXRoVHlwZS5GSUxMLCBvcElkeCk7CiAgICAgIGlmIChiYXNlVHJhbnNmb3JtKSB7CiAgICAgICAgY29uc3QgbmV3UGF0aCA9IG5ldyBQYXRoMkQoKTsKICAgICAgICBuZXdQYXRoLmFkZFBhdGgocGF0aCwgY3R4LmdldFRyYW5zZm9ybSgpLmludmVydFNlbGYoKS5tdWx0aXBseVNlbGYoYmFzZVRyYW5zZm9ybSkpOwogICAgICAgIHBhdGggPSBuZXdQYXRoOwogICAgICB9CiAgICAgIG5lZWRSZXN0b3JlID0gdHJ1ZTsKICAgIH0KICAgIGNvbnN0IGludGVyc2VjdCA9IHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KCk7CiAgICBpZiAodGhpcy5jb250ZW50VmlzaWJsZSAmJiBpbnRlcnNlY3QgIT09IG51bGwpIHsKICAgICAgaWYgKHRoaXMucGVuZGluZ0VPRmlsbCkgewogICAgICAgIGN0eC5maWxsKHBhdGgsICJldmVub2RkIik7CiAgICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3R4LmZpbGwocGF0aCk7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZERlcGVuZGVuY2llcyhvcElkeCwgRGVwZW5kZW5jaWVzLmZpbGwpOwogICAgaWYgKG5lZWRSZXN0b3JlKSB7CiAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlc3RvcmUob3BJZHgpOwogICAgfQogICAgaWYgKGNvbnN1bWVQYXRoKSB7CiAgICAgIHRoaXMuY29uc3VtZVBhdGgob3BJZHgsIHBhdGgsIGludGVyc2VjdCk7CiAgICB9CiAgfQogIGVvRmlsbChvcElkeCwgcGF0aCkgewogICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gdHJ1ZTsKICAgIHRoaXMuZmlsbChvcElkeCwgcGF0aCk7CiAgfQogIGZpbGxTdHJva2Uob3BJZHgsIHBhdGgpIHsKICAgIHRoaXMuZmlsbChvcElkeCwgcGF0aCwgZmFsc2UpOwogICAgdGhpcy5zdHJva2Uob3BJZHgsIHBhdGgsIGZhbHNlKTsKICAgIHRoaXMuY29uc3VtZVBhdGgob3BJZHgsIHBhdGgpOwogIH0KICBlb0ZpbGxTdHJva2Uob3BJZHgsIHBhdGgpIHsKICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IHRydWU7CiAgICB0aGlzLmZpbGxTdHJva2Uob3BJZHgsIHBhdGgpOwogIH0KICBjbG9zZUZpbGxTdHJva2Uob3BJZHgsIHBhdGgpIHsKICAgIHRoaXMuZmlsbFN0cm9rZShvcElkeCwgcGF0aCk7CiAgfQogIGNsb3NlRU9GaWxsU3Ryb2tlKG9wSWR4LCBwYXRoKSB7CiAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSB0cnVlOwogICAgdGhpcy5maWxsU3Ryb2tlKG9wSWR4LCBwYXRoKTsKICB9CiAgZW5kUGF0aChvcElkeCwgcGF0aCkgewogICAgdGhpcy5jb25zdW1lUGF0aChvcElkeCwgcGF0aCk7CiAgfQogIHJhd0ZpbGxQYXRoKG9wSWR4LCBwYXRoKSB7CiAgICB0aGlzLmN0eC5maWxsKHBhdGgpOwogICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucmVjb3JkRGVwZW5kZW5jaWVzKG9wSWR4LCBEZXBlbmRlbmNpZXMucmF3RmlsbFBhdGgpLnJlY29yZE9wZXJhdGlvbihvcElkeCk7CiAgfQogIGNsaXAob3BJZHgpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZEZ1dHVyZUZvcmNlZERlcGVuZGVuY3koImNsaXBNb2RlIiwgb3BJZHgpOwogICAgdGhpcy5wZW5kaW5nQ2xpcCA9IE5PUk1BTF9DTElQOwogIH0KICBlb0NsaXAob3BJZHgpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZEZ1dHVyZUZvcmNlZERlcGVuZGVuY3koImNsaXBNb2RlIiwgb3BJZHgpOwogICAgdGhpcy5wZW5kaW5nQ2xpcCA9IEVPX0NMSVA7CiAgfQogIGJlZ2luVGV4dChvcElkeCkgewogICAgdGhpcy5jdXJyZW50LnRleHRNYXRyaXggPSBudWxsOwogICAgdGhpcy5jdXJyZW50LnRleHRNYXRyaXhTY2FsZSA9IDE7CiAgICB0aGlzLmN1cnJlbnQueCA9IHRoaXMuY3VycmVudC5saW5lWCA9IDA7CiAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSA9IDA7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRPcGVuTWFya2VyKG9wSWR4KS5yZXNldEluY3JlbWVudGFsRGF0YSgic2FtZUxpbmVUZXh0IikucmVzZXRJbmNyZW1lbnRhbERhdGEoIm1vdmVUZXh0Iiwgb3BJZHgpOwogIH0KICBlbmRUZXh0KG9wSWR4KSB7CiAgICBjb25zdCBwYXRocyA9IHRoaXMucGVuZGluZ1RleHRQYXRoczsKICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4OwogICAgaWYgKHRoaXMuZGVwZW5kZW5jeVRyYWNrZXIpIHsKICAgICAgY29uc3QgewogICAgICAgIGRlcGVuZGVuY3lUcmFja2VyCiAgICAgIH0gPSB0aGlzOwogICAgICBpZiAocGF0aHMgIT09IHVuZGVmaW5lZCkgewogICAgICAgIGRlcGVuZGVuY3lUcmFja2VyLnJlY29yZEZ1dHVyZUZvcmNlZERlcGVuZGVuY3koInRleHRDbGlwIiwgZGVwZW5kZW5jeVRyYWNrZXIuZ2V0T3Blbk1hcmtlcigpKS5yZWNvcmRGdXR1cmVGb3JjZWREZXBlbmRlbmN5KCJ0ZXh0Q2xpcCIsIG9wSWR4KTsKICAgICAgfQogICAgICBkZXBlbmRlbmN5VHJhY2tlci5yZWNvcmRDbG9zZU1hcmtlcihvcElkeCk7CiAgICB9CiAgICBpZiAocGF0aHMgIT09IHVuZGVmaW5lZCkgewogICAgICBjb25zdCBuZXdQYXRoID0gbmV3IFBhdGgyRCgpOwogICAgICBjb25zdCBpbnZUcmFuc2YgPSBjdHguZ2V0VHJhbnNmb3JtKCkuaW52ZXJ0U2VsZigpOwogICAgICBmb3IgKGNvbnN0IHsKICAgICAgICB0cmFuc2Zvcm0sCiAgICAgICAgeCwKICAgICAgICB5LAogICAgICAgIGZvbnRTaXplLAogICAgICAgIHBhdGgKICAgICAgfSBvZiBwYXRocykgewogICAgICAgIGlmICghcGF0aCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIG5ld1BhdGguYWRkUGF0aChwYXRoLCBuZXcgRE9NTWF0cml4KHRyYW5zZm9ybSkucHJlTXVsdGlwbHlTZWxmKGludlRyYW5zZikudHJhbnNsYXRlKHgsIHkpLnNjYWxlKGZvbnRTaXplLCAtZm9udFNpemUpKTsKICAgICAgfQogICAgICBjdHguY2xpcChuZXdQYXRoKTsKICAgIH0KICAgIGRlbGV0ZSB0aGlzLnBlbmRpbmdUZXh0UGF0aHM7CiAgfQogIHNldENoYXJTcGFjaW5nKG9wSWR4LCBzcGFjaW5nKSB7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRTaW1wbGVEYXRhKCJjaGFyU3BhY2luZyIsIG9wSWR4KTsKICAgIHRoaXMuY3VycmVudC5jaGFyU3BhY2luZyA9IHNwYWNpbmc7CiAgfQogIHNldFdvcmRTcGFjaW5nKG9wSWR4LCBzcGFjaW5nKSB7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRTaW1wbGVEYXRhKCJ3b3JkU3BhY2luZyIsIG9wSWR4KTsKICAgIHRoaXMuY3VycmVudC53b3JkU3BhY2luZyA9IHNwYWNpbmc7CiAgfQogIHNldEhTY2FsZShvcElkeCwgc2NhbGUpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNpbXBsZURhdGEoImhTY2FsZSIsIG9wSWR4KTsKICAgIHRoaXMuY3VycmVudC50ZXh0SFNjYWxlID0gc2NhbGUgLyAxMDA7CiAgfQogIHNldExlYWRpbmcob3BJZHgsIGxlYWRpbmcpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNpbXBsZURhdGEoImxlYWRpbmciLCBvcElkeCk7CiAgICB0aGlzLmN1cnJlbnQubGVhZGluZyA9IC1sZWFkaW5nOwogIH0KICBzZXRGb250KG9wSWR4LCBmb250UmVmTmFtZSwgc2l6ZSkgewogICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucmVjb3JkU2ltcGxlRGF0YSgiZm9udCIsIG9wSWR4KS5yZWNvcmRTaW1wbGVEYXRhRnJvbU5hbWVkKCJmb250T2JqIiwgZm9udFJlZk5hbWUsIG9wSWR4KTsKICAgIGNvbnN0IGZvbnRPYmogPSB0aGlzLmNvbW1vbk9ianMuZ2V0KGZvbnRSZWZOYW1lKTsKICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7CiAgICBpZiAoIWZvbnRPYmopIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kIGZvbnQgZm9yICR7Zm9udFJlZk5hbWV9YCk7CiAgICB9CiAgICBjdXJyZW50LmZvbnRNYXRyaXggPSBmb250T2JqLmZvbnRNYXRyaXggfHwgRk9OVF9JREVOVElUWV9NQVRSSVg7CiAgICBpZiAoY3VycmVudC5mb250TWF0cml4WzBdID09PSAwIHx8IGN1cnJlbnQuZm9udE1hdHJpeFszXSA9PT0gMCkgewogICAgICB3YXJuKCJJbnZhbGlkIGZvbnQgbWF0cml4IGZvciBmb250ICIgKyBmb250UmVmTmFtZSk7CiAgICB9CiAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgc2l6ZSA9IC1zaXplOwogICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAtMTsKICAgIH0gZWxzZSB7CiAgICAgIGN1cnJlbnQuZm9udERpcmVjdGlvbiA9IDE7CiAgICB9CiAgICB0aGlzLmN1cnJlbnQuZm9udCA9IGZvbnRPYmo7CiAgICB0aGlzLmN1cnJlbnQuZm9udFNpemUgPSBzaXplOwogICAgaWYgKGZvbnRPYmouaXNUeXBlM0ZvbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbmFtZSA9IGZvbnRPYmoubG9hZGVkTmFtZSB8fCAic2Fucy1zZXJpZiI7CiAgICBjb25zdCB0eXBlZmFjZSA9IGZvbnRPYmouc3lzdGVtRm9udEluZm8/LmNzcyB8fCBgIiR7bmFtZX0iLCAke2ZvbnRPYmouZmFsbGJhY2tOYW1lfWA7CiAgICBsZXQgYm9sZCA9ICJub3JtYWwiOwogICAgaWYgKGZvbnRPYmouYmxhY2spIHsKICAgICAgYm9sZCA9ICI5MDAiOwogICAgfSBlbHNlIGlmIChmb250T2JqLmJvbGQpIHsKICAgICAgYm9sZCA9ICJib2xkIjsKICAgIH0KICAgIGNvbnN0IGl0YWxpYyA9IGZvbnRPYmouaXRhbGljID8gIml0YWxpYyIgOiAibm9ybWFsIjsKICAgIGxldCBicm93c2VyRm9udFNpemUgPSBzaXplOwogICAgaWYgKHNpemUgPCBNSU5fRk9OVF9TSVpFKSB7CiAgICAgIGJyb3dzZXJGb250U2l6ZSA9IE1JTl9GT05UX1NJWkU7CiAgICB9IGVsc2UgaWYgKHNpemUgPiBNQVhfRk9OVF9TSVpFKSB7CiAgICAgIGJyb3dzZXJGb250U2l6ZSA9IE1BWF9GT05UX1NJWkU7CiAgICB9CiAgICB0aGlzLmN1cnJlbnQuZm9udFNpemVTY2FsZSA9IHNpemUgLyBicm93c2VyRm9udFNpemU7CiAgICB0aGlzLmN0eC5mb250ID0gYCR7aXRhbGljfSAke2JvbGR9ICR7YnJvd3NlckZvbnRTaXplfXB4ICR7dHlwZWZhY2V9YDsKICB9CiAgc2V0VGV4dFJlbmRlcmluZ01vZGUob3BJZHgsIG1vZGUpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNpbXBsZURhdGEoInRleHRSZW5kZXJpbmdNb2RlIiwgb3BJZHgpOwogICAgdGhpcy5jdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlID0gbW9kZTsKICB9CiAgc2V0VGV4dFJpc2Uob3BJZHgsIHJpc2UpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNpbXBsZURhdGEoInRleHRSaXNlIiwgb3BJZHgpOwogICAgdGhpcy5jdXJyZW50LnRleHRSaXNlID0gcmlzZTsKICB9CiAgbW92ZVRleHQob3BJZHgsIHgsIHkpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlc2V0SW5jcmVtZW50YWxEYXRhKCJzYW1lTGluZVRleHQiKS5yZWNvcmRJbmNyZW1lbnRhbERhdGEoIm1vdmVUZXh0Iiwgb3BJZHgpOwogICAgdGhpcy5jdXJyZW50LnggPSB0aGlzLmN1cnJlbnQubGluZVggKz0geDsKICAgIHRoaXMuY3VycmVudC55ID0gdGhpcy5jdXJyZW50LmxpbmVZICs9IHk7CiAgfQogIHNldExlYWRpbmdNb3ZlVGV4dChvcElkeCwgeCwgeSkgewogICAgdGhpcy5zZXRMZWFkaW5nKG9wSWR4LCAteSk7CiAgICB0aGlzLm1vdmVUZXh0KG9wSWR4LCB4LCB5KTsKICB9CiAgc2V0VGV4dE1hdHJpeChvcElkeCwgbWF0cml4KSB7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZXNldEluY3JlbWVudGFsRGF0YSgic2FtZUxpbmVUZXh0IikucmVjb3JkU2ltcGxlRGF0YSgidGV4dE1hdHJpeCIsIG9wSWR4KTsKICAgIGNvbnN0IHsKICAgICAgY3VycmVudAogICAgfSA9IHRoaXM7CiAgICBjdXJyZW50LnRleHRNYXRyaXggPSBtYXRyaXg7CiAgICBjdXJyZW50LnRleHRNYXRyaXhTY2FsZSA9IE1hdGguaHlwb3QobWF0cml4WzBdLCBtYXRyaXhbMV0pOwogICAgY3VycmVudC54ID0gY3VycmVudC5saW5lWCA9IDA7CiAgICBjdXJyZW50LnkgPSBjdXJyZW50LmxpbmVZID0gMDsKICB9CiAgbmV4dExpbmUob3BJZHgpIHsKICAgIHRoaXMubW92ZVRleHQob3BJZHgsIDAsIHRoaXMuY3VycmVudC5sZWFkaW5nKTsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZEluY3JlbWVudGFsRGF0YSgibW92ZVRleHQiLCB0aGlzLmRlcGVuZGVuY3lUcmFja2VyLmdldFNpbXBsZUluZGV4KCJsZWFkaW5nIikgPz8gb3BJZHgpOwogIH0KICAjZ2V0U2NhbGVkUGF0aChwYXRoLCBjdXJyZW50VHJhbnNmb3JtLCB0cmFuc2Zvcm0pIHsKICAgIGNvbnN0IG5ld1BhdGggPSBuZXcgUGF0aDJEKCk7CiAgICBuZXdQYXRoLmFkZFBhdGgocGF0aCwgbmV3IERPTU1hdHJpeCh0cmFuc2Zvcm0pLmludmVydFNlbGYoKS5tdWx0aXBseVNlbGYoY3VycmVudFRyYW5zZm9ybSkpOwogICAgcmV0dXJuIG5ld1BhdGg7CiAgfQogIHBhaW50Q2hhcihvcElkeCwgY2hhcmFjdGVyLCB4LCB5LCBwYXR0ZXJuRmlsbFRyYW5zZm9ybSwgcGF0dGVyblN0cm9rZVRyYW5zZm9ybSkgewogICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7CiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50OwogICAgY29uc3QgZm9udCA9IGN1cnJlbnQuZm9udDsKICAgIGNvbnN0IHRleHRSZW5kZXJpbmdNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZTsKICAgIGNvbnN0IGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZSAvIGN1cnJlbnQuZm9udFNpemVTY2FsZTsKICAgIGNvbnN0IGZpbGxTdHJva2VNb2RlID0gdGV4dFJlbmRlcmluZ01vZGUgJiBUZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRV9NQVNLOwogICAgY29uc3QgaXNBZGRUb1BhdGhTZXQgPSAhISh0ZXh0UmVuZGVyaW5nTW9kZSAmIFRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcpOwogICAgY29uc3QgcGF0dGVybkZpbGwgPSBjdXJyZW50LnBhdHRlcm5GaWxsICYmICFmb250Lm1pc3NpbmdGaWxlOwogICAgY29uc3QgcGF0dGVyblN0cm9rZSA9IGN1cnJlbnQucGF0dGVyblN0cm9rZSAmJiAhZm9udC5taXNzaW5nRmlsZTsKICAgIGxldCBwYXRoOwogICAgaWYgKChmb250LmRpc2FibGVGb250RmFjZSB8fCBpc0FkZFRvUGF0aFNldCB8fCBwYXR0ZXJuRmlsbCB8fCBwYXR0ZXJuU3Ryb2tlKSAmJiAhZm9udC5taXNzaW5nRmlsZSkgewogICAgICBwYXRoID0gZm9udC5nZXRQYXRoR2VuZXJhdG9yKHRoaXMuY29tbW9uT2JqcywgY2hhcmFjdGVyKTsKICAgIH0KICAgIGlmIChwYXRoICYmIChmb250LmRpc2FibGVGb250RmFjZSB8fCBwYXR0ZXJuRmlsbCB8fCBwYXR0ZXJuU3Ryb2tlKSkgewogICAgICBjdHguc2F2ZSgpOwogICAgICBjdHgudHJhbnNsYXRlKHgsIHkpOwogICAgICBjdHguc2NhbGUoZm9udFNpemUsIC1mb250U2l6ZSk7CiAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZENoYXJhY3RlckJCb3gob3BJZHgsIGN0eCwgZm9udCk7CiAgICAgIGxldCBjdXJyZW50VHJhbnNmb3JtOwogICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IFRleHRSZW5kZXJpbmdNb2RlLkZJTEwgfHwgZmlsbFN0cm9rZU1vZGUgPT09IFRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKSB7CiAgICAgICAgaWYgKHBhdHRlcm5GaWxsVHJhbnNmb3JtKSB7CiAgICAgICAgICBjdXJyZW50VHJhbnNmb3JtID0gY3R4LmdldFRyYW5zZm9ybSgpOwogICAgICAgICAgY3R4LnNldFRyYW5zZm9ybSguLi5wYXR0ZXJuRmlsbFRyYW5zZm9ybSk7CiAgICAgICAgICBjb25zdCBzY2FsZWRQYXRoID0gdGhpcy4jZ2V0U2NhbGVkUGF0aChwYXRoLCBjdXJyZW50VHJhbnNmb3JtLCBwYXR0ZXJuRmlsbFRyYW5zZm9ybSk7CiAgICAgICAgICBjdHguZmlsbChzY2FsZWRQYXRoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY3R4LmZpbGwocGF0aCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBUZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkgewogICAgICAgIGlmIChwYXR0ZXJuU3Ryb2tlVHJhbnNmb3JtKSB7CiAgICAgICAgICBjdXJyZW50VHJhbnNmb3JtIHx8PSBjdHguZ2V0VHJhbnNmb3JtKCk7CiAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtKC4uLnBhdHRlcm5TdHJva2VUcmFuc2Zvcm0pOwogICAgICAgICAgY29uc3QgewogICAgICAgICAgICBhLAogICAgICAgICAgICBiLAogICAgICAgICAgICBjLAogICAgICAgICAgICBkCiAgICAgICAgICB9ID0gY3VycmVudFRyYW5zZm9ybTsKICAgICAgICAgIGNvbnN0IGludlBhdHRlcm5UcmFuc2Zvcm0gPSBVdGlsLmludmVyc2VUcmFuc2Zvcm0ocGF0dGVyblN0cm9rZVRyYW5zZm9ybSk7CiAgICAgICAgICBjb25zdCB0cmFuc2YgPSBVdGlsLnRyYW5zZm9ybShbYSwgYiwgYywgZCwgMCwgMF0sIGludlBhdHRlcm5UcmFuc2Zvcm0pOwogICAgICAgICAgVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0cmFuc2YsIFhZKTsKICAgICAgICAgIGN0eC5saW5lV2lkdGggKj0gTWF0aC5tYXgoWFlbMF0sIFhZWzFdKSAvIGZvbnRTaXplOwogICAgICAgICAgY3R4LnN0cm9rZSh0aGlzLiNnZXRTY2FsZWRQYXRoKHBhdGgsIGN1cnJlbnRUcmFuc2Zvcm0sIHBhdHRlcm5TdHJva2VUcmFuc2Zvcm0pKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY3R4LmxpbmVXaWR0aCAvPSBmb250U2l6ZTsKICAgICAgICAgIGN0eC5zdHJva2UocGF0aCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICB9IGVsc2UgewogICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IFRleHRSZW5kZXJpbmdNb2RlLkZJTEwgfHwgZmlsbFN0cm9rZU1vZGUgPT09IFRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKSB7CiAgICAgICAgY3R4LmZpbGxUZXh0KGNoYXJhY3RlciwgeCwgeSk7CiAgICAgICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucmVjb3JkQ2hhcmFjdGVyQkJveChvcElkeCwgY3R4LCBmb250LCBmb250U2l6ZSwgeCwgeSwgKCkgPT4gY3R4Lm1lYXN1cmVUZXh0KGNoYXJhY3RlcikpOwogICAgICB9CiAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBUZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkgewogICAgICAgIGlmICh0aGlzLmRlcGVuZGVuY3lUcmFja2VyKSB7CiAgICAgICAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRDaGFyYWN0ZXJCQm94KG9wSWR4LCBjdHgsIGZvbnQsIGZvbnRTaXplLCB4LCB5LCAoKSA9PiBjdHgubWVhc3VyZVRleHQoY2hhcmFjdGVyKSkucmVjb3JkRGVwZW5kZW5jaWVzKG9wSWR4LCBEZXBlbmRlbmNpZXMuc3Ryb2tlKTsKICAgICAgICB9CiAgICAgICAgY3R4LnN0cm9rZVRleHQoY2hhcmFjdGVyLCB4LCB5KTsKICAgICAgfQogICAgfQogICAgaWYgKGlzQWRkVG9QYXRoU2V0KSB7CiAgICAgIGNvbnN0IHBhdGhzID0gdGhpcy5wZW5kaW5nVGV4dFBhdGhzIHx8PSBbXTsKICAgICAgcGF0aHMucHVzaCh7CiAgICAgICAgdHJhbnNmb3JtOiBnZXRDdXJyZW50VHJhbnNmb3JtKGN0eCksCiAgICAgICAgeCwKICAgICAgICB5LAogICAgICAgIGZvbnRTaXplLAogICAgICAgIHBhdGgKICAgICAgfSk7CiAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZENoYXJhY3RlckJCb3gob3BJZHgsIGN0eCwgZm9udCwgZm9udFNpemUsIHgsIHkpOwogICAgfQogIH0KICBnZXQgaXNGb250U3VicGl4ZWxBQUVuYWJsZWQoKSB7CiAgICBjb25zdCB7CiAgICAgIGNvbnRleHQ6IGN0eAogICAgfSA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCIsIDEwLCAxMCk7CiAgICBjdHguc2NhbGUoMS41LCAxKTsKICAgIGN0eC5maWxsVGV4dCgiSSIsIDAsIDEwKTsKICAgIGNvbnN0IGRhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIDEwLCAxMCkuZGF0YTsKICAgIGxldCBlbmFibGVkID0gZmFsc2U7CiAgICBmb3IgKGxldCBpID0gMzsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDQpIHsKICAgICAgaWYgKGRhdGFbaV0gPiAwICYmIGRhdGFbaV0gPCAyNTUpIHsKICAgICAgICBlbmFibGVkID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaXNGb250U3VicGl4ZWxBQUVuYWJsZWQiLCBlbmFibGVkKTsKICB9CiAgc2hvd1RleHQob3BJZHgsIGdseXBocykgewogICAgaWYgKHRoaXMuZGVwZW5kZW5jeVRyYWNrZXIpIHsKICAgICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlci5yZWNvcmREZXBlbmRlbmNpZXMob3BJZHgsIERlcGVuZGVuY2llcy5zaG93VGV4dCkucmVzZXRCQm94KG9wSWR4KTsKICAgICAgaWYgKHRoaXMuY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIFRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcpIHsKICAgICAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyLnJlY29yZEZ1dHVyZUZvcmNlZERlcGVuZGVuY3koInRleHRDbGlwIiwgb3BJZHgpLmluaGVyaXRQZW5kaW5nRGVwZW5kZW5jaWVzQXNGdXR1cmVGb3JjZWREZXBlbmRlbmNpZXMoKTsKICAgICAgfQogICAgfQogICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDsKICAgIGNvbnN0IGZvbnQgPSBjdXJyZW50LmZvbnQ7CiAgICBpZiAoZm9udC5pc1R5cGUzRm9udCkgewogICAgICB0aGlzLnNob3dUeXBlM1RleHQob3BJZHgsIGdseXBocyk7CiAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNob3dUZXh0T3BlcmF0aW9uKG9wSWR4KTsKICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0KICAgIGNvbnN0IGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZTsKICAgIGlmIChmb250U2l6ZSA9PT0gMCkgewogICAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRPcGVyYXRpb24ob3BJZHgpOwogICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgfQogICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7CiAgICBjb25zdCBmb250U2l6ZVNjYWxlID0gY3VycmVudC5mb250U2l6ZVNjYWxlOwogICAgY29uc3QgY2hhclNwYWNpbmcgPSBjdXJyZW50LmNoYXJTcGFjaW5nOwogICAgY29uc3Qgd29yZFNwYWNpbmcgPSBjdXJyZW50LndvcmRTcGFjaW5nOwogICAgY29uc3QgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjsKICAgIGNvbnN0IHRleHRIU2NhbGUgPSBjdXJyZW50LnRleHRIU2NhbGUgKiBmb250RGlyZWN0aW9uOwogICAgY29uc3QgZ2x5cGhzTGVuZ3RoID0gZ2x5cGhzLmxlbmd0aDsKICAgIGNvbnN0IHZlcnRpY2FsID0gZm9udC52ZXJ0aWNhbDsKICAgIGNvbnN0IHNwYWNpbmdEaXIgPSB2ZXJ0aWNhbCA/IDEgOiAtMTsKICAgIGNvbnN0IGRlZmF1bHRWTWV0cmljcyA9IGZvbnQuZGVmYXVsdFZNZXRyaWNzOwogICAgY29uc3Qgd2lkdGhBZHZhbmNlU2NhbGUgPSBmb250U2l6ZSAqIGN1cnJlbnQuZm9udE1hdHJpeFswXTsKICAgIGNvbnN0IHNpbXBsZUZpbGxUZXh0ID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9PT0gVGV4dFJlbmRlcmluZ01vZGUuRklMTCAmJiAhZm9udC5kaXNhYmxlRm9udEZhY2UgJiYgIWN1cnJlbnQucGF0dGVybkZpbGw7CiAgICBjdHguc2F2ZSgpOwogICAgaWYgKGN1cnJlbnQudGV4dE1hdHJpeCkgewogICAgICBjdHgudHJhbnNmb3JtKC4uLmN1cnJlbnQudGV4dE1hdHJpeCk7CiAgICB9CiAgICBjdHgudHJhbnNsYXRlKGN1cnJlbnQueCwgY3VycmVudC55ICsgY3VycmVudC50ZXh0UmlzZSk7CiAgICBpZiAoZm9udERpcmVjdGlvbiA+IDApIHsKICAgICAgY3R4LnNjYWxlKHRleHRIU2NhbGUsIC0xKTsKICAgIH0gZWxzZSB7CiAgICAgIGN0eC5zY2FsZSh0ZXh0SFNjYWxlLCAxKTsKICAgIH0KICAgIGxldCBwYXR0ZXJuRmlsbFRyYW5zZm9ybSwgcGF0dGVyblN0cm9rZVRyYW5zZm9ybTsKICAgIGlmIChjdXJyZW50LnBhdHRlcm5GaWxsKSB7CiAgICAgIGN0eC5zYXZlKCk7CiAgICAgIGNvbnN0IHBhdHRlcm4gPSBjdXJyZW50LmZpbGxDb2xvci5nZXRQYXR0ZXJuKGN0eCwgdGhpcywgZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UoY3R4KSwgUGF0aFR5cGUuRklMTCwgb3BJZHgpOwogICAgICBwYXR0ZXJuRmlsbFRyYW5zZm9ybSA9IGdldEN1cnJlbnRUcmFuc2Zvcm0oY3R4KTsKICAgICAgY3R4LnJlc3RvcmUoKTsKICAgICAgY3R4LmZpbGxTdHlsZSA9IHBhdHRlcm47CiAgICB9CiAgICBpZiAoY3VycmVudC5wYXR0ZXJuU3Ryb2tlKSB7CiAgICAgIGN0eC5zYXZlKCk7CiAgICAgIGNvbnN0IHBhdHRlcm4gPSBjdXJyZW50LnN0cm9rZUNvbG9yLmdldFBhdHRlcm4oY3R4LCB0aGlzLCBnZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZShjdHgpLCBQYXRoVHlwZS5TVFJPS0UsIG9wSWR4KTsKICAgICAgcGF0dGVyblN0cm9rZVRyYW5zZm9ybSA9IGdldEN1cnJlbnRUcmFuc2Zvcm0oY3R4KTsKICAgICAgY3R4LnJlc3RvcmUoKTsKICAgICAgY3R4LnN0cm9rZVN0eWxlID0gcGF0dGVybjsKICAgIH0KICAgIGxldCBsaW5lV2lkdGggPSBjdXJyZW50LmxpbmVXaWR0aDsKICAgIGNvbnN0IHNjYWxlID0gY3VycmVudC50ZXh0TWF0cml4U2NhbGU7CiAgICBpZiAoc2NhbGUgPT09IDAgfHwgbGluZVdpZHRoID09PSAwKSB7CiAgICAgIGNvbnN0IGZpbGxTdHJva2VNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIFRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7CiAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBUZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkgewogICAgICAgIGxpbmVXaWR0aCA9IHRoaXMuZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBsaW5lV2lkdGggLz0gc2NhbGU7CiAgICB9CiAgICBpZiAoZm9udFNpemVTY2FsZSAhPT0gMS4wKSB7CiAgICAgIGN0eC5zY2FsZShmb250U2l6ZVNjYWxlLCBmb250U2l6ZVNjYWxlKTsKICAgICAgbGluZVdpZHRoIC89IGZvbnRTaXplU2NhbGU7CiAgICB9CiAgICBjdHgubGluZVdpZHRoID0gbGluZVdpZHRoOwogICAgaWYgKGZvbnQuaXNJbnZhbGlkUERGanNGb250KSB7CiAgICAgIGNvbnN0IGNoYXJzID0gW107CiAgICAgIGxldCB3aWR0aCA9IDA7CiAgICAgIGZvciAoY29uc3QgZ2x5cGggb2YgZ2x5cGhzKSB7CiAgICAgICAgY2hhcnMucHVzaChnbHlwaC51bmljb2RlKTsKICAgICAgICB3aWR0aCArPSBnbHlwaC53aWR0aDsKICAgICAgfQogICAgICBjb25zdCBqb2luZWRDaGFycyA9IGNoYXJzLmpvaW4oIiIpOwogICAgICBjdHguZmlsbFRleHQoam9pbmVkQ2hhcnMsIDAsIDApOwogICAgICBpZiAodGhpcy5kZXBlbmRlbmN5VHJhY2tlciAhPT0gbnVsbCkgewogICAgICAgIGNvbnN0IG1lYXN1cmUgPSBjdHgubWVhc3VyZVRleHQoam9pbmVkQ2hhcnMpOwogICAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXIucmVjb3JkQkJveChvcElkeCwgdGhpcy5jdHgsIC1tZWFzdXJlLmFjdHVhbEJvdW5kaW5nQm94TGVmdCwgbWVhc3VyZS5hY3R1YWxCb3VuZGluZ0JveFJpZ2h0LCAtbWVhc3VyZS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudCwgbWVhc3VyZS5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQpLnJlY29yZFNob3dUZXh0T3BlcmF0aW9uKG9wSWR4KTsKICAgICAgfQogICAgICBjdXJyZW50LnggKz0gd2lkdGggKiB3aWR0aEFkdmFuY2VTY2FsZSAqIHRleHRIU2NhbGU7CiAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgIHRoaXMuY29tcG9zZSgpOwogICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgfQogICAgbGV0IHggPSAwLAogICAgICBpOwogICAgZm9yIChpID0gMDsgaSA8IGdseXBoc0xlbmd0aDsgKytpKSB7CiAgICAgIGNvbnN0IGdseXBoID0gZ2x5cGhzW2ldOwogICAgICBpZiAodHlwZW9mIGdseXBoID09PSAibnVtYmVyIikgewogICAgICAgIHggKz0gc3BhY2luZ0RpciAqIGdseXBoICogZm9udFNpemUgLyAxMDAwOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGxldCByZXN0b3JlTmVlZGVkID0gZmFsc2U7CiAgICAgIGNvbnN0IHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZzsKICAgICAgY29uc3QgY2hhcmFjdGVyID0gZ2x5cGguZm9udENoYXI7CiAgICAgIGNvbnN0IGFjY2VudCA9IGdseXBoLmFjY2VudDsKICAgICAgbGV0IHNjYWxlZFgsIHNjYWxlZFk7CiAgICAgIGxldCB3aWR0aCA9IGdseXBoLndpZHRoOwogICAgICBpZiAodmVydGljYWwpIHsKICAgICAgICBjb25zdCB2bWV0cmljID0gZ2x5cGgudm1ldHJpYyB8fCBkZWZhdWx0Vk1ldHJpY3M7CiAgICAgICAgY29uc3QgdnggPSAtKGdseXBoLnZtZXRyaWMgPyB2bWV0cmljWzFdIDogd2lkdGggKiAwLjUpICogd2lkdGhBZHZhbmNlU2NhbGU7CiAgICAgICAgY29uc3QgdnkgPSB2bWV0cmljWzJdICogd2lkdGhBZHZhbmNlU2NhbGU7CiAgICAgICAgd2lkdGggPSB2bWV0cmljID8gLXZtZXRyaWNbMF0gOiB3aWR0aDsKICAgICAgICBzY2FsZWRYID0gdnggLyBmb250U2l6ZVNjYWxlOwogICAgICAgIHNjYWxlZFkgPSAoeCArIHZ5KSAvIGZvbnRTaXplU2NhbGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2NhbGVkWCA9IHggLyBmb250U2l6ZVNjYWxlOwogICAgICAgIHNjYWxlZFkgPSAwOwogICAgICB9CiAgICAgIGxldCBtZWFzdXJlOwogICAgICBpZiAoZm9udC5yZW1lYXN1cmUgJiYgd2lkdGggPiAwKSB7CiAgICAgICAgbWVhc3VyZSA9IGN0eC5tZWFzdXJlVGV4dChjaGFyYWN0ZXIpOwogICAgICAgIGNvbnN0IG1lYXN1cmVkV2lkdGggPSBtZWFzdXJlLndpZHRoICogMTAwMCAvIGZvbnRTaXplICogZm9udFNpemVTY2FsZTsKICAgICAgICBpZiAod2lkdGggPCBtZWFzdXJlZFdpZHRoICYmIHRoaXMuaXNGb250U3VicGl4ZWxBQUVuYWJsZWQpIHsKICAgICAgICAgIGNvbnN0IGNoYXJhY3RlclNjYWxlWCA9IHdpZHRoIC8gbWVhc3VyZWRXaWR0aDsKICAgICAgICAgIHJlc3RvcmVOZWVkZWQgPSB0cnVlOwogICAgICAgICAgY3R4LnNhdmUoKTsKICAgICAgICAgIGN0eC5zY2FsZShjaGFyYWN0ZXJTY2FsZVgsIDEpOwogICAgICAgICAgc2NhbGVkWCAvPSBjaGFyYWN0ZXJTY2FsZVg7CiAgICAgICAgfSBlbHNlIGlmICh3aWR0aCAhPT0gbWVhc3VyZWRXaWR0aCkgewogICAgICAgICAgc2NhbGVkWCArPSAod2lkdGggLSBtZWFzdXJlZFdpZHRoKSAvIDIwMDAgKiBmb250U2l6ZSAvIGZvbnRTaXplU2NhbGU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0aGlzLmNvbnRlbnRWaXNpYmxlICYmIChnbHlwaC5pc0luRm9udCB8fCBmb250Lm1pc3NpbmdGaWxlKSkgewogICAgICAgIGlmIChzaW1wbGVGaWxsVGV4dCAmJiAhYWNjZW50KSB7CiAgICAgICAgICBjdHguZmlsbFRleHQoY2hhcmFjdGVyLCBzY2FsZWRYLCBzY2FsZWRZKTsKICAgICAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZENoYXJhY3RlckJCb3gob3BJZHgsIGN0eCwgbWVhc3VyZSA/IHsKICAgICAgICAgICAgYmJveDogbnVsbAogICAgICAgICAgfSA6IGZvbnQsIGZvbnRTaXplIC8gZm9udFNpemVTY2FsZSwgc2NhbGVkWCwgc2NhbGVkWSwgKCkgPT4gbWVhc3VyZSA/PyBjdHgubWVhc3VyZVRleHQoY2hhcmFjdGVyKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMucGFpbnRDaGFyKG9wSWR4LCBjaGFyYWN0ZXIsIHNjYWxlZFgsIHNjYWxlZFksIHBhdHRlcm5GaWxsVHJhbnNmb3JtLCBwYXR0ZXJuU3Ryb2tlVHJhbnNmb3JtKTsKICAgICAgICAgIGlmIChhY2NlbnQpIHsKICAgICAgICAgICAgY29uc3Qgc2NhbGVkQWNjZW50WCA9IHNjYWxlZFggKyBmb250U2l6ZSAqIGFjY2VudC5vZmZzZXQueCAvIGZvbnRTaXplU2NhbGU7CiAgICAgICAgICAgIGNvbnN0IHNjYWxlZEFjY2VudFkgPSBzY2FsZWRZIC0gZm9udFNpemUgKiBhY2NlbnQub2Zmc2V0LnkgLyBmb250U2l6ZVNjYWxlOwogICAgICAgICAgICB0aGlzLnBhaW50Q2hhcihvcElkeCwgYWNjZW50LmZvbnRDaGFyLCBzY2FsZWRBY2NlbnRYLCBzY2FsZWRBY2NlbnRZLCBwYXR0ZXJuRmlsbFRyYW5zZm9ybSwgcGF0dGVyblN0cm9rZVRyYW5zZm9ybSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IGNoYXJXaWR0aCA9IHZlcnRpY2FsID8gd2lkdGggKiB3aWR0aEFkdmFuY2VTY2FsZSAtIHNwYWNpbmcgKiBmb250RGlyZWN0aW9uIDogd2lkdGggKiB3aWR0aEFkdmFuY2VTY2FsZSArIHNwYWNpbmcgKiBmb250RGlyZWN0aW9uOwogICAgICB4ICs9IGNoYXJXaWR0aDsKICAgICAgaWYgKHJlc3RvcmVOZWVkZWQpIHsKICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgICB9CiAgICB9CiAgICBpZiAodmVydGljYWwpIHsKICAgICAgY3VycmVudC55IC09IHg7CiAgICB9IGVsc2UgewogICAgICBjdXJyZW50LnggKz0geCAqIHRleHRIU2NhbGU7CiAgICB9CiAgICBjdHgucmVzdG9yZSgpOwogICAgdGhpcy5jb21wb3NlKCk7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRTaG93VGV4dE9wZXJhdGlvbihvcElkeCk7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KICBzaG93VHlwZTNUZXh0KG9wSWR4LCBnbHlwaHMpIHsKICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4OwogICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDsKICAgIGNvbnN0IGZvbnQgPSBjdXJyZW50LmZvbnQ7CiAgICBjb25zdCBmb250U2l6ZSA9IGN1cnJlbnQuZm9udFNpemU7CiAgICBjb25zdCBmb250RGlyZWN0aW9uID0gY3VycmVudC5mb250RGlyZWN0aW9uOwogICAgY29uc3Qgc3BhY2luZ0RpciA9IGZvbnQudmVydGljYWwgPyAxIDogLTE7CiAgICBjb25zdCBjaGFyU3BhY2luZyA9IGN1cnJlbnQuY2hhclNwYWNpbmc7CiAgICBjb25zdCB3b3JkU3BhY2luZyA9IGN1cnJlbnQud29yZFNwYWNpbmc7CiAgICBjb25zdCB0ZXh0SFNjYWxlID0gY3VycmVudC50ZXh0SFNjYWxlICogZm9udERpcmVjdGlvbjsKICAgIGNvbnN0IGZvbnRNYXRyaXggPSBjdXJyZW50LmZvbnRNYXRyaXggfHwgRk9OVF9JREVOVElUWV9NQVRSSVg7CiAgICBjb25zdCBnbHlwaHNMZW5ndGggPSBnbHlwaHMubGVuZ3RoOwogICAgY29uc3QgaXNUZXh0SW52aXNpYmxlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9PT0gVGV4dFJlbmRlcmluZ01vZGUuSU5WSVNJQkxFOwogICAgbGV0IGksIGdseXBoLCB3aWR0aCwgc3BhY2luZ0xlbmd0aDsKICAgIGlmIChpc1RleHRJbnZpc2libGUgfHwgZm9udFNpemUgPT09IDApIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZ1swXSA9IC0xOwogICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IG51bGw7CiAgICBjdHguc2F2ZSgpOwogICAgaWYgKGN1cnJlbnQudGV4dE1hdHJpeCkgewogICAgICBjdHgudHJhbnNmb3JtKC4uLmN1cnJlbnQudGV4dE1hdHJpeCk7CiAgICB9CiAgICBjdHgudHJhbnNsYXRlKGN1cnJlbnQueCwgY3VycmVudC55ICsgY3VycmVudC50ZXh0UmlzZSk7CiAgICBjdHguc2NhbGUodGV4dEhTY2FsZSwgZm9udERpcmVjdGlvbik7CiAgICBjb25zdCBkZXBlbmRlbmN5VHJhY2tlciA9IHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyID0gZGVwZW5kZW5jeVRyYWNrZXIgPyBuZXcgQ2FudmFzTmVzdGVkRGVwZW5kZW5jeVRyYWNrZXIoZGVwZW5kZW5jeVRyYWNrZXIsIG9wSWR4KSA6IG51bGw7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2x5cGhzTGVuZ3RoOyArK2kpIHsKICAgICAgZ2x5cGggPSBnbHlwaHNbaV07CiAgICAgIGlmICh0eXBlb2YgZ2x5cGggPT09ICJudW1iZXIiKSB7CiAgICAgICAgc3BhY2luZ0xlbmd0aCA9IHNwYWNpbmdEaXIgKiBnbHlwaCAqIGZvbnRTaXplIC8gMTAwMDsKICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUoc3BhY2luZ0xlbmd0aCwgMCk7CiAgICAgICAgY3VycmVudC54ICs9IHNwYWNpbmdMZW5ndGggKiB0ZXh0SFNjYWxlOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZzsKICAgICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gZm9udC5jaGFyUHJvY09wZXJhdG9yTGlzdFtnbHlwaC5vcGVyYXRvckxpc3RJZF07CiAgICAgIGlmICghb3BlcmF0b3JMaXN0KSB7CiAgICAgICAgd2FybihgVHlwZTMgY2hhcmFjdGVyICIke2dseXBoLm9wZXJhdG9yTGlzdElkfSIgaXMgbm90IGF2YWlsYWJsZS5gKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRlbnRWaXNpYmxlKSB7CiAgICAgICAgdGhpcy5zYXZlKCk7CiAgICAgICAgY3R4LnNjYWxlKGZvbnRTaXplLCBmb250U2l6ZSk7CiAgICAgICAgY3R4LnRyYW5zZm9ybSguLi5mb250TWF0cml4KTsKICAgICAgICB0aGlzLmV4ZWN1dGVPcGVyYXRvckxpc3Qob3BlcmF0b3JMaXN0KTsKICAgICAgICB0aGlzLnJlc3RvcmUoKTsKICAgICAgfQogICAgICBjb25zdCBwID0gW2dseXBoLndpZHRoLCAwXTsKICAgICAgVXRpbC5hcHBseVRyYW5zZm9ybShwLCBmb250TWF0cml4KTsKICAgICAgd2lkdGggPSBwWzBdICogZm9udFNpemUgKyBzcGFjaW5nOwogICAgICBjdHgudHJhbnNsYXRlKHdpZHRoLCAwKTsKICAgICAgY3VycmVudC54ICs9IHdpZHRoICogdGV4dEhTY2FsZTsKICAgIH0KICAgIGN0eC5yZXN0b3JlKCk7CiAgICBpZiAoZGVwZW5kZW5jeVRyYWNrZXIpIHsKICAgICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlciA9IGRlcGVuZGVuY3lUcmFja2VyOwogICAgfQogIH0KICBzZXRDaGFyV2lkdGgob3BJZHgsIHhXaWR0aCwgeVdpZHRoKSB7fQogIHNldENoYXJXaWR0aEFuZEJvdW5kcyhvcElkeCwgeFdpZHRoLCB5V2lkdGgsIGxseCwgbGx5LCB1cngsIHVyeSkgewogICAgY29uc3QgY2xpcCA9IG5ldyBQYXRoMkQoKTsKICAgIGNsaXAucmVjdChsbHgsIGxseSwgdXJ4IC0gbGx4LCB1cnkgLSBsbHkpOwogICAgdGhpcy5jdHguY2xpcChjbGlwKTsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZEJCb3gob3BJZHgsIHRoaXMuY3R4LCBsbHgsIHVyeCwgbGx5LCB1cnkpLnJlY29yZENsaXBCb3gob3BJZHgsIHRoaXMuY3R4LCBsbHgsIHVyeCwgbGx5LCB1cnkpOwogICAgdGhpcy5lbmRQYXRoKG9wSWR4KTsKICB9CiAgZ2V0Q29sb3JOX1BhdHRlcm4ob3BJZHgsIElSKSB7CiAgICBsZXQgcGF0dGVybjsKICAgIGlmIChJUlswXSA9PT0gIlRpbGluZ1BhdHRlcm4iKSB7CiAgICAgIGNvbnN0IGJhc2VUcmFuc2Zvcm0gPSB0aGlzLmJhc2VUcmFuc2Zvcm0gfHwgZ2V0Q3VycmVudFRyYW5zZm9ybSh0aGlzLmN0eCk7CiAgICAgIGNvbnN0IGNhbnZhc0dyYXBoaWNzRmFjdG9yeSA9IHsKICAgICAgICBjcmVhdGVDYW52YXNHcmFwaGljczogKGN0eCwgcmVuZGVyaW5nT3BJZHgpID0+IG5ldyBDYW52YXNHcmFwaGljcyhjdHgsIHRoaXMuY29tbW9uT2JqcywgdGhpcy5vYmpzLCB0aGlzLmNhbnZhc0ZhY3RvcnksIHRoaXMuZmlsdGVyRmFjdG9yeSwgewogICAgICAgICAgb3B0aW9uYWxDb250ZW50Q29uZmlnOiB0aGlzLm9wdGlvbmFsQ29udGVudENvbmZpZywKICAgICAgICAgIG1hcmtlZENvbnRlbnRTdGFjazogdGhpcy5tYXJrZWRDb250ZW50U3RhY2sKICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy5kZXBlbmRlbmN5VHJhY2tlciA/IG5ldyBDYW52YXNOZXN0ZWREZXBlbmRlbmN5VHJhY2tlcih0aGlzLmRlcGVuZGVuY3lUcmFja2VyLCByZW5kZXJpbmdPcElkeCwgdHJ1ZSkgOiBudWxsKQogICAgICB9OwogICAgICBwYXR0ZXJuID0gbmV3IFRpbGluZ1BhdHRlcm4oSVIsIHRoaXMuY3R4LCBjYW52YXNHcmFwaGljc0ZhY3RvcnksIGJhc2VUcmFuc2Zvcm0pOwogICAgfSBlbHNlIHsKICAgICAgcGF0dGVybiA9IHRoaXMuX2dldFBhdHRlcm4ob3BJZHgsIElSWzFdLCBJUlsyXSk7CiAgICB9CiAgICByZXR1cm4gcGF0dGVybjsKICB9CiAgc2V0U3Ryb2tlQ29sb3JOKG9wSWR4LCAuLi5hcmdzKSB7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRTaW1wbGVEYXRhKCJzdHJva2VDb2xvciIsIG9wSWR4KTsKICAgIHRoaXMuY3VycmVudC5zdHJva2VDb2xvciA9IHRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4ob3BJZHgsIGFyZ3MpOwogICAgdGhpcy5jdXJyZW50LnBhdHRlcm5TdHJva2UgPSB0cnVlOwogIH0KICBzZXRGaWxsQ29sb3JOKG9wSWR4LCAuLi5hcmdzKSB7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRTaW1wbGVEYXRhKCJmaWxsQ29sb3IiLCBvcElkeCk7CiAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gdGhpcy5nZXRDb2xvck5fUGF0dGVybihvcElkeCwgYXJncyk7CiAgICB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwgPSB0cnVlOwogIH0KICBzZXRTdHJva2VSR0JDb2xvcihvcElkeCwgY29sb3IpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNpbXBsZURhdGEoInN0cm9rZUNvbG9yIiwgb3BJZHgpOwogICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKICAgIHRoaXMuY3VycmVudC5wYXR0ZXJuU3Ryb2tlID0gZmFsc2U7CiAgfQogIHNldFN0cm9rZVRyYW5zcGFyZW50KG9wSWR4KSB7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRTaW1wbGVEYXRhKCJzdHJva2VDb2xvciIsIG9wSWR4KTsKICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yID0gInRyYW5zcGFyZW50IjsKICAgIHRoaXMuY3VycmVudC5wYXR0ZXJuU3Ryb2tlID0gZmFsc2U7CiAgfQogIHNldEZpbGxSR0JDb2xvcihvcElkeCwgY29sb3IpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNpbXBsZURhdGEoImZpbGxDb2xvciIsIG9wSWR4KTsKICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSBjb2xvcjsKICAgIHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCA9IGZhbHNlOwogIH0KICBzZXRGaWxsVHJhbnNwYXJlbnQob3BJZHgpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZFNpbXBsZURhdGEoImZpbGxDb2xvciIsIG9wSWR4KTsKICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSAidHJhbnNwYXJlbnQiOwogICAgdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsID0gZmFsc2U7CiAgfQogIF9nZXRQYXR0ZXJuKG9wSWR4LCBvYmpJZCwgbWF0cml4ID0gbnVsbCkgewogICAgbGV0IHBhdHRlcm47CiAgICBpZiAodGhpcy5jYWNoZWRQYXR0ZXJucy5oYXMob2JqSWQpKSB7CiAgICAgIHBhdHRlcm4gPSB0aGlzLmNhY2hlZFBhdHRlcm5zLmdldChvYmpJZCk7CiAgICB9IGVsc2UgewogICAgICBwYXR0ZXJuID0gZ2V0U2hhZGluZ1BhdHRlcm4odGhpcy5nZXRPYmplY3Qob3BJZHgsIG9iaklkKSk7CiAgICAgIHRoaXMuY2FjaGVkUGF0dGVybnMuc2V0KG9iaklkLCBwYXR0ZXJuKTsKICAgIH0KICAgIGlmIChtYXRyaXgpIHsKICAgICAgcGF0dGVybi5tYXRyaXggPSBtYXRyaXg7CiAgICB9CiAgICByZXR1cm4gcGF0dGVybjsKICB9CiAgc2hhZGluZ0ZpbGwob3BJZHgsIG9iaklkKSB7CiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7CiAgICB0aGlzLnNhdmUob3BJZHgpOwogICAgY29uc3QgcGF0dGVybiA9IHRoaXMuX2dldFBhdHRlcm4ob3BJZHgsIG9iaklkKTsKICAgIGN0eC5maWxsU3R5bGUgPSBwYXR0ZXJuLmdldFBhdHRlcm4oY3R4LCB0aGlzLCBnZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZShjdHgpLCBQYXRoVHlwZS5TSEFESU5HLCBvcElkeCk7CiAgICBjb25zdCBpbnYgPSBnZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZShjdHgpOwogICAgaWYgKGludikgewogICAgICBjb25zdCB7CiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0gPSBjdHguY2FudmFzOwogICAgICBjb25zdCBtaW5NYXggPSBNSU5fTUFYX0lOSVQuc2xpY2UoKTsKICAgICAgVXRpbC5heGlhbEFsaWduZWRCb3VuZGluZ0JveChbMCwgMCwgd2lkdGgsIGhlaWdodF0sIGludiwgbWluTWF4KTsKICAgICAgY29uc3QgW3gwLCB5MCwgeDEsIHkxXSA9IG1pbk1heDsKICAgICAgdGhpcy5jdHguZmlsbFJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KC0xZTEwLCAtMWUxMCwgMmUxMCwgMmUxMCk7CiAgICB9CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZXNldEJCb3gob3BJZHgpLnJlY29yZEZ1bGxQYWdlQkJveChvcElkeCkucmVjb3JkRGVwZW5kZW5jaWVzKG9wSWR4LCBEZXBlbmRlbmNpZXMudHJhbnNmb3JtKS5yZWNvcmREZXBlbmRlbmNpZXMob3BJZHgsIERlcGVuZGVuY2llcy5maWxsKS5yZWNvcmRPcGVyYXRpb24ob3BJZHgpOwogICAgdGhpcy5jb21wb3NlKHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KCkpOwogICAgdGhpcy5yZXN0b3JlKG9wSWR4KTsKICB9CiAgYmVnaW5JbmxpbmVJbWFnZSgpIHsKICAgIHVucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgYmVnaW5JbmxpbmVJbWFnZSIpOwogIH0KICBiZWdpbkltYWdlRGF0YSgpIHsKICAgIHVucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgYmVnaW5JbWFnZURhdGEiKTsKICB9CiAgcGFpbnRGb3JtWE9iamVjdEJlZ2luKG9wSWR4LCBtYXRyaXgsIGJib3gpIHsKICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLnNhdmUob3BJZHgpOwogICAgdGhpcy5iYXNlVHJhbnNmb3JtU3RhY2sucHVzaCh0aGlzLmJhc2VUcmFuc2Zvcm0pOwogICAgaWYgKG1hdHJpeCkgewogICAgICB0aGlzLnRyYW5zZm9ybShvcElkeCwgLi4ubWF0cml4KTsKICAgIH0KICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IGdldEN1cnJlbnRUcmFuc2Zvcm0odGhpcy5jdHgpOwogICAgaWYgKGJib3gpIHsKICAgICAgVXRpbC5heGlhbEFsaWduZWRCb3VuZGluZ0JveChiYm94LCB0aGlzLmJhc2VUcmFuc2Zvcm0sIHRoaXMuY3VycmVudC5taW5NYXgpOwogICAgICBjb25zdCBbeDAsIHkwLCB4MSwgeTFdID0gYmJveDsKICAgICAgY29uc3QgY2xpcCA9IG5ldyBQYXRoMkQoKTsKICAgICAgY2xpcC5yZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7CiAgICAgIHRoaXMuY3R4LmNsaXAoY2xpcCk7CiAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZENsaXBCb3gob3BJZHgsIHRoaXMuY3R4LCB4MCwgeDEsIHkwLCB5MSk7CiAgICAgIHRoaXMuZW5kUGF0aChvcElkeCk7CiAgICB9CiAgfQogIHBhaW50Rm9ybVhPYmplY3RFbmQob3BJZHgpIHsKICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLnJlc3RvcmUob3BJZHgpOwogICAgdGhpcy5iYXNlVHJhbnNmb3JtID0gdGhpcy5iYXNlVHJhbnNmb3JtU3RhY2sucG9wKCk7CiAgfQogIGJlZ2luR3JvdXAob3BJZHgsIGdyb3VwKSB7CiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5zYXZlKG9wSWR4KTsKICAgIGlmICh0aGlzLmluU01hc2tNb2RlKSB7CiAgICAgIHRoaXMuZW5kU01hc2tNb2RlKCk7CiAgICAgIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayA9IG51bGw7CiAgICB9CiAgICBjb25zdCBjdXJyZW50Q3R4ID0gdGhpcy5jdHg7CiAgICBpZiAoIWdyb3VwLmlzb2xhdGVkKSB7CiAgICAgIGluZm8oIlRPRE86IFN1cHBvcnQgbm9uLWlzb2xhdGVkIGdyb3Vwcy4iKTsKICAgIH0KICAgIGlmIChncm91cC5rbm9ja291dCkgewogICAgICB3YXJuKCJLbm9ja291dCBncm91cHMgbm90IHN1cHBvcnRlZC4iKTsKICAgIH0KICAgIGNvbnN0IGN1cnJlbnRUcmFuc2Zvcm0gPSBnZXRDdXJyZW50VHJhbnNmb3JtKGN1cnJlbnRDdHgpOwogICAgaWYgKGdyb3VwLm1hdHJpeCkgewogICAgICBjdXJyZW50Q3R4LnRyYW5zZm9ybSguLi5ncm91cC5tYXRyaXgpOwogICAgfQogICAgaWYgKCFncm91cC5iYm94KSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLiIpOwogICAgfQogICAgbGV0IGJvdW5kcyA9IE1JTl9NQVhfSU5JVC5zbGljZSgpOwogICAgVXRpbC5heGlhbEFsaWduZWRCb3VuZGluZ0JveChncm91cC5iYm94LCBnZXRDdXJyZW50VHJhbnNmb3JtKGN1cnJlbnRDdHgpLCBib3VuZHMpOwogICAgY29uc3QgY2FudmFzQm91bmRzID0gWzAsIDAsIGN1cnJlbnRDdHguY2FudmFzLndpZHRoLCBjdXJyZW50Q3R4LmNhbnZhcy5oZWlnaHRdOwogICAgYm91bmRzID0gVXRpbC5pbnRlcnNlY3QoYm91bmRzLCBjYW52YXNCb3VuZHMpIHx8IFswLCAwLCAwLCAwXTsKICAgIGNvbnN0IG9mZnNldFggPSBNYXRoLmZsb29yKGJvdW5kc1swXSk7CiAgICBjb25zdCBvZmZzZXRZID0gTWF0aC5mbG9vcihib3VuZHNbMV0pOwogICAgY29uc3QgZHJhd25XaWR0aCA9IE1hdGgubWF4KE1hdGguY2VpbChib3VuZHNbMl0pIC0gb2Zmc2V0WCwgMSk7CiAgICBjb25zdCBkcmF3bkhlaWdodCA9IE1hdGgubWF4KE1hdGguY2VpbChib3VuZHNbM10pIC0gb2Zmc2V0WSwgMSk7CiAgICB0aGlzLmN1cnJlbnQuc3RhcnROZXdQYXRoQW5kQ2xpcEJveChbMCwgMCwgZHJhd25XaWR0aCwgZHJhd25IZWlnaHRdKTsKICAgIGxldCBjYWNoZUlkID0gImdyb3VwQXQiICsgdGhpcy5ncm91cExldmVsOwogICAgaWYgKGdyb3VwLnNtYXNrKSB7CiAgICAgIGNhY2hlSWQgKz0gIl9zbWFza18iICsgdGhpcy5zbWFza0NvdW50ZXIrKyAlIDI7CiAgICB9CiAgICBjb25zdCBzY3JhdGNoQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoY2FjaGVJZCwgZHJhd25XaWR0aCwgZHJhd25IZWlnaHQpOwogICAgY29uc3QgZ3JvdXBDdHggPSBzY3JhdGNoQ2FudmFzLmNvbnRleHQ7CiAgICBncm91cEN0eC50cmFuc2xhdGUoLW9mZnNldFgsIC1vZmZzZXRZKTsKICAgIGdyb3VwQ3R4LnRyYW5zZm9ybSguLi5jdXJyZW50VHJhbnNmb3JtKTsKICAgIGxldCBjbGlwID0gbmV3IFBhdGgyRCgpOwogICAgY29uc3QgW3gwLCB5MCwgeDEsIHkxXSA9IGdyb3VwLmJib3g7CiAgICBjbGlwLnJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKICAgIGlmIChncm91cC5tYXRyaXgpIHsKICAgICAgY29uc3QgcGF0aCA9IG5ldyBQYXRoMkQoKTsKICAgICAgcGF0aC5hZGRQYXRoKGNsaXAsIG5ldyBET01NYXRyaXgoZ3JvdXAubWF0cml4KSk7CiAgICAgIGNsaXAgPSBwYXRoOwogICAgfQogICAgZ3JvdXBDdHguY2xpcChjbGlwKTsKICAgIGlmIChncm91cC5zbWFzaykgewogICAgICB0aGlzLnNtYXNrU3RhY2sucHVzaCh7CiAgICAgICAgY2FudmFzOiBzY3JhdGNoQ2FudmFzLmNhbnZhcywKICAgICAgICBjb250ZXh0OiBncm91cEN0eCwKICAgICAgICBvZmZzZXRYLAogICAgICAgIG9mZnNldFksCiAgICAgICAgc3VidHlwZTogZ3JvdXAuc21hc2suc3VidHlwZSwKICAgICAgICBiYWNrZHJvcDogZ3JvdXAuc21hc2suYmFja2Ryb3AsCiAgICAgICAgdHJhbnNmZXJNYXA6IGdyb3VwLnNtYXNrLnRyYW5zZmVyTWFwIHx8IG51bGwsCiAgICAgICAgc3RhcnRUcmFuc2Zvcm1JbnZlcnNlOiBudWxsCiAgICAgIH0pOwogICAgfQogICAgaWYgKCFncm91cC5zbWFzayB8fCB0aGlzLmRlcGVuZGVuY3lUcmFja2VyKSB7CiAgICAgIGN1cnJlbnRDdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApOwogICAgICBjdXJyZW50Q3R4LnRyYW5zbGF0ZShvZmZzZXRYLCBvZmZzZXRZKTsKICAgICAgY3VycmVudEN0eC5zYXZlKCk7CiAgICB9CiAgICBjb3B5Q3R4U3RhdGUoY3VycmVudEN0eCwgZ3JvdXBDdHgpOwogICAgdGhpcy5jdHggPSBncm91cEN0eDsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LmluaGVyaXRTaW1wbGVEYXRhQXNGdXR1cmVGb3JjZWREZXBlbmRlbmNpZXMoWyJmaWxsQWxwaGEiLCAic3Ryb2tlQWxwaGEiLCAiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIl0pLnB1c2hCYXNlVHJhbnNmb3JtKGN1cnJlbnRDdHgpOwogICAgdGhpcy5zZXRHU3RhdGUob3BJZHgsIFtbIkJNIiwgInNvdXJjZS1vdmVyIl0sIFsiY2EiLCAxXSwgWyJDQSIsIDFdXSk7CiAgICB0aGlzLmdyb3VwU3RhY2sucHVzaChjdXJyZW50Q3R4KTsKICAgIHRoaXMuZ3JvdXBMZXZlbCsrOwogIH0KICBlbmRHcm91cChvcElkeCwgZ3JvdXApIHsKICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmdyb3VwTGV2ZWwtLTsKICAgIGNvbnN0IGdyb3VwQ3R4ID0gdGhpcy5jdHg7CiAgICBjb25zdCBjdHggPSB0aGlzLmdyb3VwU3RhY2sucG9wKCk7CiAgICB0aGlzLmN0eCA9IGN0eDsKICAgIHRoaXMuY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlOwogICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucG9wQmFzZVRyYW5zZm9ybSgpOwogICAgaWYgKGdyb3VwLnNtYXNrKSB7CiAgICAgIHRoaXMudGVtcFNNYXNrID0gdGhpcy5zbWFza1N0YWNrLnBvcCgpOwogICAgICB0aGlzLnJlc3RvcmUob3BJZHgpOwogICAgICBpZiAodGhpcy5kZXBlbmRlbmN5VHJhY2tlcikgewogICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhpcy5jdHgucmVzdG9yZSgpOwogICAgICBjb25zdCBjdXJyZW50TXR4ID0gZ2V0Q3VycmVudFRyYW5zZm9ybSh0aGlzLmN0eCk7CiAgICAgIHRoaXMucmVzdG9yZShvcElkeCk7CiAgICAgIHRoaXMuY3R4LnNhdmUoKTsKICAgICAgdGhpcy5jdHguc2V0VHJhbnNmb3JtKC4uLmN1cnJlbnRNdHgpOwogICAgICBjb25zdCBkaXJ0eUJveCA9IE1JTl9NQVhfSU5JVC5zbGljZSgpOwogICAgICBVdGlsLmF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLCAwLCBncm91cEN0eC5jYW52YXMud2lkdGgsIGdyb3VwQ3R4LmNhbnZhcy5oZWlnaHRdLCBjdXJyZW50TXR4LCBkaXJ0eUJveCk7CiAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZShncm91cEN0eC5jYW52YXMsIDAsIDApOwogICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7CiAgICAgIHRoaXMuY29tcG9zZShkaXJ0eUJveCk7CiAgICB9CiAgfQogIGJlZ2luQW5ub3RhdGlvbihvcElkeCwgaWQsIHJlY3QsIHRyYW5zZm9ybSwgbWF0cml4LCBoYXNPd25DYW52YXMpIHsKICAgIHRoaXMuI3Jlc3RvcmVJbml0aWFsU3RhdGUoKTsKICAgIHJlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4KTsKICAgIHRoaXMuY3R4LnNhdmUoKTsKICAgIHRoaXMuc2F2ZShvcElkeCk7CiAgICBpZiAodGhpcy5iYXNlVHJhbnNmb3JtKSB7CiAgICAgIHRoaXMuY3R4LnNldFRyYW5zZm9ybSguLi50aGlzLmJhc2VUcmFuc2Zvcm0pOwogICAgfQogICAgaWYgKHJlY3QpIHsKICAgICAgY29uc3Qgd2lkdGggPSByZWN0WzJdIC0gcmVjdFswXTsKICAgICAgY29uc3QgaGVpZ2h0ID0gcmVjdFszXSAtIHJlY3RbMV07CiAgICAgIGlmIChoYXNPd25DYW52YXMgJiYgdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwKSB7CiAgICAgICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtLnNsaWNlKCk7CiAgICAgICAgdHJhbnNmb3JtWzRdIC09IHJlY3RbMF07CiAgICAgICAgdHJhbnNmb3JtWzVdIC09IHJlY3RbMV07CiAgICAgICAgcmVjdCA9IHJlY3Quc2xpY2UoKTsKICAgICAgICByZWN0WzBdID0gcmVjdFsxXSA9IDA7CiAgICAgICAgcmVjdFsyXSA9IHdpZHRoOwogICAgICAgIHJlY3RbM10gPSBoZWlnaHQ7CiAgICAgICAgVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShnZXRDdXJyZW50VHJhbnNmb3JtKHRoaXMuY3R4KSwgWFkpOwogICAgICAgIGNvbnN0IHsKICAgICAgICAgIHZpZXdwb3J0U2NhbGUKICAgICAgICB9ID0gdGhpczsKICAgICAgICBjb25zdCBjYW52YXNXaWR0aCA9IE1hdGguY2VpbCh3aWR0aCAqIHRoaXMub3V0cHV0U2NhbGVYICogdmlld3BvcnRTY2FsZSk7CiAgICAgICAgY29uc3QgY2FudmFzSGVpZ2h0ID0gTWF0aC5jZWlsKGhlaWdodCAqIHRoaXMub3V0cHV0U2NhbGVZICogdmlld3BvcnRTY2FsZSk7CiAgICAgICAgdGhpcy5hbm5vdGF0aW9uQ2FudmFzID0gdGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZShjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0KTsKICAgICAgICBjb25zdCB7CiAgICAgICAgICBjYW52YXMsCiAgICAgICAgICBjb250ZXh0CiAgICAgICAgfSA9IHRoaXMuYW5ub3RhdGlvbkNhbnZhczsKICAgICAgICB0aGlzLmFubm90YXRpb25DYW52YXNNYXAuc2V0KGlkLCBjYW52YXMpOwogICAgICAgIHRoaXMuYW5ub3RhdGlvbkNhbnZhcy5zYXZlZEN0eCA9IHRoaXMuY3R4OwogICAgICAgIHRoaXMuY3R4ID0gY29udGV4dDsKICAgICAgICB0aGlzLmN0eC5zYXZlKCk7CiAgICAgICAgdGhpcy5jdHguc2V0VHJhbnNmb3JtKFhZWzBdLCAwLCAwLCAtWFlbMV0sIDAsIGhlaWdodCAqIFhZWzFdKTsKICAgICAgICByZXNldEN0eFRvRGVmYXVsdCh0aGlzLmN0eCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzZXRDdHhUb0RlZmF1bHQodGhpcy5jdHgpOwogICAgICAgIHRoaXMuZW5kUGF0aChvcElkeCk7CiAgICAgICAgY29uc3QgY2xpcCA9IG5ldyBQYXRoMkQoKTsKICAgICAgICBjbGlwLnJlY3QocmVjdFswXSwgcmVjdFsxXSwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgdGhpcy5jdHguY2xpcChjbGlwKTsKICAgICAgfQogICAgfQogICAgdGhpcy5jdXJyZW50ID0gbmV3IENhbnZhc0V4dHJhU3RhdGUodGhpcy5jdHguY2FudmFzLndpZHRoLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KTsKICAgIHRoaXMudHJhbnNmb3JtKG9wSWR4LCAuLi50cmFuc2Zvcm0pOwogICAgdGhpcy50cmFuc2Zvcm0ob3BJZHgsIC4uLm1hdHJpeCk7CiAgfQogIGVuZEFubm90YXRpb24ob3BJZHgpIHsKICAgIGlmICh0aGlzLmFubm90YXRpb25DYW52YXMpIHsKICAgICAgdGhpcy5jdHgucmVzdG9yZSgpOwogICAgICB0aGlzLiNkcmF3RmlsdGVyKCk7CiAgICAgIHRoaXMuY3R4ID0gdGhpcy5hbm5vdGF0aW9uQ2FudmFzLnNhdmVkQ3R4OwogICAgICBkZWxldGUgdGhpcy5hbm5vdGF0aW9uQ2FudmFzLnNhdmVkQ3R4OwogICAgICBkZWxldGUgdGhpcy5hbm5vdGF0aW9uQ2FudmFzOwogICAgfQogIH0KICBwYWludEltYWdlTWFza1hPYmplY3Qob3BJZHgsIGltZykgewogICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGNvdW50ID0gaW1nLmNvdW50OwogICAgaW1nID0gdGhpcy5nZXRPYmplY3Qob3BJZHgsIGltZy5kYXRhLCBpbWcpOwogICAgaW1nLmNvdW50ID0gY291bnQ7CiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDsKICAgIGNvbnN0IG1hc2sgPSB0aGlzLl9jcmVhdGVNYXNrQ2FudmFzKG9wSWR4LCBpbWcpOwogICAgY29uc3QgbWFza0NhbnZhcyA9IG1hc2suY2FudmFzOwogICAgY3R4LnNhdmUoKTsKICAgIGN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7CiAgICBjdHguZHJhd0ltYWdlKG1hc2tDYW52YXMsIG1hc2sub2Zmc2V0WCwgbWFzay5vZmZzZXRZKTsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlc2V0QkJveChvcElkeCkucmVjb3JkQkJveChvcElkeCwgdGhpcy5jdHgsIG1hc2sub2Zmc2V0WCwgbWFzay5vZmZzZXRYICsgbWFza0NhbnZhcy53aWR0aCwgbWFzay5vZmZzZXRZLCBtYXNrLm9mZnNldFkgKyBtYXNrQ2FudmFzLmhlaWdodCkucmVjb3JkT3BlcmF0aW9uKG9wSWR4KTsKICAgIGN0eC5yZXN0b3JlKCk7CiAgICB0aGlzLmNvbXBvc2UoKTsKICB9CiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KG9wSWR4LCBpbWcsIHNjYWxlWCwgc2tld1ggPSAwLCBza2V3WSA9IDAsIHNjYWxlWSwgcG9zaXRpb25zKSB7CiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaW1nID0gdGhpcy5nZXRPYmplY3Qob3BJZHgsIGltZy5kYXRhLCBpbWcpOwogICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7CiAgICBjdHguc2F2ZSgpOwogICAgY29uc3QgY3VycmVudFRyYW5zZm9ybSA9IGdldEN1cnJlbnRUcmFuc2Zvcm0oY3R4KTsKICAgIGN0eC50cmFuc2Zvcm0oc2NhbGVYLCBza2V3WCwgc2tld1ksIHNjYWxlWSwgMCwgMCk7CiAgICBjb25zdCBtYXNrID0gdGhpcy5fY3JlYXRlTWFza0NhbnZhcyhvcElkeCwgaW1nKTsKICAgIGN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgbWFzay5vZmZzZXRYIC0gY3VycmVudFRyYW5zZm9ybVs0XSwgbWFzay5vZmZzZXRZIC0gY3VycmVudFRyYW5zZm9ybVs1XSk7CiAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZXNldEJCb3gob3BJZHgpOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcG9zaXRpb25zLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHsKICAgICAgY29uc3QgdHJhbnMgPSBVdGlsLnRyYW5zZm9ybShjdXJyZW50VHJhbnNmb3JtLCBbc2NhbGVYLCBza2V3WCwgc2tld1ksIHNjYWxlWSwgcG9zaXRpb25zW2ldLCBwb3NpdGlvbnNbaSArIDFdXSk7CiAgICAgIGN0eC5kcmF3SW1hZ2UobWFzay5jYW52YXMsIHRyYW5zWzRdLCB0cmFuc1s1XSk7CiAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZEJCb3gob3BJZHgsIHRoaXMuY3R4LCB0cmFuc1s0XSwgdHJhbnNbNF0gKyBtYXNrLmNhbnZhcy53aWR0aCwgdHJhbnNbNV0sIHRyYW5zWzVdICsgbWFzay5jYW52YXMuaGVpZ2h0KTsKICAgIH0KICAgIGN0eC5yZXN0b3JlKCk7CiAgICB0aGlzLmNvbXBvc2UoKTsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZE9wZXJhdGlvbihvcElkeCk7CiAgfQogIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwKG9wSWR4LCBpbWFnZXMpIHsKICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDsKICAgIGNvbnN0IGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7CiAgICBjb25zdCBpc1BhdHRlcm5GaWxsID0gdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsOwogICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucmVzZXRCQm94KG9wSWR4KS5yZWNvcmREZXBlbmRlbmNpZXMob3BJZHgsIERlcGVuZGVuY2llcy50cmFuc2Zvcm1BbmRGaWxsKTsKICAgIGZvciAoY29uc3QgaW1hZ2Ugb2YgaW1hZ2VzKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhLAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICB0cmFuc2Zvcm0KICAgICAgfSA9IGltYWdlOwogICAgICBjb25zdCBtYXNrQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoIm1hc2tDYW52YXMiLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgY29uc3QgbWFza0N0eCA9IG1hc2tDYW52YXMuY29udGV4dDsKICAgICAgbWFza0N0eC5zYXZlKCk7CiAgICAgIGNvbnN0IGltZyA9IHRoaXMuZ2V0T2JqZWN0KG9wSWR4LCBkYXRhLCBpbWFnZSk7CiAgICAgIHB1dEJpbmFyeUltYWdlTWFzayhtYXNrQ3R4LCBpbWcpOwogICAgICBtYXNrQ3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICJzb3VyY2UtaW4iOwogICAgICBtYXNrQ3R4LmZpbGxTdHlsZSA9IGlzUGF0dGVybkZpbGwgPyBmaWxsQ29sb3IuZ2V0UGF0dGVybihtYXNrQ3R4LCB0aGlzLCBnZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZShjdHgpLCBQYXRoVHlwZS5GSUxMLCBvcElkeCkgOiBmaWxsQ29sb3I7CiAgICAgIG1hc2tDdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIG1hc2tDdHgucmVzdG9yZSgpOwogICAgICBjdHguc2F2ZSgpOwogICAgICBjdHgudHJhbnNmb3JtKC4uLnRyYW5zZm9ybSk7CiAgICAgIGN0eC5zY2FsZSgxLCAtMSk7CiAgICAgIGRyYXdJbWFnZUF0SW50ZWdlckNvb3JkcyhjdHgsIG1hc2tDYW52YXMuY2FudmFzLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAtMSwgMSwgMSk7CiAgICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZEJCb3gob3BJZHgsIGN0eCwgMCwgd2lkdGgsIDAsIGhlaWdodCk7CiAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICB9CiAgICB0aGlzLmNvbXBvc2UoKTsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZE9wZXJhdGlvbihvcElkeCk7CiAgfQogIHBhaW50SW1hZ2VYT2JqZWN0KG9wSWR4LCBvYmpJZCkgewogICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGltZ0RhdGEgPSB0aGlzLmdldE9iamVjdChvcElkeCwgb2JqSWQpOwogICAgaWYgKCFpbWdEYXRhKSB7CiAgICAgIHdhcm4oIkRlcGVuZGVudCBpbWFnZSBpc24ndCByZWFkeSB5ZXQiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChvcElkeCwgaW1nRGF0YSk7CiAgfQogIHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0KG9wSWR4LCBvYmpJZCwgc2NhbGVYLCBzY2FsZVksIHBvc2l0aW9ucykgewogICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGltZ0RhdGEgPSB0aGlzLmdldE9iamVjdChvcElkeCwgb2JqSWQpOwogICAgaWYgKCFpbWdEYXRhKSB7CiAgICAgIHdhcm4oIkRlcGVuZGVudCBpbWFnZSBpc24ndCByZWFkeSB5ZXQiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3Qgd2lkdGggPSBpbWdEYXRhLndpZHRoOwogICAgY29uc3QgaGVpZ2h0ID0gaW1nRGF0YS5oZWlnaHQ7CiAgICBjb25zdCBtYXAgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHBvc2l0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7CiAgICAgIG1hcC5wdXNoKHsKICAgICAgICB0cmFuc2Zvcm06IFtzY2FsZVgsIDAsIDAsIHNjYWxlWSwgcG9zaXRpb25zW2ldLCBwb3NpdGlvbnNbaSArIDFdXSwKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgdzogd2lkdGgsCiAgICAgICAgaDogaGVpZ2h0CiAgICAgIH0pOwogICAgfQogICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwKG9wSWR4LCBpbWdEYXRhLCBtYXApOwogIH0KICBhcHBseVRyYW5zZmVyTWFwc1RvQ2FudmFzKGN0eCkgewogICAgaWYgKHRoaXMuY3VycmVudC50cmFuc2Zlck1hcHMgIT09ICJub25lIikgewogICAgICBjdHguZmlsdGVyID0gdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwczsKICAgICAgY3R4LmRyYXdJbWFnZShjdHguY2FudmFzLCAwLCAwKTsKICAgICAgY3R4LmZpbHRlciA9ICJub25lIjsKICAgIH0KICAgIHJldHVybiBjdHguY2FudmFzOwogIH0KICBhcHBseVRyYW5zZmVyTWFwc1RvQml0bWFwKGltZ0RhdGEpIHsKICAgIGlmICh0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzID09PSAibm9uZSIpIHsKICAgICAgcmV0dXJuIGltZ0RhdGEuYml0bWFwOwogICAgfQogICAgY29uc3QgewogICAgICBiaXRtYXAsCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQKICAgIH0gPSBpbWdEYXRhOwogICAgY29uc3QgdG1wQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIiwgd2lkdGgsIGhlaWdodCk7CiAgICBjb25zdCB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDsKICAgIHRtcEN0eC5maWx0ZXIgPSB0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzOwogICAgdG1wQ3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDApOwogICAgdG1wQ3R4LmZpbHRlciA9ICJub25lIjsKICAgIHJldHVybiB0bXBDYW52YXMuY2FudmFzOwogIH0KICBwYWludElubGluZUltYWdlWE9iamVjdChvcElkeCwgaW1nRGF0YSkgewogICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHdpZHRoID0gaW1nRGF0YS53aWR0aDsKICAgIGNvbnN0IGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0OwogICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7CiAgICB0aGlzLnNhdmUob3BJZHgpOwogICAgY29uc3QgewogICAgICBmaWx0ZXIKICAgIH0gPSBjdHg7CiAgICBpZiAoZmlsdGVyICE9PSAibm9uZSIgJiYgZmlsdGVyICE9PSAiIikgewogICAgICBjdHguZmlsdGVyID0gIm5vbmUiOwogICAgfQogICAgY3R4LnNjYWxlKDEgLyB3aWR0aCwgLTEgLyBoZWlnaHQpOwogICAgbGV0IGltZ1RvUGFpbnQ7CiAgICBpZiAoaW1nRGF0YS5iaXRtYXApIHsKICAgICAgaW1nVG9QYWludCA9IHRoaXMuYXBwbHlUcmFuc2Zlck1hcHNUb0JpdG1hcChpbWdEYXRhKTsKICAgIH0gZWxzZSBpZiAodHlwZW9mIEhUTUxFbGVtZW50ID09PSAiZnVuY3Rpb24iICYmIGltZ0RhdGEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCAhaW1nRGF0YS5kYXRhKSB7CiAgICAgIGltZ1RvUGFpbnQgPSBpbWdEYXRhOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgdG1wQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIiwgd2lkdGgsIGhlaWdodCk7CiAgICAgIGNvbnN0IHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0OwogICAgICBwdXRCaW5hcnlJbWFnZURhdGEodG1wQ3R4LCBpbWdEYXRhKTsKICAgICAgaW1nVG9QYWludCA9IHRoaXMuYXBwbHlUcmFuc2Zlck1hcHNUb0NhbnZhcyh0bXBDdHgpOwogICAgfQogICAgY29uc3Qgc2NhbGVkID0gdGhpcy5fc2NhbGVJbWFnZShpbWdUb1BhaW50LCBnZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZShjdHgpKTsKICAgIGN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBnZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoZ2V0Q3VycmVudFRyYW5zZm9ybShjdHgpLCBpbWdEYXRhLmludGVycG9sYXRlKTsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlc2V0QkJveChvcElkeCkucmVjb3JkQkJveChvcElkeCwgY3R4LCAwLCB3aWR0aCwgLWhlaWdodCwgMCkucmVjb3JkRGVwZW5kZW5jaWVzKG9wSWR4LCBEZXBlbmRlbmNpZXMuaW1hZ2VYT2JqZWN0KS5yZWNvcmRPcGVyYXRpb24ob3BJZHgpOwogICAgZHJhd0ltYWdlQXRJbnRlZ2VyQ29vcmRzKGN0eCwgc2NhbGVkLmltZywgMCwgMCwgc2NhbGVkLnBhaW50V2lkdGgsIHNjYWxlZC5wYWludEhlaWdodCwgMCwgLWhlaWdodCwgd2lkdGgsIGhlaWdodCk7CiAgICB0aGlzLmNvbXBvc2UoKTsKICAgIHRoaXMucmVzdG9yZShvcElkeCk7CiAgfQogIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXAob3BJZHgsIGltZ0RhdGEsIG1hcCkgewogICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4OwogICAgbGV0IGltZ1RvUGFpbnQ7CiAgICBpZiAoaW1nRGF0YS5iaXRtYXApIHsKICAgICAgaW1nVG9QYWludCA9IGltZ0RhdGEuYml0bWFwOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgdyA9IGltZ0RhdGEud2lkdGg7CiAgICAgIGNvbnN0IGggPSBpbWdEYXRhLmhlaWdodDsKICAgICAgY29uc3QgdG1wQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIiwgdywgaCk7CiAgICAgIGNvbnN0IHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0OwogICAgICBwdXRCaW5hcnlJbWFnZURhdGEodG1wQ3R4LCBpbWdEYXRhKTsKICAgICAgaW1nVG9QYWludCA9IHRoaXMuYXBwbHlUcmFuc2Zlck1hcHNUb0NhbnZhcyh0bXBDdHgpOwogICAgfQogICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucmVzZXRCQm94KG9wSWR4KTsKICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWFwKSB7CiAgICAgIGN0eC5zYXZlKCk7CiAgICAgIGN0eC50cmFuc2Zvcm0oLi4uZW50cnkudHJhbnNmb3JtKTsKICAgICAgY3R4LnNjYWxlKDEsIC0xKTsKICAgICAgZHJhd0ltYWdlQXRJbnRlZ2VyQ29vcmRzKGN0eCwgaW1nVG9QYWludCwgZW50cnkueCwgZW50cnkueSwgZW50cnkudywgZW50cnkuaCwgMCwgLTEsIDEsIDEpOwogICAgICB0aGlzLmRlcGVuZGVuY3lUcmFja2VyPy5yZWNvcmRCQm94KG9wSWR4LCBjdHgsIDAsIDEsIC0xLCAwKTsKICAgICAgY3R4LnJlc3RvcmUoKTsKICAgIH0KICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LnJlY29yZE9wZXJhdGlvbihvcElkeCk7CiAgICB0aGlzLmNvbXBvc2UoKTsKICB9CiAgcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKG9wSWR4KSB7CiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucmVzZXRCQm94KG9wSWR4KS5yZWNvcmRCQm94KG9wSWR4LCB0aGlzLmN0eCwgMCwgMSwgMCwgMSkucmVjb3JkRGVwZW5kZW5jaWVzKG9wSWR4LCBEZXBlbmRlbmNpZXMuZmlsbCkucmVjb3JkT3BlcmF0aW9uKG9wSWR4KTsKICAgIHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpOwogICAgdGhpcy5jb21wb3NlKCk7CiAgfQogIG1hcmtQb2ludChvcElkeCwgdGFnKSB7fQogIG1hcmtQb2ludFByb3BzKG9wSWR4LCB0YWcsIHByb3BlcnRpZXMpIHt9CiAgYmVnaW5NYXJrZWRDb250ZW50KG9wSWR4LCB0YWcpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LmJlZ2luTWFya2VkQ29udGVudChvcElkeCk7CiAgICB0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHsKICAgICAgdmlzaWJsZTogdHJ1ZQogICAgfSk7CiAgfQogIGJlZ2luTWFya2VkQ29udGVudFByb3BzKG9wSWR4LCB0YWcsIHByb3BlcnRpZXMpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LmJlZ2luTWFya2VkQ29udGVudChvcElkeCk7CiAgICBpZiAodGFnID09PSAiT0MiKSB7CiAgICAgIHRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goewogICAgICAgIHZpc2libGU6IHRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnLmlzVmlzaWJsZShwcm9wZXJ0aWVzKQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goewogICAgICAgIHZpc2libGU6IHRydWUKICAgICAgfSk7CiAgICB9CiAgICB0aGlzLmNvbnRlbnRWaXNpYmxlID0gdGhpcy5pc0NvbnRlbnRWaXNpYmxlKCk7CiAgfQogIGVuZE1hcmtlZENvbnRlbnQob3BJZHgpIHsKICAgIHRoaXMuZGVwZW5kZW5jeVRyYWNrZXI/LmVuZE1hcmtlZENvbnRlbnQob3BJZHgpOwogICAgdGhpcy5tYXJrZWRDb250ZW50U3RhY2sucG9wKCk7CiAgICB0aGlzLmNvbnRlbnRWaXNpYmxlID0gdGhpcy5pc0NvbnRlbnRWaXNpYmxlKCk7CiAgfQogIGJlZ2luQ29tcGF0KG9wSWR4KSB7fQogIGVuZENvbXBhdChvcElkeCkge30KICBjb25zdW1lUGF0aChvcElkeCwgcGF0aCwgY2xpcEJveCkgewogICAgY29uc3QgaXNFbXB0eSA9IHRoaXMuY3VycmVudC5pc0VtcHR5Q2xpcCgpOwogICAgaWYgKHRoaXMucGVuZGluZ0NsaXApIHsKICAgICAgdGhpcy5jdXJyZW50LnVwZGF0ZUNsaXBGcm9tUGF0aCgpOwogICAgfQogICAgaWYgKCF0aGlzLnBlbmRpbmdDbGlwKSB7CiAgICAgIHRoaXMuY29tcG9zZShjbGlwQm94KTsKICAgIH0KICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4OwogICAgaWYgKHRoaXMucGVuZGluZ0NsaXApIHsKICAgICAgaWYgKCFpc0VtcHR5KSB7CiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NsaXAgPT09IEVPX0NMSVApIHsKICAgICAgICAgIGN0eC5jbGlwKHBhdGgsICJldmVub2RkIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN0eC5jbGlwKHBhdGgpOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDsKICAgICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8uYmJveFRvQ2xpcEJveERyb3BPcGVyYXRpb24ob3BJZHgpLnJlY29yZEZ1dHVyZUZvcmNlZERlcGVuZGVuY3koImNsaXBQYXRoIiwgb3BJZHgpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5kZXBlbmRlbmN5VHJhY2tlcj8ucmVjb3JkT3BlcmF0aW9uKG9wSWR4KTsKICAgIH0KICAgIHRoaXMuY3VycmVudC5zdGFydE5ld1BhdGhBbmRDbGlwQm94KHRoaXMuY3VycmVudC5jbGlwQm94KTsKICB9CiAgZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpIHsKICAgIGlmICghdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCkgewogICAgICBjb25zdCBtID0gZ2V0Q3VycmVudFRyYW5zZm9ybSh0aGlzLmN0eCk7CiAgICAgIGlmIChtWzFdID09PSAwICYmIG1bMl0gPT09IDApIHsKICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gMSAvIE1hdGgubWluKE1hdGguYWJzKG1bMF0pLCBNYXRoLmFicyhtWzNdKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgYWJzRGV0ID0gTWF0aC5hYnMobVswXSAqIG1bM10gLSBtWzJdICogbVsxXSk7CiAgICAgICAgY29uc3Qgbm9ybVggPSBNYXRoLmh5cG90KG1bMF0sIG1bMl0pOwogICAgICAgIGNvbnN0IG5vcm1ZID0gTWF0aC5oeXBvdChtWzFdLCBtWzNdKTsKICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gTWF0aC5tYXgobm9ybVgsIG5vcm1ZKSAvIGFic0RldDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg7CiAgfQogIGdldFNjYWxlRm9yU3Ryb2tpbmcoKSB7CiAgICBpZiAodGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZ1swXSA9PT0gLTEpIHsKICAgICAgY29uc3QgewogICAgICAgIGxpbmVXaWR0aAogICAgICB9ID0gdGhpcy5jdXJyZW50OwogICAgICBjb25zdCB7CiAgICAgICAgYSwKICAgICAgICBiLAogICAgICAgIGMsCiAgICAgICAgZAogICAgICB9ID0gdGhpcy5jdHguZ2V0VHJhbnNmb3JtKCk7CiAgICAgIGxldCBzY2FsZVgsIHNjYWxlWTsKICAgICAgaWYgKGIgPT09IDAgJiYgYyA9PT0gMCkgewogICAgICAgIGNvbnN0IG5vcm1YID0gTWF0aC5hYnMoYSk7CiAgICAgICAgY29uc3Qgbm9ybVkgPSBNYXRoLmFicyhkKTsKICAgICAgICBpZiAobm9ybVggPT09IG5vcm1ZKSB7CiAgICAgICAgICBpZiAobGluZVdpZHRoID09PSAwKSB7CiAgICAgICAgICAgIHNjYWxlWCA9IHNjYWxlWSA9IDEgLyBub3JtWDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IHNjYWxlZExpbmVXaWR0aCA9IG5vcm1YICogbGluZVdpZHRoOwogICAgICAgICAgICBzY2FsZVggPSBzY2FsZVkgPSBzY2FsZWRMaW5lV2lkdGggPCAxID8gMSAvIHNjYWxlZExpbmVXaWR0aCA6IDE7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChsaW5lV2lkdGggPT09IDApIHsKICAgICAgICAgIHNjYWxlWCA9IDEgLyBub3JtWDsKICAgICAgICAgIHNjYWxlWSA9IDEgLyBub3JtWTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qgc2NhbGVkWExpbmVXaWR0aCA9IG5vcm1YICogbGluZVdpZHRoOwogICAgICAgICAgY29uc3Qgc2NhbGVkWUxpbmVXaWR0aCA9IG5vcm1ZICogbGluZVdpZHRoOwogICAgICAgICAgc2NhbGVYID0gc2NhbGVkWExpbmVXaWR0aCA8IDEgPyAxIC8gc2NhbGVkWExpbmVXaWR0aCA6IDE7CiAgICAgICAgICBzY2FsZVkgPSBzY2FsZWRZTGluZVdpZHRoIDwgMSA/IDEgLyBzY2FsZWRZTGluZVdpZHRoIDogMTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgYWJzRGV0ID0gTWF0aC5hYnMoYSAqIGQgLSBiICogYyk7CiAgICAgICAgY29uc3Qgbm9ybVggPSBNYXRoLmh5cG90KGEsIGIpOwogICAgICAgIGNvbnN0IG5vcm1ZID0gTWF0aC5oeXBvdChjLCBkKTsKICAgICAgICBpZiAobGluZVdpZHRoID09PSAwKSB7CiAgICAgICAgICBzY2FsZVggPSBub3JtWSAvIGFic0RldDsKICAgICAgICAgIHNjYWxlWSA9IG5vcm1YIC8gYWJzRGV0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBiYXNlQXJlYSA9IGxpbmVXaWR0aCAqIGFic0RldDsKICAgICAgICAgIHNjYWxlWCA9IG5vcm1ZID4gYmFzZUFyZWEgPyBub3JtWSAvIGJhc2VBcmVhIDogMTsKICAgICAgICAgIHNjYWxlWSA9IG5vcm1YID4gYmFzZUFyZWEgPyBub3JtWCAvIGJhc2VBcmVhIDogMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZ1swXSA9IHNjYWxlWDsKICAgICAgdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZ1sxXSA9IHNjYWxlWTsKICAgIH0KICAgIHJldHVybiB0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nOwogIH0KICByZXNjYWxlQW5kU3Ryb2tlKHBhdGgsIHNhdmVSZXN0b3JlKSB7CiAgICBjb25zdCB7CiAgICAgIGN0eCwKICAgICAgY3VycmVudDogewogICAgICAgIGxpbmVXaWR0aAogICAgICB9CiAgICB9ID0gdGhpczsKICAgIGNvbnN0IFtzY2FsZVgsIHNjYWxlWV0gPSB0aGlzLmdldFNjYWxlRm9yU3Ryb2tpbmcoKTsKICAgIGlmIChzY2FsZVggPT09IHNjYWxlWSkgewogICAgICBjdHgubGluZVdpZHRoID0gKGxpbmVXaWR0aCB8fCAxKSAqIHNjYWxlWDsKICAgICAgY3R4LnN0cm9rZShwYXRoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgZGFzaGVzID0gY3R4LmdldExpbmVEYXNoKCk7CiAgICBpZiAoc2F2ZVJlc3RvcmUpIHsKICAgICAgY3R4LnNhdmUoKTsKICAgIH0KICAgIGN0eC5zY2FsZShzY2FsZVgsIHNjYWxlWSk7CiAgICBTQ0FMRV9NQVRSSVguYSA9IDEgLyBzY2FsZVg7CiAgICBTQ0FMRV9NQVRSSVguZCA9IDEgLyBzY2FsZVk7CiAgICBjb25zdCBuZXdQYXRoID0gbmV3IFBhdGgyRCgpOwogICAgbmV3UGF0aC5hZGRQYXRoKHBhdGgsIFNDQUxFX01BVFJJWCk7CiAgICBpZiAoZGFzaGVzLmxlbmd0aCA+IDApIHsKICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1heChzY2FsZVgsIHNjYWxlWSk7CiAgICAgIGN0eC5zZXRMaW5lRGFzaChkYXNoZXMubWFwKHggPT4geCAvIHNjYWxlKSk7CiAgICAgIGN0eC5saW5lRGFzaE9mZnNldCAvPSBzY2FsZTsKICAgIH0KICAgIGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGggfHwgMTsKICAgIGN0eC5zdHJva2UobmV3UGF0aCk7CiAgICBpZiAoc2F2ZVJlc3RvcmUpIHsKICAgICAgY3R4LnJlc3RvcmUoKTsKICAgIH0KICB9CiAgaXNDb250ZW50VmlzaWJsZSgpIHsKICAgIGZvciAobGV0IGkgPSB0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICBpZiAoIXRoaXMubWFya2VkQ29udGVudFN0YWNrW2ldLnZpc2libGUpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KfQpmb3IgKGNvbnN0IG9wIGluIE9QUykgewogIGlmIChDYW52YXNHcmFwaGljcy5wcm90b3R5cGVbb3BdICE9PSB1bmRlZmluZWQpIHsKICAgIENhbnZhc0dyYXBoaWNzLnByb3RvdHlwZVtPUFNbb3BdXSA9IENhbnZhc0dyYXBoaWNzLnByb3RvdHlwZVtvcF07CiAgfQp9Cgo7Ly8gLi9zcmMvZGlzcGxheS93b3JrZXJfb3B0aW9ucy5qcwpjbGFzcyBHbG9iYWxXb3JrZXJPcHRpb25zIHsKICBzdGF0aWMgI3BvcnQgPSBudWxsOwogIHN0YXRpYyAjc3JjID0gIiI7CiAgc3RhdGljIGdldCB3b3JrZXJQb3J0KCkgewogICAgcmV0dXJuIHRoaXMuI3BvcnQ7CiAgfQogIHN0YXRpYyBzZXQgd29ya2VyUG9ydCh2YWwpIHsKICAgIGlmICghKHR5cGVvZiBXb3JrZXIgIT09ICJ1bmRlZmluZWQiICYmIHZhbCBpbnN0YW5jZW9mIFdvcmtlcikgJiYgdmFsICE9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBgd29ya2VyUG9ydGAgdHlwZS4iKTsKICAgIH0KICAgIHRoaXMuI3BvcnQgPSB2YWw7CiAgfQogIHN0YXRpYyBnZXQgd29ya2VyU3JjKCkgewogICAgcmV0dXJuIHRoaXMuI3NyYzsKICB9CiAgc3RhdGljIHNldCB3b3JrZXJTcmModmFsKSB7CiAgICBpZiAodHlwZW9mIHZhbCAhPT0gInN0cmluZyIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGB3b3JrZXJTcmNgIHR5cGUuIik7CiAgICB9CiAgICB0aGlzLiNzcmMgPSB2YWw7CiAgfQp9Cgo7Ly8gLi9zcmMvZGlzcGxheS9tZXRhZGF0YS5qcwpjbGFzcyBNZXRhZGF0YSB7CiAgI21hcDsKICAjZGF0YTsKICBjb25zdHJ1Y3Rvcih7CiAgICBwYXJzZWREYXRhLAogICAgcmF3RGF0YQogIH0pIHsKICAgIHRoaXMuI21hcCA9IHBhcnNlZERhdGE7CiAgICB0aGlzLiNkYXRhID0gcmF3RGF0YTsKICB9CiAgZ2V0UmF3KCkgewogICAgcmV0dXJuIHRoaXMuI2RhdGE7CiAgfQogIGdldChuYW1lKSB7CiAgICByZXR1cm4gdGhpcy4jbWFwLmdldChuYW1lKSA/PyBudWxsOwogIH0KICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsKICAgIHJldHVybiB0aGlzLiNtYXAuZW50cmllcygpOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvb3B0aW9uYWxfY29udGVudF9jb25maWcuanMKCgpjb25zdCBJTlRFUk5BTCA9IFN5bWJvbCgiSU5URVJOQUwiKTsKY2xhc3MgT3B0aW9uYWxDb250ZW50R3JvdXAgewogICNpc0Rpc3BsYXkgPSBmYWxzZTsKICAjaXNQcmludCA9IGZhbHNlOwogICN1c2VyU2V0ID0gZmFsc2U7CiAgI3Zpc2libGUgPSB0cnVlOwogIGNvbnN0cnVjdG9yKHJlbmRlcmluZ0ludGVudCwgewogICAgbmFtZSwKICAgIGludGVudCwKICAgIHVzYWdlLAogICAgcmJHcm91cHMKICB9KSB7CiAgICB0aGlzLiNpc0Rpc3BsYXkgPSAhIShyZW5kZXJpbmdJbnRlbnQgJiBSZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpOwogICAgdGhpcy4jaXNQcmludCA9ICEhKHJlbmRlcmluZ0ludGVudCAmIFJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpOwogICAgdGhpcy5uYW1lID0gbmFtZTsKICAgIHRoaXMuaW50ZW50ID0gaW50ZW50OwogICAgdGhpcy51c2FnZSA9IHVzYWdlOwogICAgdGhpcy5yYkdyb3VwcyA9IHJiR3JvdXBzOwogIH0KICBnZXQgdmlzaWJsZSgpIHsKICAgIGlmICh0aGlzLiN1c2VyU2V0KSB7CiAgICAgIHJldHVybiB0aGlzLiN2aXNpYmxlOwogICAgfQogICAgaWYgKCF0aGlzLiN2aXNpYmxlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgcHJpbnQsCiAgICAgIHZpZXcKICAgIH0gPSB0aGlzLnVzYWdlOwogICAgaWYgKHRoaXMuI2lzRGlzcGxheSkgewogICAgICByZXR1cm4gdmlldz8udmlld1N0YXRlICE9PSAiT0ZGIjsKICAgIH0gZWxzZSBpZiAodGhpcy4jaXNQcmludCkgewogICAgICByZXR1cm4gcHJpbnQ/LnByaW50U3RhdGUgIT09ICJPRkYiOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIF9zZXRWaXNpYmxlKGludGVybmFsLCB2aXNpYmxlLCB1c2VyU2V0ID0gZmFsc2UpIHsKICAgIGlmIChpbnRlcm5hbCAhPT0gSU5URVJOQUwpIHsKICAgICAgdW5yZWFjaGFibGUoIkludGVybmFsIG1ldGhvZCBgX3NldFZpc2libGVgIGNhbGxlZC4iKTsKICAgIH0KICAgIHRoaXMuI3VzZXJTZXQgPSB1c2VyU2V0OwogICAgdGhpcy4jdmlzaWJsZSA9IHZpc2libGU7CiAgfQp9CmNsYXNzIE9wdGlvbmFsQ29udGVudENvbmZpZyB7CiAgI2NhY2hlZEdldEhhc2ggPSBudWxsOwogICNncm91cHMgPSBuZXcgTWFwKCk7CiAgI2luaXRpYWxIYXNoID0gbnVsbDsKICAjb3JkZXIgPSBudWxsOwogIGNvbnN0cnVjdG9yKGRhdGEsIHJlbmRlcmluZ0ludGVudCA9IFJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSkgewogICAgdGhpcy5yZW5kZXJpbmdJbnRlbnQgPSByZW5kZXJpbmdJbnRlbnQ7CiAgICB0aGlzLm5hbWUgPSBudWxsOwogICAgdGhpcy5jcmVhdG9yID0gbnVsbDsKICAgIGlmIChkYXRhID09PSBudWxsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTsKICAgIHRoaXMuY3JlYXRvciA9IGRhdGEuY3JlYXRvcjsKICAgIHRoaXMuI29yZGVyID0gZGF0YS5vcmRlcjsKICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgZGF0YS5ncm91cHMpIHsKICAgICAgdGhpcy4jZ3JvdXBzLnNldChncm91cC5pZCwgbmV3IE9wdGlvbmFsQ29udGVudEdyb3VwKHJlbmRlcmluZ0ludGVudCwgZ3JvdXApKTsKICAgIH0KICAgIGlmIChkYXRhLmJhc2VTdGF0ZSA9PT0gIk9GRiIpIHsKICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLiNncm91cHMudmFsdWVzKCkpIHsKICAgICAgICBncm91cC5fc2V0VmlzaWJsZShJTlRFUk5BTCwgZmFsc2UpOwogICAgICB9CiAgICB9CiAgICBmb3IgKGNvbnN0IG9uIG9mIGRhdGEub24pIHsKICAgICAgdGhpcy4jZ3JvdXBzLmdldChvbikuX3NldFZpc2libGUoSU5URVJOQUwsIHRydWUpOwogICAgfQogICAgZm9yIChjb25zdCBvZmYgb2YgZGF0YS5vZmYpIHsKICAgICAgdGhpcy4jZ3JvdXBzLmdldChvZmYpLl9zZXRWaXNpYmxlKElOVEVSTkFMLCBmYWxzZSk7CiAgICB9CiAgICB0aGlzLiNpbml0aWFsSGFzaCA9IHRoaXMuZ2V0SGFzaCgpOwogIH0KICAjZXZhbHVhdGVWaXNpYmlsaXR5RXhwcmVzc2lvbihhcnJheSkgewogICAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogICAgaWYgKGxlbmd0aCA8IDIpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBjb25zdCBvcGVyYXRvciA9IGFycmF5WzBdOwogICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaV07CiAgICAgIGxldCBzdGF0ZTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudCkpIHsKICAgICAgICBzdGF0ZSA9IHRoaXMuI2V2YWx1YXRlVmlzaWJpbGl0eUV4cHJlc3Npb24oZWxlbWVudCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy4jZ3JvdXBzLmhhcyhlbGVtZW50KSkgewogICAgICAgIHN0YXRlID0gdGhpcy4jZ3JvdXBzLmdldChlbGVtZW50KS52aXNpYmxlOwogICAgICB9IGVsc2UgewogICAgICAgIHdhcm4oYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2VsZW1lbnR9YCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgc3dpdGNoIChvcGVyYXRvcikgewogICAgICAgIGNhc2UgIkFuZCI6CiAgICAgICAgICBpZiAoIXN0YXRlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIk9yIjoKICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIk5vdCI6CiAgICAgICAgICByZXR1cm4gIXN0YXRlOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG9wZXJhdG9yID09PSAiQW5kIjsKICB9CiAgaXNWaXNpYmxlKGdyb3VwKSB7CiAgICBpZiAodGhpcy4jZ3JvdXBzLnNpemUgPT09IDApIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoIWdyb3VwKSB7CiAgICAgIGluZm8oIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGRlZmluZWQuIik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKGdyb3VwLnR5cGUgPT09ICJPQ0ciKSB7CiAgICAgIGlmICghdGhpcy4jZ3JvdXBzLmhhcyhncm91cC5pZCkpIHsKICAgICAgICB3YXJuKGBPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogJHtncm91cC5pZH1gKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy4jZ3JvdXBzLmdldChncm91cC5pZCkudmlzaWJsZTsKICAgIH0gZWxzZSBpZiAoZ3JvdXAudHlwZSA9PT0gIk9DTUQiKSB7CiAgICAgIGlmIChncm91cC5leHByZXNzaW9uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuI2V2YWx1YXRlVmlzaWJpbGl0eUV4cHJlc3Npb24oZ3JvdXAuZXhwcmVzc2lvbik7CiAgICAgIH0KICAgICAgaWYgKCFncm91cC5wb2xpY3kgfHwgZ3JvdXAucG9saWN5ID09PSAiQW55T24iKSB7CiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBncm91cC5pZHMpIHsKICAgICAgICAgIGlmICghdGhpcy4jZ3JvdXBzLmhhcyhpZCkpIHsKICAgICAgICAgICAgd2FybihgT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICR7aWR9YCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuI2dyb3Vwcy5nZXQoaWQpLnZpc2libGUpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChncm91cC5wb2xpY3kgPT09ICJBbGxPbiIpIHsKICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGdyb3VwLmlkcykgewogICAgICAgICAgaWYgKCF0aGlzLiNncm91cHMuaGFzKGlkKSkgewogICAgICAgICAgICB3YXJuKGBPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogJHtpZH1gKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMuI2dyb3Vwcy5nZXQoaWQpLnZpc2libGUpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChncm91cC5wb2xpY3kgPT09ICJBbnlPZmYiKSB7CiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBncm91cC5pZHMpIHsKICAgICAgICAgIGlmICghdGhpcy4jZ3JvdXBzLmhhcyhpZCkpIHsKICAgICAgICAgICAgd2FybihgT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICR7aWR9YCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCF0aGlzLiNncm91cHMuZ2V0KGlkKS52aXNpYmxlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAoZ3JvdXAucG9saWN5ID09PSAiQWxsT2ZmIikgewogICAgICAgIGZvciAoY29uc3QgaWQgb2YgZ3JvdXAuaWRzKSB7CiAgICAgICAgICBpZiAoIXRoaXMuI2dyb3Vwcy5oYXMoaWQpKSB7CiAgICAgICAgICAgIHdhcm4oYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2lkfWApOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLiNncm91cHMuZ2V0KGlkKS52aXNpYmxlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgd2FybihgVW5rbm93biBvcHRpb25hbCBjb250ZW50IHBvbGljeSAke2dyb3VwLnBvbGljeX0uYCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgd2FybihgVW5rbm93biBncm91cCB0eXBlICR7Z3JvdXAudHlwZX0uYCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgc2V0VmlzaWJpbGl0eShpZCwgdmlzaWJsZSA9IHRydWUsIHByZXNlcnZlUkIgPSB0cnVlKSB7CiAgICBjb25zdCBncm91cCA9IHRoaXMuI2dyb3Vwcy5nZXQoaWQpOwogICAgaWYgKCFncm91cCkgewogICAgICB3YXJuKGBPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogJHtpZH1gKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHByZXNlcnZlUkIgJiYgdmlzaWJsZSAmJiBncm91cC5yYkdyb3Vwcy5sZW5ndGgpIHsKICAgICAgZm9yIChjb25zdCByYkdyb3VwIG9mIGdyb3VwLnJiR3JvdXBzKSB7CiAgICAgICAgZm9yIChjb25zdCBvdGhlcklkIG9mIHJiR3JvdXApIHsKICAgICAgICAgIGlmIChvdGhlcklkICE9PSBpZCkgewogICAgICAgICAgICB0aGlzLiNncm91cHMuZ2V0KG90aGVySWQpPy5fc2V0VmlzaWJsZShJTlRFUk5BTCwgZmFsc2UsIHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZ3JvdXAuX3NldFZpc2libGUoSU5URVJOQUwsICEhdmlzaWJsZSwgdHJ1ZSk7CiAgICB0aGlzLiNjYWNoZWRHZXRIYXNoID0gbnVsbDsKICB9CiAgc2V0T0NHU3RhdGUoewogICAgc3RhdGUsCiAgICBwcmVzZXJ2ZVJCCiAgfSkgewogICAgbGV0IG9wZXJhdG9yOwogICAgZm9yIChjb25zdCBlbGVtIG9mIHN0YXRlKSB7CiAgICAgIHN3aXRjaCAoZWxlbSkgewogICAgICAgIGNhc2UgIk9OIjoKICAgICAgICBjYXNlICJPRkYiOgogICAgICAgIGNhc2UgIlRvZ2dsZSI6CiAgICAgICAgICBvcGVyYXRvciA9IGVsZW07CiAgICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCBncm91cCA9IHRoaXMuI2dyb3Vwcy5nZXQoZWxlbSk7CiAgICAgIGlmICghZ3JvdXApIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7CiAgICAgICAgY2FzZSAiT04iOgogICAgICAgICAgdGhpcy5zZXRWaXNpYmlsaXR5KGVsZW0sIHRydWUsIHByZXNlcnZlUkIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiT0ZGIjoKICAgICAgICAgIHRoaXMuc2V0VmlzaWJpbGl0eShlbGVtLCBmYWxzZSwgcHJlc2VydmVSQik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJUb2dnbGUiOgogICAgICAgICAgdGhpcy5zZXRWaXNpYmlsaXR5KGVsZW0sICFncm91cC52aXNpYmxlLCBwcmVzZXJ2ZVJCKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICB0aGlzLiNjYWNoZWRHZXRIYXNoID0gbnVsbDsKICB9CiAgZ2V0IGhhc0luaXRpYWxWaXNpYmlsaXR5KCkgewogICAgcmV0dXJuIHRoaXMuI2luaXRpYWxIYXNoID09PSBudWxsIHx8IHRoaXMuZ2V0SGFzaCgpID09PSB0aGlzLiNpbml0aWFsSGFzaDsKICB9CiAgZ2V0T3JkZXIoKSB7CiAgICBpZiAoIXRoaXMuI2dyb3Vwcy5zaXplKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKHRoaXMuI29yZGVyKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcmRlci5zbGljZSgpOwogICAgfQogICAgcmV0dXJuIFsuLi50aGlzLiNncm91cHMua2V5cygpXTsKICB9CiAgZ2V0R3JvdXAoaWQpIHsKICAgIHJldHVybiB0aGlzLiNncm91cHMuZ2V0KGlkKSB8fCBudWxsOwogIH0KICBnZXRIYXNoKCkgewogICAgaWYgKHRoaXMuI2NhY2hlZEdldEhhc2ggIT09IG51bGwpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NhY2hlZEdldEhhc2g7CiAgICB9CiAgICBjb25zdCBoYXNoID0gbmV3IE11cm11ckhhc2gzXzY0KCk7CiAgICBmb3IgKGNvbnN0IFtpZCwgZ3JvdXBdIG9mIHRoaXMuI2dyb3VwcykgewogICAgICBoYXNoLnVwZGF0ZShgJHtpZH06JHtncm91cC52aXNpYmxlfWApOwogICAgfQogICAgcmV0dXJuIHRoaXMuI2NhY2hlZEdldEhhc2ggPSBoYXNoLmhleGRpZ2VzdCgpOwogIH0KICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsKICAgIHJldHVybiB0aGlzLiNncm91cHMuZW50cmllcygpOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvdHJhbnNwb3J0X3N0cmVhbS5qcwoKCmNsYXNzIFBERkRhdGFUcmFuc3BvcnRTdHJlYW0gewogIGNvbnN0cnVjdG9yKHBkZkRhdGFSYW5nZVRyYW5zcG9ydCwgewogICAgZGlzYWJsZVJhbmdlID0gZmFsc2UsCiAgICBkaXNhYmxlU3RyZWFtID0gZmFsc2UKICB9KSB7CiAgICBhc3NlcnQocGRmRGF0YVJhbmdlVHJhbnNwb3J0LCAnUERGRGF0YVRyYW5zcG9ydFN0cmVhbSAtIG1pc3NpbmcgcmVxdWlyZWQgInBkZkRhdGFSYW5nZVRyYW5zcG9ydCIgYXJndW1lbnQuJyk7CiAgICBjb25zdCB7CiAgICAgIGxlbmd0aCwKICAgICAgaW5pdGlhbERhdGEsCiAgICAgIHByb2dyZXNzaXZlRG9uZSwKICAgICAgY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWUKICAgIH0gPSBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQ7CiAgICB0aGlzLl9xdWV1ZWRDaHVua3MgPSBbXTsKICAgIHRoaXMuX3Byb2dyZXNzaXZlRG9uZSA9IHByb2dyZXNzaXZlRG9uZTsKICAgIHRoaXMuX2NvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lID0gY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU7CiAgICBpZiAoaW5pdGlhbERhdGE/Lmxlbmd0aCA+IDApIHsKICAgICAgY29uc3QgYnVmZmVyID0gaW5pdGlhbERhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIGluaXRpYWxEYXRhLmJ5dGVMZW5ndGggPT09IGluaXRpYWxEYXRhLmJ1ZmZlci5ieXRlTGVuZ3RoID8gaW5pdGlhbERhdGEuYnVmZmVyIDogbmV3IFVpbnQ4QXJyYXkoaW5pdGlhbERhdGEpLmJ1ZmZlcjsKICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2goYnVmZmVyKTsKICAgIH0KICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydCA9IHBkZkRhdGFSYW5nZVRyYW5zcG9ydDsKICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gIWRpc2FibGVTdHJlYW07CiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIWRpc2FibGVSYW5nZTsKICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBsZW5ndGg7CiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7CiAgICB0aGlzLl9yYW5nZVJlYWRlcnMgPSBbXTsKICAgIHBkZkRhdGFSYW5nZVRyYW5zcG9ydC5hZGRSYW5nZUxpc3RlbmVyKChiZWdpbiwgY2h1bmspID0+IHsKICAgICAgdGhpcy5fb25SZWNlaXZlRGF0YSh7CiAgICAgICAgYmVnaW4sCiAgICAgICAgY2h1bmsKICAgICAgfSk7CiAgICB9KTsKICAgIHBkZkRhdGFSYW5nZVRyYW5zcG9ydC5hZGRQcm9ncmVzc0xpc3RlbmVyKChsb2FkZWQsIHRvdGFsKSA9PiB7CiAgICAgIHRoaXMuX29uUHJvZ3Jlc3MoewogICAgICAgIGxvYWRlZCwKICAgICAgICB0b3RhbAogICAgICB9KTsKICAgIH0pOwogICAgcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyKGNodW5rID0+IHsKICAgICAgdGhpcy5fb25SZWNlaXZlRGF0YSh7CiAgICAgICAgY2h1bmsKICAgICAgfSk7CiAgICB9KTsKICAgIHBkZkRhdGFSYW5nZVRyYW5zcG9ydC5hZGRQcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcigoKSA9PiB7CiAgICAgIHRoaXMuX29uUHJvZ3Jlc3NpdmVEb25lKCk7CiAgICB9KTsKICAgIHBkZkRhdGFSYW5nZVRyYW5zcG9ydC50cmFuc3BvcnRSZWFkeSgpOwogIH0KICBfb25SZWNlaXZlRGF0YSh7CiAgICBiZWdpbiwKICAgIGNodW5rCiAgfSkgewogICAgY29uc3QgYnVmZmVyID0gY2h1bmsgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIGNodW5rLmJ5dGVMZW5ndGggPT09IGNodW5rLmJ1ZmZlci5ieXRlTGVuZ3RoID8gY2h1bmsuYnVmZmVyIDogbmV3IFVpbnQ4QXJyYXkoY2h1bmspLmJ1ZmZlcjsKICAgIGlmIChiZWdpbiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikgewogICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9lbnF1ZXVlKGJ1ZmZlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2goYnVmZmVyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl9yYW5nZVJlYWRlcnMuc29tZShmdW5jdGlvbiAocmFuZ2VSZWFkZXIpIHsKICAgICAgICBpZiAocmFuZ2VSZWFkZXIuX2JlZ2luICE9PSBiZWdpbikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByYW5nZVJlYWRlci5fZW5xdWV1ZShidWZmZXIpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9KTsKICAgICAgYXNzZXJ0KGZvdW5kLCAiX29uUmVjZWl2ZURhdGEgLSBubyBgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJhbmdlUmVhZGVyYCBpbnN0YW5jZSBmb3VuZC4iKTsKICAgIH0KICB9CiAgZ2V0IF9wcm9ncmVzc2l2ZURhdGFMZW5ndGgoKSB7CiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/Ll9sb2FkZWQgPz8gMDsKICB9CiAgX29uUHJvZ3Jlc3MoZXZ0KSB7CiAgICBpZiAoZXZ0LnRvdGFsID09PSB1bmRlZmluZWQpIHsKICAgICAgdGhpcy5fcmFuZ2VSZWFkZXJzWzBdPy5vblByb2dyZXNzPy4oewogICAgICAgIGxvYWRlZDogZXZ0LmxvYWRlZAogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPy5vblByb2dyZXNzPy4oewogICAgICAgIGxvYWRlZDogZXZ0LmxvYWRlZCwKICAgICAgICB0b3RhbDogZXZ0LnRvdGFsCiAgICAgIH0pOwogICAgfQogIH0KICBfb25Qcm9ncmVzc2l2ZURvbmUoKSB7CiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj8ucHJvZ3Jlc3NpdmVEb25lKCk7CiAgICB0aGlzLl9wcm9ncmVzc2l2ZURvbmUgPSB0cnVlOwogIH0KICBfcmVtb3ZlUmFuZ2VSZWFkZXIocmVhZGVyKSB7CiAgICBjb25zdCBpID0gdGhpcy5fcmFuZ2VSZWFkZXJzLmluZGV4T2YocmVhZGVyKTsKICAgIGlmIChpID49IDApIHsKICAgICAgdGhpcy5fcmFuZ2VSZWFkZXJzLnNwbGljZShpLCAxKTsKICAgIH0KICB9CiAgZ2V0RnVsbFJlYWRlcigpIHsKICAgIGFzc2VydCghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsICJQREZEYXRhVHJhbnNwb3J0U3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIik7CiAgICBjb25zdCBxdWV1ZWRDaHVua3MgPSB0aGlzLl9xdWV1ZWRDaHVua3M7CiAgICB0aGlzLl9xdWV1ZWRDaHVua3MgPSBudWxsOwogICAgcmV0dXJuIG5ldyBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmVhZGVyKHRoaXMsIHF1ZXVlZENodW5rcywgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lLCB0aGlzLl9jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSk7CiAgfQogIGdldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHsKICAgIGlmIChlbmQgPD0gdGhpcy5fcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgcmVhZGVyID0gbmV3IFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlcih0aGlzLCBiZWdpbiwgZW5kKTsKICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlKGJlZ2luLCBlbmQpOwogICAgdGhpcy5fcmFuZ2VSZWFkZXJzLnB1c2gocmVhZGVyKTsKICAgIHJldHVybiByZWFkZXI7CiAgfQogIGNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbikgewogICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/LmNhbmNlbChyZWFzb24pOwogICAgZm9yIChjb25zdCByZWFkZXIgb2YgdGhpcy5fcmFuZ2VSZWFkZXJzLnNsaWNlKDApKSB7CiAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTsKICAgIH0KICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpOwogIH0KfQpjbGFzcyBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmVhZGVyIHsKICBjb25zdHJ1Y3RvcihzdHJlYW0sIHF1ZXVlZENodW5rcywgcHJvZ3Jlc3NpdmVEb25lID0gZmFsc2UsIGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lID0gbnVsbCkgewogICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtOwogICAgdGhpcy5fZG9uZSA9IHByb2dyZXNzaXZlRG9uZSB8fCBmYWxzZTsKICAgIHRoaXMuX2ZpbGVuYW1lID0gaXNQZGZGaWxlKGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lKSA/IGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lIDogbnVsbDsKICAgIHRoaXMuX3F1ZXVlZENodW5rcyA9IHF1ZXVlZENodW5rcyB8fCBbXTsKICAgIHRoaXMuX2xvYWRlZCA9IDA7CiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIHRoaXMuX3F1ZXVlZENodW5rcykgewogICAgICB0aGlzLl9sb2FkZWQgKz0gY2h1bmsuYnl0ZUxlbmd0aDsKICAgIH0KICAgIHRoaXMuX3JlcXVlc3RzID0gW107CiAgICB0aGlzLl9oZWFkZXJzUmVhZHkgPSBQcm9taXNlLnJlc29sdmUoKTsKICAgIHN0cmVhbS5fZnVsbFJlcXVlc3RSZWFkZXIgPSB0aGlzOwogICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDsKICB9CiAgX2VucXVldWUoY2h1bmspIHsKICAgIGlmICh0aGlzLl9kb25lKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPiAwKSB7CiAgICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gdGhpcy5fcmVxdWVzdHMuc2hpZnQoKTsKICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7CiAgICAgICAgdmFsdWU6IGNodW5rLAogICAgICAgIGRvbmU6IGZhbHNlCiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2goY2h1bmspOwogICAgfQogICAgdGhpcy5fbG9hZGVkICs9IGNodW5rLmJ5dGVMZW5ndGg7CiAgfQogIGdldCBoZWFkZXJzUmVhZHkoKSB7CiAgICByZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5OwogIH0KICBnZXQgZmlsZW5hbWUoKSB7CiAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7CiAgfQogIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkgewogICAgcmV0dXJuIHRoaXMuX3N0cmVhbS5faXNSYW5nZVN1cHBvcnRlZDsKICB9CiAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkgewogICAgcmV0dXJuIHRoaXMuX3N0cmVhbS5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7CiAgfQogIGdldCBjb250ZW50TGVuZ3RoKCkgewogICAgcmV0dXJuIHRoaXMuX3N0cmVhbS5fY29udGVudExlbmd0aDsKICB9CiAgYXN5bmMgcmVhZCgpIHsKICAgIGlmICh0aGlzLl9xdWV1ZWRDaHVua3MubGVuZ3RoID4gMCkgewogICAgICBjb25zdCBjaHVuayA9IHRoaXMuX3F1ZXVlZENodW5rcy5zaGlmdCgpOwogICAgICByZXR1cm4gewogICAgICAgIHZhbHVlOiBjaHVuaywKICAgICAgICBkb25lOiBmYWxzZQogICAgICB9OwogICAgfQogICAgaWYgKHRoaXMuX2RvbmUpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLAogICAgICAgIGRvbmU6IHRydWUKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHJlcXVlc3RDYXBhYmlsaXR5KTsKICAgIHJldHVybiByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlOwogIH0KICBjYW5jZWwocmVhc29uKSB7CiAgICB0aGlzLl9kb25lID0gdHJ1ZTsKICAgIGZvciAoY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgb2YgdGhpcy5fcmVxdWVzdHMpIHsKICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7CiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCwKICAgICAgICBkb25lOiB0cnVlCiAgICAgIH0pOwogICAgfQogICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDsKICB9CiAgcHJvZ3Jlc3NpdmVEb25lKCkgewogICAgaWYgKHRoaXMuX2RvbmUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5fZG9uZSA9IHRydWU7CiAgfQp9CmNsYXNzIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlciB7CiAgY29uc3RydWN0b3Ioc3RyZWFtLCBiZWdpbiwgZW5kKSB7CiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07CiAgICB0aGlzLl9iZWdpbiA9IGJlZ2luOwogICAgdGhpcy5fZW5kID0gZW5kOwogICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBudWxsOwogICAgdGhpcy5fcmVxdWVzdHMgPSBbXTsKICAgIHRoaXMuX2RvbmUgPSBmYWxzZTsKICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7CiAgfQogIF9lbnF1ZXVlKGNodW5rKSB7CiAgICBpZiAodGhpcy5fZG9uZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGhpcy5fcmVxdWVzdHMubGVuZ3RoID09PSAwKSB7CiAgICAgIHRoaXMuX3F1ZXVlZENodW5rID0gY2h1bms7CiAgICB9IGVsc2UgewogICAgICBjb25zdCByZXF1ZXN0c0NhcGFiaWxpdHkgPSB0aGlzLl9yZXF1ZXN0cy5zaGlmdCgpOwogICAgICByZXF1ZXN0c0NhcGFiaWxpdHkucmVzb2x2ZSh7CiAgICAgICAgdmFsdWU6IGNodW5rLAogICAgICAgIGRvbmU6IGZhbHNlCiAgICAgIH0pOwogICAgICBmb3IgKGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5IG9mIHRoaXMuX3JlcXVlc3RzKSB7CiAgICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7CiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLAogICAgICAgICAgZG9uZTogdHJ1ZQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7CiAgICB9CiAgICB0aGlzLl9kb25lID0gdHJ1ZTsKICAgIHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcyk7CiAgfQogIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgYXN5bmMgcmVhZCgpIHsKICAgIGlmICh0aGlzLl9xdWV1ZWRDaHVuaykgewogICAgICBjb25zdCBjaHVuayA9IHRoaXMuX3F1ZXVlZENodW5rOwogICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7CiAgICAgIHJldHVybiB7CiAgICAgICAgdmFsdWU6IGNodW5rLAogICAgICAgIGRvbmU6IGZhbHNlCiAgICAgIH07CiAgICB9CiAgICBpZiAodGhpcy5fZG9uZSkgewogICAgICByZXR1cm4gewogICAgICAgIHZhbHVlOiB1bmRlZmluZWQsCiAgICAgICAgZG9uZTogdHJ1ZQogICAgICB9OwogICAgfQogICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTsKICAgIHRoaXMuX3JlcXVlc3RzLnB1c2gocmVxdWVzdENhcGFiaWxpdHkpOwogICAgcmV0dXJuIHJlcXVlc3RDYXBhYmlsaXR5LnByb21pc2U7CiAgfQogIGNhbmNlbChyZWFzb24pIHsKICAgIHRoaXMuX2RvbmUgPSB0cnVlOwogICAgZm9yIChjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSBvZiB0aGlzLl9yZXF1ZXN0cykgewogICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHsKICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLAogICAgICAgIGRvbmU6IHRydWUKICAgICAgfSk7CiAgICB9CiAgICB0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPSAwOwogICAgdGhpcy5fc3RyZWFtLl9yZW1vdmVSYW5nZVJlYWRlcih0aGlzKTsKICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L2NvbnRlbnRfZGlzcG9zaXRpb24uanMKCmZ1bmN0aW9uIGdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcihjb250ZW50RGlzcG9zaXRpb24pIHsKICBsZXQgbmVlZHNFbmNvZGluZ0ZpeHVwID0gdHJ1ZTsKICBsZXQgdG1wID0gdG9QYXJhbVJlZ0V4cCgiZmlsZW5hbWVcXCoiLCAiaSIpLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKTsKICBpZiAodG1wKSB7CiAgICB0bXAgPSB0bXBbMV07CiAgICBsZXQgZmlsZW5hbWUgPSByZmMyNjE2dW5xdW90ZSh0bXApOwogICAgZmlsZW5hbWUgPSB1bmVzY2FwZShmaWxlbmFtZSk7CiAgICBmaWxlbmFtZSA9IHJmYzU5ODdkZWNvZGUoZmlsZW5hbWUpOwogICAgZmlsZW5hbWUgPSByZmMyMDQ3ZGVjb2RlKGZpbGVuYW1lKTsKICAgIHJldHVybiBmaXh1cEVuY29kaW5nKGZpbGVuYW1lKTsKICB9CiAgdG1wID0gcmZjMjIzMWdldHBhcmFtKGNvbnRlbnREaXNwb3NpdGlvbik7CiAgaWYgKHRtcCkgewogICAgY29uc3QgZmlsZW5hbWUgPSByZmMyMDQ3ZGVjb2RlKHRtcCk7CiAgICByZXR1cm4gZml4dXBFbmNvZGluZyhmaWxlbmFtZSk7CiAgfQogIHRtcCA9IHRvUGFyYW1SZWdFeHAoImZpbGVuYW1lIiwgImkiKS5leGVjKGNvbnRlbnREaXNwb3NpdGlvbik7CiAgaWYgKHRtcCkgewogICAgdG1wID0gdG1wWzFdOwogICAgbGV0IGZpbGVuYW1lID0gcmZjMjYxNnVucXVvdGUodG1wKTsKICAgIGZpbGVuYW1lID0gcmZjMjA0N2RlY29kZShmaWxlbmFtZSk7CiAgICByZXR1cm4gZml4dXBFbmNvZGluZyhmaWxlbmFtZSk7CiAgfQogIGZ1bmN0aW9uIHRvUGFyYW1SZWdFeHAoYXR0cmlidXRlUGF0dGVybiwgZmxhZ3MpIHsKICAgIHJldHVybiBuZXcgUmVnRXhwKCIoPzpefDspXFxzKiIgKyBhdHRyaWJ1dGVQYXR0ZXJuICsgIlxccyo9XFxzKiIgKyAiKCIgKyAnW14iO1xcc11bXjtcXHNdKicgKyAifCIgKyAnIig/OlteIlxcXFxdfFxcXFwiPykrIj8nICsgIikiLCBmbGFncyk7CiAgfQogIGZ1bmN0aW9uIHRleHRkZWNvZGUoZW5jb2RpbmcsIHZhbHVlKSB7CiAgICBpZiAoZW5jb2RpbmcpIHsKICAgICAgaWYgKCEvXltceDAwLVx4RkZdKyQvLnRlc3QodmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZywgewogICAgICAgICAgZmF0YWw6IHRydWUKICAgICAgICB9KTsKICAgICAgICBjb25zdCBidWZmZXIgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTsKICAgICAgICB2YWx1ZSA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlcik7CiAgICAgICAgbmVlZHNFbmNvZGluZ0ZpeHVwID0gZmFsc2U7CiAgICAgIH0gY2F0Y2gge30KICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CiAgZnVuY3Rpb24gZml4dXBFbmNvZGluZyh2YWx1ZSkgewogICAgaWYgKG5lZWRzRW5jb2RpbmdGaXh1cCAmJiAvW1x4ODAtXHhmZl0vLnRlc3QodmFsdWUpKSB7CiAgICAgIHZhbHVlID0gdGV4dGRlY29kZSgidXRmLTgiLCB2YWx1ZSk7CiAgICAgIGlmIChuZWVkc0VuY29kaW5nRml4dXApIHsKICAgICAgICB2YWx1ZSA9IHRleHRkZWNvZGUoImlzby04ODU5LTEiLCB2YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CiAgZnVuY3Rpb24gcmZjMjIzMWdldHBhcmFtKGNvbnRlbnREaXNwb3NpdGlvblN0cikgewogICAgY29uc3QgbWF0Y2hlcyA9IFtdOwogICAgbGV0IG1hdGNoOwogICAgY29uc3QgaXRlciA9IHRvUGFyYW1SZWdFeHAoImZpbGVuYW1lXFwqKCg/ITBcXGQpXFxkKykoXFwqPykiLCAiaWciKTsKICAgIHdoaWxlICgobWF0Y2ggPSBpdGVyLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uU3RyKSkgIT09IG51bGwpIHsKICAgICAgbGV0IFssIG4sIHF1b3QsIHBhcnRdID0gbWF0Y2g7CiAgICAgIG4gPSBwYXJzZUludChuLCAxMCk7CiAgICAgIGlmIChuIGluIG1hdGNoZXMpIHsKICAgICAgICBpZiAobiA9PT0gMCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIG1hdGNoZXNbbl0gPSBbcXVvdCwgcGFydF07CiAgICB9CiAgICBjb25zdCBwYXJ0cyA9IFtdOwogICAgZm9yIChsZXQgbiA9IDA7IG4gPCBtYXRjaGVzLmxlbmd0aDsgKytuKSB7CiAgICAgIGlmICghKG4gaW4gbWF0Y2hlcykpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBsZXQgW3F1b3QsIHBhcnRdID0gbWF0Y2hlc1tuXTsKICAgICAgcGFydCA9IHJmYzI2MTZ1bnF1b3RlKHBhcnQpOwogICAgICBpZiAocXVvdCkgewogICAgICAgIHBhcnQgPSB1bmVzY2FwZShwYXJ0KTsKICAgICAgICBpZiAobiA9PT0gMCkgewogICAgICAgICAgcGFydCA9IHJmYzU5ODdkZWNvZGUocGFydCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHBhcnRzLnB1c2gocGFydCk7CiAgICB9CiAgICByZXR1cm4gcGFydHMuam9pbigiIik7CiAgfQogIGZ1bmN0aW9uIHJmYzI2MTZ1bnF1b3RlKHZhbHVlKSB7CiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnIicpKSB7CiAgICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc2xpY2UoMSkuc3BsaXQoJ1xcIicpOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgY29uc3QgcXVvdGluZGV4ID0gcGFydHNbaV0uaW5kZXhPZignIicpOwogICAgICAgIGlmIChxdW90aW5kZXggIT09IC0xKSB7CiAgICAgICAgICBwYXJ0c1tpXSA9IHBhcnRzW2ldLnNsaWNlKDAsIHF1b3RpbmRleCk7CiAgICAgICAgICBwYXJ0cy5sZW5ndGggPSBpICsgMTsKICAgICAgICB9CiAgICAgICAgcGFydHNbaV0gPSBwYXJ0c1tpXS5yZXBsYWNlQWxsKC9cXCguKS9nLCAiJDEiKTsKICAgICAgfQogICAgICB2YWx1ZSA9IHBhcnRzLmpvaW4oJyInKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CiAgZnVuY3Rpb24gcmZjNTk4N2RlY29kZShleHR2YWx1ZSkgewogICAgY29uc3QgZW5jb2RpbmdlbmQgPSBleHR2YWx1ZS5pbmRleE9mKCInIik7CiAgICBpZiAoZW5jb2RpbmdlbmQgPT09IC0xKSB7CiAgICAgIHJldHVybiBleHR2YWx1ZTsKICAgIH0KICAgIGNvbnN0IGVuY29kaW5nID0gZXh0dmFsdWUuc2xpY2UoMCwgZW5jb2RpbmdlbmQpOwogICAgY29uc3QgbGFuZ3ZhbHVlID0gZXh0dmFsdWUuc2xpY2UoZW5jb2RpbmdlbmQgKyAxKTsKICAgIGNvbnN0IHZhbHVlID0gbGFuZ3ZhbHVlLnJlcGxhY2UoL15bXiddKicvLCAiIik7CiAgICByZXR1cm4gdGV4dGRlY29kZShlbmNvZGluZywgdmFsdWUpOwogIH0KICBmdW5jdGlvbiByZmMyMDQ3ZGVjb2RlKHZhbHVlKSB7CiAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoIj0/IikgfHwgL1tceDAwLVx4MTlceDgwLVx4ZmZdLy50ZXN0KHZhbHVlKSkgewogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gdmFsdWUucmVwbGFjZUFsbCgvPVw/KFtcdy1dKilcPyhbUXFCYl0pXD8oKD86W14/XXxcPyg/IT0pKSopXD89L2csIGZ1bmN0aW9uIChtYXRjaGVzLCBjaGFyc2V0LCBlbmNvZGluZywgdGV4dCkgewogICAgICBpZiAoZW5jb2RpbmcgPT09ICJxIiB8fCBlbmNvZGluZyA9PT0gIlEiKSB7CiAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZUFsbCgiXyIsICIgIik7CiAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZUFsbCgvPShbMC05YS1mQS1GXXsyfSkvZywgZnVuY3Rpb24gKG1hdGNoLCBoZXgpIHsKICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGhleCwgMTYpKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdGV4dGRlY29kZShjaGFyc2V0LCB0ZXh0KTsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIHRleHQgPSBhdG9iKHRleHQpOwogICAgICB9IGNhdGNoIHt9CiAgICAgIHJldHVybiB0ZXh0ZGVjb2RlKGNoYXJzZXQsIHRleHQpOwogICAgfSk7CiAgfQogIHJldHVybiAiIjsKfQoKOy8vIC4vc3JjL2Rpc3BsYXkvbmV0d29ya191dGlscy5qcwoKCgpmdW5jdGlvbiBjcmVhdGVIZWFkZXJzKGlzSHR0cCwgaHR0cEhlYWRlcnMpIHsKICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTsKICBpZiAoIWlzSHR0cCB8fCAhaHR0cEhlYWRlcnMgfHwgdHlwZW9mIGh0dHBIZWFkZXJzICE9PSAib2JqZWN0IikgewogICAgcmV0dXJuIGhlYWRlcnM7CiAgfQogIGZvciAoY29uc3Qga2V5IGluIGh0dHBIZWFkZXJzKSB7CiAgICBjb25zdCB2YWwgPSBodHRwSGVhZGVyc1trZXldOwogICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsKTsKICAgIH0KICB9CiAgcmV0dXJuIGhlYWRlcnM7Cn0KZnVuY3Rpb24gZ2V0UmVzcG9uc2VPcmlnaW4odXJsKSB7CiAgcmV0dXJuIFVSTC5wYXJzZSh1cmwpPy5vcmlnaW4gPz8gbnVsbDsKfQpmdW5jdGlvbiB2YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcyh7CiAgcmVzcG9uc2VIZWFkZXJzLAogIGlzSHR0cCwKICByYW5nZUNodW5rU2l6ZSwKICBkaXNhYmxlUmFuZ2UKfSkgewogIGNvbnN0IHJldHVyblZhbHVlcyA9IHsKICAgIGFsbG93UmFuZ2VSZXF1ZXN0czogZmFsc2UsCiAgICBzdWdnZXN0ZWRMZW5ndGg6IHVuZGVmaW5lZAogIH07CiAgY29uc3QgbGVuZ3RoID0gcGFyc2VJbnQocmVzcG9uc2VIZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSwgMTApOwogIGlmICghTnVtYmVyLmlzSW50ZWdlcihsZW5ndGgpKSB7CiAgICByZXR1cm4gcmV0dXJuVmFsdWVzOwogIH0KICByZXR1cm5WYWx1ZXMuc3VnZ2VzdGVkTGVuZ3RoID0gbGVuZ3RoOwogIGlmIChsZW5ndGggPD0gMiAqIHJhbmdlQ2h1bmtTaXplKSB7CiAgICByZXR1cm4gcmV0dXJuVmFsdWVzOwogIH0KICBpZiAoZGlzYWJsZVJhbmdlIHx8ICFpc0h0dHApIHsKICAgIHJldHVybiByZXR1cm5WYWx1ZXM7CiAgfQogIGlmIChyZXNwb25zZUhlYWRlcnMuZ2V0KCJBY2NlcHQtUmFuZ2VzIikgIT09ICJieXRlcyIpIHsKICAgIHJldHVybiByZXR1cm5WYWx1ZXM7CiAgfQogIGNvbnN0IGNvbnRlbnRFbmNvZGluZyA9IHJlc3BvbnNlSGVhZGVycy5nZXQoIkNvbnRlbnQtRW5jb2RpbmciKSB8fCAiaWRlbnRpdHkiOwogIGlmIChjb250ZW50RW5jb2RpbmcgIT09ICJpZGVudGl0eSIpIHsKICAgIHJldHVybiByZXR1cm5WYWx1ZXM7CiAgfQogIHJldHVyblZhbHVlcy5hbGxvd1JhbmdlUmVxdWVzdHMgPSB0cnVlOwogIHJldHVybiByZXR1cm5WYWx1ZXM7Cn0KZnVuY3Rpb24gZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcihyZXNwb25zZUhlYWRlcnMpIHsKICBjb25zdCBjb250ZW50RGlzcG9zaXRpb24gPSByZXNwb25zZUhlYWRlcnMuZ2V0KCJDb250ZW50LURpc3Bvc2l0aW9uIik7CiAgaWYgKGNvbnRlbnREaXNwb3NpdGlvbikgewogICAgbGV0IGZpbGVuYW1lID0gZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyKGNvbnRlbnREaXNwb3NpdGlvbik7CiAgICBpZiAoZmlsZW5hbWUuaW5jbHVkZXMoIiUiKSkgewogICAgICB0cnkgewogICAgICAgIGZpbGVuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGVuYW1lKTsKICAgICAgfSBjYXRjaCB7fQogICAgfQogICAgaWYgKGlzUGRmRmlsZShmaWxlbmFtZSkpIHsKICAgICAgcmV0dXJuIGZpbGVuYW1lOwogICAgfQogIH0KICByZXR1cm4gbnVsbDsKfQpmdW5jdGlvbiBjcmVhdGVSZXNwb25zZUVycm9yKHN0YXR1cywgdXJsKSB7CiAgcmV0dXJuIG5ldyBSZXNwb25zZUV4Y2VwdGlvbihgVW5leHBlY3RlZCBzZXJ2ZXIgcmVzcG9uc2UgKCR7c3RhdHVzfSkgd2hpbGUgcmV0cmlldmluZyBQREYgIiR7dXJsfSIuYCwgc3RhdHVzLCBzdGF0dXMgPT09IDQwNCB8fCBzdGF0dXMgPT09IDAgJiYgdXJsLnN0YXJ0c1dpdGgoImZpbGU6IikpOwp9CmZ1bmN0aW9uIHZhbGlkYXRlUmVzcG9uc2VTdGF0dXMoc3RhdHVzKSB7CiAgcmV0dXJuIHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA2Owp9Cgo7Ly8gLi9zcmMvZGlzcGxheS9mZXRjaF9zdHJlYW0uanMKCgpmdW5jdGlvbiBjcmVhdGVGZXRjaE9wdGlvbnMoaGVhZGVycywgd2l0aENyZWRlbnRpYWxzLCBhYm9ydENvbnRyb2xsZXIpIHsKICByZXR1cm4gewogICAgbWV0aG9kOiAiR0VUIiwKICAgIGhlYWRlcnMsCiAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsCiAgICBtb2RlOiAiY29ycyIsCiAgICBjcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzID8gImluY2x1ZGUiIDogInNhbWUtb3JpZ2luIiwKICAgIHJlZGlyZWN0OiAiZm9sbG93IgogIH07Cn0KZnVuY3Rpb24gZ2V0QXJyYXlCdWZmZXIodmFsKSB7CiAgaWYgKHZhbCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgIHJldHVybiB2YWwuYnVmZmVyOwogIH0KICBpZiAodmFsIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHsKICAgIHJldHVybiB2YWw7CiAgfQogIHdhcm4oYGdldEFycmF5QnVmZmVyIC0gdW5leHBlY3RlZCBkYXRhIGZvcm1hdDogJHt2YWx9YCk7CiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbCkuYnVmZmVyOwp9CmNsYXNzIFBERkZldGNoU3RyZWFtIHsKICBfcmVzcG9uc2VPcmlnaW4gPSBudWxsOwogIGNvbnN0cnVjdG9yKHNvdXJjZSkgewogICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7CiAgICB0aGlzLmlzSHR0cCA9IC9eaHR0cHM/Oi9pLnRlc3Qoc291cmNlLnVybCk7CiAgICB0aGlzLmhlYWRlcnMgPSBjcmVhdGVIZWFkZXJzKHRoaXMuaXNIdHRwLCBzb3VyY2UuaHR0cEhlYWRlcnMpOwogICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsOwogICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycyA9IFtdOwogIH0KICBnZXQgX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCgpIHsKICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj8uX2xvYWRlZCA/PyAwOwogIH0KICBnZXRGdWxsUmVhZGVyKCkgewogICAgYXNzZXJ0KCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwgIlBERkZldGNoU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIik7CiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG5ldyBQREZGZXRjaFN0cmVhbVJlYWRlcih0aGlzKTsKICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcjsKICB9CiAgZ2V0UmFuZ2VSZWFkZXIoYmVnaW4sIGVuZCkgewogICAgaWYgKGVuZCA8PSB0aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCByZWFkZXIgPSBuZXcgUERGRmV0Y2hTdHJlYW1SYW5nZVJlYWRlcih0aGlzLCBiZWdpbiwgZW5kKTsKICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyZWFkZXIpOwogICAgcmV0dXJuIHJlYWRlcjsKICB9CiAgY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKSB7CiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj8uY2FuY2VsKHJlYXNvbik7CiAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKSB7CiAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTsKICAgIH0KICB9Cn0KY2xhc3MgUERGRmV0Y2hTdHJlYW1SZWFkZXIgewogIGNvbnN0cnVjdG9yKHN0cmVhbSkgewogICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtOwogICAgdGhpcy5fcmVhZGVyID0gbnVsbDsKICAgIHRoaXMuX2xvYWRlZCA9IDA7CiAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7CiAgICBjb25zdCBzb3VyY2UgPSBzdHJlYW0uc291cmNlOwogICAgdGhpcy5fd2l0aENyZWRlbnRpYWxzID0gc291cmNlLndpdGhDcmVkZW50aWFscyB8fCBmYWxzZTsKICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzb3VyY2UubGVuZ3RoOwogICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTsKICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHNvdXJjZS5kaXNhYmxlUmFuZ2UgfHwgZmFsc2U7CiAgICB0aGlzLl9yYW5nZUNodW5rU2l6ZSA9IHNvdXJjZS5yYW5nZUNodW5rU2l6ZTsKICAgIGlmICghdGhpcy5fcmFuZ2VDaHVua1NpemUgJiYgIXRoaXMuX2Rpc2FibGVSYW5nZSkgewogICAgICB0aGlzLl9kaXNhYmxlUmFuZ2UgPSB0cnVlOwogICAgfQogICAgdGhpcy5fYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSAhc291cmNlLmRpc2FibGVTdHJlYW07CiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlUmFuZ2U7CiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoc3RyZWFtLmhlYWRlcnMpOwogICAgY29uc3QgdXJsID0gc291cmNlLnVybDsKICAgIGZldGNoKHVybCwgY3JlYXRlRmV0Y2hPcHRpb25zKGhlYWRlcnMsIHRoaXMuX3dpdGhDcmVkZW50aWFscywgdGhpcy5fYWJvcnRDb250cm9sbGVyKSkudGhlbihyZXNwb25zZSA9PiB7CiAgICAgIHN0cmVhbS5fcmVzcG9uc2VPcmlnaW4gPSBnZXRSZXNwb25zZU9yaWdpbihyZXNwb25zZS51cmwpOwogICAgICBpZiAoIXZhbGlkYXRlUmVzcG9uc2VTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkgewogICAgICAgIHRocm93IGNyZWF0ZVJlc3BvbnNlRXJyb3IocmVzcG9uc2Uuc3RhdHVzLCB1cmwpOwogICAgICB9CiAgICAgIHRoaXMuX3JlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7CiAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKTsKICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2UuaGVhZGVyczsKICAgICAgY29uc3QgewogICAgICAgIGFsbG93UmFuZ2VSZXF1ZXN0cywKICAgICAgICBzdWdnZXN0ZWRMZW5ndGgKICAgICAgfSA9IHZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzKHsKICAgICAgICByZXNwb25zZUhlYWRlcnMsCiAgICAgICAgaXNIdHRwOiBzdHJlYW0uaXNIdHRwLAogICAgICAgIHJhbmdlQ2h1bmtTaXplOiB0aGlzLl9yYW5nZUNodW5rU2l6ZSwKICAgICAgICBkaXNhYmxlUmFuZ2U6IHRoaXMuX2Rpc2FibGVSYW5nZQogICAgICB9KTsKICAgICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9IGFsbG93UmFuZ2VSZXF1ZXN0czsKICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHN1Z2dlc3RlZExlbmd0aCB8fCB0aGlzLl9jb250ZW50TGVuZ3RoOwogICAgICB0aGlzLl9maWxlbmFtZSA9IGV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIocmVzcG9uc2VIZWFkZXJzKTsKICAgICAgaWYgKCF0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCAmJiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkKSB7CiAgICAgICAgdGhpcy5jYW5jZWwobmV3IEFib3J0RXhjZXB0aW9uKCJTdHJlYW1pbmcgaXMgZGlzYWJsZWQuIikpOwogICAgICB9CiAgICB9KS5jYXRjaCh0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QpOwogICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDsKICB9CiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHsKICAgIHJldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlOwogIH0KICBnZXQgZmlsZW5hbWUoKSB7CiAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7CiAgfQogIGdldCBjb250ZW50TGVuZ3RoKCkgewogICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7CiAgfQogIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkgewogICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7CiAgfQogIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHsKICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDsKICB9CiAgYXN5bmMgcmVhZCgpIHsKICAgIGF3YWl0IHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnByb21pc2U7CiAgICBjb25zdCB7CiAgICAgIHZhbHVlLAogICAgICBkb25lCiAgICB9ID0gYXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTsKICAgIGlmIChkb25lKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdmFsdWUsCiAgICAgICAgZG9uZQogICAgICB9OwogICAgfQogICAgdGhpcy5fbG9hZGVkICs9IHZhbHVlLmJ5dGVMZW5ndGg7CiAgICB0aGlzLm9uUHJvZ3Jlc3M/Lih7CiAgICAgIGxvYWRlZDogdGhpcy5fbG9hZGVkLAogICAgICB0b3RhbDogdGhpcy5fY29udGVudExlbmd0aAogICAgfSk7CiAgICByZXR1cm4gewogICAgICB2YWx1ZTogZ2V0QXJyYXlCdWZmZXIodmFsdWUpLAogICAgICBkb25lOiBmYWxzZQogICAgfTsKICB9CiAgY2FuY2VsKHJlYXNvbikgewogICAgdGhpcy5fcmVhZGVyPy5jYW5jZWwocmVhc29uKTsKICAgIHRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpOwogIH0KfQpjbGFzcyBQREZGZXRjaFN0cmVhbVJhbmdlUmVhZGVyIHsKICBjb25zdHJ1Y3RvcihzdHJlYW0sIGJlZ2luLCBlbmQpIHsKICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTsKICAgIHRoaXMuX3JlYWRlciA9IG51bGw7CiAgICB0aGlzLl9sb2FkZWQgPSAwOwogICAgY29uc3Qgc291cmNlID0gc3RyZWFtLnNvdXJjZTsKICAgIHRoaXMuX3dpdGhDcmVkZW50aWFscyA9IHNvdXJjZS53aXRoQ3JlZGVudGlhbHMgfHwgZmFsc2U7CiAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSAhc291cmNlLmRpc2FibGVTdHJlYW07CiAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoc3RyZWFtLmhlYWRlcnMpOwogICAgaGVhZGVycy5hcHBlbmQoIlJhbmdlIiwgYGJ5dGVzPSR7YmVnaW59LSR7ZW5kIC0gMX1gKTsKICAgIGNvbnN0IHVybCA9IHNvdXJjZS51cmw7CiAgICBmZXRjaCh1cmwsIGNyZWF0ZUZldGNoT3B0aW9ucyhoZWFkZXJzLCB0aGlzLl93aXRoQ3JlZGVudGlhbHMsIHRoaXMuX2Fib3J0Q29udHJvbGxlcikpLnRoZW4ocmVzcG9uc2UgPT4gewogICAgICBjb25zdCByZXNwb25zZU9yaWdpbiA9IGdldFJlc3BvbnNlT3JpZ2luKHJlc3BvbnNlLnVybCk7CiAgICAgIGlmIChyZXNwb25zZU9yaWdpbiAhPT0gc3RyZWFtLl9yZXNwb25zZU9yaWdpbikgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcmFuZ2UgcmVzcG9uc2Utb3JpZ2luICIke3Jlc3BvbnNlT3JpZ2lufSIgdG8gbWF0Y2ggIiR7c3RyZWFtLl9yZXNwb25zZU9yaWdpbn0iLmApOwogICAgICB9CiAgICAgIGlmICghdmFsaWRhdGVSZXNwb25zZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7CiAgICAgICAgdGhyb3cgY3JlYXRlUmVzcG9uc2VFcnJvcihyZXNwb25zZS5zdGF0dXMsIHVybCk7CiAgICAgIH0KICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpOwogICAgICB0aGlzLl9yZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpOwogICAgfSkuY2F0Y2godGhpcy5fcmVhZENhcGFiaWxpdHkucmVqZWN0KTsKICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7CiAgfQogIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHsKICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDsKICB9CiAgYXN5bmMgcmVhZCgpIHsKICAgIGF3YWl0IHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7CiAgICBjb25zdCB7CiAgICAgIHZhbHVlLAogICAgICBkb25lCiAgICB9ID0gYXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTsKICAgIGlmIChkb25lKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdmFsdWUsCiAgICAgICAgZG9uZQogICAgICB9OwogICAgfQogICAgdGhpcy5fbG9hZGVkICs9IHZhbHVlLmJ5dGVMZW5ndGg7CiAgICB0aGlzLm9uUHJvZ3Jlc3M/Lih7CiAgICAgIGxvYWRlZDogdGhpcy5fbG9hZGVkCiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIHZhbHVlOiBnZXRBcnJheUJ1ZmZlcih2YWx1ZSksCiAgICAgIGRvbmU6IGZhbHNlCiAgICB9OwogIH0KICBjYW5jZWwocmVhc29uKSB7CiAgICB0aGlzLl9yZWFkZXI/LmNhbmNlbChyZWFzb24pOwogICAgdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCk7CiAgfQp9Cgo7Ly8gLi9zcmMvZGlzcGxheS9uZXR3b3JrLmpzCgoKY29uc3QgT0tfUkVTUE9OU0UgPSAyMDA7CmNvbnN0IFBBUlRJQUxfQ09OVEVOVF9SRVNQT05TRSA9IDIwNjsKZnVuY3Rpb24gbmV0d29ya19nZXRBcnJheUJ1ZmZlcih4aHIpIHsKICBjb25zdCBkYXRhID0geGhyLnJlc3BvbnNlOwogIGlmICh0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIpIHsKICAgIHJldHVybiBkYXRhOwogIH0KICByZXR1cm4gc3RyaW5nVG9CeXRlcyhkYXRhKS5idWZmZXI7Cn0KY2xhc3MgTmV0d29ya01hbmFnZXIgewogIF9yZXNwb25zZU9yaWdpbiA9IG51bGw7CiAgY29uc3RydWN0b3IoewogICAgdXJsLAogICAgaHR0cEhlYWRlcnMsCiAgICB3aXRoQ3JlZGVudGlhbHMKICB9KSB7CiAgICB0aGlzLnVybCA9IHVybDsKICAgIHRoaXMuaXNIdHRwID0gL15odHRwcz86L2kudGVzdCh1cmwpOwogICAgdGhpcy5oZWFkZXJzID0gY3JlYXRlSGVhZGVycyh0aGlzLmlzSHR0cCwgaHR0cEhlYWRlcnMpOwogICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHMgfHwgZmFsc2U7CiAgICB0aGlzLmN1cnJYaHJJZCA9IDA7CiAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgfQogIHJlcXVlc3QoYXJncykgewogICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICBjb25zdCB4aHJJZCA9IHRoaXMuY3VyclhocklkKys7CiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXSA9IHsKICAgICAgeGhyCiAgICB9OwogICAgeGhyLm9wZW4oIkdFVCIsIHRoaXMudXJsKTsKICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFsczsKICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzLmhlYWRlcnMpIHsKICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpOwogICAgfQogICAgaWYgKHRoaXMuaXNIdHRwICYmICJiZWdpbiIgaW4gYXJncyAmJiAiZW5kIiBpbiBhcmdzKSB7CiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsIGBieXRlcz0ke2FyZ3MuYmVnaW59LSR7YXJncy5lbmQgLSAxfWApOwogICAgICBwZW5kaW5nUmVxdWVzdC5leHBlY3RlZFN0YXR1cyA9IFBBUlRJQUxfQ09OVEVOVF9SRVNQT05TRTsKICAgIH0gZWxzZSB7CiAgICAgIHBlbmRpbmdSZXF1ZXN0LmV4cGVjdGVkU3RhdHVzID0gT0tfUkVTUE9OU0U7CiAgICB9CiAgICB4aHIucmVzcG9uc2VUeXBlID0gImFycmF5YnVmZmVyIjsKICAgIGFzc2VydChhcmdzLm9uRXJyb3IsICJFeHBlY3RlZCBgb25FcnJvcmAgY2FsbGJhY2sgdG8gYmUgcHJvdmlkZWQuIik7CiAgICB4aHIub25lcnJvciA9ICgpID0+IHsKICAgICAgYXJncy5vbkVycm9yKHhoci5zdGF0dXMpOwogICAgfTsKICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzLCB4aHJJZCk7CiAgICB4aHIub25wcm9ncmVzcyA9IHRoaXMub25Qcm9ncmVzcy5iaW5kKHRoaXMsIHhocklkKTsKICAgIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkID0gYXJncy5vbkhlYWRlcnNSZWNlaXZlZDsKICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRG9uZSA9IGFyZ3Mub25Eb25lOwogICAgcGVuZGluZ1JlcXVlc3Qub25FcnJvciA9IGFyZ3Mub25FcnJvcjsKICAgIHBlbmRpbmdSZXF1ZXN0Lm9uUHJvZ3Jlc3MgPSBhcmdzLm9uUHJvZ3Jlc3M7CiAgICB4aHIuc2VuZChudWxsKTsKICAgIHJldHVybiB4aHJJZDsKICB9CiAgb25Qcm9ncmVzcyh4aHJJZCwgZXZ0KSB7CiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXTsKICAgIGlmICghcGVuZGluZ1JlcXVlc3QpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgcGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzcz8uKGV2dCk7CiAgfQogIG9uU3RhdGVDaGFuZ2UoeGhySWQsIGV2dCkgewogICAgY29uc3QgcGVuZGluZ1JlcXVlc3QgPSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t4aHJJZF07CiAgICBpZiAoIXBlbmRpbmdSZXF1ZXN0KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHhociA9IHBlbmRpbmdSZXF1ZXN0LnhocjsKICAgIGlmICh4aHIucmVhZHlTdGF0ZSA+PSAyICYmIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKSB7CiAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKCk7CiAgICAgIGRlbGV0ZSBwZW5kaW5nUmVxdWVzdC5vbkhlYWRlcnNSZWNlaXZlZDsKICAgIH0KICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoISh4aHJJZCBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0cykpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZGVsZXRlIHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXTsKICAgIGlmICh4aHIuc3RhdHVzID09PSAwICYmIHRoaXMuaXNIdHRwKSB7CiAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3IoeGhyLnN0YXR1cyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHhoclN0YXR1cyA9IHhoci5zdGF0dXMgfHwgT0tfUkVTUE9OU0U7CiAgICBjb25zdCBva19yZXNwb25zZV9vbl9yYW5nZV9yZXF1ZXN0ID0geGhyU3RhdHVzID09PSBPS19SRVNQT05TRSAmJiBwZW5kaW5nUmVxdWVzdC5leHBlY3RlZFN0YXR1cyA9PT0gUEFSVElBTF9DT05URU5UX1JFU1BPTlNFOwogICAgaWYgKCFva19yZXNwb25zZV9vbl9yYW5nZV9yZXF1ZXN0ICYmIHhoclN0YXR1cyAhPT0gcGVuZGluZ1JlcXVlc3QuZXhwZWN0ZWRTdGF0dXMpIHsKICAgICAgcGVuZGluZ1JlcXVlc3Qub25FcnJvcih4aHIuc3RhdHVzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgY2h1bmsgPSBuZXR3b3JrX2dldEFycmF5QnVmZmVyKHhocik7CiAgICBpZiAoeGhyU3RhdHVzID09PSBQQVJUSUFMX0NPTlRFTlRfUkVTUE9OU0UpIHsKICAgICAgY29uc3QgcmFuZ2VIZWFkZXIgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtUmFuZ2UiKTsKICAgICAgY29uc3QgbWF0Y2hlcyA9IC9ieXRlcyAoXGQrKS0oXGQrKVwvKFxkKykvLmV4ZWMocmFuZ2VIZWFkZXIpOwogICAgICBpZiAobWF0Y2hlcykgewogICAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRG9uZSh7CiAgICAgICAgICBiZWdpbjogcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApLAogICAgICAgICAgY2h1bmsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3YXJuKGBNaXNzaW5nIG9yIGludmFsaWQgIkNvbnRlbnQtUmFuZ2UiIGhlYWRlci5gKTsKICAgICAgICBwZW5kaW5nUmVxdWVzdC5vbkVycm9yKDApOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGNodW5rKSB7CiAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRG9uZSh7CiAgICAgICAgYmVnaW46IDAsCiAgICAgICAgY2h1bmsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBwZW5kaW5nUmVxdWVzdC5vbkVycm9yKHhoci5zdGF0dXMpOwogICAgfQogIH0KICBnZXRSZXF1ZXN0WGhyKHhocklkKSB7CiAgICByZXR1cm4gdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdLnhocjsKICB9CiAgaXNQZW5kaW5nUmVxdWVzdCh4aHJJZCkgewogICAgcmV0dXJuIHhocklkIGluIHRoaXMucGVuZGluZ1JlcXVlc3RzOwogIH0KICBhYm9ydFJlcXVlc3QoeGhySWQpIHsKICAgIGNvbnN0IHhociA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXS54aHI7CiAgICBkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdOwogICAgeGhyLmFib3J0KCk7CiAgfQp9CmNsYXNzIFBERk5ldHdvcmtTdHJlYW0gewogIGNvbnN0cnVjdG9yKHNvdXJjZSkgewogICAgdGhpcy5fc291cmNlID0gc291cmNlOwogICAgdGhpcy5fbWFuYWdlciA9IG5ldyBOZXR3b3JrTWFuYWdlcihzb3VyY2UpOwogICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7CiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7CiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzID0gW107CiAgfQogIF9vblJhbmdlUmVxdWVzdFJlYWRlckNsb3NlZChyZWFkZXIpIHsKICAgIGNvbnN0IGkgPSB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YocmVhZGVyKTsKICAgIGlmIChpID49IDApIHsKICAgICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zcGxpY2UoaSwgMSk7CiAgICB9CiAgfQogIGdldEZ1bGxSZWFkZXIoKSB7CiAgICBhc3NlcnQoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCAiUERGTmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpOwogICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBuZXcgUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyKHRoaXMuX21hbmFnZXIsIHRoaXMuX3NvdXJjZSk7CiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7CiAgfQogIGdldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHsKICAgIGNvbnN0IHJlYWRlciA9IG5ldyBQREZOZXR3b3JrU3RyZWFtUmFuZ2VSZXF1ZXN0UmVhZGVyKHRoaXMuX21hbmFnZXIsIGJlZ2luLCBlbmQpOwogICAgcmVhZGVyLm9uQ2xvc2VkID0gdGhpcy5fb25SYW5nZVJlcXVlc3RSZWFkZXJDbG9zZWQuYmluZCh0aGlzKTsKICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyZWFkZXIpOwogICAgcmV0dXJuIHJlYWRlcjsKICB9CiAgY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKSB7CiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj8uY2FuY2VsKHJlYXNvbik7CiAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKSB7CiAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTsKICAgIH0KICB9Cn0KY2xhc3MgUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyIHsKICBjb25zdHJ1Y3RvcihtYW5hZ2VyLCBzb3VyY2UpIHsKICAgIHRoaXMuX21hbmFnZXIgPSBtYW5hZ2VyOwogICAgdGhpcy5fdXJsID0gc291cmNlLnVybDsKICAgIHRoaXMuX2Z1bGxSZXF1ZXN0SWQgPSBtYW5hZ2VyLnJlcXVlc3QoewogICAgICBvbkhlYWRlcnNSZWNlaXZlZDogdGhpcy5fb25IZWFkZXJzUmVjZWl2ZWQuYmluZCh0aGlzKSwKICAgICAgb25Eb25lOiB0aGlzLl9vbkRvbmUuYmluZCh0aGlzKSwKICAgICAgb25FcnJvcjogdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLAogICAgICBvblByb2dyZXNzOiB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcykKICAgIH0pOwogICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTsKICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHNvdXJjZS5kaXNhYmxlUmFuZ2UgfHwgZmFsc2U7CiAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gc291cmNlLmxlbmd0aDsKICAgIHRoaXMuX3JhbmdlQ2h1bmtTaXplID0gc291cmNlLnJhbmdlQ2h1bmtTaXplOwogICAgaWYgKCF0aGlzLl9yYW5nZUNodW5rU2l6ZSAmJiAhdGhpcy5fZGlzYWJsZVJhbmdlKSB7CiAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHRydWU7CiAgICB9CiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9IGZhbHNlOwogICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9IGZhbHNlOwogICAgdGhpcy5fY2FjaGVkQ2h1bmtzID0gW107CiAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdOwogICAgdGhpcy5fZG9uZSA9IGZhbHNlOwogICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7CiAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7CiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsOwogIH0KICBfb25IZWFkZXJzUmVjZWl2ZWQoKSB7CiAgICBjb25zdCBmdWxsUmVxdWVzdFhocklkID0gdGhpcy5fZnVsbFJlcXVlc3RJZDsKICAgIGNvbnN0IGZ1bGxSZXF1ZXN0WGhyID0gdGhpcy5fbWFuYWdlci5nZXRSZXF1ZXN0WGhyKGZ1bGxSZXF1ZXN0WGhySWQpOwogICAgdGhpcy5fbWFuYWdlci5fcmVzcG9uc2VPcmlnaW4gPSBnZXRSZXNwb25zZU9yaWdpbihmdWxsUmVxdWVzdFhoci5yZXNwb25zZVVSTCk7CiAgICBjb25zdCByYXdSZXNwb25zZUhlYWRlcnMgPSBmdWxsUmVxdWVzdFhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IG5ldyBIZWFkZXJzKHJhd1Jlc3BvbnNlSGVhZGVycyA/IHJhd1Jlc3BvbnNlSGVhZGVycy50cmltU3RhcnQoKS5yZXBsYWNlKC9bXlxTIF0rJC8sICIiKS5zcGxpdCgvW1xyXG5dKy8pLm1hcCh4ID0+IHsKICAgICAgY29uc3QgW2tleSwgLi4udmFsXSA9IHguc3BsaXQoIjogIik7CiAgICAgIHJldHVybiBba2V5LCB2YWwuam9pbigiOiAiKV07CiAgICB9KSA6IFtdKTsKICAgIGNvbnN0IHsKICAgICAgYWxsb3dSYW5nZVJlcXVlc3RzLAogICAgICBzdWdnZXN0ZWRMZW5ndGgKICAgIH0gPSB2YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcyh7CiAgICAgIHJlc3BvbnNlSGVhZGVycywKICAgICAgaXNIdHRwOiB0aGlzLl9tYW5hZ2VyLmlzSHR0cCwKICAgICAgcmFuZ2VDaHVua1NpemU6IHRoaXMuX3JhbmdlQ2h1bmtTaXplLAogICAgICBkaXNhYmxlUmFuZ2U6IHRoaXMuX2Rpc2FibGVSYW5nZQogICAgfSk7CiAgICBpZiAoYWxsb3dSYW5nZVJlcXVlc3RzKSB7CiAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSB0cnVlOwogICAgfQogICAgdGhpcy5fY29udGVudExlbmd0aCA9IHN1Z2dlc3RlZExlbmd0aCB8fCB0aGlzLl9jb250ZW50TGVuZ3RoOwogICAgdGhpcy5fZmlsZW5hbWUgPSBleHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKHJlc3BvbnNlSGVhZGVycyk7CiAgICBpZiAodGhpcy5faXNSYW5nZVN1cHBvcnRlZCkgewogICAgICB0aGlzLl9tYW5hZ2VyLmFib3J0UmVxdWVzdChmdWxsUmVxdWVzdFhocklkKTsKICAgIH0KICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKTsKICB9CiAgX29uRG9uZShkYXRhKSB7CiAgICBpZiAoZGF0YSkgewogICAgICBpZiAodGhpcy5fcmVxdWVzdHMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gdGhpcy5fcmVxdWVzdHMuc2hpZnQoKTsKICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHsKICAgICAgICAgIHZhbHVlOiBkYXRhLmNodW5rLAogICAgICAgICAgZG9uZTogZmFsc2UKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9jYWNoZWRDaHVua3MucHVzaChkYXRhLmNodW5rKTsKICAgICAgfQogICAgfQogICAgdGhpcy5fZG9uZSA9IHRydWU7CiAgICBpZiAodGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aCA+IDApIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSBvZiB0aGlzLl9yZXF1ZXN0cykgewogICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHsKICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLAogICAgICAgIGRvbmU6IHRydWUKICAgICAgfSk7CiAgICB9CiAgICB0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPSAwOwogIH0KICBfb25FcnJvcihzdGF0dXMpIHsKICAgIHRoaXMuX3N0b3JlZEVycm9yID0gY3JlYXRlUmVzcG9uc2VFcnJvcihzdGF0dXMsIHRoaXMuX3VybCk7CiAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QodGhpcy5fc3RvcmVkRXJyb3IpOwogICAgZm9yIChjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSBvZiB0aGlzLl9yZXF1ZXN0cykgewogICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZWplY3QodGhpcy5fc3RvcmVkRXJyb3IpOwogICAgfQogICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDsKICAgIHRoaXMuX2NhY2hlZENodW5rcy5sZW5ndGggPSAwOwogIH0KICBfb25Qcm9ncmVzcyhldnQpIHsKICAgIHRoaXMub25Qcm9ncmVzcz8uKHsKICAgICAgbG9hZGVkOiBldnQubG9hZGVkLAogICAgICB0b3RhbDogZXZ0Lmxlbmd0aENvbXB1dGFibGUgPyBldnQudG90YWwgOiB0aGlzLl9jb250ZW50TGVuZ3RoCiAgICB9KTsKICB9CiAgZ2V0IGZpbGVuYW1lKCkgewogICAgcmV0dXJuIHRoaXMuX2ZpbGVuYW1lOwogIH0KICBnZXQgaXNSYW5nZVN1cHBvcnRlZCgpIHsKICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkOwogIH0KICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7CiAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7CiAgfQogIGdldCBjb250ZW50TGVuZ3RoKCkgewogICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7CiAgfQogIGdldCBoZWFkZXJzUmVhZHkoKSB7CiAgICByZXR1cm4gdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTsKICB9CiAgYXN5bmMgcmVhZCgpIHsKICAgIGF3YWl0IHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnByb21pc2U7CiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHsKICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7CiAgICB9CiAgICBpZiAodGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aCA+IDApIHsKICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9jYWNoZWRDaHVua3Muc2hpZnQoKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB2YWx1ZTogY2h1bmssCiAgICAgICAgZG9uZTogZmFsc2UKICAgICAgfTsKICAgIH0KICAgIGlmICh0aGlzLl9kb25lKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCwKICAgICAgICBkb25lOiB0cnVlCiAgICAgIH07CiAgICB9CiAgICBjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgdGhpcy5fcmVxdWVzdHMucHVzaChyZXF1ZXN0Q2FwYWJpbGl0eSk7CiAgICByZXR1cm4gcmVxdWVzdENhcGFiaWxpdHkucHJvbWlzZTsKICB9CiAgY2FuY2VsKHJlYXNvbikgewogICAgdGhpcy5fZG9uZSA9IHRydWU7CiAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTsKICAgIGZvciAoY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgb2YgdGhpcy5fcmVxdWVzdHMpIHsKICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7CiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCwKICAgICAgICBkb25lOiB0cnVlCiAgICAgIH0pOwogICAgfQogICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDsKICAgIGlmICh0aGlzLl9tYW5hZ2VyLmlzUGVuZGluZ1JlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCkpIHsKICAgICAgdGhpcy5fbWFuYWdlci5hYm9ydFJlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCk7CiAgICB9CiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7CiAgfQp9CmNsYXNzIFBERk5ldHdvcmtTdHJlYW1SYW5nZVJlcXVlc3RSZWFkZXIgewogIGNvbnN0cnVjdG9yKG1hbmFnZXIsIGJlZ2luLCBlbmQpIHsKICAgIHRoaXMuX21hbmFnZXIgPSBtYW5hZ2VyOwogICAgdGhpcy5fdXJsID0gbWFuYWdlci51cmw7CiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBtYW5hZ2VyLnJlcXVlc3QoewogICAgICBiZWdpbiwKICAgICAgZW5kLAogICAgICBvbkhlYWRlcnNSZWNlaXZlZDogdGhpcy5fb25IZWFkZXJzUmVjZWl2ZWQuYmluZCh0aGlzKSwKICAgICAgb25Eb25lOiB0aGlzLl9vbkRvbmUuYmluZCh0aGlzKSwKICAgICAgb25FcnJvcjogdGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLAogICAgICBvblByb2dyZXNzOiB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcykKICAgIH0pOwogICAgdGhpcy5fcmVxdWVzdHMgPSBbXTsKICAgIHRoaXMuX3F1ZXVlZENodW5rID0gbnVsbDsKICAgIHRoaXMuX2RvbmUgPSBmYWxzZTsKICAgIHRoaXMuX3N0b3JlZEVycm9yID0gdW5kZWZpbmVkOwogICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDsKICAgIHRoaXMub25DbG9zZWQgPSBudWxsOwogIH0KICBfb25IZWFkZXJzUmVjZWl2ZWQoKSB7CiAgICBjb25zdCByZXNwb25zZU9yaWdpbiA9IGdldFJlc3BvbnNlT3JpZ2luKHRoaXMuX21hbmFnZXIuZ2V0UmVxdWVzdFhocih0aGlzLl9yZXF1ZXN0SWQpPy5yZXNwb25zZVVSTCk7CiAgICBpZiAocmVzcG9uc2VPcmlnaW4gIT09IHRoaXMuX21hbmFnZXIuX3Jlc3BvbnNlT3JpZ2luKSB7CiAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gbmV3IEVycm9yKGBFeHBlY3RlZCByYW5nZSByZXNwb25zZS1vcmlnaW4gIiR7cmVzcG9uc2VPcmlnaW59IiB0byBtYXRjaCAiJHt0aGlzLl9tYW5hZ2VyLl9yZXNwb25zZU9yaWdpbn0iLmApOwogICAgICB0aGlzLl9vbkVycm9yKDApOwogICAgfQogIH0KICBfY2xvc2UoKSB7CiAgICB0aGlzLm9uQ2xvc2VkPy4odGhpcyk7CiAgfQogIF9vbkRvbmUoZGF0YSkgewogICAgY29uc3QgY2h1bmsgPSBkYXRhLmNodW5rOwogICAgaWYgKHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA+IDApIHsKICAgICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSB0aGlzLl9yZXF1ZXN0cy5zaGlmdCgpOwogICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHsKICAgICAgICB2YWx1ZTogY2h1bmssCiAgICAgICAgZG9uZTogZmFsc2UKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IGNodW5rOwogICAgfQogICAgdGhpcy5fZG9uZSA9IHRydWU7CiAgICBmb3IgKGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5IG9mIHRoaXMuX3JlcXVlc3RzKSB7CiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoewogICAgICAgIHZhbHVlOiB1bmRlZmluZWQsCiAgICAgICAgZG9uZTogdHJ1ZQogICAgICB9KTsKICAgIH0KICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7CiAgICB0aGlzLl9jbG9zZSgpOwogIH0KICBfb25FcnJvcihzdGF0dXMpIHsKICAgIHRoaXMuX3N0b3JlZEVycm9yID8/PSBjcmVhdGVSZXNwb25zZUVycm9yKHN0YXR1cywgdGhpcy5fdXJsKTsKICAgIGZvciAoY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgb2YgdGhpcy5fcmVxdWVzdHMpIHsKICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVqZWN0KHRoaXMuX3N0b3JlZEVycm9yKTsKICAgIH0KICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7CiAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7CiAgfQogIF9vblByb2dyZXNzKGV2dCkgewogICAgaWYgKCF0aGlzLmlzU3RyZWFtaW5nU3VwcG9ydGVkKSB7CiAgICAgIHRoaXMub25Qcm9ncmVzcz8uKHsKICAgICAgICBsb2FkZWQ6IGV2dC5sb2FkZWQKICAgICAgfSk7CiAgICB9CiAgfQogIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgYXN5bmMgcmVhZCgpIHsKICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikgewogICAgICB0aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjsKICAgIH0KICAgIGlmICh0aGlzLl9xdWV1ZWRDaHVuayAhPT0gbnVsbCkgewogICAgICBjb25zdCBjaHVuayA9IHRoaXMuX3F1ZXVlZENodW5rOwogICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7CiAgICAgIHJldHVybiB7CiAgICAgICAgdmFsdWU6IGNodW5rLAogICAgICAgIGRvbmU6IGZhbHNlCiAgICAgIH07CiAgICB9CiAgICBpZiAodGhpcy5fZG9uZSkgewogICAgICByZXR1cm4gewogICAgICAgIHZhbHVlOiB1bmRlZmluZWQsCiAgICAgICAgZG9uZTogdHJ1ZQogICAgICB9OwogICAgfQogICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTsKICAgIHRoaXMuX3JlcXVlc3RzLnB1c2gocmVxdWVzdENhcGFiaWxpdHkpOwogICAgcmV0dXJuIHJlcXVlc3RDYXBhYmlsaXR5LnByb21pc2U7CiAgfQogIGNhbmNlbChyZWFzb24pIHsKICAgIHRoaXMuX2RvbmUgPSB0cnVlOwogICAgZm9yIChjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSBvZiB0aGlzLl9yZXF1ZXN0cykgewogICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHsKICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLAogICAgICAgIGRvbmU6IHRydWUKICAgICAgfSk7CiAgICB9CiAgICB0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPSAwOwogICAgaWYgKHRoaXMuX21hbmFnZXIuaXNQZW5kaW5nUmVxdWVzdCh0aGlzLl9yZXF1ZXN0SWQpKSB7CiAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCk7CiAgICB9CiAgICB0aGlzLl9jbG9zZSgpOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvbm9kZV9zdHJlYW0uanMKCgpjb25zdCB1cmxSZWdleCA9IC9eW2Etel1bYS16MC05XC0rLl0rOi9pOwpmdW5jdGlvbiBwYXJzZVVybE9yUGF0aChzb3VyY2VVcmwpIHsKICBpZiAodXJsUmVnZXgudGVzdChzb3VyY2VVcmwpKSB7CiAgICByZXR1cm4gbmV3IFVSTChzb3VyY2VVcmwpOwogIH0KICBjb25zdCB1cmwgPSBwcm9jZXNzLmdldEJ1aWx0aW5Nb2R1bGUoInVybCIpOwogIHJldHVybiBuZXcgVVJMKHVybC5wYXRoVG9GaWxlVVJMKHNvdXJjZVVybCkpOwp9CmNsYXNzIFBERk5vZGVTdHJlYW0gewogIGNvbnN0cnVjdG9yKHNvdXJjZSkgewogICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7CiAgICB0aGlzLnVybCA9IHBhcnNlVXJsT3JQYXRoKHNvdXJjZS51cmwpOwogICAgYXNzZXJ0KHRoaXMudXJsLnByb3RvY29sID09PSAiZmlsZToiLCAiUERGTm9kZVN0cmVhbSBvbmx5IHN1cHBvcnRzIGZpbGU6Ly8gVVJMcy4iKTsKICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDsKICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTsKICB9CiAgZ2V0IF9wcm9ncmVzc2l2ZURhdGFMZW5ndGgoKSB7CiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/Ll9sb2FkZWQgPz8gMDsKICB9CiAgZ2V0RnVsbFJlYWRlcigpIHsKICAgIGFzc2VydCghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsICJQREZOb2RlU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuIik7CiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG5ldyBQREZOb2RlU3RyZWFtRnNGdWxsUmVhZGVyKHRoaXMpOwogICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyOwogIH0KICBnZXRSYW5nZVJlYWRlcihzdGFydCwgZW5kKSB7CiAgICBpZiAoZW5kIDw9IHRoaXMuX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHJhbmdlUmVhZGVyID0gbmV3IFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyKHRoaXMsIHN0YXJ0LCBlbmQpOwogICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHJhbmdlUmVhZGVyKTsKICAgIHJldHVybiByYW5nZVJlYWRlcjsKICB9CiAgY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKSB7CiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj8uY2FuY2VsKHJlYXNvbik7CiAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKSB7CiAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTsKICAgIH0KICB9Cn0KY2xhc3MgUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlciB7CiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7CiAgICB0aGlzLl91cmwgPSBzdHJlYW0udXJsOwogICAgdGhpcy5fZG9uZSA9IGZhbHNlOwogICAgdGhpcy5fc3RvcmVkRXJyb3IgPSBudWxsOwogICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDsKICAgIGNvbnN0IHNvdXJjZSA9IHN0cmVhbS5zb3VyY2U7CiAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gc291cmNlLmxlbmd0aDsKICAgIHRoaXMuX2xvYWRlZCA9IDA7CiAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7CiAgICB0aGlzLl9kaXNhYmxlUmFuZ2UgPSBzb3VyY2UuZGlzYWJsZVJhbmdlIHx8IGZhbHNlOwogICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7CiAgICBpZiAoIXRoaXMuX3JhbmdlQ2h1bmtTaXplICYmICF0aGlzLl9kaXNhYmxlUmFuZ2UpIHsKICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gdHJ1ZTsKICAgIH0KICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlU3RyZWFtOwogICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVJhbmdlOwogICAgdGhpcy5fcmVhZGFibGVTdHJlYW0gPSBudWxsOwogICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTsKICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgICBjb25zdCBmcyA9IHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSgiZnMiKTsKICAgIGZzLnByb21pc2VzLmxzdGF0KHRoaXMuX3VybCkudGhlbihzdGF0ID0+IHsKICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHN0YXQuc2l6ZTsKICAgICAgdGhpcy5fc2V0UmVhZGFibGVTdHJlYW0oZnMuY3JlYXRlUmVhZFN0cmVhbSh0aGlzLl91cmwpKTsKICAgICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpOwogICAgfSwgZXJyb3IgPT4gewogICAgICBpZiAoZXJyb3IuY29kZSA9PT0gIkVOT0VOVCIpIHsKICAgICAgICBlcnJvciA9IGNyZWF0ZVJlc3BvbnNlRXJyb3IoMCwgdGhpcy5fdXJsLmhyZWYpOwogICAgICB9CiAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gZXJyb3I7CiAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdChlcnJvcik7CiAgICB9KTsKICB9CiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHsKICAgIHJldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlOwogIH0KICBnZXQgZmlsZW5hbWUoKSB7CiAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7CiAgfQogIGdldCBjb250ZW50TGVuZ3RoKCkgewogICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7CiAgfQogIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkgewogICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7CiAgfQogIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHsKICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDsKICB9CiAgYXN5bmMgcmVhZCgpIHsKICAgIGF3YWl0IHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7CiAgICBpZiAodGhpcy5fZG9uZSkgewogICAgICByZXR1cm4gewogICAgICAgIHZhbHVlOiB1bmRlZmluZWQsCiAgICAgICAgZG9uZTogdHJ1ZQogICAgICB9OwogICAgfQogICAgaWYgKHRoaXMuX3N0b3JlZEVycm9yKSB7CiAgICAgIHRocm93IHRoaXMuX3N0b3JlZEVycm9yOwogICAgfQogICAgY29uc3QgY2h1bmsgPSB0aGlzLl9yZWFkYWJsZVN0cmVhbS5yZWFkKCk7CiAgICBpZiAoY2h1bmsgPT09IG51bGwpIHsKICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTsKICAgICAgcmV0dXJuIHRoaXMucmVhZCgpOwogICAgfQogICAgdGhpcy5fbG9hZGVkICs9IGNodW5rLmxlbmd0aDsKICAgIHRoaXMub25Qcm9ncmVzcz8uKHsKICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWQsCiAgICAgIHRvdGFsOiB0aGlzLl9jb250ZW50TGVuZ3RoCiAgICB9KTsKICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGNodW5rKS5idWZmZXI7CiAgICByZXR1cm4gewogICAgICB2YWx1ZTogYnVmZmVyLAogICAgICBkb25lOiBmYWxzZQogICAgfTsKICB9CiAgY2FuY2VsKHJlYXNvbikgewogICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0cmVhbSkgewogICAgICB0aGlzLl9lcnJvcihyZWFzb24pOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHJlYXNvbik7CiAgfQogIF9lcnJvcihyZWFzb24pIHsKICAgIHRoaXMuX3N0b3JlZEVycm9yID0gcmVhc29uOwogICAgdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpOwogIH0KICBfc2V0UmVhZGFibGVTdHJlYW0ocmVhZGFibGVTdHJlYW0pIHsKICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gcmVhZGFibGVTdHJlYW07CiAgICByZWFkYWJsZVN0cmVhbS5vbigicmVhZGFibGUiLCAoKSA9PiB7CiAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTsKICAgIH0pOwogICAgcmVhZGFibGVTdHJlYW0ub24oImVuZCIsICgpID0+IHsKICAgICAgcmVhZGFibGVTdHJlYW0uZGVzdHJveSgpOwogICAgICB0aGlzLl9kb25lID0gdHJ1ZTsKICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpOwogICAgfSk7CiAgICByZWFkYWJsZVN0cmVhbS5vbigiZXJyb3IiLCByZWFzb24gPT4gewogICAgICB0aGlzLl9lcnJvcihyZWFzb24pOwogICAgfSk7CiAgICBpZiAoIXRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkICYmIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQpIHsKICAgICAgdGhpcy5fZXJyb3IobmV3IEFib3J0RXhjZXB0aW9uKCJzdHJlYW1pbmcgaXMgZGlzYWJsZWQiKSk7CiAgICB9CiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHsKICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0aGlzLl9zdG9yZWRFcnJvcik7CiAgICB9CiAgfQp9CmNsYXNzIFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyIHsKICBjb25zdHJ1Y3RvcihzdHJlYW0sIHN0YXJ0LCBlbmQpIHsKICAgIHRoaXMuX3VybCA9IHN0cmVhbS51cmw7CiAgICB0aGlzLl9kb25lID0gZmFsc2U7CiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IG51bGw7CiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsOwogICAgdGhpcy5fbG9hZGVkID0gMDsKICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gbnVsbDsKICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgICBjb25zdCBzb3VyY2UgPSBzdHJlYW0uc291cmNlOwogICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSAhc291cmNlLmRpc2FibGVTdHJlYW07CiAgICBjb25zdCBmcyA9IHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZSgiZnMiKTsKICAgIHRoaXMuX3NldFJlYWRhYmxlU3RyZWFtKGZzLmNyZWF0ZVJlYWRTdHJlYW0odGhpcy5fdXJsLCB7CiAgICAgIHN0YXJ0LAogICAgICBlbmQ6IGVuZCAtIDEKICAgIH0pKTsKICB9CiAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkgewogICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkOwogIH0KICBhc3luYyByZWFkKCkgewogICAgYXdhaXQgdGhpcy5fcmVhZENhcGFiaWxpdHkucHJvbWlzZTsKICAgIGlmICh0aGlzLl9kb25lKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCwKICAgICAgICBkb25lOiB0cnVlCiAgICAgIH07CiAgICB9CiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHsKICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7CiAgICB9CiAgICBjb25zdCBjaHVuayA9IHRoaXMuX3JlYWRhYmxlU3RyZWFtLnJlYWQoKTsKICAgIGlmIChjaHVuayA9PT0gbnVsbCkgewogICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgICByZXR1cm4gdGhpcy5yZWFkKCk7CiAgICB9CiAgICB0aGlzLl9sb2FkZWQgKz0gY2h1bmsubGVuZ3RoOwogICAgdGhpcy5vblByb2dyZXNzPy4oewogICAgICBsb2FkZWQ6IHRoaXMuX2xvYWRlZAogICAgfSk7CiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShjaHVuaykuYnVmZmVyOwogICAgcmV0dXJuIHsKICAgICAgdmFsdWU6IGJ1ZmZlciwKICAgICAgZG9uZTogZmFsc2UKICAgIH07CiAgfQogIGNhbmNlbChyZWFzb24pIHsKICAgIGlmICghdGhpcy5fcmVhZGFibGVTdHJlYW0pIHsKICAgICAgdGhpcy5fZXJyb3IocmVhc29uKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveShyZWFzb24pOwogIH0KICBfZXJyb3IocmVhc29uKSB7CiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjsKICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTsKICB9CiAgX3NldFJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtKSB7CiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtOwogICAgcmVhZGFibGVTdHJlYW0ub24oInJlYWRhYmxlIiwgKCkgPT4gewogICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7CiAgICB9KTsKICAgIHJlYWRhYmxlU3RyZWFtLm9uKCJlbmQiLCAoKSA9PiB7CiAgICAgIHJlYWRhYmxlU3RyZWFtLmRlc3Ryb3koKTsKICAgICAgdGhpcy5fZG9uZSA9IHRydWU7CiAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTsKICAgIH0pOwogICAgcmVhZGFibGVTdHJlYW0ub24oImVycm9yIiwgcmVhc29uID0+IHsKICAgICAgdGhpcy5fZXJyb3IocmVhc29uKTsKICAgIH0pOwogICAgaWYgKHRoaXMuX3N0b3JlZEVycm9yKSB7CiAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kodGhpcy5fc3RvcmVkRXJyb3IpOwogICAgfQogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvcGRmX29iamVjdHMuanMKY29uc3QgSU5JVElBTF9EQVRBID0gU3ltYm9sKCJJTklUSUFMX0RBVEEiKTsKY2xhc3MgUERGT2JqZWN0cyB7CiAgI29ianMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICNlbnN1cmVPYmoob2JqSWQpIHsKICAgIHJldHVybiB0aGlzLiNvYmpzW29iaklkXSB8fD0gewogICAgICAuLi5Qcm9taXNlLndpdGhSZXNvbHZlcnMoKSwKICAgICAgZGF0YTogSU5JVElBTF9EQVRBCiAgICB9OwogIH0KICBnZXQob2JqSWQsIGNhbGxiYWNrID0gbnVsbCkgewogICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgIGNvbnN0IG9iaiA9IHRoaXMuI2Vuc3VyZU9iaihvYmpJZCk7CiAgICAgIG9iai5wcm9taXNlLnRoZW4oKCkgPT4gY2FsbGJhY2sob2JqLmRhdGEpKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBvYmogPSB0aGlzLiNvYmpzW29iaklkXTsKICAgIGlmICghb2JqIHx8IG9iai5kYXRhID09PSBJTklUSUFMX0RBVEEpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1ZXN0aW5nIG9iamVjdCB0aGF0IGlzbid0IHJlc29sdmVkIHlldCAke29iaklkfS5gKTsKICAgIH0KICAgIHJldHVybiBvYmouZGF0YTsKICB9CiAgaGFzKG9iaklkKSB7CiAgICBjb25zdCBvYmogPSB0aGlzLiNvYmpzW29iaklkXTsKICAgIHJldHVybiAhIW9iaiAmJiBvYmouZGF0YSAhPT0gSU5JVElBTF9EQVRBOwogIH0KICBkZWxldGUob2JqSWQpIHsKICAgIGNvbnN0IG9iaiA9IHRoaXMuI29ianNbb2JqSWRdOwogICAgaWYgKCFvYmogfHwgb2JqLmRhdGEgPT09IElOSVRJQUxfREFUQSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBkZWxldGUgdGhpcy4jb2Jqc1tvYmpJZF07CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgcmVzb2x2ZShvYmpJZCwgZGF0YSA9IG51bGwpIHsKICAgIGNvbnN0IG9iaiA9IHRoaXMuI2Vuc3VyZU9iaihvYmpJZCk7CiAgICBvYmouZGF0YSA9IGRhdGE7CiAgICBvYmoucmVzb2x2ZSgpOwogIH0KICBjbGVhcigpIHsKICAgIGZvciAoY29uc3Qgb2JqSWQgaW4gdGhpcy4jb2JqcykgewogICAgICBjb25zdCB7CiAgICAgICAgZGF0YQogICAgICB9ID0gdGhpcy4jb2Jqc1tvYmpJZF07CiAgICAgIGRhdGE/LmJpdG1hcD8uY2xvc2UoKTsKICAgIH0KICAgIHRoaXMuI29ianMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogIH0KICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7CiAgICBmb3IgKGNvbnN0IG9iaklkIGluIHRoaXMuI29ianMpIHsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEKICAgICAgfSA9IHRoaXMuI29ianNbb2JqSWRdOwogICAgICBpZiAoZGF0YSA9PT0gSU5JVElBTF9EQVRBKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgeWllbGQgW29iaklkLCBkYXRhXTsKICAgIH0KICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L3RleHRfbGF5ZXIuanMKCgpjb25zdCBNQVhfVEVYVF9ESVZTX1RPX1JFTkRFUiA9IDEwMDAwMDsKY29uc3QgREVGQVVMVF9GT05UX1NJWkUgPSAzMDsKY2xhc3MgVGV4dExheWVyIHsKICAjY2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICNjb250YWluZXIgPSBudWxsOwogICNkaXNhYmxlUHJvY2Vzc0l0ZW1zID0gZmFsc2U7CiAgI2ZvbnRJbnNwZWN0b3JFbmFibGVkID0gISFnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3I/LmVuYWJsZWQ7CiAgI2xhbmcgPSBudWxsOwogICNsYXlvdXRUZXh0UGFyYW1zID0gbnVsbDsKICAjcGFnZUhlaWdodCA9IDA7CiAgI3BhZ2VXaWR0aCA9IDA7CiAgI3JlYWRlciA9IG51bGw7CiAgI3Jvb3RDb250YWluZXIgPSBudWxsOwogICNyb3RhdGlvbiA9IDA7CiAgI3NjYWxlID0gMDsKICAjc3R5bGVDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgI3RleHRDb250ZW50SXRlbXNTdHIgPSBbXTsKICAjdGV4dENvbnRlbnRTb3VyY2UgPSBudWxsOwogICN0ZXh0RGl2cyA9IFtdOwogICN0ZXh0RGl2UHJvcGVydGllcyA9IG5ldyBXZWFrTWFwKCk7CiAgI3RyYW5zZm9ybSA9IG51bGw7CiAgc3RhdGljICNhc2NlbnRDYWNoZSA9IG5ldyBNYXAoKTsKICBzdGF0aWMgI2NhbnZhc0NvbnRleHRzID0gbmV3IE1hcCgpOwogIHN0YXRpYyAjY2FudmFzQ3R4Rm9udHMgPSBuZXcgV2Vha01hcCgpOwogIHN0YXRpYyAjbWluRm9udFNpemUgPSBudWxsOwogIHN0YXRpYyAjcGVuZGluZ1RleHRMYXllcnMgPSBuZXcgU2V0KCk7CiAgY29uc3RydWN0b3IoewogICAgdGV4dENvbnRlbnRTb3VyY2UsCiAgICBjb250YWluZXIsCiAgICB2aWV3cG9ydAogIH0pIHsKICAgIGlmICh0ZXh0Q29udGVudFNvdXJjZSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7CiAgICAgIHRoaXMuI3RleHRDb250ZW50U291cmNlID0gdGV4dENvbnRlbnRTb3VyY2U7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ZXh0Q29udGVudFNvdXJjZSA9PT0gIm9iamVjdCIpIHsKICAgICAgdGhpcy4jdGV4dENvbnRlbnRTb3VyY2UgPSBuZXcgUmVhZGFibGVTdHJlYW0oewogICAgICAgIHN0YXJ0KGNvbnRyb2xsZXIpIHsKICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh0ZXh0Q29udGVudFNvdXJjZSk7CiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gInRleHRDb250ZW50U291cmNlIiBwYXJhbWV0ZXIgc3BlY2lmaWVkLicpOwogICAgfQogICAgdGhpcy4jY29udGFpbmVyID0gdGhpcy4jcm9vdENvbnRhaW5lciA9IGNvbnRhaW5lcjsKICAgIHRoaXMuI3NjYWxlID0gdmlld3BvcnQuc2NhbGUgKiBPdXRwdXRTY2FsZS5waXhlbFJhdGlvOwogICAgdGhpcy4jcm90YXRpb24gPSB2aWV3cG9ydC5yb3RhdGlvbjsKICAgIHRoaXMuI2xheW91dFRleHRQYXJhbXMgPSB7CiAgICAgIGRpdjogbnVsbCwKICAgICAgcHJvcGVydGllczogbnVsbCwKICAgICAgY3R4OiBudWxsCiAgICB9OwogICAgY29uc3QgewogICAgICBwYWdlV2lkdGgsCiAgICAgIHBhZ2VIZWlnaHQsCiAgICAgIHBhZ2VYLAogICAgICBwYWdlWQogICAgfSA9IHZpZXdwb3J0LnJhd0RpbXM7CiAgICB0aGlzLiN0cmFuc2Zvcm0gPSBbMSwgMCwgMCwgLTEsIC1wYWdlWCwgcGFnZVkgKyBwYWdlSGVpZ2h0XTsKICAgIHRoaXMuI3BhZ2VXaWR0aCA9IHBhZ2VXaWR0aDsKICAgIHRoaXMuI3BhZ2VIZWlnaHQgPSBwYWdlSGVpZ2h0OwogICAgVGV4dExheWVyLiNlbnN1cmVNaW5Gb250U2l6ZUNvbXB1dGVkKCk7CiAgICBzZXRMYXllckRpbWVuc2lvbnMoY29udGFpbmVyLCB2aWV3cG9ydCk7CiAgICB0aGlzLiNjYXBhYmlsaXR5LnByb21pc2UuZmluYWxseSgoKSA9PiB7CiAgICAgIFRleHRMYXllci4jcGVuZGluZ1RleHRMYXllcnMuZGVsZXRlKHRoaXMpOwogICAgICB0aGlzLiNsYXlvdXRUZXh0UGFyYW1zID0gbnVsbDsKICAgICAgdGhpcy4jc3R5bGVDYWNoZSA9IG51bGw7CiAgICB9KS5jYXRjaCgoKSA9PiB7fSk7CiAgfQogIHN0YXRpYyBnZXQgZm9udEZhbWlseU1hcCgpIHsKICAgIGNvbnN0IHsKICAgICAgaXNXaW5kb3dzLAogICAgICBpc0ZpcmVmb3gKICAgIH0gPSB1dGlsX0ZlYXR1cmVUZXN0LnBsYXRmb3JtOwogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiZm9udEZhbWlseU1hcCIsIG5ldyBNYXAoW1sic2Fucy1zZXJpZiIsIGAke2lzV2luZG93cyAmJiBpc0ZpcmVmb3ggPyAiQ2FsaWJyaSwgIiA6ICIifXNhbnMtc2VyaWZgXSwgWyJtb25vc3BhY2UiLCBgJHtpc1dpbmRvd3MgJiYgaXNGaXJlZm94ID8gIkx1Y2lkYSBDb25zb2xlLCAiIDogIiJ9bW9ub3NwYWNlYF1dKSk7CiAgfQogIHJlbmRlcigpIHsKICAgIGNvbnN0IHB1bXAgPSAoKSA9PiB7CiAgICAgIHRoaXMuI3JlYWRlci5yZWFkKCkudGhlbigoewogICAgICAgIHZhbHVlLAogICAgICAgIGRvbmUKICAgICAgfSkgPT4gewogICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICB0aGlzLiNjYXBhYmlsaXR5LnJlc29sdmUoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy4jbGFuZyA/Pz0gdmFsdWUubGFuZzsKICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuI3N0eWxlQ2FjaGUsIHZhbHVlLnN0eWxlcyk7CiAgICAgICAgdGhpcy4jcHJvY2Vzc0l0ZW1zKHZhbHVlLml0ZW1zKTsKICAgICAgICBwdW1wKCk7CiAgICAgIH0sIHRoaXMuI2NhcGFiaWxpdHkucmVqZWN0KTsKICAgIH07CiAgICB0aGlzLiNyZWFkZXIgPSB0aGlzLiN0ZXh0Q29udGVudFNvdXJjZS5nZXRSZWFkZXIoKTsKICAgIFRleHRMYXllci4jcGVuZGluZ1RleHRMYXllcnMuYWRkKHRoaXMpOwogICAgcHVtcCgpOwogICAgcmV0dXJuIHRoaXMuI2NhcGFiaWxpdHkucHJvbWlzZTsKICB9CiAgdXBkYXRlKHsKICAgIHZpZXdwb3J0LAogICAgb25CZWZvcmUgPSBudWxsCiAgfSkgewogICAgY29uc3Qgc2NhbGUgPSB2aWV3cG9ydC5zY2FsZSAqIE91dHB1dFNjYWxlLnBpeGVsUmF0aW87CiAgICBjb25zdCByb3RhdGlvbiA9IHZpZXdwb3J0LnJvdGF0aW9uOwogICAgaWYgKHJvdGF0aW9uICE9PSB0aGlzLiNyb3RhdGlvbikgewogICAgICBvbkJlZm9yZT8uKCk7CiAgICAgIHRoaXMuI3JvdGF0aW9uID0gcm90YXRpb247CiAgICAgIHNldExheWVyRGltZW5zaW9ucyh0aGlzLiNyb290Q29udGFpbmVyLCB7CiAgICAgICAgcm90YXRpb24KICAgICAgfSk7CiAgICB9CiAgICBpZiAoc2NhbGUgIT09IHRoaXMuI3NjYWxlKSB7CiAgICAgIG9uQmVmb3JlPy4oKTsKICAgICAgdGhpcy4jc2NhbGUgPSBzY2FsZTsKICAgICAgY29uc3QgcGFyYW1zID0gewogICAgICAgIGRpdjogbnVsbCwKICAgICAgICBwcm9wZXJ0aWVzOiBudWxsLAogICAgICAgIGN0eDogVGV4dExheWVyLiNnZXRDdHgodGhpcy4jbGFuZykKICAgICAgfTsKICAgICAgZm9yIChjb25zdCBkaXYgb2YgdGhpcy4jdGV4dERpdnMpIHsKICAgICAgICBwYXJhbXMucHJvcGVydGllcyA9IHRoaXMuI3RleHREaXZQcm9wZXJ0aWVzLmdldChkaXYpOwogICAgICAgIHBhcmFtcy5kaXYgPSBkaXY7CiAgICAgICAgdGhpcy4jbGF5b3V0KHBhcmFtcyk7CiAgICAgIH0KICAgIH0KICB9CiAgY2FuY2VsKCkgewogICAgY29uc3QgYWJvcnRFeCA9IG5ldyBBYm9ydEV4Y2VwdGlvbigiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLiIpOwogICAgdGhpcy4jcmVhZGVyPy5jYW5jZWwoYWJvcnRFeCkuY2F0Y2goKCkgPT4ge30pOwogICAgdGhpcy4jcmVhZGVyID0gbnVsbDsKICAgIHRoaXMuI2NhcGFiaWxpdHkucmVqZWN0KGFib3J0RXgpOwogIH0KICBnZXQgdGV4dERpdnMoKSB7CiAgICByZXR1cm4gdGhpcy4jdGV4dERpdnM7CiAgfQogIGdldCB0ZXh0Q29udGVudEl0ZW1zU3RyKCkgewogICAgcmV0dXJuIHRoaXMuI3RleHRDb250ZW50SXRlbXNTdHI7CiAgfQogICNwcm9jZXNzSXRlbXMoaXRlbXMpIHsKICAgIGlmICh0aGlzLiNkaXNhYmxlUHJvY2Vzc0l0ZW1zKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI2xheW91dFRleHRQYXJhbXMuY3R4ID8/PSBUZXh0TGF5ZXIuI2dldEN0eCh0aGlzLiNsYW5nKTsKICAgIGNvbnN0IHRleHREaXZzID0gdGhpcy4jdGV4dERpdnMsCiAgICAgIHRleHRDb250ZW50SXRlbXNTdHIgPSB0aGlzLiN0ZXh0Q29udGVudEl0ZW1zU3RyOwogICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7CiAgICAgIGlmICh0ZXh0RGl2cy5sZW5ndGggPiBNQVhfVEVYVF9ESVZTX1RPX1JFTkRFUikgewogICAgICAgIHdhcm4oIklnbm9yaW5nIGFkZGl0aW9uYWwgdGV4dERpdnMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIik7CiAgICAgICAgdGhpcy4jZGlzYWJsZVByb2Nlc3NJdGVtcyA9IHRydWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChpdGVtLnN0ciA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gImJlZ2luTWFya2VkQ29udGVudFByb3BzIiB8fCBpdGVtLnR5cGUgPT09ICJiZWdpbk1hcmtlZENvbnRlbnQiKSB7CiAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLiNjb250YWluZXI7CiAgICAgICAgICB0aGlzLiNjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgICB0aGlzLiNjb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFya2VkQ29udGVudCIpOwogICAgICAgICAgaWYgKGl0ZW0uaWQpIHsKICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLnNldEF0dHJpYnV0ZSgiaWQiLCBgJHtpdGVtLmlkfWApOwogICAgICAgICAgfQogICAgICAgICAgcGFyZW50LmFwcGVuZCh0aGlzLiNjb250YWluZXIpOwogICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAiZW5kTWFya2VkQ29udGVudCIpIHsKICAgICAgICAgIHRoaXMuI2NvbnRhaW5lciA9IHRoaXMuI2NvbnRhaW5lci5wYXJlbnROb2RlOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB0ZXh0Q29udGVudEl0ZW1zU3RyLnB1c2goaXRlbS5zdHIpOwogICAgICB0aGlzLiNhcHBlbmRUZXh0KGl0ZW0pOwogICAgfQogIH0KICAjYXBwZW5kVGV4dChnZW9tKSB7CiAgICBjb25zdCB0ZXh0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgY29uc3QgdGV4dERpdlByb3BlcnRpZXMgPSB7CiAgICAgIGFuZ2xlOiAwLAogICAgICBjYW52YXNXaWR0aDogMCwKICAgICAgaGFzVGV4dDogZ2VvbS5zdHIgIT09ICIiLAogICAgICBoYXNFT0w6IGdlb20uaGFzRU9MLAogICAgICBmb250U2l6ZTogMAogICAgfTsKICAgIHRoaXMuI3RleHREaXZzLnB1c2godGV4dERpdik7CiAgICBjb25zdCB0eCA9IFV0aWwudHJhbnNmb3JtKHRoaXMuI3RyYW5zZm9ybSwgZ2VvbS50cmFuc2Zvcm0pOwogICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih0eFsxXSwgdHhbMF0pOwogICAgY29uc3Qgc3R5bGUgPSB0aGlzLiNzdHlsZUNhY2hlW2dlb20uZm9udE5hbWVdOwogICAgaWYgKHN0eWxlLnZlcnRpY2FsKSB7CiAgICAgIGFuZ2xlICs9IE1hdGguUEkgLyAyOwogICAgfQogICAgbGV0IGZvbnRGYW1pbHkgPSB0aGlzLiNmb250SW5zcGVjdG9yRW5hYmxlZCAmJiBzdHlsZS5mb250U3Vic3RpdHV0aW9uIHx8IHN0eWxlLmZvbnRGYW1pbHk7CiAgICBmb250RmFtaWx5ID0gVGV4dExheWVyLmZvbnRGYW1pbHlNYXAuZ2V0KGZvbnRGYW1pbHkpIHx8IGZvbnRGYW1pbHk7CiAgICBjb25zdCBmb250SGVpZ2h0ID0gTWF0aC5oeXBvdCh0eFsyXSwgdHhbM10pOwogICAgY29uc3QgZm9udEFzY2VudCA9IGZvbnRIZWlnaHQgKiBUZXh0TGF5ZXIuI2dldEFzY2VudChmb250RmFtaWx5LCBzdHlsZSwgdGhpcy4jbGFuZyk7CiAgICBsZXQgbGVmdCwgdG9wOwogICAgaWYgKGFuZ2xlID09PSAwKSB7CiAgICAgIGxlZnQgPSB0eFs0XTsKICAgICAgdG9wID0gdHhbNV0gLSBmb250QXNjZW50OwogICAgfSBlbHNlIHsKICAgICAgbGVmdCA9IHR4WzRdICsgZm9udEFzY2VudCAqIE1hdGguc2luKGFuZ2xlKTsKICAgICAgdG9wID0gdHhbNV0gLSBmb250QXNjZW50ICogTWF0aC5jb3MoYW5nbGUpOwogICAgfQogICAgY29uc3Qgc2NhbGVGYWN0b3JTdHIgPSAiY2FsYyh2YXIoLS10b3RhbC1zY2FsZS1mYWN0b3IpICoiOwogICAgY29uc3QgZGl2U3R5bGUgPSB0ZXh0RGl2LnN0eWxlOwogICAgaWYgKHRoaXMuI2NvbnRhaW5lciA9PT0gdGhpcy4jcm9vdENvbnRhaW5lcikgewogICAgICBkaXZTdHlsZS5sZWZ0ID0gYCR7KDEwMCAqIGxlZnQgLyB0aGlzLiNwYWdlV2lkdGgpLnRvRml4ZWQoMil9JWA7CiAgICAgIGRpdlN0eWxlLnRvcCA9IGAkeygxMDAgKiB0b3AgLyB0aGlzLiNwYWdlSGVpZ2h0KS50b0ZpeGVkKDIpfSVgOwogICAgfSBlbHNlIHsKICAgICAgZGl2U3R5bGUubGVmdCA9IGAke3NjYWxlRmFjdG9yU3RyfSR7bGVmdC50b0ZpeGVkKDIpfXB4KWA7CiAgICAgIGRpdlN0eWxlLnRvcCA9IGAke3NjYWxlRmFjdG9yU3RyfSR7dG9wLnRvRml4ZWQoMil9cHgpYDsKICAgIH0KICAgIGRpdlN0eWxlLmZvbnRTaXplID0gYCR7c2NhbGVGYWN0b3JTdHJ9JHsoVGV4dExheWVyLiNtaW5Gb250U2l6ZSAqIGZvbnRIZWlnaHQpLnRvRml4ZWQoMil9cHgpYDsKICAgIGRpdlN0eWxlLmZvbnRGYW1pbHkgPSBmb250RmFtaWx5OwogICAgdGV4dERpdlByb3BlcnRpZXMuZm9udFNpemUgPSBmb250SGVpZ2h0OwogICAgdGV4dERpdi5zZXRBdHRyaWJ1dGUoInJvbGUiLCAicHJlc2VudGF0aW9uIik7CiAgICB0ZXh0RGl2LnRleHRDb250ZW50ID0gZ2VvbS5zdHI7CiAgICB0ZXh0RGl2LmRpciA9IGdlb20uZGlyOwogICAgaWYgKHRoaXMuI2ZvbnRJbnNwZWN0b3JFbmFibGVkKSB7CiAgICAgIHRleHREaXYuZGF0YXNldC5mb250TmFtZSA9IHN0eWxlLmZvbnRTdWJzdGl0dXRpb25Mb2FkZWROYW1lIHx8IGdlb20uZm9udE5hbWU7CiAgICB9CiAgICBpZiAoYW5nbGUgIT09IDApIHsKICAgICAgdGV4dERpdlByb3BlcnRpZXMuYW5nbGUgPSBhbmdsZSAqICgxODAgLyBNYXRoLlBJKTsKICAgIH0KICAgIGxldCBzaG91bGRTY2FsZVRleHQgPSBmYWxzZTsKICAgIGlmIChnZW9tLnN0ci5sZW5ndGggPiAxKSB7CiAgICAgIHNob3VsZFNjYWxlVGV4dCA9IHRydWU7CiAgICB9IGVsc2UgaWYgKGdlb20uc3RyICE9PSAiICIgJiYgZ2VvbS50cmFuc2Zvcm1bMF0gIT09IGdlb20udHJhbnNmb3JtWzNdKSB7CiAgICAgIGNvbnN0IGFic1NjYWxlWCA9IE1hdGguYWJzKGdlb20udHJhbnNmb3JtWzBdKSwKICAgICAgICBhYnNTY2FsZVkgPSBNYXRoLmFicyhnZW9tLnRyYW5zZm9ybVszXSk7CiAgICAgIGlmIChhYnNTY2FsZVggIT09IGFic1NjYWxlWSAmJiBNYXRoLm1heChhYnNTY2FsZVgsIGFic1NjYWxlWSkgLyBNYXRoLm1pbihhYnNTY2FsZVgsIGFic1NjYWxlWSkgPiAxLjUpIHsKICAgICAgICBzaG91bGRTY2FsZVRleHQgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoc2hvdWxkU2NhbGVUZXh0KSB7CiAgICAgIHRleHREaXZQcm9wZXJ0aWVzLmNhbnZhc1dpZHRoID0gc3R5bGUudmVydGljYWwgPyBnZW9tLmhlaWdodCA6IGdlb20ud2lkdGg7CiAgICB9CiAgICB0aGlzLiN0ZXh0RGl2UHJvcGVydGllcy5zZXQodGV4dERpdiwgdGV4dERpdlByb3BlcnRpZXMpOwogICAgdGhpcy4jbGF5b3V0VGV4dFBhcmFtcy5kaXYgPSB0ZXh0RGl2OwogICAgdGhpcy4jbGF5b3V0VGV4dFBhcmFtcy5wcm9wZXJ0aWVzID0gdGV4dERpdlByb3BlcnRpZXM7CiAgICB0aGlzLiNsYXlvdXQodGhpcy4jbGF5b3V0VGV4dFBhcmFtcyk7CiAgICBpZiAodGV4dERpdlByb3BlcnRpZXMuaGFzVGV4dCkgewogICAgICB0aGlzLiNjb250YWluZXIuYXBwZW5kKHRleHREaXYpOwogICAgfQogICAgaWYgKHRleHREaXZQcm9wZXJ0aWVzLmhhc0VPTCkgewogICAgICBjb25zdCBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIik7CiAgICAgIGJyLnNldEF0dHJpYnV0ZSgicm9sZSIsICJwcmVzZW50YXRpb24iKTsKICAgICAgdGhpcy4jY29udGFpbmVyLmFwcGVuZChicik7CiAgICB9CiAgfQogICNsYXlvdXQocGFyYW1zKSB7CiAgICBjb25zdCB7CiAgICAgIGRpdiwKICAgICAgcHJvcGVydGllcywKICAgICAgY3R4CiAgICB9ID0gcGFyYW1zOwogICAgY29uc3QgewogICAgICBzdHlsZQogICAgfSA9IGRpdjsKICAgIGxldCB0cmFuc2Zvcm0gPSAiIjsKICAgIGlmIChUZXh0TGF5ZXIuI21pbkZvbnRTaXplID4gMSkgewogICAgICB0cmFuc2Zvcm0gPSBgc2NhbGUoJHsxIC8gVGV4dExheWVyLiNtaW5Gb250U2l6ZX0pYDsKICAgIH0KICAgIGlmIChwcm9wZXJ0aWVzLmNhbnZhc1dpZHRoICE9PSAwICYmIHByb3BlcnRpZXMuaGFzVGV4dCkgewogICAgICBjb25zdCB7CiAgICAgICAgZm9udEZhbWlseQogICAgICB9ID0gc3R5bGU7CiAgICAgIGNvbnN0IHsKICAgICAgICBjYW52YXNXaWR0aCwKICAgICAgICBmb250U2l6ZQogICAgICB9ID0gcHJvcGVydGllczsKICAgICAgVGV4dExheWVyLiNlbnN1cmVDdHhGb250KGN0eCwgZm9udFNpemUgKiB0aGlzLiNzY2FsZSwgZm9udEZhbWlseSk7CiAgICAgIGNvbnN0IHsKICAgICAgICB3aWR0aAogICAgICB9ID0gY3R4Lm1lYXN1cmVUZXh0KGRpdi50ZXh0Q29udGVudCk7CiAgICAgIGlmICh3aWR0aCA+IDApIHsKICAgICAgICB0cmFuc2Zvcm0gPSBgc2NhbGVYKCR7Y2FudmFzV2lkdGggKiB0aGlzLiNzY2FsZSAvIHdpZHRofSkgJHt0cmFuc2Zvcm19YDsKICAgICAgfQogICAgfQogICAgaWYgKHByb3BlcnRpZXMuYW5nbGUgIT09IDApIHsKICAgICAgdHJhbnNmb3JtID0gYHJvdGF0ZSgke3Byb3BlcnRpZXMuYW5nbGV9ZGVnKSAke3RyYW5zZm9ybX1gOwogICAgfQogICAgaWYgKHRyYW5zZm9ybS5sZW5ndGggPiAwKSB7CiAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKICAgIH0KICB9CiAgc3RhdGljIGNsZWFudXAoKSB7CiAgICBpZiAodGhpcy4jcGVuZGluZ1RleHRMYXllcnMuc2l6ZSA+IDApIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jYXNjZW50Q2FjaGUuY2xlYXIoKTsKICAgIGZvciAoY29uc3QgewogICAgICBjYW52YXMKICAgIH0gb2YgdGhpcy4jY2FudmFzQ29udGV4dHMudmFsdWVzKCkpIHsKICAgICAgY2FudmFzLnJlbW92ZSgpOwogICAgfQogICAgdGhpcy4jY2FudmFzQ29udGV4dHMuY2xlYXIoKTsKICB9CiAgc3RhdGljICNnZXRDdHgobGFuZyA9IG51bGwpIHsKICAgIGxldCBjdHggPSB0aGlzLiNjYW52YXNDb250ZXh0cy5nZXQobGFuZyB8fD0gIiIpOwogICAgaWYgKCFjdHgpIHsKICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICAgIGNhbnZhcy5jbGFzc05hbWUgPSAiaGlkZGVuQ2FudmFzRWxlbWVudCI7CiAgICAgIGNhbnZhcy5sYW5nID0gbGFuZzsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY2FudmFzKTsKICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIiwgewogICAgICAgIGFscGhhOiBmYWxzZSwKICAgICAgICB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUKICAgICAgfSk7CiAgICAgIHRoaXMuI2NhbnZhc0NvbnRleHRzLnNldChsYW5nLCBjdHgpOwogICAgICB0aGlzLiNjYW52YXNDdHhGb250cy5zZXQoY3R4LCB7CiAgICAgICAgc2l6ZTogMCwKICAgICAgICBmYW1pbHk6ICIiCiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIGN0eDsKICB9CiAgc3RhdGljICNlbnN1cmVDdHhGb250KGN0eCwgc2l6ZSwgZmFtaWx5KSB7CiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNjYW52YXNDdHhGb250cy5nZXQoY3R4KTsKICAgIGlmIChzaXplID09PSBjYWNoZWQuc2l6ZSAmJiBmYW1pbHkgPT09IGNhY2hlZC5mYW1pbHkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY3R4LmZvbnQgPSBgJHtzaXplfXB4ICR7ZmFtaWx5fWA7CiAgICBjYWNoZWQuc2l6ZSA9IHNpemU7CiAgICBjYWNoZWQuZmFtaWx5ID0gZmFtaWx5OwogIH0KICBzdGF0aWMgI2Vuc3VyZU1pbkZvbnRTaXplQ29tcHV0ZWQoKSB7CiAgICBpZiAodGhpcy4jbWluRm9udFNpemUgIT09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXYuc3R5bGUub3BhY2l0eSA9IDA7CiAgICBkaXYuc3R5bGUubGluZUhlaWdodCA9IDE7CiAgICBkaXYuc3R5bGUuZm9udFNpemUgPSAiMXB4IjsKICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICBkaXYudGV4dENvbnRlbnQgPSAiWCI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChkaXYpOwogICAgdGhpcy4jbWluRm9udFNpemUgPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0OwogICAgZGl2LnJlbW92ZSgpOwogIH0KICBzdGF0aWMgI2dldEFzY2VudChmb250RmFtaWx5LCBzdHlsZSwgbGFuZykgewogICAgY29uc3QgY2FjaGVkQXNjZW50ID0gdGhpcy4jYXNjZW50Q2FjaGUuZ2V0KGZvbnRGYW1pbHkpOwogICAgaWYgKGNhY2hlZEFzY2VudCkgewogICAgICByZXR1cm4gY2FjaGVkQXNjZW50OwogICAgfQogICAgY29uc3QgY3R4ID0gdGhpcy4jZ2V0Q3R4KGxhbmcpOwogICAgY3R4LmNhbnZhcy53aWR0aCA9IGN0eC5jYW52YXMuaGVpZ2h0ID0gREVGQVVMVF9GT05UX1NJWkU7CiAgICB0aGlzLiNlbnN1cmVDdHhGb250KGN0eCwgREVGQVVMVF9GT05UX1NJWkUsIGZvbnRGYW1pbHkpOwogICAgY29uc3QgbWV0cmljcyA9IGN0eC5tZWFzdXJlVGV4dCgiIik7CiAgICBjb25zdCBhc2NlbnQgPSBtZXRyaWNzLmZvbnRCb3VuZGluZ0JveEFzY2VudDsKICAgIGNvbnN0IGRlc2NlbnQgPSBNYXRoLmFicyhtZXRyaWNzLmZvbnRCb3VuZGluZ0JveERlc2NlbnQpOwogICAgY3R4LmNhbnZhcy53aWR0aCA9IGN0eC5jYW52YXMuaGVpZ2h0ID0gMDsKICAgIGxldCByYXRpbyA9IDAuODsKICAgIGlmIChhc2NlbnQpIHsKICAgICAgcmF0aW8gPSBhc2NlbnQgLyAoYXNjZW50ICsgZGVzY2VudCk7CiAgICB9IGVsc2UgewogICAgICBpZiAodXRpbF9GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc0ZpcmVmb3gpIHsKICAgICAgICB3YXJuKCJFbmFibGUgdGhlIGBkb20udGV4dE1ldHJpY3MuZm9udEJvdW5kaW5nQm94LmVuYWJsZWRgIHByZWZlcmVuY2UgIiArICJpbiBgYWJvdXQ6Y29uZmlnYCB0byBpbXByb3ZlIFRleHRMYXllciByZW5kZXJpbmcuIik7CiAgICAgIH0KICAgICAgaWYgKHN0eWxlLmFzY2VudCkgewogICAgICAgIHJhdGlvID0gc3R5bGUuYXNjZW50OwogICAgICB9IGVsc2UgaWYgKHN0eWxlLmRlc2NlbnQpIHsKICAgICAgICByYXRpbyA9IDEgKyBzdHlsZS5kZXNjZW50OwogICAgICB9CiAgICB9CiAgICB0aGlzLiNhc2NlbnRDYWNoZS5zZXQoZm9udEZhbWlseSwgcmF0aW8pOwogICAgcmV0dXJuIHJhdGlvOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvYXBpLmpzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjb25zdCBSRU5ERVJJTkdfQ0FOQ0VMTEVEX1RJTUVPVVQgPSAxMDA7CmZ1bmN0aW9uIGdldERvY3VtZW50KHNyYyA9IHt9KSB7CiAgaWYgKHR5cGVvZiBzcmMgPT09ICJzdHJpbmciIHx8IHNyYyBpbnN0YW5jZW9mIFVSTCkgewogICAgc3JjID0gewogICAgICB1cmw6IHNyYwogICAgfTsKICB9IGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhzcmMpKSB7CiAgICBzcmMgPSB7CiAgICAgIGRhdGE6IHNyYwogICAgfTsKICB9CiAgY29uc3QgdGFzayA9IG5ldyBQREZEb2N1bWVudExvYWRpbmdUYXNrKCk7CiAgY29uc3QgewogICAgZG9jSWQKICB9ID0gdGFzazsKICBjb25zdCB1cmwgPSBzcmMudXJsID8gZ2V0VXJsUHJvcChzcmMudXJsKSA6IG51bGw7CiAgY29uc3QgZGF0YSA9IHNyYy5kYXRhID8gZ2V0RGF0YVByb3Aoc3JjLmRhdGEpIDogbnVsbDsKICBjb25zdCBodHRwSGVhZGVycyA9IHNyYy5odHRwSGVhZGVycyB8fCBudWxsOwogIGNvbnN0IHdpdGhDcmVkZW50aWFscyA9IHNyYy53aXRoQ3JlZGVudGlhbHMgPT09IHRydWU7CiAgY29uc3QgcGFzc3dvcmQgPSBzcmMucGFzc3dvcmQgPz8gbnVsbDsKICBjb25zdCByYW5nZVRyYW5zcG9ydCA9IHNyYy5yYW5nZSBpbnN0YW5jZW9mIFBERkRhdGFSYW5nZVRyYW5zcG9ydCA/IHNyYy5yYW5nZSA6IG51bGw7CiAgY29uc3QgcmFuZ2VDaHVua1NpemUgPSBOdW1iZXIuaXNJbnRlZ2VyKHNyYy5yYW5nZUNodW5rU2l6ZSkgJiYgc3JjLnJhbmdlQ2h1bmtTaXplID4gMCA/IHNyYy5yYW5nZUNodW5rU2l6ZSA6IDIgKiogMTY7CiAgbGV0IHdvcmtlciA9IHNyYy53b3JrZXIgaW5zdGFuY2VvZiBQREZXb3JrZXIgPyBzcmMud29ya2VyIDogbnVsbDsKICBjb25zdCB2ZXJib3NpdHkgPSBzcmMudmVyYm9zaXR5OwogIGNvbnN0IGRvY0Jhc2VVcmwgPSB0eXBlb2Ygc3JjLmRvY0Jhc2VVcmwgPT09ICJzdHJpbmciICYmICFpc0RhdGFTY2hlbWUoc3JjLmRvY0Jhc2VVcmwpID8gc3JjLmRvY0Jhc2VVcmwgOiBudWxsOwogIGNvbnN0IGNNYXBVcmwgPSBnZXRGYWN0b3J5VXJsUHJvcChzcmMuY01hcFVybCk7CiAgY29uc3QgY01hcFBhY2tlZCA9IHNyYy5jTWFwUGFja2VkICE9PSBmYWxzZTsKICBjb25zdCBDTWFwUmVhZGVyRmFjdG9yeSA9IHNyYy5DTWFwUmVhZGVyRmFjdG9yeSB8fCAoaXNOb2RlSlMgPyBOb2RlQ01hcFJlYWRlckZhY3RvcnkgOiBET01DTWFwUmVhZGVyRmFjdG9yeSk7CiAgY29uc3QgaWNjVXJsID0gZ2V0RmFjdG9yeVVybFByb3Aoc3JjLmljY1VybCk7CiAgY29uc3Qgc3RhbmRhcmRGb250RGF0YVVybCA9IGdldEZhY3RvcnlVcmxQcm9wKHNyYy5zdGFuZGFyZEZvbnREYXRhVXJsKTsKICBjb25zdCBTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IHNyYy5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSB8fCAoaXNOb2RlSlMgPyBOb2RlU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgOiBET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSk7CiAgY29uc3Qgd2FzbVVybCA9IGdldEZhY3RvcnlVcmxQcm9wKHNyYy53YXNtVXJsKTsKICBjb25zdCBXYXNtRmFjdG9yeSA9IHNyYy5XYXNtRmFjdG9yeSB8fCAoaXNOb2RlSlMgPyBOb2RlV2FzbUZhY3RvcnkgOiBET01XYXNtRmFjdG9yeSk7CiAgY29uc3QgaWdub3JlRXJyb3JzID0gc3JjLnN0b3BBdEVycm9ycyAhPT0gdHJ1ZTsKICBjb25zdCBtYXhJbWFnZVNpemUgPSBOdW1iZXIuaXNJbnRlZ2VyKHNyYy5tYXhJbWFnZVNpemUpICYmIHNyYy5tYXhJbWFnZVNpemUgPiAtMSA/IHNyYy5tYXhJbWFnZVNpemUgOiAtMTsKICBjb25zdCBpc0V2YWxTdXBwb3J0ZWQgPSBzcmMuaXNFdmFsU3VwcG9ydGVkICE9PSBmYWxzZTsKICBjb25zdCBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCA9IHR5cGVvZiBzcmMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQgPT09ICJib29sZWFuIiA/IHNyYy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCA6ICFpc05vZGVKUzsKICBjb25zdCBpc0ltYWdlRGVjb2RlclN1cHBvcnRlZCA9IHR5cGVvZiBzcmMuaXNJbWFnZURlY29kZXJTdXBwb3J0ZWQgPT09ICJib29sZWFuIiA/IHNyYy5pc0ltYWdlRGVjb2RlclN1cHBvcnRlZCA6ICFpc05vZGVKUyAmJiAodXRpbF9GZWF0dXJlVGVzdC5wbGF0Zm9ybS5pc0ZpcmVmb3ggfHwgIWdsb2JhbFRoaXMuY2hyb21lKTsKICBjb25zdCBjYW52YXNNYXhBcmVhSW5CeXRlcyA9IE51bWJlci5pc0ludGVnZXIoc3JjLmNhbnZhc01heEFyZWFJbkJ5dGVzKSA/IHNyYy5jYW52YXNNYXhBcmVhSW5CeXRlcyA6IC0xOwogIGNvbnN0IGRpc2FibGVGb250RmFjZSA9IHR5cGVvZiBzcmMuZGlzYWJsZUZvbnRGYWNlID09PSAiYm9vbGVhbiIgPyBzcmMuZGlzYWJsZUZvbnRGYWNlIDogaXNOb2RlSlM7CiAgY29uc3QgZm9udEV4dHJhUHJvcGVydGllcyA9IHNyYy5mb250RXh0cmFQcm9wZXJ0aWVzID09PSB0cnVlOwogIGNvbnN0IGVuYWJsZVhmYSA9IHNyYy5lbmFibGVYZmEgPT09IHRydWU7CiAgY29uc3Qgb3duZXJEb2N1bWVudCA9IHNyYy5vd25lckRvY3VtZW50IHx8IGdsb2JhbFRoaXMuZG9jdW1lbnQ7CiAgY29uc3QgZGlzYWJsZVJhbmdlID0gc3JjLmRpc2FibGVSYW5nZSA9PT0gdHJ1ZTsKICBjb25zdCBkaXNhYmxlU3RyZWFtID0gc3JjLmRpc2FibGVTdHJlYW0gPT09IHRydWU7CiAgY29uc3QgZGlzYWJsZUF1dG9GZXRjaCA9IHNyYy5kaXNhYmxlQXV0b0ZldGNoID09PSB0cnVlOwogIGNvbnN0IHBkZkJ1ZyA9IHNyYy5wZGZCdWcgPT09IHRydWU7CiAgY29uc3QgQ2FudmFzRmFjdG9yeSA9IHNyYy5DYW52YXNGYWN0b3J5IHx8IChpc05vZGVKUyA/IE5vZGVDYW52YXNGYWN0b3J5IDogRE9NQ2FudmFzRmFjdG9yeSk7CiAgY29uc3QgRmlsdGVyRmFjdG9yeSA9IHNyYy5GaWx0ZXJGYWN0b3J5IHx8IChpc05vZGVKUyA/IE5vZGVGaWx0ZXJGYWN0b3J5IDogRE9NRmlsdGVyRmFjdG9yeSk7CiAgY29uc3QgZW5hYmxlSFdBID0gc3JjLmVuYWJsZUhXQSA9PT0gdHJ1ZTsKICBjb25zdCB1c2VXYXNtID0gc3JjLnVzZVdhc20gIT09IGZhbHNlOwogIGNvbnN0IGxlbmd0aCA9IHJhbmdlVHJhbnNwb3J0ID8gcmFuZ2VUcmFuc3BvcnQubGVuZ3RoIDogc3JjLmxlbmd0aCA/PyBOYU47CiAgY29uc3QgdXNlU3lzdGVtRm9udHMgPSB0eXBlb2Ygc3JjLnVzZVN5c3RlbUZvbnRzID09PSAiYm9vbGVhbiIgPyBzcmMudXNlU3lzdGVtRm9udHMgOiAhaXNOb2RlSlMgJiYgIWRpc2FibGVGb250RmFjZTsKICBjb25zdCB1c2VXb3JrZXJGZXRjaCA9IHR5cGVvZiBzcmMudXNlV29ya2VyRmV0Y2ggPT09ICJib29sZWFuIiA/IHNyYy51c2VXb3JrZXJGZXRjaCA6ICEhKENNYXBSZWFkZXJGYWN0b3J5ID09PSBET01DTWFwUmVhZGVyRmFjdG9yeSAmJiBTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9PT0gRE9NU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgJiYgV2FzbUZhY3RvcnkgPT09IERPTVdhc21GYWN0b3J5ICYmIGNNYXBVcmwgJiYgc3RhbmRhcmRGb250RGF0YVVybCAmJiB3YXNtVXJsICYmIGlzVmFsaWRGZXRjaFVybChjTWFwVXJsLCBkb2N1bWVudC5iYXNlVVJJKSAmJiBpc1ZhbGlkRmV0Y2hVcmwoc3RhbmRhcmRGb250RGF0YVVybCwgZG9jdW1lbnQuYmFzZVVSSSkgJiYgaXNWYWxpZEZldGNoVXJsKHdhc21VcmwsIGRvY3VtZW50LmJhc2VVUkkpKTsKICBjb25zdCBzdHlsZUVsZW1lbnQgPSBudWxsOwogIHNldFZlcmJvc2l0eUxldmVsKHZlcmJvc2l0eSk7CiAgY29uc3QgdHJhbnNwb3J0RmFjdG9yeSA9IHsKICAgIGNhbnZhc0ZhY3Rvcnk6IG5ldyBDYW52YXNGYWN0b3J5KHsKICAgICAgb3duZXJEb2N1bWVudCwKICAgICAgZW5hYmxlSFdBCiAgICB9KSwKICAgIGZpbHRlckZhY3Rvcnk6IG5ldyBGaWx0ZXJGYWN0b3J5KHsKICAgICAgZG9jSWQsCiAgICAgIG93bmVyRG9jdW1lbnQKICAgIH0pLAogICAgY01hcFJlYWRlckZhY3Rvcnk6IHVzZVdvcmtlckZldGNoID8gbnVsbCA6IG5ldyBDTWFwUmVhZGVyRmFjdG9yeSh7CiAgICAgIGJhc2VVcmw6IGNNYXBVcmwsCiAgICAgIGlzQ29tcHJlc3NlZDogY01hcFBhY2tlZAogICAgfSksCiAgICBzdGFuZGFyZEZvbnREYXRhRmFjdG9yeTogdXNlV29ya2VyRmV0Y2ggPyBudWxsIDogbmV3IFN0YW5kYXJkRm9udERhdGFGYWN0b3J5KHsKICAgICAgYmFzZVVybDogc3RhbmRhcmRGb250RGF0YVVybAogICAgfSksCiAgICB3YXNtRmFjdG9yeTogdXNlV29ya2VyRmV0Y2ggPyBudWxsIDogbmV3IFdhc21GYWN0b3J5KHsKICAgICAgYmFzZVVybDogd2FzbVVybAogICAgfSkKICB9OwogIGlmICghd29ya2VyKSB7CiAgICB3b3JrZXIgPSBQREZXb3JrZXIuY3JlYXRlKHsKICAgICAgdmVyYm9zaXR5LAogICAgICBwb3J0OiBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnQKICAgIH0pOwogICAgdGFzay5fd29ya2VyID0gd29ya2VyOwogIH0KICBjb25zdCBkb2NQYXJhbXMgPSB7CiAgICBkb2NJZCwKICAgIGFwaVZlcnNpb246ICI1LjQuMzk0IiwKICAgIGRhdGEsCiAgICBwYXNzd29yZCwKICAgIGRpc2FibGVBdXRvRmV0Y2gsCiAgICByYW5nZUNodW5rU2l6ZSwKICAgIGxlbmd0aCwKICAgIGRvY0Jhc2VVcmwsCiAgICBlbmFibGVYZmEsCiAgICBldmFsdWF0b3JPcHRpb25zOiB7CiAgICAgIG1heEltYWdlU2l6ZSwKICAgICAgZGlzYWJsZUZvbnRGYWNlLAogICAgICBpZ25vcmVFcnJvcnMsCiAgICAgIGlzRXZhbFN1cHBvcnRlZCwKICAgICAgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsCiAgICAgIGlzSW1hZ2VEZWNvZGVyU3VwcG9ydGVkLAogICAgICBjYW52YXNNYXhBcmVhSW5CeXRlcywKICAgICAgZm9udEV4dHJhUHJvcGVydGllcywKICAgICAgdXNlU3lzdGVtRm9udHMsCiAgICAgIHVzZVdhc20sCiAgICAgIHVzZVdvcmtlckZldGNoLAogICAgICBjTWFwVXJsLAogICAgICBpY2NVcmwsCiAgICAgIHN0YW5kYXJkRm9udERhdGFVcmwsCiAgICAgIHdhc21VcmwKICAgIH0KICB9OwogIGNvbnN0IHRyYW5zcG9ydFBhcmFtcyA9IHsKICAgIG93bmVyRG9jdW1lbnQsCiAgICBwZGZCdWcsCiAgICBzdHlsZUVsZW1lbnQsCiAgICBsb2FkaW5nUGFyYW1zOiB7CiAgICAgIGRpc2FibGVBdXRvRmV0Y2gsCiAgICAgIGVuYWJsZVhmYQogICAgfQogIH07CiAgd29ya2VyLnByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7CiAgICBpZiAodGFzay5kZXN0cm95ZWQpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJMb2FkaW5nIGFib3J0ZWQiKTsKICAgIH0KICAgIGlmICh3b3JrZXIuZGVzdHJveWVkKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQiKTsKICAgIH0KICAgIGNvbnN0IHdvcmtlcklkUHJvbWlzZSA9IHdvcmtlci5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldERvY1JlcXVlc3QiLCBkb2NQYXJhbXMsIGRhdGEgPyBbZGF0YS5idWZmZXJdIDogbnVsbCk7CiAgICBsZXQgbmV0d29ya1N0cmVhbTsKICAgIGlmIChyYW5nZVRyYW5zcG9ydCkgewogICAgICBuZXR3b3JrU3RyZWFtID0gbmV3IFBERkRhdGFUcmFuc3BvcnRTdHJlYW0ocmFuZ2VUcmFuc3BvcnQsIHsKICAgICAgICBkaXNhYmxlUmFuZ2UsCiAgICAgICAgZGlzYWJsZVN0cmVhbQogICAgICB9KTsKICAgIH0gZWxzZSBpZiAoIWRhdGEpIHsKICAgICAgaWYgKCF1cmwpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImdldERvY3VtZW50IC0gbm8gYHVybGAgcGFyYW1ldGVyIHByb3ZpZGVkLiIpOwogICAgICB9CiAgICAgIGNvbnN0IE5ldHdvcmtTdHJlYW0gPSBpc1ZhbGlkRmV0Y2hVcmwodXJsKSA/IFBERkZldGNoU3RyZWFtIDogaXNOb2RlSlMgPyBQREZOb2RlU3RyZWFtIDogUERGTmV0d29ya1N0cmVhbTsKICAgICAgbmV0d29ya1N0cmVhbSA9IG5ldyBOZXR3b3JrU3RyZWFtKHsKICAgICAgICB1cmwsCiAgICAgICAgbGVuZ3RoLAogICAgICAgIGh0dHBIZWFkZXJzLAogICAgICAgIHdpdGhDcmVkZW50aWFscywKICAgICAgICByYW5nZUNodW5rU2l6ZSwKICAgICAgICBkaXNhYmxlUmFuZ2UsCiAgICAgICAgZGlzYWJsZVN0cmVhbQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiB3b3JrZXJJZFByb21pc2UudGhlbih3b3JrZXJJZCA9PiB7CiAgICAgIGlmICh0YXNrLmRlc3Ryb3llZCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7CiAgICAgIH0KICAgICAgaWYgKHdvcmtlci5kZXN0cm95ZWQpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIik7CiAgICAgIH0KICAgICAgY29uc3QgbWVzc2FnZUhhbmRsZXIgPSBuZXcgTWVzc2FnZUhhbmRsZXIoZG9jSWQsIHdvcmtlcklkLCB3b3JrZXIucG9ydCk7CiAgICAgIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBXb3JrZXJUcmFuc3BvcnQobWVzc2FnZUhhbmRsZXIsIHRhc2ssIG5ldHdvcmtTdHJlYW0sIHRyYW5zcG9ydFBhcmFtcywgdHJhbnNwb3J0RmFjdG9yeSwgZW5hYmxlSFdBKTsKICAgICAgdGFzay5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0OwogICAgICBtZXNzYWdlSGFuZGxlci5zZW5kKCJSZWFkeSIsIG51bGwpOwogICAgfSk7CiAgfSkuY2F0Y2godGFzay5fY2FwYWJpbGl0eS5yZWplY3QpOwogIHJldHVybiB0YXNrOwp9CmNsYXNzIFBERkRvY3VtZW50TG9hZGluZ1Rhc2sgewogIHN0YXRpYyAjZG9jSWQgPSAwOwogIF9jYXBhYmlsaXR5ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgX3RyYW5zcG9ydCA9IG51bGw7CiAgX3dvcmtlciA9IG51bGw7CiAgZG9jSWQgPSBgZCR7UERGRG9jdW1lbnRMb2FkaW5nVGFzay4jZG9jSWQrK31gOwogIGRlc3Ryb3llZCA9IGZhbHNlOwogIG9uUGFzc3dvcmQgPSBudWxsOwogIG9uUHJvZ3Jlc3MgPSBudWxsOwogIGdldCBwcm9taXNlKCkgewogICAgcmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZTsKICB9CiAgYXN5bmMgZGVzdHJveSgpIHsKICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgIHRyeSB7CiAgICAgIGlmICh0aGlzLl93b3JrZXI/LnBvcnQpIHsKICAgICAgICB0aGlzLl93b3JrZXIuX3BlbmRpbmdEZXN0cm95ID0gdHJ1ZTsKICAgICAgfQogICAgICBhd2FpdCB0aGlzLl90cmFuc3BvcnQ/LmRlc3Ryb3koKTsKICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmICh0aGlzLl93b3JrZXI/LnBvcnQpIHsKICAgICAgICBkZWxldGUgdGhpcy5fd29ya2VyLl9wZW5kaW5nRGVzdHJveTsKICAgICAgfQogICAgICB0aHJvdyBleDsKICAgIH0KICAgIHRoaXMuX3RyYW5zcG9ydCA9IG51bGw7CiAgICB0aGlzLl93b3JrZXI/LmRlc3Ryb3koKTsKICAgIHRoaXMuX3dvcmtlciA9IG51bGw7CiAgfQogIGFzeW5jIGdldERhdGEoKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERhdGEoKTsKICB9Cn0KY2xhc3MgUERGRGF0YVJhbmdlVHJhbnNwb3J0IHsKICAjY2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICNwcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcnMgPSBbXTsKICAjcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzID0gW107CiAgI3Byb2dyZXNzTGlzdGVuZXJzID0gW107CiAgI3JhbmdlTGlzdGVuZXJzID0gW107CiAgY29uc3RydWN0b3IobGVuZ3RoLCBpbml0aWFsRGF0YSwgcHJvZ3Jlc3NpdmVEb25lID0gZmFsc2UsIGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lID0gbnVsbCkgewogICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7CiAgICB0aGlzLmluaXRpYWxEYXRhID0gaW5pdGlhbERhdGE7CiAgICB0aGlzLnByb2dyZXNzaXZlRG9uZSA9IHByb2dyZXNzaXZlRG9uZTsKICAgIHRoaXMuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWUgPSBjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZTsKICB9CiAgYWRkUmFuZ2VMaXN0ZW5lcihsaXN0ZW5lcikgewogICAgdGhpcy4jcmFuZ2VMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7CiAgfQogIGFkZFByb2dyZXNzTGlzdGVuZXIobGlzdGVuZXIpIHsKICAgIHRoaXMuI3Byb2dyZXNzTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpOwogIH0KICBhZGRQcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcihsaXN0ZW5lcikgewogICAgdGhpcy4jcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpOwogIH0KICBhZGRQcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcihsaXN0ZW5lcikgewogICAgdGhpcy4jcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpOwogIH0KICBvbkRhdGFSYW5nZShiZWdpbiwgY2h1bmspIHsKICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jcmFuZ2VMaXN0ZW5lcnMpIHsKICAgICAgbGlzdGVuZXIoYmVnaW4sIGNodW5rKTsKICAgIH0KICB9CiAgb25EYXRhUHJvZ3Jlc3MobG9hZGVkLCB0b3RhbCkgewogICAgdGhpcy4jY2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4gewogICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuI3Byb2dyZXNzTGlzdGVuZXJzKSB7CiAgICAgICAgbGlzdGVuZXIobG9hZGVkLCB0b3RhbCk7CiAgICAgIH0KICAgIH0pOwogIH0KICBvbkRhdGFQcm9ncmVzc2l2ZVJlYWQoY2h1bmspIHsKICAgIHRoaXMuI2NhcGFiaWxpdHkucHJvbWlzZS50aGVuKCgpID0+IHsKICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLiNwcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnMpIHsKICAgICAgICBsaXN0ZW5lcihjaHVuayk7CiAgICAgIH0KICAgIH0pOwogIH0KICBvbkRhdGFQcm9ncmVzc2l2ZURvbmUoKSB7CiAgICB0aGlzLiNjYXBhYmlsaXR5LnByb21pc2UudGhlbigoKSA9PiB7CiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy4jcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzKSB7CiAgICAgICAgbGlzdGVuZXIoKTsKICAgICAgfQogICAgfSk7CiAgfQogIHRyYW5zcG9ydFJlYWR5KCkgewogICAgdGhpcy4jY2FwYWJpbGl0eS5yZXNvbHZlKCk7CiAgfQogIHJlcXVlc3REYXRhUmFuZ2UoYmVnaW4sIGVuZCkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBQREZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZSIpOwogIH0KICBhYm9ydCgpIHt9Cn0KY2xhc3MgUERGRG9jdW1lbnRQcm94eSB7CiAgY29uc3RydWN0b3IocGRmSW5mbywgdHJhbnNwb3J0KSB7CiAgICB0aGlzLl9wZGZJbmZvID0gcGRmSW5mbzsKICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDsKICB9CiAgZ2V0IGFubm90YXRpb25TdG9yYWdlKCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5hbm5vdGF0aW9uU3RvcmFnZTsKICB9CiAgZ2V0IGNhbnZhc0ZhY3RvcnkoKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmNhbnZhc0ZhY3Rvcnk7CiAgfQogIGdldCBmaWx0ZXJGYWN0b3J5KCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5maWx0ZXJGYWN0b3J5OwogIH0KICBnZXQgbnVtUGFnZXMoKSB7CiAgICByZXR1cm4gdGhpcy5fcGRmSW5mby5udW1QYWdlczsKICB9CiAgZ2V0IGZpbmdlcnByaW50cygpIHsKICAgIHJldHVybiB0aGlzLl9wZGZJbmZvLmZpbmdlcnByaW50czsKICB9CiAgZ2V0IGlzUHVyZVhmYSgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgImlzUHVyZVhmYSIsICEhdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhKTsKICB9CiAgZ2V0IGFsbFhmYUh0bWwoKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhOwogIH0KICBnZXRQYWdlKHBhZ2VOdW1iZXIpIHsKICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZShwYWdlTnVtYmVyKTsKICB9CiAgZ2V0UGFnZUluZGV4KHJlZikgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSW5kZXgocmVmKTsKICB9CiAgZ2V0RGVzdGluYXRpb25zKCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbnMoKTsKICB9CiAgZ2V0RGVzdGluYXRpb24oaWQpIHsKICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb24oaWQpOwogIH0KICBnZXRQYWdlTGFiZWxzKCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlTGFiZWxzKCk7CiAgfQogIGdldFBhZ2VMYXlvdXQoKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYXlvdXQoKTsKICB9CiAgZ2V0UGFnZU1vZGUoKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VNb2RlKCk7CiAgfQogIGdldFZpZXdlclByZWZlcmVuY2VzKCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRWaWV3ZXJQcmVmZXJlbmNlcygpOwogIH0KICBnZXRPcGVuQWN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRPcGVuQWN0aW9uKCk7CiAgfQogIGdldEF0dGFjaG1lbnRzKCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBdHRhY2htZW50cygpOwogIH0KICBnZXRBbm5vdGF0aW9uc0J5VHlwZSh0eXBlcywgcGFnZUluZGV4ZXNUb1NraXApIHsKICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0QW5ub3RhdGlvbnNCeVR5cGUodHlwZXMsIHBhZ2VJbmRleGVzVG9Ta2lwKTsKICB9CiAgZ2V0SlNBY3Rpb25zKCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREb2NKU0FjdGlvbnMoKTsKICB9CiAgZ2V0T3V0bGluZSgpIHsKICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3V0bGluZSgpOwogIH0KICBnZXRPcHRpb25hbENvbnRlbnRDb25maWcoewogICAgaW50ZW50ID0gImRpc3BsYXkiCiAgfSA9IHt9KSB7CiAgICBjb25zdCB7CiAgICAgIHJlbmRlcmluZ0ludGVudAogICAgfSA9IHRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQoaW50ZW50KTsKICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3B0aW9uYWxDb250ZW50Q29uZmlnKHJlbmRlcmluZ0ludGVudCk7CiAgfQogIGdldFBlcm1pc3Npb25zKCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQZXJtaXNzaW9ucygpOwogIH0KICBnZXRNZXRhZGF0YSgpIHsKICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0TWV0YWRhdGEoKTsKICB9CiAgZ2V0TWFya0luZm8oKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE1hcmtJbmZvKCk7CiAgfQogIGdldERhdGEoKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERhdGEoKTsKICB9CiAgc2F2ZURvY3VtZW50KCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zYXZlRG9jdW1lbnQoKTsKICB9CiAgZ2V0RG93bmxvYWRJbmZvKCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnByb21pc2U7CiAgfQogIGNsZWFudXAoa2VlcExvYWRlZEZvbnRzID0gZmFsc2UpIHsKICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuc3RhcnRDbGVhbnVwKGtlZXBMb2FkZWRGb250cyB8fCB0aGlzLmlzUHVyZVhmYSk7CiAgfQogIGRlc3Ryb3koKSB7CiAgICByZXR1cm4gdGhpcy5sb2FkaW5nVGFzay5kZXN0cm95KCk7CiAgfQogIGNhY2hlZFBhZ2VOdW1iZXIocmVmKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmNhY2hlZFBhZ2VOdW1iZXIocmVmKTsKICB9CiAgZ2V0IGxvYWRpbmdQYXJhbXMoKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmxvYWRpbmdQYXJhbXM7CiAgfQogIGdldCBsb2FkaW5nVGFzaygpIHsKICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1Rhc2s7CiAgfQogIGdldEZpZWxkT2JqZWN0cygpIHsKICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RmllbGRPYmplY3RzKCk7CiAgfQogIGhhc0pTQWN0aW9ucygpIHsKICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuaGFzSlNBY3Rpb25zKCk7CiAgfQogIGdldENhbGN1bGF0aW9uT3JkZXJJZHMoKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldENhbGN1bGF0aW9uT3JkZXJJZHMoKTsKICB9Cn0KY2xhc3MgUERGUGFnZVByb3h5IHsKICAjcGVuZGluZ0NsZWFudXAgPSBmYWxzZTsKICBjb25zdHJ1Y3RvcihwYWdlSW5kZXgsIHBhZ2VJbmZvLCB0cmFuc3BvcnQsIHBkZkJ1ZyA9IGZhbHNlKSB7CiAgICB0aGlzLl9wYWdlSW5kZXggPSBwYWdlSW5kZXg7CiAgICB0aGlzLl9wYWdlSW5mbyA9IHBhZ2VJbmZvOwogICAgdGhpcy5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0OwogICAgdGhpcy5fc3RhdHMgPSBwZGZCdWcgPyBuZXcgU3RhdFRpbWVyKCkgOiBudWxsOwogICAgdGhpcy5fcGRmQnVnID0gcGRmQnVnOwogICAgdGhpcy5jb21tb25PYmpzID0gdHJhbnNwb3J0LmNvbW1vbk9ianM7CiAgICB0aGlzLm9ianMgPSBuZXcgUERGT2JqZWN0cygpOwogICAgdGhpcy5faW50ZW50U3RhdGVzID0gbmV3IE1hcCgpOwogICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgIHRoaXMucmVjb3JkZWRCQm94ZXMgPSBudWxsOwogIH0KICBnZXQgcGFnZU51bWJlcigpIHsKICAgIHJldHVybiB0aGlzLl9wYWdlSW5kZXggKyAxOwogIH0KICBnZXQgcm90YXRlKCkgewogICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnJvdGF0ZTsKICB9CiAgZ2V0IHJlZigpIHsKICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby5yZWY7CiAgfQogIGdldCB1c2VyVW5pdCgpIHsKICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby51c2VyVW5pdDsKICB9CiAgZ2V0IHZpZXcoKSB7CiAgICByZXR1cm4gdGhpcy5fcGFnZUluZm8udmlldzsKICB9CiAgZ2V0Vmlld3BvcnQoewogICAgc2NhbGUsCiAgICByb3RhdGlvbiA9IHRoaXMucm90YXRlLAogICAgb2Zmc2V0WCA9IDAsCiAgICBvZmZzZXRZID0gMCwKICAgIGRvbnRGbGlwID0gZmFsc2UKICB9ID0ge30pIHsKICAgIHJldHVybiBuZXcgUGFnZVZpZXdwb3J0KHsKICAgICAgdmlld0JveDogdGhpcy52aWV3LAogICAgICB1c2VyVW5pdDogdGhpcy51c2VyVW5pdCwKICAgICAgc2NhbGUsCiAgICAgIHJvdGF0aW9uLAogICAgICBvZmZzZXRYLAogICAgICBvZmZzZXRZLAogICAgICBkb250RmxpcAogICAgfSk7CiAgfQogIGdldEFubm90YXRpb25zKHsKICAgIGludGVudCA9ICJkaXNwbGF5IgogIH0gPSB7fSkgewogICAgY29uc3QgewogICAgICByZW5kZXJpbmdJbnRlbnQKICAgIH0gPSB0aGlzLl90cmFuc3BvcnQuZ2V0UmVuZGVyaW5nSW50ZW50KGludGVudCk7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEFubm90YXRpb25zKHRoaXMuX3BhZ2VJbmRleCwgcmVuZGVyaW5nSW50ZW50KTsKICB9CiAgZ2V0SlNBY3Rpb25zKCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSlNBY3Rpb25zKHRoaXMuX3BhZ2VJbmRleCk7CiAgfQogIGdldCBmaWx0ZXJGYWN0b3J5KCkgewogICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5maWx0ZXJGYWN0b3J5OwogIH0KICBnZXQgaXNQdXJlWGZhKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiaXNQdXJlWGZhIiwgISF0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpOwogIH0KICBhc3luYyBnZXRYZmEoKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhPy5jaGlsZHJlblt0aGlzLl9wYWdlSW5kZXhdIHx8IG51bGw7CiAgfQogIHJlbmRlcih7CiAgICBjYW52YXNDb250ZXh0LAogICAgY2FudmFzID0gY2FudmFzQ29udGV4dC5jYW52YXMsCiAgICB2aWV3cG9ydCwKICAgIGludGVudCA9ICJkaXNwbGF5IiwKICAgIGFubm90YXRpb25Nb2RlID0gQW5ub3RhdGlvbk1vZGUuRU5BQkxFLAogICAgdHJhbnNmb3JtID0gbnVsbCwKICAgIGJhY2tncm91bmQgPSBudWxsLAogICAgb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSA9IG51bGwsCiAgICBhbm5vdGF0aW9uQ2FudmFzTWFwID0gbnVsbCwKICAgIHBhZ2VDb2xvcnMgPSBudWxsLAogICAgcHJpbnRBbm5vdGF0aW9uU3RvcmFnZSA9IG51bGwsCiAgICBpc0VkaXRpbmcgPSBmYWxzZSwKICAgIHJlY29yZE9wZXJhdGlvbnMgPSBmYWxzZSwKICAgIG9wZXJhdGlvbnNGaWx0ZXIgPSBudWxsCiAgfSkgewogICAgdGhpcy5fc3RhdHM/LnRpbWUoIk92ZXJhbGwiKTsKICAgIGNvbnN0IGludGVudEFyZ3MgPSB0aGlzLl90cmFuc3BvcnQuZ2V0UmVuZGVyaW5nSW50ZW50KGludGVudCwgYW5ub3RhdGlvbk1vZGUsIHByaW50QW5ub3RhdGlvblN0b3JhZ2UsIGlzRWRpdGluZyk7CiAgICBjb25zdCB7CiAgICAgIHJlbmRlcmluZ0ludGVudCwKICAgICAgY2FjaGVLZXkKICAgIH0gPSBpbnRlbnRBcmdzOwogICAgdGhpcy4jcGVuZGluZ0NsZWFudXAgPSBmYWxzZTsKICAgIG9wdGlvbmFsQ29udGVudENvbmZpZ1Byb21pc2UgfHw9IHRoaXMuX3RyYW5zcG9ydC5nZXRPcHRpb25hbENvbnRlbnRDb25maWcocmVuZGVyaW5nSW50ZW50KTsKICAgIGxldCBpbnRlbnRTdGF0ZSA9IHRoaXMuX2ludGVudFN0YXRlcy5nZXQoY2FjaGVLZXkpOwogICAgaWYgKCFpbnRlbnRTdGF0ZSkgewogICAgICBpbnRlbnRTdGF0ZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgIHRoaXMuX2ludGVudFN0YXRlcy5zZXQoY2FjaGVLZXksIGludGVudFN0YXRlKTsKICAgIH0KICAgIGlmIChpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KSB7CiAgICAgIGNsZWFyVGltZW91dChpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KTsKICAgICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCA9IG51bGw7CiAgICB9CiAgICBjb25zdCBpbnRlbnRQcmludCA9ICEhKHJlbmRlcmluZ0ludGVudCAmIFJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpOwogICAgaWYgKCFpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KSB7CiAgICAgIGludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTsKICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0ID0gewogICAgICAgIGZuQXJyYXk6IFtdLAogICAgICAgIGFyZ3NBcnJheTogW10sCiAgICAgICAgbGFzdENodW5rOiBmYWxzZSwKICAgICAgICBzZXBhcmF0ZUFubm90czogbnVsbAogICAgICB9OwogICAgICB0aGlzLl9zdGF0cz8udGltZSgiUGFnZSBSZXF1ZXN0Iik7CiAgICAgIHRoaXMuX3B1bXBPcGVyYXRvckxpc3QoaW50ZW50QXJncyk7CiAgICB9CiAgICBjb25zdCByZWNvcmRGb3JEZWJ1Z2dlciA9IEJvb2xlYW4odGhpcy5fcGRmQnVnICYmIGdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXI/LmVuYWJsZWQpOwogICAgY29uc3Qgc2hvdWxkUmVjb3JkT3BlcmF0aW9ucyA9ICF0aGlzLnJlY29yZGVkQkJveGVzICYmIChyZWNvcmRPcGVyYXRpb25zIHx8IHJlY29yZEZvckRlYnVnZ2VyKTsKICAgIGNvbnN0IGNvbXBsZXRlID0gZXJyb3IgPT4gewogICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5kZWxldGUoaW50ZXJuYWxSZW5kZXJUYXNrKTsKICAgICAgaWYgKHNob3VsZFJlY29yZE9wZXJhdGlvbnMpIHsKICAgICAgICBjb25zdCByZWNvcmRlZEJCb3hlcyA9IGludGVybmFsUmVuZGVyVGFzay5nZng/LmRlcGVuZGVuY3lUcmFja2VyLnRha2UoKTsKICAgICAgICBpZiAocmVjb3JkZWRCQm94ZXMpIHsKICAgICAgICAgIGlmIChpbnRlcm5hbFJlbmRlclRhc2suc3RlcHBlcikgewogICAgICAgICAgICBpbnRlcm5hbFJlbmRlclRhc2suc3RlcHBlci5zZXRPcGVyYXRvckJCb3hlcyhyZWNvcmRlZEJCb3hlcywgaW50ZXJuYWxSZW5kZXJUYXNrLmdmeC5kZXBlbmRlbmN5VHJhY2tlci50YWtlRGVidWdNZXRhZGF0YSgpKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChyZWNvcmRPcGVyYXRpb25zKSB7CiAgICAgICAgICAgIHRoaXMucmVjb3JkZWRCQm94ZXMgPSByZWNvcmRlZEJCb3hlczsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGludGVudFByaW50KSB7CiAgICAgICAgdGhpcy4jcGVuZGluZ0NsZWFudXAgPSB0cnVlOwogICAgICB9CiAgICAgIHRoaXMuI3RyeUNsZWFudXAoKTsKICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgaW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucmVqZWN0KGVycm9yKTsKICAgICAgICB0aGlzLl9hYm9ydE9wZXJhdG9yTGlzdCh7CiAgICAgICAgICBpbnRlbnRTdGF0ZSwKICAgICAgICAgIHJlYXNvbjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKGVycm9yKQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGludGVybmFsUmVuZGVyVGFzay5jYXBhYmlsaXR5LnJlc29sdmUoKTsKICAgICAgfQogICAgICBpZiAodGhpcy5fc3RhdHMpIHsKICAgICAgICB0aGlzLl9zdGF0cy50aW1lRW5kKCJSZW5kZXJpbmciKTsKICAgICAgICB0aGlzLl9zdGF0cy50aW1lRW5kKCJPdmVyYWxsIik7CiAgICAgICAgaWYgKGdsb2JhbFRoaXMuU3RhdHM/LmVuYWJsZWQpIHsKICAgICAgICAgIGdsb2JhbFRoaXMuU3RhdHMuYWRkKHRoaXMucGFnZU51bWJlciwgdGhpcy5fc3RhdHMpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIGNvbnN0IGludGVybmFsUmVuZGVyVGFzayA9IG5ldyBJbnRlcm5hbFJlbmRlclRhc2soewogICAgICBjYWxsYmFjazogY29tcGxldGUsCiAgICAgIHBhcmFtczogewogICAgICAgIGNhbnZhcywKICAgICAgICBjYW52YXNDb250ZXh0LAogICAgICAgIGRlcGVuZGVuY3lUcmFja2VyOiBzaG91bGRSZWNvcmRPcGVyYXRpb25zID8gbmV3IENhbnZhc0RlcGVuZGVuY3lUcmFja2VyKGNhbnZhcywgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0Lmxlbmd0aCwgcmVjb3JkRm9yRGVidWdnZXIpIDogbnVsbCwKICAgICAgICB2aWV3cG9ydCwKICAgICAgICB0cmFuc2Zvcm0sCiAgICAgICAgYmFja2dyb3VuZAogICAgICB9LAogICAgICBvYmpzOiB0aGlzLm9ianMsCiAgICAgIGNvbW1vbk9ianM6IHRoaXMuY29tbW9uT2JqcywKICAgICAgYW5ub3RhdGlvbkNhbnZhc01hcCwKICAgICAgb3BlcmF0b3JMaXN0OiBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QsCiAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZGV4LAogICAgICBjYW52YXNGYWN0b3J5OiB0aGlzLl90cmFuc3BvcnQuY2FudmFzRmFjdG9yeSwKICAgICAgZmlsdGVyRmFjdG9yeTogdGhpcy5fdHJhbnNwb3J0LmZpbHRlckZhY3RvcnksCiAgICAgIHVzZVJlcXVlc3RBbmltYXRpb25GcmFtZTogIWludGVudFByaW50LAogICAgICBwZGZCdWc6IHRoaXMuX3BkZkJ1ZywKICAgICAgcGFnZUNvbG9ycywKICAgICAgZW5hYmxlSFdBOiB0aGlzLl90cmFuc3BvcnQuZW5hYmxlSFdBLAogICAgICBvcGVyYXRpb25zRmlsdGVyCiAgICB9KTsKICAgIChpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcyB8fD0gbmV3IFNldCgpKS5hZGQoaW50ZXJuYWxSZW5kZXJUYXNrKTsKICAgIGNvbnN0IHJlbmRlclRhc2sgPSBpbnRlcm5hbFJlbmRlclRhc2sudGFzazsKICAgIFByb21pc2UuYWxsKFtpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5LnByb21pc2UsIG9wdGlvbmFsQ29udGVudENvbmZpZ1Byb21pc2VdKS50aGVuKChbdHJhbnNwYXJlbmN5LCBvcHRpb25hbENvbnRlbnRDb25maWddKSA9PiB7CiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgewogICAgICAgIGNvbXBsZXRlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuX3N0YXRzPy50aW1lKCJSZW5kZXJpbmciKTsKICAgICAgaWYgKCEob3B0aW9uYWxDb250ZW50Q29uZmlnLnJlbmRlcmluZ0ludGVudCAmIHJlbmRlcmluZ0ludGVudCkpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk11c3QgdXNlIHRoZSBzYW1lIGBpbnRlbnRgLWFyZ3VtZW50IHdoZW4gY2FsbGluZyB0aGUgYFBERlBhZ2VQcm94eS5yZW5kZXJgICIgKyAiYW5kIGBQREZEb2N1bWVudFByb3h5LmdldE9wdGlvbmFsQ29udGVudENvbmZpZ2AgbWV0aG9kcy4iKTsKICAgICAgfQogICAgICBpbnRlcm5hbFJlbmRlclRhc2suaW5pdGlhbGl6ZUdyYXBoaWNzKHsKICAgICAgICB0cmFuc3BhcmVuY3ksCiAgICAgICAgb3B0aW9uYWxDb250ZW50Q29uZmlnCiAgICAgIH0pOwogICAgICBpbnRlcm5hbFJlbmRlclRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCgpOwogICAgfSkuY2F0Y2goY29tcGxldGUpOwogICAgcmV0dXJuIHJlbmRlclRhc2s7CiAgfQogIGdldE9wZXJhdG9yTGlzdCh7CiAgICBpbnRlbnQgPSAiZGlzcGxheSIsCiAgICBhbm5vdGF0aW9uTW9kZSA9IEFubm90YXRpb25Nb2RlLkVOQUJMRSwKICAgIHByaW50QW5ub3RhdGlvblN0b3JhZ2UgPSBudWxsLAogICAgaXNFZGl0aW5nID0gZmFsc2UKICB9ID0ge30pIHsKICAgIGZ1bmN0aW9uIG9wZXJhdG9yTGlzdENoYW5nZWQoKSB7CiAgICAgIGlmIChpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QubGFzdENodW5rKSB7CiAgICAgICAgaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkucmVzb2x2ZShpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QpOwogICAgICAgIGludGVudFN0YXRlLnJlbmRlclRhc2tzLmRlbGV0ZShvcExpc3RUYXNrKTsKICAgICAgfQogICAgfQogICAgY29uc3QgaW50ZW50QXJncyA9IHRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQoaW50ZW50LCBhbm5vdGF0aW9uTW9kZSwgcHJpbnRBbm5vdGF0aW9uU3RvcmFnZSwgaXNFZGl0aW5nLCB0cnVlKTsKICAgIGxldCBpbnRlbnRTdGF0ZSA9IHRoaXMuX2ludGVudFN0YXRlcy5nZXQoaW50ZW50QXJncy5jYWNoZUtleSk7CiAgICBpZiAoIWludGVudFN0YXRlKSB7CiAgICAgIGludGVudFN0YXRlID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgdGhpcy5faW50ZW50U3RhdGVzLnNldChpbnRlbnRBcmdzLmNhY2hlS2V5LCBpbnRlbnRTdGF0ZSk7CiAgICB9CiAgICBsZXQgb3BMaXN0VGFzazsKICAgIGlmICghaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkpIHsKICAgICAgb3BMaXN0VGFzayA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgIG9wTGlzdFRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCA9IG9wZXJhdG9yTGlzdENoYW5nZWQ7CiAgICAgIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgICAgIChpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcyB8fD0gbmV3IFNldCgpKS5hZGQob3BMaXN0VGFzayk7CiAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCA9IHsKICAgICAgICBmbkFycmF5OiBbXSwKICAgICAgICBhcmdzQXJyYXk6IFtdLAogICAgICAgIGxhc3RDaHVuazogZmFsc2UsCiAgICAgICAgc2VwYXJhdGVBbm5vdHM6IG51bGwKICAgICAgfTsKICAgICAgdGhpcy5fc3RhdHM/LnRpbWUoIlBhZ2UgUmVxdWVzdCIpOwogICAgICB0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KGludGVudEFyZ3MpOwogICAgfQogICAgcmV0dXJuIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnByb21pc2U7CiAgfQogIHN0cmVhbVRleHRDb250ZW50KHsKICAgIGluY2x1ZGVNYXJrZWRDb250ZW50ID0gZmFsc2UsCiAgICBkaXNhYmxlTm9ybWFsaXphdGlvbiA9IGZhbHNlCiAgfSA9IHt9KSB7CiAgICBjb25zdCBURVhUX0NPTlRFTlRfQ0hVTktfU0laRSA9IDEwMDsKICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFRleHRDb250ZW50IiwgewogICAgICBwYWdlSW5kZXg6IHRoaXMuX3BhZ2VJbmRleCwKICAgICAgaW5jbHVkZU1hcmtlZENvbnRlbnQ6IGluY2x1ZGVNYXJrZWRDb250ZW50ID09PSB0cnVlLAogICAgICBkaXNhYmxlTm9ybWFsaXphdGlvbjogZGlzYWJsZU5vcm1hbGl6YXRpb24gPT09IHRydWUKICAgIH0sIHsKICAgICAgaGlnaFdhdGVyTWFyazogVEVYVF9DT05URU5UX0NIVU5LX1NJWkUsCiAgICAgIHNpemUodGV4dENvbnRlbnQpIHsKICAgICAgICByZXR1cm4gdGV4dENvbnRlbnQuaXRlbXMubGVuZ3RoOwogICAgICB9CiAgICB9KTsKICB9CiAgZ2V0VGV4dENvbnRlbnQocGFyYW1zID0ge30pIHsKICAgIGlmICh0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpIHsKICAgICAgcmV0dXJuIHRoaXMuZ2V0WGZhKCkudGhlbih4ZmEgPT4gWGZhVGV4dC50ZXh0Q29udGVudCh4ZmEpKTsKICAgIH0KICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5zdHJlYW1UZXh0Q29udGVudChwYXJhbXMpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgZnVuY3Rpb24gcHVtcCgpIHsKICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKHsKICAgICAgICAgIHZhbHVlLAogICAgICAgICAgZG9uZQogICAgICAgIH0pIHsKICAgICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICAgIHJlc29sdmUodGV4dENvbnRlbnQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0ZXh0Q29udGVudC5sYW5nID8/PSB2YWx1ZS5sYW5nOwogICAgICAgICAgT2JqZWN0LmFzc2lnbih0ZXh0Q29udGVudC5zdHlsZXMsIHZhbHVlLnN0eWxlcyk7CiAgICAgICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKC4uLnZhbHVlLml0ZW1zKTsKICAgICAgICAgIHB1bXAoKTsKICAgICAgICB9LCByZWplY3QpOwogICAgICB9CiAgICAgIGNvbnN0IHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpOwogICAgICBjb25zdCB0ZXh0Q29udGVudCA9IHsKICAgICAgICBpdGVtczogW10sCiAgICAgICAgc3R5bGVzOiBPYmplY3QuY3JlYXRlKG51bGwpLAogICAgICAgIGxhbmc6IG51bGwKICAgICAgfTsKICAgICAgcHVtcCgpOwogICAgfSk7CiAgfQogIGdldFN0cnVjdFRyZWUoKSB7CiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFN0cnVjdFRyZWUodGhpcy5fcGFnZUluZGV4KTsKICB9CiAgX2Rlc3Ryb3koKSB7CiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7CiAgICBjb25zdCB3YWl0T24gPSBbXTsKICAgIGZvciAoY29uc3QgaW50ZW50U3RhdGUgb2YgdGhpcy5faW50ZW50U3RhdGVzLnZhbHVlcygpKSB7CiAgICAgIHRoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHsKICAgICAgICBpbnRlbnRTdGF0ZSwKICAgICAgICByZWFzb246IG5ldyBFcnJvcigiUGFnZSB3YXMgZGVzdHJveWVkLiIpLAogICAgICAgIGZvcmNlOiB0cnVlCiAgICAgIH0pOwogICAgICBpZiAoaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBmb3IgKGNvbnN0IGludGVybmFsUmVuZGVyVGFzayBvZiBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcykgewogICAgICAgIHdhaXRPbi5wdXNoKGludGVybmFsUmVuZGVyVGFzay5jb21wbGV0ZWQpOwogICAgICAgIGludGVybmFsUmVuZGVyVGFzay5jYW5jZWwoKTsKICAgICAgfQogICAgfQogICAgdGhpcy5vYmpzLmNsZWFyKCk7CiAgICB0aGlzLiNwZW5kaW5nQ2xlYW51cCA9IGZhbHNlOwogICAgcmV0dXJuIFByb21pc2UuYWxsKHdhaXRPbik7CiAgfQogIGNsZWFudXAocmVzZXRTdGF0cyA9IGZhbHNlKSB7CiAgICB0aGlzLiNwZW5kaW5nQ2xlYW51cCA9IHRydWU7CiAgICBjb25zdCBzdWNjZXNzID0gdGhpcy4jdHJ5Q2xlYW51cCgpOwogICAgaWYgKHJlc2V0U3RhdHMgJiYgc3VjY2VzcykgewogICAgICB0aGlzLl9zdGF0cyAmJj0gbmV3IFN0YXRUaW1lcigpOwogICAgfQogICAgcmV0dXJuIHN1Y2Nlc3M7CiAgfQogICN0cnlDbGVhbnVwKCkgewogICAgaWYgKCF0aGlzLiNwZW5kaW5nQ2xlYW51cCB8fCB0aGlzLmRlc3Ryb3llZCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmb3IgKGNvbnN0IHsKICAgICAgcmVuZGVyVGFza3MsCiAgICAgIG9wZXJhdG9yTGlzdAogICAgfSBvZiB0aGlzLl9pbnRlbnRTdGF0ZXMudmFsdWVzKCkpIHsKICAgICAgaWYgKHJlbmRlclRhc2tzLnNpemUgPiAwIHx8ICFvcGVyYXRvckxpc3QubGFzdENodW5rKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICB0aGlzLl9pbnRlbnRTdGF0ZXMuY2xlYXIoKTsKICAgIHRoaXMub2Jqcy5jbGVhcigpOwogICAgdGhpcy4jcGVuZGluZ0NsZWFudXAgPSBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KICBfc3RhcnRSZW5kZXJQYWdlKHRyYW5zcGFyZW5jeSwgY2FjaGVLZXkpIHsKICAgIGNvbnN0IGludGVudFN0YXRlID0gdGhpcy5faW50ZW50U3RhdGVzLmdldChjYWNoZUtleSk7CiAgICBpZiAoIWludGVudFN0YXRlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuX3N0YXRzPy50aW1lRW5kKCJQYWdlIFJlcXVlc3QiKTsKICAgIGludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHk/LnJlc29sdmUodHJhbnNwYXJlbmN5KTsKICB9CiAgX3JlbmRlclBhZ2VDaHVuayhvcGVyYXRvckxpc3RDaHVuaywgaW50ZW50U3RhdGUpIHsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IG9wZXJhdG9yTGlzdENodW5rLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0LmZuQXJyYXkucHVzaChvcGVyYXRvckxpc3RDaHVuay5mbkFycmF5W2ldKTsKICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5wdXNoKG9wZXJhdG9yTGlzdENodW5rLmFyZ3NBcnJheVtpXSk7CiAgICB9CiAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QubGFzdENodW5rID0gb3BlcmF0b3JMaXN0Q2h1bmsubGFzdENodW5rOwogICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0LnNlcGFyYXRlQW5ub3RzID0gb3BlcmF0b3JMaXN0Q2h1bmsuc2VwYXJhdGVBbm5vdHM7CiAgICBmb3IgKGNvbnN0IGludGVybmFsUmVuZGVyVGFzayBvZiBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcykgewogICAgICBpbnRlcm5hbFJlbmRlclRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCgpOwogICAgfQogICAgaWYgKG9wZXJhdG9yTGlzdENodW5rLmxhc3RDaHVuaykgewogICAgICB0aGlzLiN0cnlDbGVhbnVwKCk7CiAgICB9CiAgfQogIF9wdW1wT3BlcmF0b3JMaXN0KHsKICAgIHJlbmRlcmluZ0ludGVudCwKICAgIGNhY2hlS2V5LAogICAgYW5ub3RhdGlvblN0b3JhZ2VTZXJpYWxpemFibGUsCiAgICBtb2RpZmllZElkcwogIH0pIHsKICAgIGNvbnN0IHsKICAgICAgbWFwLAogICAgICB0cmFuc2ZlcgogICAgfSA9IGFubm90YXRpb25TdG9yYWdlU2VyaWFsaXphYmxlOwogICAgY29uc3QgcmVhZGFibGVTdHJlYW0gPSB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldE9wZXJhdG9yTGlzdCIsIHsKICAgICAgcGFnZUluZGV4OiB0aGlzLl9wYWdlSW5kZXgsCiAgICAgIGludGVudDogcmVuZGVyaW5nSW50ZW50LAogICAgICBjYWNoZUtleSwKICAgICAgYW5ub3RhdGlvblN0b3JhZ2U6IG1hcCwKICAgICAgbW9kaWZpZWRJZHMKICAgIH0sIHRyYW5zZmVyKTsKICAgIGNvbnN0IHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpOwogICAgY29uc3QgaW50ZW50U3RhdGUgPSB0aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGNhY2hlS2V5KTsKICAgIGludGVudFN0YXRlLnN0cmVhbVJlYWRlciA9IHJlYWRlcjsKICAgIGNvbnN0IHB1bXAgPSAoKSA9PiB7CiAgICAgIHJlYWRlci5yZWFkKCkudGhlbigoewogICAgICAgIHZhbHVlLAogICAgICAgIGRvbmUKICAgICAgfSkgPT4gewogICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXIgPSBudWxsOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fdHJhbnNwb3J0LmRlc3Ryb3llZCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9yZW5kZXJQYWdlQ2h1bmsodmFsdWUsIGludGVudFN0YXRlKTsKICAgICAgICBwdW1wKCk7CiAgICAgIH0sIHJlYXNvbiA9PiB7CiAgICAgICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyID0gbnVsbDsKICAgICAgICBpZiAodGhpcy5fdHJhbnNwb3J0LmRlc3Ryb3llZCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0KSB7CiAgICAgICAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QubGFzdENodW5rID0gdHJ1ZTsKICAgICAgICAgIGZvciAoY29uc3QgaW50ZXJuYWxSZW5kZXJUYXNrIG9mIGludGVudFN0YXRlLnJlbmRlclRhc2tzKSB7CiAgICAgICAgICAgIGludGVybmFsUmVuZGVyVGFzay5vcGVyYXRvckxpc3RDaGFuZ2VkKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLiN0cnlDbGVhbnVwKCk7CiAgICAgICAgfQogICAgICAgIGlmIChpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KSB7CiAgICAgICAgICBpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pOwogICAgICAgIH0gZWxzZSBpZiAoaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkpIHsKICAgICAgICAgIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyByZWFzb247CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgICBwdW1wKCk7CiAgfQogIF9hYm9ydE9wZXJhdG9yTGlzdCh7CiAgICBpbnRlbnRTdGF0ZSwKICAgIHJlYXNvbiwKICAgIGZvcmNlID0gZmFsc2UKICB9KSB7CiAgICBpZiAoIWludGVudFN0YXRlLnN0cmVhbVJlYWRlcikgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCkgewogICAgICBjbGVhclRpbWVvdXQoaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCk7CiAgICAgIGludGVudFN0YXRlLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQgPSBudWxsOwogICAgfQogICAgaWYgKCFmb3JjZSkgewogICAgICBpZiAoaW50ZW50U3RhdGUucmVuZGVyVGFza3Muc2l6ZSA+IDApIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIFJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbikgewogICAgICAgIGxldCBkZWxheSA9IFJFTkRFUklOR19DQU5DRUxMRURfVElNRU9VVDsKICAgICAgICBpZiAocmVhc29uLmV4dHJhRGVsYXkgPiAwICYmIHJlYXNvbi5leHRyYURlbGF5IDwgMTAwMCkgewogICAgICAgICAgZGVsYXkgKz0gcmVhc29uLmV4dHJhRGVsYXk7CiAgICAgICAgfQogICAgICAgIGludGVudFN0YXRlLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGludGVudFN0YXRlLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQgPSBudWxsOwogICAgICAgICAgdGhpcy5fYWJvcnRPcGVyYXRvckxpc3QoewogICAgICAgICAgICBpbnRlbnRTdGF0ZSwKICAgICAgICAgICAgcmVhc29uLAogICAgICAgICAgICBmb3JjZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfSwgZGVsYXkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyLmNhbmNlbChuZXcgQWJvcnRFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpKS5jYXRjaCgoKSA9PiB7fSk7CiAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXIgPSBudWxsOwogICAgaWYgKHRoaXMuX3RyYW5zcG9ydC5kZXN0cm95ZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChjb25zdCBbY3VyQ2FjaGVLZXksIGN1ckludGVudFN0YXRlXSBvZiB0aGlzLl9pbnRlbnRTdGF0ZXMpIHsKICAgICAgaWYgKGN1ckludGVudFN0YXRlID09PSBpbnRlbnRTdGF0ZSkgewogICAgICAgIHRoaXMuX2ludGVudFN0YXRlcy5kZWxldGUoY3VyQ2FjaGVLZXkpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICB0aGlzLmNsZWFudXAoKTsKICB9CiAgZ2V0IHN0YXRzKCkgewogICAgcmV0dXJuIHRoaXMuX3N0YXRzOwogIH0KfQpjbGFzcyBQREZXb3JrZXIgewogICNjYXBhYmlsaXR5ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgI21lc3NhZ2VIYW5kbGVyID0gbnVsbDsKICAjcG9ydCA9IG51bGw7CiAgI3dlYldvcmtlciA9IG51bGw7CiAgc3RhdGljICNmYWtlV29ya2VySWQgPSAwOwogIHN0YXRpYyAjaXNXb3JrZXJEaXNhYmxlZCA9IGZhbHNlOwogIHN0YXRpYyAjd29ya2VyUG9ydHMgPSBuZXcgV2Vha01hcCgpOwogIHN0YXRpYyB7CiAgICBpZiAoaXNOb2RlSlMpIHsKICAgICAgdGhpcy4jaXNXb3JrZXJEaXNhYmxlZCA9IHRydWU7CiAgICAgIEdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjIHx8PSAiLi9wZGYud29ya2VyLm1qcyI7CiAgICB9CiAgICB0aGlzLl9pc1NhbWVPcmlnaW4gPSAoYmFzZVVybCwgb3RoZXJVcmwpID0+IHsKICAgICAgY29uc3QgYmFzZSA9IFVSTC5wYXJzZShiYXNlVXJsKTsKICAgICAgaWYgKCFiYXNlPy5vcmlnaW4gfHwgYmFzZS5vcmlnaW4gPT09ICJudWxsIikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBjb25zdCBvdGhlciA9IG5ldyBVUkwob3RoZXJVcmwsIGJhc2UpOwogICAgICByZXR1cm4gYmFzZS5vcmlnaW4gPT09IG90aGVyLm9yaWdpbjsKICAgIH07CiAgICB0aGlzLl9jcmVhdGVDRE5XcmFwcGVyID0gdXJsID0+IHsKICAgICAgY29uc3Qgd3JhcHBlciA9IGBhd2FpdCBpbXBvcnQoIiR7dXJsfSIpO2A7CiAgICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt3cmFwcGVyXSwgewogICAgICAgIHR5cGU6ICJ0ZXh0L2phdmFzY3JpcHQiCiAgICAgIH0pKTsKICAgIH07CiAgICB0aGlzLmZyb21Qb3J0ID0gcGFyYW1zID0+IHsKICAgICAgZGVwcmVjYXRlZCgiYFBERldvcmtlci5mcm9tUG9ydGAgLSBwbGVhc2UgdXNlIGBQREZXb3JrZXIuY3JlYXRlYCBpbnN0ZWFkLiIpOwogICAgICBpZiAoIXBhcmFtcz8ucG9ydCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiUERGV29ya2VyLmZyb21Qb3J0IC0gaW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlLiIpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZShwYXJhbXMpOwogICAgfTsKICB9CiAgY29uc3RydWN0b3IoewogICAgbmFtZSA9IG51bGwsCiAgICBwb3J0ID0gbnVsbCwKICAgIHZlcmJvc2l0eSA9IGdldFZlcmJvc2l0eUxldmVsKCkKICB9ID0ge30pIHsKICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlOwogICAgdGhpcy52ZXJib3NpdHkgPSB2ZXJib3NpdHk7CiAgICBpZiAocG9ydCkgewogICAgICBpZiAoUERGV29ya2VyLiN3b3JrZXJQb3J0cy5oYXMocG9ydCkpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB1c2UgbW9yZSB0aGFuIG9uZSBQREZXb3JrZXIgcGVyIHBvcnQuIik7CiAgICAgIH0KICAgICAgUERGV29ya2VyLiN3b3JrZXJQb3J0cy5zZXQocG9ydCwgdGhpcyk7CiAgICAgIHRoaXMuI2luaXRpYWxpemVGcm9tUG9ydChwb3J0KTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuI2luaXRpYWxpemUoKTsKICAgIH0KICB9CiAgZ2V0IHByb21pc2UoKSB7CiAgICByZXR1cm4gdGhpcy4jY2FwYWJpbGl0eS5wcm9taXNlOwogIH0KICAjcmVzb2x2ZSgpIHsKICAgIHRoaXMuI2NhcGFiaWxpdHkucmVzb2x2ZSgpOwogICAgdGhpcy4jbWVzc2FnZUhhbmRsZXIuc2VuZCgiY29uZmlndXJlIiwgewogICAgICB2ZXJib3NpdHk6IHRoaXMudmVyYm9zaXR5CiAgICB9KTsKICB9CiAgZ2V0IHBvcnQoKSB7CiAgICByZXR1cm4gdGhpcy4jcG9ydDsKICB9CiAgZ2V0IG1lc3NhZ2VIYW5kbGVyKCkgewogICAgcmV0dXJuIHRoaXMuI21lc3NhZ2VIYW5kbGVyOwogIH0KICAjaW5pdGlhbGl6ZUZyb21Qb3J0KHBvcnQpIHsKICAgIHRoaXMuI3BvcnQgPSBwb3J0OwogICAgdGhpcy4jbWVzc2FnZUhhbmRsZXIgPSBuZXcgTWVzc2FnZUhhbmRsZXIoIm1haW4iLCAid29ya2VyIiwgcG9ydCk7CiAgICB0aGlzLiNtZXNzYWdlSGFuZGxlci5vbigicmVhZHkiLCAoKSA9PiB7fSk7CiAgICB0aGlzLiNyZXNvbHZlKCk7CiAgfQogICNpbml0aWFsaXplKCkgewogICAgaWYgKFBERldvcmtlci4jaXNXb3JrZXJEaXNhYmxlZCB8fCBQREZXb3JrZXIuI21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlcikgewogICAgICB0aGlzLiNzZXR1cEZha2VXb3JrZXIoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGV0IHsKICAgICAgd29ya2VyU3JjCiAgICB9ID0gUERGV29ya2VyOwogICAgdHJ5IHsKICAgICAgaWYgKCFQREZXb3JrZXIuX2lzU2FtZU9yaWdpbih3aW5kb3cubG9jYXRpb24sIHdvcmtlclNyYykpIHsKICAgICAgICB3b3JrZXJTcmMgPSBQREZXb3JrZXIuX2NyZWF0ZUNETldyYXBwZXIobmV3IFVSTCh3b3JrZXJTcmMsIHdpbmRvdy5sb2NhdGlvbikuaHJlZik7CiAgICAgIH0KICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJTcmMsIHsKICAgICAgICB0eXBlOiAibW9kdWxlIgogICAgICB9KTsKICAgICAgY29uc3QgbWVzc2FnZUhhbmRsZXIgPSBuZXcgTWVzc2FnZUhhbmRsZXIoIm1haW4iLCAid29ya2VyIiwgd29ya2VyKTsKICAgICAgY29uc3QgdGVybWluYXRlRWFybHkgPSAoKSA9PiB7CiAgICAgICAgYWMuYWJvcnQoKTsKICAgICAgICBtZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7CiAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpOwogICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgewogICAgICAgICAgdGhpcy4jY2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy4jc2V0dXBGYWtlV29ya2VyKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgKCkgPT4gewogICAgICAgIGlmICghdGhpcy4jd2ViV29ya2VyKSB7CiAgICAgICAgICB0ZXJtaW5hdGVFYXJseSgpOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIHNpZ25hbDogYWMuc2lnbmFsCiAgICAgIH0pOwogICAgICBtZXNzYWdlSGFuZGxlci5vbigidGVzdCIsIGRhdGEgPT4gewogICAgICAgIGFjLmFib3J0KCk7CiAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8ICFkYXRhKSB7CiAgICAgICAgICB0ZXJtaW5hdGVFYXJseSgpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLiNtZXNzYWdlSGFuZGxlciA9IG1lc3NhZ2VIYW5kbGVyOwogICAgICAgIHRoaXMuI3BvcnQgPSB3b3JrZXI7CiAgICAgICAgdGhpcy4jd2ViV29ya2VyID0gd29ya2VyOwogICAgICAgIHRoaXMuI3Jlc29sdmUoKTsKICAgICAgfSk7CiAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCJyZWFkeSIsIGRhdGEgPT4gewogICAgICAgIGFjLmFib3J0KCk7CiAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7CiAgICAgICAgICB0ZXJtaW5hdGVFYXJseSgpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgc2VuZFRlc3QoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIHRoaXMuI3NldHVwRmFrZVdvcmtlcigpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGNvbnN0IHNlbmRUZXN0ID0gKCkgPT4gewogICAgICAgIGNvbnN0IHRlc3RPYmogPSBuZXcgVWludDhBcnJheSgpOwogICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoInRlc3QiLCB0ZXN0T2JqLCBbdGVzdE9iai5idWZmZXJdKTsKICAgICAgfTsKICAgICAgc2VuZFRlc3QoKTsKICAgICAgcmV0dXJuOwogICAgfSBjYXRjaCB7CiAgICAgIGluZm8oIlRoZSB3b3JrZXIgaGFzIGJlZW4gZGlzYWJsZWQuIik7CiAgICB9CiAgICB0aGlzLiNzZXR1cEZha2VXb3JrZXIoKTsKICB9CiAgI3NldHVwRmFrZVdvcmtlcigpIHsKICAgIGlmICghUERGV29ya2VyLiNpc1dvcmtlckRpc2FibGVkKSB7CiAgICAgIHdhcm4oIlNldHRpbmcgdXAgZmFrZSB3b3JrZXIuIik7CiAgICAgIFBERldvcmtlci4jaXNXb3JrZXJEaXNhYmxlZCA9IHRydWU7CiAgICB9CiAgICBQREZXb3JrZXIuX3NldHVwRmFrZVdvcmtlckdsb2JhbC50aGVuKFdvcmtlck1lc3NhZ2VIYW5kbGVyID0+IHsKICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7CiAgICAgICAgdGhpcy4jY2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgcG9ydCA9IG5ldyBMb29wYmFja1BvcnQoKTsKICAgICAgdGhpcy4jcG9ydCA9IHBvcnQ7CiAgICAgIGNvbnN0IGlkID0gYGZha2Uke1BERldvcmtlci4jZmFrZVdvcmtlcklkKyt9YDsKICAgICAgY29uc3Qgd29ya2VySGFuZGxlciA9IG5ldyBNZXNzYWdlSGFuZGxlcihpZCArICJfd29ya2VyIiwgaWQsIHBvcnQpOwogICAgICBXb3JrZXJNZXNzYWdlSGFuZGxlci5zZXR1cCh3b3JrZXJIYW5kbGVyLCBwb3J0KTsKICAgICAgdGhpcy4jbWVzc2FnZUhhbmRsZXIgPSBuZXcgTWVzc2FnZUhhbmRsZXIoaWQsIGlkICsgIl93b3JrZXIiLCBwb3J0KTsKICAgICAgdGhpcy4jcmVzb2x2ZSgpOwogICAgfSkuY2F0Y2gocmVhc29uID0+IHsKICAgICAgdGhpcy4jY2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKGBTZXR0aW5nIHVwIGZha2Ugd29ya2VyIGZhaWxlZDogIiR7cmVhc29uLm1lc3NhZ2V9Ii5gKSk7CiAgICB9KTsKICB9CiAgZGVzdHJveSgpIHsKICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgIHRoaXMuI3dlYldvcmtlcj8udGVybWluYXRlKCk7CiAgICB0aGlzLiN3ZWJXb3JrZXIgPSBudWxsOwogICAgUERGV29ya2VyLiN3b3JrZXJQb3J0cy5kZWxldGUodGhpcy4jcG9ydCk7CiAgICB0aGlzLiNwb3J0ID0gbnVsbDsKICAgIHRoaXMuI21lc3NhZ2VIYW5kbGVyPy5kZXN0cm95KCk7CiAgICB0aGlzLiNtZXNzYWdlSGFuZGxlciA9IG51bGw7CiAgfQogIHN0YXRpYyBjcmVhdGUocGFyYW1zKSB7CiAgICBjb25zdCBjYWNoZWRQb3J0ID0gdGhpcy4jd29ya2VyUG9ydHMuZ2V0KHBhcmFtcz8ucG9ydCk7CiAgICBpZiAoY2FjaGVkUG9ydCkgewogICAgICBpZiAoY2FjaGVkUG9ydC5fcGVuZGluZ0Rlc3Ryb3kpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlBERldvcmtlci5jcmVhdGUgLSB0aGUgd29ya2VyIGlzIGJlaW5nIGRlc3Ryb3llZC5cbiIgKyAiUGxlYXNlIHJlbWVtYmVyIHRvIGF3YWl0IGBQREZEb2N1bWVudExvYWRpbmdUYXNrLmRlc3Ryb3koKWAtY2FsbHMuIik7CiAgICAgIH0KICAgICAgcmV0dXJuIGNhY2hlZFBvcnQ7CiAgICB9CiAgICByZXR1cm4gbmV3IFBERldvcmtlcihwYXJhbXMpOwogIH0KICBzdGF0aWMgZ2V0IHdvcmtlclNyYygpIHsKICAgIGlmIChHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYykgewogICAgICByZXR1cm4gR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM7CiAgICB9CiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vICJHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyIgc3BlY2lmaWVkLicpOwogIH0KICBzdGF0aWMgZ2V0ICNtYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIoKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gZ2xvYmFsVGhpcy5wZGZqc1dvcmtlcj8uV29ya2VyTWVzc2FnZUhhbmRsZXIgfHwgbnVsbDsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CiAgc3RhdGljIGdldCBfc2V0dXBGYWtlV29ya2VyR2xvYmFsKCkgewogICAgY29uc3QgbG9hZGVyID0gYXN5bmMgKCkgPT4gewogICAgICBpZiAodGhpcy4jbWFpblRocmVhZFdvcmtlck1lc3NhZ2VIYW5kbGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuI21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlcjsKICAgICAgfQogICAgICBjb25zdCB3b3JrZXIgPSBhd2FpdCBpbXBvcnQoCiAgICAgIC8qd2VicGFja0lnbm9yZTogdHJ1ZSovCiAgICAgIC8qQHZpdGUtaWdub3JlKi8KICAgICAgdGhpcy53b3JrZXJTcmMpOwogICAgICByZXR1cm4gd29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyOwogICAgfTsKICAgIHJldHVybiBzaGFkb3codGhpcywgIl9zZXR1cEZha2VXb3JrZXJHbG9iYWwiLCBsb2FkZXIoKSk7CiAgfQp9CmNsYXNzIFdvcmtlclRyYW5zcG9ydCB7CiAgI21ldGhvZFByb21pc2VzID0gbmV3IE1hcCgpOwogICNwYWdlQ2FjaGUgPSBuZXcgTWFwKCk7CiAgI3BhZ2VQcm9taXNlcyA9IG5ldyBNYXAoKTsKICAjcGFnZVJlZkNhY2hlID0gbmV3IE1hcCgpOwogICNwYXNzd29yZENhcGFiaWxpdHkgPSBudWxsOwogIGNvbnN0cnVjdG9yKG1lc3NhZ2VIYW5kbGVyLCBsb2FkaW5nVGFzaywgbmV0d29ya1N0cmVhbSwgcGFyYW1zLCBmYWN0b3J5LCBlbmFibGVIV0EpIHsKICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBtZXNzYWdlSGFuZGxlcjsKICAgIHRoaXMubG9hZGluZ1Rhc2sgPSBsb2FkaW5nVGFzazsKICAgIHRoaXMuY29tbW9uT2JqcyA9IG5ldyBQREZPYmplY3RzKCk7CiAgICB0aGlzLmZvbnRMb2FkZXIgPSBuZXcgRm9udExvYWRlcih7CiAgICAgIG93bmVyRG9jdW1lbnQ6IHBhcmFtcy5vd25lckRvY3VtZW50LAogICAgICBzdHlsZUVsZW1lbnQ6IHBhcmFtcy5zdHlsZUVsZW1lbnQKICAgIH0pOwogICAgdGhpcy5sb2FkaW5nUGFyYW1zID0gcGFyYW1zLmxvYWRpbmdQYXJhbXM7CiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXM7CiAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSBmYWN0b3J5LmNhbnZhc0ZhY3Rvcnk7CiAgICB0aGlzLmZpbHRlckZhY3RvcnkgPSBmYWN0b3J5LmZpbHRlckZhY3Rvcnk7CiAgICB0aGlzLmNNYXBSZWFkZXJGYWN0b3J5ID0gZmFjdG9yeS5jTWFwUmVhZGVyRmFjdG9yeTsKICAgIHRoaXMuc3RhbmRhcmRGb250RGF0YUZhY3RvcnkgPSBmYWN0b3J5LnN0YW5kYXJkRm9udERhdGFGYWN0b3J5OwogICAgdGhpcy53YXNtRmFjdG9yeSA9IGZhY3Rvcnkud2FzbUZhY3Rvcnk7CiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlOwogICAgdGhpcy5kZXN0cm95Q2FwYWJpbGl0eSA9IG51bGw7CiAgICB0aGlzLl9uZXR3b3JrU3RyZWFtID0gbmV0d29ya1N0cmVhbTsKICAgIHRoaXMuX2Z1bGxSZWFkZXIgPSBudWxsOwogICAgdGhpcy5fbGFzdFByb2dyZXNzID0gbnVsbDsKICAgIHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eSA9IFByb21pc2Uud2l0aFJlc29sdmVycygpOwogICAgdGhpcy5lbmFibGVIV0EgPSBlbmFibGVIV0E7CiAgICB0aGlzLnNldHVwTWVzc2FnZUhhbmRsZXIoKTsKICB9CiAgI2NhY2hlU2ltcGxlTWV0aG9kKG5hbWUsIGRhdGEgPSBudWxsKSB7CiAgICBjb25zdCBjYWNoZWRQcm9taXNlID0gdGhpcy4jbWV0aG9kUHJvbWlzZXMuZ2V0KG5hbWUpOwogICAgaWYgKGNhY2hlZFByb21pc2UpIHsKICAgICAgcmV0dXJuIGNhY2hlZFByb21pc2U7CiAgICB9CiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UobmFtZSwgZGF0YSk7CiAgICB0aGlzLiNtZXRob2RQcm9taXNlcy5zZXQobmFtZSwgcHJvbWlzZSk7CiAgICByZXR1cm4gcHJvbWlzZTsKICB9CiAgZ2V0IGFubm90YXRpb25TdG9yYWdlKCkgewogICAgcmV0dXJuIHNoYWRvdyh0aGlzLCAiYW5ub3RhdGlvblN0b3JhZ2UiLCBuZXcgQW5ub3RhdGlvblN0b3JhZ2UoKSk7CiAgfQogIGdldFJlbmRlcmluZ0ludGVudChpbnRlbnQsIGFubm90YXRpb25Nb2RlID0gQW5ub3RhdGlvbk1vZGUuRU5BQkxFLCBwcmludEFubm90YXRpb25TdG9yYWdlID0gbnVsbCwgaXNFZGl0aW5nID0gZmFsc2UsIGlzT3BMaXN0ID0gZmFsc2UpIHsKICAgIGxldCByZW5kZXJpbmdJbnRlbnQgPSBSZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVk7CiAgICBsZXQgYW5ub3RhdGlvblN0b3JhZ2VTZXJpYWxpemFibGUgPSBTZXJpYWxpemFibGVFbXB0eTsKICAgIHN3aXRjaCAoaW50ZW50KSB7CiAgICAgIGNhc2UgImFueSI6CiAgICAgICAgcmVuZGVyaW5nSW50ZW50ID0gUmVuZGVyaW5nSW50ZW50RmxhZy5BTlk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgImRpc3BsYXkiOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJwcmludCI6CiAgICAgICAgcmVuZGVyaW5nSW50ZW50ID0gUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVDsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB3YXJuKGBnZXRSZW5kZXJpbmdJbnRlbnQgLSBpbnZhbGlkIGludGVudDogJHtpbnRlbnR9YCk7CiAgICB9CiAgICBjb25zdCBhbm5vdGF0aW9uU3RvcmFnZSA9IHJlbmRlcmluZ0ludGVudCAmIFJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQgJiYgcHJpbnRBbm5vdGF0aW9uU3RvcmFnZSBpbnN0YW5jZW9mIFByaW50QW5ub3RhdGlvblN0b3JhZ2UgPyBwcmludEFubm90YXRpb25TdG9yYWdlIDogdGhpcy5hbm5vdGF0aW9uU3RvcmFnZTsKICAgIHN3aXRjaCAoYW5ub3RhdGlvbk1vZGUpIHsKICAgICAgY2FzZSBBbm5vdGF0aW9uTW9kZS5ESVNBQkxFOgogICAgICAgIHJlbmRlcmluZ0ludGVudCArPSBSZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX0RJU0FCTEU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQW5ub3RhdGlvbk1vZGUuRU5BQkxFOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEFubm90YXRpb25Nb2RlLkVOQUJMRV9GT1JNUzoKICAgICAgICByZW5kZXJpbmdJbnRlbnQgKz0gUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19GT1JNUzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBBbm5vdGF0aW9uTW9kZS5FTkFCTEVfU1RPUkFHRToKICAgICAgICByZW5kZXJpbmdJbnRlbnQgKz0gUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19TVE9SQUdFOwogICAgICAgIGFubm90YXRpb25TdG9yYWdlU2VyaWFsaXphYmxlID0gYW5ub3RhdGlvblN0b3JhZ2Uuc2VyaWFsaXphYmxlOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHdhcm4oYGdldFJlbmRlcmluZ0ludGVudCAtIGludmFsaWQgYW5ub3RhdGlvbk1vZGU6ICR7YW5ub3RhdGlvbk1vZGV9YCk7CiAgICB9CiAgICBpZiAoaXNFZGl0aW5nKSB7CiAgICAgIHJlbmRlcmluZ0ludGVudCArPSBSZW5kZXJpbmdJbnRlbnRGbGFnLklTX0VESVRJTkc7CiAgICB9CiAgICBpZiAoaXNPcExpc3QpIHsKICAgICAgcmVuZGVyaW5nSW50ZW50ICs9IFJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUOwogICAgfQogICAgY29uc3QgewogICAgICBpZHM6IG1vZGlmaWVkSWRzLAogICAgICBoYXNoOiBtb2RpZmllZElkc0hhc2gKICAgIH0gPSBhbm5vdGF0aW9uU3RvcmFnZS5tb2RpZmllZElkczsKICAgIGNvbnN0IGNhY2hlS2V5QnVmID0gW3JlbmRlcmluZ0ludGVudCwgYW5ub3RhdGlvblN0b3JhZ2VTZXJpYWxpemFibGUuaGFzaCwgbW9kaWZpZWRJZHNIYXNoXTsKICAgIHJldHVybiB7CiAgICAgIHJlbmRlcmluZ0ludGVudCwKICAgICAgY2FjaGVLZXk6IGNhY2hlS2V5QnVmLmpvaW4oIl8iKSwKICAgICAgYW5ub3RhdGlvblN0b3JhZ2VTZXJpYWxpemFibGUsCiAgICAgIG1vZGlmaWVkSWRzCiAgICB9OwogIH0KICBkZXN0cm95KCkgewogICAgaWYgKHRoaXMuZGVzdHJveUNhcGFiaWxpdHkpIHsKICAgICAgcmV0dXJuIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucHJvbWlzZTsKICAgIH0KICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTsKICAgIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkgPSBQcm9taXNlLndpdGhSZXNvbHZlcnMoKTsKICAgIHRoaXMuI3Bhc3N3b3JkQ2FwYWJpbGl0eT8ucmVqZWN0KG5ldyBFcnJvcigiV29ya2VyIHdhcyBkZXN0cm95ZWQgZHVyaW5nIG9uUGFzc3dvcmQgY2FsbGJhY2siKSk7CiAgICBjb25zdCB3YWl0T24gPSBbXTsKICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLiNwYWdlQ2FjaGUudmFsdWVzKCkpIHsKICAgICAgd2FpdE9uLnB1c2gocGFnZS5fZGVzdHJveSgpKTsKICAgIH0KICAgIHRoaXMuI3BhZ2VDYWNoZS5jbGVhcigpOwogICAgdGhpcy4jcGFnZVByb21pc2VzLmNsZWFyKCk7CiAgICB0aGlzLiNwYWdlUmVmQ2FjaGUuY2xlYXIoKTsKICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KCJhbm5vdGF0aW9uU3RvcmFnZSIpKSB7CiAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpOwogICAgfQogICAgY29uc3QgdGVybWluYXRlZCA9IHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJUZXJtaW5hdGUiLCBudWxsKTsKICAgIHdhaXRPbi5wdXNoKHRlcm1pbmF0ZWQpOwogICAgUHJvbWlzZS5hbGwod2FpdE9uKS50aGVuKCgpID0+IHsKICAgICAgdGhpcy5jb21tb25PYmpzLmNsZWFyKCk7CiAgICAgIHRoaXMuZm9udExvYWRlci5jbGVhcigpOwogICAgICB0aGlzLiNtZXRob2RQcm9taXNlcy5jbGVhcigpOwogICAgICB0aGlzLmZpbHRlckZhY3RvcnkuZGVzdHJveSgpOwogICAgICBUZXh0TGF5ZXIuY2xlYW51cCgpOwogICAgICB0aGlzLl9uZXR3b3JrU3RyZWFtPy5jYW5jZWxBbGxSZXF1ZXN0cyhuZXcgQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7CiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXI/LmRlc3Ryb3koKTsKICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IG51bGw7CiAgICAgIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucmVzb2x2ZSgpOwogICAgfSwgdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5yZWplY3QpOwogICAgcmV0dXJuIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucHJvbWlzZTsKICB9CiAgc2V0dXBNZXNzYWdlSGFuZGxlcigpIHsKICAgIGNvbnN0IHsKICAgICAgbWVzc2FnZUhhbmRsZXIsCiAgICAgIGxvYWRpbmdUYXNrCiAgICB9ID0gdGhpczsKICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCJHZXRSZWFkZXIiLCAoZGF0YSwgc2luaykgPT4gewogICAgICBhc3NlcnQodGhpcy5fbmV0d29ya1N0cmVhbSwgIkdldFJlYWRlciAtIG5vIGBJUERGU3RyZWFtYCBpbnN0YW5jZSBhdmFpbGFibGUuIik7CiAgICAgIHRoaXMuX2Z1bGxSZWFkZXIgPSB0aGlzLl9uZXR3b3JrU3RyZWFtLmdldEZ1bGxSZWFkZXIoKTsKICAgICAgdGhpcy5fZnVsbFJlYWRlci5vblByb2dyZXNzID0gZXZ0ID0+IHsKICAgICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB7CiAgICAgICAgICBsb2FkZWQ6IGV2dC5sb2FkZWQsCiAgICAgICAgICB0b3RhbDogZXZ0LnRvdGFsCiAgICAgICAgfTsKICAgICAgfTsKICAgICAgc2luay5vblB1bGwgPSAoKSA9PiB7CiAgICAgICAgdGhpcy5fZnVsbFJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiAoewogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkb25lCiAgICAgICAgfSkgewogICAgICAgICAgaWYgKGRvbmUpIHsKICAgICAgICAgICAgc2luay5jbG9zZSgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBhc3NlcnQodmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciwgIkdldFJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLiIpOwogICAgICAgICAgc2luay5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSwgMSwgW3ZhbHVlXSk7CiAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHsKICAgICAgICAgIHNpbmsuZXJyb3IocmVhc29uKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgc2luay5vbkNhbmNlbCA9IHJlYXNvbiA9PiB7CiAgICAgICAgdGhpcy5fZnVsbFJlYWRlci5jYW5jZWwocmVhc29uKTsKICAgICAgICBzaW5rLnJlYWR5LmNhdGNoKHJlYWR5UmVhc29uID0+IHsKICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyByZWFkeVJlYXNvbjsKICAgICAgICB9KTsKICAgICAgfTsKICAgIH0pOwogICAgbWVzc2FnZUhhbmRsZXIub24oIlJlYWRlckhlYWRlcnNSZWFkeSIsIGFzeW5jIGRhdGEgPT4gewogICAgICBhd2FpdCB0aGlzLl9mdWxsUmVhZGVyLmhlYWRlcnNSZWFkeTsKICAgICAgY29uc3QgewogICAgICAgIGlzU3RyZWFtaW5nU3VwcG9ydGVkLAogICAgICAgIGlzUmFuZ2VTdXBwb3J0ZWQsCiAgICAgICAgY29udGVudExlbmd0aAogICAgICB9ID0gdGhpcy5fZnVsbFJlYWRlcjsKICAgICAgaWYgKCFpc1N0cmVhbWluZ1N1cHBvcnRlZCB8fCAhaXNSYW5nZVN1cHBvcnRlZCkgewogICAgICAgIGlmICh0aGlzLl9sYXN0UHJvZ3Jlc3MpIHsKICAgICAgICAgIGxvYWRpbmdUYXNrLm9uUHJvZ3Jlc3M/Lih0aGlzLl9sYXN0UHJvZ3Jlc3MpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3MgPSBldnQgPT4gewogICAgICAgICAgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcz8uKHsKICAgICAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkLAogICAgICAgICAgICB0b3RhbDogZXZ0LnRvdGFsCiAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgaXNTdHJlYW1pbmdTdXBwb3J0ZWQsCiAgICAgICAgaXNSYW5nZVN1cHBvcnRlZCwKICAgICAgICBjb250ZW50TGVuZ3RoCiAgICAgIH07CiAgICB9KTsKICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCJHZXRSYW5nZVJlYWRlciIsIChkYXRhLCBzaW5rKSA9PiB7CiAgICAgIGFzc2VydCh0aGlzLl9uZXR3b3JrU3RyZWFtLCAiR2V0UmFuZ2VSZWFkZXIgLSBubyBgSVBERlN0cmVhbWAgaW5zdGFuY2UgYXZhaWxhYmxlLiIpOwogICAgICBjb25zdCByYW5nZVJlYWRlciA9IHRoaXMuX25ldHdvcmtTdHJlYW0uZ2V0UmFuZ2VSZWFkZXIoZGF0YS5iZWdpbiwgZGF0YS5lbmQpOwogICAgICBpZiAoIXJhbmdlUmVhZGVyKSB7CiAgICAgICAgc2luay5jbG9zZSgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBzaW5rLm9uUHVsbCA9ICgpID0+IHsKICAgICAgICByYW5nZVJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiAoewogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkb25lCiAgICAgICAgfSkgewogICAgICAgICAgaWYgKGRvbmUpIHsKICAgICAgICAgICAgc2luay5jbG9zZSgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBhc3NlcnQodmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciwgIkdldFJhbmdlUmVhZGVyIC0gZXhwZWN0ZWQgYW4gQXJyYXlCdWZmZXIuIik7CiAgICAgICAgICBzaW5rLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpLCAxLCBbdmFsdWVdKTsKICAgICAgICB9KS5jYXRjaChyZWFzb24gPT4gewogICAgICAgICAgc2luay5lcnJvcihyZWFzb24pOwogICAgICAgIH0pOwogICAgICB9OwogICAgICBzaW5rLm9uQ2FuY2VsID0gcmVhc29uID0+IHsKICAgICAgICByYW5nZVJlYWRlci5jYW5jZWwocmVhc29uKTsKICAgICAgICBzaW5rLnJlYWR5LmNhdGNoKHJlYWR5UmVhc29uID0+IHsKICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyByZWFkeVJlYXNvbjsKICAgICAgICB9KTsKICAgICAgfTsKICAgIH0pOwogICAgbWVzc2FnZUhhbmRsZXIub24oIkdldERvYyIsICh7CiAgICAgIHBkZkluZm8KICAgIH0pID0+IHsKICAgICAgdGhpcy5fbnVtUGFnZXMgPSBwZGZJbmZvLm51bVBhZ2VzOwogICAgICB0aGlzLl9odG1sRm9yWGZhID0gcGRmSW5mby5odG1sRm9yWGZhOwogICAgICBkZWxldGUgcGRmSW5mby5odG1sRm9yWGZhOwogICAgICBsb2FkaW5nVGFzay5fY2FwYWJpbGl0eS5yZXNvbHZlKG5ldyBQREZEb2N1bWVudFByb3h5KHBkZkluZm8sIHRoaXMpKTsKICAgIH0pOwogICAgbWVzc2FnZUhhbmRsZXIub24oIkRvY0V4Y2VwdGlvbiIsIGV4ID0+IHsKICAgICAgbG9hZGluZ1Rhc2suX2NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZXgpKTsKICAgIH0pOwogICAgbWVzc2FnZUhhbmRsZXIub24oIlBhc3N3b3JkUmVxdWVzdCIsIGV4ID0+IHsKICAgICAgdGhpcy4jcGFzc3dvcmRDYXBhYmlsaXR5ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKCFsb2FkaW5nVGFzay5vblBhc3N3b3JkKSB7CiAgICAgICAgICB0aHJvdyB3cmFwUmVhc29uKGV4KTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdXBkYXRlUGFzc3dvcmQgPSBwYXNzd29yZCA9PiB7CiAgICAgICAgICBpZiAocGFzc3dvcmQgaW5zdGFuY2VvZiBFcnJvcikgewogICAgICAgICAgICB0aGlzLiNwYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KHBhc3N3b3JkKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuI3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZXNvbHZlKHsKICAgICAgICAgICAgICBwYXNzd29yZAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGxvYWRpbmdUYXNrLm9uUGFzc3dvcmQodXBkYXRlUGFzc3dvcmQsIGV4LmNvZGUpOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICB0aGlzLiNwYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KGVycik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuI3Bhc3N3b3JkQ2FwYWJpbGl0eS5wcm9taXNlOwogICAgfSk7CiAgICBtZXNzYWdlSGFuZGxlci5vbigiRGF0YUxvYWRlZCIsIGRhdGEgPT4gewogICAgICBsb2FkaW5nVGFzay5vblByb2dyZXNzPy4oewogICAgICAgIGxvYWRlZDogZGF0YS5sZW5ndGgsCiAgICAgICAgdG90YWw6IGRhdGEubGVuZ3RoCiAgICAgIH0pOwogICAgICB0aGlzLmRvd25sb2FkSW5mb0NhcGFiaWxpdHkucmVzb2x2ZShkYXRhKTsKICAgIH0pOwogICAgbWVzc2FnZUhhbmRsZXIub24oIlN0YXJ0UmVuZGVyUGFnZSIsIGRhdGEgPT4gewogICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgcGFnZSA9IHRoaXMuI3BhZ2VDYWNoZS5nZXQoZGF0YS5wYWdlSW5kZXgpOwogICAgICBwYWdlLl9zdGFydFJlbmRlclBhZ2UoZGF0YS50cmFuc3BhcmVuY3ksIGRhdGEuY2FjaGVLZXkpOwogICAgfSk7CiAgICBtZXNzYWdlSGFuZGxlci5vbigiY29tbW9ub2JqIiwgKFtpZCwgdHlwZSwgZXhwb3J0ZWREYXRhXSkgPT4gewogICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5jb21tb25PYmpzLmhhcyhpZCkpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICBjYXNlICJGb250IjoKICAgICAgICAgIGlmICgiZXJyb3IiIGluIGV4cG9ydGVkRGF0YSkgewogICAgICAgICAgICBjb25zdCBleHBvcnRlZEVycm9yID0gZXhwb3J0ZWREYXRhLmVycm9yOwogICAgICAgICAgICB3YXJuKGBFcnJvciBkdXJpbmcgZm9udCBsb2FkaW5nOiAke2V4cG9ydGVkRXJyb3J9YCk7CiAgICAgICAgICAgIHRoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKGlkLCBleHBvcnRlZEVycm9yKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBmb250RGF0YSA9IG5ldyBGb250SW5mbyhleHBvcnRlZERhdGEpOwogICAgICAgICAgY29uc3QgaW5zcGVjdEZvbnQgPSB0aGlzLl9wYXJhbXMucGRmQnVnICYmIGdsb2JhbFRoaXMuRm9udEluc3BlY3Rvcj8uZW5hYmxlZCA/IChmb250LCB1cmwpID0+IGdsb2JhbFRoaXMuRm9udEluc3BlY3Rvci5mb250QWRkZWQoZm9udCwgdXJsKSA6IG51bGw7CiAgICAgICAgICBjb25zdCBmb250ID0gbmV3IEZvbnRGYWNlT2JqZWN0KGZvbnREYXRhLCBpbnNwZWN0Rm9udCwgZXhwb3J0ZWREYXRhLmV4dHJhLCBleHBvcnRlZERhdGEuY2hhclByb2NPcGVyYXRvckxpc3QpOwogICAgICAgICAgdGhpcy5mb250TG9hZGVyLmJpbmQoZm9udCkuY2F0Y2goKCkgPT4gbWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJGb250RmFsbGJhY2siLCB7CiAgICAgICAgICAgIGlkCiAgICAgICAgICB9KSkuZmluYWxseSgoKSA9PiB7CiAgICAgICAgICAgIGlmICghZm9udC5mb250RXh0cmFQcm9wZXJ0aWVzICYmIGZvbnQuZGF0YSkgewogICAgICAgICAgICAgIGZvbnQuY2xlYXJEYXRhKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5jb21tb25PYmpzLnJlc29sdmUoaWQsIGZvbnQpOwogICAgICAgICAgfSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJDb3B5TG9jYWxJbWFnZSI6CiAgICAgICAgICBjb25zdCB7CiAgICAgICAgICAgIGltYWdlUmVmCiAgICAgICAgICB9ID0gZXhwb3J0ZWREYXRhOwogICAgICAgICAgYXNzZXJ0KGltYWdlUmVmLCAiVGhlIGltYWdlUmVmIG11c3QgYmUgZGVmaW5lZC4iKTsKICAgICAgICAgIGZvciAoY29uc3QgcGFnZVByb3h5IG9mIHRoaXMuI3BhZ2VDYWNoZS52YWx1ZXMoKSkgewogICAgICAgICAgICBmb3IgKGNvbnN0IFssIGRhdGFdIG9mIHBhZ2VQcm94eS5vYmpzKSB7CiAgICAgICAgICAgICAgaWYgKGRhdGE/LnJlZiAhPT0gaW1hZ2VSZWYpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoIWRhdGEuZGF0YUxlbikgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKGlkLCBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YSkpOwogICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGFMZW47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkZvbnRQYXRoIjoKICAgICAgICBjYXNlICJJbWFnZSI6CiAgICAgICAgICB0aGlzLmNvbW1vbk9ianMucmVzb2x2ZShpZCwgZXhwb3J0ZWREYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlBhdHRlcm4iOgogICAgICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBQYXR0ZXJuSW5mbyhleHBvcnRlZERhdGEpOwogICAgICAgICAgdGhpcy5jb21tb25PYmpzLnJlc29sdmUoaWQsIHBhdHRlcm4uZ2V0SVIoKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgdW5rbm93biBjb21tb24gb2JqZWN0IHR5cGUgJHt0eXBlfWApOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfSk7CiAgICBtZXNzYWdlSGFuZGxlci5vbigib2JqIiwgKFtpZCwgcGFnZUluZGV4LCB0eXBlLCBpbWFnZURhdGFdKSA9PiB7CiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBwYWdlUHJveHkgPSB0aGlzLiNwYWdlQ2FjaGUuZ2V0KHBhZ2VJbmRleCk7CiAgICAgIGlmIChwYWdlUHJveHkub2Jqcy5oYXMoaWQpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChwYWdlUHJveHkuX2ludGVudFN0YXRlcy5zaXplID09PSAwKSB7CiAgICAgICAgaW1hZ2VEYXRhPy5iaXRtYXA/LmNsb3NlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgIGNhc2UgIkltYWdlIjoKICAgICAgICBjYXNlICJQYXR0ZXJuIjoKICAgICAgICAgIHBhZ2VQcm94eS5vYmpzLnJlc29sdmUoaWQsIGltYWdlRGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgdW5rbm93biBvYmplY3QgdHlwZSAke3R5cGV9YCk7CiAgICAgIH0KICAgIH0pOwogICAgbWVzc2FnZUhhbmRsZXIub24oIkRvY1Byb2dyZXNzIiwgZGF0YSA9PiB7CiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBsb2FkaW5nVGFzay5vblByb2dyZXNzPy4oewogICAgICAgIGxvYWRlZDogZGF0YS5sb2FkZWQsCiAgICAgICAgdG90YWw6IGRhdGEudG90YWwKICAgICAgfSk7CiAgICB9KTsKICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCJGZXRjaEJpbmFyeURhdGEiLCBhc3luYyBkYXRhID0+IHsKICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZC4iKTsKICAgICAgfQogICAgICBjb25zdCBmYWN0b3J5ID0gdGhpc1tkYXRhLnR5cGVdOwogICAgICBpZiAoIWZhY3RvcnkpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZGF0YS50eXBlfSBub3QgaW5pdGlhbGl6ZWQsIHNlZSB0aGUgXGB1c2VXb3JrZXJGZXRjaFxgIHBhcmFtZXRlci5gKTsKICAgICAgfQogICAgICByZXR1cm4gZmFjdG9yeS5mZXRjaChkYXRhKTsKICAgIH0pOwogIH0KICBnZXREYXRhKCkgewogICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXREYXRhIiwgbnVsbCk7CiAgfQogIHNhdmVEb2N1bWVudCgpIHsKICAgIGlmICh0aGlzLmFubm90YXRpb25TdG9yYWdlLnNpemUgPD0gMCkgewogICAgICB3YXJuKCJzYXZlRG9jdW1lbnQgY2FsbGVkIHdoaWxlIGBhbm5vdGF0aW9uU3RvcmFnZWAgaXMgZW1wdHksICIgKyAicGxlYXNlIHVzZSB0aGUgZ2V0RGF0YS1tZXRob2QgaW5zdGVhZC4iKTsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgbWFwLAogICAgICB0cmFuc2ZlcgogICAgfSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2VyaWFsaXphYmxlOwogICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJTYXZlRG9jdW1lbnQiLCB7CiAgICAgIGlzUHVyZVhmYTogISF0aGlzLl9odG1sRm9yWGZhLAogICAgICBudW1QYWdlczogdGhpcy5fbnVtUGFnZXMsCiAgICAgIGFubm90YXRpb25TdG9yYWdlOiBtYXAsCiAgICAgIGZpbGVuYW1lOiB0aGlzLl9mdWxsUmVhZGVyPy5maWxlbmFtZSA/PyBudWxsCiAgICB9LCB0cmFuc2ZlcikuZmluYWxseSgoKSA9PiB7CiAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpOwogICAgfSk7CiAgfQogIGdldFBhZ2UocGFnZU51bWJlcikgewogICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBhZ2VOdW1iZXIpIHx8IHBhZ2VOdW1iZXIgPD0gMCB8fCBwYWdlTnVtYmVyID4gdGhpcy5fbnVtUGFnZXMpIHsKICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBwYWdlIHJlcXVlc3QuIikpOwogICAgfQogICAgY29uc3QgcGFnZUluZGV4ID0gcGFnZU51bWJlciAtIDEsCiAgICAgIGNhY2hlZFByb21pc2UgPSB0aGlzLiNwYWdlUHJvbWlzZXMuZ2V0KHBhZ2VJbmRleCk7CiAgICBpZiAoY2FjaGVkUHJvbWlzZSkgewogICAgICByZXR1cm4gY2FjaGVkUHJvbWlzZTsKICAgIH0KICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZSIsIHsKICAgICAgcGFnZUluZGV4CiAgICB9KS50aGVuKHBhZ2VJbmZvID0+IHsKICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUcmFuc3BvcnQgZGVzdHJveWVkIik7CiAgICAgIH0KICAgICAgaWYgKHBhZ2VJbmZvLnJlZlN0cikgewogICAgICAgIHRoaXMuI3BhZ2VSZWZDYWNoZS5zZXQocGFnZUluZm8ucmVmU3RyLCBwYWdlTnVtYmVyKTsKICAgICAgfQogICAgICBjb25zdCBwYWdlID0gbmV3IFBERlBhZ2VQcm94eShwYWdlSW5kZXgsIHBhZ2VJbmZvLCB0aGlzLCB0aGlzLl9wYXJhbXMucGRmQnVnKTsKICAgICAgdGhpcy4jcGFnZUNhY2hlLnNldChwYWdlSW5kZXgsIHBhZ2UpOwogICAgICByZXR1cm4gcGFnZTsKICAgIH0pOwogICAgdGhpcy4jcGFnZVByb21pc2VzLnNldChwYWdlSW5kZXgsIHByb21pc2UpOwogICAgcmV0dXJuIHByb21pc2U7CiAgfQogIGdldFBhZ2VJbmRleChyZWYpIHsKICAgIGlmICghaXNSZWZQcm94eShyZWYpKSB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkludmFsaWQgcGFnZUluZGV4IHJlcXVlc3QuIikpOwogICAgfQogICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlSW5kZXgiLCB7CiAgICAgIG51bTogcmVmLm51bSwKICAgICAgZ2VuOiByZWYuZ2VuCiAgICB9KTsKICB9CiAgZ2V0QW5ub3RhdGlvbnMocGFnZUluZGV4LCBpbnRlbnQpIHsKICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0QW5ub3RhdGlvbnMiLCB7CiAgICAgIHBhZ2VJbmRleCwKICAgICAgaW50ZW50CiAgICB9KTsKICB9CiAgZ2V0RmllbGRPYmplY3RzKCkgewogICAgcmV0dXJuIHRoaXMuI2NhY2hlU2ltcGxlTWV0aG9kKCJHZXRGaWVsZE9iamVjdHMiKTsKICB9CiAgaGFzSlNBY3Rpb25zKCkgewogICAgcmV0dXJuIHRoaXMuI2NhY2hlU2ltcGxlTWV0aG9kKCJIYXNKU0FjdGlvbnMiKTsKICB9CiAgZ2V0Q2FsY3VsYXRpb25PcmRlcklkcygpIHsKICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0Q2FsY3VsYXRpb25PcmRlcklkcyIsIG51bGwpOwogIH0KICBnZXREZXN0aW5hdGlvbnMoKSB7CiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldERlc3RpbmF0aW9ucyIsIG51bGwpOwogIH0KICBnZXREZXN0aW5hdGlvbihpZCkgewogICAgaWYgKHR5cGVvZiBpZCAhPT0gInN0cmluZyIpIHsKICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LiIpKTsKICAgIH0KICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGVzdGluYXRpb24iLCB7CiAgICAgIGlkCiAgICB9KTsKICB9CiAgZ2V0UGFnZUxhYmVscygpIHsKICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxhYmVscyIsIG51bGwpOwogIH0KICBnZXRQYWdlTGF5b3V0KCkgewogICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlTGF5b3V0IiwgbnVsbCk7CiAgfQogIGdldFBhZ2VNb2RlKCkgewogICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlTW9kZSIsIG51bGwpOwogIH0KICBnZXRWaWV3ZXJQcmVmZXJlbmNlcygpIHsKICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLCBudWxsKTsKICB9CiAgZ2V0T3BlbkFjdGlvbigpIHsKICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0T3BlbkFjdGlvbiIsIG51bGwpOwogIH0KICBnZXRBdHRhY2htZW50cygpIHsKICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0QXR0YWNobWVudHMiLCBudWxsKTsKICB9CiAgZ2V0QW5ub3RhdGlvbnNCeVR5cGUodHlwZXMsIHBhZ2VJbmRleGVzVG9Ta2lwKSB7CiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldEFubm90YXRpb25zQnlUeXBlIiwgewogICAgICB0eXBlcywKICAgICAgcGFnZUluZGV4ZXNUb1NraXAKICAgIH0pOwogIH0KICBnZXREb2NKU0FjdGlvbnMoKSB7CiAgICByZXR1cm4gdGhpcy4jY2FjaGVTaW1wbGVNZXRob2QoIkdldERvY0pTQWN0aW9ucyIpOwogIH0KICBnZXRQYWdlSlNBY3Rpb25zKHBhZ2VJbmRleCkgewogICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlSlNBY3Rpb25zIiwgewogICAgICBwYWdlSW5kZXgKICAgIH0pOwogIH0KICBnZXRTdHJ1Y3RUcmVlKHBhZ2VJbmRleCkgewogICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRTdHJ1Y3RUcmVlIiwgewogICAgICBwYWdlSW5kZXgKICAgIH0pOwogIH0KICBnZXRPdXRsaW5lKCkgewogICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRPdXRsaW5lIiwgbnVsbCk7CiAgfQogIGdldE9wdGlvbmFsQ29udGVudENvbmZpZyhyZW5kZXJpbmdJbnRlbnQpIHsKICAgIHJldHVybiB0aGlzLiNjYWNoZVNpbXBsZU1ldGhvZCgiR2V0T3B0aW9uYWxDb250ZW50Q29uZmlnIikudGhlbihkYXRhID0+IG5ldyBPcHRpb25hbENvbnRlbnRDb25maWcoZGF0YSwgcmVuZGVyaW5nSW50ZW50KSk7CiAgfQogIGdldFBlcm1pc3Npb25zKCkgewogICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQZXJtaXNzaW9ucyIsIG51bGwpOwogIH0KICBnZXRNZXRhZGF0YSgpIHsKICAgIGNvbnN0IG5hbWUgPSAiR2V0TWV0YWRhdGEiLAogICAgICBjYWNoZWRQcm9taXNlID0gdGhpcy4jbWV0aG9kUHJvbWlzZXMuZ2V0KG5hbWUpOwogICAgaWYgKGNhY2hlZFByb21pc2UpIHsKICAgICAgcmV0dXJuIGNhY2hlZFByb21pc2U7CiAgICB9CiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UobmFtZSwgbnVsbCkudGhlbihyZXN1bHRzID0+ICh7CiAgICAgIGluZm86IHJlc3VsdHNbMF0sCiAgICAgIG1ldGFkYXRhOiByZXN1bHRzWzFdID8gbmV3IE1ldGFkYXRhKHJlc3VsdHNbMV0pIDogbnVsbCwKICAgICAgY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU6IHRoaXMuX2Z1bGxSZWFkZXI/LmZpbGVuYW1lID8/IG51bGwsCiAgICAgIGNvbnRlbnRMZW5ndGg6IHRoaXMuX2Z1bGxSZWFkZXI/LmNvbnRlbnRMZW5ndGggPz8gbnVsbAogICAgfSkpOwogICAgdGhpcy4jbWV0aG9kUHJvbWlzZXMuc2V0KG5hbWUsIHByb21pc2UpOwogICAgcmV0dXJuIHByb21pc2U7CiAgfQogIGdldE1hcmtJbmZvKCkgewogICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRNYXJrSW5mbyIsIG51bGwpOwogIH0KICBhc3luYyBzdGFydENsZWFudXAoa2VlcExvYWRlZEZvbnRzID0gZmFsc2UpIHsKICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBhd2FpdCB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiQ2xlYW51cCIsIG51bGwpOwogICAgZm9yIChjb25zdCBwYWdlIG9mIHRoaXMuI3BhZ2VDYWNoZS52YWx1ZXMoKSkgewogICAgICBjb25zdCBjbGVhbnVwU3VjY2Vzc2Z1bCA9IHBhZ2UuY2xlYW51cCgpOwogICAgICBpZiAoIWNsZWFudXBTdWNjZXNzZnVsKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdGFydENsZWFudXA6IFBhZ2UgJHtwYWdlLnBhZ2VOdW1iZXJ9IGlzIGN1cnJlbnRseSByZW5kZXJpbmcuYCk7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuY29tbW9uT2Jqcy5jbGVhcigpOwogICAgaWYgKCFrZWVwTG9hZGVkRm9udHMpIHsKICAgICAgdGhpcy5mb250TG9hZGVyLmNsZWFyKCk7CiAgICB9CiAgICB0aGlzLiNtZXRob2RQcm9taXNlcy5jbGVhcigpOwogICAgdGhpcy5maWx0ZXJGYWN0b3J5LmRlc3Ryb3kodHJ1ZSk7CiAgICBUZXh0TGF5ZXIuY2xlYW51cCgpOwogIH0KICBjYWNoZWRQYWdlTnVtYmVyKHJlZikgewogICAgaWYgKCFpc1JlZlByb3h5KHJlZikpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCByZWZTdHIgPSByZWYuZ2VuID09PSAwID8gYCR7cmVmLm51bX1SYCA6IGAke3JlZi5udW19UiR7cmVmLmdlbn1gOwogICAgcmV0dXJuIHRoaXMuI3BhZ2VSZWZDYWNoZS5nZXQocmVmU3RyKSA/PyBudWxsOwogIH0KfQpjbGFzcyBSZW5kZXJUYXNrIHsKICAjaW50ZXJuYWxSZW5kZXJUYXNrID0gbnVsbDsKICBvbkNvbnRpbnVlID0gbnVsbDsKICBvbkVycm9yID0gbnVsbDsKICBjb25zdHJ1Y3RvcihpbnRlcm5hbFJlbmRlclRhc2spIHsKICAgIHRoaXMuI2ludGVybmFsUmVuZGVyVGFzayA9IGludGVybmFsUmVuZGVyVGFzazsKICB9CiAgZ2V0IHByb21pc2UoKSB7CiAgICByZXR1cm4gdGhpcy4jaW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucHJvbWlzZTsKICB9CiAgY2FuY2VsKGV4dHJhRGVsYXkgPSAwKSB7CiAgICB0aGlzLiNpbnRlcm5hbFJlbmRlclRhc2suY2FuY2VsKG51bGwsIGV4dHJhRGVsYXkpOwogIH0KICBnZXQgc2VwYXJhdGVBbm5vdHMoKSB7CiAgICBjb25zdCB7CiAgICAgIHNlcGFyYXRlQW5ub3RzCiAgICB9ID0gdGhpcy4jaW50ZXJuYWxSZW5kZXJUYXNrLm9wZXJhdG9yTGlzdDsKICAgIGlmICghc2VwYXJhdGVBbm5vdHMpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29uc3QgewogICAgICBhbm5vdGF0aW9uQ2FudmFzTWFwCiAgICB9ID0gdGhpcy4jaW50ZXJuYWxSZW5kZXJUYXNrOwogICAgcmV0dXJuIHNlcGFyYXRlQW5ub3RzLmZvcm0gfHwgc2VwYXJhdGVBbm5vdHMuY2FudmFzICYmIGFubm90YXRpb25DYW52YXNNYXA/LnNpemUgPiAwOwogIH0KfQpjbGFzcyBJbnRlcm5hbFJlbmRlclRhc2sgewogICNyQUYgPSBudWxsOwogIHN0YXRpYyAjY2FudmFzSW5Vc2UgPSBuZXcgV2Vha1NldCgpOwogIGNvbnN0cnVjdG9yKHsKICAgIGNhbGxiYWNrLAogICAgcGFyYW1zLAogICAgb2JqcywKICAgIGNvbW1vbk9ianMsCiAgICBhbm5vdGF0aW9uQ2FudmFzTWFwLAogICAgb3BlcmF0b3JMaXN0LAogICAgcGFnZUluZGV4LAogICAgY2FudmFzRmFjdG9yeSwKICAgIGZpbHRlckZhY3RvcnksCiAgICB1c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmYWxzZSwKICAgIHBkZkJ1ZyA9IGZhbHNlLAogICAgcGFnZUNvbG9ycyA9IG51bGwsCiAgICBlbmFibGVIV0EgPSBmYWxzZSwKICAgIG9wZXJhdGlvbnNGaWx0ZXIgPSBudWxsCiAgfSkgewogICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7CiAgICB0aGlzLm9ianMgPSBvYmpzOwogICAgdGhpcy5jb21tb25PYmpzID0gY29tbW9uT2JqczsKICAgIHRoaXMuYW5ub3RhdGlvbkNhbnZhc01hcCA9IGFubm90YXRpb25DYW52YXNNYXA7CiAgICB0aGlzLm9wZXJhdG9yTGlzdElkeCA9IG51bGw7CiAgICB0aGlzLm9wZXJhdG9yTGlzdCA9IG9wZXJhdG9yTGlzdDsKICAgIHRoaXMuX3BhZ2VJbmRleCA9IHBhZ2VJbmRleDsKICAgIHRoaXMuY2FudmFzRmFjdG9yeSA9IGNhbnZhc0ZhY3Rvcnk7CiAgICB0aGlzLmZpbHRlckZhY3RvcnkgPSBmaWx0ZXJGYWN0b3J5OwogICAgdGhpcy5fcGRmQnVnID0gcGRmQnVnOwogICAgdGhpcy5wYWdlQ29sb3JzID0gcGFnZUNvbG9yczsKICAgIHRoaXMucnVubmluZyA9IGZhbHNlOwogICAgdGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2sgPSBudWxsOwogICAgdGhpcy5ncmFwaGljc1JlYWR5ID0gZmFsc2U7CiAgICB0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB1c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09IHRydWUgJiYgdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCI7CiAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlOwogICAgdGhpcy5jYXBhYmlsaXR5ID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7CiAgICB0aGlzLnRhc2sgPSBuZXcgUmVuZGVyVGFzayh0aGlzKTsKICAgIHRoaXMuX2NhbmNlbEJvdW5kID0gdGhpcy5jYW5jZWwuYmluZCh0aGlzKTsKICAgIHRoaXMuX2NvbnRpbnVlQm91bmQgPSB0aGlzLl9jb250aW51ZS5iaW5kKHRoaXMpOwogICAgdGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQgPSB0aGlzLl9zY2hlZHVsZU5leHQuYmluZCh0aGlzKTsKICAgIHRoaXMuX25leHRCb3VuZCA9IHRoaXMuX25leHQuYmluZCh0aGlzKTsKICAgIHRoaXMuX2NhbnZhcyA9IHBhcmFtcy5jYW52YXM7CiAgICB0aGlzLl9jYW52YXNDb250ZXh0ID0gcGFyYW1zLmNhbnZhcyA/IG51bGwgOiBwYXJhbXMuY2FudmFzQ29udGV4dDsKICAgIHRoaXMuX2VuYWJsZUhXQSA9IGVuYWJsZUhXQTsKICAgIHRoaXMuX2RlcGVuZGVuY3lUcmFja2VyID0gcGFyYW1zLmRlcGVuZGVuY3lUcmFja2VyOwogICAgdGhpcy5fb3BlcmF0aW9uc0ZpbHRlciA9IG9wZXJhdGlvbnNGaWx0ZXI7CiAgfQogIGdldCBjb21wbGV0ZWQoKSB7CiAgICByZXR1cm4gdGhpcy5jYXBhYmlsaXR5LnByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogIH0KICBpbml0aWFsaXplR3JhcGhpY3MoewogICAgdHJhbnNwYXJlbmN5ID0gZmFsc2UsCiAgICBvcHRpb25hbENvbnRlbnRDb25maWcKICB9KSB7CiAgICBpZiAodGhpcy5jYW5jZWxsZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuX2NhbnZhcykgewogICAgICBpZiAoSW50ZXJuYWxSZW5kZXJUYXNrLiNjYW52YXNJblVzZS5oYXModGhpcy5fY2FudmFzKSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHVzZSB0aGUgc2FtZSBjYW52YXMgZHVyaW5nIG11bHRpcGxlIHJlbmRlcigpIG9wZXJhdGlvbnMuICIgKyAiVXNlIGRpZmZlcmVudCBjYW52YXMgb3IgZW5zdXJlIHByZXZpb3VzIG9wZXJhdGlvbnMgd2VyZSAiICsgImNhbmNlbGxlZCBvciBjb21wbGV0ZWQuIik7CiAgICAgIH0KICAgICAgSW50ZXJuYWxSZW5kZXJUYXNrLiNjYW52YXNJblVzZS5hZGQodGhpcy5fY2FudmFzKTsKICAgIH0KICAgIGlmICh0aGlzLl9wZGZCdWcgJiYgZ2xvYmFsVGhpcy5TdGVwcGVyTWFuYWdlcj8uZW5hYmxlZCkgewogICAgICB0aGlzLnN0ZXBwZXIgPSBnbG9iYWxUaGlzLlN0ZXBwZXJNYW5hZ2VyLmNyZWF0ZSh0aGlzLl9wYWdlSW5kZXgpOwogICAgICB0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCk7CiAgICAgIHRoaXMuc3RlcHBlci5uZXh0QnJlYWtQb2ludCA9IHRoaXMuc3RlcHBlci5nZXROZXh0QnJlYWtQb2ludCgpOwogICAgfQogICAgY29uc3QgewogICAgICB2aWV3cG9ydCwKICAgICAgdHJhbnNmb3JtLAogICAgICBiYWNrZ3JvdW5kLAogICAgICBkZXBlbmRlbmN5VHJhY2tlcgogICAgfSA9IHRoaXMucGFyYW1zOwogICAgY29uc3QgY2FudmFzQ29udGV4dCA9IHRoaXMuX2NhbnZhc0NvbnRleHQgfHwgdGhpcy5fY2FudmFzLmdldENvbnRleHQoIjJkIiwgewogICAgICBhbHBoYTogZmFsc2UsCiAgICAgIHdpbGxSZWFkRnJlcXVlbnRseTogIXRoaXMuX2VuYWJsZUhXQQogICAgfSk7CiAgICB0aGlzLmdmeCA9IG5ldyBDYW52YXNHcmFwaGljcyhjYW52YXNDb250ZXh0LCB0aGlzLmNvbW1vbk9ianMsIHRoaXMub2JqcywgdGhpcy5jYW52YXNGYWN0b3J5LCB0aGlzLmZpbHRlckZhY3RvcnksIHsKICAgICAgb3B0aW9uYWxDb250ZW50Q29uZmlnCiAgICB9LCB0aGlzLmFubm90YXRpb25DYW52YXNNYXAsIHRoaXMucGFnZUNvbG9ycywgZGVwZW5kZW5jeVRyYWNrZXIpOwogICAgdGhpcy5nZnguYmVnaW5EcmF3aW5nKHsKICAgICAgdHJhbnNmb3JtLAogICAgICB2aWV3cG9ydCwKICAgICAgdHJhbnNwYXJlbmN5LAogICAgICBiYWNrZ3JvdW5kCiAgICB9KTsKICAgIHRoaXMub3BlcmF0b3JMaXN0SWR4ID0gMDsKICAgIHRoaXMuZ3JhcGhpY3NSZWFkeSA9IHRydWU7CiAgICB0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaz8uKCk7CiAgfQogIGNhbmNlbChlcnJvciA9IG51bGwsIGV4dHJhRGVsYXkgPSAwKSB7CiAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKICAgIHRoaXMuY2FuY2VsbGVkID0gdHJ1ZTsKICAgIHRoaXMuZ2Z4Py5lbmREcmF3aW5nKCk7CiAgICBpZiAodGhpcy4jckFGKSB7CiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLiNyQUYpOwogICAgICB0aGlzLiNyQUYgPSBudWxsOwogICAgfQogICAgSW50ZXJuYWxSZW5kZXJUYXNrLiNjYW52YXNJblVzZS5kZWxldGUodGhpcy5fY2FudmFzKTsKICAgIGVycm9yIHx8PSBuZXcgUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uKGBSZW5kZXJpbmcgY2FuY2VsbGVkLCBwYWdlICR7dGhpcy5fcGFnZUluZGV4ICsgMX1gLCBleHRyYURlbGF5KTsKICAgIHRoaXMuY2FsbGJhY2soZXJyb3IpOwogICAgdGhpcy50YXNrLm9uRXJyb3I/LihlcnJvcik7CiAgfQogIG9wZXJhdG9yTGlzdENoYW5nZWQoKSB7CiAgICBpZiAoIXRoaXMuZ3JhcGhpY3NSZWFkeSkgewogICAgICB0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayB8fD0gdGhpcy5fY29udGludWVCb3VuZDsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5nZnguZGVwZW5kZW5jeVRyYWNrZXI/Lmdyb3dPcGVyYXRpb25zQ291bnQodGhpcy5vcGVyYXRvckxpc3QuZm5BcnJheS5sZW5ndGgpOwogICAgdGhpcy5zdGVwcGVyPy51cGRhdGVPcGVyYXRvckxpc3QodGhpcy5vcGVyYXRvckxpc3QpOwogICAgaWYgKHRoaXMucnVubmluZykgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLl9jb250aW51ZSgpOwogIH0KICBfY29udGludWUoKSB7CiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlOwogICAgaWYgKHRoaXMuY2FuY2VsbGVkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLnRhc2sub25Db250aW51ZSkgewogICAgICB0aGlzLnRhc2sub25Db250aW51ZSh0aGlzLl9zY2hlZHVsZU5leHRCb3VuZCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLl9zY2hlZHVsZU5leHQoKTsKICAgIH0KICB9CiAgX3NjaGVkdWxlTmV4dCgpIHsKICAgIGlmICh0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHsKICAgICAgdGhpcy4jckFGID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgdGhpcy4jckFGID0gbnVsbDsKICAgICAgICB0aGlzLl9uZXh0Qm91bmQoKS5jYXRjaCh0aGlzLl9jYW5jZWxCb3VuZCk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbih0aGlzLl9uZXh0Qm91bmQpLmNhdGNoKHRoaXMuX2NhbmNlbEJvdW5kKTsKICAgIH0KICB9CiAgYXN5bmMgX25leHQoKSB7CiAgICBpZiAodGhpcy5jYW5jZWxsZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5vcGVyYXRvckxpc3RJZHggPSB0aGlzLmdmeC5leGVjdXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0LCB0aGlzLm9wZXJhdG9yTGlzdElkeCwgdGhpcy5fY29udGludWVCb3VuZCwgdGhpcy5zdGVwcGVyLCB0aGlzLl9vcGVyYXRpb25zRmlsdGVyKTsKICAgIGlmICh0aGlzLm9wZXJhdG9yTGlzdElkeCA9PT0gdGhpcy5vcGVyYXRvckxpc3QuYXJnc0FycmF5Lmxlbmd0aCkgewogICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKICAgICAgaWYgKHRoaXMub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaykgewogICAgICAgIHRoaXMuZ2Z4LmVuZERyYXdpbmcoKTsKICAgICAgICBJbnRlcm5hbFJlbmRlclRhc2suI2NhbnZhc0luVXNlLmRlbGV0ZSh0aGlzLl9jYW52YXMpOwogICAgICAgIHRoaXMuY2FsbGJhY2soKTsKICAgICAgfQogICAgfQogIH0KfQpjb25zdCB2ZXJzaW9uID0gIjUuNC4zOTQiOwpjb25zdCBidWlsZCA9ICIyY2M4MDlhZGUiOwoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL2NvbG9yX3BpY2tlci5qcwoKCgpjbGFzcyBDb2xvclBpY2tlciB7CiAgI2J1dHRvbiA9IG51bGw7CiAgI2J1dHRvblN3YXRjaCA9IG51bGw7CiAgI2RlZmF1bHRDb2xvcjsKICAjZHJvcGRvd24gPSBudWxsOwogICNkcm9wZG93bldhc0Zyb21LZXlib2FyZCA9IGZhbHNlOwogICNpc01haW5Db2xvclBpY2tlciA9IGZhbHNlOwogICNlZGl0b3IgPSBudWxsOwogICNldmVudEJ1czsKICAjb3BlbkRyb3Bkb3duQUMgPSBudWxsOwogICN1aU1hbmFnZXIgPSBudWxsOwogIHN0YXRpYyAjbDEwbkNvbG9yID0gbnVsbDsKICBzdGF0aWMgZ2V0IF9rZXlib2FyZE1hbmFnZXIoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJfa2V5Ym9hcmRNYW5hZ2VyIiwgbmV3IEtleWJvYXJkTWFuYWdlcihbW1siRXNjYXBlIiwgIm1hYytFc2NhcGUiXSwgQ29sb3JQaWNrZXIucHJvdG90eXBlLl9oaWRlRHJvcGRvd25Gcm9tS2V5Ym9hcmRdLCBbWyIgIiwgIm1hYysgIl0sIENvbG9yUGlja2VyLnByb3RvdHlwZS5fY29sb3JTZWxlY3RGcm9tS2V5Ym9hcmRdLCBbWyJBcnJvd0Rvd24iLCAiQXJyb3dSaWdodCIsICJtYWMrQXJyb3dEb3duIiwgIm1hYytBcnJvd1JpZ2h0Il0sIENvbG9yUGlja2VyLnByb3RvdHlwZS5fbW92ZVRvTmV4dF0sIFtbIkFycm93VXAiLCAiQXJyb3dMZWZ0IiwgIm1hYytBcnJvd1VwIiwgIm1hYytBcnJvd0xlZnQiXSwgQ29sb3JQaWNrZXIucHJvdG90eXBlLl9tb3ZlVG9QcmV2aW91c10sIFtbIkhvbWUiLCAibWFjK0hvbWUiXSwgQ29sb3JQaWNrZXIucHJvdG90eXBlLl9tb3ZlVG9CZWdpbm5pbmddLCBbWyJFbmQiLCAibWFjK0VuZCJdLCBDb2xvclBpY2tlci5wcm90b3R5cGUuX21vdmVUb0VuZF1dKSk7CiAgfQogIGNvbnN0cnVjdG9yKHsKICAgIGVkaXRvciA9IG51bGwsCiAgICB1aU1hbmFnZXIgPSBudWxsCiAgfSkgewogICAgaWYgKGVkaXRvcikgewogICAgICB0aGlzLiNpc01haW5Db2xvclBpY2tlciA9IGZhbHNlOwogICAgICB0aGlzLiNlZGl0b3IgPSBlZGl0b3I7CiAgICB9IGVsc2UgewogICAgICB0aGlzLiNpc01haW5Db2xvclBpY2tlciA9IHRydWU7CiAgICB9CiAgICB0aGlzLiN1aU1hbmFnZXIgPSBlZGl0b3I/Ll91aU1hbmFnZXIgfHwgdWlNYW5hZ2VyOwogICAgdGhpcy4jZXZlbnRCdXMgPSB0aGlzLiN1aU1hbmFnZXIuX2V2ZW50QnVzOwogICAgdGhpcy4jZGVmYXVsdENvbG9yID0gZWRpdG9yPy5jb2xvcj8udG9VcHBlckNhc2UoKSB8fCB0aGlzLiN1aU1hbmFnZXI/LmhpZ2hsaWdodENvbG9ycy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgfHwgIiNGRkZGOTgiOwogICAgQ29sb3JQaWNrZXIuI2wxMG5Db2xvciB8fD0gT2JqZWN0LmZyZWV6ZSh7CiAgICAgIGJsdWU6ICJwZGZqcy1lZGl0b3ItY29sb3JwaWNrZXItYmx1ZSIsCiAgICAgIGdyZWVuOiAicGRmanMtZWRpdG9yLWNvbG9ycGlja2VyLWdyZWVuIiwKICAgICAgcGluazogInBkZmpzLWVkaXRvci1jb2xvcnBpY2tlci1waW5rIiwKICAgICAgcmVkOiAicGRmanMtZWRpdG9yLWNvbG9ycGlja2VyLXJlZCIsCiAgICAgIHllbGxvdzogInBkZmpzLWVkaXRvci1jb2xvcnBpY2tlci15ZWxsb3ciCiAgICB9KTsKICB9CiAgcmVuZGVyQnV0dG9uKCkgewogICAgY29uc3QgYnV0dG9uID0gdGhpcy4jYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICBidXR0b24uY2xhc3NOYW1lID0gImNvbG9yUGlja2VyIjsKICAgIGJ1dHRvbi50YWJJbmRleCA9ICIwIjsKICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsICJwZGZqcy1lZGl0b3ItY29sb3JwaWNrZXItYnV0dG9uIik7CiAgICBidXR0b24uYXJpYUhhc1BvcHVwID0gInRydWUiOwogICAgaWYgKHRoaXMuI2VkaXRvcikgewogICAgICBidXR0b24uYXJpYUNvbnRyb2xzID0gYCR7dGhpcy4jZWRpdG9yLmlkfV9jb2xvcnBpY2tlcl9kcm9wZG93bmA7CiAgICB9CiAgICBjb25zdCBzaWduYWwgPSB0aGlzLiN1aU1hbmFnZXIuX3NpZ25hbDsKICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuI29wZW5Ecm9wZG93bi5iaW5kKHRoaXMpLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuI2tleURvd24uYmluZCh0aGlzKSwgewogICAgICBzaWduYWwKICAgIH0pOwogICAgY29uc3Qgc3dhdGNoID0gdGhpcy4jYnV0dG9uU3dhdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgc3dhdGNoLmNsYXNzTmFtZSA9ICJzd2F0Y2giOwogICAgc3dhdGNoLmFyaWFIaWRkZW4gPSAidHJ1ZSI7CiAgICBzd2F0Y2guc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy4jZGVmYXVsdENvbG9yOwogICAgYnV0dG9uLmFwcGVuZChzd2F0Y2gpOwogICAgcmV0dXJuIGJ1dHRvbjsKICB9CiAgcmVuZGVyTWFpbkRyb3Bkb3duKCkgewogICAgY29uc3QgZHJvcGRvd24gPSB0aGlzLiNkcm9wZG93biA9IHRoaXMuI2dldERyb3Bkb3duUm9vdCgpOwogICAgZHJvcGRvd24uYXJpYU9yaWVudGF0aW9uID0gImhvcml6b250YWwiOwogICAgZHJvcGRvd24uYXJpYUxhYmVsbGVkQnkgPSAiaGlnaGxpZ2h0Q29sb3JQaWNrZXJMYWJlbCI7CiAgICByZXR1cm4gZHJvcGRvd247CiAgfQogICNnZXREcm9wZG93blJvb3QoKSB7CiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuI3VpTWFuYWdlci5fc2lnbmFsOwogICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iiwgbm9Db250ZXh0TWVudSwgewogICAgICBzaWduYWwKICAgIH0pOwogICAgZGl2LmNsYXNzTmFtZSA9ICJkcm9wZG93biI7CiAgICBkaXYucm9sZSA9ICJsaXN0Ym94IjsKICAgIGRpdi5hcmlhTXVsdGlTZWxlY3RhYmxlID0gImZhbHNlIjsKICAgIGRpdi5hcmlhT3JpZW50YXRpb24gPSAidmVydGljYWwiOwogICAgZGl2LnNldEF0dHJpYnV0ZSgiZGF0YS1sMTBuLWlkIiwgInBkZmpzLWVkaXRvci1jb2xvcnBpY2tlci1kcm9wZG93biIpOwogICAgaWYgKHRoaXMuI2VkaXRvcikgewogICAgICBkaXYuaWQgPSBgJHt0aGlzLiNlZGl0b3IuaWR9X2NvbG9ycGlja2VyX2Ryb3Bkb3duYDsKICAgIH0KICAgIGZvciAoY29uc3QgW25hbWUsIGNvbG9yXSBvZiB0aGlzLiN1aU1hbmFnZXIuaGlnaGxpZ2h0Q29sb3JzKSB7CiAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICBidXR0b24udGFiSW5kZXggPSAiMCI7CiAgICAgIGJ1dHRvbi5yb2xlID0gIm9wdGlvbiI7CiAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoImRhdGEtY29sb3IiLCBjb2xvcik7CiAgICAgIGJ1dHRvbi50aXRsZSA9IG5hbWU7CiAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsIENvbG9yUGlja2VyLiNsMTBuQ29sb3JbbmFtZV0pOwogICAgICBjb25zdCBzd2F0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgIGJ1dHRvbi5hcHBlbmQoc3dhdGNoKTsKICAgICAgc3dhdGNoLmNsYXNzTmFtZSA9ICJzd2F0Y2giOwogICAgICBzd2F0Y2guc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7CiAgICAgIGJ1dHRvbi5hcmlhU2VsZWN0ZWQgPSBjb2xvciA9PT0gdGhpcy4jZGVmYXVsdENvbG9yOwogICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLiNjb2xvclNlbGVjdC5iaW5kKHRoaXMsIGNvbG9yKSwgewogICAgICAgIHNpZ25hbAogICAgICB9KTsKICAgICAgZGl2LmFwcGVuZChidXR0b24pOwogICAgfQogICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLiNrZXlEb3duLmJpbmQodGhpcyksIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIHJldHVybiBkaXY7CiAgfQogICNjb2xvclNlbGVjdChjb2xvciwgZXZlbnQpIHsKICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgdGhpcy4jZXZlbnRCdXMuZGlzcGF0Y2goInN3aXRjaGFubm90YXRpb25lZGl0b3JwYXJhbXMiLCB7CiAgICAgIHNvdXJjZTogdGhpcywKICAgICAgdHlwZTogQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSElHSExJR0hUX0NPTE9SLAogICAgICB2YWx1ZTogY29sb3IKICAgIH0pOwogICAgdGhpcy51cGRhdGVDb2xvcihjb2xvcik7CiAgfQogIF9jb2xvclNlbGVjdEZyb21LZXlib2FyZChldmVudCkgewogICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy4jYnV0dG9uKSB7CiAgICAgIHRoaXMuI29wZW5Ecm9wZG93bihldmVudCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGNvbG9yID0gZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS1jb2xvciIpOwogICAgaWYgKCFjb2xvcikgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNjb2xvclNlbGVjdChjb2xvciwgZXZlbnQpOwogIH0KICBfbW92ZVRvTmV4dChldmVudCkgewogICAgaWYgKCF0aGlzLiNpc0Ryb3Bkb3duVmlzaWJsZSkgewogICAgICB0aGlzLiNvcGVuRHJvcGRvd24oZXZlbnQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLiNidXR0b24pIHsKICAgICAgdGhpcy4jZHJvcGRvd24uZmlyc3RDaGlsZD8uZm9jdXMoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZXZlbnQudGFyZ2V0Lm5leHRTaWJsaW5nPy5mb2N1cygpOwogIH0KICBfbW92ZVRvUHJldmlvdXMoZXZlbnQpIHsKICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMuI2Ryb3Bkb3duPy5maXJzdENoaWxkIHx8IGV2ZW50LnRhcmdldCA9PT0gdGhpcy4jYnV0dG9uKSB7CiAgICAgIGlmICh0aGlzLiNpc0Ryb3Bkb3duVmlzaWJsZSkgewogICAgICAgIHRoaXMuX2hpZGVEcm9wZG93bkZyb21LZXlib2FyZCgpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghdGhpcy4jaXNEcm9wZG93blZpc2libGUpIHsKICAgICAgdGhpcy4jb3BlbkRyb3Bkb3duKGV2ZW50KTsKICAgIH0KICAgIGV2ZW50LnRhcmdldC5wcmV2aW91c1NpYmxpbmc/LmZvY3VzKCk7CiAgfQogIF9tb3ZlVG9CZWdpbm5pbmcoZXZlbnQpIHsKICAgIGlmICghdGhpcy4jaXNEcm9wZG93blZpc2libGUpIHsKICAgICAgdGhpcy4jb3BlbkRyb3Bkb3duKGV2ZW50KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jZHJvcGRvd24uZmlyc3RDaGlsZD8uZm9jdXMoKTsKICB9CiAgX21vdmVUb0VuZChldmVudCkgewogICAgaWYgKCF0aGlzLiNpc0Ryb3Bkb3duVmlzaWJsZSkgewogICAgICB0aGlzLiNvcGVuRHJvcGRvd24oZXZlbnQpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNkcm9wZG93bi5sYXN0Q2hpbGQ/LmZvY3VzKCk7CiAgfQogICNrZXlEb3duKGV2ZW50KSB7CiAgICBDb2xvclBpY2tlci5fa2V5Ym9hcmRNYW5hZ2VyLmV4ZWModGhpcywgZXZlbnQpOwogIH0KICAjb3BlbkRyb3Bkb3duKGV2ZW50KSB7CiAgICBpZiAodGhpcy4jaXNEcm9wZG93blZpc2libGUpIHsKICAgICAgdGhpcy5oaWRlRHJvcGRvd24oKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jZHJvcGRvd25XYXNGcm9tS2V5Ym9hcmQgPSBldmVudC5kZXRhaWwgPT09IDA7CiAgICBpZiAoIXRoaXMuI29wZW5Ecm9wZG93bkFDKSB7CiAgICAgIHRoaXMuI29wZW5Ecm9wZG93bkFDID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLCB0aGlzLiNwb2ludGVyRG93bi5iaW5kKHRoaXMpLCB7CiAgICAgICAgc2lnbmFsOiB0aGlzLiN1aU1hbmFnZXIuY29tYmluZWRTaWduYWwodGhpcy4jb3BlbkRyb3Bkb3duQUMpCiAgICAgIH0pOwogICAgfQogICAgdGhpcy4jYnV0dG9uLmFyaWFFeHBhbmRlZCA9ICJ0cnVlIjsKICAgIGlmICh0aGlzLiNkcm9wZG93bikgewogICAgICB0aGlzLiNkcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3Qgcm9vdCA9IHRoaXMuI2Ryb3Bkb3duID0gdGhpcy4jZ2V0RHJvcGRvd25Sb290KCk7CiAgICB0aGlzLiNidXR0b24uYXBwZW5kKHJvb3QpOwogIH0KICAjcG9pbnRlckRvd24oZXZlbnQpIHsKICAgIGlmICh0aGlzLiNkcm9wZG93bj8uY29udGFpbnMoZXZlbnQudGFyZ2V0KSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmhpZGVEcm9wZG93bigpOwogIH0KICBoaWRlRHJvcGRvd24oKSB7CiAgICB0aGlzLiNkcm9wZG93bj8uY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7CiAgICB0aGlzLiNidXR0b24uYXJpYUV4cGFuZGVkID0gImZhbHNlIjsKICAgIHRoaXMuI29wZW5Ecm9wZG93bkFDPy5hYm9ydCgpOwogICAgdGhpcy4jb3BlbkRyb3Bkb3duQUMgPSBudWxsOwogIH0KICBnZXQgI2lzRHJvcGRvd25WaXNpYmxlKCkgewogICAgcmV0dXJuIHRoaXMuI2Ryb3Bkb3duICYmICF0aGlzLiNkcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoImhpZGRlbiIpOwogIH0KICBfaGlkZURyb3Bkb3duRnJvbUtleWJvYXJkKCkgewogICAgaWYgKHRoaXMuI2lzTWFpbkNvbG9yUGlja2VyKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghdGhpcy4jaXNEcm9wZG93blZpc2libGUpIHsKICAgICAgdGhpcy4jZWRpdG9yPy51bnNlbGVjdCgpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmhpZGVEcm9wZG93bigpOwogICAgdGhpcy4jYnV0dG9uLmZvY3VzKHsKICAgICAgcHJldmVudFNjcm9sbDogdHJ1ZSwKICAgICAgZm9jdXNWaXNpYmxlOiB0aGlzLiNkcm9wZG93bldhc0Zyb21LZXlib2FyZAogICAgfSk7CiAgfQogIHVwZGF0ZUNvbG9yKGNvbG9yKSB7CiAgICBpZiAodGhpcy4jYnV0dG9uU3dhdGNoKSB7CiAgICAgIHRoaXMuI2J1dHRvblN3YXRjaC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKICAgIH0KICAgIGlmICghdGhpcy4jZHJvcGRvd24pIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgaSA9IHRoaXMuI3VpTWFuYWdlci5oaWdobGlnaHRDb2xvcnMudmFsdWVzKCk7CiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuI2Ryb3Bkb3duLmNoaWxkcmVuKSB7CiAgICAgIGNoaWxkLmFyaWFTZWxlY3RlZCA9IGkubmV4dCgpLnZhbHVlID09PSBjb2xvci50b1VwcGVyQ2FzZSgpOwogICAgfQogIH0KICBkZXN0cm95KCkgewogICAgdGhpcy4jYnV0dG9uPy5yZW1vdmUoKTsKICAgIHRoaXMuI2J1dHRvbiA9IG51bGw7CiAgICB0aGlzLiNidXR0b25Td2F0Y2ggPSBudWxsOwogICAgdGhpcy4jZHJvcGRvd24/LnJlbW92ZSgpOwogICAgdGhpcy4jZHJvcGRvd24gPSBudWxsOwogIH0KfQpjbGFzcyBCYXNpY0NvbG9yUGlja2VyIHsKICAjaW5wdXQgPSBudWxsOwogICNlZGl0b3IgPSBudWxsOwogICN1aU1hbmFnZXIgPSBudWxsOwogIHN0YXRpYyAjbDEwbkNvbG9yID0gbnVsbDsKICBjb25zdHJ1Y3RvcihlZGl0b3IpIHsKICAgIHRoaXMuI2VkaXRvciA9IGVkaXRvcjsKICAgIHRoaXMuI3VpTWFuYWdlciA9IGVkaXRvci5fdWlNYW5hZ2VyOwogICAgQmFzaWNDb2xvclBpY2tlci4jbDEwbkNvbG9yIHx8PSBPYmplY3QuZnJlZXplKHsKICAgICAgZnJlZXRleHQ6ICJwZGZqcy1lZGl0b3ItY29sb3ItcGlja2VyLWZyZWUtdGV4dC1pbnB1dCIsCiAgICAgIGluazogInBkZmpzLWVkaXRvci1jb2xvci1waWNrZXItaW5rLWlucHV0IgogICAgfSk7CiAgfQogIHJlbmRlckJ1dHRvbigpIHsKICAgIGlmICh0aGlzLiNpbnB1dCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXQ7CiAgICB9CiAgICBjb25zdCB7CiAgICAgIGVkaXRvclR5cGUsCiAgICAgIGNvbG9yVHlwZSwKICAgICAgY29sb3IKICAgIH0gPSB0aGlzLiNlZGl0b3I7CiAgICBjb25zdCBpbnB1dCA9IHRoaXMuI2lucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgIGlucHV0LnR5cGUgPSAiY29sb3IiOwogICAgaW5wdXQudmFsdWUgPSBjb2xvciB8fCAiIzAwMDAwMCI7CiAgICBpbnB1dC5jbGFzc05hbWUgPSAiYmFzaWNDb2xvclBpY2tlciI7CiAgICBpbnB1dC50YWJJbmRleCA9IDA7CiAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsIEJhc2ljQ29sb3JQaWNrZXIuI2wxMG5Db2xvcltlZGl0b3JUeXBlXSk7CiAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsICgpID0+IHsKICAgICAgdGhpcy4jdWlNYW5hZ2VyLnVwZGF0ZVBhcmFtcyhjb2xvclR5cGUsIGlucHV0LnZhbHVlKTsKICAgIH0sIHsKICAgICAgc2lnbmFsOiB0aGlzLiN1aU1hbmFnZXIuX3NpZ25hbAogICAgfSk7CiAgICByZXR1cm4gaW5wdXQ7CiAgfQogIHVwZGF0ZSh2YWx1ZSkgewogICAgaWYgKCF0aGlzLiNpbnB1dCkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNpbnB1dC52YWx1ZSA9IHZhbHVlOwogIH0KICBkZXN0cm95KCkgewogICAgdGhpcy4jaW5wdXQ/LnJlbW92ZSgpOwogICAgdGhpcy4jaW5wdXQgPSBudWxsOwogIH0KICBoaWRlRHJvcGRvd24oKSB7fQp9Cgo7Ly8gLi9zcmMvc2hhcmVkL3NjcmlwdGluZ191dGlscy5qcwpmdW5jdGlvbiBtYWtlQ29sb3JDb21wKG4pIHsKICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBuKSkgKiAyNTUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAiMCIpOwp9CmZ1bmN0aW9uIHNjYWxlQW5kQ2xhbXAoeCkgewogIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIDI1NSAqIHgpKTsKfQpjbGFzcyBDb2xvckNvbnZlcnRlcnMgewogIHN0YXRpYyBDTVlLX0coW2MsIHksIG0sIGtdKSB7CiAgICByZXR1cm4gWyJHIiwgMSAtIE1hdGgubWluKDEsIDAuMyAqIGMgKyAwLjU5ICogbSArIDAuMTEgKiB5ICsgayldOwogIH0KICBzdGF0aWMgR19DTVlLKFtnXSkgewogICAgcmV0dXJuIFsiQ01ZSyIsIDAsIDAsIDAsIDEgLSBnXTsKICB9CiAgc3RhdGljIEdfUkdCKFtnXSkgewogICAgcmV0dXJuIFsiUkdCIiwgZywgZywgZ107CiAgfQogIHN0YXRpYyBHX3JnYihbZ10pIHsKICAgIGcgPSBzY2FsZUFuZENsYW1wKGcpOwogICAgcmV0dXJuIFtnLCBnLCBnXTsKICB9CiAgc3RhdGljIEdfSFRNTChbZ10pIHsKICAgIGNvbnN0IEcgPSBtYWtlQ29sb3JDb21wKGcpOwogICAgcmV0dXJuIGAjJHtHfSR7R30ke0d9YDsKICB9CiAgc3RhdGljIFJHQl9HKFtyLCBnLCBiXSkgewogICAgcmV0dXJuIFsiRyIsIDAuMyAqIHIgKyAwLjU5ICogZyArIDAuMTEgKiBiXTsKICB9CiAgc3RhdGljIFJHQl9yZ2IoY29sb3IpIHsKICAgIHJldHVybiBjb2xvci5tYXAoc2NhbGVBbmRDbGFtcCk7CiAgfQogIHN0YXRpYyBSR0JfSFRNTChjb2xvcikgewogICAgcmV0dXJuIGAjJHtjb2xvci5tYXAobWFrZUNvbG9yQ29tcCkuam9pbigiIil9YDsKICB9CiAgc3RhdGljIFRfSFRNTCgpIHsKICAgIHJldHVybiAiIzAwMDAwMDAwIjsKICB9CiAgc3RhdGljIFRfcmdiKCkgewogICAgcmV0dXJuIFtudWxsXTsKICB9CiAgc3RhdGljIENNWUtfUkdCKFtjLCB5LCBtLCBrXSkgewogICAgcmV0dXJuIFsiUkdCIiwgMSAtIE1hdGgubWluKDEsIGMgKyBrKSwgMSAtIE1hdGgubWluKDEsIG0gKyBrKSwgMSAtIE1hdGgubWluKDEsIHkgKyBrKV07CiAgfQogIHN0YXRpYyBDTVlLX3JnYihbYywgeSwgbSwga10pIHsKICAgIHJldHVybiBbc2NhbGVBbmRDbGFtcCgxIC0gTWF0aC5taW4oMSwgYyArIGspKSwgc2NhbGVBbmRDbGFtcCgxIC0gTWF0aC5taW4oMSwgbSArIGspKSwgc2NhbGVBbmRDbGFtcCgxIC0gTWF0aC5taW4oMSwgeSArIGspKV07CiAgfQogIHN0YXRpYyBDTVlLX0hUTUwoY29tcG9uZW50cykgewogICAgY29uc3QgcmdiID0gdGhpcy5DTVlLX1JHQihjb21wb25lbnRzKS5zbGljZSgxKTsKICAgIHJldHVybiB0aGlzLlJHQl9IVE1MKHJnYik7CiAgfQogIHN0YXRpYyBSR0JfQ01ZSyhbciwgZywgYl0pIHsKICAgIGNvbnN0IGMgPSAxIC0gcjsKICAgIGNvbnN0IG0gPSAxIC0gZzsKICAgIGNvbnN0IHkgPSAxIC0gYjsKICAgIGNvbnN0IGsgPSBNYXRoLm1pbihjLCBtLCB5KTsKICAgIHJldHVybiBbIkNNWUsiLCBjLCBtLCB5LCBrXTsKICB9Cn0KY29uc3QgRGF0ZUZvcm1hdHMgPSAoLyogdW51c2VkIHB1cmUgZXhwcmVzc2lvbiBvciBzdXBlciAqLyBudWxsICYmIChbIm0vZCIsICJtL2QveXkiLCAibW0vZGQveXkiLCAibW0veXkiLCAiZC1tbW0iLCAiZC1tbW0teXkiLCAiZGQtbW1tLXl5IiwgInl5LW1tLWRkIiwgIm1tbS15eSIsICJtbW1tLXl5IiwgIm1tbSBkLCB5eXl5IiwgIm1tbW0gZCwgeXl5eSIsICJtL2QveXkgaDpNTSB0dCIsICJtL2QveXkgSEg6TU0iXSkpOwpjb25zdCBUaW1lRm9ybWF0cyA9ICgvKiB1bnVzZWQgcHVyZSBleHByZXNzaW9uIG9yIHN1cGVyICovIG51bGwgJiYgKFsiSEg6TU0iLCAiaDpNTSB0dCIsICJISDpNTTpzcyIsICJoOk1NOnNzIHR0Il0pKTsKCjsvLyAuL3NyYy9kaXNwbGF5L3N2Z19mYWN0b3J5LmpzCgoKY2xhc3MgQmFzZVNWR0ZhY3RvcnkgewogIGNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBza2lwRGltZW5zaW9ucyA9IGZhbHNlKSB7CiAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgU1ZHIGRpbWVuc2lvbnMiKTsKICAgIH0KICAgIGNvbnN0IHN2ZyA9IHRoaXMuX2NyZWF0ZVNWRygic3ZnOnN2ZyIpOwogICAgc3ZnLnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsICIxLjEiKTsKICAgIGlmICghc2tpcERpbWVuc2lvbnMpIHsKICAgICAgc3ZnLnNldEF0dHJpYnV0ZSgid2lkdGgiLCBgJHt3aWR0aH1weGApOwogICAgICBzdmcuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCBgJHtoZWlnaHR9cHhgKTsKICAgIH0KICAgIHN2Zy5zZXRBdHRyaWJ1dGUoInByZXNlcnZlQXNwZWN0UmF0aW8iLCAibm9uZSIpOwogICAgc3ZnLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YCk7CiAgICByZXR1cm4gc3ZnOwogIH0KICBjcmVhdGVFbGVtZW50KHR5cGUpIHsKICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNWRyBlbGVtZW50IHR5cGUiKTsKICAgIH0KICAgIHJldHVybiB0aGlzLl9jcmVhdGVTVkcodHlwZSk7CiAgfQogIF9jcmVhdGVTVkcodHlwZSkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgX2NyZWF0ZVNWR2AgY2FsbGVkLiIpOwogIH0KfQpjbGFzcyBET01TVkdGYWN0b3J5IGV4dGVuZHMgQmFzZVNWR0ZhY3RvcnkgewogIF9jcmVhdGVTVkcodHlwZSkgewogICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIHR5cGUpOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvYW5ub3RhdGlvbl9sYXllci5qcwoKCgoKCmNvbnN0IGFubm90YXRpb25fbGF5ZXJfREVGQVVMVF9GT05UX1NJWkUgPSA5Owpjb25zdCBHZXRFbGVtZW50c0J5TmFtZVNldCA9IG5ldyBXZWFrU2V0KCk7CmNvbnN0IFRJTUVaT05FX09GRlNFVCA9IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwICogMTAwMDsKY2xhc3MgQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5IHsKICBzdGF0aWMgY3JlYXRlKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHN1YnR5cGUgPSBwYXJhbWV0ZXJzLmRhdGEuYW5ub3RhdGlvblR5cGU7CiAgICBzd2l0Y2ggKHN1YnR5cGUpIHsKICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZS5MSU5LOgogICAgICAgIHJldHVybiBuZXcgTGlua0Fubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpOwogICAgICBjYXNlIEFubm90YXRpb25UeXBlLlRFWFQ6CiAgICAgICAgcmV0dXJuIG5ldyBUZXh0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7CiAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGUuV0lER0VUOgogICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IHBhcmFtZXRlcnMuZGF0YS5maWVsZFR5cGU7CiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHsKICAgICAgICAgIGNhc2UgIlR4IjoKICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7CiAgICAgICAgICBjYXNlICJCdG4iOgogICAgICAgICAgICBpZiAocGFyYW1ldGVycy5kYXRhLnJhZGlvQnV0dG9uKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtZXRlcnMuZGF0YS5jaGVja0JveCkgewogICAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tib3hXaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmV3IFB1c2hCdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTsKICAgICAgICAgIGNhc2UgIkNoIjoKICAgICAgICAgICAgcmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTsKICAgICAgICAgIGNhc2UgIlNpZyI6CiAgICAgICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7CiAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGUuUE9QVVA6CiAgICAgICAgcmV0dXJuIG5ldyBQb3B1cEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpOwogICAgICBjYXNlIEFubm90YXRpb25UeXBlLkZSRUVURVhUOgogICAgICAgIHJldHVybiBuZXcgRnJlZVRleHRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZS5MSU5FOgogICAgICAgIHJldHVybiBuZXcgTGluZUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpOwogICAgICBjYXNlIEFubm90YXRpb25UeXBlLlNRVUFSRToKICAgICAgICByZXR1cm4gbmV3IFNxdWFyZUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpOwogICAgICBjYXNlIEFubm90YXRpb25UeXBlLkNJUkNMRToKICAgICAgICByZXR1cm4gbmV3IENpcmNsZUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpOwogICAgICBjYXNlIEFubm90YXRpb25UeXBlLlBPTFlMSU5FOgogICAgICAgIHJldHVybiBuZXcgUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZS5DQVJFVDoKICAgICAgICByZXR1cm4gbmV3IENhcmV0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7CiAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGUuSU5LOgogICAgICAgIHJldHVybiBuZXcgSW5rQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7CiAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGUuUE9MWUdPTjoKICAgICAgICByZXR1cm4gbmV3IFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZS5ISUdITElHSFQ6CiAgICAgICAgcmV0dXJuIG5ldyBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkU6CiAgICAgICAgcmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTsKICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZS5TUVVJR0dMWToKICAgICAgICByZXR1cm4gbmV3IFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7CiAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGUuU1RSSUtFT1VUOgogICAgICAgIHJldHVybiBuZXcgU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7CiAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGUuU1RBTVA6CiAgICAgICAgcmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpOwogICAgICBjYXNlIEFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5UOgogICAgICAgIHJldHVybiBuZXcgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbmV3IEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpOwogICAgfQogIH0KfQpjbGFzcyBBbm5vdGF0aW9uRWxlbWVudCB7CiAgI3VwZGF0ZXMgPSBudWxsOwogICNoYXNCb3JkZXIgPSBmYWxzZTsKICAjcG9wdXBFbGVtZW50ID0gbnVsbDsKICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzLCB7CiAgICBpc1JlbmRlcmFibGUgPSBmYWxzZSwKICAgIGlnbm9yZUJvcmRlciA9IGZhbHNlLAogICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHMgPSBmYWxzZQogIH0gPSB7fSkgewogICAgdGhpcy5pc1JlbmRlcmFibGUgPSBpc1JlbmRlcmFibGU7CiAgICB0aGlzLmRhdGEgPSBwYXJhbWV0ZXJzLmRhdGE7CiAgICB0aGlzLmxheWVyID0gcGFyYW1ldGVycy5sYXllcjsKICAgIHRoaXMubGlua1NlcnZpY2UgPSBwYXJhbWV0ZXJzLmxpbmtTZXJ2aWNlOwogICAgdGhpcy5kb3dubG9hZE1hbmFnZXIgPSBwYXJhbWV0ZXJzLmRvd25sb2FkTWFuYWdlcjsKICAgIHRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoID0gcGFyYW1ldGVycy5pbWFnZVJlc291cmNlc1BhdGg7CiAgICB0aGlzLnJlbmRlckZvcm1zID0gcGFyYW1ldGVycy5yZW5kZXJGb3JtczsKICAgIHRoaXMuc3ZnRmFjdG9yeSA9IHBhcmFtZXRlcnMuc3ZnRmFjdG9yeTsKICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UgPSBwYXJhbWV0ZXJzLmFubm90YXRpb25TdG9yYWdlOwogICAgdGhpcy5lbmFibGVDb21tZW50ID0gcGFyYW1ldGVycy5lbmFibGVDb21tZW50OwogICAgdGhpcy5lbmFibGVTY3JpcHRpbmcgPSBwYXJhbWV0ZXJzLmVuYWJsZVNjcmlwdGluZzsKICAgIHRoaXMuaGFzSlNBY3Rpb25zID0gcGFyYW1ldGVycy5oYXNKU0FjdGlvbnM7CiAgICB0aGlzLl9maWVsZE9iamVjdHMgPSBwYXJhbWV0ZXJzLmZpZWxkT2JqZWN0czsKICAgIHRoaXMucGFyZW50ID0gcGFyYW1ldGVycy5wYXJlbnQ7CiAgICB0aGlzLmhhc093bkNvbW1lbnRCdXR0b24gPSBmYWxzZTsKICAgIGlmIChpc1JlbmRlcmFibGUpIHsKICAgICAgdGhpcy5jb250ZW50RWxlbWVudCA9IHRoaXMuY29udGFpbmVyID0gdGhpcy5fY3JlYXRlQ29udGFpbmVyKGlnbm9yZUJvcmRlcik7CiAgICB9CiAgICBpZiAoY3JlYXRlUXVhZHJpbGF0ZXJhbHMpIHsKICAgICAgdGhpcy5fY3JlYXRlUXVhZHJpbGF0ZXJhbHMoKTsKICAgIH0KICB9CiAgc3RhdGljIF9oYXNQb3B1cERhdGEoewogICAgY29udGVudHNPYmosCiAgICByaWNoVGV4dAogIH0pIHsKICAgIHJldHVybiAhIShjb250ZW50c09iaj8uc3RyIHx8IHJpY2hUZXh0Py5zdHIpOwogIH0KICBnZXQgX2lzRWRpdGFibGUoKSB7CiAgICByZXR1cm4gdGhpcy5kYXRhLmlzRWRpdGFibGU7CiAgfQogIGdldCBoYXNQb3B1cERhdGEoKSB7CiAgICByZXR1cm4gQW5ub3RhdGlvbkVsZW1lbnQuX2hhc1BvcHVwRGF0YSh0aGlzLmRhdGEpIHx8IHRoaXMuZW5hYmxlQ29tbWVudCAmJiAhIXRoaXMuY29tbWVudFRleHQ7CiAgfQogIGdldCBjb21tZW50RGF0YSgpIHsKICAgIGNvbnN0IHsKICAgICAgZGF0YQogICAgfSA9IHRoaXM7CiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmFubm90YXRpb25TdG9yYWdlPy5nZXRFZGl0b3IoZGF0YS5pZCk7CiAgICBpZiAoZWRpdG9yKSB7CiAgICAgIHJldHVybiBlZGl0b3IuZ2V0RGF0YSgpOwogICAgfQogICAgcmV0dXJuIGRhdGE7CiAgfQogIGdldCBoYXNDb21tZW50QnV0dG9uKCkgewogICAgcmV0dXJuIHRoaXMuZW5hYmxlQ29tbWVudCAmJiB0aGlzLmhhc1BvcHVwRWxlbWVudDsKICB9CiAgZ2V0IGNvbW1lbnRCdXR0b25Qb3NpdGlvbigpIHsKICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U/LmdldEVkaXRvcih0aGlzLmRhdGEuaWQpOwogICAgaWYgKGVkaXRvcikgewogICAgICByZXR1cm4gZWRpdG9yLmNvbW1lbnRCdXR0b25Qb3NpdGlvbkluUGFnZTsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgcXVhZFBvaW50cywKICAgICAgaW5rTGlzdHMsCiAgICAgIHJlY3QKICAgIH0gPSB0aGlzLmRhdGE7CiAgICBsZXQgbWF4WCA9IC1JbmZpbml0eTsKICAgIGxldCBtYXhZID0gLUluZmluaXR5OwogICAgaWYgKHF1YWRQb2ludHM/Lmxlbmd0aCA+PSA4KSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVhZFBvaW50cy5sZW5ndGg7IGkgKz0gOCkgewogICAgICAgIGlmIChxdWFkUG9pbnRzW2kgKyAxXSA+IG1heFkpIHsKICAgICAgICAgIG1heFkgPSBxdWFkUG9pbnRzW2kgKyAxXTsKICAgICAgICAgIG1heFggPSBxdWFkUG9pbnRzW2kgKyAyXTsKICAgICAgICB9IGVsc2UgaWYgKHF1YWRQb2ludHNbaSArIDFdID09PSBtYXhZKSB7CiAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcXVhZFBvaW50c1tpICsgMl0pOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gW21heFgsIG1heFldOwogICAgfQogICAgaWYgKGlua0xpc3RzPy5sZW5ndGggPj0gMSkgewogICAgICBmb3IgKGNvbnN0IGlua0xpc3Qgb2YgaW5rTGlzdHMpIHsKICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBpbmtMaXN0Lmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHsKICAgICAgICAgIGlmIChpbmtMaXN0W2kgKyAxXSA+IG1heFkpIHsKICAgICAgICAgICAgbWF4WSA9IGlua0xpc3RbaSArIDFdOwogICAgICAgICAgICBtYXhYID0gaW5rTGlzdFtpXTsKICAgICAgICAgIH0gZWxzZSBpZiAoaW5rTGlzdFtpICsgMV0gPT09IG1heFkpIHsKICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGlua0xpc3RbaV0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobWF4WCAhPT0gSW5maW5pdHkpIHsKICAgICAgICByZXR1cm4gW21heFgsIG1heFldOwogICAgICB9CiAgICB9CiAgICBpZiAocmVjdCkgewogICAgICByZXR1cm4gW3JlY3RbMl0sIHJlY3RbM11dOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIF9ub3JtYWxpemVQb2ludChwb2ludCkgewogICAgY29uc3QgewogICAgICBwYWdlOiB7CiAgICAgICAgdmlldwogICAgICB9LAogICAgICB2aWV3cG9ydDogewogICAgICAgIHJhd0RpbXM6IHsKICAgICAgICAgIHBhZ2VXaWR0aCwKICAgICAgICAgIHBhZ2VIZWlnaHQsCiAgICAgICAgICBwYWdlWCwKICAgICAgICAgIHBhZ2VZCiAgICAgICAgfQogICAgICB9CiAgICB9ID0gdGhpcy5wYXJlbnQ7CiAgICBwb2ludFsxXSA9IHZpZXdbM10gLSBwb2ludFsxXSArIHZpZXdbMV07CiAgICBwb2ludFswXSA9IDEwMCAqIChwb2ludFswXSAtIHBhZ2VYKSAvIHBhZ2VXaWR0aDsKICAgIHBvaW50WzFdID0gMTAwICogKHBvaW50WzFdIC0gcGFnZVkpIC8gcGFnZUhlaWdodDsKICAgIHJldHVybiBwb2ludDsKICB9CiAgZ2V0IGNvbW1lbnRUZXh0KCkgewogICAgY29uc3QgewogICAgICBkYXRhCiAgICB9ID0gdGhpczsKICAgIHJldHVybiB0aGlzLmFubm90YXRpb25TdG9yYWdlLmdldFJhd1ZhbHVlKGAke0Fubm90YXRpb25FZGl0b3JQcmVmaXh9JHtkYXRhLmlkfWApPy5wb3B1cD8uY29udGVudHMgfHwgZGF0YS5jb250ZW50c09iaj8uc3RyIHx8ICIiOwogIH0KICBzZXQgY29tbWVudFRleHQodGV4dCkgewogICAgY29uc3QgewogICAgICBkYXRhCiAgICB9ID0gdGhpczsKICAgIGNvbnN0IHBvcHVwID0gewogICAgICBkZWxldGVkOiAhdGV4dCwKICAgICAgY29udGVudHM6IHRleHQgfHwgIiIKICAgIH07CiAgICBpZiAoIXRoaXMuYW5ub3RhdGlvblN0b3JhZ2UudXBkYXRlRWRpdG9yKGRhdGEuaWQsIHsKICAgICAgcG9wdXAKICAgIH0pKSB7CiAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUoYCR7QW5ub3RhdGlvbkVkaXRvclByZWZpeH0ke2RhdGEuaWR9YCwgewogICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgIGFubm90YXRpb25UeXBlOiBkYXRhLmFubm90YXRpb25UeXBlLAogICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYXJlbnQucGFnZS5fcGFnZUluZGV4LAogICAgICAgIHBvcHVwLAogICAgICAgIHBvcHVwUmVmOiBkYXRhLnBvcHVwUmVmLAogICAgICAgIG1vZGlmaWNhdGlvbkRhdGU6IG5ldyBEYXRlKCkKICAgICAgfSk7CiAgICB9CiAgICBpZiAoIXRleHQpIHsKICAgICAgdGhpcy5yZW1vdmVQb3B1cCgpOwogICAgfQogIH0KICByZW1vdmVQb3B1cCgpIHsKICAgICh0aGlzLiNwb3B1cEVsZW1lbnQ/LnBvcHVwIHx8IHRoaXMucG9wdXApPy5yZW1vdmUoKTsKICAgIHRoaXMuI3BvcHVwRWxlbWVudCA9IHRoaXMucG9wdXAgPSBudWxsOwogIH0KICB1cGRhdGVFZGl0ZWQocGFyYW1zKSB7CiAgICBpZiAoIXRoaXMuY29udGFpbmVyKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChwYXJhbXMucmVjdCkgewogICAgICB0aGlzLiN1cGRhdGVzIHx8PSB7CiAgICAgICAgcmVjdDogdGhpcy5kYXRhLnJlY3Quc2xpY2UoMCkKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgcmVjdCwKICAgICAgcG9wdXA6IG5ld1BvcHVwCiAgICB9ID0gcGFyYW1zOwogICAgaWYgKHJlY3QpIHsKICAgICAgdGhpcy4jc2V0UmVjdEVkaXRlZChyZWN0KTsKICAgIH0KICAgIGxldCBwb3B1cCA9IHRoaXMuI3BvcHVwRWxlbWVudD8ucG9wdXAgfHwgdGhpcy5wb3B1cDsKICAgIGlmICghcG9wdXAgJiYgbmV3UG9wdXA/LnRleHQpIHsKICAgICAgdGhpcy5fY3JlYXRlUG9wdXAobmV3UG9wdXApOwogICAgICBwb3B1cCA9IHRoaXMuI3BvcHVwRWxlbWVudC5wb3B1cDsKICAgIH0KICAgIGlmICghcG9wdXApIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgcG9wdXAudXBkYXRlRWRpdGVkKHBhcmFtcyk7CiAgICBpZiAobmV3UG9wdXA/LmRlbGV0ZWQpIHsKICAgICAgcG9wdXAucmVtb3ZlKCk7CiAgICAgIHRoaXMuI3BvcHVwRWxlbWVudCA9IG51bGw7CiAgICAgIHRoaXMucG9wdXAgPSBudWxsOwogICAgfQogIH0KICByZXNldEVkaXRlZCgpIHsKICAgIGlmICghdGhpcy4jdXBkYXRlcykgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNzZXRSZWN0RWRpdGVkKHRoaXMuI3VwZGF0ZXMucmVjdCk7CiAgICB0aGlzLiNwb3B1cEVsZW1lbnQ/LnBvcHVwLnJlc2V0RWRpdGVkKCk7CiAgICB0aGlzLiN1cGRhdGVzID0gbnVsbDsKICB9CiAgI3NldFJlY3RFZGl0ZWQocmVjdCkgewogICAgY29uc3QgewogICAgICBjb250YWluZXI6IHsKICAgICAgICBzdHlsZQogICAgICB9LAogICAgICBkYXRhOiB7CiAgICAgICAgcmVjdDogY3VycmVudFJlY3QsCiAgICAgICAgcm90YXRpb24KICAgICAgfSwKICAgICAgcGFyZW50OiB7CiAgICAgICAgdmlld3BvcnQ6IHsKICAgICAgICAgIHJhd0RpbXM6IHsKICAgICAgICAgICAgcGFnZVdpZHRoLAogICAgICAgICAgICBwYWdlSGVpZ2h0LAogICAgICAgICAgICBwYWdlWCwKICAgICAgICAgICAgcGFnZVkKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gPSB0aGlzOwogICAgY3VycmVudFJlY3Q/LnNwbGljZSgwLCA0LCAuLi5yZWN0KTsKICAgIHN0eWxlLmxlZnQgPSBgJHsxMDAgKiAocmVjdFswXSAtIHBhZ2VYKSAvIHBhZ2VXaWR0aH0lYDsKICAgIHN0eWxlLnRvcCA9IGAkezEwMCAqIChwYWdlSGVpZ2h0IC0gcmVjdFszXSArIHBhZ2VZKSAvIHBhZ2VIZWlnaHR9JWA7CiAgICBpZiAocm90YXRpb24gPT09IDApIHsKICAgICAgc3R5bGUud2lkdGggPSBgJHsxMDAgKiAocmVjdFsyXSAtIHJlY3RbMF0pIC8gcGFnZVdpZHRofSVgOwogICAgICBzdHlsZS5oZWlnaHQgPSBgJHsxMDAgKiAocmVjdFszXSAtIHJlY3RbMV0pIC8gcGFnZUhlaWdodH0lYDsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuc2V0Um90YXRpb24ocm90YXRpb24pOwogICAgfQogIH0KICBfY3JlYXRlQ29udGFpbmVyKGlnbm9yZUJvcmRlcikgewogICAgY29uc3QgewogICAgICBkYXRhLAogICAgICBwYXJlbnQ6IHsKICAgICAgICBwYWdlLAogICAgICAgIHZpZXdwb3J0CiAgICAgIH0KICAgIH0gPSB0aGlzOwogICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VjdGlvbiIpOwogICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgiZGF0YS1hbm5vdGF0aW9uLWlkIiwgZGF0YS5pZCk7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQpICYmICEodGhpcyBpbnN0YW5jZW9mIExpbmtBbm5vdGF0aW9uRWxlbWVudCkpIHsKICAgICAgY29udGFpbmVyLnRhYkluZGV4ID0gMDsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgc3R5bGUKICAgIH0gPSBjb250YWluZXI7CiAgICBzdHlsZS56SW5kZXggPSB0aGlzLnBhcmVudC56SW5kZXg7CiAgICB0aGlzLnBhcmVudC56SW5kZXggKz0gMjsKICAgIGlmIChkYXRhLmFsdGVybmF0aXZlVGV4dCkgewogICAgICBjb250YWluZXIudGl0bGUgPSBkYXRhLmFsdGVybmF0aXZlVGV4dDsKICAgIH0KICAgIGlmIChkYXRhLm5vUm90YXRlKSB7CiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJub3JvdGF0ZSIpOwogICAgfQogICAgaWYgKCFkYXRhLnJlY3QgfHwgdGhpcyBpbnN0YW5jZW9mIFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQpIHsKICAgICAgY29uc3QgewogICAgICAgIHJvdGF0aW9uCiAgICAgIH0gPSBkYXRhOwogICAgICBpZiAoIWRhdGEuaGFzT3duQ2FudmFzICYmIHJvdGF0aW9uICE9PSAwKSB7CiAgICAgICAgdGhpcy5zZXRSb3RhdGlvbihyb3RhdGlvbiwgY29udGFpbmVyKTsKICAgICAgfQogICAgICByZXR1cm4gY29udGFpbmVyOwogICAgfQogICAgY29uc3QgewogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0CiAgICB9ID0gdGhpczsKICAgIGlmICghaWdub3JlQm9yZGVyICYmIGRhdGEuYm9yZGVyU3R5bGUud2lkdGggPiAwKSB7CiAgICAgIHN0eWxlLmJvcmRlcldpZHRoID0gYCR7ZGF0YS5ib3JkZXJTdHlsZS53aWR0aH1weGA7CiAgICAgIGNvbnN0IGhvcml6b250YWxSYWRpdXMgPSBkYXRhLmJvcmRlclN0eWxlLmhvcml6b250YWxDb3JuZXJSYWRpdXM7CiAgICAgIGNvbnN0IHZlcnRpY2FsUmFkaXVzID0gZGF0YS5ib3JkZXJTdHlsZS52ZXJ0aWNhbENvcm5lclJhZGl1czsKICAgICAgaWYgKGhvcml6b250YWxSYWRpdXMgPiAwIHx8IHZlcnRpY2FsUmFkaXVzID4gMCkgewogICAgICAgIGNvbnN0IHJhZGl1cyA9IGBjYWxjKCR7aG9yaXpvbnRhbFJhZGl1c31weCAqIHZhcigtLXRvdGFsLXNjYWxlLWZhY3RvcikpIC8gY2FsYygke3ZlcnRpY2FsUmFkaXVzfXB4ICogdmFyKC0tdG90YWwtc2NhbGUtZmFjdG9yKSlgOwogICAgICAgIHN0eWxlLmJvcmRlclJhZGl1cyA9IHJhZGl1czsKICAgICAgfSBlbHNlIGlmICh0aGlzIGluc3RhbmNlb2YgUmFkaW9CdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudCkgewogICAgICAgIGNvbnN0IHJhZGl1cyA9IGBjYWxjKCR7d2lkdGh9cHggKiB2YXIoLS10b3RhbC1zY2FsZS1mYWN0b3IpKSAvIGNhbGMoJHtoZWlnaHR9cHggKiB2YXIoLS10b3RhbC1zY2FsZS1mYWN0b3IpKWA7CiAgICAgICAgc3R5bGUuYm9yZGVyUmFkaXVzID0gcmFkaXVzOwogICAgICB9CiAgICAgIHN3aXRjaCAoZGF0YS5ib3JkZXJTdHlsZS5zdHlsZSkgewogICAgICAgIGNhc2UgQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDoKICAgICAgICAgIHN0eWxlLmJvcmRlclN0eWxlID0gInNvbGlkIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ6CiAgICAgICAgICBzdHlsZS5ib3JkZXJTdHlsZSA9ICJkYXNoZWQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkJFVkVMRUQ6CiAgICAgICAgICB3YXJuKCJVbmltcGxlbWVudGVkIGJvcmRlciBzdHlsZTogYmV2ZWxlZCIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLklOU0VUOgogICAgICAgICAgd2FybigiVW5pbXBsZW1lbnRlZCBib3JkZXIgc3R5bGU6IGluc2V0Iik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOgogICAgICAgICAgc3R5bGUuYm9yZGVyQm90dG9tU3R5bGUgPSAic29saWQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNvbnN0IGJvcmRlckNvbG9yID0gZGF0YS5ib3JkZXJDb2xvciB8fCBudWxsOwogICAgICBpZiAoYm9yZGVyQ29sb3IpIHsKICAgICAgICB0aGlzLiNoYXNCb3JkZXIgPSB0cnVlOwogICAgICAgIHN0eWxlLmJvcmRlckNvbG9yID0gVXRpbC5tYWtlSGV4Q29sb3IoYm9yZGVyQ29sb3JbMF0gfCAwLCBib3JkZXJDb2xvclsxXSB8IDAsIGJvcmRlckNvbG9yWzJdIHwgMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3R5bGUuYm9yZGVyV2lkdGggPSAwOwogICAgICB9CiAgICB9CiAgICBjb25zdCByZWN0ID0gVXRpbC5ub3JtYWxpemVSZWN0KFtkYXRhLnJlY3RbMF0sIHBhZ2Uudmlld1szXSAtIGRhdGEucmVjdFsxXSArIHBhZ2Uudmlld1sxXSwgZGF0YS5yZWN0WzJdLCBwYWdlLnZpZXdbM10gLSBkYXRhLnJlY3RbM10gKyBwYWdlLnZpZXdbMV1dKTsKICAgIGNvbnN0IHsKICAgICAgcGFnZVdpZHRoLAogICAgICBwYWdlSGVpZ2h0LAogICAgICBwYWdlWCwKICAgICAgcGFnZVkKICAgIH0gPSB2aWV3cG9ydC5yYXdEaW1zOwogICAgc3R5bGUubGVmdCA9IGAkezEwMCAqIChyZWN0WzBdIC0gcGFnZVgpIC8gcGFnZVdpZHRofSVgOwogICAgc3R5bGUudG9wID0gYCR7MTAwICogKHJlY3RbMV0gLSBwYWdlWSkgLyBwYWdlSGVpZ2h0fSVgOwogICAgY29uc3QgewogICAgICByb3RhdGlvbgogICAgfSA9IGRhdGE7CiAgICBpZiAoZGF0YS5oYXNPd25DYW52YXMgfHwgcm90YXRpb24gPT09IDApIHsKICAgICAgc3R5bGUud2lkdGggPSBgJHsxMDAgKiB3aWR0aCAvIHBhZ2VXaWR0aH0lYDsKICAgICAgc3R5bGUuaGVpZ2h0ID0gYCR7MTAwICogaGVpZ2h0IC8gcGFnZUhlaWdodH0lYDsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuc2V0Um90YXRpb24ocm90YXRpb24sIGNvbnRhaW5lcik7CiAgICB9CiAgICByZXR1cm4gY29udGFpbmVyOwogIH0KICBzZXRSb3RhdGlvbihhbmdsZSwgY29udGFpbmVyID0gdGhpcy5jb250YWluZXIpIHsKICAgIGlmICghdGhpcy5kYXRhLnJlY3QpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgewogICAgICBwYWdlV2lkdGgsCiAgICAgIHBhZ2VIZWlnaHQKICAgIH0gPSB0aGlzLnBhcmVudC52aWV3cG9ydC5yYXdEaW1zOwogICAgbGV0IHsKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfSA9IHRoaXM7CiAgICBpZiAoYW5nbGUgJSAxODAgIT09IDApIHsKICAgICAgW3dpZHRoLCBoZWlnaHRdID0gW2hlaWdodCwgd2lkdGhdOwogICAgfQogICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gYCR7MTAwICogd2lkdGggLyBwYWdlV2lkdGh9JWA7CiAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7MTAwICogaGVpZ2h0IC8gcGFnZUhlaWdodH0lYDsKICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoImRhdGEtbWFpbi1yb3RhdGlvbiIsICgzNjAgLSBhbmdsZSkgJSAzNjApOwogIH0KICBnZXQgX2NvbW1vbkFjdGlvbnMoKSB7CiAgICBjb25zdCBzZXRDb2xvciA9IChqc05hbWUsIHN0eWxlTmFtZSwgZXZlbnQpID0+IHsKICAgICAgY29uc3QgY29sb3IgPSBldmVudC5kZXRhaWxbanNOYW1lXTsKICAgICAgY29uc3QgY29sb3JUeXBlID0gY29sb3JbMF07CiAgICAgIGNvbnN0IGNvbG9yQXJyYXkgPSBjb2xvci5zbGljZSgxKTsKICAgICAgZXZlbnQudGFyZ2V0LnN0eWxlW3N0eWxlTmFtZV0gPSBDb2xvckNvbnZlcnRlcnNbYCR7Y29sb3JUeXBlfV9IVE1MYF0oY29sb3JBcnJheSk7CiAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodGhpcy5kYXRhLmlkLCB7CiAgICAgICAgW3N0eWxlTmFtZV06IENvbG9yQ29udmVydGVyc1tgJHtjb2xvclR5cGV9X3JnYmBdKGNvbG9yQXJyYXkpCiAgICAgIH0pOwogICAgfTsKICAgIHJldHVybiBzaGFkb3codGhpcywgIl9jb21tb25BY3Rpb25zIiwgewogICAgICBkaXNwbGF5OiBldmVudCA9PiB7CiAgICAgICAgY29uc3QgewogICAgICAgICAgZGlzcGxheQogICAgICAgIH0gPSBldmVudC5kZXRhaWw7CiAgICAgICAgY29uc3QgaGlkZGVuID0gZGlzcGxheSAlIDIgPT09IDE7CiAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9IGhpZGRlbiA/ICJoaWRkZW4iIDogInZpc2libGUiOwogICAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodGhpcy5kYXRhLmlkLCB7CiAgICAgICAgICBub1ZpZXc6IGhpZGRlbiwKICAgICAgICAgIG5vUHJpbnQ6IGRpc3BsYXkgPT09IDEgfHwgZGlzcGxheSA9PT0gMgogICAgICAgIH0pOwogICAgICB9LAogICAgICBwcmludDogZXZlbnQgPT4gewogICAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodGhpcy5kYXRhLmlkLCB7CiAgICAgICAgICBub1ByaW50OiAhZXZlbnQuZGV0YWlsLnByaW50CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGhpZGRlbjogZXZlbnQgPT4gewogICAgICAgIGNvbnN0IHsKICAgICAgICAgIGhpZGRlbgogICAgICAgIH0gPSBldmVudC5kZXRhaWw7CiAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9IGhpZGRlbiA/ICJoaWRkZW4iIDogInZpc2libGUiOwogICAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodGhpcy5kYXRhLmlkLCB7CiAgICAgICAgICBub1ByaW50OiBoaWRkZW4sCiAgICAgICAgICBub1ZpZXc6IGhpZGRlbgogICAgICAgIH0pOwogICAgICB9LAogICAgICBmb2N1czogZXZlbnQgPT4gewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZXZlbnQudGFyZ2V0LmZvY3VzKHsKICAgICAgICAgIHByZXZlbnRTY3JvbGw6IGZhbHNlCiAgICAgICAgfSksIDApOwogICAgICB9LAogICAgICB1c2VyTmFtZTogZXZlbnQgPT4gewogICAgICAgIGV2ZW50LnRhcmdldC50aXRsZSA9IGV2ZW50LmRldGFpbC51c2VyTmFtZTsKICAgICAgfSwKICAgICAgcmVhZG9ubHk6IGV2ZW50ID0+IHsKICAgICAgICBldmVudC50YXJnZXQuZGlzYWJsZWQgPSBldmVudC5kZXRhaWwucmVhZG9ubHk7CiAgICAgIH0sCiAgICAgIHJlcXVpcmVkOiBldmVudCA9PiB7CiAgICAgICAgdGhpcy5fc2V0UmVxdWlyZWQoZXZlbnQudGFyZ2V0LCBldmVudC5kZXRhaWwucmVxdWlyZWQpOwogICAgICB9LAogICAgICBiZ0NvbG9yOiBldmVudCA9PiB7CiAgICAgICAgc2V0Q29sb3IoImJnQ29sb3IiLCAiYmFja2dyb3VuZENvbG9yIiwgZXZlbnQpOwogICAgICB9LAogICAgICBmaWxsQ29sb3I6IGV2ZW50ID0+IHsKICAgICAgICBzZXRDb2xvcigiZmlsbENvbG9yIiwgImJhY2tncm91bmRDb2xvciIsIGV2ZW50KTsKICAgICAgfSwKICAgICAgZmdDb2xvcjogZXZlbnQgPT4gewogICAgICAgIHNldENvbG9yKCJmZ0NvbG9yIiwgImNvbG9yIiwgZXZlbnQpOwogICAgICB9LAogICAgICB0ZXh0Q29sb3I6IGV2ZW50ID0+IHsKICAgICAgICBzZXRDb2xvcigidGV4dENvbG9yIiwgImNvbG9yIiwgZXZlbnQpOwogICAgICB9LAogICAgICBib3JkZXJDb2xvcjogZXZlbnQgPT4gewogICAgICAgIHNldENvbG9yKCJib3JkZXJDb2xvciIsICJib3JkZXJDb2xvciIsIGV2ZW50KTsKICAgICAgfSwKICAgICAgc3Ryb2tlQ29sb3I6IGV2ZW50ID0+IHsKICAgICAgICBzZXRDb2xvcigic3Ryb2tlQ29sb3IiLCAiYm9yZGVyQ29sb3IiLCBldmVudCk7CiAgICAgIH0sCiAgICAgIHJvdGF0aW9uOiBldmVudCA9PiB7CiAgICAgICAgY29uc3QgYW5nbGUgPSBldmVudC5kZXRhaWwucm90YXRpb247CiAgICAgICAgdGhpcy5zZXRSb3RhdGlvbihhbmdsZSk7CiAgICAgICAgdGhpcy5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0aGlzLmRhdGEuaWQsIHsKICAgICAgICAgIHJvdGF0aW9uOiBhbmdsZQogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICB9CiAgX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveChhY3Rpb25zLCBqc0V2ZW50KSB7CiAgICBjb25zdCBjb21tb25BY3Rpb25zID0gdGhpcy5fY29tbW9uQWN0aW9uczsKICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhqc0V2ZW50LmRldGFpbCkpIHsKICAgICAgY29uc3QgYWN0aW9uID0gYWN0aW9uc1tuYW1lXSB8fCBjb21tb25BY3Rpb25zW25hbWVdOwogICAgICBhY3Rpb24/Lihqc0V2ZW50KTsKICAgIH0KICB9CiAgX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKGVsZW1lbnQpIHsKICAgIGlmICghdGhpcy5lbmFibGVTY3JpcHRpbmcpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3Qgc3RvcmVkRGF0YSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UuZ2V0UmF3VmFsdWUodGhpcy5kYXRhLmlkKTsKICAgIGlmICghc3RvcmVkRGF0YSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBjb21tb25BY3Rpb25zID0gdGhpcy5fY29tbW9uQWN0aW9uczsKICAgIGZvciAoY29uc3QgW2FjdGlvbk5hbWUsIGRldGFpbF0gb2YgT2JqZWN0LmVudHJpZXMoc3RvcmVkRGF0YSkpIHsKICAgICAgY29uc3QgYWN0aW9uID0gY29tbW9uQWN0aW9uc1thY3Rpb25OYW1lXTsKICAgICAgaWYgKGFjdGlvbikgewogICAgICAgIGNvbnN0IGV2ZW50UHJveHkgPSB7CiAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgW2FjdGlvbk5hbWVdOiBkZXRhaWwKICAgICAgICAgIH0sCiAgICAgICAgICB0YXJnZXQ6IGVsZW1lbnQKICAgICAgICB9OwogICAgICAgIGFjdGlvbihldmVudFByb3h5KTsKICAgICAgICBkZWxldGUgc3RvcmVkRGF0YVthY3Rpb25OYW1lXTsKICAgICAgfQogICAgfQogIH0KICBfY3JlYXRlUXVhZHJpbGF0ZXJhbHMoKSB7CiAgICBpZiAoIXRoaXMuY29udGFpbmVyKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgcXVhZFBvaW50cwogICAgfSA9IHRoaXMuZGF0YTsKICAgIGlmICghcXVhZFBvaW50cykgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBbcmVjdEJsWCwgcmVjdEJsWSwgcmVjdFRyWCwgcmVjdFRyWV0gPSB0aGlzLmRhdGEucmVjdC5tYXAoeCA9PiBNYXRoLmZyb3VuZCh4KSk7CiAgICBpZiAocXVhZFBvaW50cy5sZW5ndGggPT09IDgpIHsKICAgICAgY29uc3QgW3RyWCwgdHJZLCBibFgsIGJsWV0gPSBxdWFkUG9pbnRzLnN1YmFycmF5KDIsIDYpOwogICAgICBpZiAocmVjdFRyWCA9PT0gdHJYICYmIHJlY3RUclkgPT09IHRyWSAmJiByZWN0QmxYID09PSBibFggJiYgcmVjdEJsWSA9PT0gYmxZKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBjb25zdCB7CiAgICAgIHN0eWxlCiAgICB9ID0gdGhpcy5jb250YWluZXI7CiAgICBsZXQgc3ZnQnVmZmVyOwogICAgaWYgKHRoaXMuI2hhc0JvcmRlcikgewogICAgICBjb25zdCB7CiAgICAgICAgYm9yZGVyQ29sb3IsCiAgICAgICAgYm9yZGVyV2lkdGgKICAgICAgfSA9IHN0eWxlOwogICAgICBzdHlsZS5ib3JkZXJXaWR0aCA9IDA7CiAgICAgIHN2Z0J1ZmZlciA9IFsidXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwiLCBgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciYCwgYCBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiB2aWV3Qm94PSIwIDAgMSAxIj5gLCBgPGcgZmlsbD0idHJhbnNwYXJlbnQiIHN0cm9rZT0iJHtib3JkZXJDb2xvcn0iIHN0cm9rZS13aWR0aD0iJHtib3JkZXJXaWR0aH0iPmBdOwogICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJoYXNCb3JkZXIiKTsKICAgIH0KICAgIGNvbnN0IHdpZHRoID0gcmVjdFRyWCAtIHJlY3RCbFg7CiAgICBjb25zdCBoZWlnaHQgPSByZWN0VHJZIC0gcmVjdEJsWTsKICAgIGNvbnN0IHsKICAgICAgc3ZnRmFjdG9yeQogICAgfSA9IHRoaXM7CiAgICBjb25zdCBzdmcgPSBzdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZyIpOwogICAgc3ZnLmNsYXNzTGlzdC5hZGQoInF1YWRyaWxhdGVyYWxzQ29udGFpbmVyIik7CiAgICBzdmcuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIDApOwogICAgc3ZnLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwgMCk7CiAgICBzdmcucm9sZSA9ICJub25lIjsKICAgIGNvbnN0IGRlZnMgPSBzdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoImRlZnMiKTsKICAgIHN2Zy5hcHBlbmQoZGVmcyk7CiAgICBjb25zdCBjbGlwUGF0aCA9IHN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgiY2xpcFBhdGgiKTsKICAgIGNvbnN0IGlkID0gYGNsaXBwYXRoXyR7dGhpcy5kYXRhLmlkfWA7CiAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGUoImlkIiwgaWQpOwogICAgY2xpcFBhdGguc2V0QXR0cmlidXRlKCJjbGlwUGF0aFVuaXRzIiwgIm9iamVjdEJvdW5kaW5nQm94Iik7CiAgICBkZWZzLmFwcGVuZChjbGlwUGF0aCk7CiAgICBmb3IgKGxldCBpID0gMiwgaWkgPSBxdWFkUG9pbnRzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDgpIHsKICAgICAgY29uc3QgdHJYID0gcXVhZFBvaW50c1tpXTsKICAgICAgY29uc3QgdHJZID0gcXVhZFBvaW50c1tpICsgMV07CiAgICAgIGNvbnN0IGJsWCA9IHF1YWRQb2ludHNbaSArIDJdOwogICAgICBjb25zdCBibFkgPSBxdWFkUG9pbnRzW2kgKyAzXTsKICAgICAgY29uc3QgcmVjdCA9IHN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgicmVjdCIpOwogICAgICBjb25zdCB4ID0gKGJsWCAtIHJlY3RCbFgpIC8gd2lkdGg7CiAgICAgIGNvbnN0IHkgPSAocmVjdFRyWSAtIHRyWSkgLyBoZWlnaHQ7CiAgICAgIGNvbnN0IHJlY3RXaWR0aCA9ICh0clggLSBibFgpIC8gd2lkdGg7CiAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSAodHJZIC0gYmxZKSAvIGhlaWdodDsKICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoIngiLCB4KTsKICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoInkiLCB5KTsKICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwgcmVjdFdpZHRoKTsKICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIHJlY3RIZWlnaHQpOwogICAgICBjbGlwUGF0aC5hcHBlbmQocmVjdCk7CiAgICAgIHN2Z0J1ZmZlcj8ucHVzaChgPHJlY3QgdmVjdG9yLWVmZmVjdD0ibm9uLXNjYWxpbmctc3Ryb2tlIiB4PSIke3h9IiB5PSIke3l9IiB3aWR0aD0iJHtyZWN0V2lkdGh9IiBoZWlnaHQ9IiR7cmVjdEhlaWdodH0iLz5gKTsKICAgIH0KICAgIGlmICh0aGlzLiNoYXNCb3JkZXIpIHsKICAgICAgc3ZnQnVmZmVyLnB1c2goYDwvZz48L3N2Zz4nKWApOwogICAgICBzdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBzdmdCdWZmZXIuam9pbigiIik7CiAgICB9CiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTsKICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLmNsaXBQYXRoID0gYHVybCgjJHtpZH0pYDsKICB9CiAgX2NyZWF0ZVBvcHVwKHBvcHVwRGF0YSA9IG51bGwpIHsKICAgIGNvbnN0IHsKICAgICAgZGF0YQogICAgfSA9IHRoaXM7CiAgICBsZXQgY29udGVudHNPYmosIG1vZGlmaWNhdGlvbkRhdGU7CiAgICBpZiAocG9wdXBEYXRhKSB7CiAgICAgIGNvbnRlbnRzT2JqID0gewogICAgICAgIHN0cjogcG9wdXBEYXRhLnRleHQKICAgICAgfTsKICAgICAgbW9kaWZpY2F0aW9uRGF0ZSA9IHBvcHVwRGF0YS5kYXRlOwogICAgfSBlbHNlIHsKICAgICAgY29udGVudHNPYmogPSBkYXRhLmNvbnRlbnRzT2JqOwogICAgICBtb2RpZmljYXRpb25EYXRlID0gZGF0YS5tb2RpZmljYXRpb25EYXRlOwogICAgfQogICAgdGhpcy4jcG9wdXBFbGVtZW50ID0gbmV3IFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQoewogICAgICBkYXRhOiB7CiAgICAgICAgY29sb3I6IGRhdGEuY29sb3IsCiAgICAgICAgdGl0bGVPYmo6IGRhdGEudGl0bGVPYmosCiAgICAgICAgbW9kaWZpY2F0aW9uRGF0ZSwKICAgICAgICBjb250ZW50c09iaiwKICAgICAgICByaWNoVGV4dDogZGF0YS5yaWNoVGV4dCwKICAgICAgICBwYXJlbnRSZWN0OiBkYXRhLnJlY3QsCiAgICAgICAgYm9yZGVyU3R5bGU6IDAsCiAgICAgICAgaWQ6IGBwb3B1cF8ke2RhdGEuaWR9YCwKICAgICAgICByb3RhdGlvbjogZGF0YS5yb3RhdGlvbiwKICAgICAgICBub1JvdGF0ZTogdHJ1ZQogICAgICB9LAogICAgICBsaW5rU2VydmljZTogdGhpcy5saW5rU2VydmljZSwKICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCwKICAgICAgZWxlbWVudHM6IFt0aGlzXQogICAgfSk7CiAgfQogIGdldCBoYXNQb3B1cEVsZW1lbnQoKSB7CiAgICByZXR1cm4gISEodGhpcy4jcG9wdXBFbGVtZW50IHx8IHRoaXMucG9wdXAgfHwgdGhpcy5kYXRhLnBvcHVwUmVmKTsKICB9CiAgZ2V0IGV4dHJhUG9wdXBFbGVtZW50KCkgewogICAgcmV0dXJuIHRoaXMuI3BvcHVwRWxlbWVudDsKICB9CiAgcmVuZGVyKCkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgQW5ub3RhdGlvbkVsZW1lbnQucmVuZGVyYCBjYWxsZWQiKTsKICB9CiAgX2dldEVsZW1lbnRzQnlOYW1lKG5hbWUsIHNraXBJZCA9IG51bGwpIHsKICAgIGNvbnN0IGZpZWxkcyA9IFtdOwogICAgaWYgKHRoaXMuX2ZpZWxkT2JqZWN0cykgewogICAgICBjb25zdCBmaWVsZE9iaiA9IHRoaXMuX2ZpZWxkT2JqZWN0c1tuYW1lXTsKICAgICAgaWYgKGZpZWxkT2JqKSB7CiAgICAgICAgZm9yIChjb25zdCB7CiAgICAgICAgICBwYWdlLAogICAgICAgICAgaWQsCiAgICAgICAgICBleHBvcnRWYWx1ZXMKICAgICAgICB9IG9mIGZpZWxkT2JqKSB7CiAgICAgICAgICBpZiAocGFnZSA9PT0gLTEpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaWQgPT09IHNraXBJZCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGV4cG9ydFZhbHVlID0gdHlwZW9mIGV4cG9ydFZhbHVlcyA9PT0gInN0cmluZyIgPyBleHBvcnRWYWx1ZXMgOiBudWxsOwogICAgICAgICAgY29uc3QgZG9tRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWVsZW1lbnQtaWQ9IiR7aWR9Il1gKTsKICAgICAgICAgIGlmIChkb21FbGVtZW50ICYmICFHZXRFbGVtZW50c0J5TmFtZVNldC5oYXMoZG9tRWxlbWVudCkpIHsKICAgICAgICAgICAgd2FybihgX2dldEVsZW1lbnRzQnlOYW1lIC0gZWxlbWVudCBub3QgYWxsb3dlZDogJHtpZH1gKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBmaWVsZHMucHVzaCh7CiAgICAgICAgICAgIGlkLAogICAgICAgICAgICBleHBvcnRWYWx1ZSwKICAgICAgICAgICAgZG9tRWxlbWVudAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmaWVsZHM7CiAgICB9CiAgICBmb3IgKGNvbnN0IGRvbUVsZW1lbnQgb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUobmFtZSkpIHsKICAgICAgY29uc3QgewogICAgICAgIGV4cG9ydFZhbHVlCiAgICAgIH0gPSBkb21FbGVtZW50OwogICAgICBjb25zdCBpZCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiKTsKICAgICAgaWYgKGlkID09PSBza2lwSWQpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoIUdldEVsZW1lbnRzQnlOYW1lU2V0Lmhhcyhkb21FbGVtZW50KSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZpZWxkcy5wdXNoKHsKICAgICAgICBpZCwKICAgICAgICBleHBvcnRWYWx1ZSwKICAgICAgICBkb21FbGVtZW50CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIGZpZWxkczsKICB9CiAgc2hvdygpIHsKICAgIGlmICh0aGlzLmNvbnRhaW5lcikgewogICAgICB0aGlzLmNvbnRhaW5lci5oaWRkZW4gPSBmYWxzZTsKICAgIH0KICAgIHRoaXMucG9wdXA/Lm1heWJlU2hvdygpOwogIH0KICBoaWRlKCkgewogICAgaWYgKHRoaXMuY29udGFpbmVyKSB7CiAgICAgIHRoaXMuY29udGFpbmVyLmhpZGRlbiA9IHRydWU7CiAgICB9CiAgICB0aGlzLnBvcHVwPy5mb3JjZUhpZGUoKTsKICB9CiAgZ2V0RWxlbWVudHNUb1RyaWdnZXJQb3B1cCgpIHsKICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICB9CiAgYWRkSGlnaGxpZ2h0QXJlYSgpIHsKICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5nZXRFbGVtZW50c1RvVHJpZ2dlclBvcHVwKCk7CiAgICBpZiAoQXJyYXkuaXNBcnJheSh0cmlnZ2VycykpIHsKICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRyaWdnZXJzKSB7CiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJoaWdobGlnaHRBcmVhIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRyaWdnZXJzLmNsYXNzTGlzdC5hZGQoImhpZ2hsaWdodEFyZWEiKTsKICAgIH0KICB9CiAgX2VkaXRPbkRvdWJsZUNsaWNrKCkgewogICAgaWYgKCF0aGlzLl9pc0VkaXRhYmxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgYW5ub3RhdGlvbkVkaXRvclR5cGU6IG1vZGUsCiAgICAgIGRhdGE6IHsKICAgICAgICBpZDogZWRpdElkCiAgICAgIH0KICAgIH0gPSB0aGlzOwogICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLCAoKSA9PiB7CiAgICAgIHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXM/LmRpc3BhdGNoKCJzd2l0Y2hhbm5vdGF0aW9uZWRpdG9ybW9kZSIsIHsKICAgICAgICBzb3VyY2U6IHRoaXMsCiAgICAgICAgbW9kZSwKICAgICAgICBlZGl0SWQsCiAgICAgICAgbXVzdEVudGVySW5FZGl0TW9kZTogdHJ1ZQogICAgICB9KTsKICAgIH0pOwogIH0KICBnZXQgd2lkdGgoKSB7CiAgICByZXR1cm4gdGhpcy5kYXRhLnJlY3RbMl0gLSB0aGlzLmRhdGEucmVjdFswXTsKICB9CiAgZ2V0IGhlaWdodCgpIHsKICAgIHJldHVybiB0aGlzLmRhdGEucmVjdFszXSAtIHRoaXMuZGF0YS5yZWN0WzFdOwogIH0KfQpjbGFzcyBFZGl0b3JBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHsKICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7CiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7CiAgICAgIGlzUmVuZGVyYWJsZTogdHJ1ZSwKICAgICAgaWdub3JlQm9yZGVyOiB0cnVlCiAgICB9KTsKICAgIHRoaXMuZWRpdG9yID0gcGFyYW1ldGVycy5lZGl0b3I7CiAgfQogIHJlbmRlcigpIHsKICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9ICJlZGl0b3JBbm5vdGF0aW9uIjsKICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICB9CiAgY3JlYXRlT3JVcGRhdGVQb3B1cCgpIHsKICAgIGNvbnN0IHsKICAgICAgZWRpdG9yCiAgICB9ID0gdGhpczsKICAgIGlmICghZWRpdG9yLmhhc0NvbW1lbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5fY3JlYXRlUG9wdXAoZWRpdG9yLmNvbW1lbnQpOwogIH0KICBnZXQgaGFzQ29tbWVudEJ1dHRvbigpIHsKICAgIHJldHVybiB0aGlzLmVuYWJsZUNvbW1lbnQgJiYgdGhpcy5lZGl0b3IuaGFzQ29tbWVudDsKICB9CiAgZ2V0IGNvbW1lbnRCdXR0b25Qb3NpdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmVkaXRvci5jb21tZW50QnV0dG9uUG9zaXRpb25JblBhZ2U7CiAgfQogIGdldCBjb21tZW50VGV4dCgpIHsKICAgIHJldHVybiB0aGlzLmVkaXRvci5jb21tZW50LnRleHQ7CiAgfQogIHNldCBjb21tZW50VGV4dCh0ZXh0KSB7CiAgICB0aGlzLmVkaXRvci5jb21tZW50ID0gdGV4dDsKICAgIGlmICghdGV4dCkgewogICAgICB0aGlzLnJlbW92ZVBvcHVwKCk7CiAgICB9CiAgfQogIGdldCBjb21tZW50RGF0YSgpIHsKICAgIHJldHVybiB0aGlzLmVkaXRvci5nZXREYXRhKCk7CiAgfQogIHJlbW92ZSgpIHsKICAgIHRoaXMucGFyZW50LnJlbW92ZUFubm90YXRpb24odGhpcy5kYXRhLmlkKTsKICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZSgpOwogICAgdGhpcy5jb250YWluZXIgPSBudWxsOwogICAgdGhpcy5yZW1vdmVQb3B1cCgpOwogIH0KfQpjbGFzcyBMaW5rQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7CiAgY29uc3RydWN0b3IocGFyYW1ldGVycywgb3B0aW9ucyA9IG51bGwpIHsKICAgIHN1cGVyKHBhcmFtZXRlcnMsIHsKICAgICAgaXNSZW5kZXJhYmxlOiB0cnVlLAogICAgICBpZ25vcmVCb3JkZXI6ICEhb3B0aW9ucz8uaWdub3JlQm9yZGVyLAogICAgICBjcmVhdGVRdWFkcmlsYXRlcmFsczogdHJ1ZQogICAgfSk7CiAgICB0aGlzLmlzVG9vbHRpcE9ubHkgPSBwYXJhbWV0ZXJzLmRhdGEuaXNUb29sdGlwT25seTsKICB9CiAgcmVuZGVyKCkgewogICAgY29uc3QgewogICAgICBkYXRhLAogICAgICBsaW5rU2VydmljZQogICAgfSA9IHRoaXM7CiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgbGluay5zZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIsIGRhdGEuaWQpOwogICAgbGV0IGlzQm91bmQgPSBmYWxzZTsKICAgIGlmIChkYXRhLnVybCkgewogICAgICBsaW5rU2VydmljZS5hZGRMaW5rQXR0cmlidXRlcyhsaW5rLCBkYXRhLnVybCwgZGF0YS5uZXdXaW5kb3cpOwogICAgICBpc0JvdW5kID0gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb24pIHsKICAgICAgdGhpcy5fYmluZE5hbWVkQWN0aW9uKGxpbmssIGRhdGEuYWN0aW9uLCBkYXRhLm92ZXJsYWlkVGV4dCk7CiAgICAgIGlzQm91bmQgPSB0cnVlOwogICAgfSBlbHNlIGlmIChkYXRhLmF0dGFjaG1lbnQpIHsKICAgICAgdGhpcy4jYmluZEF0dGFjaG1lbnQobGluaywgZGF0YS5hdHRhY2htZW50LCBkYXRhLm92ZXJsYWlkVGV4dCwgZGF0YS5hdHRhY2htZW50RGVzdCk7CiAgICAgIGlzQm91bmQgPSB0cnVlOwogICAgfSBlbHNlIGlmIChkYXRhLnNldE9DR1N0YXRlKSB7CiAgICAgIHRoaXMuI2JpbmRTZXRPQ0dTdGF0ZShsaW5rLCBkYXRhLnNldE9DR1N0YXRlLCBkYXRhLm92ZXJsYWlkVGV4dCk7CiAgICAgIGlzQm91bmQgPSB0cnVlOwogICAgfSBlbHNlIGlmIChkYXRhLmRlc3QpIHsKICAgICAgdGhpcy5fYmluZExpbmsobGluaywgZGF0YS5kZXN0LCBkYXRhLm92ZXJsYWlkVGV4dCk7CiAgICAgIGlzQm91bmQgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGRhdGEuYWN0aW9ucyAmJiAoZGF0YS5hY3Rpb25zLkFjdGlvbiB8fCBkYXRhLmFjdGlvbnNbIk1vdXNlIFVwIl0gfHwgZGF0YS5hY3Rpb25zWyJNb3VzZSBEb3duIl0pICYmIHRoaXMuZW5hYmxlU2NyaXB0aW5nICYmIHRoaXMuaGFzSlNBY3Rpb25zKSB7CiAgICAgICAgdGhpcy5fYmluZEpTQWN0aW9uKGxpbmssIGRhdGEpOwogICAgICAgIGlzQm91bmQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChkYXRhLnJlc2V0Rm9ybSkgewogICAgICAgIHRoaXMuX2JpbmRSZXNldEZvcm1BY3Rpb24obGluaywgZGF0YS5yZXNldEZvcm0pOwogICAgICAgIGlzQm91bmQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKHRoaXMuaXNUb29sdGlwT25seSAmJiAhaXNCb3VuZCkgewogICAgICAgIHRoaXMuX2JpbmRMaW5rKGxpbmssICIiKTsKICAgICAgICBpc0JvdW5kID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibGlua0Fubm90YXRpb24iKTsKICAgIGlmIChpc0JvdW5kKSB7CiAgICAgIHRoaXMuY29udGVudEVsZW1lbnQgPSBsaW5rOwogICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQobGluayk7CiAgICB9CiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgfQogICNzZXRJbnRlcm5hbExpbmsoKSB7CiAgICB0aGlzLmNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoImRhdGEtaW50ZXJuYWwtbGluayIsICIiKTsKICB9CiAgX2JpbmRMaW5rKGxpbmssIGRlc3RpbmF0aW9uLCBvdmVybGFpZFRleHQgPSAiIikgewogICAgbGluay5ocmVmID0gdGhpcy5saW5rU2VydmljZS5nZXREZXN0aW5hdGlvbkhhc2goZGVzdGluYXRpb24pOwogICAgbGluay5vbmNsaWNrID0gKCkgPT4gewogICAgICBpZiAoZGVzdGluYXRpb24pIHsKICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmdvVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbik7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIGlmIChkZXN0aW5hdGlvbiB8fCBkZXN0aW5hdGlvbiA9PT0gIiIpIHsKICAgICAgdGhpcy4jc2V0SW50ZXJuYWxMaW5rKCk7CiAgICB9CiAgICBpZiAob3ZlcmxhaWRUZXh0KSB7CiAgICAgIGxpbmsudGl0bGUgPSBvdmVybGFpZFRleHQ7CiAgICB9CiAgfQogIF9iaW5kTmFtZWRBY3Rpb24obGluaywgYWN0aW9uLCBvdmVybGFpZFRleHQgPSAiIikgewogICAgbGluay5ocmVmID0gdGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpOwogICAgbGluay5vbmNsaWNrID0gKCkgPT4gewogICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV4ZWN1dGVOYW1lZEFjdGlvbihhY3Rpb24pOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgaWYgKG92ZXJsYWlkVGV4dCkgewogICAgICBsaW5rLnRpdGxlID0gb3ZlcmxhaWRUZXh0OwogICAgfQogICAgdGhpcy4jc2V0SW50ZXJuYWxMaW5rKCk7CiAgfQogICNiaW5kQXR0YWNobWVudChsaW5rLCBhdHRhY2htZW50LCBvdmVybGFpZFRleHQgPSAiIiwgZGVzdCA9IG51bGwpIHsKICAgIGxpbmsuaHJlZiA9IHRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKTsKICAgIGlmIChhdHRhY2htZW50LmRlc2NyaXB0aW9uKSB7CiAgICAgIGxpbmsudGl0bGUgPSBhdHRhY2htZW50LmRlc2NyaXB0aW9uOwogICAgfSBlbHNlIGlmIChvdmVybGFpZFRleHQpIHsKICAgICAgbGluay50aXRsZSA9IG92ZXJsYWlkVGV4dDsKICAgIH0KICAgIGxpbmsub25jbGljayA9ICgpID0+IHsKICAgICAgdGhpcy5kb3dubG9hZE1hbmFnZXI/Lm9wZW5PckRvd25sb2FkRGF0YShhdHRhY2htZW50LmNvbnRlbnQsIGF0dGFjaG1lbnQuZmlsZW5hbWUsIGRlc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy4jc2V0SW50ZXJuYWxMaW5rKCk7CiAgfQogICNiaW5kU2V0T0NHU3RhdGUobGluaywgYWN0aW9uLCBvdmVybGFpZFRleHQgPSAiIikgewogICAgbGluay5ocmVmID0gdGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpOwogICAgbGluay5vbmNsaWNrID0gKCkgPT4gewogICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV4ZWN1dGVTZXRPQ0dTdGF0ZShhY3Rpb24pOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgaWYgKG92ZXJsYWlkVGV4dCkgewogICAgICBsaW5rLnRpdGxlID0gb3ZlcmxhaWRUZXh0OwogICAgfQogICAgdGhpcy4jc2V0SW50ZXJuYWxMaW5rKCk7CiAgfQogIF9iaW5kSlNBY3Rpb24obGluaywgZGF0YSkgewogICAgbGluay5ocmVmID0gdGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoIiIpOwogICAgY29uc3QgbWFwID0gbmV3IE1hcChbWyJBY3Rpb24iLCAib25jbGljayJdLCBbIk1vdXNlIFVwIiwgIm9ubW91c2V1cCJdLCBbIk1vdXNlIERvd24iLCAib25tb3VzZWRvd24iXV0pOwogICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGRhdGEuYWN0aW9ucykpIHsKICAgICAgY29uc3QganNOYW1lID0gbWFwLmdldChuYW1lKTsKICAgICAgaWYgKCFqc05hbWUpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBsaW5rW2pzTmFtZV0gPSAoKSA9PiB7CiAgICAgICAgdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLCB7CiAgICAgICAgICBzb3VyY2U6IHRoaXMsCiAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgIG5hbWUKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH07CiAgICB9CiAgICBpZiAoZGF0YS5vdmVybGFpZFRleHQpIHsKICAgICAgbGluay50aXRsZSA9IGRhdGEub3ZlcmxhaWRUZXh0OwogICAgfQogICAgaWYgKCFsaW5rLm9uY2xpY2spIHsKICAgICAgbGluay5vbmNsaWNrID0gKCkgPT4gZmFsc2U7CiAgICB9CiAgICB0aGlzLiNzZXRJbnRlcm5hbExpbmsoKTsKICB9CiAgX2JpbmRSZXNldEZvcm1BY3Rpb24obGluaywgcmVzZXRGb3JtKSB7CiAgICBjb25zdCBvdGhlckNsaWNrQWN0aW9uID0gbGluay5vbmNsaWNrOwogICAgaWYgKCFvdGhlckNsaWNrQWN0aW9uKSB7CiAgICAgIGxpbmsuaHJlZiA9IHRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCIiKTsKICAgIH0KICAgIHRoaXMuI3NldEludGVybmFsTGluaygpOwogICAgaWYgKCF0aGlzLl9maWVsZE9iamVjdHMpIHsKICAgICAgd2FybihgX2JpbmRSZXNldEZvcm1BY3Rpb24gLSAicmVzZXRGb3JtIiBhY3Rpb24gbm90IHN1cHBvcnRlZCwgYCArICJlbnN1cmUgdGhhdCB0aGUgYGZpZWxkT2JqZWN0c2AgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLiIpOwogICAgICBpZiAoIW90aGVyQ2xpY2tBY3Rpb24pIHsKICAgICAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIG90aGVyQ2xpY2tBY3Rpb24/LigpOwogICAgICBjb25zdCB7CiAgICAgICAgZmllbGRzOiByZXNldEZvcm1GaWVsZHMsCiAgICAgICAgcmVmczogcmVzZXRGb3JtUmVmcywKICAgICAgICBpbmNsdWRlCiAgICAgIH0gPSByZXNldEZvcm07CiAgICAgIGNvbnN0IGFsbEZpZWxkcyA9IFtdOwogICAgICBpZiAocmVzZXRGb3JtRmllbGRzLmxlbmd0aCAhPT0gMCB8fCByZXNldEZvcm1SZWZzLmxlbmd0aCAhPT0gMCkgewogICAgICAgIGNvbnN0IGZpZWxkSWRzID0gbmV3IFNldChyZXNldEZvcm1SZWZzKTsKICAgICAgICBmb3IgKGNvbnN0IGZpZWxkTmFtZSBvZiByZXNldEZvcm1GaWVsZHMpIHsKICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuX2ZpZWxkT2JqZWN0c1tmaWVsZE5hbWVdIHx8IFtdOwogICAgICAgICAgZm9yIChjb25zdCB7CiAgICAgICAgICAgIGlkCiAgICAgICAgICB9IG9mIGZpZWxkcykgewogICAgICAgICAgICBmaWVsZElkcy5hZGQoaWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGZpZWxkcyBvZiBPYmplY3QudmFsdWVzKHRoaXMuX2ZpZWxkT2JqZWN0cykpIHsKICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7CiAgICAgICAgICAgIGlmIChmaWVsZElkcy5oYXMoZmllbGQuaWQpID09PSBpbmNsdWRlKSB7CiAgICAgICAgICAgICAgYWxsRmllbGRzLnB1c2goZmllbGQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoY29uc3QgZmllbGRzIG9mIE9iamVjdC52YWx1ZXModGhpcy5fZmllbGRPYmplY3RzKSkgewogICAgICAgICAgYWxsRmllbGRzLnB1c2goLi4uZmllbGRzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7CiAgICAgIGNvbnN0IGFsbElkcyA9IFtdOwogICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFsbEZpZWxkcykgewogICAgICAgIGNvbnN0IHsKICAgICAgICAgIGlkCiAgICAgICAgfSA9IGZpZWxkOwogICAgICAgIGFsbElkcy5wdXNoKGlkKTsKICAgICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHsKICAgICAgICAgIGNhc2UgInRleHQiOgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC5kZWZhdWx0VmFsdWUgfHwgIiI7CiAgICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwgewogICAgICAgICAgICAgICAgdmFsdWUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgY2FzZSAiY2hlY2tib3giOgogICAgICAgICAgY2FzZSAicmFkaW9idXR0b24iOgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC5kZWZhdWx0VmFsdWUgPT09IGZpZWxkLmV4cG9ydFZhbHVlczsKICAgICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7CiAgICAgICAgICAgICAgICB2YWx1ZQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXNlICJjb21ib2JveCI6CiAgICAgICAgICBjYXNlICJsaXN0Ym94IjoKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQuZGVmYXVsdFZhbHVlIHx8ICIiOwogICAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHsKICAgICAgICAgICAgICAgIHZhbHVlCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBjb25zdCBkb21FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtZWxlbWVudC1pZD0iJHtpZH0iXWApOwogICAgICAgIGlmICghZG9tRWxlbWVudCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfSBlbHNlIGlmICghR2V0RWxlbWVudHNCeU5hbWVTZXQuaGFzKGRvbUVsZW1lbnQpKSB7CiAgICAgICAgICB3YXJuKGBfYmluZFJlc2V0Rm9ybUFjdGlvbiAtIGVsZW1lbnQgbm90IGFsbG93ZWQ6ICR7aWR9YCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgZG9tRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzZXRmb3JtIikpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZykgewogICAgICAgIHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXM/LmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94IiwgewogICAgICAgICAgc291cmNlOiB0aGlzLAogICAgICAgICAgZGV0YWlsOiB7CiAgICAgICAgICAgIGlkOiAiYXBwIiwKICAgICAgICAgICAgaWRzOiBhbGxJZHMsCiAgICAgICAgICAgIG5hbWU6ICJSZXNldEZvcm0iCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICB9Cn0KY2xhc3MgVGV4dEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQgewogIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHsKICAgIHN1cGVyKHBhcmFtZXRlcnMsIHsKICAgICAgaXNSZW5kZXJhYmxlOiB0cnVlCiAgICB9KTsKICB9CiAgcmVuZGVyKCkgewogICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgidGV4dEFubm90YXRpb24iKTsKICAgIGNvbnN0IGltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CiAgICBpbWFnZS5zcmMgPSB0aGlzLmltYWdlUmVzb3VyY2VzUGF0aCArICJhbm5vdGF0aW9uLSIgKyB0aGlzLmRhdGEubmFtZS50b0xvd2VyQ2FzZSgpICsgIi5zdmciOwogICAgaW1hZ2Uuc2V0QXR0cmlidXRlKCJkYXRhLWwxMG4taWQiLCAicGRmanMtdGV4dC1hbm5vdGF0aW9uLXR5cGUiKTsKICAgIGltYWdlLnNldEF0dHJpYnV0ZSgiZGF0YS1sMTBuLWFyZ3MiLCBKU09OLnN0cmluZ2lmeSh7CiAgICAgIHR5cGU6IHRoaXMuZGF0YS5uYW1lCiAgICB9KSk7CiAgICBpZiAoIXRoaXMuZGF0YS5wb3B1cFJlZiAmJiB0aGlzLmhhc1BvcHVwRGF0YSkgewogICAgICB0aGlzLmhhc093bkNvbW1lbnRCdXR0b24gPSB0cnVlOwogICAgICB0aGlzLl9jcmVhdGVQb3B1cCgpOwogICAgfQogICAgdGhpcy5jb250YWluZXIuYXBwZW5kKGltYWdlKTsKICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICB9Cn0KY2xhc3MgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7CiAgcmVuZGVyKCkgewogICAgcmV0dXJuIHRoaXMuY29udGFpbmVyOwogIH0KICBzaG93RWxlbWVudEFuZEhpZGVDYW52YXMoZWxlbWVudCkgewogICAgaWYgKHRoaXMuZGF0YS5oYXNPd25DYW52YXMpIHsKICAgICAgaWYgKGVsZW1lbnQucHJldmlvdXNTaWJsaW5nPy5ub2RlTmFtZSA9PT0gIkNBTlZBUyIpIHsKICAgICAgICBlbGVtZW50LnByZXZpb3VzU2libGluZy5oaWRkZW4gPSB0cnVlOwogICAgICB9CiAgICAgIGVsZW1lbnQuaGlkZGVuID0gZmFsc2U7CiAgICB9CiAgfQogIF9nZXRLZXlNb2RpZmllcihldmVudCkgewogICAgcmV0dXJuIHV0aWxfRmVhdHVyZVRlc3QucGxhdGZvcm0uaXNNYWMgPyBldmVudC5tZXRhS2V5IDogZXZlbnQuY3RybEtleTsKICB9CiAgX3NldEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgZWxlbWVudERhdGEsIGJhc2VOYW1lLCBldmVudE5hbWUsIHZhbHVlR2V0dGVyKSB7CiAgICBpZiAoYmFzZU5hbWUuaW5jbHVkZXMoIm1vdXNlIikpIHsKICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJhc2VOYW1lLCBldmVudCA9PiB7CiAgICAgICAgdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLCB7CiAgICAgICAgICBzb3VyY2U6IHRoaXMsCiAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgaWQ6IHRoaXMuZGF0YS5pZCwKICAgICAgICAgICAgbmFtZTogZXZlbnROYW1lLAogICAgICAgICAgICB2YWx1ZTogdmFsdWVHZXR0ZXIoZXZlbnQpLAogICAgICAgICAgICBzaGlmdDogZXZlbnQuc2hpZnRLZXksCiAgICAgICAgICAgIG1vZGlmaWVyOiB0aGlzLl9nZXRLZXlNb2RpZmllcihldmVudCkKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYmFzZU5hbWUsIGV2ZW50ID0+IHsKICAgICAgICBpZiAoYmFzZU5hbWUgPT09ICJibHVyIikgewogICAgICAgICAgaWYgKCFlbGVtZW50RGF0YS5mb2N1c2VkIHx8ICFldmVudC5yZWxhdGVkVGFyZ2V0KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGVsZW1lbnREYXRhLmZvY3VzZWQgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgaWYgKGJhc2VOYW1lID09PSAiZm9jdXMiKSB7CiAgICAgICAgICBpZiAoZWxlbWVudERhdGEuZm9jdXNlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBlbGVtZW50RGF0YS5mb2N1c2VkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCF2YWx1ZUdldHRlcikgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIsIHsKICAgICAgICAgIHNvdXJjZTogdGhpcywKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBpZDogdGhpcy5kYXRhLmlkLAogICAgICAgICAgICBuYW1lOiBldmVudE5hbWUsCiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZUdldHRlcihldmVudCkKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgfQogIF9zZXRFdmVudExpc3RlbmVycyhlbGVtZW50LCBlbGVtZW50RGF0YSwgbmFtZXMsIGdldHRlcikgewogICAgZm9yIChjb25zdCBbYmFzZU5hbWUsIGV2ZW50TmFtZV0gb2YgbmFtZXMpIHsKICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gIkFjdGlvbiIgfHwgdGhpcy5kYXRhLmFjdGlvbnM/LltldmVudE5hbWVdKSB7CiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gIkZvY3VzIiB8fCBldmVudE5hbWUgPT09ICJCbHVyIikgewogICAgICAgICAgZWxlbWVudERhdGEgfHw9IHsKICAgICAgICAgICAgZm9jdXNlZDogZmFsc2UKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHRoaXMuX3NldEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgZWxlbWVudERhdGEsIGJhc2VOYW1lLCBldmVudE5hbWUsIGdldHRlcik7CiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gIkZvY3VzIiAmJiAhdGhpcy5kYXRhLmFjdGlvbnM/LkJsdXIpIHsKICAgICAgICAgIHRoaXMuX3NldEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgZWxlbWVudERhdGEsICJibHVyIiwgIkJsdXIiLCBudWxsKTsKICAgICAgICB9IGVsc2UgaWYgKGV2ZW50TmFtZSA9PT0gIkJsdXIiICYmICF0aGlzLmRhdGEuYWN0aW9ucz8uRm9jdXMpIHsKICAgICAgICAgIHRoaXMuX3NldEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgZWxlbWVudERhdGEsICJmb2N1cyIsICJGb2N1cyIsIG51bGwpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBfc2V0QmFja2dyb3VuZENvbG9yKGVsZW1lbnQpIHsKICAgIGNvbnN0IGNvbG9yID0gdGhpcy5kYXRhLmJhY2tncm91bmRDb2xvciB8fCBudWxsOwogICAgZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvciA9PT0gbnVsbCA/ICJ0cmFuc3BhcmVudCIgOiBVdGlsLm1ha2VIZXhDb2xvcihjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdKTsKICB9CiAgX3NldFRleHRTdHlsZShlbGVtZW50KSB7CiAgICBjb25zdCBURVhUX0FMSUdOTUVOVCA9IFsibGVmdCIsICJjZW50ZXIiLCAicmlnaHQiXTsKICAgIGNvbnN0IHsKICAgICAgZm9udENvbG9yCiAgICB9ID0gdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTsKICAgIGNvbnN0IGZvbnRTaXplID0gdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250U2l6ZSB8fCBhbm5vdGF0aW9uX2xheWVyX0RFRkFVTFRfRk9OVF9TSVpFOwogICAgY29uc3Qgc3R5bGUgPSBlbGVtZW50LnN0eWxlOwogICAgbGV0IGNvbXB1dGVkRm9udFNpemU7CiAgICBjb25zdCBCT1JERVJfU0laRSA9IDI7CiAgICBjb25zdCByb3VuZFRvT25lRGVjaW1hbCA9IHggPT4gTWF0aC5yb3VuZCgxMCAqIHgpIC8gMTA7CiAgICBpZiAodGhpcy5kYXRhLm11bHRpTGluZSkgewogICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLmFicyh0aGlzLmRhdGEucmVjdFszXSAtIHRoaXMuZGF0YS5yZWN0WzFdIC0gQk9SREVSX1NJWkUpOwogICAgICBjb25zdCBudW1iZXJPZkxpbmVzID0gTWF0aC5yb3VuZChoZWlnaHQgLyAoTElORV9GQUNUT1IgKiBmb250U2l6ZSkpIHx8IDE7CiAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBoZWlnaHQgLyBudW1iZXJPZkxpbmVzOwogICAgICBjb21wdXRlZEZvbnRTaXplID0gTWF0aC5taW4oZm9udFNpemUsIHJvdW5kVG9PbmVEZWNpbWFsKGxpbmVIZWlnaHQgLyBMSU5FX0ZBQ1RPUikpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5hYnModGhpcy5kYXRhLnJlY3RbM10gLSB0aGlzLmRhdGEucmVjdFsxXSAtIEJPUkRFUl9TSVpFKTsKICAgICAgY29tcHV0ZWRGb250U2l6ZSA9IE1hdGgubWluKGZvbnRTaXplLCByb3VuZFRvT25lRGVjaW1hbChoZWlnaHQgLyBMSU5FX0ZBQ1RPUikpOwogICAgfQogICAgc3R5bGUuZm9udFNpemUgPSBgY2FsYygke2NvbXB1dGVkRm9udFNpemV9cHggKiB2YXIoLS10b3RhbC1zY2FsZS1mYWN0b3IpKWA7CiAgICBzdHlsZS5jb2xvciA9IFV0aWwubWFrZUhleENvbG9yKGZvbnRDb2xvclswXSwgZm9udENvbG9yWzFdLCBmb250Q29sb3JbMl0pOwogICAgaWYgKHRoaXMuZGF0YS50ZXh0QWxpZ25tZW50ICE9PSBudWxsKSB7CiAgICAgIHN0eWxlLnRleHRBbGlnbiA9IFRFWFRfQUxJR05NRU5UW3RoaXMuZGF0YS50ZXh0QWxpZ25tZW50XTsKICAgIH0KICB9CiAgX3NldFJlcXVpcmVkKGVsZW1lbnQsIGlzUmVxdWlyZWQpIHsKICAgIGlmIChpc1JlcXVpcmVkKSB7CiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJyZXF1aXJlZCIsIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoInJlcXVpcmVkIik7CiAgICB9CiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1yZXF1aXJlZCIsIGlzUmVxdWlyZWQpOwogIH0KfQpjbGFzcyBUZXh0V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCB7CiAgY29uc3RydWN0b3IocGFyYW1ldGVycykgewogICAgY29uc3QgaXNSZW5kZXJhYmxlID0gcGFyYW1ldGVycy5yZW5kZXJGb3JtcyB8fCBwYXJhbWV0ZXJzLmRhdGEuaGFzT3duQ2FudmFzIHx8ICFwYXJhbWV0ZXJzLmRhdGEuaGFzQXBwZWFyYW5jZSAmJiAhIXBhcmFtZXRlcnMuZGF0YS5maWVsZFZhbHVlOwogICAgc3VwZXIocGFyYW1ldGVycywgewogICAgICBpc1JlbmRlcmFibGUKICAgIH0pOwogIH0KICBzZXRQcm9wZXJ0eU9uU2libGluZ3MoYmFzZSwga2V5LCB2YWx1ZSwga2V5SW5TdG9yYWdlKSB7CiAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5hbm5vdGF0aW9uU3RvcmFnZTsKICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLl9nZXRFbGVtZW50c0J5TmFtZShiYXNlLm5hbWUsIGJhc2UuaWQpKSB7CiAgICAgIGlmIChlbGVtZW50LmRvbUVsZW1lbnQpIHsKICAgICAgICBlbGVtZW50LmRvbUVsZW1lbnRba2V5XSA9IHZhbHVlOwogICAgICB9CiAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoZWxlbWVudC5pZCwgewogICAgICAgIFtrZXlJblN0b3JhZ2VdOiB2YWx1ZQogICAgICB9KTsKICAgIH0KICB9CiAgcmVuZGVyKCkgewogICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7CiAgICBjb25zdCBpZCA9IHRoaXMuZGF0YS5pZDsKICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoInRleHRXaWRnZXRBbm5vdGF0aW9uIik7CiAgICBsZXQgZWxlbWVudCA9IG51bGw7CiAgICBpZiAodGhpcy5yZW5kZXJGb3JtcykgewogICAgICBjb25zdCBzdG9yZWREYXRhID0gc3RvcmFnZS5nZXRWYWx1ZShpZCwgewogICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuZmllbGRWYWx1ZQogICAgICB9KTsKICAgICAgbGV0IHRleHRDb250ZW50ID0gc3RvcmVkRGF0YS52YWx1ZSB8fCAiIjsKICAgICAgY29uc3QgbWF4TGVuID0gc3RvcmFnZS5nZXRWYWx1ZShpZCwgewogICAgICAgIGNoYXJMaW1pdDogdGhpcy5kYXRhLm1heExlbgogICAgICB9KS5jaGFyTGltaXQ7CiAgICAgIGlmIChtYXhMZW4gJiYgdGV4dENvbnRlbnQubGVuZ3RoID4gbWF4TGVuKSB7CiAgICAgICAgdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudC5zbGljZSgwLCBtYXhMZW4pOwogICAgICB9CiAgICAgIGxldCBmaWVsZEZvcm1hdHRlZFZhbHVlcyA9IHN0b3JlZERhdGEuZm9ybWF0dGVkVmFsdWUgfHwgdGhpcy5kYXRhLnRleHRDb250ZW50Py5qb2luKCJcbiIpIHx8IG51bGw7CiAgICAgIGlmIChmaWVsZEZvcm1hdHRlZFZhbHVlcyAmJiB0aGlzLmRhdGEuY29tYikgewogICAgICAgIGZpZWxkRm9ybWF0dGVkVmFsdWVzID0gZmllbGRGb3JtYXR0ZWRWYWx1ZXMucmVwbGFjZUFsbCgvXHMrL2csICIiKTsKICAgICAgfQogICAgICBjb25zdCBlbGVtZW50RGF0YSA9IHsKICAgICAgICB1c2VyVmFsdWU6IHRleHRDb250ZW50LAogICAgICAgIGZvcm1hdHRlZFZhbHVlOiBmaWVsZEZvcm1hdHRlZFZhbHVlcywKICAgICAgICBsYXN0Q29tbWl0dGVkVmFsdWU6IG51bGwsCiAgICAgICAgY29tbWl0S2V5OiAxLAogICAgICAgIGZvY3VzZWQ6IGZhbHNlCiAgICAgIH07CiAgICAgIGlmICh0aGlzLmRhdGEubXVsdGlMaW5lKSB7CiAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CiAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IGZpZWxkRm9ybWF0dGVkVmFsdWVzID8/IHRleHRDb250ZW50OwogICAgICAgIGlmICh0aGlzLmRhdGEuZG9Ob3RTY3JvbGwpIHsKICAgICAgICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gImhpZGRlbiI7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgICAgIGVsZW1lbnQudHlwZSA9IHRoaXMuZGF0YS5wYXNzd29yZCA/ICJwYXNzd29yZCIgOiAidGV4dCI7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgZmllbGRGb3JtYXR0ZWRWYWx1ZXMgPz8gdGV4dENvbnRlbnQpOwogICAgICAgIGlmICh0aGlzLmRhdGEuZG9Ob3RTY3JvbGwpIHsKICAgICAgICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZsb3dYID0gImhpZGRlbiI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0aGlzLmRhdGEuaGFzT3duQ2FudmFzKSB7CiAgICAgICAgZWxlbWVudC5oaWRkZW4gPSB0cnVlOwogICAgICB9CiAgICAgIEdldEVsZW1lbnRzQnlOYW1lU2V0LmFkZChlbGVtZW50KTsKICAgICAgdGhpcy5jb250ZW50RWxlbWVudCA9IGVsZW1lbnQ7CiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLCBpZCk7CiAgICAgIGVsZW1lbnQuZGlzYWJsZWQgPSB0aGlzLmRhdGEucmVhZE9ubHk7CiAgICAgIGVsZW1lbnQubmFtZSA9IHRoaXMuZGF0YS5maWVsZE5hbWU7CiAgICAgIGVsZW1lbnQudGFiSW5kZXggPSAwOwogICAgICBjb25zdCB7CiAgICAgICAgZGF0ZXRpbWVGb3JtYXQsCiAgICAgICAgZGF0ZXRpbWVUeXBlLAogICAgICAgIHRpbWVTdGVwCiAgICAgIH0gPSB0aGlzLmRhdGE7CiAgICAgIGNvbnN0IGhhc0RhdGVPclRpbWUgPSAhIWRhdGV0aW1lVHlwZSAmJiB0aGlzLmVuYWJsZVNjcmlwdGluZzsKICAgICAgaWYgKGRhdGV0aW1lRm9ybWF0KSB7CiAgICAgICAgZWxlbWVudC50aXRsZSA9IGRhdGV0aW1lRm9ybWF0OwogICAgICB9CiAgICAgIHRoaXMuX3NldFJlcXVpcmVkKGVsZW1lbnQsIHRoaXMuZGF0YS5yZXF1aXJlZCk7CiAgICAgIGlmIChtYXhMZW4pIHsKICAgICAgICBlbGVtZW50Lm1heExlbmd0aCA9IG1heExlbjsKICAgICAgfQogICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZXZlbnQgPT4gewogICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHsKICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWUKICAgICAgICB9KTsKICAgICAgICB0aGlzLnNldFByb3BlcnR5T25TaWJsaW5ncyhlbGVtZW50LCAidmFsdWUiLCBldmVudC50YXJnZXQudmFsdWUsICJ2YWx1ZSIpOwogICAgICAgIGVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlID0gbnVsbDsKICAgICAgfSk7CiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwgZXZlbnQgPT4gewogICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSA/PyAiIjsKICAgICAgICBlbGVtZW50LnZhbHVlID0gZWxlbWVudERhdGEudXNlclZhbHVlID0gZGVmYXVsdFZhbHVlOwogICAgICAgIGVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlID0gbnVsbDsKICAgICAgfSk7CiAgICAgIGxldCBibHVyTGlzdGVuZXIgPSBldmVudCA9PiB7CiAgICAgICAgY29uc3QgewogICAgICAgICAgZm9ybWF0dGVkVmFsdWUKICAgICAgICB9ID0gZWxlbWVudERhdGE7CiAgICAgICAgaWYgKGZvcm1hdHRlZFZhbHVlICE9PSBudWxsICYmIGZvcm1hdHRlZFZhbHVlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IGZvcm1hdHRlZFZhbHVlOwogICAgICAgIH0KICAgICAgICBldmVudC50YXJnZXQuc2Nyb2xsTGVmdCA9IDA7CiAgICAgIH07CiAgICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykgewogICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCBldmVudCA9PiB7CiAgICAgICAgICBpZiAoZWxlbWVudERhdGEuZm9jdXNlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB7CiAgICAgICAgICAgIHRhcmdldAogICAgICAgICAgfSA9IGV2ZW50OwogICAgICAgICAgaWYgKGhhc0RhdGVPclRpbWUpIHsKICAgICAgICAgICAgdGFyZ2V0LnR5cGUgPSBkYXRldGltZVR5cGU7CiAgICAgICAgICAgIGlmICh0aW1lU3RlcCkgewogICAgICAgICAgICAgIHRhcmdldC5zdGVwID0gdGltZVN0ZXA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChlbGVtZW50RGF0YS51c2VyVmFsdWUpIHsKICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlbGVtZW50RGF0YS51c2VyVmFsdWU7CiAgICAgICAgICAgIGlmIChoYXNEYXRlT3JUaW1lKSB7CiAgICAgICAgICAgICAgaWYgKGRhdGV0aW1lVHlwZSA9PT0gInRpbWUiKSB7CiAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpOwogICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBbZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCldOwogICAgICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gcGFydHMubWFwKHYgPT4gdi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIikpLmpvaW4oIjoiKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gbmV3IERhdGUodmFsdWUgLSBUSU1FWk9ORV9PRkZTRVQpLnRvSVNPU3RyaW5nKCkuc3BsaXQoZGF0ZXRpbWVUeXBlID09PSAiZGF0ZSIgPyAiVCIgOiAiLiIsIDEpWzBdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0YXJnZXQudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZWxlbWVudERhdGEubGFzdENvbW1pdHRlZFZhbHVlID0gdGFyZ2V0LnZhbHVlOwogICAgICAgICAgZWxlbWVudERhdGEuY29tbWl0S2V5ID0gMTsKICAgICAgICAgIGlmICghdGhpcy5kYXRhLmFjdGlvbnM/LkZvY3VzKSB7CiAgICAgICAgICAgIGVsZW1lbnREYXRhLmZvY3VzZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlZnJvbXNhbmRib3giLCBqc0V2ZW50ID0+IHsKICAgICAgICAgIHRoaXMuc2hvd0VsZW1lbnRBbmRIaWRlQ2FudmFzKGpzRXZlbnQudGFyZ2V0KTsKICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSB7CiAgICAgICAgICAgIHZhbHVlKGV2ZW50KSB7CiAgICAgICAgICAgICAgZWxlbWVudERhdGEudXNlclZhbHVlID0gZXZlbnQuZGV0YWlsLnZhbHVlID8/ICIiOwogICAgICAgICAgICAgIGlmICghaGFzRGF0ZU9yVGltZSkgewogICAgICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwgewogICAgICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudERhdGEudXNlclZhbHVlLnRvU3RyaW5nKCkKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBlbGVtZW50RGF0YS51c2VyVmFsdWU7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlKGV2ZW50KSB7CiAgICAgICAgICAgICAgY29uc3QgewogICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUKICAgICAgICAgICAgICB9ID0gZXZlbnQuZGV0YWlsOwogICAgICAgICAgICAgIGVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVkVmFsdWU7CiAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlZFZhbHVlICE9PSBudWxsICYmIGZvcm1hdHRlZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgZXZlbnQudGFyZ2V0ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHsKICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBpZiAoaGFzRGF0ZU9yVGltZSkgewogICAgICAgICAgICAgICAgZGF0YS52YWx1ZSA9IGZvcm1hdHRlZFZhbHVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCBkYXRhKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2VsUmFuZ2UoZXZlbnQpIHsKICAgICAgICAgICAgICBldmVudC50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoLi4uZXZlbnQuZGV0YWlsLnNlbFJhbmdlKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY2hhckxpbWl0OiBldmVudCA9PiB7CiAgICAgICAgICAgICAgY29uc3QgewogICAgICAgICAgICAgICAgY2hhckxpbWl0CiAgICAgICAgICAgICAgfSA9IGV2ZW50LmRldGFpbDsKICAgICAgICAgICAgICBjb25zdCB7CiAgICAgICAgICAgICAgICB0YXJnZXQKICAgICAgICAgICAgICB9ID0gZXZlbnQ7CiAgICAgICAgICAgICAgaWYgKGNoYXJMaW1pdCA9PT0gMCkgewogICAgICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZSgibWF4TGVuZ3RoIik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoIm1heExlbmd0aCIsIGNoYXJMaW1pdCk7CiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZWxlbWVudERhdGEudXNlclZhbHVlOwogICAgICAgICAgICAgIGlmICghdmFsdWUgfHwgdmFsdWUubGVuZ3RoIDw9IGNoYXJMaW1pdCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGNoYXJMaW1pdCk7CiAgICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gZWxlbWVudERhdGEudXNlclZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwgewogICAgICAgICAgICAgICAgdmFsdWUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIsIHsKICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcywKICAgICAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgICAgICBpZCwKICAgICAgICAgICAgICAgICAgbmFtZTogIktleXN0cm9rZSIsCiAgICAgICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgICAgICB3aWxsQ29tbWl0OiB0cnVlLAogICAgICAgICAgICAgICAgICBjb21taXRLZXk6IDEsCiAgICAgICAgICAgICAgICAgIHNlbFN0YXJ0OiB0YXJnZXQuc2VsZWN0aW9uU3RhcnQsCiAgICAgICAgICAgICAgICAgIHNlbEVuZDogdGFyZ2V0LnNlbGVjdGlvbkVuZAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGFjdGlvbnMsIGpzRXZlbnQpOwogICAgICAgIH0pOwogICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGV2ZW50ID0+IHsKICAgICAgICAgIGVsZW1lbnREYXRhLmNvbW1pdEtleSA9IDE7CiAgICAgICAgICBsZXQgY29tbWl0S2V5ID0gLTE7CiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgICAgICBjb21taXRLZXkgPSAwOwogICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICJFbnRlciIgJiYgIXRoaXMuZGF0YS5tdWx0aUxpbmUpIHsKICAgICAgICAgICAgY29tbWl0S2V5ID0gMjsKICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiVGFiIikgewogICAgICAgICAgICBlbGVtZW50RGF0YS5jb21taXRLZXkgPSAzOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbW1pdEtleSA9PT0gLTEpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgewogICAgICAgICAgICB2YWx1ZQogICAgICAgICAgfSA9IGV2ZW50LnRhcmdldDsKICAgICAgICAgIGlmIChlbGVtZW50RGF0YS5sYXN0Q29tbWl0dGVkVmFsdWUgPT09IHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGVsZW1lbnREYXRhLmxhc3RDb21taXR0ZWRWYWx1ZSA9IHZhbHVlOwogICAgICAgICAgZWxlbWVudERhdGEudXNlclZhbHVlID0gdmFsdWU7CiAgICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaCgiZGlzcGF0Y2hldmVudGluc2FuZGJveCIsIHsKICAgICAgICAgICAgc291cmNlOiB0aGlzLAogICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICBpZCwKICAgICAgICAgICAgICBuYW1lOiAiS2V5c3Ryb2tlIiwKICAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgICB3aWxsQ29tbWl0OiB0cnVlLAogICAgICAgICAgICAgIGNvbW1pdEtleSwKICAgICAgICAgICAgICBzZWxTdGFydDogZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0LAogICAgICAgICAgICAgIHNlbEVuZDogZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZAogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICBjb25zdCBfYmx1ckxpc3RlbmVyID0gYmx1ckxpc3RlbmVyOwogICAgICAgIGJsdXJMaXN0ZW5lciA9IG51bGw7CiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgZXZlbnQgPT4gewogICAgICAgICAgaWYgKCFlbGVtZW50RGF0YS5mb2N1c2VkIHx8ICFldmVudC5yZWxhdGVkVGFyZ2V0KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdGhpcy5kYXRhLmFjdGlvbnM/LkJsdXIpIHsKICAgICAgICAgICAgZWxlbWVudERhdGEuZm9jdXNlZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgewogICAgICAgICAgICB0YXJnZXQKICAgICAgICAgIH0gPSBldmVudDsKICAgICAgICAgIGxldCB7CiAgICAgICAgICAgIHZhbHVlCiAgICAgICAgICB9ID0gdGFyZ2V0OwogICAgICAgICAgaWYgKGhhc0RhdGVPclRpbWUpIHsKICAgICAgICAgICAgaWYgKHZhbHVlICYmIGRhdGV0aW1lVHlwZSA9PT0gInRpbWUiKSB7CiAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdCgiOiIpLm1hcCh2ID0+IHBhcnNlSW50KHYsIDEwKSk7CiAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSgyMDAwLCAwLCAxLCBwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdIHx8IDApLnZhbHVlT2YoKTsKICAgICAgICAgICAgICB0YXJnZXQuc3RlcCA9ICIiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGlmICghdmFsdWUuaW5jbHVkZXMoIlQiKSkgewogICAgICAgICAgICAgICAgdmFsdWUgPSBgJHt2YWx1ZX1UMDA6MDBgOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKS52YWx1ZU9mKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGFyZ2V0LnR5cGUgPSAidGV4dCI7CiAgICAgICAgICB9CiAgICAgICAgICBlbGVtZW50RGF0YS51c2VyVmFsdWUgPSB2YWx1ZTsKICAgICAgICAgIGlmIChlbGVtZW50RGF0YS5sYXN0Q29tbWl0dGVkVmFsdWUgIT09IHZhbHVlKSB7CiAgICAgICAgICAgIHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXM/LmRpc3BhdGNoKCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94IiwgewogICAgICAgICAgICAgIHNvdXJjZTogdGhpcywKICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgIGlkLAogICAgICAgICAgICAgICAgbmFtZTogIktleXN0cm9rZSIsCiAgICAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgICAgIHdpbGxDb21taXQ6IHRydWUsCiAgICAgICAgICAgICAgICBjb21taXRLZXk6IGVsZW1lbnREYXRhLmNvbW1pdEtleSwKICAgICAgICAgICAgICAgIHNlbFN0YXJ0OiBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQsCiAgICAgICAgICAgICAgICBzZWxFbmQ6IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgX2JsdXJMaXN0ZW5lcihldmVudCk7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMuZGF0YS5hY3Rpb25zPy5LZXlzdHJva2UpIHsKICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlaW5wdXQiLCBldmVudCA9PiB7CiAgICAgICAgICAgIGVsZW1lbnREYXRhLmxhc3RDb21taXR0ZWRWYWx1ZSA9IG51bGw7CiAgICAgICAgICAgIGNvbnN0IHsKICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgIHRhcmdldAogICAgICAgICAgICB9ID0gZXZlbnQ7CiAgICAgICAgICAgIGNvbnN0IHsKICAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgICBzZWxlY3Rpb25TdGFydCwKICAgICAgICAgICAgICBzZWxlY3Rpb25FbmQKICAgICAgICAgICAgfSA9IHRhcmdldDsKICAgICAgICAgICAgbGV0IHNlbFN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQsCiAgICAgICAgICAgICAgc2VsRW5kID0gc2VsZWN0aW9uRW5kOwogICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmlucHV0VHlwZSkgewogICAgICAgICAgICAgIGNhc2UgImRlbGV0ZVdvcmRCYWNrd2FyZCI6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdmFsdWUuc3Vic3RyaW5nKDAsIHNlbGVjdGlvblN0YXJ0KS5tYXRjaCgvXHcqW15cd10qJC8pOwogICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICBzZWxTdGFydCAtPSBtYXRjaFswXS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2FzZSAiZGVsZXRlV29yZEZvcndhcmQiOgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IHZhbHVlLnN1YnN0cmluZyhzZWxlY3Rpb25TdGFydCkubWF0Y2goL15bXlx3XSpcdyovKTsKICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsRW5kICs9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXNlICJkZWxldGVDb250ZW50QmFja3dhcmQiOgogICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0ID09PSBzZWxlY3Rpb25FbmQpIHsKICAgICAgICAgICAgICAgICAgc2VsU3RhcnQgLT0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImRlbGV0ZUNvbnRlbnRGb3J3YXJkIjoKICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGFydCA9PT0gc2VsZWN0aW9uRW5kKSB7CiAgICAgICAgICAgICAgICAgIHNlbEVuZCArPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLCB7CiAgICAgICAgICAgICAgc291cmNlOiB0aGlzLAogICAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgICAgaWQsCiAgICAgICAgICAgICAgICBuYW1lOiAiS2V5c3Ryb2tlIiwKICAgICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgICAgY2hhbmdlOiBkYXRhIHx8ICIiLAogICAgICAgICAgICAgICAgd2lsbENvbW1pdDogZmFsc2UsCiAgICAgICAgICAgICAgICBzZWxTdGFydCwKICAgICAgICAgICAgICAgIHNlbEVuZAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMoZWxlbWVudCwgZWxlbWVudERhdGEsIFtbImZvY3VzIiwgIkZvY3VzIl0sIFsiYmx1ciIsICJCbHVyIl0sIFsibW91c2Vkb3duIiwgIk1vdXNlIERvd24iXSwgWyJtb3VzZWVudGVyIiwgIk1vdXNlIEVudGVyIl0sIFsibW91c2VsZWF2ZSIsICJNb3VzZSBFeGl0Il0sIFsibW91c2V1cCIsICJNb3VzZSBVcCJdXSwgZXZlbnQgPT4gZXZlbnQudGFyZ2V0LnZhbHVlKTsKICAgICAgfQogICAgICBpZiAoYmx1ckxpc3RlbmVyKSB7CiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgYmx1ckxpc3RlbmVyKTsKICAgICAgfQogICAgICBpZiAodGhpcy5kYXRhLmNvbWIpIHsKICAgICAgICBjb25zdCBmaWVsZFdpZHRoID0gdGhpcy5kYXRhLnJlY3RbMl0gLSB0aGlzLmRhdGEucmVjdFswXTsKICAgICAgICBjb25zdCBjb21iV2lkdGggPSBmaWVsZFdpZHRoIC8gbWF4TGVuOwogICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29tYiIpOwogICAgICAgIGVsZW1lbnQuc3R5bGUubGV0dGVyU3BhY2luZyA9IGBjYWxjKCR7Y29tYldpZHRofXB4ICogdmFyKC0tdG90YWwtc2NhbGUtZmFjdG9yKSAtIDFjaClgOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZTsKICAgICAgZWxlbWVudC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gIm1pZGRsZSI7CiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICJ0YWJsZS1jZWxsIjsKICAgICAgaWYgKHRoaXMuZGF0YS5oYXNPd25DYW52YXMpIHsKICAgICAgICBlbGVtZW50LmhpZGRlbiA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuX3NldFRleHRTdHlsZShlbGVtZW50KTsKICAgIHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihlbGVtZW50KTsKICAgIHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKGVsZW1lbnQpOwogICAgdGhpcy5jb250YWluZXIuYXBwZW5kKGVsZW1lbnQpOwogICAgcmV0dXJuIHRoaXMuY29udGFpbmVyOwogIH0KfQpjbGFzcyBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHsKICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7CiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7CiAgICAgIGlzUmVuZGVyYWJsZTogISFwYXJhbWV0ZXJzLmRhdGEuaGFzT3duQ2FudmFzCiAgICB9KTsKICB9Cn0KY2xhc3MgQ2hlY2tib3hXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHsKICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7CiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7CiAgICAgIGlzUmVuZGVyYWJsZTogcGFyYW1ldGVycy5yZW5kZXJGb3JtcwogICAgfSk7CiAgfQogIHJlbmRlcigpIHsKICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmFubm90YXRpb25TdG9yYWdlOwogICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTsKICAgIGNvbnN0IGlkID0gZGF0YS5pZDsKICAgIGxldCB2YWx1ZSA9IHN0b3JhZ2UuZ2V0VmFsdWUoaWQsIHsKICAgICAgdmFsdWU6IGRhdGEuZXhwb3J0VmFsdWUgPT09IGRhdGEuZmllbGRWYWx1ZQogICAgfSkudmFsdWU7CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICB2YWx1ZSA9IHZhbHVlICE9PSAiT2ZmIjsKICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwgewogICAgICAgIHZhbHVlCiAgICAgIH0pOwogICAgfQogICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiIsICJjaGVja0JveCIpOwogICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CiAgICBHZXRFbGVtZW50c0J5TmFtZVNldC5hZGQoZWxlbWVudCk7CiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1lbGVtZW50LWlkIiwgaWQpOwogICAgZWxlbWVudC5kaXNhYmxlZCA9IGRhdGEucmVhZE9ubHk7CiAgICB0aGlzLl9zZXRSZXF1aXJlZChlbGVtZW50LCB0aGlzLmRhdGEucmVxdWlyZWQpOwogICAgZWxlbWVudC50eXBlID0gImNoZWNrYm94IjsKICAgIGVsZW1lbnQubmFtZSA9IGRhdGEuZmllbGROYW1lOwogICAgaWYgKHZhbHVlKSB7CiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwgdHJ1ZSk7CiAgICB9CiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiZXhwb3J0VmFsdWUiLCBkYXRhLmV4cG9ydFZhbHVlKTsKICAgIGVsZW1lbnQudGFiSW5kZXggPSAwOwogICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBldmVudCA9PiB7CiAgICAgIGNvbnN0IHsKICAgICAgICBuYW1lLAogICAgICAgIGNoZWNrZWQKICAgICAgfSA9IGV2ZW50LnRhcmdldDsKICAgICAgZm9yIChjb25zdCBjaGVja2JveCBvZiB0aGlzLl9nZXRFbGVtZW50c0J5TmFtZShuYW1lLCBpZCkpIHsKICAgICAgICBjb25zdCBjdXJDaGVja2VkID0gY2hlY2tlZCAmJiBjaGVja2JveC5leHBvcnRWYWx1ZSA9PT0gZGF0YS5leHBvcnRWYWx1ZTsKICAgICAgICBpZiAoY2hlY2tib3guZG9tRWxlbWVudCkgewogICAgICAgICAgY2hlY2tib3guZG9tRWxlbWVudC5jaGVja2VkID0gY3VyQ2hlY2tlZDsKICAgICAgICB9CiAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShjaGVja2JveC5pZCwgewogICAgICAgICAgdmFsdWU6IGN1ckNoZWNrZWQKICAgICAgICB9KTsKICAgICAgfQogICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7CiAgICAgICAgdmFsdWU6IGNoZWNrZWQKICAgICAgfSk7CiAgICB9KTsKICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwgZXZlbnQgPT4gewogICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBkYXRhLmRlZmF1bHRGaWVsZFZhbHVlIHx8ICJPZmYiOwogICAgICBldmVudC50YXJnZXQuY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZSA9PT0gZGF0YS5leHBvcnRWYWx1ZTsKICAgIH0pOwogICAgaWYgKHRoaXMuZW5hYmxlU2NyaXB0aW5nICYmIHRoaXMuaGFzSlNBY3Rpb25zKSB7CiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlZnJvbXNhbmRib3giLCBqc0V2ZW50ID0+IHsKICAgICAgICBjb25zdCBhY3Rpb25zID0gewogICAgICAgICAgdmFsdWUoZXZlbnQpIHsKICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmNoZWNrZWQgPSBldmVudC5kZXRhaWwudmFsdWUgIT09ICJPZmYiOwogICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7CiAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC5jaGVja2VkCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGFjdGlvbnMsIGpzRXZlbnQpOwogICAgICB9KTsKICAgICAgdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMoZWxlbWVudCwgbnVsbCwgW1siY2hhbmdlIiwgIlZhbGlkYXRlIl0sIFsiY2hhbmdlIiwgIkFjdGlvbiJdLCBbImZvY3VzIiwgIkZvY3VzIl0sIFsiYmx1ciIsICJCbHVyIl0sIFsibW91c2Vkb3duIiwgIk1vdXNlIERvd24iXSwgWyJtb3VzZWVudGVyIiwgIk1vdXNlIEVudGVyIl0sIFsibW91c2VsZWF2ZSIsICJNb3VzZSBFeGl0Il0sIFsibW91c2V1cCIsICJNb3VzZSBVcCJdXSwgZXZlbnQgPT4gZXZlbnQudGFyZ2V0LmNoZWNrZWQpOwogICAgfQogICAgdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKGVsZW1lbnQpOwogICAgdGhpcy5fc2V0RGVmYXVsdFByb3BlcnRpZXNGcm9tSlMoZWxlbWVudCk7CiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoZWxlbWVudCk7CiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgfQp9CmNsYXNzIFJhZGlvQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCB7CiAgY29uc3RydWN0b3IocGFyYW1ldGVycykgewogICAgc3VwZXIocGFyYW1ldGVycywgewogICAgICBpc1JlbmRlcmFibGU6IHBhcmFtZXRlcnMucmVuZGVyRm9ybXMKICAgIH0pOwogIH0KICByZW5kZXIoKSB7CiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJidXR0b25XaWRnZXRBbm5vdGF0aW9uIiwgInJhZGlvQnV0dG9uIik7CiAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5hbm5vdGF0aW9uU3RvcmFnZTsKICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7CiAgICBjb25zdCBpZCA9IGRhdGEuaWQ7CiAgICBsZXQgdmFsdWUgPSBzdG9yYWdlLmdldFZhbHVlKGlkLCB7CiAgICAgIHZhbHVlOiBkYXRhLmZpZWxkVmFsdWUgPT09IGRhdGEuYnV0dG9uVmFsdWUKICAgIH0pLnZhbHVlOwogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIpIHsKICAgICAgdmFsdWUgPSB2YWx1ZSAhPT0gZGF0YS5idXR0b25WYWx1ZTsKICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwgewogICAgICAgIHZhbHVlCiAgICAgIH0pOwogICAgfQogICAgaWYgKHZhbHVlKSB7CiAgICAgIGZvciAoY29uc3QgcmFkaW8gb2YgdGhpcy5fZ2V0RWxlbWVudHNCeU5hbWUoZGF0YS5maWVsZE5hbWUsIGlkKSkgewogICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUocmFkaW8uaWQsIHsKICAgICAgICAgIHZhbHVlOiBmYWxzZQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgIEdldEVsZW1lbnRzQnlOYW1lU2V0LmFkZChlbGVtZW50KTsKICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWVsZW1lbnQtaWQiLCBpZCk7CiAgICBlbGVtZW50LmRpc2FibGVkID0gZGF0YS5yZWFkT25seTsKICAgIHRoaXMuX3NldFJlcXVpcmVkKGVsZW1lbnQsIHRoaXMuZGF0YS5yZXF1aXJlZCk7CiAgICBlbGVtZW50LnR5cGUgPSAicmFkaW8iOwogICAgZWxlbWVudC5uYW1lID0gZGF0YS5maWVsZE5hbWU7CiAgICBpZiAodmFsdWUpIHsKICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCB0cnVlKTsKICAgIH0KICAgIGVsZW1lbnQudGFiSW5kZXggPSAwOwogICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBldmVudCA9PiB7CiAgICAgIGNvbnN0IHsKICAgICAgICBuYW1lLAogICAgICAgIGNoZWNrZWQKICAgICAgfSA9IGV2ZW50LnRhcmdldDsKICAgICAgZm9yIChjb25zdCByYWRpbyBvZiB0aGlzLl9nZXRFbGVtZW50c0J5TmFtZShuYW1lLCBpZCkpIHsKICAgICAgICBzdG9yYWdlLnNldFZhbHVlKHJhZGlvLmlkLCB7CiAgICAgICAgICB2YWx1ZTogZmFsc2UKICAgICAgICB9KTsKICAgICAgfQogICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7CiAgICAgICAgdmFsdWU6IGNoZWNrZWQKICAgICAgfSk7CiAgICB9KTsKICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwgZXZlbnQgPT4gewogICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBkYXRhLmRlZmF1bHRGaWVsZFZhbHVlOwogICAgICBldmVudC50YXJnZXQuY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0VmFsdWUgPT09IGRhdGEuYnV0dG9uVmFsdWU7CiAgICB9KTsKICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykgewogICAgICBjb25zdCBwZGZCdXR0b25WYWx1ZSA9IGRhdGEuYnV0dG9uVmFsdWU7CiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlZnJvbXNhbmRib3giLCBqc0V2ZW50ID0+IHsKICAgICAgICBjb25zdCBhY3Rpb25zID0gewogICAgICAgICAgdmFsdWU6IGV2ZW50ID0+IHsKICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IHBkZkJ1dHRvblZhbHVlID09PSBldmVudC5kZXRhaWwudmFsdWU7CiAgICAgICAgICAgIGZvciAoY29uc3QgcmFkaW8gb2YgdGhpcy5fZ2V0RWxlbWVudHNCeU5hbWUoZXZlbnQudGFyZ2V0Lm5hbWUpKSB7CiAgICAgICAgICAgICAgY29uc3QgY3VyQ2hlY2tlZCA9IGNoZWNrZWQgJiYgcmFkaW8uaWQgPT09IGlkOwogICAgICAgICAgICAgIGlmIChyYWRpby5kb21FbGVtZW50KSB7CiAgICAgICAgICAgICAgICByYWRpby5kb21FbGVtZW50LmNoZWNrZWQgPSBjdXJDaGVja2VkOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKHJhZGlvLmlkLCB7CiAgICAgICAgICAgICAgICB2YWx1ZTogY3VyQ2hlY2tlZAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goYWN0aW9ucywganNFdmVudCk7CiAgICAgIH0pOwogICAgICB0aGlzLl9zZXRFdmVudExpc3RlbmVycyhlbGVtZW50LCBudWxsLCBbWyJjaGFuZ2UiLCAiVmFsaWRhdGUiXSwgWyJjaGFuZ2UiLCAiQWN0aW9uIl0sIFsiZm9jdXMiLCAiRm9jdXMiXSwgWyJibHVyIiwgIkJsdXIiXSwgWyJtb3VzZWRvd24iLCAiTW91c2UgRG93biJdLCBbIm1vdXNlZW50ZXIiLCAiTW91c2UgRW50ZXIiXSwgWyJtb3VzZWxlYXZlIiwgIk1vdXNlIEV4aXQiXSwgWyJtb3VzZXVwIiwgIk1vdXNlIFVwIl1dLCBldmVudCA9PiBldmVudC50YXJnZXQuY2hlY2tlZCk7CiAgICB9CiAgICB0aGlzLl9zZXRCYWNrZ3JvdW5kQ29sb3IoZWxlbWVudCk7CiAgICB0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhlbGVtZW50KTsKICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChlbGVtZW50KTsKICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICB9Cn0KY2xhc3MgUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgTGlua0Fubm90YXRpb25FbGVtZW50IHsKICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7CiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7CiAgICAgIGlnbm9yZUJvcmRlcjogcGFyYW1ldGVycy5kYXRhLmhhc0FwcGVhcmFuY2UKICAgIH0pOwogIH0KICByZW5kZXIoKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBzdXBlci5yZW5kZXIoKTsKICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJidXR0b25XaWRnZXRBbm5vdGF0aW9uIiwgInB1c2hCdXR0b24iKTsKICAgIGNvbnN0IGxpbmtFbGVtZW50ID0gY29udGFpbmVyLmxhc3RDaGlsZDsKICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucyAmJiBsaW5rRWxlbWVudCkgewogICAgICB0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhsaW5rRWxlbWVudCk7CiAgICAgIGxpbmtFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZyb21zYW5kYm94IiwganNFdmVudCA9PiB7CiAgICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KHt9LCBqc0V2ZW50KTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gY29udGFpbmVyOwogIH0KfQpjbGFzcyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHsKICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7CiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7CiAgICAgIGlzUmVuZGVyYWJsZTogcGFyYW1ldGVycy5yZW5kZXJGb3JtcwogICAgfSk7CiAgfQogIHJlbmRlcigpIHsKICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImNob2ljZVdpZGdldEFubm90YXRpb24iKTsKICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmFubm90YXRpb25TdG9yYWdlOwogICAgY29uc3QgaWQgPSB0aGlzLmRhdGEuaWQ7CiAgICBjb25zdCBzdG9yZWREYXRhID0gc3RvcmFnZS5nZXRWYWx1ZShpZCwgewogICAgICB2YWx1ZTogdGhpcy5kYXRhLmZpZWxkVmFsdWUKICAgIH0pOwogICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwogICAgR2V0RWxlbWVudHNCeU5hbWVTZXQuYWRkKHNlbGVjdEVsZW1lbnQpOwogICAgc2VsZWN0RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtZWxlbWVudC1pZCIsIGlkKTsKICAgIHNlbGVjdEVsZW1lbnQuZGlzYWJsZWQgPSB0aGlzLmRhdGEucmVhZE9ubHk7CiAgICB0aGlzLl9zZXRSZXF1aXJlZChzZWxlY3RFbGVtZW50LCB0aGlzLmRhdGEucmVxdWlyZWQpOwogICAgc2VsZWN0RWxlbWVudC5uYW1lID0gdGhpcy5kYXRhLmZpZWxkTmFtZTsKICAgIHNlbGVjdEVsZW1lbnQudGFiSW5kZXggPSAwOwogICAgbGV0IGFkZEFuRW1wdHlFbnRyeSA9IHRoaXMuZGF0YS5jb21ibyAmJiB0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGggPiAwOwogICAgaWYgKCF0aGlzLmRhdGEuY29tYm8pIHsKICAgICAgc2VsZWN0RWxlbWVudC5zaXplID0gdGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoOwogICAgICBpZiAodGhpcy5kYXRhLm11bHRpU2VsZWN0KSB7CiAgICAgICAgc2VsZWN0RWxlbWVudC5tdWx0aXBsZSA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIHNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVzZXRmb3JtIiwgZXZlbnQgPT4gewogICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWU7CiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHNlbGVjdEVsZW1lbnQub3B0aW9ucykgewogICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IG9wdGlvbi52YWx1ZSA9PT0gZGVmYXVsdFZhbHVlOwogICAgICB9CiAgICB9KTsKICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRoaXMuZGF0YS5vcHRpb25zKSB7CiAgICAgIGNvbnN0IG9wdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKICAgICAgb3B0aW9uRWxlbWVudC50ZXh0Q29udGVudCA9IG9wdGlvbi5kaXNwbGF5VmFsdWU7CiAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBvcHRpb24uZXhwb3J0VmFsdWU7CiAgICAgIGlmIChzdG9yZWREYXRhLnZhbHVlLmluY2x1ZGVzKG9wdGlvbi5leHBvcnRWYWx1ZSkpIHsKICAgICAgICBvcHRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgic2VsZWN0ZWQiLCB0cnVlKTsKICAgICAgICBhZGRBbkVtcHR5RW50cnkgPSBmYWxzZTsKICAgICAgfQogICAgICBzZWxlY3RFbGVtZW50LmFwcGVuZChvcHRpb25FbGVtZW50KTsKICAgIH0KICAgIGxldCByZW1vdmVFbXB0eUVudHJ5ID0gbnVsbDsKICAgIGlmIChhZGRBbkVtcHR5RW50cnkpIHsKICAgICAgY29uc3Qgbm9uZU9wdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKICAgICAgbm9uZU9wdGlvbkVsZW1lbnQudmFsdWUgPSAiICI7CiAgICAgIG5vbmVPcHRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwgdHJ1ZSk7CiAgICAgIG5vbmVPcHRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgic2VsZWN0ZWQiLCB0cnVlKTsKICAgICAgc2VsZWN0RWxlbWVudC5wcmVwZW5kKG5vbmVPcHRpb25FbGVtZW50KTsKICAgICAgcmVtb3ZlRW1wdHlFbnRyeSA9ICgpID0+IHsKICAgICAgICBub25lT3B0aW9uRWxlbWVudC5yZW1vdmUoKTsKICAgICAgICBzZWxlY3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImlucHV0IiwgcmVtb3ZlRW1wdHlFbnRyeSk7CiAgICAgICAgcmVtb3ZlRW1wdHlFbnRyeSA9IG51bGw7CiAgICAgIH07CiAgICAgIHNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCByZW1vdmVFbXB0eUVudHJ5KTsKICAgIH0KICAgIGNvbnN0IGdldFZhbHVlID0gaXNFeHBvcnQgPT4gewogICAgICBjb25zdCBuYW1lID0gaXNFeHBvcnQgPyAidmFsdWUiIDogInRleHRDb250ZW50IjsKICAgICAgY29uc3QgewogICAgICAgIG9wdGlvbnMsCiAgICAgICAgbXVsdGlwbGUKICAgICAgfSA9IHNlbGVjdEVsZW1lbnQ7CiAgICAgIGlmICghbXVsdGlwbGUpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5zZWxlY3RlZEluZGV4ID09PSAtMSA/IG51bGwgOiBvcHRpb25zW29wdGlvbnMuc2VsZWN0ZWRJbmRleF1bbmFtZV07CiAgICAgIH0KICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChvcHRpb25zLCBvcHRpb24gPT4gb3B0aW9uLnNlbGVjdGVkKS5tYXAob3B0aW9uID0+IG9wdGlvbltuYW1lXSk7CiAgICB9OwogICAgbGV0IHNlbGVjdGVkVmFsdWVzID0gZ2V0VmFsdWUoZmFsc2UpOwogICAgY29uc3QgZ2V0SXRlbXMgPSBldmVudCA9PiB7CiAgICAgIGNvbnN0IG9wdGlvbnMgPSBldmVudC50YXJnZXQub3B0aW9uczsKICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChvcHRpb25zLCBvcHRpb24gPT4gKHsKICAgICAgICBkaXNwbGF5VmFsdWU6IG9wdGlvbi50ZXh0Q29udGVudCwKICAgICAgICBleHBvcnRWYWx1ZTogb3B0aW9uLnZhbHVlCiAgICAgIH0pKTsKICAgIH07CiAgICBpZiAodGhpcy5lbmFibGVTY3JpcHRpbmcgJiYgdGhpcy5oYXNKU0FjdGlvbnMpIHsKICAgICAgc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGVmcm9tc2FuZGJveCIsIGpzRXZlbnQgPT4gewogICAgICAgIGNvbnN0IGFjdGlvbnMgPSB7CiAgICAgICAgICB2YWx1ZShldmVudCkgewogICAgICAgICAgICByZW1vdmVFbXB0eUVudHJ5Py4oKTsKICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC5kZXRhaWwudmFsdWU7CiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBTZXQoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0pOwogICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBzZWxlY3RFbGVtZW50Lm9wdGlvbnMpIHsKICAgICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZXMuaGFzKG9wdGlvbi52YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwgewogICAgICAgICAgICAgIHZhbHVlOiBnZXRWYWx1ZSh0cnVlKQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZXMgPSBnZXRWYWx1ZShmYWxzZSk7CiAgICAgICAgICB9LAogICAgICAgICAgbXVsdGlwbGVTZWxlY3Rpb24oZXZlbnQpIHsKICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5tdWx0aXBsZSA9IHRydWU7CiAgICAgICAgICB9LAogICAgICAgICAgcmVtb3ZlKGV2ZW50KSB7CiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3RFbGVtZW50Lm9wdGlvbnM7CiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZXZlbnQuZGV0YWlsLnJlbW92ZTsKICAgICAgICAgICAgb3B0aW9uc1tpbmRleF0uc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5yZW1vdmUoaW5kZXgpOwogICAgICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgY29uc3QgaSA9IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXguY2FsbChvcHRpb25zLCBvcHRpb24gPT4gb3B0aW9uLnNlbGVjdGVkKTsKICAgICAgICAgICAgICBpZiAoaSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7CiAgICAgICAgICAgICAgdmFsdWU6IGdldFZhbHVlKHRydWUpLAogICAgICAgICAgICAgIGl0ZW1zOiBnZXRJdGVtcyhldmVudCkKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVzID0gZ2V0VmFsdWUoZmFsc2UpOwogICAgICAgICAgfSwKICAgICAgICAgIGNsZWFyKGV2ZW50KSB7CiAgICAgICAgICAgIHdoaWxlIChzZWxlY3RFbGVtZW50Lmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQucmVtb3ZlKDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHsKICAgICAgICAgICAgICB2YWx1ZTogbnVsbCwKICAgICAgICAgICAgICBpdGVtczogW10KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVzID0gZ2V0VmFsdWUoZmFsc2UpOwogICAgICAgICAgfSwKICAgICAgICAgIGluc2VydChldmVudCkgewogICAgICAgICAgICBjb25zdCB7CiAgICAgICAgICAgICAgaW5kZXgsCiAgICAgICAgICAgICAgZGlzcGxheVZhbHVlLAogICAgICAgICAgICAgIGV4cG9ydFZhbHVlCiAgICAgICAgICAgIH0gPSBldmVudC5kZXRhaWwuaW5zZXJ0OwogICAgICAgICAgICBjb25zdCBzZWxlY3RDaGlsZCA9IHNlbGVjdEVsZW1lbnQuY2hpbGRyZW5baW5kZXhdOwogICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CiAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBkaXNwbGF5VmFsdWU7CiAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBleHBvcnRWYWx1ZTsKICAgICAgICAgICAgaWYgKHNlbGVjdENoaWxkKSB7CiAgICAgICAgICAgICAgc2VsZWN0Q2hpbGQuYmVmb3JlKG9wdGlvbkVsZW1lbnQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuYXBwZW5kKG9wdGlvbkVsZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHsKICAgICAgICAgICAgICB2YWx1ZTogZ2V0VmFsdWUodHJ1ZSksCiAgICAgICAgICAgICAgaXRlbXM6IGdldEl0ZW1zKGV2ZW50KQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZXMgPSBnZXRWYWx1ZShmYWxzZSk7CiAgICAgICAgICB9LAogICAgICAgICAgaXRlbXMoZXZlbnQpIHsKICAgICAgICAgICAgY29uc3QgewogICAgICAgICAgICAgIGl0ZW1zCiAgICAgICAgICAgIH0gPSBldmVudC5kZXRhaWw7CiAgICAgICAgICAgIHdoaWxlIChzZWxlY3RFbGVtZW50Lmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQucmVtb3ZlKDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykgewogICAgICAgICAgICAgIGNvbnN0IHsKICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZSwKICAgICAgICAgICAgICAgIGV4cG9ydFZhbHVlCiAgICAgICAgICAgICAgfSA9IGl0ZW07CiAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOwogICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBkaXNwbGF5VmFsdWU7CiAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC52YWx1ZSA9IGV4cG9ydFZhbHVlOwogICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuYXBwZW5kKG9wdGlvbkVsZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzZWxlY3RFbGVtZW50Lm9wdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwgewogICAgICAgICAgICAgIHZhbHVlOiBnZXRWYWx1ZSh0cnVlKSwKICAgICAgICAgICAgICBpdGVtczogZ2V0SXRlbXMoZXZlbnQpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBzZWxlY3RlZFZhbHVlcyA9IGdldFZhbHVlKGZhbHNlKTsKICAgICAgICAgIH0sCiAgICAgICAgICBpbmRpY2VzKGV2ZW50KSB7CiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBuZXcgU2V0KGV2ZW50LmRldGFpbC5pbmRpY2VzKTsKICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgZXZlbnQudGFyZ2V0Lm9wdGlvbnMpIHsKICAgICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBpbmRpY2VzLmhhcyhvcHRpb24uaW5kZXgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHsKICAgICAgICAgICAgICB2YWx1ZTogZ2V0VmFsdWUodHJ1ZSkKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVzID0gZ2V0VmFsdWUoZmFsc2UpOwogICAgICAgICAgfSwKICAgICAgICAgIGVkaXRhYmxlKGV2ZW50KSB7CiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5kaXNhYmxlZCA9ICFldmVudC5kZXRhaWwuZWRpdGFibGU7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goYWN0aW9ucywganNFdmVudCk7CiAgICAgIH0pOwogICAgICBzZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZXZlbnQgPT4gewogICAgICAgIGNvbnN0IGV4cG9ydFZhbHVlID0gZ2V0VmFsdWUodHJ1ZSk7CiAgICAgICAgY29uc3QgY2hhbmdlID0gZ2V0VmFsdWUoZmFsc2UpOwogICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHsKICAgICAgICAgIHZhbHVlOiBleHBvcnRWYWx1ZQogICAgICAgIH0pOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goImRpc3BhdGNoZXZlbnRpbnNhbmRib3giLCB7CiAgICAgICAgICBzb3VyY2U6IHRoaXMsCiAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgaWQsCiAgICAgICAgICAgIG5hbWU6ICJLZXlzdHJva2UiLAogICAgICAgICAgICB2YWx1ZTogc2VsZWN0ZWRWYWx1ZXMsCiAgICAgICAgICAgIGNoYW5nZSwKICAgICAgICAgICAgY2hhbmdlRXg6IGV4cG9ydFZhbHVlLAogICAgICAgICAgICB3aWxsQ29tbWl0OiBmYWxzZSwKICAgICAgICAgICAgY29tbWl0S2V5OiAxLAogICAgICAgICAgICBrZXlEb3duOiBmYWxzZQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMoc2VsZWN0RWxlbWVudCwgbnVsbCwgW1siZm9jdXMiLCAiRm9jdXMiXSwgWyJibHVyIiwgIkJsdXIiXSwgWyJtb3VzZWRvd24iLCAiTW91c2UgRG93biJdLCBbIm1vdXNlZW50ZXIiLCAiTW91c2UgRW50ZXIiXSwgWyJtb3VzZWxlYXZlIiwgIk1vdXNlIEV4aXQiXSwgWyJtb3VzZXVwIiwgIk1vdXNlIFVwIl0sIFsiaW5wdXQiLCAiQWN0aW9uIl0sIFsiaW5wdXQiLCAiVmFsaWRhdGUiXV0sIGV2ZW50ID0+IGV2ZW50LnRhcmdldC52YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICBzZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwgewogICAgICAgICAgdmFsdWU6IGdldFZhbHVlKHRydWUpCiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogICAgaWYgKHRoaXMuZGF0YS5jb21ibykgewogICAgICB0aGlzLl9zZXRUZXh0U3R5bGUoc2VsZWN0RWxlbWVudCk7CiAgICB9IGVsc2Uge30KICAgIHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihzZWxlY3RFbGVtZW50KTsKICAgIHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKHNlbGVjdEVsZW1lbnQpOwogICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHNlbGVjdEVsZW1lbnQpOwogICAgcmV0dXJuIHRoaXMuY29udGFpbmVyOwogIH0KfQpjbGFzcyBQb3B1cEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQgewogIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IHsKICAgICAgZGF0YSwKICAgICAgZWxlbWVudHMsCiAgICAgIHBhcmVudAogICAgfSA9IHBhcmFtZXRlcnM7CiAgICBjb25zdCBoYXNDb21tZW50TWFuYWdlciA9ICEhcGFyZW50Ll9jb21tZW50TWFuYWdlcjsKICAgIHN1cGVyKHBhcmFtZXRlcnMsIHsKICAgICAgaXNSZW5kZXJhYmxlOiAhaGFzQ29tbWVudE1hbmFnZXIgJiYgQW5ub3RhdGlvbkVsZW1lbnQuX2hhc1BvcHVwRGF0YShkYXRhKQogICAgfSk7CiAgICB0aGlzLmVsZW1lbnRzID0gZWxlbWVudHM7CiAgICBpZiAoaGFzQ29tbWVudE1hbmFnZXIgJiYgQW5ub3RhdGlvbkVsZW1lbnQuX2hhc1BvcHVwRGF0YShkYXRhKSkgewogICAgICBjb25zdCBwb3B1cCA9IHRoaXMucG9wdXAgPSB0aGlzLiNjcmVhdGVQb3B1cCgpOwogICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHsKICAgICAgICBlbGVtZW50LnBvcHVwID0gcG9wdXA7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRoaXMucG9wdXAgPSBudWxsOwogICAgfQogIH0KICAjY3JlYXRlUG9wdXAoKSB7CiAgICByZXR1cm4gbmV3IFBvcHVwRWxlbWVudCh7CiAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXIsCiAgICAgIGNvbG9yOiB0aGlzLmRhdGEuY29sb3IsCiAgICAgIHRpdGxlT2JqOiB0aGlzLmRhdGEudGl0bGVPYmosCiAgICAgIG1vZGlmaWNhdGlvbkRhdGU6IHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlIHx8IHRoaXMuZGF0YS5jcmVhdGlvbkRhdGUsCiAgICAgIGNvbnRlbnRzT2JqOiB0aGlzLmRhdGEuY29udGVudHNPYmosCiAgICAgIHJpY2hUZXh0OiB0aGlzLmRhdGEucmljaFRleHQsCiAgICAgIHJlY3Q6IHRoaXMuZGF0YS5yZWN0LAogICAgICBwYXJlbnRSZWN0OiB0aGlzLmRhdGEucGFyZW50UmVjdCB8fCBudWxsLAogICAgICBwYXJlbnQ6IHRoaXMucGFyZW50LAogICAgICBlbGVtZW50czogdGhpcy5lbGVtZW50cywKICAgICAgb3BlbjogdGhpcy5kYXRhLm9wZW4sCiAgICAgIGNvbW1lbnRNYW5hZ2VyOiB0aGlzLnBhcmVudC5fY29tbWVudE1hbmFnZXIKICAgIH0pOwogIH0KICByZW5kZXIoKSB7CiAgICBjb25zdCB7CiAgICAgIGNvbnRhaW5lcgogICAgfSA9IHRoaXM7CiAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgicG9wdXBBbm5vdGF0aW9uIik7CiAgICBjb250YWluZXIucm9sZSA9ICJjb21tZW50IjsKICAgIGNvbnN0IHBvcHVwID0gdGhpcy5wb3B1cCA9IHRoaXMuI2NyZWF0ZVBvcHVwKCk7CiAgICBjb25zdCBlbGVtZW50SWRzID0gW107CiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5lbGVtZW50cykgewogICAgICBlbGVtZW50LnBvcHVwID0gcG9wdXA7CiAgICAgIGVsZW1lbnQuY29udGFpbmVyLmFyaWFIYXNQb3B1cCA9ICJkaWFsb2ciOwogICAgICBlbGVtZW50SWRzLnB1c2goZWxlbWVudC5kYXRhLmlkKTsKICAgICAgZWxlbWVudC5hZGRIaWdobGlnaHRBcmVhKCk7CiAgICB9CiAgICB0aGlzLmNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLCBlbGVtZW50SWRzLm1hcChpZCA9PiBgJHtBbm5vdGF0aW9uUHJlZml4fSR7aWR9YCkuam9pbigiLCIpKTsKICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICB9Cn0KY2xhc3MgUG9wdXBFbGVtZW50IHsKICAjY29tbWVudE1hbmFnZXIgPSBudWxsOwogICNib3VuZEtleURvd24gPSB0aGlzLiNrZXlEb3duLmJpbmQodGhpcyk7CiAgI2JvdW5kSGlkZSA9IHRoaXMuI2hpZGUuYmluZCh0aGlzKTsKICAjYm91bmRTaG93ID0gdGhpcy4jc2hvdy5iaW5kKHRoaXMpOwogICNib3VuZFRvZ2dsZSA9IHRoaXMuI3RvZ2dsZS5iaW5kKHRoaXMpOwogICNjb2xvciA9IG51bGw7CiAgI2NvbnRhaW5lciA9IG51bGw7CiAgI2NvbnRlbnRzT2JqID0gbnVsbDsKICAjZGF0ZU9iaiA9IG51bGw7CiAgI2VsZW1lbnRzID0gbnVsbDsKICAjcGFyZW50ID0gbnVsbDsKICAjcGFyZW50UmVjdCA9IG51bGw7CiAgI3Bpbm5lZCA9IGZhbHNlOwogICNwb3B1cCA9IG51bGw7CiAgI3BvcHVwQWJvcnRDb250cm9sbGVyID0gbnVsbDsKICAjcG9zaXRpb24gPSBudWxsOwogICNjb21tZW50QnV0dG9uID0gbnVsbDsKICAjY29tbWVudEJ1dHRvblBvc2l0aW9uID0gbnVsbDsKICAjcG9wdXBQb3NpdGlvbiA9IG51bGw7CiAgI3JlY3QgPSBudWxsOwogICNyaWNoVGV4dCA9IG51bGw7CiAgI3RpdGxlT2JqID0gbnVsbDsKICAjdXBkYXRlcyA9IG51bGw7CiAgI3dhc1Zpc2libGUgPSBmYWxzZTsKICAjZmlyc3RFbGVtZW50ID0gbnVsbDsKICAjY29tbWVudFRleHQgPSBudWxsOwogIGNvbnN0cnVjdG9yKHsKICAgIGNvbnRhaW5lciwKICAgIGNvbG9yLAogICAgZWxlbWVudHMsCiAgICB0aXRsZU9iaiwKICAgIG1vZGlmaWNhdGlvbkRhdGUsCiAgICBjb250ZW50c09iaiwKICAgIHJpY2hUZXh0LAogICAgcGFyZW50LAogICAgcmVjdCwKICAgIHBhcmVudFJlY3QsCiAgICBvcGVuLAogICAgY29tbWVudE1hbmFnZXIgPSBudWxsCiAgfSkgewogICAgdGhpcy4jY29udGFpbmVyID0gY29udGFpbmVyOwogICAgdGhpcy4jdGl0bGVPYmogPSB0aXRsZU9iajsKICAgIHRoaXMuI2NvbnRlbnRzT2JqID0gY29udGVudHNPYmo7CiAgICB0aGlzLiNyaWNoVGV4dCA9IHJpY2hUZXh0OwogICAgdGhpcy4jcGFyZW50ID0gcGFyZW50OwogICAgdGhpcy4jY29sb3IgPSBjb2xvcjsKICAgIHRoaXMuI3JlY3QgPSByZWN0OwogICAgdGhpcy4jcGFyZW50UmVjdCA9IHBhcmVudFJlY3Q7CiAgICB0aGlzLiNlbGVtZW50cyA9IGVsZW1lbnRzOwogICAgdGhpcy4jY29tbWVudE1hbmFnZXIgPSBjb21tZW50TWFuYWdlcjsKICAgIHRoaXMuI2ZpcnN0RWxlbWVudCA9IGVsZW1lbnRzWzBdOwogICAgdGhpcy4jZGF0ZU9iaiA9IFBERkRhdGVTdHJpbmcudG9EYXRlT2JqZWN0KG1vZGlmaWNhdGlvbkRhdGUpOwogICAgdGhpcy50cmlnZ2VyID0gZWxlbWVudHMuZmxhdE1hcChlID0+IGUuZ2V0RWxlbWVudHNUb1RyaWdnZXJQb3B1cCgpKTsKICAgIGlmICghY29tbWVudE1hbmFnZXIpIHsKICAgICAgdGhpcy4jYWRkRXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgdGhpcy4jY29udGFpbmVyLmhpZGRlbiA9IHRydWU7CiAgICAgIGlmIChvcGVuKSB7CiAgICAgICAgdGhpcy4jdG9nZ2xlKCk7CiAgICAgIH0KICAgIH0KICB9CiAgI2FkZEV2ZW50TGlzdGVuZXJzKCkgewogICAgaWYgKHRoaXMuI3BvcHVwQWJvcnRDb250cm9sbGVyKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI3BvcHVwQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgY29uc3QgewogICAgICBzaWduYWwKICAgIH0gPSB0aGlzLiNwb3B1cEFib3J0Q29udHJvbGxlcjsKICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLnRyaWdnZXIpIHsKICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuI2JvdW5kVG9nZ2xlLCB7CiAgICAgICAgc2lnbmFsCiAgICAgIH0pOwogICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsIHRoaXMuI2JvdW5kU2hvdywgewogICAgICAgIHNpZ25hbAogICAgICB9KTsKICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCB0aGlzLiNib3VuZEhpZGUsIHsKICAgICAgICBzaWduYWwKICAgICAgfSk7CiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgicG9wdXBUcmlnZ2VyQXJlYSIpOwogICAgfQogICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuI2VsZW1lbnRzKSB7CiAgICAgIGVsZW1lbnQuY29udGFpbmVyPy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy4jYm91bmRLZXlEb3duLCB7CiAgICAgICAgc2lnbmFsCiAgICAgIH0pOwogICAgfQogIH0KICAjc2V0Q29tbWVudEJ1dHRvblBvc2l0aW9uKCkgewogICAgY29uc3QgZWxlbWVudCA9IHRoaXMuI2VsZW1lbnRzLmZpbmQoZSA9PiBlLmhhc0NvbW1lbnRCdXR0b24pOwogICAgaWYgKCFlbGVtZW50KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI2NvbW1lbnRCdXR0b25Qb3NpdGlvbiA9IGVsZW1lbnQuX25vcm1hbGl6ZVBvaW50KGVsZW1lbnQuY29tbWVudEJ1dHRvblBvc2l0aW9uKTsKICB9CiAgcmVuZGVyQ29tbWVudEJ1dHRvbigpIHsKICAgIGlmICh0aGlzLiNjb21tZW50QnV0dG9uKSB7CiAgICAgIGlmICghdGhpcy4jY29tbWVudEJ1dHRvbi5wYXJlbnROb2RlKSB7CiAgICAgICAgdGhpcy4jZmlyc3RFbGVtZW50LmNvbnRhaW5lci5hZnRlcih0aGlzLiNjb21tZW50QnV0dG9uKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXRoaXMuI2NvbW1lbnRCdXR0b25Qb3NpdGlvbikgewogICAgICB0aGlzLiNzZXRDb21tZW50QnV0dG9uUG9zaXRpb24oKTsKICAgIH0KICAgIGlmICghdGhpcy4jY29tbWVudEJ1dHRvblBvc2l0aW9uKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgc2lnbmFsCiAgICB9ID0gdGhpcy4jcG9wdXBBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICBjb25zdCBoYXNPd25CdXR0b24gPSB0aGlzLiNmaXJzdEVsZW1lbnQuaGFzT3duQ29tbWVudEJ1dHRvbjsKICAgIGNvbnN0IHRvZ2dsZVBvcHVwID0gKCkgPT4gewogICAgICB0aGlzLiNjb21tZW50TWFuYWdlci50b2dnbGVDb21tZW50UG9wdXAodGhpcywgdHJ1ZSwgdW5kZWZpbmVkLCAhaGFzT3duQnV0dG9uKTsKICAgIH07CiAgICBjb25zdCBzaG93UG9wdXAgPSAoKSA9PiB7CiAgICAgIHRoaXMuI2NvbW1lbnRNYW5hZ2VyLnRvZ2dsZUNvbW1lbnRQb3B1cCh0aGlzLCBmYWxzZSwgdHJ1ZSwgIWhhc093bkJ1dHRvbik7CiAgICB9OwogICAgY29uc3QgaGlkZVBvcHVwID0gKCkgPT4gewogICAgICB0aGlzLiNjb21tZW50TWFuYWdlci50b2dnbGVDb21tZW50UG9wdXAodGhpcywgZmFsc2UsIGZhbHNlKTsKICAgIH07CiAgICBpZiAoIWhhc093bkJ1dHRvbikgewogICAgICBjb25zdCBidXR0b24gPSB0aGlzLiNjb21tZW50QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICAgIGJ1dHRvbi5jbGFzc05hbWUgPSAiYW5ub3RhdGlvbkNvbW1lbnRCdXR0b24iOwogICAgICBjb25zdCBwYXJlbnRDb250YWluZXIgPSB0aGlzLiNmaXJzdEVsZW1lbnQuY29udGFpbmVyOwogICAgICBidXR0b24uc3R5bGUuekluZGV4ID0gcGFyZW50Q29udGFpbmVyLnN0eWxlLnpJbmRleCArIDE7CiAgICAgIGJ1dHRvbi50YWJJbmRleCA9IDA7CiAgICAgIGJ1dHRvbi5hcmlhSGFzUG9wdXAgPSAiZGlhbG9nIjsKICAgICAgYnV0dG9uLmFyaWFDb250cm9scyA9ICJjb21tZW50UG9wdXAiOwogICAgICBidXR0b24uc2V0QXR0cmlidXRlKCJkYXRhLWwxMG4taWQiLCAicGRmanMtc2hvdy1jb21tZW50LWJ1dHRvbiIpOwogICAgICB0aGlzLiN1cGRhdGVDb2xvcigpOwogICAgICB0aGlzLiN1cGRhdGVDb21tZW50QnV0dG9uUG9zaXRpb24oKTsKICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLiNib3VuZEtleURvd24sIHsKICAgICAgICBzaWduYWwKICAgICAgfSk7CiAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRvZ2dsZVBvcHVwLCB7CiAgICAgICAgc2lnbmFsCiAgICAgIH0pOwogICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmVudGVyIiwgc2hvd1BvcHVwLCB7CiAgICAgICAgc2lnbmFsCiAgICAgIH0pOwogICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIiwgaGlkZVBvcHVwLCB7CiAgICAgICAgc2lnbmFsCiAgICAgIH0pOwogICAgICBwYXJlbnRDb250YWluZXIuYWZ0ZXIoYnV0dG9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuI2NvbW1lbnRCdXR0b24gPSB0aGlzLiNmaXJzdEVsZW1lbnQuY29udGFpbmVyOwogICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy50cmlnZ2VyKSB7CiAgICAgICAgZWxlbWVudC5hcmlhSGFzUG9wdXAgPSAiZGlhbG9nIjsKICAgICAgICBlbGVtZW50LmFyaWFDb250cm9scyA9ICJjb21tZW50UG9wdXAiOwogICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuI2JvdW5kS2V5RG93biwgewogICAgICAgICAgc2lnbmFsCiAgICAgICAgfSk7CiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRvZ2dsZVBvcHVwLCB7CiAgICAgICAgICBzaWduYWwKICAgICAgICB9KTsKICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJlbnRlciIsIHNob3dQb3B1cCwgewogICAgICAgICAgc2lnbmFsCiAgICAgICAgfSk7CiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLCBoaWRlUG9wdXAsIHsKICAgICAgICAgIHNpZ25hbAogICAgICAgIH0pOwogICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgicG9wdXBUcmlnZ2VyQXJlYSIpOwogICAgICB9CiAgICB9CiAgfQogICN1cGRhdGVDb21tZW50QnV0dG9uUG9zaXRpb24oKSB7CiAgICBpZiAodGhpcy4jZmlyc3RFbGVtZW50LmV4dHJhUG9wdXBFbGVtZW50ICYmICF0aGlzLiNmaXJzdEVsZW1lbnQuZWRpdG9yKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghdGhpcy4jY29tbWVudEJ1dHRvbikgewogICAgICB0aGlzLnJlbmRlckNvbW1lbnRCdXR0b24oKTsKICAgIH0KICAgIGNvbnN0IFt4LCB5XSA9IHRoaXMuI2NvbW1lbnRCdXR0b25Qb3NpdGlvbjsKICAgIGNvbnN0IHsKICAgICAgc3R5bGUKICAgIH0gPSB0aGlzLiNjb21tZW50QnV0dG9uOwogICAgc3R5bGUubGVmdCA9IGBjYWxjKCR7eH0lKWA7CiAgICBzdHlsZS50b3AgPSBgY2FsYygke3l9JSAtIHZhcigtLWNvbW1lbnQtYnV0dG9uLWRpbSkpYDsKICB9CiAgI3VwZGF0ZUNvbG9yKCkgewogICAgaWYgKHRoaXMuI2ZpcnN0RWxlbWVudC5leHRyYVBvcHVwRWxlbWVudCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXRoaXMuI2NvbW1lbnRCdXR0b24pIHsKICAgICAgdGhpcy5yZW5kZXJDb21tZW50QnV0dG9uKCk7CiAgICB9CiAgICB0aGlzLiNjb21tZW50QnV0dG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY29tbWVudEJ1dHRvbkNvbG9yIHx8ICIiOwogIH0KICBnZXQgY29tbWVudEJ1dHRvbkNvbG9yKCkgewogICAgY29uc3QgewogICAgICBjb2xvciwKICAgICAgb3BhY2l0eQogICAgfSA9IHRoaXMuI2ZpcnN0RWxlbWVudC5jb21tZW50RGF0YTsKICAgIGlmICghY29sb3IpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gdGhpcy4jcGFyZW50Ll9jb21tZW50TWFuYWdlci5tYWtlQ29tbWVudENvbG9yKGNvbG9yLCBvcGFjaXR5KTsKICB9CiAgZm9jdXNDb21tZW50QnV0dG9uKCkgewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHRoaXMuI2NvbW1lbnRCdXR0b24/LmZvY3VzKCk7CiAgICB9LCAwKTsKICB9CiAgZ2V0RGF0YSgpIHsKICAgIGNvbnN0IHsKICAgICAgcmljaFRleHQsCiAgICAgIGNvbG9yLAogICAgICBvcGFjaXR5LAogICAgICBjcmVhdGlvbkRhdGUsCiAgICAgIG1vZGlmaWNhdGlvbkRhdGUKICAgIH0gPSB0aGlzLiNmaXJzdEVsZW1lbnQuY29tbWVudERhdGE7CiAgICByZXR1cm4gewogICAgICBjb250ZW50c09iajogewogICAgICAgIHN0cjogdGhpcy5jb21tZW50CiAgICAgIH0sCiAgICAgIHJpY2hUZXh0LAogICAgICBjb2xvciwKICAgICAgb3BhY2l0eSwKICAgICAgY3JlYXRpb25EYXRlLAogICAgICBtb2RpZmljYXRpb25EYXRlCiAgICB9OwogIH0KICBnZXQgZWxlbWVudEJlZm9yZVBvcHVwKCkgewogICAgcmV0dXJuIHRoaXMuI2NvbW1lbnRCdXR0b247CiAgfQogIGdldCBjb21tZW50KCkgewogICAgdGhpcy4jY29tbWVudFRleHQgfHw9IHRoaXMuI2ZpcnN0RWxlbWVudC5jb21tZW50VGV4dDsKICAgIHJldHVybiB0aGlzLiNjb21tZW50VGV4dDsKICB9CiAgc2V0IGNvbW1lbnQodGV4dCkgewogICAgaWYgKHRleHQgPT09IHRoaXMuY29tbWVudCkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNmaXJzdEVsZW1lbnQuY29tbWVudFRleHQgPSB0aGlzLiNjb21tZW50VGV4dCA9IHRleHQ7CiAgfQogIGZvY3VzKCkgewogICAgdGhpcy4jZmlyc3RFbGVtZW50LmNvbnRhaW5lcj8uZm9jdXMoKTsKICB9CiAgZ2V0IHBhcmVudEJvdW5kaW5nQ2xpZW50UmVjdCgpIHsKICAgIHJldHVybiB0aGlzLiNmaXJzdEVsZW1lbnQubGF5ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgfQogIHNldENvbW1lbnRCdXR0b25TdGF0ZXMoewogICAgc2VsZWN0ZWQsCiAgICBoYXNQb3B1cAogIH0pIHsKICAgIGlmICghdGhpcy4jY29tbWVudEJ1dHRvbikgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNjb21tZW50QnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoInNlbGVjdGVkIiwgc2VsZWN0ZWQpOwogICAgdGhpcy4jY29tbWVudEJ1dHRvbi5hcmlhRXhwYW5kZWQgPSBoYXNQb3B1cDsKICB9CiAgc2V0U2VsZWN0ZWRDb21tZW50QnV0dG9uKHNlbGVjdGVkKSB7CiAgICB0aGlzLiNjb21tZW50QnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoInNlbGVjdGVkIiwgc2VsZWN0ZWQpOwogIH0KICBnZXQgY29tbWVudFBvcHVwUG9zaXRpb24oKSB7CiAgICBpZiAodGhpcy4jcG9wdXBQb3NpdGlvbikgewogICAgICByZXR1cm4gdGhpcy4jcG9wdXBQb3NpdGlvbjsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgeCwKICAgICAgeSwKICAgICAgaGVpZ2h0CiAgICB9ID0gdGhpcy4jY29tbWVudEJ1dHRvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGNvbnN0IHsKICAgICAgeDogcGFyZW50WCwKICAgICAgeTogcGFyZW50WSwKICAgICAgd2lkdGg6IHBhcmVudFdpZHRoLAogICAgICBoZWlnaHQ6IHBhcmVudEhlaWdodAogICAgfSA9IHRoaXMuI2ZpcnN0RWxlbWVudC5sYXllci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIHJldHVybiBbKHggLSBwYXJlbnRYKSAvIHBhcmVudFdpZHRoLCAoeSArIGhlaWdodCAtIHBhcmVudFkpIC8gcGFyZW50SGVpZ2h0XTsKICB9CiAgc2V0IGNvbW1lbnRQb3B1cFBvc2l0aW9uKHBvcykgewogICAgdGhpcy4jcG9wdXBQb3NpdGlvbiA9IHBvczsKICB9CiAgaGFzRGVmYXVsdFBvcHVwUG9zaXRpb24oKSB7CiAgICByZXR1cm4gdGhpcy4jcG9wdXBQb3NpdGlvbiA9PT0gbnVsbDsKICB9CiAgZ2V0IGNvbW1lbnRCdXR0b25Qb3NpdGlvbigpIHsKICAgIHJldHVybiB0aGlzLiNjb21tZW50QnV0dG9uUG9zaXRpb247CiAgfQogIGdldCBjb21tZW50QnV0dG9uV2lkdGgoKSB7CiAgICByZXR1cm4gdGhpcy4jY29tbWVudEJ1dHRvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIHRoaXMucGFyZW50Qm91bmRpbmdDbGllbnRSZWN0LndpZHRoOwogIH0KICBlZGl0Q29tbWVudChvcHRpb25zKSB7CiAgICBjb25zdCBbcG9zWCwgcG9zWV0gPSB0aGlzLiNwb3B1cFBvc2l0aW9uIHx8IHRoaXMuY29tbWVudEJ1dHRvblBvc2l0aW9uLm1hcCh4ID0+IHggLyAxMDApOwogICAgY29uc3QgcGFyZW50RGltZW5zaW9ucyA9IHRoaXMucGFyZW50Qm91bmRpbmdDbGllbnRSZWN0OwogICAgY29uc3QgewogICAgICB4OiBwYXJlbnRYLAogICAgICB5OiBwYXJlbnRZLAogICAgICB3aWR0aDogcGFyZW50V2lkdGgsCiAgICAgIGhlaWdodDogcGFyZW50SGVpZ2h0CiAgICB9ID0gcGFyZW50RGltZW5zaW9uczsKICAgIHRoaXMuI2NvbW1lbnRNYW5hZ2VyLnNob3dEaWFsb2cobnVsbCwgdGhpcywgcGFyZW50WCArIHBvc1ggKiBwYXJlbnRXaWR0aCwgcGFyZW50WSArIHBvc1kgKiBwYXJlbnRIZWlnaHQsIHsKICAgICAgLi4ub3B0aW9ucywKICAgICAgcGFyZW50RGltZW5zaW9ucwogICAgfSk7CiAgfQogIHJlbmRlcigpIHsKICAgIGlmICh0aGlzLiNwb3B1cCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBwb3B1cCA9IHRoaXMuI3BvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBwb3B1cC5jbGFzc05hbWUgPSAicG9wdXAiOwogICAgaWYgKHRoaXMuI2NvbG9yKSB7CiAgICAgIGNvbnN0IGJhc2VDb2xvciA9IHBvcHVwLnN0eWxlLm91dGxpbmVDb2xvciA9IFV0aWwubWFrZUhleENvbG9yKC4uLnRoaXMuI2NvbG9yKTsKICAgICAgcG9wdXAuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYGNvbG9yLW1peChpbiBzcmdiLCAke2Jhc2VDb2xvcn0gMzAlLCB3aGl0ZSlgOwogICAgfQogICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgaGVhZGVyLmNsYXNzTmFtZSA9ICJoZWFkZXIiOwogICAgaWYgKHRoaXMuI3RpdGxlT2JqPy5zdHIpIHsKICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgIHRpdGxlLmNsYXNzTmFtZSA9ICJ0aXRsZSI7CiAgICAgIGhlYWRlci5hcHBlbmQodGl0bGUpOwogICAgICAoewogICAgICAgIGRpcjogdGl0bGUuZGlyLAogICAgICAgIHN0cjogdGl0bGUudGV4dENvbnRlbnQKICAgICAgfSA9IHRoaXMuI3RpdGxlT2JqKTsKICAgIH0KICAgIHBvcHVwLmFwcGVuZChoZWFkZXIpOwogICAgaWYgKHRoaXMuI2RhdGVPYmopIHsKICAgICAgY29uc3QgbW9kaWZpY2F0aW9uRGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRpbWUiKTsKICAgICAgbW9kaWZpY2F0aW9uRGF0ZS5jbGFzc05hbWUgPSAicG9wdXBEYXRlIjsKICAgICAgbW9kaWZpY2F0aW9uRGF0ZS5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1pZCIsICJwZGZqcy1hbm5vdGF0aW9uLWRhdGUtdGltZS1zdHJpbmciKTsKICAgICAgbW9kaWZpY2F0aW9uRGF0ZS5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1hcmdzIiwgSlNPTi5zdHJpbmdpZnkoewogICAgICAgIGRhdGVPYmo6IHRoaXMuI2RhdGVPYmoudmFsdWVPZigpCiAgICAgIH0pKTsKICAgICAgbW9kaWZpY2F0aW9uRGF0ZS5kYXRlVGltZSA9IHRoaXMuI2RhdGVPYmoudG9JU09TdHJpbmcoKTsKICAgICAgaGVhZGVyLmFwcGVuZChtb2RpZmljYXRpb25EYXRlKTsKICAgIH0KICAgIHJlbmRlclJpY2hUZXh0KHsKICAgICAgaHRtbDogdGhpcy4jaHRtbCB8fCB0aGlzLiNjb250ZW50c09iai5zdHIsCiAgICAgIGRpcjogdGhpcy4jY29udGVudHNPYmo/LmRpciwKICAgICAgY2xhc3NOYW1lOiAicG9wdXBDb250ZW50IgogICAgfSwgcG9wdXApOwogICAgdGhpcy4jY29udGFpbmVyLmFwcGVuZChwb3B1cCk7CiAgfQogIGdldCAjaHRtbCgpIHsKICAgIGNvbnN0IHJpY2hUZXh0ID0gdGhpcy4jcmljaFRleHQ7CiAgICBjb25zdCBjb250ZW50c09iaiA9IHRoaXMuI2NvbnRlbnRzT2JqOwogICAgaWYgKHJpY2hUZXh0Py5zdHIgJiYgKCFjb250ZW50c09iaj8uc3RyIHx8IGNvbnRlbnRzT2JqLnN0ciA9PT0gcmljaFRleHQuc3RyKSkgewogICAgICByZXR1cm4gdGhpcy4jcmljaFRleHQuaHRtbCB8fCBudWxsOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGdldCAjZm9udFNpemUoKSB7CiAgICByZXR1cm4gdGhpcy4jaHRtbD8uYXR0cmlidXRlcz8uc3R5bGU/LmZvbnRTaXplIHx8IDA7CiAgfQogIGdldCAjZm9udENvbG9yKCkgewogICAgcmV0dXJuIHRoaXMuI2h0bWw/LmF0dHJpYnV0ZXM/LnN0eWxlPy5jb2xvciB8fCBudWxsOwogIH0KICAjbWFrZVBvcHVwQ29udGVudCh0ZXh0KSB7CiAgICBjb25zdCBwb3B1cExpbmVzID0gW107CiAgICBjb25zdCBwb3B1cENvbnRlbnQgPSB7CiAgICAgIHN0cjogdGV4dCwKICAgICAgaHRtbDogewogICAgICAgIG5hbWU6ICJkaXYiLAogICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgIGRpcjogImF1dG8iCiAgICAgICAgfSwKICAgICAgICBjaGlsZHJlbjogW3sKICAgICAgICAgIG5hbWU6ICJwIiwKICAgICAgICAgIGNoaWxkcmVuOiBwb3B1cExpbmVzCiAgICAgICAgfV0KICAgICAgfQogICAgfTsKICAgIGNvbnN0IGxpbmVBdHRyaWJ1dGVzID0gewogICAgICBzdHlsZTogewogICAgICAgIGNvbG9yOiB0aGlzLiNmb250Q29sb3IsCiAgICAgICAgZm9udFNpemU6IHRoaXMuI2ZvbnRTaXplID8gYGNhbGMoJHt0aGlzLiNmb250U2l6ZX1weCAqIHZhcigtLXRvdGFsLXNjYWxlLWZhY3RvcikpYCA6ICIiCiAgICAgIH0KICAgIH07CiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGV4dC5zcGxpdCgiXG4iKSkgewogICAgICBwb3B1cExpbmVzLnB1c2goewogICAgICAgIG5hbWU6ICJzcGFuIiwKICAgICAgICB2YWx1ZTogbGluZSwKICAgICAgICBhdHRyaWJ1dGVzOiBsaW5lQXR0cmlidXRlcwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBwb3B1cENvbnRlbnQ7CiAgfQogICNrZXlEb3duKGV2ZW50KSB7CiAgICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZXZlbnQua2V5ID09PSAiRW50ZXIiIHx8IGV2ZW50LmtleSA9PT0gIkVzY2FwZSIgJiYgdGhpcy4jcGlubmVkKSB7CiAgICAgIHRoaXMuI3RvZ2dsZSgpOwogICAgfQogIH0KICB1cGRhdGVFZGl0ZWQoewogICAgcmVjdCwKICAgIHBvcHVwLAogICAgZGVsZXRlZAogIH0pIHsKICAgIGlmICh0aGlzLiNjb21tZW50TWFuYWdlcikgewogICAgICBpZiAoZGVsZXRlZCkgewogICAgICAgIHRoaXMucmVtb3ZlKCk7CiAgICAgICAgdGhpcy4jY29tbWVudFRleHQgPSBudWxsOwogICAgICB9IGVsc2UgaWYgKHBvcHVwKSB7CiAgICAgICAgaWYgKHBvcHVwLmRlbGV0ZWQpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuI3VwZGF0ZUNvbG9yKCk7CiAgICAgICAgICB0aGlzLiNjb21tZW50VGV4dCA9IHBvcHVwLnRleHQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChyZWN0KSB7CiAgICAgICAgdGhpcy4jY29tbWVudEJ1dHRvblBvc2l0aW9uID0gbnVsbDsKICAgICAgICB0aGlzLiNzZXRDb21tZW50QnV0dG9uUG9zaXRpb24oKTsKICAgICAgICB0aGlzLiN1cGRhdGVDb21tZW50QnV0dG9uUG9zaXRpb24oKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZGVsZXRlZCB8fCBwb3B1cD8uZGVsZXRlZCkgewogICAgICB0aGlzLnJlbW92ZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNhZGRFdmVudExpc3RlbmVycygpOwogICAgdGhpcy4jdXBkYXRlcyB8fD0gewogICAgICBjb250ZW50c09iajogdGhpcy4jY29udGVudHNPYmosCiAgICAgIHJpY2hUZXh0OiB0aGlzLiNyaWNoVGV4dAogICAgfTsKICAgIGlmIChyZWN0KSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uID0gbnVsbDsKICAgIH0KICAgIGlmIChwb3B1cCAmJiBwb3B1cC50ZXh0KSB7CiAgICAgIHRoaXMuI3JpY2hUZXh0ID0gdGhpcy4jbWFrZVBvcHVwQ29udGVudChwb3B1cC50ZXh0KTsKICAgICAgdGhpcy4jZGF0ZU9iaiA9IFBERkRhdGVTdHJpbmcudG9EYXRlT2JqZWN0KHBvcHVwLmRhdGUpOwogICAgICB0aGlzLiNjb250ZW50c09iaiA9IG51bGw7CiAgICB9CiAgICB0aGlzLiNwb3B1cD8ucmVtb3ZlKCk7CiAgICB0aGlzLiNwb3B1cCA9IG51bGw7CiAgfQogIHJlc2V0RWRpdGVkKCkgewogICAgaWYgKCF0aGlzLiN1cGRhdGVzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgICh7CiAgICAgIGNvbnRlbnRzT2JqOiB0aGlzLiNjb250ZW50c09iaiwKICAgICAgcmljaFRleHQ6IHRoaXMuI3JpY2hUZXh0CiAgICB9ID0gdGhpcy4jdXBkYXRlcyk7CiAgICB0aGlzLiN1cGRhdGVzID0gbnVsbDsKICAgIHRoaXMuI3BvcHVwPy5yZW1vdmUoKTsKICAgIHRoaXMuI3BvcHVwID0gbnVsbDsKICAgIHRoaXMuI3Bvc2l0aW9uID0gbnVsbDsKICB9CiAgcmVtb3ZlKCkgewogICAgdGhpcy4jcG9wdXBBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7CiAgICB0aGlzLiNwb3B1cEFib3J0Q29udHJvbGxlciA9IG51bGw7CiAgICB0aGlzLiNwb3B1cD8ucmVtb3ZlKCk7CiAgICB0aGlzLiNwb3B1cCA9IG51bGw7CiAgICB0aGlzLiN3YXNWaXNpYmxlID0gZmFsc2U7CiAgICB0aGlzLiNwaW5uZWQgPSBmYWxzZTsKICAgIHRoaXMuI2NvbW1lbnRCdXR0b24/LnJlbW92ZSgpOwogICAgdGhpcy4jY29tbWVudEJ1dHRvbiA9IG51bGw7CiAgICBpZiAodGhpcy50cmlnZ2VyKSB7CiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLnRyaWdnZXIpIHsKICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoInBvcHVwVHJpZ2dlckFyZWEiKTsKICAgICAgfQogICAgfQogIH0KICAjc2V0UG9zaXRpb24oKSB7CiAgICBpZiAodGhpcy4jcG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgewogICAgICBwYWdlOiB7CiAgICAgICAgdmlldwogICAgICB9LAogICAgICB2aWV3cG9ydDogewogICAgICAgIHJhd0RpbXM6IHsKICAgICAgICAgIHBhZ2VXaWR0aCwKICAgICAgICAgIHBhZ2VIZWlnaHQsCiAgICAgICAgICBwYWdlWCwKICAgICAgICAgIHBhZ2VZCiAgICAgICAgfQogICAgICB9CiAgICB9ID0gdGhpcy4jcGFyZW50OwogICAgbGV0IHVzZVBhcmVudFJlY3QgPSAhIXRoaXMuI3BhcmVudFJlY3Q7CiAgICBsZXQgcmVjdCA9IHVzZVBhcmVudFJlY3QgPyB0aGlzLiNwYXJlbnRSZWN0IDogdGhpcy4jcmVjdDsKICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLiNlbGVtZW50cykgewogICAgICBpZiAoIXJlY3QgfHwgVXRpbC5pbnRlcnNlY3QoZWxlbWVudC5kYXRhLnJlY3QsIHJlY3QpICE9PSBudWxsKSB7CiAgICAgICAgcmVjdCA9IGVsZW1lbnQuZGF0YS5yZWN0OwogICAgICAgIHVzZVBhcmVudFJlY3QgPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBjb25zdCBub3JtYWxpemVkUmVjdCA9IFV0aWwubm9ybWFsaXplUmVjdChbcmVjdFswXSwgdmlld1szXSAtIHJlY3RbMV0gKyB2aWV3WzFdLCByZWN0WzJdLCB2aWV3WzNdIC0gcmVjdFszXSArIHZpZXdbMV1dKTsKICAgIGNvbnN0IEhPUklaT05UQUxfU1BBQ0VfQUZURVJfQU5OT1RBVElPTiA9IDU7CiAgICBjb25zdCBwYXJlbnRXaWR0aCA9IHVzZVBhcmVudFJlY3QgPyByZWN0WzJdIC0gcmVjdFswXSArIEhPUklaT05UQUxfU1BBQ0VfQUZURVJfQU5OT1RBVElPTiA6IDA7CiAgICBjb25zdCBwb3B1cExlZnQgPSBub3JtYWxpemVkUmVjdFswXSArIHBhcmVudFdpZHRoOwogICAgY29uc3QgcG9wdXBUb3AgPSBub3JtYWxpemVkUmVjdFsxXTsKICAgIHRoaXMuI3Bvc2l0aW9uID0gWzEwMCAqIChwb3B1cExlZnQgLSBwYWdlWCkgLyBwYWdlV2lkdGgsIDEwMCAqIChwb3B1cFRvcCAtIHBhZ2VZKSAvIHBhZ2VIZWlnaHRdOwogICAgY29uc3QgewogICAgICBzdHlsZQogICAgfSA9IHRoaXMuI2NvbnRhaW5lcjsKICAgIHN0eWxlLmxlZnQgPSBgJHt0aGlzLiNwb3NpdGlvblswXX0lYDsKICAgIHN0eWxlLnRvcCA9IGAke3RoaXMuI3Bvc2l0aW9uWzFdfSVgOwogIH0KICAjdG9nZ2xlKCkgewogICAgaWYgKHRoaXMuI2NvbW1lbnRNYW5hZ2VyKSB7CiAgICAgIHRoaXMuI2NvbW1lbnRNYW5hZ2VyLnRvZ2dsZUNvbW1lbnRQb3B1cCh0aGlzLCBmYWxzZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI3Bpbm5lZCA9ICF0aGlzLiNwaW5uZWQ7CiAgICBpZiAodGhpcy4jcGlubmVkKSB7CiAgICAgIHRoaXMuI3Nob3coKTsKICAgICAgdGhpcy4jY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy4jYm91bmRUb2dnbGUpOwogICAgICB0aGlzLiNjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuI2JvdW5kS2V5RG93bik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLiNoaWRlKCk7CiAgICAgIHRoaXMuI2NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuI2JvdW5kVG9nZ2xlKTsKICAgICAgdGhpcy4jY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLiNib3VuZEtleURvd24pOwogICAgfQogIH0KICAjc2hvdygpIHsKICAgIGlmICghdGhpcy4jcG9wdXApIHsKICAgICAgdGhpcy5yZW5kZXIoKTsKICAgIH0KICAgIGlmICghdGhpcy5pc1Zpc2libGUpIHsKICAgICAgdGhpcy4jc2V0UG9zaXRpb24oKTsKICAgICAgdGhpcy4jY29udGFpbmVyLmhpZGRlbiA9IGZhbHNlOwogICAgICB0aGlzLiNjb250YWluZXIuc3R5bGUuekluZGV4ID0gcGFyc2VJbnQodGhpcy4jY29udGFpbmVyLnN0eWxlLnpJbmRleCkgKyAxMDAwOwogICAgfSBlbHNlIGlmICh0aGlzLiNwaW5uZWQpIHsKICAgICAgdGhpcy4jY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImZvY3VzZWQiKTsKICAgIH0KICB9CiAgI2hpZGUoKSB7CiAgICB0aGlzLiNjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpOwogICAgaWYgKHRoaXMuI3Bpbm5lZCB8fCAhdGhpcy5pc1Zpc2libGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jY29udGFpbmVyLmhpZGRlbiA9IHRydWU7CiAgICB0aGlzLiNjb250YWluZXIuc3R5bGUuekluZGV4ID0gcGFyc2VJbnQodGhpcy4jY29udGFpbmVyLnN0eWxlLnpJbmRleCkgLSAxMDAwOwogIH0KICBmb3JjZUhpZGUoKSB7CiAgICB0aGlzLiN3YXNWaXNpYmxlID0gdGhpcy5pc1Zpc2libGU7CiAgICBpZiAoIXRoaXMuI3dhc1Zpc2libGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jY29udGFpbmVyLmhpZGRlbiA9IHRydWU7CiAgfQogIG1heWJlU2hvdygpIHsKICAgIGlmICh0aGlzLiNjb21tZW50TWFuYWdlcikgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNhZGRFdmVudExpc3RlbmVycygpOwogICAgaWYgKCF0aGlzLiN3YXNWaXNpYmxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghdGhpcy4jcG9wdXApIHsKICAgICAgdGhpcy4jc2hvdygpOwogICAgfQogICAgdGhpcy4jd2FzVmlzaWJsZSA9IGZhbHNlOwogICAgdGhpcy4jY29udGFpbmVyLmhpZGRlbiA9IGZhbHNlOwogIH0KICBnZXQgaXNWaXNpYmxlKCkgewogICAgaWYgKHRoaXMuI2NvbW1lbnRNYW5hZ2VyKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0aGlzLiNjb250YWluZXIuaGlkZGVuID09PSBmYWxzZTsKICB9Cn0KY2xhc3MgRnJlZVRleHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHsKICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7CiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7CiAgICAgIGlzUmVuZGVyYWJsZTogdHJ1ZSwKICAgICAgaWdub3JlQm9yZGVyOiB0cnVlCiAgICB9KTsKICAgIHRoaXMudGV4dENvbnRlbnQgPSBwYXJhbWV0ZXJzLmRhdGEudGV4dENvbnRlbnQ7CiAgICB0aGlzLnRleHRQb3NpdGlvbiA9IHBhcmFtZXRlcnMuZGF0YS50ZXh0UG9zaXRpb247CiAgICB0aGlzLmFubm90YXRpb25FZGl0b3JUeXBlID0gQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ7CiAgfQogIHJlbmRlcigpIHsKICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImZyZWVUZXh0QW5ub3RhdGlvbiIpOwogICAgaWYgKHRoaXMudGV4dENvbnRlbnQpIHsKICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgY29udGVudC5jbGFzc0xpc3QuYWRkKCJhbm5vdGF0aW9uVGV4dENvbnRlbnQiKTsKICAgICAgY29udGVudC5zZXRBdHRyaWJ1dGUoInJvbGUiLCAiY29tbWVudCIpOwogICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGhpcy50ZXh0Q29udGVudCkgewogICAgICAgIGNvbnN0IGxpbmVTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgIGxpbmVTcGFuLnRleHRDb250ZW50ID0gbGluZTsKICAgICAgICBjb250ZW50LmFwcGVuZChsaW5lU3Bhbik7CiAgICAgIH0KICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kKGNvbnRlbnQpOwogICAgfQogICAgaWYgKCF0aGlzLmRhdGEucG9wdXBSZWYgJiYgdGhpcy5oYXNQb3B1cERhdGEpIHsKICAgICAgdGhpcy5oYXNPd25Db21tZW50QnV0dG9uID0gdHJ1ZTsKICAgICAgdGhpcy5fY3JlYXRlUG9wdXAoKTsKICAgIH0KICAgIHRoaXMuX2VkaXRPbkRvdWJsZUNsaWNrKCk7CiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgfQp9CmNsYXNzIExpbmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHsKICAjbGluZSA9IG51bGw7CiAgY29uc3RydWN0b3IocGFyYW1ldGVycykgewogICAgc3VwZXIocGFyYW1ldGVycywgewogICAgICBpc1JlbmRlcmFibGU6IHRydWUsCiAgICAgIGlnbm9yZUJvcmRlcjogdHJ1ZQogICAgfSk7CiAgfQogIHJlbmRlcigpIHsKICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImxpbmVBbm5vdGF0aW9uIik7CiAgICBjb25zdCB7CiAgICAgIGRhdGEsCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQKICAgIH0gPSB0aGlzOwogICAgY29uc3Qgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKICAgIGNvbnN0IGxpbmUgPSB0aGlzLiNsaW5lID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpsaW5lIik7CiAgICBsaW5lLnNldEF0dHJpYnV0ZSgieDEiLCBkYXRhLnJlY3RbMl0gLSBkYXRhLmxpbmVDb29yZGluYXRlc1swXSk7CiAgICBsaW5lLnNldEF0dHJpYnV0ZSgieTEiLCBkYXRhLnJlY3RbM10gLSBkYXRhLmxpbmVDb29yZGluYXRlc1sxXSk7CiAgICBsaW5lLnNldEF0dHJpYnV0ZSgieDIiLCBkYXRhLnJlY3RbMl0gLSBkYXRhLmxpbmVDb29yZGluYXRlc1syXSk7CiAgICBsaW5lLnNldEF0dHJpYnV0ZSgieTIiLCBkYXRhLnJlY3RbM10gLSBkYXRhLmxpbmVDb29yZGluYXRlc1szXSk7CiAgICBsaW5lLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIiwgZGF0YS5ib3JkZXJTdHlsZS53aWR0aCB8fCAxKTsKICAgIGxpbmUuc2V0QXR0cmlidXRlKCJzdHJva2UiLCAidHJhbnNwYXJlbnQiKTsKICAgIGxpbmUuc2V0QXR0cmlidXRlKCJmaWxsIiwgInRyYW5zcGFyZW50Iik7CiAgICBzdmcuYXBwZW5kKGxpbmUpOwogICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHN2Zyk7CiAgICBpZiAoIWRhdGEucG9wdXBSZWYgJiYgdGhpcy5oYXNQb3B1cERhdGEpIHsKICAgICAgdGhpcy5oYXNPd25Db21tZW50QnV0dG9uID0gdHJ1ZTsKICAgICAgdGhpcy5fY3JlYXRlUG9wdXAoKTsKICAgIH0KICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICB9CiAgZ2V0RWxlbWVudHNUb1RyaWdnZXJQb3B1cCgpIHsKICAgIHJldHVybiB0aGlzLiNsaW5lOwogIH0KICBhZGRIaWdobGlnaHRBcmVhKCkgewogICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGlnaGxpZ2h0QXJlYSIpOwogIH0KfQpjbGFzcyBTcXVhcmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHsKICAjc3F1YXJlID0gbnVsbDsKICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7CiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7CiAgICAgIGlzUmVuZGVyYWJsZTogdHJ1ZSwKICAgICAgaWdub3JlQm9yZGVyOiB0cnVlCiAgICB9KTsKICB9CiAgcmVuZGVyKCkgewogICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgic3F1YXJlQW5ub3RhdGlvbiIpOwogICAgY29uc3QgewogICAgICBkYXRhLAogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0CiAgICB9ID0gdGhpczsKICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCwgdHJ1ZSk7CiAgICBjb25zdCBib3JkZXJXaWR0aCA9IGRhdGEuYm9yZGVyU3R5bGUud2lkdGg7CiAgICBjb25zdCBzcXVhcmUgPSB0aGlzLiNzcXVhcmUgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOnJlY3QiKTsKICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoIngiLCBib3JkZXJXaWR0aCAvIDIpOwogICAgc3F1YXJlLnNldEF0dHJpYnV0ZSgieSIsIGJvcmRlcldpZHRoIC8gMik7CiAgICBzcXVhcmUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIHdpZHRoIC0gYm9yZGVyV2lkdGgpOwogICAgc3F1YXJlLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwgaGVpZ2h0IC0gYm9yZGVyV2lkdGgpOwogICAgc3F1YXJlLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIiwgYm9yZGVyV2lkdGggfHwgMSk7CiAgICBzcXVhcmUuc2V0QXR0cmlidXRlKCJzdHJva2UiLCAidHJhbnNwYXJlbnQiKTsKICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoImZpbGwiLCAidHJhbnNwYXJlbnQiKTsKICAgIHN2Zy5hcHBlbmQoc3F1YXJlKTsKICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpOwogICAgaWYgKCFkYXRhLnBvcHVwUmVmICYmIHRoaXMuaGFzUG9wdXBEYXRhKSB7CiAgICAgIHRoaXMuaGFzT3duQ29tbWVudEJ1dHRvbiA9IHRydWU7CiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKCk7CiAgICB9CiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgfQogIGdldEVsZW1lbnRzVG9UcmlnZ2VyUG9wdXAoKSB7CiAgICByZXR1cm4gdGhpcy4jc3F1YXJlOwogIH0KICBhZGRIaWdobGlnaHRBcmVhKCkgewogICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGlnaGxpZ2h0QXJlYSIpOwogIH0KfQpjbGFzcyBDaXJjbGVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHsKICAjY2lyY2xlID0gbnVsbDsKICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7CiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7CiAgICAgIGlzUmVuZGVyYWJsZTogdHJ1ZSwKICAgICAgaWdub3JlQm9yZGVyOiB0cnVlCiAgICB9KTsKICB9CiAgcmVuZGVyKCkgewogICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiY2lyY2xlQW5ub3RhdGlvbiIpOwogICAgY29uc3QgewogICAgICBkYXRhLAogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0CiAgICB9ID0gdGhpczsKICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCwgdHJ1ZSk7CiAgICBjb25zdCBib3JkZXJXaWR0aCA9IGRhdGEuYm9yZGVyU3R5bGUud2lkdGg7CiAgICBjb25zdCBjaXJjbGUgPSB0aGlzLiNjaXJjbGUgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmVsbGlwc2UiKTsKICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoImN4Iiwgd2lkdGggLyAyKTsKICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoImN5IiwgaGVpZ2h0IC8gMik7CiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCJyeCIsIHdpZHRoIC8gMiAtIGJvcmRlcldpZHRoIC8gMik7CiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCJyeSIsIGhlaWdodCAvIDIgLSBib3JkZXJXaWR0aCAvIDIpOwogICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIiwgYm9yZGVyV2lkdGggfHwgMSk7CiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCJzdHJva2UiLCAidHJhbnNwYXJlbnQiKTsKICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoImZpbGwiLCAidHJhbnNwYXJlbnQiKTsKICAgIHN2Zy5hcHBlbmQoY2lyY2xlKTsKICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpOwogICAgaWYgKCFkYXRhLnBvcHVwUmVmICYmIHRoaXMuaGFzUG9wdXBEYXRhKSB7CiAgICAgIHRoaXMuaGFzT3duQ29tbWVudEJ1dHRvbiA9IHRydWU7CiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKCk7CiAgICB9CiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgfQogIGdldEVsZW1lbnRzVG9UcmlnZ2VyUG9wdXAoKSB7CiAgICByZXR1cm4gdGhpcy4jY2lyY2xlOwogIH0KICBhZGRIaWdobGlnaHRBcmVhKCkgewogICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGlnaGxpZ2h0QXJlYSIpOwogIH0KfQpjbGFzcyBQb2x5bGluZUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQgewogICNwb2x5bGluZSA9IG51bGw7CiAgY29uc3RydWN0b3IocGFyYW1ldGVycykgewogICAgc3VwZXIocGFyYW1ldGVycywgewogICAgICBpc1JlbmRlcmFibGU6IHRydWUsCiAgICAgIGlnbm9yZUJvcmRlcjogdHJ1ZQogICAgfSk7CiAgICB0aGlzLmNvbnRhaW5lckNsYXNzTmFtZSA9ICJwb2x5bGluZUFubm90YXRpb24iOwogICAgdGhpcy5zdmdFbGVtZW50TmFtZSA9ICJzdmc6cG9seWxpbmUiOwogIH0KICByZW5kZXIoKSB7CiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lKTsKICAgIGNvbnN0IHsKICAgICAgZGF0YTogewogICAgICAgIHJlY3QsCiAgICAgICAgdmVydGljZXMsCiAgICAgICAgYm9yZGVyU3R5bGUsCiAgICAgICAgcG9wdXBSZWYKICAgICAgfSwKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfSA9IHRoaXM7CiAgICBpZiAoIXZlcnRpY2VzKSB7CiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICAgIH0KICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCwgdHJ1ZSk7CiAgICBsZXQgcG9pbnRzID0gW107CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7CiAgICAgIGNvbnN0IHggPSB2ZXJ0aWNlc1tpXSAtIHJlY3RbMF07CiAgICAgIGNvbnN0IHkgPSByZWN0WzNdIC0gdmVydGljZXNbaSArIDFdOwogICAgICBwb2ludHMucHVzaChgJHt4fSwke3l9YCk7CiAgICB9CiAgICBwb2ludHMgPSBwb2ludHMuam9pbigiICIpOwogICAgY29uc3QgcG9seWxpbmUgPSB0aGlzLiNwb2x5bGluZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KHRoaXMuc3ZnRWxlbWVudE5hbWUpOwogICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKCJwb2ludHMiLCBwb2ludHMpOwogICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCBib3JkZXJTdHlsZS53aWR0aCB8fCAxKTsKICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwgInRyYW5zcGFyZW50Iik7CiAgICBwb2x5bGluZS5zZXRBdHRyaWJ1dGUoImZpbGwiLCAidHJhbnNwYXJlbnQiKTsKICAgIHN2Zy5hcHBlbmQocG9seWxpbmUpOwogICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHN2Zyk7CiAgICBpZiAoIXBvcHVwUmVmICYmIHRoaXMuaGFzUG9wdXBEYXRhKSB7CiAgICAgIHRoaXMuaGFzT3duQ29tbWVudEJ1dHRvbiA9IHRydWU7CiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKCk7CiAgICB9CiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgfQogIGdldEVsZW1lbnRzVG9UcmlnZ2VyUG9wdXAoKSB7CiAgICByZXR1cm4gdGhpcy4jcG9seWxpbmU7CiAgfQogIGFkZEhpZ2hsaWdodEFyZWEoKSB7CiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJoaWdobGlnaHRBcmVhIik7CiAgfQp9CmNsYXNzIFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQgewogIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHsKICAgIHN1cGVyKHBhcmFtZXRlcnMpOwogICAgdGhpcy5jb250YWluZXJDbGFzc05hbWUgPSAicG9seWdvbkFubm90YXRpb24iOwogICAgdGhpcy5zdmdFbGVtZW50TmFtZSA9ICJzdmc6cG9seWdvbiI7CiAgfQp9CmNsYXNzIENhcmV0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7CiAgY29uc3RydWN0b3IocGFyYW1ldGVycykgewogICAgc3VwZXIocGFyYW1ldGVycywgewogICAgICBpc1JlbmRlcmFibGU6IHRydWUsCiAgICAgIGlnbm9yZUJvcmRlcjogdHJ1ZQogICAgfSk7CiAgfQogIHJlbmRlcigpIHsKICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImNhcmV0QW5ub3RhdGlvbiIpOwogICAgaWYgKCF0aGlzLmRhdGEucG9wdXBSZWYgJiYgdGhpcy5oYXNQb3B1cERhdGEpIHsKICAgICAgdGhpcy5oYXNPd25Db21tZW50QnV0dG9uID0gdHJ1ZTsKICAgICAgdGhpcy5fY3JlYXRlUG9wdXAoKTsKICAgIH0KICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICB9Cn0KY2xhc3MgSW5rQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7CiAgI3BvbHlsaW5lc0dyb3VwRWxlbWVudCA9IG51bGw7CiAgI3BvbHlsaW5lcyA9IFtdOwogIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHsKICAgIHN1cGVyKHBhcmFtZXRlcnMsIHsKICAgICAgaXNSZW5kZXJhYmxlOiB0cnVlLAogICAgICBpZ25vcmVCb3JkZXI6IHRydWUKICAgIH0pOwogICAgdGhpcy5jb250YWluZXJDbGFzc05hbWUgPSAiaW5rQW5ub3RhdGlvbiI7CiAgICB0aGlzLnN2Z0VsZW1lbnROYW1lID0gInN2Zzpwb2x5bGluZSI7CiAgICB0aGlzLmFubm90YXRpb25FZGl0b3JUeXBlID0gdGhpcy5kYXRhLml0ID09PSAiSW5rSGlnaGxpZ2h0IiA/IEFubm90YXRpb25FZGl0b3JUeXBlLkhJR0hMSUdIVCA6IEFubm90YXRpb25FZGl0b3JUeXBlLklOSzsKICB9CiAgI2dldFRyYW5zZm9ybShyb3RhdGlvbiwgcmVjdCkgewogICAgc3dpdGNoIChyb3RhdGlvbikgewogICAgICBjYXNlIDkwOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0cmFuc2Zvcm06IGByb3RhdGUoOTApIHRyYW5zbGF0ZSgkey1yZWN0WzBdfSwke3JlY3RbMV19KSBzY2FsZSgxLC0xKWAsCiAgICAgICAgICB3aWR0aDogcmVjdFszXSAtIHJlY3RbMV0sCiAgICAgICAgICBoZWlnaHQ6IHJlY3RbMl0gLSByZWN0WzBdCiAgICAgICAgfTsKICAgICAgY2FzZSAxODA6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRyYW5zZm9ybTogYHJvdGF0ZSgxODApIHRyYW5zbGF0ZSgkey1yZWN0WzJdfSwke3JlY3RbMV19KSBzY2FsZSgxLC0xKWAsCiAgICAgICAgICB3aWR0aDogcmVjdFsyXSAtIHJlY3RbMF0sCiAgICAgICAgICBoZWlnaHQ6IHJlY3RbM10gLSByZWN0WzFdCiAgICAgICAgfTsKICAgICAgY2FzZSAyNzA6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRyYW5zZm9ybTogYHJvdGF0ZSgyNzApIHRyYW5zbGF0ZSgkey1yZWN0WzJdfSwke3JlY3RbM119KSBzY2FsZSgxLC0xKWAsCiAgICAgICAgICB3aWR0aDogcmVjdFszXSAtIHJlY3RbMV0sCiAgICAgICAgICBoZWlnaHQ6IHJlY3RbMl0gLSByZWN0WzBdCiAgICAgICAgfTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gewogICAgICAgICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlKCR7LXJlY3RbMF19LCR7cmVjdFszXX0pIHNjYWxlKDEsLTEpYCwKICAgICAgICAgIHdpZHRoOiByZWN0WzJdIC0gcmVjdFswXSwKICAgICAgICAgIGhlaWdodDogcmVjdFszXSAtIHJlY3RbMV0KICAgICAgICB9OwogICAgfQogIH0KICByZW5kZXIoKSB7CiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lKTsKICAgIGNvbnN0IHsKICAgICAgZGF0YTogewogICAgICAgIHJlY3QsCiAgICAgICAgcm90YXRpb24sCiAgICAgICAgaW5rTGlzdHMsCiAgICAgICAgYm9yZGVyU3R5bGUsCiAgICAgICAgcG9wdXBSZWYKICAgICAgfQogICAgfSA9IHRoaXM7CiAgICBjb25zdCB7CiAgICAgIHRyYW5zZm9ybSwKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfSA9IHRoaXMuI2dldFRyYW5zZm9ybShyb3RhdGlvbiwgcmVjdCk7CiAgICBjb25zdCBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQsIHRydWUpOwogICAgY29uc3QgZyA9IHRoaXMuI3BvbHlsaW5lc0dyb3VwRWxlbWVudCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6ZyIpOwogICAgc3ZnLmFwcGVuZChnKTsKICAgIGcuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCBib3JkZXJTdHlsZS53aWR0aCB8fCAxKTsKICAgIGcuc2V0QXR0cmlidXRlKCJzdHJva2UtbGluZWNhcCIsICJyb3VuZCIpOwogICAgZy5zZXRBdHRyaWJ1dGUoInN0cm9rZS1saW5lam9pbiIsICJyb3VuZCIpOwogICAgZy5zZXRBdHRyaWJ1dGUoInN0cm9rZS1taXRlcmxpbWl0IiwgMTApOwogICAgZy5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsICJ0cmFuc3BhcmVudCIpOwogICAgZy5zZXRBdHRyaWJ1dGUoImZpbGwiLCAidHJhbnNwYXJlbnQiKTsKICAgIGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCB0cmFuc2Zvcm0pOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gaW5rTGlzdHMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBjb25zdCBwb2x5bGluZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KHRoaXMuc3ZnRWxlbWVudE5hbWUpOwogICAgICB0aGlzLiNwb2x5bGluZXMucHVzaChwb2x5bGluZSk7CiAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgicG9pbnRzIiwgaW5rTGlzdHNbaV0uam9pbigiLCIpKTsKICAgICAgZy5hcHBlbmQocG9seWxpbmUpOwogICAgfQogICAgaWYgKCFwb3B1cFJlZiAmJiB0aGlzLmhhc1BvcHVwRGF0YSkgewogICAgICB0aGlzLmhhc093bkNvbW1lbnRCdXR0b24gPSB0cnVlOwogICAgICB0aGlzLl9jcmVhdGVQb3B1cCgpOwogICAgfQogICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHN2Zyk7CiAgICB0aGlzLl9lZGl0T25Eb3VibGVDbGljaygpOwogICAgcmV0dXJuIHRoaXMuY29udGFpbmVyOwogIH0KICB1cGRhdGVFZGl0ZWQocGFyYW1zKSB7CiAgICBzdXBlci51cGRhdGVFZGl0ZWQocGFyYW1zKTsKICAgIGNvbnN0IHsKICAgICAgdGhpY2tuZXNzLAogICAgICBwb2ludHMsCiAgICAgIHJlY3QKICAgIH0gPSBwYXJhbXM7CiAgICBjb25zdCBnID0gdGhpcy4jcG9seWxpbmVzR3JvdXBFbGVtZW50OwogICAgaWYgKHRoaWNrbmVzcyA+PSAwKSB7CiAgICAgIGcuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCB0aGlja25lc3MgfHwgMSk7CiAgICB9CiAgICBpZiAocG9pbnRzKSB7CiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHRoaXMuI3BvbHlsaW5lcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgdGhpcy4jcG9seWxpbmVzW2ldLnNldEF0dHJpYnV0ZSgicG9pbnRzIiwgcG9pbnRzW2ldLmpvaW4oIiwiKSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChyZWN0KSB7CiAgICAgIGNvbnN0IHsKICAgICAgICB0cmFuc2Zvcm0sCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0gPSB0aGlzLiNnZXRUcmFuc2Zvcm0odGhpcy5kYXRhLnJvdGF0aW9uLCByZWN0KTsKICAgICAgY29uc3Qgcm9vdCA9IGcucGFyZW50RWxlbWVudDsKICAgICAgcm9vdC5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApOwogICAgICBnLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwgdHJhbnNmb3JtKTsKICAgIH0KICB9CiAgZ2V0RWxlbWVudHNUb1RyaWdnZXJQb3B1cCgpIHsKICAgIHJldHVybiB0aGlzLiNwb2x5bGluZXM7CiAgfQogIGFkZEhpZ2hsaWdodEFyZWEoKSB7CiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJoaWdobGlnaHRBcmVhIik7CiAgfQp9CmNsYXNzIEhpZ2hsaWdodEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQgewogIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHsKICAgIHN1cGVyKHBhcmFtZXRlcnMsIHsKICAgICAgaXNSZW5kZXJhYmxlOiB0cnVlLAogICAgICBpZ25vcmVCb3JkZXI6IHRydWUsCiAgICAgIGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiB0cnVlCiAgICB9KTsKICAgIHRoaXMuYW5ub3RhdGlvbkVkaXRvclR5cGUgPSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5ISUdITElHSFQ7CiAgfQogIHJlbmRlcigpIHsKICAgIGNvbnN0IHsKICAgICAgZGF0YTogewogICAgICAgIG92ZXJsYWlkVGV4dCwKICAgICAgICBwb3B1cFJlZgogICAgICB9CiAgICB9ID0gdGhpczsKICAgIGlmICghcG9wdXBSZWYgJiYgdGhpcy5oYXNQb3B1cERhdGEpIHsKICAgICAgdGhpcy5oYXNPd25Db21tZW50QnV0dG9uID0gdHJ1ZTsKICAgICAgdGhpcy5fY3JlYXRlUG9wdXAoKTsKICAgIH0KICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhpZ2hsaWdodEFubm90YXRpb24iKTsKICAgIHRoaXMuX2VkaXRPbkRvdWJsZUNsaWNrKCk7CiAgICBpZiAob3ZlcmxhaWRUZXh0KSB7CiAgICAgIGNvbnN0IG1hcmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtYXJrIik7CiAgICAgIG1hcmsuY2xhc3NMaXN0LmFkZCgib3ZlcmxhaWRUZXh0Iik7CiAgICAgIG1hcmsudGV4dENvbnRlbnQgPSBvdmVybGFpZFRleHQ7CiAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChtYXJrKTsKICAgIH0KICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICB9Cn0KY2xhc3MgVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7CiAgY29uc3RydWN0b3IocGFyYW1ldGVycykgewogICAgc3VwZXIocGFyYW1ldGVycywgewogICAgICBpc1JlbmRlcmFibGU6IHRydWUsCiAgICAgIGlnbm9yZUJvcmRlcjogdHJ1ZSwKICAgICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHM6IHRydWUKICAgIH0pOwogIH0KICByZW5kZXIoKSB7CiAgICBjb25zdCB7CiAgICAgIGRhdGE6IHsKICAgICAgICBvdmVybGFpZFRleHQsCiAgICAgICAgcG9wdXBSZWYKICAgICAgfQogICAgfSA9IHRoaXM7CiAgICBpZiAoIXBvcHVwUmVmICYmIHRoaXMuaGFzUG9wdXBEYXRhKSB7CiAgICAgIHRoaXMuaGFzT3duQ29tbWVudEJ1dHRvbiA9IHRydWU7CiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKCk7CiAgICB9CiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJ1bmRlcmxpbmVBbm5vdGF0aW9uIik7CiAgICBpZiAob3ZlcmxhaWRUZXh0KSB7CiAgICAgIGNvbnN0IHVuZGVybGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInUiKTsKICAgICAgdW5kZXJsaW5lLmNsYXNzTGlzdC5hZGQoIm92ZXJsYWlkVGV4dCIpOwogICAgICB1bmRlcmxpbmUudGV4dENvbnRlbnQgPSBvdmVybGFpZFRleHQ7CiAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZCh1bmRlcmxpbmUpOwogICAgfQogICAgcmV0dXJuIHRoaXMuY29udGFpbmVyOwogIH0KfQpjbGFzcyBTcXVpZ2dseUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQgewogIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHsKICAgIHN1cGVyKHBhcmFtZXRlcnMsIHsKICAgICAgaXNSZW5kZXJhYmxlOiB0cnVlLAogICAgICBpZ25vcmVCb3JkZXI6IHRydWUsCiAgICAgIGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiB0cnVlCiAgICB9KTsKICB9CiAgcmVuZGVyKCkgewogICAgY29uc3QgewogICAgICBkYXRhOiB7CiAgICAgICAgb3ZlcmxhaWRUZXh0LAogICAgICAgIHBvcHVwUmVmCiAgICAgIH0KICAgIH0gPSB0aGlzOwogICAgaWYgKCFwb3B1cFJlZiAmJiB0aGlzLmhhc1BvcHVwRGF0YSkgewogICAgICB0aGlzLmhhc093bkNvbW1lbnRCdXR0b24gPSB0cnVlOwogICAgICB0aGlzLl9jcmVhdGVQb3B1cCgpOwogICAgfQogICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgic3F1aWdnbHlBbm5vdGF0aW9uIik7CiAgICBpZiAob3ZlcmxhaWRUZXh0KSB7CiAgICAgIGNvbnN0IHVuZGVybGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInUiKTsKICAgICAgdW5kZXJsaW5lLmNsYXNzTGlzdC5hZGQoIm92ZXJsYWlkVGV4dCIpOwogICAgICB1bmRlcmxpbmUudGV4dENvbnRlbnQgPSBvdmVybGFpZFRleHQ7CiAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZCh1bmRlcmxpbmUpOwogICAgfQogICAgcmV0dXJuIHRoaXMuY29udGFpbmVyOwogIH0KfQpjbGFzcyBTdHJpa2VPdXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHsKICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7CiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7CiAgICAgIGlzUmVuZGVyYWJsZTogdHJ1ZSwKICAgICAgaWdub3JlQm9yZGVyOiB0cnVlLAogICAgICBjcmVhdGVRdWFkcmlsYXRlcmFsczogdHJ1ZQogICAgfSk7CiAgfQogIHJlbmRlcigpIHsKICAgIGNvbnN0IHsKICAgICAgZGF0YTogewogICAgICAgIG92ZXJsYWlkVGV4dCwKICAgICAgICBwb3B1cFJlZgogICAgICB9CiAgICB9ID0gdGhpczsKICAgIGlmICghcG9wdXBSZWYgJiYgdGhpcy5oYXNQb3B1cERhdGEpIHsKICAgICAgdGhpcy5oYXNPd25Db21tZW50QnV0dG9uID0gdHJ1ZTsKICAgICAgdGhpcy5fY3JlYXRlUG9wdXAoKTsKICAgIH0KICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoInN0cmlrZW91dEFubm90YXRpb24iKTsKICAgIGlmIChvdmVybGFpZFRleHQpIHsKICAgICAgY29uc3Qgc3RyaWtlb3V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicyIpOwogICAgICBzdHJpa2VvdXQuY2xhc3NMaXN0LmFkZCgib3ZlcmxhaWRUZXh0Iik7CiAgICAgIHN0cmlrZW91dC50ZXh0Q29udGVudCA9IG92ZXJsYWlkVGV4dDsKICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHN0cmlrZW91dCk7CiAgICB9CiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgfQp9CmNsYXNzIFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7CiAgY29uc3RydWN0b3IocGFyYW1ldGVycykgewogICAgc3VwZXIocGFyYW1ldGVycywgewogICAgICBpc1JlbmRlcmFibGU6IHRydWUsCiAgICAgIGlnbm9yZUJvcmRlcjogdHJ1ZQogICAgfSk7CiAgICB0aGlzLmFubm90YXRpb25FZGl0b3JUeXBlID0gQW5ub3RhdGlvbkVkaXRvclR5cGUuU1RBTVA7CiAgfQogIHJlbmRlcigpIHsKICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoInN0YW1wQW5ub3RhdGlvbiIpOwogICAgdGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKCJyb2xlIiwgImltZyIpOwogICAgaWYgKCF0aGlzLmRhdGEucG9wdXBSZWYgJiYgdGhpcy5oYXNQb3B1cERhdGEpIHsKICAgICAgdGhpcy5oYXNPd25Db21tZW50QnV0dG9uID0gdHJ1ZTsKICAgICAgdGhpcy5fY3JlYXRlUG9wdXAoKTsKICAgIH0KICAgIHRoaXMuX2VkaXRPbkRvdWJsZUNsaWNrKCk7CiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgfQp9CmNsYXNzIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7CiAgI3RyaWdnZXIgPSBudWxsOwogIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHsKICAgIHN1cGVyKHBhcmFtZXRlcnMsIHsKICAgICAgaXNSZW5kZXJhYmxlOiB0cnVlCiAgICB9KTsKICAgIGNvbnN0IHsKICAgICAgZmlsZQogICAgfSA9IHRoaXMuZGF0YTsKICAgIHRoaXMuZmlsZW5hbWUgPSBmaWxlLmZpbGVuYW1lOwogICAgdGhpcy5jb250ZW50ID0gZmlsZS5jb250ZW50OwogICAgdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goImZpbGVhdHRhY2htZW50YW5ub3RhdGlvbiIsIHsKICAgICAgc291cmNlOiB0aGlzLAogICAgICAuLi5maWxlCiAgICB9KTsKICB9CiAgcmVuZGVyKCkgewogICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiZmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uIik7CiAgICBjb25zdCB7CiAgICAgIGNvbnRhaW5lciwKICAgICAgZGF0YQogICAgfSA9IHRoaXM7CiAgICBsZXQgdHJpZ2dlcjsKICAgIGlmIChkYXRhLmhhc0FwcGVhcmFuY2UgfHwgZGF0YS5maWxsQWxwaGEgPT09IDApIHsKICAgICAgdHJpZ2dlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgfSBlbHNlIHsKICAgICAgdHJpZ2dlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwogICAgICB0cmlnZ2VyLnNyYyA9IGAke3RoaXMuaW1hZ2VSZXNvdXJjZXNQYXRofWFubm90YXRpb24tJHsvcGFwZXJjbGlwL2kudGVzdChkYXRhLm5hbWUpID8gInBhcGVyY2xpcCIgOiAicHVzaHBpbiJ9LnN2Z2A7CiAgICAgIGlmIChkYXRhLmZpbGxBbHBoYSAmJiBkYXRhLmZpbGxBbHBoYSA8IDEpIHsKICAgICAgICB0cmlnZ2VyLnN0eWxlID0gYGZpbHRlcjogb3BhY2l0eSgke01hdGgucm91bmQoZGF0YS5maWxsQWxwaGEgKiAxMDApfSUpO2A7CiAgICAgIH0KICAgIH0KICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLCB0aGlzLiNkb3dubG9hZC5iaW5kKHRoaXMpKTsKICAgIHRoaXMuI3RyaWdnZXIgPSB0cmlnZ2VyOwogICAgY29uc3QgewogICAgICBpc01hYwogICAgfSA9IHV0aWxfRmVhdHVyZVRlc3QucGxhdGZvcm07CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGV2dCA9PiB7CiAgICAgIGlmIChldnQua2V5ID09PSAiRW50ZXIiICYmIChpc01hYyA/IGV2dC5tZXRhS2V5IDogZXZ0LmN0cmxLZXkpKSB7CiAgICAgICAgdGhpcy4jZG93bmxvYWQoKTsKICAgICAgfQogICAgfSk7CiAgICBpZiAoIWRhdGEucG9wdXBSZWYgJiYgdGhpcy5oYXNQb3B1cERhdGEpIHsKICAgICAgdGhpcy5oYXNPd25Db21tZW50QnV0dG9uID0gdHJ1ZTsKICAgICAgdGhpcy5fY3JlYXRlUG9wdXAoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRyaWdnZXIuY2xhc3NMaXN0LmFkZCgicG9wdXBUcmlnZ2VyQXJlYSIpOwogICAgfQogICAgY29udGFpbmVyLmFwcGVuZCh0cmlnZ2VyKTsKICAgIHJldHVybiBjb250YWluZXI7CiAgfQogIGdldEVsZW1lbnRzVG9UcmlnZ2VyUG9wdXAoKSB7CiAgICByZXR1cm4gdGhpcy4jdHJpZ2dlcjsKICB9CiAgYWRkSGlnaGxpZ2h0QXJlYSgpIHsKICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhpZ2hsaWdodEFyZWEiKTsKICB9CiAgI2Rvd25sb2FkKCkgewogICAgdGhpcy5kb3dubG9hZE1hbmFnZXI/Lm9wZW5PckRvd25sb2FkRGF0YSh0aGlzLmNvbnRlbnQsIHRoaXMuZmlsZW5hbWUpOwogIH0KfQpjbGFzcyBBbm5vdGF0aW9uTGF5ZXIgewogICNhY2Nlc3NpYmlsaXR5TWFuYWdlciA9IG51bGw7CiAgI2Fubm90YXRpb25DYW52YXNNYXAgPSBudWxsOwogICNhbm5vdGF0aW9uU3RvcmFnZSA9IG51bGw7CiAgI2VkaXRhYmxlQW5ub3RhdGlvbnMgPSBuZXcgTWFwKCk7CiAgI3N0cnVjdFRyZWVMYXllciA9IG51bGw7CiAgI2xpbmtTZXJ2aWNlID0gbnVsbDsKICAjZWxlbWVudHMgPSBbXTsKICAjaGFzQXJpYUF0dHJpYnV0ZXNGcm9tU3RydWN0VHJlZSA9IGZhbHNlOwogIGNvbnN0cnVjdG9yKHsKICAgIGRpdiwKICAgIGFjY2Vzc2liaWxpdHlNYW5hZ2VyLAogICAgYW5ub3RhdGlvbkNhbnZhc01hcCwKICAgIGFubm90YXRpb25FZGl0b3JVSU1hbmFnZXIsCiAgICBwYWdlLAogICAgdmlld3BvcnQsCiAgICBzdHJ1Y3RUcmVlTGF5ZXIsCiAgICBjb21tZW50TWFuYWdlciwKICAgIGxpbmtTZXJ2aWNlLAogICAgYW5ub3RhdGlvblN0b3JhZ2UKICB9KSB7CiAgICB0aGlzLmRpdiA9IGRpdjsKICAgIHRoaXMuI2FjY2Vzc2liaWxpdHlNYW5hZ2VyID0gYWNjZXNzaWJpbGl0eU1hbmFnZXI7CiAgICB0aGlzLiNhbm5vdGF0aW9uQ2FudmFzTWFwID0gYW5ub3RhdGlvbkNhbnZhc01hcDsKICAgIHRoaXMuI3N0cnVjdFRyZWVMYXllciA9IHN0cnVjdFRyZWVMYXllciB8fCBudWxsOwogICAgdGhpcy4jbGlua1NlcnZpY2UgPSBsaW5rU2VydmljZSB8fCBudWxsOwogICAgdGhpcy4jYW5ub3RhdGlvblN0b3JhZ2UgPSBhbm5vdGF0aW9uU3RvcmFnZSB8fCBuZXcgQW5ub3RhdGlvblN0b3JhZ2UoKTsKICAgIHRoaXMucGFnZSA9IHBhZ2U7CiAgICB0aGlzLnZpZXdwb3J0ID0gdmlld3BvcnQ7CiAgICB0aGlzLnpJbmRleCA9IDA7CiAgICB0aGlzLl9hbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyID0gYW5ub3RhdGlvbkVkaXRvclVJTWFuYWdlcjsKICAgIHRoaXMuX2NvbW1lbnRNYW5hZ2VyID0gY29tbWVudE1hbmFnZXIgfHwgbnVsbDsKICB9CiAgaGFzRWRpdGFibGVBbm5vdGF0aW9ucygpIHsKICAgIHJldHVybiB0aGlzLiNlZGl0YWJsZUFubm90YXRpb25zLnNpemUgPiAwOwogIH0KICBhc3luYyByZW5kZXIocGFyYW1zKSB7CiAgICBjb25zdCB7CiAgICAgIGFubm90YXRpb25zCiAgICB9ID0gcGFyYW1zOwogICAgY29uc3QgbGF5ZXIgPSB0aGlzLmRpdjsKICAgIHNldExheWVyRGltZW5zaW9ucyhsYXllciwgdGhpcy52aWV3cG9ydCk7CiAgICBjb25zdCBwb3B1cFRvRWxlbWVudHMgPSBuZXcgTWFwKCk7CiAgICBjb25zdCBwb3B1cEFubm90YXRpb25zID0gW107CiAgICBjb25zdCBlbGVtZW50UGFyYW1zID0gewogICAgICBkYXRhOiBudWxsLAogICAgICBsYXllciwKICAgICAgbGlua1NlcnZpY2U6IHRoaXMuI2xpbmtTZXJ2aWNlLAogICAgICBkb3dubG9hZE1hbmFnZXI6IHBhcmFtcy5kb3dubG9hZE1hbmFnZXIsCiAgICAgIGltYWdlUmVzb3VyY2VzUGF0aDogcGFyYW1zLmltYWdlUmVzb3VyY2VzUGF0aCB8fCAiIiwKICAgICAgcmVuZGVyRm9ybXM6IHBhcmFtcy5yZW5kZXJGb3JtcyAhPT0gZmFsc2UsCiAgICAgIHN2Z0ZhY3Rvcnk6IG5ldyBET01TVkdGYWN0b3J5KCksCiAgICAgIGFubm90YXRpb25TdG9yYWdlOiB0aGlzLiNhbm5vdGF0aW9uU3RvcmFnZSwKICAgICAgZW5hYmxlQ29tbWVudDogcGFyYW1zLmVuYWJsZUNvbW1lbnQgPT09IHRydWUsCiAgICAgIGVuYWJsZVNjcmlwdGluZzogcGFyYW1zLmVuYWJsZVNjcmlwdGluZyA9PT0gdHJ1ZSwKICAgICAgaGFzSlNBY3Rpb25zOiBwYXJhbXMuaGFzSlNBY3Rpb25zLAogICAgICBmaWVsZE9iamVjdHM6IHBhcmFtcy5maWVsZE9iamVjdHMsCiAgICAgIHBhcmVudDogdGhpcywKICAgICAgZWxlbWVudHM6IG51bGwKICAgIH07CiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgYW5ub3RhdGlvbnMpIHsKICAgICAgaWYgKGRhdGEubm9IVE1MKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgaXNQb3B1cEFubm90YXRpb24gPSBkYXRhLmFubm90YXRpb25UeXBlID09PSBBbm5vdGF0aW9uVHlwZS5QT1BVUDsKICAgICAgaWYgKCFpc1BvcHVwQW5ub3RhdGlvbikgewogICAgICAgIGlmIChkYXRhLnJlY3RbMl0gPT09IGRhdGEucmVjdFswXSB8fCBkYXRhLnJlY3RbM10gPT09IGRhdGEucmVjdFsxXSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGVsZW1lbnRzID0gcG9wdXBUb0VsZW1lbnRzLmdldChkYXRhLmlkKTsKICAgICAgICBpZiAoIWVsZW1lbnRzKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLl9jb21tZW50TWFuYWdlcikgewogICAgICAgICAgcG9wdXBBbm5vdGF0aW9ucy5wdXNoKGRhdGEpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGVsZW1lbnRQYXJhbXMuZWxlbWVudHMgPSBlbGVtZW50czsKICAgICAgfQogICAgICBlbGVtZW50UGFyYW1zLmRhdGEgPSBkYXRhOwogICAgICBjb25zdCBlbGVtZW50ID0gQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5LmNyZWF0ZShlbGVtZW50UGFyYW1zKTsKICAgICAgaWYgKCFlbGVtZW50LmlzUmVuZGVyYWJsZSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICghaXNQb3B1cEFubm90YXRpb24pIHsKICAgICAgICB0aGlzLiNlbGVtZW50cy5wdXNoKGVsZW1lbnQpOwogICAgICAgIGlmIChkYXRhLnBvcHVwUmVmKSB7CiAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHBvcHVwVG9FbGVtZW50cy5nZXQoZGF0YS5wb3B1cFJlZik7CiAgICAgICAgICBpZiAoIWVsZW1lbnRzKSB7CiAgICAgICAgICAgIHBvcHVwVG9FbGVtZW50cy5zZXQoZGF0YS5wb3B1cFJlZiwgW2VsZW1lbnRdKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHJlbmRlcmVkID0gZWxlbWVudC5yZW5kZXIoKTsKICAgICAgaWYgKGRhdGEuaGlkZGVuKSB7CiAgICAgICAgcmVuZGVyZWQuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICAgICB9CiAgICAgIGlmIChlbGVtZW50Ll9pc0VkaXRhYmxlKSB7CiAgICAgICAgdGhpcy4jZWRpdGFibGVBbm5vdGF0aW9ucy5zZXQoZWxlbWVudC5kYXRhLmlkLCBlbGVtZW50KTsKICAgICAgICB0aGlzLl9hbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyPy5yZW5kZXJBbm5vdGF0aW9uRWxlbWVudChlbGVtZW50KTsKICAgICAgfQogICAgfQogICAgYXdhaXQgdGhpcy4jYWRkRWxlbWVudHNUb0RPTSgpOwogICAgZm9yIChjb25zdCBkYXRhIG9mIHBvcHVwQW5ub3RhdGlvbnMpIHsKICAgICAgY29uc3QgZWxlbWVudHMgPSBlbGVtZW50UGFyYW1zLmVsZW1lbnRzID0gcG9wdXBUb0VsZW1lbnRzLmdldChkYXRhLmlkKTsKICAgICAgZWxlbWVudFBhcmFtcy5kYXRhID0gZGF0YTsKICAgICAgY29uc3QgZWxlbWVudCA9IEFubm90YXRpb25FbGVtZW50RmFjdG9yeS5jcmVhdGUoZWxlbWVudFBhcmFtcyk7CiAgICAgIGlmICghZWxlbWVudC5pc1JlbmRlcmFibGUpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBjb25zdCByZW5kZXJlZCA9IGVsZW1lbnQucmVuZGVyKCk7CiAgICAgIGVsZW1lbnQuY29udGVudEVsZW1lbnQuaWQgPSBgJHtBbm5vdGF0aW9uUHJlZml4fSR7ZGF0YS5pZH1gOwogICAgICBpZiAoZGF0YS5oaWRkZW4pIHsKICAgICAgICByZW5kZXJlZC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgIH0KICAgICAgZWxlbWVudHMuYXQoLTEpLmNvbnRhaW5lci5hZnRlcihyZW5kZXJlZCk7CiAgICB9CiAgICB0aGlzLiNzZXRBbm5vdGF0aW9uQ2FudmFzTWFwKCk7CiAgfQogIGFzeW5jICNhZGRFbGVtZW50c1RvRE9NKCkgewogICAgaWYgKHRoaXMuI2VsZW1lbnRzLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmRpdi5yZXBsYWNlQ2hpbGRyZW4oKTsKICAgIGNvbnN0IHByb21pc2VzID0gW107CiAgICBpZiAoIXRoaXMuI2hhc0FyaWFBdHRyaWJ1dGVzRnJvbVN0cnVjdFRyZWUpIHsKICAgICAgdGhpcy4jaGFzQXJpYUF0dHJpYnV0ZXNGcm9tU3RydWN0VHJlZSA9IHRydWU7CiAgICAgIGZvciAoY29uc3QgewogICAgICAgIGNvbnRlbnRFbGVtZW50LAogICAgICAgIGRhdGE6IHsKICAgICAgICAgIGlkCiAgICAgICAgfQogICAgICB9IG9mIHRoaXMuI2VsZW1lbnRzKSB7CiAgICAgICAgY29uc3QgYW5ub3RhdGlvbklkID0gY29udGVudEVsZW1lbnQuaWQgPSBgJHtBbm5vdGF0aW9uUHJlZml4fSR7aWR9YDsKICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuI3N0cnVjdFRyZWVMYXllcj8uZ2V0QXJpYUF0dHJpYnV0ZXMoYW5ub3RhdGlvbklkKS50aGVuKGFyaWFBdHRyaWJ1dGVzID0+IHsKICAgICAgICAgIGlmIChhcmlhQXR0cmlidXRlcykgewogICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBhcmlhQXR0cmlidXRlcykgewogICAgICAgICAgICAgIGNvbnRlbnRFbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pKTsKICAgICAgfQogICAgfQogICAgdGhpcy4jZWxlbWVudHMuc29ydCgoewogICAgICBkYXRhOiB7CiAgICAgICAgcmVjdDogW2EwLCBhMSwgYTIsIGEzXQogICAgICB9CiAgICB9LCB7CiAgICAgIGRhdGE6IHsKICAgICAgICByZWN0OiBbYjAsIGIxLCBiMiwgYjNdCiAgICAgIH0KICAgIH0pID0+IHsKICAgICAgaWYgKGEwID09PSBhMiAmJiBhMSA9PT0gYTMpIHsKICAgICAgICByZXR1cm4gKzE7CiAgICAgIH0KICAgICAgaWYgKGIwID09PSBiMiAmJiBiMSA9PT0gYjMpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgY29uc3QgdG9wMSA9IGEzOwogICAgICBjb25zdCBib3QxID0gYTE7CiAgICAgIGNvbnN0IG1pZDEgPSAoYTEgKyBhMykgLyAyOwogICAgICBjb25zdCB0b3AyID0gYjM7CiAgICAgIGNvbnN0IGJvdDIgPSBiMTsKICAgICAgY29uc3QgbWlkMiA9IChiMSArIGIzKSAvIDI7CiAgICAgIGlmIChtaWQxID49IHRvcDIgJiYgbWlkMiA8PSBib3QxKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGlmIChtaWQyID49IHRvcDEgJiYgbWlkMSA8PSBib3QyKSB7CiAgICAgICAgcmV0dXJuICsxOwogICAgICB9CiAgICAgIGNvbnN0IGNlbnRlclgxID0gKGEwICsgYTIpIC8gMjsKICAgICAgY29uc3QgY2VudGVyWDIgPSAoYjAgKyBiMikgLyAyOwogICAgICByZXR1cm4gY2VudGVyWDEgLSBjZW50ZXJYMjsKICAgIH0pOwogICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy4jZWxlbWVudHMpIHsKICAgICAgZnJhZ21lbnQuYXBwZW5kKGVsZW1lbnQuY29udGFpbmVyKTsKICAgICAgaWYgKHRoaXMuX2NvbW1lbnRNYW5hZ2VyKSB7CiAgICAgICAgKGVsZW1lbnQuZXh0cmFQb3B1cEVsZW1lbnQ/LnBvcHVwIHx8IGVsZW1lbnQucG9wdXApPy5yZW5kZXJDb21tZW50QnV0dG9uKCk7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5leHRyYVBvcHVwRWxlbWVudCkgewogICAgICAgIGZyYWdtZW50LmFwcGVuZChlbGVtZW50LmV4dHJhUG9wdXBFbGVtZW50LnJlbmRlcigpKTsKICAgICAgfQogICAgfQogICAgdGhpcy5kaXYuYXBwZW5kKGZyYWdtZW50KTsKICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTsKICAgIGlmICh0aGlzLiNhY2Nlc3NpYmlsaXR5TWFuYWdlcikgewogICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy4jZWxlbWVudHMpIHsKICAgICAgICB0aGlzLiNhY2Nlc3NpYmlsaXR5TWFuYWdlci5hZGRQb2ludGVySW5UZXh0TGF5ZXIoZWxlbWVudC5jb250ZW50RWxlbWVudCwgZmFsc2UpOwogICAgICB9CiAgICB9CiAgfQogIGFzeW5jIGFkZExpbmtBbm5vdGF0aW9ucyhhbm5vdGF0aW9ucykgewogICAgY29uc3QgZWxlbWVudFBhcmFtcyA9IHsKICAgICAgZGF0YTogbnVsbCwKICAgICAgbGF5ZXI6IHRoaXMuZGl2LAogICAgICBsaW5rU2VydmljZTogdGhpcy4jbGlua1NlcnZpY2UsCiAgICAgIHN2Z0ZhY3Rvcnk6IG5ldyBET01TVkdGYWN0b3J5KCksCiAgICAgIHBhcmVudDogdGhpcwogICAgfTsKICAgIGZvciAoY29uc3QgZGF0YSBvZiBhbm5vdGF0aW9ucykgewogICAgICBkYXRhLmJvcmRlclN0eWxlIHx8PSBBbm5vdGF0aW9uTGF5ZXIuX2RlZmF1bHRCb3JkZXJTdHlsZTsKICAgICAgZWxlbWVudFBhcmFtcy5kYXRhID0gZGF0YTsKICAgICAgY29uc3QgZWxlbWVudCA9IEFubm90YXRpb25FbGVtZW50RmFjdG9yeS5jcmVhdGUoZWxlbWVudFBhcmFtcyk7CiAgICAgIGlmICghZWxlbWVudC5pc1JlbmRlcmFibGUpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBlbGVtZW50LnJlbmRlcigpOwogICAgICBlbGVtZW50LmNvbnRlbnRFbGVtZW50LmlkID0gYCR7QW5ub3RhdGlvblByZWZpeH0ke2RhdGEuaWR9YDsKICAgICAgdGhpcy4jZWxlbWVudHMucHVzaChlbGVtZW50KTsKICAgIH0KICAgIGF3YWl0IHRoaXMuI2FkZEVsZW1lbnRzVG9ET00oKTsKICB9CiAgdXBkYXRlKHsKICAgIHZpZXdwb3J0CiAgfSkgewogICAgY29uc3QgbGF5ZXIgPSB0aGlzLmRpdjsKICAgIHRoaXMudmlld3BvcnQgPSB2aWV3cG9ydDsKICAgIHNldExheWVyRGltZW5zaW9ucyhsYXllciwgewogICAgICByb3RhdGlvbjogdmlld3BvcnQucm90YXRpb24KICAgIH0pOwogICAgdGhpcy4jc2V0QW5ub3RhdGlvbkNhbnZhc01hcCgpOwogICAgbGF5ZXIuaGlkZGVuID0gZmFsc2U7CiAgfQogICNzZXRBbm5vdGF0aW9uQ2FudmFzTWFwKCkgewogICAgaWYgKCF0aGlzLiNhbm5vdGF0aW9uQ2FudmFzTWFwKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGxheWVyID0gdGhpcy5kaXY7CiAgICBmb3IgKGNvbnN0IFtpZCwgY2FudmFzXSBvZiB0aGlzLiNhbm5vdGF0aW9uQ2FudmFzTWFwKSB7CiAgICAgIGNvbnN0IGVsZW1lbnQgPSBsYXllci5xdWVyeVNlbGVjdG9yKGBbZGF0YS1hbm5vdGF0aW9uLWlkPSIke2lkfSJdYCk7CiAgICAgIGlmICghZWxlbWVudCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNhbnZhcy5jbGFzc05hbWUgPSAiYW5ub3RhdGlvbkNvbnRlbnQiOwogICAgICBjb25zdCB7CiAgICAgICAgZmlyc3RDaGlsZAogICAgICB9ID0gZWxlbWVudDsKICAgICAgaWYgKCFmaXJzdENoaWxkKSB7CiAgICAgICAgZWxlbWVudC5hcHBlbmQoY2FudmFzKTsKICAgICAgfSBlbHNlIGlmIChmaXJzdENoaWxkLm5vZGVOYW1lID09PSAiQ0FOVkFTIikgewogICAgICAgIGZpcnN0Q2hpbGQucmVwbGFjZVdpdGgoY2FudmFzKTsKICAgICAgfSBlbHNlIGlmICghZmlyc3RDaGlsZC5jbGFzc0xpc3QuY29udGFpbnMoImFubm90YXRpb25Db250ZW50IikpIHsKICAgICAgICBmaXJzdENoaWxkLmJlZm9yZShjYW52YXMpOwogICAgICB9IGVsc2UgewogICAgICAgIGZpcnN0Q2hpbGQuYWZ0ZXIoY2FudmFzKTsKICAgICAgfQogICAgICBjb25zdCBlZGl0YWJsZUFubm90YXRpb24gPSB0aGlzLiNlZGl0YWJsZUFubm90YXRpb25zLmdldChpZCk7CiAgICAgIGlmICghZWRpdGFibGVBbm5vdGF0aW9uKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGVkaXRhYmxlQW5ub3RhdGlvbi5faGFzTm9DYW52YXMpIHsKICAgICAgICB0aGlzLl9hbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyPy5zZXRNaXNzaW5nQ2FudmFzKGlkLCBlbGVtZW50LmlkLCBjYW52YXMpOwogICAgICAgIGVkaXRhYmxlQW5ub3RhdGlvbi5faGFzTm9DYW52YXMgPSBmYWxzZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlZGl0YWJsZUFubm90YXRpb24uY2FudmFzID0gY2FudmFzOwogICAgICB9CiAgICB9CiAgICB0aGlzLiNhbm5vdGF0aW9uQ2FudmFzTWFwLmNsZWFyKCk7CiAgfQogIGdldEVkaXRhYmxlQW5ub3RhdGlvbnMoKSB7CiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiNlZGl0YWJsZUFubm90YXRpb25zLnZhbHVlcygpKTsKICB9CiAgZ2V0RWRpdGFibGVBbm5vdGF0aW9uKGlkKSB7CiAgICByZXR1cm4gdGhpcy4jZWRpdGFibGVBbm5vdGF0aW9ucy5nZXQoaWQpOwogIH0KICBhZGRGYWtlQW5ub3RhdGlvbihlZGl0b3IpIHsKICAgIGNvbnN0IHsKICAgICAgZGl2CiAgICB9ID0gdGhpczsKICAgIGNvbnN0IHsKICAgICAgaWQsCiAgICAgIHJvdGF0aW9uCiAgICB9ID0gZWRpdG9yOwogICAgY29uc3QgZWxlbWVudCA9IG5ldyBFZGl0b3JBbm5vdGF0aW9uRWxlbWVudCh7CiAgICAgIGRhdGE6IHsKICAgICAgICBpZCwKICAgICAgICByZWN0OiBlZGl0b3IuZ2V0UERGUmVjdCgpLAogICAgICAgIHJvdGF0aW9uCiAgICAgIH0sCiAgICAgIGVkaXRvciwKICAgICAgbGF5ZXI6IGRpdiwKICAgICAgcGFyZW50OiB0aGlzLAogICAgICBlbmFibGVDb21tZW50OiAhIXRoaXMuX2NvbW1lbnRNYW5hZ2VyLAogICAgICBsaW5rU2VydmljZTogdGhpcy4jbGlua1NlcnZpY2UsCiAgICAgIGFubm90YXRpb25TdG9yYWdlOiB0aGlzLiNhbm5vdGF0aW9uU3RvcmFnZQogICAgfSk7CiAgICBlbGVtZW50LnJlbmRlcigpOwogICAgZWxlbWVudC5jb250ZW50RWxlbWVudC5pZCA9IGAke0Fubm90YXRpb25QcmVmaXh9JHtpZH1gOwogICAgZWxlbWVudC5jcmVhdGVPclVwZGF0ZVBvcHVwKCk7CiAgICB0aGlzLiNlbGVtZW50cy5wdXNoKGVsZW1lbnQpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQogIHJlbW92ZUFubm90YXRpb24oaWQpIHsKICAgIGNvbnN0IGluZGV4ID0gdGhpcy4jZWxlbWVudHMuZmluZEluZGV4KGVsID0+IGVsLmRhdGEuaWQgPT09IGlkKTsKICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgW2VsZW1lbnRdID0gdGhpcy4jZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTsKICAgIHRoaXMuI2FjY2Vzc2liaWxpdHlNYW5hZ2VyPy5yZW1vdmVQb2ludGVySW5UZXh0TGF5ZXIoZWxlbWVudC5jb250ZW50RWxlbWVudCk7CiAgfQogIHVwZGF0ZUZha2VBbm5vdGF0aW9ucyhlZGl0b3JzKSB7CiAgICBpZiAoZWRpdG9ycy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChjb25zdCBlZGl0b3Igb2YgZWRpdG9ycykgewogICAgICBlZGl0b3IudXBkYXRlRmFrZUFubm90YXRpb25FbGVtZW50KHRoaXMpOwogICAgfQogICAgdGhpcy4jYWRkRWxlbWVudHNUb0RPTSgpOwogIH0KICB0b2dnbGVQb2ludGVyRXZlbnRzKGVuYWJsZWQgPSBmYWxzZSkgewogICAgdGhpcy5kaXYuY2xhc3NMaXN0LnRvZ2dsZSgiZGlzYWJsZWQiLCAhZW5hYmxlZCk7CiAgfQogIHN0YXRpYyBnZXQgX2RlZmF1bHRCb3JkZXJTdHlsZSgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgIl9kZWZhdWx0Qm9yZGVyU3R5bGUiLCBPYmplY3QuZnJlZXplKHsKICAgICAgd2lkdGg6IDEsCiAgICAgIHJhd1dpZHRoOiAxLAogICAgICBzdHlsZTogQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRCwKICAgICAgZGFzaEFycmF5OiBbM10sCiAgICAgIGhvcml6b250YWxDb3JuZXJSYWRpdXM6IDAsCiAgICAgIHZlcnRpY2FsQ29ybmVyUmFkaXVzOiAwCiAgICB9KSk7CiAgfQp9Cgo7Ly8gLi9zcmMvZGlzcGxheS9lZGl0b3IvZnJlZXRleHQuanMKCgoKCgpjb25zdCBFT0xfUEFUVEVSTiA9IC9cclxuP3xcbi9nOwpjbGFzcyBGcmVlVGV4dEVkaXRvciBleHRlbmRzIEFubm90YXRpb25FZGl0b3IgewogICNjb250ZW50ID0gIiI7CiAgI2VkaXRvckRpdklkID0gYCR7dGhpcy5pZH0tZWRpdG9yYDsKICAjZWRpdE1vZGVBQyA9IG51bGw7CiAgI2ZvbnRTaXplOwogIF9jb2xvclBpY2tlciA9IG51bGw7CiAgc3RhdGljIF9mcmVlVGV4dERlZmF1bHRDb250ZW50ID0gIiI7CiAgc3RhdGljIF9pbnRlcm5hbFBhZGRpbmcgPSAwOwogIHN0YXRpYyBfZGVmYXVsdENvbG9yID0gbnVsbDsKICBzdGF0aWMgX2RlZmF1bHRGb250U2l6ZSA9IDEwOwogIHN0YXRpYyBnZXQgX2tleWJvYXJkTWFuYWdlcigpIHsKICAgIGNvbnN0IHByb3RvID0gRnJlZVRleHRFZGl0b3IucHJvdG90eXBlOwogICAgY29uc3QgYXJyb3dDaGVja2VyID0gc2VsZiA9PiBzZWxmLmlzRW1wdHkoKTsKICAgIGNvbnN0IHNtYWxsID0gQW5ub3RhdGlvbkVkaXRvclVJTWFuYWdlci5UUkFOU0xBVEVfU01BTEw7CiAgICBjb25zdCBiaWcgPSBBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyLlRSQU5TTEFURV9CSUc7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJfa2V5Ym9hcmRNYW5hZ2VyIiwgbmV3IEtleWJvYXJkTWFuYWdlcihbW1siY3RybCtzIiwgIm1hYyttZXRhK3MiLCAiY3RybCtwIiwgIm1hYyttZXRhK3AiXSwgcHJvdG8uY29tbWl0T3JSZW1vdmUsIHsKICAgICAgYnViYmxlczogdHJ1ZQogICAgfV0sIFtbImN0cmwrRW50ZXIiLCAibWFjK21ldGErRW50ZXIiLCAiRXNjYXBlIiwgIm1hYytFc2NhcGUiXSwgcHJvdG8uY29tbWl0T3JSZW1vdmVdLCBbWyJBcnJvd0xlZnQiLCAibWFjK0Fycm93TGVmdCJdLCBwcm90by5fdHJhbnNsYXRlRW1wdHksIHsKICAgICAgYXJnczogWy1zbWFsbCwgMF0sCiAgICAgIGNoZWNrZXI6IGFycm93Q2hlY2tlcgogICAgfV0sIFtbImN0cmwrQXJyb3dMZWZ0IiwgIm1hYytzaGlmdCtBcnJvd0xlZnQiXSwgcHJvdG8uX3RyYW5zbGF0ZUVtcHR5LCB7CiAgICAgIGFyZ3M6IFstYmlnLCAwXSwKICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyCiAgICB9XSwgW1siQXJyb3dSaWdodCIsICJtYWMrQXJyb3dSaWdodCJdLCBwcm90by5fdHJhbnNsYXRlRW1wdHksIHsKICAgICAgYXJnczogW3NtYWxsLCAwXSwKICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyCiAgICB9XSwgW1siY3RybCtBcnJvd1JpZ2h0IiwgIm1hYytzaGlmdCtBcnJvd1JpZ2h0Il0sIHByb3RvLl90cmFuc2xhdGVFbXB0eSwgewogICAgICBhcmdzOiBbYmlnLCAwXSwKICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyCiAgICB9XSwgW1siQXJyb3dVcCIsICJtYWMrQXJyb3dVcCJdLCBwcm90by5fdHJhbnNsYXRlRW1wdHksIHsKICAgICAgYXJnczogWzAsIC1zbWFsbF0sCiAgICAgIGNoZWNrZXI6IGFycm93Q2hlY2tlcgogICAgfV0sIFtbImN0cmwrQXJyb3dVcCIsICJtYWMrc2hpZnQrQXJyb3dVcCJdLCBwcm90by5fdHJhbnNsYXRlRW1wdHksIHsKICAgICAgYXJnczogWzAsIC1iaWddLAogICAgICBjaGVja2VyOiBhcnJvd0NoZWNrZXIKICAgIH1dLCBbWyJBcnJvd0Rvd24iLCAibWFjK0Fycm93RG93biJdLCBwcm90by5fdHJhbnNsYXRlRW1wdHksIHsKICAgICAgYXJnczogWzAsIHNtYWxsXSwKICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyCiAgICB9XSwgW1siY3RybCtBcnJvd0Rvd24iLCAibWFjK3NoaWZ0K0Fycm93RG93biJdLCBwcm90by5fdHJhbnNsYXRlRW1wdHksIHsKICAgICAgYXJnczogWzAsIGJpZ10sCiAgICAgIGNoZWNrZXI6IGFycm93Q2hlY2tlcgogICAgfV1dKSk7CiAgfQogIHN0YXRpYyBfdHlwZSA9ICJmcmVldGV4dCI7CiAgc3RhdGljIF9lZGl0b3JUeXBlID0gQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcih7CiAgICAgIC4uLnBhcmFtcywKICAgICAgbmFtZTogImZyZWVUZXh0RWRpdG9yIgogICAgfSk7CiAgICB0aGlzLmNvbG9yID0gcGFyYW1zLmNvbG9yIHx8IEZyZWVUZXh0RWRpdG9yLl9kZWZhdWx0Q29sb3IgfHwgQW5ub3RhdGlvbkVkaXRvci5fZGVmYXVsdExpbmVDb2xvcjsKICAgIHRoaXMuI2ZvbnRTaXplID0gcGFyYW1zLmZvbnRTaXplIHx8IEZyZWVUZXh0RWRpdG9yLl9kZWZhdWx0Rm9udFNpemU7CiAgICBpZiAoIXRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCkgewogICAgICB0aGlzLl91aU1hbmFnZXIuYTExeUFsZXJ0KCJwZGZqcy1lZGl0b3ItZnJlZXRleHQtYWRkZWQtYWxlcnQiKTsKICAgIH0KICAgIHRoaXMuY2FuQWRkQ29tbWVudCA9IGZhbHNlOwogIH0KICBzdGF0aWMgaW5pdGlhbGl6ZShsMTBuLCB1aU1hbmFnZXIpIHsKICAgIEFubm90YXRpb25FZGl0b3IuaW5pdGlhbGl6ZShsMTBuLCB1aU1hbmFnZXIpOwogICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICB0aGlzLl9pbnRlcm5hbFBhZGRpbmcgPSBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tZnJlZXRleHQtcGFkZGluZyIpKTsKICB9CiAgc3RhdGljIHVwZGF0ZURlZmF1bHRQYXJhbXModHlwZSwgdmFsdWUpIHsKICAgIHN3aXRjaCAodHlwZSkgewogICAgICBjYXNlIEFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkU6CiAgICAgICAgRnJlZVRleHRFZGl0b3IuX2RlZmF1bHRGb250U2l6ZSA9IHZhbHVlOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX0NPTE9SOgogICAgICAgIEZyZWVUZXh0RWRpdG9yLl9kZWZhdWx0Q29sb3IgPSB2YWx1ZTsKICAgICAgICBicmVhazsKICAgIH0KICB9CiAgdXBkYXRlUGFyYW1zKHR5cGUsIHZhbHVlKSB7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFOgogICAgICAgIHRoaXMuI3VwZGF0ZUZvbnRTaXplKHZhbHVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9DT0xPUjoKICAgICAgICB0aGlzLiN1cGRhdGVDb2xvcih2YWx1ZSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHN0YXRpYyBnZXQgZGVmYXVsdFByb3BlcnRpZXNUb1VwZGF0ZSgpIHsKICAgIHJldHVybiBbW0Fubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkUsIEZyZWVUZXh0RWRpdG9yLl9kZWZhdWx0Rm9udFNpemVdLCBbQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1IsIEZyZWVUZXh0RWRpdG9yLl9kZWZhdWx0Q29sb3IgfHwgQW5ub3RhdGlvbkVkaXRvci5fZGVmYXVsdExpbmVDb2xvcl1dOwogIH0KICBnZXQgcHJvcGVydGllc1RvVXBkYXRlKCkgewogICAgcmV0dXJuIFtbQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfU0laRSwgdGhpcy4jZm9udFNpemVdLCBbQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1IsIHRoaXMuY29sb3JdXTsKICB9CiAgZ2V0IHRvb2xiYXJCdXR0b25zKCkgewogICAgdGhpcy5fY29sb3JQaWNrZXIgfHw9IG5ldyBCYXNpY0NvbG9yUGlja2VyKHRoaXMpOwogICAgcmV0dXJuIFtbImNvbG9yUGlja2VyIiwgdGhpcy5fY29sb3JQaWNrZXJdXTsKICB9CiAgZ2V0IGNvbG9yVHlwZSgpIHsKICAgIHJldHVybiBBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9DT0xPUjsKICB9CiAgI3VwZGF0ZUZvbnRTaXplKGZvbnRTaXplKSB7CiAgICBjb25zdCBzZXRGb250c2l6ZSA9IHNpemUgPT4gewogICAgICB0aGlzLmVkaXRvckRpdi5zdHlsZS5mb250U2l6ZSA9IGBjYWxjKCR7c2l6ZX1weCAqIHZhcigtLXRvdGFsLXNjYWxlLWZhY3RvcikpYDsKICAgICAgdGhpcy50cmFuc2xhdGUoMCwgLShzaXplIC0gdGhpcy4jZm9udFNpemUpICogdGhpcy5wYXJlbnRTY2FsZSk7CiAgICAgIHRoaXMuI2ZvbnRTaXplID0gc2l6ZTsKICAgICAgdGhpcy4jc2V0RWRpdG9yRGltZW5zaW9ucygpOwogICAgfTsKICAgIGNvbnN0IHNhdmVkRm9udHNpemUgPSB0aGlzLiNmb250U2l6ZTsKICAgIHRoaXMuYWRkQ29tbWFuZHMoewogICAgICBjbWQ6IHNldEZvbnRzaXplLmJpbmQodGhpcywgZm9udFNpemUpLAogICAgICB1bmRvOiBzZXRGb250c2l6ZS5iaW5kKHRoaXMsIHNhdmVkRm9udHNpemUpLAogICAgICBwb3N0OiB0aGlzLl91aU1hbmFnZXIudXBkYXRlVUkuYmluZCh0aGlzLl91aU1hbmFnZXIsIHRoaXMpLAogICAgICBtdXN0RXhlYzogdHJ1ZSwKICAgICAgdHlwZTogQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfU0laRSwKICAgICAgb3ZlcndyaXRlSWZTYW1lVHlwZTogdHJ1ZSwKICAgICAga2VlcFVuZG86IHRydWUKICAgIH0pOwogIH0KICBvblVwZGF0ZWRDb2xvcigpIHsKICAgIHRoaXMuZWRpdG9yRGl2LnN0eWxlLmNvbG9yID0gdGhpcy5jb2xvcjsKICAgIHRoaXMuX2NvbG9yUGlja2VyPy51cGRhdGUodGhpcy5jb2xvcik7CiAgICBzdXBlci5vblVwZGF0ZWRDb2xvcigpOwogIH0KICAjdXBkYXRlQ29sb3IoY29sb3IpIHsKICAgIGNvbnN0IHNldENvbG9yID0gY29sID0+IHsKICAgICAgdGhpcy5jb2xvciA9IGNvbDsKICAgICAgdGhpcy5vblVwZGF0ZWRDb2xvcigpOwogICAgfTsKICAgIGNvbnN0IHNhdmVkQ29sb3IgPSB0aGlzLmNvbG9yOwogICAgdGhpcy5hZGRDb21tYW5kcyh7CiAgICAgIGNtZDogc2V0Q29sb3IuYmluZCh0aGlzLCBjb2xvciksCiAgICAgIHVuZG86IHNldENvbG9yLmJpbmQodGhpcywgc2F2ZWRDb2xvciksCiAgICAgIHBvc3Q6IHRoaXMuX3VpTWFuYWdlci51cGRhdGVVSS5iaW5kKHRoaXMuX3VpTWFuYWdlciwgdGhpcyksCiAgICAgIG11c3RFeGVjOiB0cnVlLAogICAgICB0eXBlOiBBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9DT0xPUiwKICAgICAgb3ZlcndyaXRlSWZTYW1lVHlwZTogdHJ1ZSwKICAgICAga2VlcFVuZG86IHRydWUKICAgIH0pOwogIH0KICBfdHJhbnNsYXRlRW1wdHkoeCwgeSkgewogICAgdGhpcy5fdWlNYW5hZ2VyLnRyYW5zbGF0ZVNlbGVjdGVkRWRpdG9ycyh4LCB5LCB0cnVlKTsKICB9CiAgZ2V0SW5pdGlhbFRyYW5zbGF0aW9uKCkgewogICAgY29uc3Qgc2NhbGUgPSB0aGlzLnBhcmVudFNjYWxlOwogICAgcmV0dXJuIFstRnJlZVRleHRFZGl0b3IuX2ludGVybmFsUGFkZGluZyAqIHNjYWxlLCAtKEZyZWVUZXh0RWRpdG9yLl9pbnRlcm5hbFBhZGRpbmcgKyB0aGlzLiNmb250U2l6ZSkgKiBzY2FsZV07CiAgfQogIHJlYnVpbGQoKSB7CiAgICBpZiAoIXRoaXMucGFyZW50KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN1cGVyLnJlYnVpbGQoKTsKICAgIGlmICh0aGlzLmRpdiA9PT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXRoaXMuaXNBdHRhY2hlZFRvRE9NKSB7CiAgICAgIHRoaXMucGFyZW50LmFkZCh0aGlzKTsKICAgIH0KICB9CiAgZW5hYmxlRWRpdE1vZGUoKSB7CiAgICBpZiAoIXN1cGVyLmVuYWJsZUVkaXRNb2RlKCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdGhpcy5vdmVybGF5RGl2LmNsYXNzTGlzdC5yZW1vdmUoImVuYWJsZWQiKTsKICAgIHRoaXMuZWRpdG9yRGl2LmNvbnRlbnRFZGl0YWJsZSA9IHRydWU7CiAgICB0aGlzLl9pc0RyYWdnYWJsZSA9IGZhbHNlOwogICAgdGhpcy5kaXYucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiKTsKICAgIHRoaXMuI2VkaXRNb2RlQUMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICBjb25zdCBzaWduYWwgPSB0aGlzLl91aU1hbmFnZXIuY29tYmluZWRTaWduYWwodGhpcy4jZWRpdE1vZGVBQyk7CiAgICB0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5lZGl0b3JEaXZLZXlkb3duLmJpbmQodGhpcyksIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIHRoaXMuZWRpdG9yRGl2LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgdGhpcy5lZGl0b3JEaXZGb2N1cy5iaW5kKHRoaXMpLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICB0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgdGhpcy5lZGl0b3JEaXZCbHVyLmJpbmQodGhpcyksIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIHRoaXMuZWRpdG9yRGl2LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgdGhpcy5lZGl0b3JEaXZJbnB1dC5iaW5kKHRoaXMpLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICB0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIHRoaXMuZWRpdG9yRGl2UGFzdGUuYmluZCh0aGlzKSwgewogICAgICBzaWduYWwKICAgIH0pOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGRpc2FibGVFZGl0TW9kZSgpIHsKICAgIGlmICghc3VwZXIuZGlzYWJsZUVkaXRNb2RlKCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdGhpcy5vdmVybGF5RGl2LmNsYXNzTGlzdC5hZGQoImVuYWJsZWQiKTsKICAgIHRoaXMuZWRpdG9yRGl2LmNvbnRlbnRFZGl0YWJsZSA9IGZhbHNlOwogICAgdGhpcy5kaXYuc2V0QXR0cmlidXRlKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLCB0aGlzLiNlZGl0b3JEaXZJZCk7CiAgICB0aGlzLl9pc0RyYWdnYWJsZSA9IHRydWU7CiAgICB0aGlzLiNlZGl0TW9kZUFDPy5hYm9ydCgpOwogICAgdGhpcy4jZWRpdE1vZGVBQyA9IG51bGw7CiAgICB0aGlzLmRpdi5mb2N1cyh7CiAgICAgIHByZXZlbnRTY3JvbGw6IHRydWUKICAgIH0pOwogICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTsKICAgIHRoaXMucGFyZW50LmRpdi5jbGFzc0xpc3QuYWRkKCJmcmVldGV4dEVkaXRpbmciKTsKICAgIHJldHVybiB0cnVlOwogIH0KICBmb2N1c2luKGV2ZW50KSB7CiAgICBpZiAoIXRoaXMuX2ZvY3VzRXZlbnRzQWxsb3dlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBzdXBlci5mb2N1c2luKGV2ZW50KTsKICAgIGlmIChldmVudC50YXJnZXQgIT09IHRoaXMuZWRpdG9yRGl2KSB7CiAgICAgIHRoaXMuZWRpdG9yRGl2LmZvY3VzKCk7CiAgICB9CiAgfQogIG9uY2VBZGRlZChmb2N1cykgewogICAgaWYgKHRoaXMud2lkdGgpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpOwogICAgaWYgKGZvY3VzKSB7CiAgICAgIHRoaXMuZWRpdG9yRGl2LmZvY3VzKCk7CiAgICB9CiAgICBpZiAodGhpcy5faW5pdGlhbE9wdGlvbnM/LmlzQ2VudGVyZWQpIHsKICAgICAgdGhpcy5jZW50ZXIoKTsKICAgIH0KICAgIHRoaXMuX2luaXRpYWxPcHRpb25zID0gbnVsbDsKICB9CiAgaXNFbXB0eSgpIHsKICAgIHJldHVybiAhdGhpcy5lZGl0b3JEaXYgfHwgdGhpcy5lZGl0b3JEaXYuaW5uZXJUZXh0LnRyaW0oKSA9PT0gIiI7CiAgfQogIHJlbW92ZSgpIHsKICAgIHRoaXMuaXNFZGl0aW5nID0gZmFsc2U7CiAgICBpZiAodGhpcy5wYXJlbnQpIHsKICAgICAgdGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKHRydWUpOwogICAgICB0aGlzLnBhcmVudC5kaXYuY2xhc3NMaXN0LmFkZCgiZnJlZXRleHRFZGl0aW5nIik7CiAgICB9CiAgICBzdXBlci5yZW1vdmUoKTsKICB9CiAgI2V4dHJhY3RUZXh0KCkgewogICAgY29uc3QgYnVmZmVyID0gW107CiAgICB0aGlzLmVkaXRvckRpdi5ub3JtYWxpemUoKTsKICAgIGxldCBwcmV2Q2hpbGQgPSBudWxsOwogICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmVkaXRvckRpdi5jaGlsZE5vZGVzKSB7CiAgICAgIGlmIChwcmV2Q2hpbGQ/Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBjaGlsZC5ub2RlTmFtZSA9PT0gIkJSIikgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGJ1ZmZlci5wdXNoKEZyZWVUZXh0RWRpdG9yLiNnZXROb2RlQ29udGVudChjaGlsZCkpOwogICAgICBwcmV2Q2hpbGQgPSBjaGlsZDsKICAgIH0KICAgIHJldHVybiBidWZmZXIuam9pbigiXG4iKTsKICB9CiAgI3NldEVkaXRvckRpbWVuc2lvbnMoKSB7CiAgICBjb25zdCBbcGFyZW50V2lkdGgsIHBhcmVudEhlaWdodF0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnM7CiAgICBsZXQgcmVjdDsKICAgIGlmICh0aGlzLmlzQXR0YWNoZWRUb0RPTSkgewogICAgICByZWN0ID0gdGhpcy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCB7CiAgICAgICAgY3VycmVudExheWVyLAogICAgICAgIGRpdgogICAgICB9ID0gdGhpczsKICAgICAgY29uc3Qgc2F2ZWREaXNwbGF5ID0gZGl2LnN0eWxlLmRpc3BsYXk7CiAgICAgIGNvbnN0IHNhdmVkVmlzaWJpbGl0eSA9IGRpdi5jbGFzc0xpc3QuY29udGFpbnMoImhpZGRlbiIpOwogICAgICBkaXYuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7CiAgICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gImhpZGRlbiI7CiAgICAgIGN1cnJlbnRMYXllci5kaXYuYXBwZW5kKHRoaXMuZGl2KTsKICAgICAgcmVjdCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgZGl2LnJlbW92ZSgpOwogICAgICBkaXYuc3R5bGUuZGlzcGxheSA9IHNhdmVkRGlzcGxheTsKICAgICAgZGl2LmNsYXNzTGlzdC50b2dnbGUoImhpZGRlbiIsIHNhdmVkVmlzaWJpbGl0eSk7CiAgICB9CiAgICBpZiAodGhpcy5yb3RhdGlvbiAlIDE4MCA9PT0gdGhpcy5wYXJlbnRSb3RhdGlvbiAlIDE4MCkgewogICAgICB0aGlzLndpZHRoID0gcmVjdC53aWR0aCAvIHBhcmVudFdpZHRoOwogICAgICB0aGlzLmhlaWdodCA9IHJlY3QuaGVpZ2h0IC8gcGFyZW50SGVpZ2h0OwogICAgfSBlbHNlIHsKICAgICAgdGhpcy53aWR0aCA9IHJlY3QuaGVpZ2h0IC8gcGFyZW50V2lkdGg7CiAgICAgIHRoaXMuaGVpZ2h0ID0gcmVjdC53aWR0aCAvIHBhcmVudEhlaWdodDsKICAgIH0KICAgIHRoaXMuZml4QW5kU2V0UG9zaXRpb24oKTsKICB9CiAgY29tbWl0KCkgewogICAgaWYgKCF0aGlzLmlzSW5FZGl0TW9kZSgpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN1cGVyLmNvbW1pdCgpOwogICAgdGhpcy5kaXNhYmxlRWRpdE1vZGUoKTsKICAgIGNvbnN0IHNhdmVkVGV4dCA9IHRoaXMuI2NvbnRlbnQ7CiAgICBjb25zdCBuZXdUZXh0ID0gdGhpcy4jY29udGVudCA9IHRoaXMuI2V4dHJhY3RUZXh0KCkudHJpbUVuZCgpOwogICAgaWYgKHNhdmVkVGV4dCA9PT0gbmV3VGV4dCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBzZXRUZXh0ID0gdGV4dCA9PiB7CiAgICAgIHRoaXMuI2NvbnRlbnQgPSB0ZXh0OwogICAgICBpZiAoIXRleHQpIHsKICAgICAgICB0aGlzLnJlbW92ZSgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLiNzZXRDb250ZW50KCk7CiAgICAgIHRoaXMuX3VpTWFuYWdlci5yZWJ1aWxkKHRoaXMpOwogICAgICB0aGlzLiNzZXRFZGl0b3JEaW1lbnNpb25zKCk7CiAgICB9OwogICAgdGhpcy5hZGRDb21tYW5kcyh7CiAgICAgIGNtZDogKCkgPT4gewogICAgICAgIHNldFRleHQobmV3VGV4dCk7CiAgICAgIH0sCiAgICAgIHVuZG86ICgpID0+IHsKICAgICAgICBzZXRUZXh0KHNhdmVkVGV4dCk7CiAgICAgIH0sCiAgICAgIG11c3RFeGVjOiBmYWxzZQogICAgfSk7CiAgICB0aGlzLiNzZXRFZGl0b3JEaW1lbnNpb25zKCk7CiAgfQogIHNob3VsZEdldEtleWJvYXJkRXZlbnRzKCkgewogICAgcmV0dXJuIHRoaXMuaXNJbkVkaXRNb2RlKCk7CiAgfQogIGVudGVySW5FZGl0TW9kZSgpIHsKICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTsKICAgIHRoaXMuZWRpdG9yRGl2LmZvY3VzKCk7CiAgfQogIGtleWRvd24oZXZlbnQpIHsKICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMuZGl2ICYmIGV2ZW50LmtleSA9PT0gIkVudGVyIikgewogICAgICB0aGlzLmVudGVySW5FZGl0TW9kZSgpOwogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgfQogIH0KICBlZGl0b3JEaXZLZXlkb3duKGV2ZW50KSB7CiAgICBGcmVlVGV4dEVkaXRvci5fa2V5Ym9hcmRNYW5hZ2VyLmV4ZWModGhpcywgZXZlbnQpOwogIH0KICBlZGl0b3JEaXZGb2N1cyhldmVudCkgewogICAgdGhpcy5pc0VkaXRpbmcgPSB0cnVlOwogIH0KICBlZGl0b3JEaXZCbHVyKGV2ZW50KSB7CiAgICB0aGlzLmlzRWRpdGluZyA9IGZhbHNlOwogIH0KICBlZGl0b3JEaXZJbnB1dChldmVudCkgewogICAgdGhpcy5wYXJlbnQuZGl2LmNsYXNzTGlzdC50b2dnbGUoImZyZWV0ZXh0RWRpdGluZyIsIHRoaXMuaXNFbXB0eSgpKTsKICB9CiAgZGlzYWJsZUVkaXRpbmcoKSB7CiAgICB0aGlzLmVkaXRvckRpdi5zZXRBdHRyaWJ1dGUoInJvbGUiLCAiY29tbWVudCIpOwogICAgdGhpcy5lZGl0b3JEaXYucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpbGluZSIpOwogIH0KICBlbmFibGVFZGl0aW5nKCkgewogICAgdGhpcy5lZGl0b3JEaXYuc2V0QXR0cmlidXRlKCJyb2xlIiwgInRleHRib3giKTsKICAgIHRoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgiYXJpYS1tdWx0aWxpbmUiLCB0cnVlKTsKICB9CiAgZ2V0IGNhbkNoYW5nZUNvbnRlbnQoKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgcmVuZGVyKCkgewogICAgaWYgKHRoaXMuZGl2KSB7CiAgICAgIHJldHVybiB0aGlzLmRpdjsKICAgIH0KICAgIGxldCBiYXNlWCwgYmFzZVk7CiAgICBpZiAodGhpcy5faXNDb3B5IHx8IHRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCkgewogICAgICBiYXNlWCA9IHRoaXMueDsKICAgICAgYmFzZVkgPSB0aGlzLnk7CiAgICB9CiAgICBzdXBlci5yZW5kZXIoKTsKICAgIHRoaXMuZWRpdG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB0aGlzLmVkaXRvckRpdi5jbGFzc05hbWUgPSAiaW50ZXJuYWwiOwogICAgdGhpcy5lZGl0b3JEaXYuc2V0QXR0cmlidXRlKCJpZCIsIHRoaXMuI2VkaXRvckRpdklkKTsKICAgIHRoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgiZGF0YS1sMTBuLWlkIiwgInBkZmpzLWZyZWUtdGV4dDIiKTsKICAgIHRoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZSgiZGF0YS1sMTBuLWF0dHJzIiwgImRlZmF1bHQtY29udGVudCIpOwogICAgdGhpcy5lbmFibGVFZGl0aW5nKCk7CiAgICB0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGUgPSB0cnVlOwogICAgY29uc3QgewogICAgICBzdHlsZQogICAgfSA9IHRoaXMuZWRpdG9yRGl2OwogICAgc3R5bGUuZm9udFNpemUgPSBgY2FsYygke3RoaXMuI2ZvbnRTaXplfXB4ICogdmFyKC0tdG90YWwtc2NhbGUtZmFjdG9yKSlgOwogICAgc3R5bGUuY29sb3IgPSB0aGlzLmNvbG9yOwogICAgdGhpcy5kaXYuYXBwZW5kKHRoaXMuZWRpdG9yRGl2KTsKICAgIHRoaXMub3ZlcmxheURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy5vdmVybGF5RGl2LmNsYXNzTGlzdC5hZGQoIm92ZXJsYXkiLCAiZW5hYmxlZCIpOwogICAgdGhpcy5kaXYuYXBwZW5kKHRoaXMub3ZlcmxheURpdik7CiAgICBpZiAodGhpcy5faXNDb3B5IHx8IHRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCkgewogICAgICBjb25zdCBbcGFyZW50V2lkdGgsIHBhcmVudEhlaWdodF0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnM7CiAgICAgIGlmICh0aGlzLmFubm90YXRpb25FbGVtZW50SWQpIHsKICAgICAgICBjb25zdCB7CiAgICAgICAgICBwb3NpdGlvbgogICAgICAgIH0gPSB0aGlzLl9pbml0aWFsRGF0YTsKICAgICAgICBsZXQgW3R4LCB0eV0gPSB0aGlzLmdldEluaXRpYWxUcmFuc2xhdGlvbigpOwogICAgICAgIFt0eCwgdHldID0gdGhpcy5wYWdlVHJhbnNsYXRpb25Ub1NjcmVlbih0eCwgdHkpOwogICAgICAgIGNvbnN0IFtwYWdlV2lkdGgsIHBhZ2VIZWlnaHRdID0gdGhpcy5wYWdlRGltZW5zaW9uczsKICAgICAgICBjb25zdCBbcGFnZVgsIHBhZ2VZXSA9IHRoaXMucGFnZVRyYW5zbGF0aW9uOwogICAgICAgIGxldCBwb3NYLCBwb3NZOwogICAgICAgIHN3aXRjaCAodGhpcy5yb3RhdGlvbikgewogICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICBwb3NYID0gYmFzZVggKyAocG9zaXRpb25bMF0gLSBwYWdlWCkgLyBwYWdlV2lkdGg7CiAgICAgICAgICAgIHBvc1kgPSBiYXNlWSArIHRoaXMuaGVpZ2h0IC0gKHBvc2l0aW9uWzFdIC0gcGFnZVkpIC8gcGFnZUhlaWdodDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDkwOgogICAgICAgICAgICBwb3NYID0gYmFzZVggKyAocG9zaXRpb25bMF0gLSBwYWdlWCkgLyBwYWdlV2lkdGg7CiAgICAgICAgICAgIHBvc1kgPSBiYXNlWSAtIChwb3NpdGlvblsxXSAtIHBhZ2VZKSAvIHBhZ2VIZWlnaHQ7CiAgICAgICAgICAgIFt0eCwgdHldID0gW3R5LCAtdHhdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMTgwOgogICAgICAgICAgICBwb3NYID0gYmFzZVggLSB0aGlzLndpZHRoICsgKHBvc2l0aW9uWzBdIC0gcGFnZVgpIC8gcGFnZVdpZHRoOwogICAgICAgICAgICBwb3NZID0gYmFzZVkgLSAocG9zaXRpb25bMV0gLSBwYWdlWSkgLyBwYWdlSGVpZ2h0OwogICAgICAgICAgICBbdHgsIHR5XSA9IFstdHgsIC10eV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAyNzA6CiAgICAgICAgICAgIHBvc1ggPSBiYXNlWCArIChwb3NpdGlvblswXSAtIHBhZ2VYIC0gdGhpcy5oZWlnaHQgKiBwYWdlSGVpZ2h0KSAvIHBhZ2VXaWR0aDsKICAgICAgICAgICAgcG9zWSA9IGJhc2VZICsgKHBvc2l0aW9uWzFdIC0gcGFnZVkgLSB0aGlzLndpZHRoICogcGFnZVdpZHRoKSAvIHBhZ2VIZWlnaHQ7CiAgICAgICAgICAgIFt0eCwgdHldID0gWy10eSwgdHhdOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgdGhpcy5zZXRBdChwb3NYICogcGFyZW50V2lkdGgsIHBvc1kgKiBwYXJlbnRIZWlnaHQsIHR4LCB0eSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5fbW92ZUFmdGVyUGFzdGUoYmFzZVgsIGJhc2VZKTsKICAgICAgfQogICAgICB0aGlzLiNzZXRDb250ZW50KCk7CiAgICAgIHRoaXMuX2lzRHJhZ2dhYmxlID0gdHJ1ZTsKICAgICAgdGhpcy5lZGl0b3JEaXYuY29udGVudEVkaXRhYmxlID0gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICB0aGlzLl9pc0RyYWdnYWJsZSA9IGZhbHNlOwogICAgICB0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGUgPSB0cnVlOwogICAgfQogICAgcmV0dXJuIHRoaXMuZGl2OwogIH0KICBzdGF0aWMgI2dldE5vZGVDb250ZW50KG5vZGUpIHsKICAgIHJldHVybiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgPyBub2RlLm5vZGVWYWx1ZSA6IG5vZGUuaW5uZXJUZXh0KS5yZXBsYWNlQWxsKEVPTF9QQVRURVJOLCAiIik7CiAgfQogIGVkaXRvckRpdlBhc3RlKGV2ZW50KSB7CiAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YSB8fCB3aW5kb3cuY2xpcGJvYXJkRGF0YTsKICAgIGNvbnN0IHsKICAgICAgdHlwZXMKICAgIH0gPSBjbGlwYm9hcmREYXRhOwogICAgaWYgKHR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0eXBlc1swXSA9PT0gInRleHQvcGxhaW4iKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCBwYXN0ZSA9IEZyZWVUZXh0RWRpdG9yLiNkZXNlcmlhbGl6ZUNvbnRlbnQoY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0IikgfHwgIiIpLnJlcGxhY2VBbGwoRU9MX1BBVFRFUk4sICJcbiIpOwogICAgaWYgKCFwYXN0ZSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuZWRpdG9yRGl2Lm5vcm1hbGl6ZSgpOwogICAgc2VsZWN0aW9uLmRlbGV0ZUZyb21Eb2N1bWVudCgpOwogICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgIGlmICghcGFzdGUuaW5jbHVkZXMoIlxuIikpIHsKICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwYXN0ZSkpOwogICAgICB0aGlzLmVkaXRvckRpdi5ub3JtYWxpemUoKTsKICAgICAgc2VsZWN0aW9uLmNvbGxhcHNlVG9TdGFydCgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCB7CiAgICAgIHN0YXJ0Q29udGFpbmVyLAogICAgICBzdGFydE9mZnNldAogICAgfSA9IHJhbmdlOwogICAgY29uc3QgYnVmZmVyQmVmb3JlID0gW107CiAgICBjb25zdCBidWZmZXJBZnRlciA9IFtdOwogICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICBjb25zdCBwYXJlbnQgPSBzdGFydENvbnRhaW5lci5wYXJlbnRFbGVtZW50OwogICAgICBidWZmZXJBZnRlci5wdXNoKHN0YXJ0Q29udGFpbmVyLm5vZGVWYWx1ZS5zbGljZShzdGFydE9mZnNldCkucmVwbGFjZUFsbChFT0xfUEFUVEVSTiwgIiIpKTsKICAgICAgaWYgKHBhcmVudCAhPT0gdGhpcy5lZGl0b3JEaXYpIHsKICAgICAgICBsZXQgYnVmZmVyID0gYnVmZmVyQmVmb3JlOwogICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5lZGl0b3JEaXYuY2hpbGROb2RlcykgewogICAgICAgICAgaWYgKGNoaWxkID09PSBwYXJlbnQpIHsKICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyQWZ0ZXI7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgYnVmZmVyLnB1c2goRnJlZVRleHRFZGl0b3IuI2dldE5vZGVDb250ZW50KGNoaWxkKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGJ1ZmZlckJlZm9yZS5wdXNoKHN0YXJ0Q29udGFpbmVyLm5vZGVWYWx1ZS5zbGljZSgwLCBzdGFydE9mZnNldCkucmVwbGFjZUFsbChFT0xfUEFUVEVSTiwgIiIpKTsKICAgIH0gZWxzZSBpZiAoc3RhcnRDb250YWluZXIgPT09IHRoaXMuZWRpdG9yRGl2KSB7CiAgICAgIGxldCBidWZmZXIgPSBidWZmZXJCZWZvcmU7CiAgICAgIGxldCBpID0gMDsKICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmVkaXRvckRpdi5jaGlsZE5vZGVzKSB7CiAgICAgICAgaWYgKGkrKyA9PT0gc3RhcnRPZmZzZXQpIHsKICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlckFmdGVyOwogICAgICAgIH0KICAgICAgICBidWZmZXIucHVzaChGcmVlVGV4dEVkaXRvci4jZ2V0Tm9kZUNvbnRlbnQoY2hpbGQpKTsKICAgICAgfQogICAgfQogICAgdGhpcy4jY29udGVudCA9IGAke2J1ZmZlckJlZm9yZS5qb2luKCJcbiIpfSR7cGFzdGV9JHtidWZmZXJBZnRlci5qb2luKCJcbiIpfWA7CiAgICB0aGlzLiNzZXRDb250ZW50KCk7CiAgICBjb25zdCBuZXdSYW5nZSA9IG5ldyBSYW5nZSgpOwogICAgbGV0IGJlZm9yZUxlbmd0aCA9IE1hdGguc3VtUHJlY2lzZShidWZmZXJCZWZvcmUubWFwKGxpbmUgPT4gbGluZS5sZW5ndGgpKTsKICAgIGZvciAoY29uc3QgewogICAgICBmaXJzdENoaWxkCiAgICB9IG9mIHRoaXMuZWRpdG9yRGl2LmNoaWxkTm9kZXMpIHsKICAgICAgaWYgKGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgY29uc3QgbGVuZ3RoID0gZmlyc3RDaGlsZC5ub2RlVmFsdWUubGVuZ3RoOwogICAgICAgIGlmIChiZWZvcmVMZW5ndGggPD0gbGVuZ3RoKSB7CiAgICAgICAgICBuZXdSYW5nZS5zZXRTdGFydChmaXJzdENoaWxkLCBiZWZvcmVMZW5ndGgpOwogICAgICAgICAgbmV3UmFuZ2Uuc2V0RW5kKGZpcnN0Q2hpbGQsIGJlZm9yZUxlbmd0aCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgYmVmb3JlTGVuZ3RoIC09IGxlbmd0aDsKICAgICAgfQogICAgfQogICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTsKICB9CiAgI3NldENvbnRlbnQoKSB7CiAgICB0aGlzLmVkaXRvckRpdi5yZXBsYWNlQ2hpbGRyZW4oKTsKICAgIGlmICghdGhpcy4jY29udGVudCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGhpcy4jY29udGVudC5zcGxpdCgiXG4iKSkgewogICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgZGl2LmFwcGVuZChsaW5lID8gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZSkgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKICAgICAgdGhpcy5lZGl0b3JEaXYuYXBwZW5kKGRpdik7CiAgICB9CiAgfQogICNzZXJpYWxpemVDb250ZW50KCkgewogICAgcmV0dXJuIHRoaXMuI2NvbnRlbnQucmVwbGFjZUFsbCgiXHhhMCIsICIgIik7CiAgfQogIHN0YXRpYyAjZGVzZXJpYWxpemVDb250ZW50KGNvbnRlbnQpIHsKICAgIHJldHVybiBjb250ZW50LnJlcGxhY2VBbGwoIiAiLCAiXHhhMCIpOwogIH0KICBnZXQgY29udGVudERpdigpIHsKICAgIHJldHVybiB0aGlzLmVkaXRvckRpdjsKICB9CiAgZ2V0UERGUmVjdCgpIHsKICAgIGNvbnN0IHBhZGRpbmcgPSBGcmVlVGV4dEVkaXRvci5faW50ZXJuYWxQYWRkaW5nICogdGhpcy5wYXJlbnRTY2FsZTsKICAgIHJldHVybiB0aGlzLmdldFJlY3QocGFkZGluZywgcGFkZGluZyk7CiAgfQogIHN0YXRpYyBhc3luYyBkZXNlcmlhbGl6ZShkYXRhLCBwYXJlbnQsIHVpTWFuYWdlcikgewogICAgbGV0IGluaXRpYWxEYXRhID0gbnVsbDsKICAgIGlmIChkYXRhIGluc3RhbmNlb2YgRnJlZVRleHRBbm5vdGF0aW9uRWxlbWVudCkgewogICAgICBjb25zdCB7CiAgICAgICAgZGF0YTogewogICAgICAgICAgZGVmYXVsdEFwcGVhcmFuY2VEYXRhOiB7CiAgICAgICAgICAgIGZvbnRTaXplLAogICAgICAgICAgICBmb250Q29sb3IKICAgICAgICAgIH0sCiAgICAgICAgICByZWN0LAogICAgICAgICAgcm90YXRpb24sCiAgICAgICAgICBpZCwKICAgICAgICAgIHBvcHVwUmVmLAogICAgICAgICAgcmljaFRleHQsCiAgICAgICAgICBjb250ZW50c09iaiwKICAgICAgICAgIGNyZWF0aW9uRGF0ZSwKICAgICAgICAgIG1vZGlmaWNhdGlvbkRhdGUKICAgICAgICB9LAogICAgICAgIHRleHRDb250ZW50LAogICAgICAgIHRleHRQb3NpdGlvbiwKICAgICAgICBwYXJlbnQ6IHsKICAgICAgICAgIHBhZ2U6IHsKICAgICAgICAgICAgcGFnZU51bWJlcgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSA9IGRhdGE7CiAgICAgIGlmICghdGV4dENvbnRlbnQgfHwgdGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaW5pdGlhbERhdGEgPSBkYXRhID0gewogICAgICAgIGFubm90YXRpb25UeXBlOiBBbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVCwKICAgICAgICBjb2xvcjogQXJyYXkuZnJvbShmb250Q29sb3IpLAogICAgICAgIGZvbnRTaXplLAogICAgICAgIHZhbHVlOiB0ZXh0Q29udGVudC5qb2luKCJcbiIpLAogICAgICAgIHBvc2l0aW9uOiB0ZXh0UG9zaXRpb24sCiAgICAgICAgcGFnZUluZGV4OiBwYWdlTnVtYmVyIC0gMSwKICAgICAgICByZWN0OiByZWN0LnNsaWNlKDApLAogICAgICAgIHJvdGF0aW9uLAogICAgICAgIGFubm90YXRpb25FbGVtZW50SWQ6IGlkLAogICAgICAgIGlkLAogICAgICAgIGRlbGV0ZWQ6IGZhbHNlLAogICAgICAgIHBvcHVwUmVmLAogICAgICAgIGNvbW1lbnQ6IGNvbnRlbnRzT2JqPy5zdHIgfHwgbnVsbCwKICAgICAgICByaWNoVGV4dCwKICAgICAgICBjcmVhdGlvbkRhdGUsCiAgICAgICAgbW9kaWZpY2F0aW9uRGF0ZQogICAgICB9OwogICAgfQogICAgY29uc3QgZWRpdG9yID0gYXdhaXQgc3VwZXIuZGVzZXJpYWxpemUoZGF0YSwgcGFyZW50LCB1aU1hbmFnZXIpOwogICAgZWRpdG9yLiNmb250U2l6ZSA9IGRhdGEuZm9udFNpemU7CiAgICBlZGl0b3IuY29sb3IgPSBVdGlsLm1ha2VIZXhDb2xvciguLi5kYXRhLmNvbG9yKTsKICAgIGVkaXRvci4jY29udGVudCA9IEZyZWVUZXh0RWRpdG9yLiNkZXNlcmlhbGl6ZUNvbnRlbnQoZGF0YS52YWx1ZSk7CiAgICBlZGl0b3IuX2luaXRpYWxEYXRhID0gaW5pdGlhbERhdGE7CiAgICBpZiAoZGF0YS5jb21tZW50KSB7CiAgICAgIGVkaXRvci5zZXRDb21tZW50RGF0YShkYXRhKTsKICAgIH0KICAgIHJldHVybiBlZGl0b3I7CiAgfQogIHNlcmlhbGl6ZShpc0ZvckNvcHlpbmcgPSBmYWxzZSkgewogICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKHRoaXMuZGVsZXRlZCkgewogICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVEZWxldGVkKCk7CiAgICB9CiAgICBjb25zdCBjb2xvciA9IEFubm90YXRpb25FZGl0b3IuX2NvbG9yTWFuYWdlci5jb252ZXJ0KHRoaXMuaXNBdHRhY2hlZFRvRE9NID8gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVkaXRvckRpdikuY29sb3IgOiB0aGlzLmNvbG9yKTsKICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBPYmplY3QuYXNzaWduKHN1cGVyLnNlcmlhbGl6ZShpc0ZvckNvcHlpbmcpLCB7CiAgICAgIGNvbG9yLAogICAgICBmb250U2l6ZTogdGhpcy4jZm9udFNpemUsCiAgICAgIHZhbHVlOiB0aGlzLiNzZXJpYWxpemVDb250ZW50KCkKICAgIH0pOwogICAgdGhpcy5hZGRDb21tZW50KHNlcmlhbGl6ZWQpOwogICAgaWYgKGlzRm9yQ29weWluZykgewogICAgICBzZXJpYWxpemVkLmlzQ29weSA9IHRydWU7CiAgICAgIHJldHVybiBzZXJpYWxpemVkOwogICAgfQogICAgaWYgKHRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCAmJiAhdGhpcy4jaGFzRWxlbWVudENoYW5nZWQoc2VyaWFsaXplZCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBzZXJpYWxpemVkLmlkID0gdGhpcy5hbm5vdGF0aW9uRWxlbWVudElkOwogICAgcmV0dXJuIHNlcmlhbGl6ZWQ7CiAgfQogICNoYXNFbGVtZW50Q2hhbmdlZChzZXJpYWxpemVkKSB7CiAgICBjb25zdCB7CiAgICAgIHZhbHVlLAogICAgICBmb250U2l6ZSwKICAgICAgY29sb3IsCiAgICAgIHBhZ2VJbmRleAogICAgfSA9IHRoaXMuX2luaXRpYWxEYXRhOwogICAgcmV0dXJuIHRoaXMuaGFzRWRpdGVkQ29tbWVudCB8fCB0aGlzLl9oYXNCZWVuTW92ZWQgfHwgc2VyaWFsaXplZC52YWx1ZSAhPT0gdmFsdWUgfHwgc2VyaWFsaXplZC5mb250U2l6ZSAhPT0gZm9udFNpemUgfHwgc2VyaWFsaXplZC5jb2xvci5zb21lKChjLCBpKSA9PiBjICE9PSBjb2xvcltpXSkgfHwgc2VyaWFsaXplZC5wYWdlSW5kZXggIT09IHBhZ2VJbmRleDsKICB9CiAgcmVuZGVyQW5ub3RhdGlvbkVsZW1lbnQoYW5ub3RhdGlvbikgewogICAgY29uc3QgY29udGVudCA9IHN1cGVyLnJlbmRlckFubm90YXRpb25FbGVtZW50KGFubm90YXRpb24pOwogICAgaWYgKCFjb250ZW50KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgewogICAgICBzdHlsZQogICAgfSA9IGNvbnRlbnQ7CiAgICBzdHlsZS5mb250U2l6ZSA9IGBjYWxjKCR7dGhpcy4jZm9udFNpemV9cHggKiB2YXIoLS10b3RhbC1zY2FsZS1mYWN0b3IpKWA7CiAgICBzdHlsZS5jb2xvciA9IHRoaXMuY29sb3I7CiAgICBjb250ZW50LnJlcGxhY2VDaGlsZHJlbigpOwogICAgZm9yIChjb25zdCBsaW5lIG9mIHRoaXMuI2NvbnRlbnQuc3BsaXQoIlxuIikpIHsKICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGRpdi5hcHBlbmQobGluZSA/IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmUpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CiAgICAgIGNvbnRlbnQuYXBwZW5kKGRpdik7CiAgICB9CiAgICBhbm5vdGF0aW9uLnVwZGF0ZUVkaXRlZCh7CiAgICAgIHJlY3Q6IHRoaXMuZ2V0UERGUmVjdCgpLAogICAgICBwb3B1cDogdGhpcy5fdWlNYW5hZ2VyLmhhc0NvbW1lbnRNYW5hZ2VyKCkgfHwgdGhpcy5oYXNFZGl0ZWRDb21tZW50ID8gdGhpcy5jb21tZW50IDogewogICAgICAgIHRleHQ6IHRoaXMuI2NvbnRlbnQKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gY29udGVudDsKICB9CiAgcmVzZXRBbm5vdGF0aW9uRWxlbWVudChhbm5vdGF0aW9uKSB7CiAgICBzdXBlci5yZXNldEFubm90YXRpb25FbGVtZW50KGFubm90YXRpb24pOwogICAgYW5ub3RhdGlvbi5yZXNldEVkaXRlZCgpOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL2RyYXdlcnMvb3V0bGluZS5qcwoKY2xhc3MgT3V0bGluZSB7CiAgc3RhdGljIFBSRUNJU0lPTiA9IDFlLTQ7CiAgdG9TVkdQYXRoKCkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgdG9TVkdQYXRoYCBtdXN0IGJlIGltcGxlbWVudGVkLiIpOwogIH0KICBnZXQgYm94KCkgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IGdldHRlciBgYm94YCBtdXN0IGJlIGltcGxlbWVudGVkLiIpOwogIH0KICBzZXJpYWxpemUoX2Jib3gsIF9yb3RhdGlvbikgewogICAgdW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgc2VyaWFsaXplYCBtdXN0IGJlIGltcGxlbWVudGVkLiIpOwogIH0KICBzdGF0aWMgX3Jlc2NhbGUoc3JjLCB0eCwgdHksIHN4LCBzeSwgZGVzdCkgewogICAgZGVzdCB8fD0gbmV3IEZsb2F0MzJBcnJheShzcmMubGVuZ3RoKTsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHNyYy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7CiAgICAgIGRlc3RbaV0gPSB0eCArIHNyY1tpXSAqIHN4OwogICAgICBkZXN0W2kgKyAxXSA9IHR5ICsgc3JjW2kgKyAxXSAqIHN5OwogICAgfQogICAgcmV0dXJuIGRlc3Q7CiAgfQogIHN0YXRpYyBfcmVzY2FsZUFuZFN3YXAoc3JjLCB0eCwgdHksIHN4LCBzeSwgZGVzdCkgewogICAgZGVzdCB8fD0gbmV3IEZsb2F0MzJBcnJheShzcmMubGVuZ3RoKTsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHNyYy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7CiAgICAgIGRlc3RbaV0gPSB0eCArIHNyY1tpICsgMV0gKiBzeDsKICAgICAgZGVzdFtpICsgMV0gPSB0eSArIHNyY1tpXSAqIHN5OwogICAgfQogICAgcmV0dXJuIGRlc3Q7CiAgfQogIHN0YXRpYyBfdHJhbnNsYXRlKHNyYywgdHgsIHR5LCBkZXN0KSB7CiAgICBkZXN0IHx8PSBuZXcgRmxvYXQzMkFycmF5KHNyYy5sZW5ndGgpOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gc3JjLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHsKICAgICAgZGVzdFtpXSA9IHR4ICsgc3JjW2ldOwogICAgICBkZXN0W2kgKyAxXSA9IHR5ICsgc3JjW2kgKyAxXTsKICAgIH0KICAgIHJldHVybiBkZXN0OwogIH0KICBzdGF0aWMgc3ZnUm91bmQoeCkgewogICAgcmV0dXJuIE1hdGgucm91bmQoeCAqIDEwMDAwKTsKICB9CiAgc3RhdGljIF9ub3JtYWxpemVQb2ludCh4LCB5LCBwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0LCByb3RhdGlvbikgewogICAgc3dpdGNoIChyb3RhdGlvbikgewogICAgICBjYXNlIDkwOgogICAgICAgIHJldHVybiBbMSAtIHkgLyBwYXJlbnRXaWR0aCwgeCAvIHBhcmVudEhlaWdodF07CiAgICAgIGNhc2UgMTgwOgogICAgICAgIHJldHVybiBbMSAtIHggLyBwYXJlbnRXaWR0aCwgMSAtIHkgLyBwYXJlbnRIZWlnaHRdOwogICAgICBjYXNlIDI3MDoKICAgICAgICByZXR1cm4gW3kgLyBwYXJlbnRXaWR0aCwgMSAtIHggLyBwYXJlbnRIZWlnaHRdOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBbeCAvIHBhcmVudFdpZHRoLCB5IC8gcGFyZW50SGVpZ2h0XTsKICAgIH0KICB9CiAgc3RhdGljIF9ub3JtYWxpemVQYWdlUG9pbnQoeCwgeSwgcm90YXRpb24pIHsKICAgIHN3aXRjaCAocm90YXRpb24pIHsKICAgICAgY2FzZSA5MDoKICAgICAgICByZXR1cm4gWzEgLSB5LCB4XTsKICAgICAgY2FzZSAxODA6CiAgICAgICAgcmV0dXJuIFsxIC0geCwgMSAtIHldOwogICAgICBjYXNlIDI3MDoKICAgICAgICByZXR1cm4gW3ksIDEgLSB4XTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gW3gsIHldOwogICAgfQogIH0KICBzdGF0aWMgY3JlYXRlQmV6aWVyUG9pbnRzKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHsKICAgIHJldHVybiBbKHgxICsgNSAqIHgyKSAvIDYsICh5MSArIDUgKiB5MikgLyA2LCAoNSAqIHgyICsgeDMpIC8gNiwgKDUgKiB5MiArIHkzKSAvIDYsICh4MiArIHgzKSAvIDIsICh5MiArIHkzKSAvIDJdOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL2RyYXdlcnMvZnJlZWRyYXcuanMKCgpjbGFzcyBGcmVlRHJhd091dGxpbmVyIHsKICAjYm94OwogICNib3R0b20gPSBbXTsKICAjaW5uZXJNYXJnaW47CiAgI2lzTFRSOwogICN0b3AgPSBbXTsKICAjbGFzdCA9IG5ldyBGbG9hdDMyQXJyYXkoMTgpOwogICNsYXN0WDsKICAjbGFzdFk7CiAgI21pbjsKICAjbWluX2Rpc3Q7CiAgI3NjYWxlRmFjdG9yOwogICN0aGlja25lc3M7CiAgI3BvaW50cyA9IFtdOwogIHN0YXRpYyAjTUlOX0RJU1QgPSA4OwogIHN0YXRpYyAjTUlOX0RJRkYgPSAyOwogIHN0YXRpYyAjTUlOID0gRnJlZURyYXdPdXRsaW5lci4jTUlOX0RJU1QgKyBGcmVlRHJhd091dGxpbmVyLiNNSU5fRElGRjsKICBjb25zdHJ1Y3Rvcih7CiAgICB4LAogICAgeQogIH0sIGJveCwgc2NhbGVGYWN0b3IsIHRoaWNrbmVzcywgaXNMVFIsIGlubmVyTWFyZ2luID0gMCkgewogICAgdGhpcy4jYm94ID0gYm94OwogICAgdGhpcy4jdGhpY2tuZXNzID0gdGhpY2tuZXNzICogc2NhbGVGYWN0b3I7CiAgICB0aGlzLiNpc0xUUiA9IGlzTFRSOwogICAgdGhpcy4jbGFzdC5zZXQoW05hTiwgTmFOLCBOYU4sIE5hTiwgeCwgeV0sIDYpOwogICAgdGhpcy4jaW5uZXJNYXJnaW4gPSBpbm5lck1hcmdpbjsKICAgIHRoaXMuI21pbl9kaXN0ID0gRnJlZURyYXdPdXRsaW5lci4jTUlOX0RJU1QgKiBzY2FsZUZhY3RvcjsKICAgIHRoaXMuI21pbiA9IEZyZWVEcmF3T3V0bGluZXIuI01JTiAqIHNjYWxlRmFjdG9yOwogICAgdGhpcy4jc2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvcjsKICAgIHRoaXMuI3BvaW50cy5wdXNoKHgsIHkpOwogIH0KICBpc0VtcHR5KCkgewogICAgcmV0dXJuIGlzTmFOKHRoaXMuI2xhc3RbOF0pOwogIH0KICAjZ2V0TGFzdENvb3JkcygpIHsKICAgIGNvbnN0IGxhc3RUb3AgPSB0aGlzLiNsYXN0LnN1YmFycmF5KDQsIDYpOwogICAgY29uc3QgbGFzdEJvdHRvbSA9IHRoaXMuI2xhc3Quc3ViYXJyYXkoMTYsIDE4KTsKICAgIGNvbnN0IFt4LCB5LCB3aWR0aCwgaGVpZ2h0XSA9IHRoaXMuI2JveDsKICAgIHJldHVybiBbKHRoaXMuI2xhc3RYICsgKGxhc3RUb3BbMF0gLSBsYXN0Qm90dG9tWzBdKSAvIDIgLSB4KSAvIHdpZHRoLCAodGhpcy4jbGFzdFkgKyAobGFzdFRvcFsxXSAtIGxhc3RCb3R0b21bMV0pIC8gMiAtIHkpIC8gaGVpZ2h0LCAodGhpcy4jbGFzdFggKyAobGFzdEJvdHRvbVswXSAtIGxhc3RUb3BbMF0pIC8gMiAtIHgpIC8gd2lkdGgsICh0aGlzLiNsYXN0WSArIChsYXN0Qm90dG9tWzFdIC0gbGFzdFRvcFsxXSkgLyAyIC0geSkgLyBoZWlnaHRdOwogIH0KICBhZGQoewogICAgeCwKICAgIHkKICB9KSB7CiAgICB0aGlzLiNsYXN0WCA9IHg7CiAgICB0aGlzLiNsYXN0WSA9IHk7CiAgICBjb25zdCBbbGF5ZXJYLCBsYXllclksIGxheWVyV2lkdGgsIGxheWVySGVpZ2h0XSA9IHRoaXMuI2JveDsKICAgIGxldCBbeDEsIHkxLCB4MiwgeTJdID0gdGhpcy4jbGFzdC5zdWJhcnJheSg4LCAxMik7CiAgICBjb25zdCBkaWZmWCA9IHggLSB4MjsKICAgIGNvbnN0IGRpZmZZID0geSAtIHkyOwogICAgY29uc3QgZCA9IE1hdGguaHlwb3QoZGlmZlgsIGRpZmZZKTsKICAgIGlmIChkIDwgdGhpcy4jbWluKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGNvbnN0IGRpZmZEID0gZCAtIHRoaXMuI21pbl9kaXN0OwogICAgY29uc3QgSyA9IGRpZmZEIC8gZDsKICAgIGNvbnN0IHNoaWZ0WCA9IEsgKiBkaWZmWDsKICAgIGNvbnN0IHNoaWZ0WSA9IEsgKiBkaWZmWTsKICAgIGxldCB4MCA9IHgxOwogICAgbGV0IHkwID0geTE7CiAgICB4MSA9IHgyOwogICAgeTEgPSB5MjsKICAgIHgyICs9IHNoaWZ0WDsKICAgIHkyICs9IHNoaWZ0WTsKICAgIHRoaXMuI3BvaW50cz8ucHVzaCh4LCB5KTsKICAgIGNvbnN0IG5YID0gLXNoaWZ0WSAvIGRpZmZEOwogICAgY29uc3QgblkgPSBzaGlmdFggLyBkaWZmRDsKICAgIGNvbnN0IHRoWCA9IG5YICogdGhpcy4jdGhpY2tuZXNzOwogICAgY29uc3QgdGhZID0gblkgKiB0aGlzLiN0aGlja25lc3M7CiAgICB0aGlzLiNsYXN0LnNldCh0aGlzLiNsYXN0LnN1YmFycmF5KDIsIDgpLCAwKTsKICAgIHRoaXMuI2xhc3Quc2V0KFt4MiArIHRoWCwgeTIgKyB0aFldLCA0KTsKICAgIHRoaXMuI2xhc3Quc2V0KHRoaXMuI2xhc3Quc3ViYXJyYXkoMTQsIDE4KSwgMTIpOwogICAgdGhpcy4jbGFzdC5zZXQoW3gyIC0gdGhYLCB5MiAtIHRoWV0sIDE2KTsKICAgIGlmIChpc05hTih0aGlzLiNsYXN0WzZdKSkgewogICAgICBpZiAodGhpcy4jdG9wLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuI2xhc3Quc2V0KFt4MSArIHRoWCwgeTEgKyB0aFldLCAyKTsKICAgICAgICB0aGlzLiN0b3AucHVzaChOYU4sIE5hTiwgTmFOLCBOYU4sICh4MSArIHRoWCAtIGxheWVyWCkgLyBsYXllcldpZHRoLCAoeTEgKyB0aFkgLSBsYXllclkpIC8gbGF5ZXJIZWlnaHQpOwogICAgICAgIHRoaXMuI2xhc3Quc2V0KFt4MSAtIHRoWCwgeTEgLSB0aFldLCAxNCk7CiAgICAgICAgdGhpcy4jYm90dG9tLnB1c2goTmFOLCBOYU4sIE5hTiwgTmFOLCAoeDEgLSB0aFggLSBsYXllclgpIC8gbGF5ZXJXaWR0aCwgKHkxIC0gdGhZIC0gbGF5ZXJZKSAvIGxheWVySGVpZ2h0KTsKICAgICAgfQogICAgICB0aGlzLiNsYXN0LnNldChbeDAsIHkwLCB4MSwgeTEsIHgyLCB5Ml0sIDYpOwogICAgICByZXR1cm4gIXRoaXMuaXNFbXB0eSgpOwogICAgfQogICAgdGhpcy4jbGFzdC5zZXQoW3gwLCB5MCwgeDEsIHkxLCB4MiwgeTJdLCA2KTsKICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hYnMoTWF0aC5hdGFuMih5MCAtIHkxLCB4MCAtIHgxKSAtIE1hdGguYXRhbjIoc2hpZnRZLCBzaGlmdFgpKTsKICAgIGlmIChhbmdsZSA8IE1hdGguUEkgLyAyKSB7CiAgICAgIFt4MSwgeTEsIHgyLCB5Ml0gPSB0aGlzLiNsYXN0LnN1YmFycmF5KDIsIDYpOwogICAgICB0aGlzLiN0b3AucHVzaChOYU4sIE5hTiwgTmFOLCBOYU4sICgoeDEgKyB4MikgLyAyIC0gbGF5ZXJYKSAvIGxheWVyV2lkdGgsICgoeTEgKyB5MikgLyAyIC0gbGF5ZXJZKSAvIGxheWVySGVpZ2h0KTsKICAgICAgW3gxLCB5MSwgeDAsIHkwXSA9IHRoaXMuI2xhc3Quc3ViYXJyYXkoMTQsIDE4KTsKICAgICAgdGhpcy4jYm90dG9tLnB1c2goTmFOLCBOYU4sIE5hTiwgTmFOLCAoKHgwICsgeDEpIC8gMiAtIGxheWVyWCkgLyBsYXllcldpZHRoLCAoKHkwICsgeTEpIC8gMiAtIGxheWVyWSkgLyBsYXllckhlaWdodCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgW3gwLCB5MCwgeDEsIHkxLCB4MiwgeTJdID0gdGhpcy4jbGFzdC5zdWJhcnJheSgwLCA2KTsKICAgIHRoaXMuI3RvcC5wdXNoKCgoeDAgKyA1ICogeDEpIC8gNiAtIGxheWVyWCkgLyBsYXllcldpZHRoLCAoKHkwICsgNSAqIHkxKSAvIDYgLSBsYXllclkpIC8gbGF5ZXJIZWlnaHQsICgoNSAqIHgxICsgeDIpIC8gNiAtIGxheWVyWCkgLyBsYXllcldpZHRoLCAoKDUgKiB5MSArIHkyKSAvIDYgLSBsYXllclkpIC8gbGF5ZXJIZWlnaHQsICgoeDEgKyB4MikgLyAyIC0gbGF5ZXJYKSAvIGxheWVyV2lkdGgsICgoeTEgKyB5MikgLyAyIC0gbGF5ZXJZKSAvIGxheWVySGVpZ2h0KTsKICAgIFt4MiwgeTIsIHgxLCB5MSwgeDAsIHkwXSA9IHRoaXMuI2xhc3Quc3ViYXJyYXkoMTIsIDE4KTsKICAgIHRoaXMuI2JvdHRvbS5wdXNoKCgoeDAgKyA1ICogeDEpIC8gNiAtIGxheWVyWCkgLyBsYXllcldpZHRoLCAoKHkwICsgNSAqIHkxKSAvIDYgLSBsYXllclkpIC8gbGF5ZXJIZWlnaHQsICgoNSAqIHgxICsgeDIpIC8gNiAtIGxheWVyWCkgLyBsYXllcldpZHRoLCAoKDUgKiB5MSArIHkyKSAvIDYgLSBsYXllclkpIC8gbGF5ZXJIZWlnaHQsICgoeDEgKyB4MikgLyAyIC0gbGF5ZXJYKSAvIGxheWVyV2lkdGgsICgoeTEgKyB5MikgLyAyIC0gbGF5ZXJZKSAvIGxheWVySGVpZ2h0KTsKICAgIHJldHVybiB0cnVlOwogIH0KICB0b1NWR1BhdGgoKSB7CiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogICAgY29uc3QgdG9wID0gdGhpcy4jdG9wOwogICAgY29uc3QgYm90dG9tID0gdGhpcy4jYm90dG9tOwogICAgaWYgKGlzTmFOKHRoaXMuI2xhc3RbNl0pICYmICF0aGlzLmlzRW1wdHkoKSkgewogICAgICByZXR1cm4gdGhpcy4jdG9TVkdQYXRoVHdvUG9pbnRzKCk7CiAgICB9CiAgICBjb25zdCBidWZmZXIgPSBbXTsKICAgIGJ1ZmZlci5wdXNoKGBNJHt0b3BbNF19ICR7dG9wWzVdfWApOwogICAgZm9yIChsZXQgaSA9IDY7IGkgPCB0b3AubGVuZ3RoOyBpICs9IDYpIHsKICAgICAgaWYgKGlzTmFOKHRvcFtpXSkpIHsKICAgICAgICBidWZmZXIucHVzaChgTCR7dG9wW2kgKyA0XX0gJHt0b3BbaSArIDVdfWApOwogICAgICB9IGVsc2UgewogICAgICAgIGJ1ZmZlci5wdXNoKGBDJHt0b3BbaV19ICR7dG9wW2kgKyAxXX0gJHt0b3BbaSArIDJdfSAke3RvcFtpICsgM119ICR7dG9wW2kgKyA0XX0gJHt0b3BbaSArIDVdfWApOwogICAgICB9CiAgICB9CiAgICB0aGlzLiN0b1NWR1BhdGhFbmQoYnVmZmVyKTsKICAgIGZvciAobGV0IGkgPSBib3R0b20ubGVuZ3RoIC0gNjsgaSA+PSA2OyBpIC09IDYpIHsKICAgICAgaWYgKGlzTmFOKGJvdHRvbVtpXSkpIHsKICAgICAgICBidWZmZXIucHVzaChgTCR7Ym90dG9tW2kgKyA0XX0gJHtib3R0b21baSArIDVdfWApOwogICAgICB9IGVsc2UgewogICAgICAgIGJ1ZmZlci5wdXNoKGBDJHtib3R0b21baV19ICR7Ym90dG9tW2kgKyAxXX0gJHtib3R0b21baSArIDJdfSAke2JvdHRvbVtpICsgM119ICR7Ym90dG9tW2kgKyA0XX0gJHtib3R0b21baSArIDVdfWApOwogICAgICB9CiAgICB9CiAgICB0aGlzLiN0b1NWR1BhdGhTdGFydChidWZmZXIpOwogICAgcmV0dXJuIGJ1ZmZlci5qb2luKCIgIik7CiAgfQogICN0b1NWR1BhdGhUd29Qb2ludHMoKSB7CiAgICBjb25zdCBbeCwgeSwgd2lkdGgsIGhlaWdodF0gPSB0aGlzLiNib3g7CiAgICBjb25zdCBbbGFzdFRvcFgsIGxhc3RUb3BZLCBsYXN0Qm90dG9tWCwgbGFzdEJvdHRvbVldID0gdGhpcy4jZ2V0TGFzdENvb3JkcygpOwogICAgcmV0dXJuIGBNJHsodGhpcy4jbGFzdFsyXSAtIHgpIC8gd2lkdGh9ICR7KHRoaXMuI2xhc3RbM10gLSB5KSAvIGhlaWdodH0gTCR7KHRoaXMuI2xhc3RbNF0gLSB4KSAvIHdpZHRofSAkeyh0aGlzLiNsYXN0WzVdIC0geSkgLyBoZWlnaHR9IEwke2xhc3RUb3BYfSAke2xhc3RUb3BZfSBMJHtsYXN0Qm90dG9tWH0gJHtsYXN0Qm90dG9tWX0gTCR7KHRoaXMuI2xhc3RbMTZdIC0geCkgLyB3aWR0aH0gJHsodGhpcy4jbGFzdFsxN10gLSB5KSAvIGhlaWdodH0gTCR7KHRoaXMuI2xhc3RbMTRdIC0geCkgLyB3aWR0aH0gJHsodGhpcy4jbGFzdFsxNV0gLSB5KSAvIGhlaWdodH0gWmA7CiAgfQogICN0b1NWR1BhdGhTdGFydChidWZmZXIpIHsKICAgIGNvbnN0IGJvdHRvbSA9IHRoaXMuI2JvdHRvbTsKICAgIGJ1ZmZlci5wdXNoKGBMJHtib3R0b21bNF19ICR7Ym90dG9tWzVdfSBaYCk7CiAgfQogICN0b1NWR1BhdGhFbmQoYnVmZmVyKSB7CiAgICBjb25zdCBbeCwgeSwgd2lkdGgsIGhlaWdodF0gPSB0aGlzLiNib3g7CiAgICBjb25zdCBsYXN0VG9wID0gdGhpcy4jbGFzdC5zdWJhcnJheSg0LCA2KTsKICAgIGNvbnN0IGxhc3RCb3R0b20gPSB0aGlzLiNsYXN0LnN1YmFycmF5KDE2LCAxOCk7CiAgICBjb25zdCBbbGFzdFRvcFgsIGxhc3RUb3BZLCBsYXN0Qm90dG9tWCwgbGFzdEJvdHRvbVldID0gdGhpcy4jZ2V0TGFzdENvb3JkcygpOwogICAgYnVmZmVyLnB1c2goYEwkeyhsYXN0VG9wWzBdIC0geCkgLyB3aWR0aH0gJHsobGFzdFRvcFsxXSAtIHkpIC8gaGVpZ2h0fSBMJHtsYXN0VG9wWH0gJHtsYXN0VG9wWX0gTCR7bGFzdEJvdHRvbVh9ICR7bGFzdEJvdHRvbVl9IEwkeyhsYXN0Qm90dG9tWzBdIC0geCkgLyB3aWR0aH0gJHsobGFzdEJvdHRvbVsxXSAtIHkpIC8gaGVpZ2h0fWApOwogIH0KICBuZXdGcmVlRHJhd091dGxpbmUob3V0bGluZSwgcG9pbnRzLCBib3gsIHNjYWxlRmFjdG9yLCBpbm5lck1hcmdpbiwgaXNMVFIpIHsKICAgIHJldHVybiBuZXcgRnJlZURyYXdPdXRsaW5lKG91dGxpbmUsIHBvaW50cywgYm94LCBzY2FsZUZhY3RvciwgaW5uZXJNYXJnaW4sIGlzTFRSKTsKICB9CiAgZ2V0T3V0bGluZXMoKSB7CiAgICBjb25zdCB0b3AgPSB0aGlzLiN0b3A7CiAgICBjb25zdCBib3R0b20gPSB0aGlzLiNib3R0b207CiAgICBjb25zdCBsYXN0ID0gdGhpcy4jbGFzdDsKICAgIGNvbnN0IFtsYXllclgsIGxheWVyWSwgbGF5ZXJXaWR0aCwgbGF5ZXJIZWlnaHRdID0gdGhpcy4jYm94OwogICAgY29uc3QgcG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheSgodGhpcy4jcG9pbnRzPy5sZW5ndGggPz8gMCkgKyAyKTsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHBvaW50cy5sZW5ndGggLSAyOyBpIDwgaWk7IGkgKz0gMikgewogICAgICBwb2ludHNbaV0gPSAodGhpcy4jcG9pbnRzW2ldIC0gbGF5ZXJYKSAvIGxheWVyV2lkdGg7CiAgICAgIHBvaW50c1tpICsgMV0gPSAodGhpcy4jcG9pbnRzW2kgKyAxXSAtIGxheWVyWSkgLyBsYXllckhlaWdodDsKICAgIH0KICAgIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMl0gPSAodGhpcy4jbGFzdFggLSBsYXllclgpIC8gbGF5ZXJXaWR0aDsKICAgIHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0gPSAodGhpcy4jbGFzdFkgLSBsYXllclkpIC8gbGF5ZXJIZWlnaHQ7CiAgICBpZiAoaXNOYU4obGFzdFs2XSkgJiYgIXRoaXMuaXNFbXB0eSgpKSB7CiAgICAgIHJldHVybiB0aGlzLiNnZXRPdXRsaW5lVHdvUG9pbnRzKHBvaW50cyk7CiAgICB9CiAgICBjb25zdCBvdXRsaW5lID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLiN0b3AubGVuZ3RoICsgMjQgKyB0aGlzLiNib3R0b20ubGVuZ3RoKTsKICAgIGxldCBOID0gdG9wLmxlbmd0aDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgaSArPSAyKSB7CiAgICAgIGlmIChpc05hTih0b3BbaV0pKSB7CiAgICAgICAgb3V0bGluZVtpXSA9IG91dGxpbmVbaSArIDFdID0gTmFOOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIG91dGxpbmVbaV0gPSB0b3BbaV07CiAgICAgIG91dGxpbmVbaSArIDFdID0gdG9wW2kgKyAxXTsKICAgIH0KICAgIE4gPSB0aGlzLiNnZXRPdXRsaW5lRW5kKG91dGxpbmUsIE4pOwogICAgZm9yIChsZXQgaSA9IGJvdHRvbS5sZW5ndGggLSA2OyBpID49IDY7IGkgLT0gNikgewogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDY7IGogKz0gMikgewogICAgICAgIGlmIChpc05hTihib3R0b21baSArIGpdKSkgewogICAgICAgICAgb3V0bGluZVtOXSA9IG91dGxpbmVbTiArIDFdID0gTmFOOwogICAgICAgICAgTiArPSAyOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIG91dGxpbmVbTl0gPSBib3R0b21baSArIGpdOwogICAgICAgIG91dGxpbmVbTiArIDFdID0gYm90dG9tW2kgKyBqICsgMV07CiAgICAgICAgTiArPSAyOwogICAgICB9CiAgICB9CiAgICB0aGlzLiNnZXRPdXRsaW5lU3RhcnQob3V0bGluZSwgTik7CiAgICByZXR1cm4gdGhpcy5uZXdGcmVlRHJhd091dGxpbmUob3V0bGluZSwgcG9pbnRzLCB0aGlzLiNib3gsIHRoaXMuI3NjYWxlRmFjdG9yLCB0aGlzLiNpbm5lck1hcmdpbiwgdGhpcy4jaXNMVFIpOwogIH0KICAjZ2V0T3V0bGluZVR3b1BvaW50cyhwb2ludHMpIHsKICAgIGNvbnN0IGxhc3QgPSB0aGlzLiNsYXN0OwogICAgY29uc3QgW2xheWVyWCwgbGF5ZXJZLCBsYXllcldpZHRoLCBsYXllckhlaWdodF0gPSB0aGlzLiNib3g7CiAgICBjb25zdCBbbGFzdFRvcFgsIGxhc3RUb3BZLCBsYXN0Qm90dG9tWCwgbGFzdEJvdHRvbVldID0gdGhpcy4jZ2V0TGFzdENvb3JkcygpOwogICAgY29uc3Qgb3V0bGluZSA9IG5ldyBGbG9hdDMyQXJyYXkoMzYpOwogICAgb3V0bGluZS5zZXQoW05hTiwgTmFOLCBOYU4sIE5hTiwgKGxhc3RbMl0gLSBsYXllclgpIC8gbGF5ZXJXaWR0aCwgKGxhc3RbM10gLSBsYXllclkpIC8gbGF5ZXJIZWlnaHQsIE5hTiwgTmFOLCBOYU4sIE5hTiwgKGxhc3RbNF0gLSBsYXllclgpIC8gbGF5ZXJXaWR0aCwgKGxhc3RbNV0gLSBsYXllclkpIC8gbGF5ZXJIZWlnaHQsIE5hTiwgTmFOLCBOYU4sIE5hTiwgbGFzdFRvcFgsIGxhc3RUb3BZLCBOYU4sIE5hTiwgTmFOLCBOYU4sIGxhc3RCb3R0b21YLCBsYXN0Qm90dG9tWSwgTmFOLCBOYU4sIE5hTiwgTmFOLCAobGFzdFsxNl0gLSBsYXllclgpIC8gbGF5ZXJXaWR0aCwgKGxhc3RbMTddIC0gbGF5ZXJZKSAvIGxheWVySGVpZ2h0LCBOYU4sIE5hTiwgTmFOLCBOYU4sIChsYXN0WzE0XSAtIGxheWVyWCkgLyBsYXllcldpZHRoLCAobGFzdFsxNV0gLSBsYXllclkpIC8gbGF5ZXJIZWlnaHRdLCAwKTsKICAgIHJldHVybiB0aGlzLm5ld0ZyZWVEcmF3T3V0bGluZShvdXRsaW5lLCBwb2ludHMsIHRoaXMuI2JveCwgdGhpcy4jc2NhbGVGYWN0b3IsIHRoaXMuI2lubmVyTWFyZ2luLCB0aGlzLiNpc0xUUik7CiAgfQogICNnZXRPdXRsaW5lU3RhcnQob3V0bGluZSwgcG9zKSB7CiAgICBjb25zdCBib3R0b20gPSB0aGlzLiNib3R0b207CiAgICBvdXRsaW5lLnNldChbTmFOLCBOYU4sIE5hTiwgTmFOLCBib3R0b21bNF0sIGJvdHRvbVs1XV0sIHBvcyk7CiAgICByZXR1cm4gcG9zICs9IDY7CiAgfQogICNnZXRPdXRsaW5lRW5kKG91dGxpbmUsIHBvcykgewogICAgY29uc3QgbGFzdFRvcCA9IHRoaXMuI2xhc3Quc3ViYXJyYXkoNCwgNik7CiAgICBjb25zdCBsYXN0Qm90dG9tID0gdGhpcy4jbGFzdC5zdWJhcnJheSgxNiwgMTgpOwogICAgY29uc3QgW2xheWVyWCwgbGF5ZXJZLCBsYXllcldpZHRoLCBsYXllckhlaWdodF0gPSB0aGlzLiNib3g7CiAgICBjb25zdCBbbGFzdFRvcFgsIGxhc3RUb3BZLCBsYXN0Qm90dG9tWCwgbGFzdEJvdHRvbVldID0gdGhpcy4jZ2V0TGFzdENvb3JkcygpOwogICAgb3V0bGluZS5zZXQoW05hTiwgTmFOLCBOYU4sIE5hTiwgKGxhc3RUb3BbMF0gLSBsYXllclgpIC8gbGF5ZXJXaWR0aCwgKGxhc3RUb3BbMV0gLSBsYXllclkpIC8gbGF5ZXJIZWlnaHQsIE5hTiwgTmFOLCBOYU4sIE5hTiwgbGFzdFRvcFgsIGxhc3RUb3BZLCBOYU4sIE5hTiwgTmFOLCBOYU4sIGxhc3RCb3R0b21YLCBsYXN0Qm90dG9tWSwgTmFOLCBOYU4sIE5hTiwgTmFOLCAobGFzdEJvdHRvbVswXSAtIGxheWVyWCkgLyBsYXllcldpZHRoLCAobGFzdEJvdHRvbVsxXSAtIGxheWVyWSkgLyBsYXllckhlaWdodF0sIHBvcyk7CiAgICByZXR1cm4gcG9zICs9IDI0OwogIH0KfQpjbGFzcyBGcmVlRHJhd091dGxpbmUgZXh0ZW5kcyBPdXRsaW5lIHsKICAjYm94OwogICNiYm94ID0gbmV3IEZsb2F0MzJBcnJheSg0KTsKICAjaW5uZXJNYXJnaW47CiAgI2lzTFRSOwogICNwb2ludHM7CiAgI3NjYWxlRmFjdG9yOwogICNvdXRsaW5lOwogIGNvbnN0cnVjdG9yKG91dGxpbmUsIHBvaW50cywgYm94LCBzY2FsZUZhY3RvciwgaW5uZXJNYXJnaW4sIGlzTFRSKSB7CiAgICBzdXBlcigpOwogICAgdGhpcy4jb3V0bGluZSA9IG91dGxpbmU7CiAgICB0aGlzLiNwb2ludHMgPSBwb2ludHM7CiAgICB0aGlzLiNib3ggPSBib3g7CiAgICB0aGlzLiNzY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yOwogICAgdGhpcy4jaW5uZXJNYXJnaW4gPSBpbm5lck1hcmdpbjsKICAgIHRoaXMuI2lzTFRSID0gaXNMVFI7CiAgICB0aGlzLmZpcnN0UG9pbnQgPSBbTmFOLCBOYU5dOwogICAgdGhpcy5sYXN0UG9pbnQgPSBbTmFOLCBOYU5dOwogICAgdGhpcy4jY29tcHV0ZU1pbk1heChpc0xUUik7CiAgICBjb25zdCBbeCwgeSwgd2lkdGgsIGhlaWdodF0gPSB0aGlzLiNiYm94OwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gb3V0bGluZS5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7CiAgICAgIG91dGxpbmVbaV0gPSAob3V0bGluZVtpXSAtIHgpIC8gd2lkdGg7CiAgICAgIG91dGxpbmVbaSArIDFdID0gKG91dGxpbmVbaSArIDFdIC0geSkgLyBoZWlnaHQ7CiAgICB9CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikgewogICAgICBwb2ludHNbaV0gPSAocG9pbnRzW2ldIC0geCkgLyB3aWR0aDsKICAgICAgcG9pbnRzW2kgKyAxXSA9IChwb2ludHNbaSArIDFdIC0geSkgLyBoZWlnaHQ7CiAgICB9CiAgfQogIHRvU1ZHUGF0aCgpIHsKICAgIGNvbnN0IGJ1ZmZlciA9IFtgTSR7dGhpcy4jb3V0bGluZVs0XX0gJHt0aGlzLiNvdXRsaW5lWzVdfWBdOwogICAgZm9yIChsZXQgaSA9IDYsIGlpID0gdGhpcy4jb3V0bGluZS5sZW5ndGg7IGkgPCBpaTsgaSArPSA2KSB7CiAgICAgIGlmIChpc05hTih0aGlzLiNvdXRsaW5lW2ldKSkgewogICAgICAgIGJ1ZmZlci5wdXNoKGBMJHt0aGlzLiNvdXRsaW5lW2kgKyA0XX0gJHt0aGlzLiNvdXRsaW5lW2kgKyA1XX1gKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBidWZmZXIucHVzaChgQyR7dGhpcy4jb3V0bGluZVtpXX0gJHt0aGlzLiNvdXRsaW5lW2kgKyAxXX0gJHt0aGlzLiNvdXRsaW5lW2kgKyAyXX0gJHt0aGlzLiNvdXRsaW5lW2kgKyAzXX0gJHt0aGlzLiNvdXRsaW5lW2kgKyA0XX0gJHt0aGlzLiNvdXRsaW5lW2kgKyA1XX1gKTsKICAgIH0KICAgIGJ1ZmZlci5wdXNoKCJaIik7CiAgICByZXR1cm4gYnVmZmVyLmpvaW4oIiAiKTsKICB9CiAgc2VyaWFsaXplKFtibFgsIGJsWSwgdHJYLCB0clldLCByb3RhdGlvbikgewogICAgY29uc3Qgd2lkdGggPSB0clggLSBibFg7CiAgICBjb25zdCBoZWlnaHQgPSB0clkgLSBibFk7CiAgICBsZXQgb3V0bGluZTsKICAgIGxldCBwb2ludHM7CiAgICBzd2l0Y2ggKHJvdGF0aW9uKSB7CiAgICAgIGNhc2UgMDoKICAgICAgICBvdXRsaW5lID0gT3V0bGluZS5fcmVzY2FsZSh0aGlzLiNvdXRsaW5lLCBibFgsIHRyWSwgd2lkdGgsIC1oZWlnaHQpOwogICAgICAgIHBvaW50cyA9IE91dGxpbmUuX3Jlc2NhbGUodGhpcy4jcG9pbnRzLCBibFgsIHRyWSwgd2lkdGgsIC1oZWlnaHQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDkwOgogICAgICAgIG91dGxpbmUgPSBPdXRsaW5lLl9yZXNjYWxlQW5kU3dhcCh0aGlzLiNvdXRsaW5lLCBibFgsIGJsWSwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgcG9pbnRzID0gT3V0bGluZS5fcmVzY2FsZUFuZFN3YXAodGhpcy4jcG9pbnRzLCBibFgsIGJsWSwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTgwOgogICAgICAgIG91dGxpbmUgPSBPdXRsaW5lLl9yZXNjYWxlKHRoaXMuI291dGxpbmUsIHRyWCwgYmxZLCAtd2lkdGgsIGhlaWdodCk7CiAgICAgICAgcG9pbnRzID0gT3V0bGluZS5fcmVzY2FsZSh0aGlzLiNwb2ludHMsIHRyWCwgYmxZLCAtd2lkdGgsIGhlaWdodCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjcwOgogICAgICAgIG91dGxpbmUgPSBPdXRsaW5lLl9yZXNjYWxlQW5kU3dhcCh0aGlzLiNvdXRsaW5lLCB0clgsIHRyWSwgLXdpZHRoLCAtaGVpZ2h0KTsKICAgICAgICBwb2ludHMgPSBPdXRsaW5lLl9yZXNjYWxlQW5kU3dhcCh0aGlzLiNwb2ludHMsIHRyWCwgdHJZLCAtd2lkdGgsIC1oZWlnaHQpOwogICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgb3V0bGluZTogQXJyYXkuZnJvbShvdXRsaW5lKSwKICAgICAgcG9pbnRzOiBbQXJyYXkuZnJvbShwb2ludHMpXQogICAgfTsKICB9CiAgI2NvbXB1dGVNaW5NYXgoaXNMVFIpIHsKICAgIGNvbnN0IG91dGxpbmUgPSB0aGlzLiNvdXRsaW5lOwogICAgbGV0IGxhc3RYID0gb3V0bGluZVs0XTsKICAgIGxldCBsYXN0WSA9IG91dGxpbmVbNV07CiAgICBjb25zdCBtaW5NYXggPSBbbGFzdFgsIGxhc3RZLCBsYXN0WCwgbGFzdFldOwogICAgbGV0IGZpcnN0UG9pbnRYID0gbGFzdFg7CiAgICBsZXQgZmlyc3RQb2ludFkgPSBsYXN0WTsKICAgIGxldCBsYXN0UG9pbnRYID0gbGFzdFg7CiAgICBsZXQgbGFzdFBvaW50WSA9IGxhc3RZOwogICAgY29uc3QgbHRyQ2FsbGJhY2sgPSBpc0xUUiA/IE1hdGgubWF4IDogTWF0aC5taW47CiAgICBjb25zdCBiZXppZXJCYm94ID0gbmV3IEZsb2F0MzJBcnJheSg0KTsKICAgIGZvciAobGV0IGkgPSA2LCBpaSA9IG91dGxpbmUubGVuZ3RoOyBpIDwgaWk7IGkgKz0gNikgewogICAgICBjb25zdCB4ID0gb3V0bGluZVtpICsgNF0sCiAgICAgICAgeSA9IG91dGxpbmVbaSArIDVdOwogICAgICBpZiAoaXNOYU4ob3V0bGluZVtpXSkpIHsKICAgICAgICBVdGlsLnBvaW50Qm91bmRpbmdCb3goeCwgeSwgbWluTWF4KTsKICAgICAgICBpZiAoZmlyc3RQb2ludFkgPiB5KSB7CiAgICAgICAgICBmaXJzdFBvaW50WCA9IHg7CiAgICAgICAgICBmaXJzdFBvaW50WSA9IHk7CiAgICAgICAgfSBlbHNlIGlmIChmaXJzdFBvaW50WSA9PT0geSkgewogICAgICAgICAgZmlyc3RQb2ludFggPSBsdHJDYWxsYmFjayhmaXJzdFBvaW50WCwgeCk7CiAgICAgICAgfQogICAgICAgIGlmIChsYXN0UG9pbnRZIDwgeSkgewogICAgICAgICAgbGFzdFBvaW50WCA9IHg7CiAgICAgICAgICBsYXN0UG9pbnRZID0geTsKICAgICAgICB9IGVsc2UgaWYgKGxhc3RQb2ludFkgPT09IHkpIHsKICAgICAgICAgIGxhc3RQb2ludFggPSBsdHJDYWxsYmFjayhsYXN0UG9pbnRYLCB4KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmV6aWVyQmJveFswXSA9IGJlemllckJib3hbMV0gPSBJbmZpbml0eTsKICAgICAgICBiZXppZXJCYm94WzJdID0gYmV6aWVyQmJveFszXSA9IC1JbmZpbml0eTsKICAgICAgICBVdGlsLmJlemllckJvdW5kaW5nQm94KGxhc3RYLCBsYXN0WSwgLi4ub3V0bGluZS5zbGljZShpLCBpICsgNiksIGJlemllckJib3gpOwogICAgICAgIFV0aWwucmVjdEJvdW5kaW5nQm94KGJlemllckJib3hbMF0sIGJlemllckJib3hbMV0sIGJlemllckJib3hbMl0sIGJlemllckJib3hbM10sIG1pbk1heCk7CiAgICAgICAgaWYgKGZpcnN0UG9pbnRZID4gYmV6aWVyQmJveFsxXSkgewogICAgICAgICAgZmlyc3RQb2ludFggPSBiZXppZXJCYm94WzBdOwogICAgICAgICAgZmlyc3RQb2ludFkgPSBiZXppZXJCYm94WzFdOwogICAgICAgIH0gZWxzZSBpZiAoZmlyc3RQb2ludFkgPT09IGJlemllckJib3hbMV0pIHsKICAgICAgICAgIGZpcnN0UG9pbnRYID0gbHRyQ2FsbGJhY2soZmlyc3RQb2ludFgsIGJlemllckJib3hbMF0pOwogICAgICAgIH0KICAgICAgICBpZiAobGFzdFBvaW50WSA8IGJlemllckJib3hbM10pIHsKICAgICAgICAgIGxhc3RQb2ludFggPSBiZXppZXJCYm94WzJdOwogICAgICAgICAgbGFzdFBvaW50WSA9IGJlemllckJib3hbM107CiAgICAgICAgfSBlbHNlIGlmIChsYXN0UG9pbnRZID09PSBiZXppZXJCYm94WzNdKSB7CiAgICAgICAgICBsYXN0UG9pbnRYID0gbHRyQ2FsbGJhY2sobGFzdFBvaW50WCwgYmV6aWVyQmJveFsyXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxhc3RYID0geDsKICAgICAgbGFzdFkgPSB5OwogICAgfQogICAgY29uc3QgYmJveCA9IHRoaXMuI2Jib3g7CiAgICBiYm94WzBdID0gbWluTWF4WzBdIC0gdGhpcy4jaW5uZXJNYXJnaW47CiAgICBiYm94WzFdID0gbWluTWF4WzFdIC0gdGhpcy4jaW5uZXJNYXJnaW47CiAgICBiYm94WzJdID0gbWluTWF4WzJdIC0gbWluTWF4WzBdICsgMiAqIHRoaXMuI2lubmVyTWFyZ2luOwogICAgYmJveFszXSA9IG1pbk1heFszXSAtIG1pbk1heFsxXSArIDIgKiB0aGlzLiNpbm5lck1hcmdpbjsKICAgIHRoaXMuZmlyc3RQb2ludCA9IFtmaXJzdFBvaW50WCwgZmlyc3RQb2ludFldOwogICAgdGhpcy5sYXN0UG9pbnQgPSBbbGFzdFBvaW50WCwgbGFzdFBvaW50WV07CiAgfQogIGdldCBib3goKSB7CiAgICByZXR1cm4gdGhpcy4jYmJveDsKICB9CiAgbmV3T3V0bGluZXIocG9pbnQsIGJveCwgc2NhbGVGYWN0b3IsIHRoaWNrbmVzcywgaXNMVFIsIGlubmVyTWFyZ2luID0gMCkgewogICAgcmV0dXJuIG5ldyBGcmVlRHJhd091dGxpbmVyKHBvaW50LCBib3gsIHNjYWxlRmFjdG9yLCB0aGlja25lc3MsIGlzTFRSLCBpbm5lck1hcmdpbik7CiAgfQogIGdldE5ld091dGxpbmUodGhpY2tuZXNzLCBpbm5lck1hcmdpbikgewogICAgY29uc3QgW3gsIHksIHdpZHRoLCBoZWlnaHRdID0gdGhpcy4jYmJveDsKICAgIGNvbnN0IFtsYXllclgsIGxheWVyWSwgbGF5ZXJXaWR0aCwgbGF5ZXJIZWlnaHRdID0gdGhpcy4jYm94OwogICAgY29uc3Qgc3ggPSB3aWR0aCAqIGxheWVyV2lkdGg7CiAgICBjb25zdCBzeSA9IGhlaWdodCAqIGxheWVySGVpZ2h0OwogICAgY29uc3QgdHggPSB4ICogbGF5ZXJXaWR0aCArIGxheWVyWDsKICAgIGNvbnN0IHR5ID0geSAqIGxheWVySGVpZ2h0ICsgbGF5ZXJZOwogICAgY29uc3Qgb3V0bGluZXIgPSB0aGlzLm5ld091dGxpbmVyKHsKICAgICAgeDogdGhpcy4jcG9pbnRzWzBdICogc3ggKyB0eCwKICAgICAgeTogdGhpcy4jcG9pbnRzWzFdICogc3kgKyB0eQogICAgfSwgdGhpcy4jYm94LCB0aGlzLiNzY2FsZUZhY3RvciwgdGhpY2tuZXNzLCB0aGlzLiNpc0xUUiwgaW5uZXJNYXJnaW4gPz8gdGhpcy4jaW5uZXJNYXJnaW4pOwogICAgZm9yIChsZXQgaSA9IDI7IGkgPCB0aGlzLiNwb2ludHMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgb3V0bGluZXIuYWRkKHsKICAgICAgICB4OiB0aGlzLiNwb2ludHNbaV0gKiBzeCArIHR4LAogICAgICAgIHk6IHRoaXMuI3BvaW50c1tpICsgMV0gKiBzeSArIHR5CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIG91dGxpbmVyLmdldE91dGxpbmVzKCk7CiAgfQp9Cgo7Ly8gLi9zcmMvZGlzcGxheS9lZGl0b3IvZHJhd2Vycy9oaWdobGlnaHQuanMKCgoKY2xhc3MgSGlnaGxpZ2h0T3V0bGluZXIgewogICNib3g7CiAgI2ZpcnN0UG9pbnQ7CiAgI2xhc3RQb2ludDsKICAjdmVydGljYWxFZGdlcyA9IFtdOwogICNpbnRlcnZhbHMgPSBbXTsKICBjb25zdHJ1Y3Rvcihib3hlcywgYm9yZGVyV2lkdGggPSAwLCBpbm5lck1hcmdpbiA9IDAsIGlzTFRSID0gdHJ1ZSkgewogICAgY29uc3QgbWluTWF4ID0gW0luZmluaXR5LCBJbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHldOwogICAgY29uc3QgTlVNQkVSX09GX0RJR0lUUyA9IDQ7CiAgICBjb25zdCBFUFNJTE9OID0gMTAgKiogLU5VTUJFUl9PRl9ESUdJVFM7CiAgICBmb3IgKGNvbnN0IHsKICAgICAgeCwKICAgICAgeSwKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfSBvZiBib3hlcykgewogICAgICBjb25zdCB4MSA9IE1hdGguZmxvb3IoKHggLSBib3JkZXJXaWR0aCkgLyBFUFNJTE9OKSAqIEVQU0lMT047CiAgICAgIGNvbnN0IHgyID0gTWF0aC5jZWlsKCh4ICsgd2lkdGggKyBib3JkZXJXaWR0aCkgLyBFUFNJTE9OKSAqIEVQU0lMT047CiAgICAgIGNvbnN0IHkxID0gTWF0aC5mbG9vcigoeSAtIGJvcmRlcldpZHRoKSAvIEVQU0lMT04pICogRVBTSUxPTjsKICAgICAgY29uc3QgeTIgPSBNYXRoLmNlaWwoKHkgKyBoZWlnaHQgKyBib3JkZXJXaWR0aCkgLyBFUFNJTE9OKSAqIEVQU0lMT047CiAgICAgIGNvbnN0IGxlZnQgPSBbeDEsIHkxLCB5MiwgdHJ1ZV07CiAgICAgIGNvbnN0IHJpZ2h0ID0gW3gyLCB5MSwgeTIsIGZhbHNlXTsKICAgICAgdGhpcy4jdmVydGljYWxFZGdlcy5wdXNoKGxlZnQsIHJpZ2h0KTsKICAgICAgVXRpbC5yZWN0Qm91bmRpbmdCb3goeDEsIHkxLCB4MiwgeTIsIG1pbk1heCk7CiAgICB9CiAgICBjb25zdCBiYm94V2lkdGggPSBtaW5NYXhbMl0gLSBtaW5NYXhbMF0gKyAyICogaW5uZXJNYXJnaW47CiAgICBjb25zdCBiYm94SGVpZ2h0ID0gbWluTWF4WzNdIC0gbWluTWF4WzFdICsgMiAqIGlubmVyTWFyZ2luOwogICAgY29uc3Qgc2hpZnRlZE1pblggPSBtaW5NYXhbMF0gLSBpbm5lck1hcmdpbjsKICAgIGNvbnN0IHNoaWZ0ZWRNaW5ZID0gbWluTWF4WzFdIC0gaW5uZXJNYXJnaW47CiAgICBsZXQgZmlyc3RQb2ludFggPSBpc0xUUiA/IC1JbmZpbml0eSA6IEluZmluaXR5OwogICAgbGV0IGZpcnN0UG9pbnRZID0gSW5maW5pdHk7CiAgICBjb25zdCBsYXN0RWRnZSA9IHRoaXMuI3ZlcnRpY2FsRWRnZXMuYXQoaXNMVFIgPyAtMSA6IC0yKTsKICAgIGNvbnN0IGxhc3RQb2ludCA9IFtsYXN0RWRnZVswXSwgbGFzdEVkZ2VbMl1dOwogICAgZm9yIChjb25zdCBlZGdlIG9mIHRoaXMuI3ZlcnRpY2FsRWRnZXMpIHsKICAgICAgY29uc3QgW3gsIHkxLCB5MiwgbGVmdF0gPSBlZGdlOwogICAgICBpZiAoIWxlZnQgJiYgaXNMVFIpIHsKICAgICAgICBpZiAoeTEgPCBmaXJzdFBvaW50WSkgewogICAgICAgICAgZmlyc3RQb2ludFkgPSB5MTsKICAgICAgICAgIGZpcnN0UG9pbnRYID0geDsKICAgICAgICB9IGVsc2UgaWYgKHkxID09PSBmaXJzdFBvaW50WSkgewogICAgICAgICAgZmlyc3RQb2ludFggPSBNYXRoLm1heChmaXJzdFBvaW50WCwgeCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGxlZnQgJiYgIWlzTFRSKSB7CiAgICAgICAgaWYgKHkxIDwgZmlyc3RQb2ludFkpIHsKICAgICAgICAgIGZpcnN0UG9pbnRZID0geTE7CiAgICAgICAgICBmaXJzdFBvaW50WCA9IHg7CiAgICAgICAgfSBlbHNlIGlmICh5MSA9PT0gZmlyc3RQb2ludFkpIHsKICAgICAgICAgIGZpcnN0UG9pbnRYID0gTWF0aC5taW4oZmlyc3RQb2ludFgsIHgpOwogICAgICAgIH0KICAgICAgfQogICAgICBlZGdlWzBdID0gKHggLSBzaGlmdGVkTWluWCkgLyBiYm94V2lkdGg7CiAgICAgIGVkZ2VbMV0gPSAoeTEgLSBzaGlmdGVkTWluWSkgLyBiYm94SGVpZ2h0OwogICAgICBlZGdlWzJdID0gKHkyIC0gc2hpZnRlZE1pblkpIC8gYmJveEhlaWdodDsKICAgIH0KICAgIHRoaXMuI2JveCA9IG5ldyBGbG9hdDMyQXJyYXkoW3NoaWZ0ZWRNaW5YLCBzaGlmdGVkTWluWSwgYmJveFdpZHRoLCBiYm94SGVpZ2h0XSk7CiAgICB0aGlzLiNmaXJzdFBvaW50ID0gW2ZpcnN0UG9pbnRYLCBmaXJzdFBvaW50WV07CiAgICB0aGlzLiNsYXN0UG9pbnQgPSBsYXN0UG9pbnQ7CiAgfQogIGdldE91dGxpbmVzKCkgewogICAgdGhpcy4jdmVydGljYWxFZGdlcy5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSB8fCBhWzFdIC0gYlsxXSB8fCBhWzJdIC0gYlsyXSk7CiAgICBjb25zdCBvdXRsaW5lVmVydGljYWxFZGdlcyA9IFtdOwogICAgZm9yIChjb25zdCBlZGdlIG9mIHRoaXMuI3ZlcnRpY2FsRWRnZXMpIHsKICAgICAgaWYgKGVkZ2VbM10pIHsKICAgICAgICBvdXRsaW5lVmVydGljYWxFZGdlcy5wdXNoKC4uLnRoaXMuI2JyZWFrRWRnZShlZGdlKSk7CiAgICAgICAgdGhpcy4jaW5zZXJ0KGVkZ2UpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuI3JlbW92ZShlZGdlKTsKICAgICAgICBvdXRsaW5lVmVydGljYWxFZGdlcy5wdXNoKC4uLnRoaXMuI2JyZWFrRWRnZShlZGdlKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGlzLiNnZXRPdXRsaW5lcyhvdXRsaW5lVmVydGljYWxFZGdlcyk7CiAgfQogICNnZXRPdXRsaW5lcyhvdXRsaW5lVmVydGljYWxFZGdlcykgewogICAgY29uc3QgZWRnZXMgPSBbXTsKICAgIGNvbnN0IGFsbEVkZ2VzID0gbmV3IFNldCgpOwogICAgZm9yIChjb25zdCBlZGdlIG9mIG91dGxpbmVWZXJ0aWNhbEVkZ2VzKSB7CiAgICAgIGNvbnN0IFt4LCB5MSwgeTJdID0gZWRnZTsKICAgICAgZWRnZXMucHVzaChbeCwgeTEsIGVkZ2VdLCBbeCwgeTIsIGVkZ2VdKTsKICAgIH0KICAgIGVkZ2VzLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdIHx8IGFbMF0gLSBiWzBdKTsKICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGVkZ2VzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHsKICAgICAgY29uc3QgZWRnZTEgPSBlZGdlc1tpXVsyXTsKICAgICAgY29uc3QgZWRnZTIgPSBlZGdlc1tpICsgMV1bMl07CiAgICAgIGVkZ2UxLnB1c2goZWRnZTIpOwogICAgICBlZGdlMi5wdXNoKGVkZ2UxKTsKICAgICAgYWxsRWRnZXMuYWRkKGVkZ2UxKTsKICAgICAgYWxsRWRnZXMuYWRkKGVkZ2UyKTsKICAgIH0KICAgIGNvbnN0IG91dGxpbmVzID0gW107CiAgICBsZXQgb3V0bGluZTsKICAgIHdoaWxlIChhbGxFZGdlcy5zaXplID4gMCkgewogICAgICBjb25zdCBlZGdlID0gYWxsRWRnZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlOwogICAgICBsZXQgW3gsIHkxLCB5MiwgZWRnZTEsIGVkZ2UyXSA9IGVkZ2U7CiAgICAgIGFsbEVkZ2VzLmRlbGV0ZShlZGdlKTsKICAgICAgbGV0IGxhc3RQb2ludFggPSB4OwogICAgICBsZXQgbGFzdFBvaW50WSA9IHkxOwogICAgICBvdXRsaW5lID0gW3gsIHkyXTsKICAgICAgb3V0bGluZXMucHVzaChvdXRsaW5lKTsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBsZXQgZTsKICAgICAgICBpZiAoYWxsRWRnZXMuaGFzKGVkZ2UxKSkgewogICAgICAgICAgZSA9IGVkZ2UxOwogICAgICAgIH0gZWxzZSBpZiAoYWxsRWRnZXMuaGFzKGVkZ2UyKSkgewogICAgICAgICAgZSA9IGVkZ2UyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgYWxsRWRnZXMuZGVsZXRlKGUpOwogICAgICAgIFt4LCB5MSwgeTIsIGVkZ2UxLCBlZGdlMl0gPSBlOwogICAgICAgIGlmIChsYXN0UG9pbnRYICE9PSB4KSB7CiAgICAgICAgICBvdXRsaW5lLnB1c2gobGFzdFBvaW50WCwgbGFzdFBvaW50WSwgeCwgbGFzdFBvaW50WSA9PT0geTEgPyB5MSA6IHkyKTsKICAgICAgICAgIGxhc3RQb2ludFggPSB4OwogICAgICAgIH0KICAgICAgICBsYXN0UG9pbnRZID0gbGFzdFBvaW50WSA9PT0geTEgPyB5MiA6IHkxOwogICAgICB9CiAgICAgIG91dGxpbmUucHVzaChsYXN0UG9pbnRYLCBsYXN0UG9pbnRZKTsKICAgIH0KICAgIHJldHVybiBuZXcgSGlnaGxpZ2h0T3V0bGluZShvdXRsaW5lcywgdGhpcy4jYm94LCB0aGlzLiNmaXJzdFBvaW50LCB0aGlzLiNsYXN0UG9pbnQpOwogIH0KICAjYmluYXJ5U2VhcmNoKHkpIHsKICAgIGNvbnN0IGFycmF5ID0gdGhpcy4jaW50ZXJ2YWxzOwogICAgbGV0IHN0YXJ0ID0gMDsKICAgIGxldCBlbmQgPSBhcnJheS5sZW5ndGggLSAxOwogICAgd2hpbGUgKHN0YXJ0IDw9IGVuZCkgewogICAgICBjb25zdCBtaWRkbGUgPSBzdGFydCArIGVuZCA+PiAxOwogICAgICBjb25zdCB5MSA9IGFycmF5W21pZGRsZV1bMF07CiAgICAgIGlmICh5MSA9PT0geSkgewogICAgICAgIHJldHVybiBtaWRkbGU7CiAgICAgIH0KICAgICAgaWYgKHkxIDwgeSkgewogICAgICAgIHN0YXJ0ID0gbWlkZGxlICsgMTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbmQgPSBtaWRkbGUgLSAxOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZW5kICsgMTsKICB9CiAgI2luc2VydChbLCB5MSwgeTJdKSB7CiAgICBjb25zdCBpbmRleCA9IHRoaXMuI2JpbmFyeVNlYXJjaCh5MSk7CiAgICB0aGlzLiNpbnRlcnZhbHMuc3BsaWNlKGluZGV4LCAwLCBbeTEsIHkyXSk7CiAgfQogICNyZW1vdmUoWywgeTEsIHkyXSkgewogICAgY29uc3QgaW5kZXggPSB0aGlzLiNiaW5hcnlTZWFyY2goeTEpOwogICAgZm9yIChsZXQgaSA9IGluZGV4OyBpIDwgdGhpcy4jaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMuI2ludGVydmFsc1tpXTsKICAgICAgaWYgKHN0YXJ0ICE9PSB5MSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChzdGFydCA9PT0geTEgJiYgZW5kID09PSB5MikgewogICAgICAgIHRoaXMuI2ludGVydmFscy5zcGxpY2UoaSwgMSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGktLSkgewogICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLiNpbnRlcnZhbHNbaV07CiAgICAgIGlmIChzdGFydCAhPT0geTEpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoc3RhcnQgPT09IHkxICYmIGVuZCA9PT0geTIpIHsKICAgICAgICB0aGlzLiNpbnRlcnZhbHMuc3BsaWNlKGksIDEpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogIH0KICAjYnJlYWtFZGdlKGVkZ2UpIHsKICAgIGNvbnN0IFt4LCB5MSwgeTJdID0gZWRnZTsKICAgIGNvbnN0IHJlc3VsdHMgPSBbW3gsIHkxLCB5Ml1dOwogICAgY29uc3QgaW5kZXggPSB0aGlzLiNiaW5hcnlTZWFyY2goeTIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7CiAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMuI2ludGVydmFsc1tpXTsKICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gcmVzdWx0cy5sZW5ndGg7IGogPCBqajsgaisrKSB7CiAgICAgICAgY29uc3QgWywgeTMsIHk0XSA9IHJlc3VsdHNbal07CiAgICAgICAgaWYgKGVuZCA8PSB5MyB8fCB5NCA8PSBzdGFydCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh5MyA+PSBzdGFydCkgewogICAgICAgICAgaWYgKHk0ID4gZW5kKSB7CiAgICAgICAgICAgIHJlc3VsdHNbal1bMV0gPSBlbmQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoamogPT09IDEpIHsKICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzdWx0cy5zcGxpY2UoaiwgMSk7CiAgICAgICAgICAgIGotLTsKICAgICAgICAgICAgamotLTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICByZXN1bHRzW2pdWzJdID0gc3RhcnQ7CiAgICAgICAgaWYgKHk0ID4gZW5kKSB7CiAgICAgICAgICByZXN1bHRzLnB1c2goW3gsIGVuZCwgeTRdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KfQpjbGFzcyBIaWdobGlnaHRPdXRsaW5lIGV4dGVuZHMgT3V0bGluZSB7CiAgI2JveDsKICAjb3V0bGluZXM7CiAgY29uc3RydWN0b3Iob3V0bGluZXMsIGJveCwgZmlyc3RQb2ludCwgbGFzdFBvaW50KSB7CiAgICBzdXBlcigpOwogICAgdGhpcy4jb3V0bGluZXMgPSBvdXRsaW5lczsKICAgIHRoaXMuI2JveCA9IGJveDsKICAgIHRoaXMuZmlyc3RQb2ludCA9IGZpcnN0UG9pbnQ7CiAgICB0aGlzLmxhc3RQb2ludCA9IGxhc3RQb2ludDsKICB9CiAgdG9TVkdQYXRoKCkgewogICAgY29uc3QgYnVmZmVyID0gW107CiAgICBmb3IgKGNvbnN0IHBvbHlnb24gb2YgdGhpcy4jb3V0bGluZXMpIHsKICAgICAgbGV0IFtwcmV2WCwgcHJldlldID0gcG9seWdvbjsKICAgICAgYnVmZmVyLnB1c2goYE0ke3ByZXZYfSAke3ByZXZZfWApOwogICAgICBmb3IgKGxldCBpID0gMjsgaSA8IHBvbHlnb24ubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICBjb25zdCB4ID0gcG9seWdvbltpXTsKICAgICAgICBjb25zdCB5ID0gcG9seWdvbltpICsgMV07CiAgICAgICAgaWYgKHggPT09IHByZXZYKSB7CiAgICAgICAgICBidWZmZXIucHVzaChgViR7eX1gKTsKICAgICAgICAgIHByZXZZID0geTsKICAgICAgICB9IGVsc2UgaWYgKHkgPT09IHByZXZZKSB7CiAgICAgICAgICBidWZmZXIucHVzaChgSCR7eH1gKTsKICAgICAgICAgIHByZXZYID0geDsKICAgICAgICB9CiAgICAgIH0KICAgICAgYnVmZmVyLnB1c2goIloiKTsKICAgIH0KICAgIHJldHVybiBidWZmZXIuam9pbigiICIpOwogIH0KICBzZXJpYWxpemUoW2JsWCwgYmxZLCB0clgsIHRyWV0sIF9yb3RhdGlvbikgewogICAgY29uc3Qgb3V0bGluZXMgPSBbXTsKICAgIGNvbnN0IHdpZHRoID0gdHJYIC0gYmxYOwogICAgY29uc3QgaGVpZ2h0ID0gdHJZIC0gYmxZOwogICAgZm9yIChjb25zdCBvdXRsaW5lIG9mIHRoaXMuI291dGxpbmVzKSB7CiAgICAgIGNvbnN0IHBvaW50cyA9IG5ldyBBcnJheShvdXRsaW5lLmxlbmd0aCk7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0bGluZS5sZW5ndGg7IGkgKz0gMikgewogICAgICAgIHBvaW50c1tpXSA9IGJsWCArIG91dGxpbmVbaV0gKiB3aWR0aDsKICAgICAgICBwb2ludHNbaSArIDFdID0gdHJZIC0gb3V0bGluZVtpICsgMV0gKiBoZWlnaHQ7CiAgICAgIH0KICAgICAgb3V0bGluZXMucHVzaChwb2ludHMpOwogICAgfQogICAgcmV0dXJuIG91dGxpbmVzOwogIH0KICBnZXQgYm94KCkgewogICAgcmV0dXJuIHRoaXMuI2JveDsKICB9CiAgZ2V0IGNsYXNzTmFtZXNGb3JPdXRsaW5pbmcoKSB7CiAgICByZXR1cm4gWyJoaWdobGlnaHRPdXRsaW5lIl07CiAgfQp9CmNsYXNzIEZyZWVIaWdobGlnaHRPdXRsaW5lciBleHRlbmRzIEZyZWVEcmF3T3V0bGluZXIgewogIG5ld0ZyZWVEcmF3T3V0bGluZShvdXRsaW5lLCBwb2ludHMsIGJveCwgc2NhbGVGYWN0b3IsIGlubmVyTWFyZ2luLCBpc0xUUikgewogICAgcmV0dXJuIG5ldyBGcmVlSGlnaGxpZ2h0T3V0bGluZShvdXRsaW5lLCBwb2ludHMsIGJveCwgc2NhbGVGYWN0b3IsIGlubmVyTWFyZ2luLCBpc0xUUik7CiAgfQp9CmNsYXNzIEZyZWVIaWdobGlnaHRPdXRsaW5lIGV4dGVuZHMgRnJlZURyYXdPdXRsaW5lIHsKICBuZXdPdXRsaW5lcihwb2ludCwgYm94LCBzY2FsZUZhY3RvciwgdGhpY2tuZXNzLCBpc0xUUiwgaW5uZXJNYXJnaW4gPSAwKSB7CiAgICByZXR1cm4gbmV3IEZyZWVIaWdobGlnaHRPdXRsaW5lcihwb2ludCwgYm94LCBzY2FsZUZhY3RvciwgdGhpY2tuZXNzLCBpc0xUUiwgaW5uZXJNYXJnaW4pOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL2hpZ2hsaWdodC5qcwoKCgoKCgoKY2xhc3MgSGlnaGxpZ2h0RWRpdG9yIGV4dGVuZHMgQW5ub3RhdGlvbkVkaXRvciB7CiAgI2FuY2hvck5vZGUgPSBudWxsOwogICNhbmNob3JPZmZzZXQgPSAwOwogICNib3hlczsKICAjY2xpcFBhdGhJZCA9IG51bGw7CiAgI2NvbG9yUGlja2VyID0gbnVsbDsKICAjZm9jdXNPdXRsaW5lcyA9IG51bGw7CiAgI2ZvY3VzTm9kZSA9IG51bGw7CiAgI2ZvY3VzT2Zmc2V0ID0gMDsKICAjaGlnaGxpZ2h0RGl2ID0gbnVsbDsKICAjaGlnaGxpZ2h0T3V0bGluZXMgPSBudWxsOwogICNpZCA9IG51bGw7CiAgI2lzRnJlZUhpZ2hsaWdodCA9IGZhbHNlOwogICNmaXJzdFBvaW50ID0gbnVsbDsKICAjbGFzdFBvaW50ID0gbnVsbDsKICAjb3V0bGluZUlkID0gbnVsbDsKICAjdGV4dCA9ICIiOwogICN0aGlja25lc3M7CiAgI21ldGhvZE9mQ3JlYXRpb24gPSAiIjsKICBzdGF0aWMgX2RlZmF1bHRDb2xvciA9IG51bGw7CiAgc3RhdGljIF9kZWZhdWx0T3BhY2l0eSA9IDE7CiAgc3RhdGljIF9kZWZhdWx0VGhpY2tuZXNzID0gMTI7CiAgc3RhdGljIF90eXBlID0gImhpZ2hsaWdodCI7CiAgc3RhdGljIF9lZGl0b3JUeXBlID0gQW5ub3RhdGlvbkVkaXRvclR5cGUuSElHSExJR0hUOwogIHN0YXRpYyBfZnJlZUhpZ2hsaWdodElkID0gLTE7CiAgc3RhdGljIF9mcmVlSGlnaGxpZ2h0ID0gbnVsbDsKICBzdGF0aWMgX2ZyZWVIaWdobGlnaHRDbGlwSWQgPSAiIjsKICBzdGF0aWMgZ2V0IF9rZXlib2FyZE1hbmFnZXIoKSB7CiAgICBjb25zdCBwcm90byA9IEhpZ2hsaWdodEVkaXRvci5wcm90b3R5cGU7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJfa2V5Ym9hcmRNYW5hZ2VyIiwgbmV3IEtleWJvYXJkTWFuYWdlcihbW1siQXJyb3dMZWZ0IiwgIm1hYytBcnJvd0xlZnQiXSwgcHJvdG8uX21vdmVDYXJldCwgewogICAgICBhcmdzOiBbMF0KICAgIH1dLCBbWyJBcnJvd1JpZ2h0IiwgIm1hYytBcnJvd1JpZ2h0Il0sIHByb3RvLl9tb3ZlQ2FyZXQsIHsKICAgICAgYXJnczogWzFdCiAgICB9XSwgW1siQXJyb3dVcCIsICJtYWMrQXJyb3dVcCJdLCBwcm90by5fbW92ZUNhcmV0LCB7CiAgICAgIGFyZ3M6IFsyXQogICAgfV0sIFtbIkFycm93RG93biIsICJtYWMrQXJyb3dEb3duIl0sIHByb3RvLl9tb3ZlQ2FyZXQsIHsKICAgICAgYXJnczogWzNdCiAgICB9XV0pKTsKICB9CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcih7CiAgICAgIC4uLnBhcmFtcywKICAgICAgbmFtZTogImhpZ2hsaWdodEVkaXRvciIKICAgIH0pOwogICAgdGhpcy5jb2xvciA9IHBhcmFtcy5jb2xvciB8fCBIaWdobGlnaHRFZGl0b3IuX2RlZmF1bHRDb2xvcjsKICAgIHRoaXMuI3RoaWNrbmVzcyA9IHBhcmFtcy50aGlja25lc3MgfHwgSGlnaGxpZ2h0RWRpdG9yLl9kZWZhdWx0VGhpY2tuZXNzOwogICAgdGhpcy5vcGFjaXR5ID0gcGFyYW1zLm9wYWNpdHkgfHwgSGlnaGxpZ2h0RWRpdG9yLl9kZWZhdWx0T3BhY2l0eTsKICAgIHRoaXMuI2JveGVzID0gcGFyYW1zLmJveGVzIHx8IG51bGw7CiAgICB0aGlzLiNtZXRob2RPZkNyZWF0aW9uID0gcGFyYW1zLm1ldGhvZE9mQ3JlYXRpb24gfHwgIiI7CiAgICB0aGlzLiN0ZXh0ID0gcGFyYW1zLnRleHQgfHwgIiI7CiAgICB0aGlzLl9pc0RyYWdnYWJsZSA9IGZhbHNlOwogICAgdGhpcy5kZWZhdWx0TDEwbklkID0gInBkZmpzLWVkaXRvci1oaWdobGlnaHQtZWRpdG9yIjsKICAgIGlmIChwYXJhbXMuaGlnaGxpZ2h0SWQgPiAtMSkgewogICAgICB0aGlzLiNpc0ZyZWVIaWdobGlnaHQgPSB0cnVlOwogICAgICB0aGlzLiNjcmVhdGVGcmVlT3V0bGluZXMocGFyYW1zKTsKICAgICAgdGhpcy4jYWRkVG9EcmF3TGF5ZXIoKTsKICAgIH0gZWxzZSBpZiAodGhpcy4jYm94ZXMpIHsKICAgICAgdGhpcy4jYW5jaG9yTm9kZSA9IHBhcmFtcy5hbmNob3JOb2RlOwogICAgICB0aGlzLiNhbmNob3JPZmZzZXQgPSBwYXJhbXMuYW5jaG9yT2Zmc2V0OwogICAgICB0aGlzLiNmb2N1c05vZGUgPSBwYXJhbXMuZm9jdXNOb2RlOwogICAgICB0aGlzLiNmb2N1c09mZnNldCA9IHBhcmFtcy5mb2N1c09mZnNldDsKICAgICAgdGhpcy4jY3JlYXRlT3V0bGluZXMoKTsKICAgICAgdGhpcy4jYWRkVG9EcmF3TGF5ZXIoKTsKICAgICAgdGhpcy5yb3RhdGUodGhpcy5yb3RhdGlvbik7CiAgICB9CiAgICBpZiAoIXRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCkgewogICAgICB0aGlzLl91aU1hbmFnZXIuYTExeUFsZXJ0KCJwZGZqcy1lZGl0b3ItaGlnaGxpZ2h0LWFkZGVkLWFsZXJ0Iik7CiAgICB9CiAgfQogIGdldCB0ZWxlbWV0cnlJbml0aWFsRGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIGFjdGlvbjogImFkZGVkIiwKICAgICAgdHlwZTogdGhpcy4jaXNGcmVlSGlnaGxpZ2h0ID8gImZyZWVfaGlnaGxpZ2h0IiA6ICJoaWdobGlnaHQiLAogICAgICBjb2xvcjogdGhpcy5fdWlNYW5hZ2VyLmdldE5vbkhDTUNvbG9yTmFtZSh0aGlzLmNvbG9yKSwKICAgICAgdGhpY2tuZXNzOiB0aGlzLiN0aGlja25lc3MsCiAgICAgIG1ldGhvZE9mQ3JlYXRpb246IHRoaXMuI21ldGhvZE9mQ3JlYXRpb24KICAgIH07CiAgfQogIGdldCB0ZWxlbWV0cnlGaW5hbERhdGEoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiaGlnaGxpZ2h0IiwKICAgICAgY29sb3I6IHRoaXMuX3VpTWFuYWdlci5nZXROb25IQ01Db2xvck5hbWUodGhpcy5jb2xvcikKICAgIH07CiAgfQogIHN0YXRpYyBjb21wdXRlVGVsZW1ldHJ5RmluYWxEYXRhKGRhdGEpIHsKICAgIHJldHVybiB7CiAgICAgIG51bWJlck9mQ29sb3JzOiBkYXRhLmdldCgiY29sb3IiKS5zaXplCiAgICB9OwogIH0KICAjY3JlYXRlT3V0bGluZXMoKSB7CiAgICBjb25zdCBvdXRsaW5lciA9IG5ldyBIaWdobGlnaHRPdXRsaW5lcih0aGlzLiNib3hlcywgMC4wMDEpOwogICAgdGhpcy4jaGlnaGxpZ2h0T3V0bGluZXMgPSBvdXRsaW5lci5nZXRPdXRsaW5lcygpOwogICAgW3RoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF0gPSB0aGlzLiNoaWdobGlnaHRPdXRsaW5lcy5ib3g7CiAgICBjb25zdCBvdXRsaW5lckZvck91dGxpbmUgPSBuZXcgSGlnaGxpZ2h0T3V0bGluZXIodGhpcy4jYm94ZXMsIDAuMDAyNSwgMC4wMDEsIHRoaXMuX3VpTWFuYWdlci5kaXJlY3Rpb24gPT09ICJsdHIiKTsKICAgIHRoaXMuI2ZvY3VzT3V0bGluZXMgPSBvdXRsaW5lckZvck91dGxpbmUuZ2V0T3V0bGluZXMoKTsKICAgIGNvbnN0IHsKICAgICAgZmlyc3RQb2ludAogICAgfSA9IHRoaXMuI2hpZ2hsaWdodE91dGxpbmVzOwogICAgdGhpcy4jZmlyc3RQb2ludCA9IFsoZmlyc3RQb2ludFswXSAtIHRoaXMueCkgLyB0aGlzLndpZHRoLCAoZmlyc3RQb2ludFsxXSAtIHRoaXMueSkgLyB0aGlzLmhlaWdodF07CiAgICBjb25zdCB7CiAgICAgIGxhc3RQb2ludAogICAgfSA9IHRoaXMuI2ZvY3VzT3V0bGluZXM7CiAgICB0aGlzLiNsYXN0UG9pbnQgPSBbKGxhc3RQb2ludFswXSAtIHRoaXMueCkgLyB0aGlzLndpZHRoLCAobGFzdFBvaW50WzFdIC0gdGhpcy55KSAvIHRoaXMuaGVpZ2h0XTsKICB9CiAgI2NyZWF0ZUZyZWVPdXRsaW5lcyh7CiAgICBoaWdobGlnaHRPdXRsaW5lcywKICAgIGhpZ2hsaWdodElkLAogICAgY2xpcFBhdGhJZAogIH0pIHsKICAgIHRoaXMuI2hpZ2hsaWdodE91dGxpbmVzID0gaGlnaGxpZ2h0T3V0bGluZXM7CiAgICBjb25zdCBleHRyYVRoaWNrbmVzcyA9IDEuNTsKICAgIHRoaXMuI2ZvY3VzT3V0bGluZXMgPSBoaWdobGlnaHRPdXRsaW5lcy5nZXROZXdPdXRsaW5lKHRoaXMuI3RoaWNrbmVzcyAvIDIgKyBleHRyYVRoaWNrbmVzcywgMC4wMDI1KTsKICAgIGlmIChoaWdobGlnaHRJZCA+PSAwKSB7CiAgICAgIHRoaXMuI2lkID0gaGlnaGxpZ2h0SWQ7CiAgICAgIHRoaXMuI2NsaXBQYXRoSWQgPSBjbGlwUGF0aElkOwogICAgICB0aGlzLnBhcmVudC5kcmF3TGF5ZXIuZmluYWxpemVEcmF3KGhpZ2hsaWdodElkLCB7CiAgICAgICAgYmJveDogaGlnaGxpZ2h0T3V0bGluZXMuYm94LAogICAgICAgIHBhdGg6IHsKICAgICAgICAgIGQ6IGhpZ2hsaWdodE91dGxpbmVzLnRvU1ZHUGF0aCgpCiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy4jb3V0bGluZUlkID0gdGhpcy5wYXJlbnQuZHJhd0xheWVyLmRyYXdPdXRsaW5lKHsKICAgICAgICByb290Q2xhc3M6IHsKICAgICAgICAgIGhpZ2hsaWdodE91dGxpbmU6IHRydWUsCiAgICAgICAgICBmcmVlOiB0cnVlCiAgICAgICAgfSwKICAgICAgICBiYm94OiB0aGlzLiNmb2N1c091dGxpbmVzLmJveCwKICAgICAgICBwYXRoOiB7CiAgICAgICAgICBkOiB0aGlzLiNmb2N1c091dGxpbmVzLnRvU1ZHUGF0aCgpCiAgICAgICAgfQogICAgICB9LCB0cnVlKTsKICAgIH0gZWxzZSBpZiAodGhpcy5wYXJlbnQpIHsKICAgICAgY29uc3QgYW5nbGUgPSB0aGlzLnBhcmVudC52aWV3cG9ydC5yb3RhdGlvbjsKICAgICAgdGhpcy5wYXJlbnQuZHJhd0xheWVyLnVwZGF0ZVByb3BlcnRpZXModGhpcy4jaWQsIHsKICAgICAgICBiYm94OiBIaWdobGlnaHRFZGl0b3IuI3JvdGF0ZUJib3godGhpcy4jaGlnaGxpZ2h0T3V0bGluZXMuYm94LCAoYW5nbGUgLSB0aGlzLnJvdGF0aW9uICsgMzYwKSAlIDM2MCksCiAgICAgICAgcGF0aDogewogICAgICAgICAgZDogaGlnaGxpZ2h0T3V0bGluZXMudG9TVkdQYXRoKCkKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnBhcmVudC5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyh0aGlzLiNvdXRsaW5lSWQsIHsKICAgICAgICBiYm94OiBIaWdobGlnaHRFZGl0b3IuI3JvdGF0ZUJib3godGhpcy4jZm9jdXNPdXRsaW5lcy5ib3gsIGFuZ2xlKSwKICAgICAgICBwYXRoOiB7CiAgICAgICAgICBkOiB0aGlzLiNmb2N1c091dGxpbmVzLnRvU1ZHUGF0aCgpCiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IFt4LCB5LCB3aWR0aCwgaGVpZ2h0XSA9IGhpZ2hsaWdodE91dGxpbmVzLmJveDsKICAgIHN3aXRjaCAodGhpcy5yb3RhdGlvbikgewogICAgICBjYXNlIDA6CiAgICAgICAgdGhpcy54ID0geDsKICAgICAgICB0aGlzLnkgPSB5OwogICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA5MDoKICAgICAgICB7CiAgICAgICAgICBjb25zdCBbcGFnZVdpZHRoLCBwYWdlSGVpZ2h0XSA9IHRoaXMucGFyZW50RGltZW5zaW9uczsKICAgICAgICAgIHRoaXMueCA9IHk7CiAgICAgICAgICB0aGlzLnkgPSAxIC0geDsKICAgICAgICAgIHRoaXMud2lkdGggPSB3aWR0aCAqIHBhZ2VIZWlnaHQgLyBwYWdlV2lkdGg7CiAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodCAqIHBhZ2VXaWR0aCAvIHBhZ2VIZWlnaHQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgMTgwOgogICAgICAgIHRoaXMueCA9IDEgLSB4OwogICAgICAgIHRoaXMueSA9IDEgLSB5OwogICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAyNzA6CiAgICAgICAgewogICAgICAgICAgY29uc3QgW3BhZ2VXaWR0aCwgcGFnZUhlaWdodF0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnM7CiAgICAgICAgICB0aGlzLnggPSAxIC0geTsKICAgICAgICAgIHRoaXMueSA9IHg7CiAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGggKiBwYWdlSGVpZ2h0IC8gcGFnZVdpZHRoOwogICAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQgKiBwYWdlV2lkdGggLyBwYWdlSGVpZ2h0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgY29uc3QgewogICAgICBmaXJzdFBvaW50CiAgICB9ID0gaGlnaGxpZ2h0T3V0bGluZXM7CiAgICB0aGlzLiNmaXJzdFBvaW50ID0gWyhmaXJzdFBvaW50WzBdIC0geCkgLyB3aWR0aCwgKGZpcnN0UG9pbnRbMV0gLSB5KSAvIGhlaWdodF07CiAgICBjb25zdCB7CiAgICAgIGxhc3RQb2ludAogICAgfSA9IHRoaXMuI2ZvY3VzT3V0bGluZXM7CiAgICB0aGlzLiNsYXN0UG9pbnQgPSBbKGxhc3RQb2ludFswXSAtIHgpIC8gd2lkdGgsIChsYXN0UG9pbnRbMV0gLSB5KSAvIGhlaWdodF07CiAgfQogIHN0YXRpYyBpbml0aWFsaXplKGwxMG4sIHVpTWFuYWdlcikgewogICAgQW5ub3RhdGlvbkVkaXRvci5pbml0aWFsaXplKGwxMG4sIHVpTWFuYWdlcik7CiAgICBIaWdobGlnaHRFZGl0b3IuX2RlZmF1bHRDb2xvciB8fD0gdWlNYW5hZ2VyLmhpZ2hsaWdodENvbG9ycz8udmFsdWVzKCkubmV4dCgpLnZhbHVlIHx8ICIjZmZmMDY2IjsKICB9CiAgc3RhdGljIHVwZGF0ZURlZmF1bHRQYXJhbXModHlwZSwgdmFsdWUpIHsKICAgIHN3aXRjaCAodHlwZSkgewogICAgICBjYXNlIEFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkhJR0hMSUdIVF9DT0xPUjoKICAgICAgICBIaWdobGlnaHRFZGl0b3IuX2RlZmF1bHRDb2xvciA9IHZhbHVlOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkhJR0hMSUdIVF9USElDS05FU1M6CiAgICAgICAgSGlnaGxpZ2h0RWRpdG9yLl9kZWZhdWx0VGhpY2tuZXNzID0gdmFsdWU7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHRyYW5zbGF0ZUluUGFnZSh4LCB5KSB7fQogIGdldCB0b29sYmFyUG9zaXRpb24oKSB7CiAgICByZXR1cm4gdGhpcy4jbGFzdFBvaW50OwogIH0KICBnZXQgY29tbWVudEJ1dHRvblBvc2l0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuI2ZpcnN0UG9pbnQ7CiAgfQogIHVwZGF0ZVBhcmFtcyh0eXBlLCB2YWx1ZSkgewogICAgc3dpdGNoICh0eXBlKSB7CiAgICAgIGNhc2UgQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSElHSExJR0hUX0NPTE9SOgogICAgICAgIHRoaXMuI3VwZGF0ZUNvbG9yKHZhbHVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5ISUdITElHSFRfVEhJQ0tORVNTOgogICAgICAgIHRoaXMuI3VwZGF0ZVRoaWNrbmVzcyh2YWx1ZSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHN0YXRpYyBnZXQgZGVmYXVsdFByb3BlcnRpZXNUb1VwZGF0ZSgpIHsKICAgIHJldHVybiBbW0Fubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkhJR0hMSUdIVF9DT0xPUiwgSGlnaGxpZ2h0RWRpdG9yLl9kZWZhdWx0Q29sb3JdLCBbQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSElHSExJR0hUX1RISUNLTkVTUywgSGlnaGxpZ2h0RWRpdG9yLl9kZWZhdWx0VGhpY2tuZXNzXV07CiAgfQogIGdldCBwcm9wZXJ0aWVzVG9VcGRhdGUoKSB7CiAgICByZXR1cm4gW1tBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5ISUdITElHSFRfQ09MT1IsIHRoaXMuY29sb3IgfHwgSGlnaGxpZ2h0RWRpdG9yLl9kZWZhdWx0Q29sb3JdLCBbQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSElHSExJR0hUX1RISUNLTkVTUywgdGhpcy4jdGhpY2tuZXNzIHx8IEhpZ2hsaWdodEVkaXRvci5fZGVmYXVsdFRoaWNrbmVzc10sIFtBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5ISUdITElHSFRfRlJFRSwgdGhpcy4jaXNGcmVlSGlnaGxpZ2h0XV07CiAgfQogIG9uVXBkYXRlZENvbG9yKCkgewogICAgdGhpcy5wYXJlbnQ/LmRyYXdMYXllci51cGRhdGVQcm9wZXJ0aWVzKHRoaXMuI2lkLCB7CiAgICAgIHJvb3Q6IHsKICAgICAgICBmaWxsOiB0aGlzLmNvbG9yLAogICAgICAgICJmaWxsLW9wYWNpdHkiOiB0aGlzLm9wYWNpdHkKICAgICAgfQogICAgfSk7CiAgICB0aGlzLiNjb2xvclBpY2tlcj8udXBkYXRlQ29sb3IodGhpcy5jb2xvcik7CiAgICBzdXBlci5vblVwZGF0ZWRDb2xvcigpOwogIH0KICAjdXBkYXRlQ29sb3IoY29sb3IpIHsKICAgIGNvbnN0IHNldENvbG9yQW5kT3BhY2l0eSA9IChjb2wsIG9wYSkgPT4gewogICAgICB0aGlzLmNvbG9yID0gY29sOwogICAgICB0aGlzLm9wYWNpdHkgPSBvcGE7CiAgICAgIHRoaXMub25VcGRhdGVkQ29sb3IoKTsKICAgIH07CiAgICBjb25zdCBzYXZlZENvbG9yID0gdGhpcy5jb2xvcjsKICAgIGNvbnN0IHNhdmVkT3BhY2l0eSA9IHRoaXMub3BhY2l0eTsKICAgIHRoaXMuYWRkQ29tbWFuZHMoewogICAgICBjbWQ6IHNldENvbG9yQW5kT3BhY2l0eS5iaW5kKHRoaXMsIGNvbG9yLCBIaWdobGlnaHRFZGl0b3IuX2RlZmF1bHRPcGFjaXR5KSwKICAgICAgdW5kbzogc2V0Q29sb3JBbmRPcGFjaXR5LmJpbmQodGhpcywgc2F2ZWRDb2xvciwgc2F2ZWRPcGFjaXR5KSwKICAgICAgcG9zdDogdGhpcy5fdWlNYW5hZ2VyLnVwZGF0ZVVJLmJpbmQodGhpcy5fdWlNYW5hZ2VyLCB0aGlzKSwKICAgICAgbXVzdEV4ZWM6IHRydWUsCiAgICAgIHR5cGU6IEFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkhJR0hMSUdIVF9DT0xPUiwKICAgICAgb3ZlcndyaXRlSWZTYW1lVHlwZTogdHJ1ZSwKICAgICAga2VlcFVuZG86IHRydWUKICAgIH0pOwogICAgdGhpcy5fcmVwb3J0VGVsZW1ldHJ5KHsKICAgICAgYWN0aW9uOiAiY29sb3JfY2hhbmdlZCIsCiAgICAgIGNvbG9yOiB0aGlzLl91aU1hbmFnZXIuZ2V0Tm9uSENNQ29sb3JOYW1lKGNvbG9yKQogICAgfSwgdHJ1ZSk7CiAgfQogICN1cGRhdGVUaGlja25lc3ModGhpY2tuZXNzKSB7CiAgICBjb25zdCBzYXZlZFRoaWNrbmVzcyA9IHRoaXMuI3RoaWNrbmVzczsKICAgIGNvbnN0IHNldFRoaWNrbmVzcyA9IHRoID0+IHsKICAgICAgdGhpcy4jdGhpY2tuZXNzID0gdGg7CiAgICAgIHRoaXMuI2NoYW5nZVRoaWNrbmVzcyh0aCk7CiAgICB9OwogICAgdGhpcy5hZGRDb21tYW5kcyh7CiAgICAgIGNtZDogc2V0VGhpY2tuZXNzLmJpbmQodGhpcywgdGhpY2tuZXNzKSwKICAgICAgdW5kbzogc2V0VGhpY2tuZXNzLmJpbmQodGhpcywgc2F2ZWRUaGlja25lc3MpLAogICAgICBwb3N0OiB0aGlzLl91aU1hbmFnZXIudXBkYXRlVUkuYmluZCh0aGlzLl91aU1hbmFnZXIsIHRoaXMpLAogICAgICBtdXN0RXhlYzogdHJ1ZSwKICAgICAgdHlwZTogQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX1RISUNLTkVTUywKICAgICAgb3ZlcndyaXRlSWZTYW1lVHlwZTogdHJ1ZSwKICAgICAga2VlcFVuZG86IHRydWUKICAgIH0pOwogICAgdGhpcy5fcmVwb3J0VGVsZW1ldHJ5KHsKICAgICAgYWN0aW9uOiAidGhpY2tuZXNzX2NoYW5nZWQiLAogICAgICB0aGlja25lc3MKICAgIH0sIHRydWUpOwogIH0KICBnZXQgdG9vbGJhckJ1dHRvbnMoKSB7CiAgICBpZiAodGhpcy5fdWlNYW5hZ2VyLmhpZ2hsaWdodENvbG9ycykgewogICAgICBjb25zdCBjb2xvclBpY2tlciA9IHRoaXMuI2NvbG9yUGlja2VyID0gbmV3IENvbG9yUGlja2VyKHsKICAgICAgICBlZGl0b3I6IHRoaXMKICAgICAgfSk7CiAgICAgIHJldHVybiBbWyJjb2xvclBpY2tlciIsIGNvbG9yUGlja2VyXV07CiAgICB9CiAgICByZXR1cm4gc3VwZXIudG9vbGJhckJ1dHRvbnM7CiAgfQogIGRpc2FibGVFZGl0aW5nKCkgewogICAgc3VwZXIuZGlzYWJsZUVkaXRpbmcoKTsKICAgIHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImRpc2FibGVkIiwgdHJ1ZSk7CiAgfQogIGVuYWJsZUVkaXRpbmcoKSB7CiAgICBzdXBlci5lbmFibGVFZGl0aW5nKCk7CiAgICB0aGlzLmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJkaXNhYmxlZCIsIGZhbHNlKTsKICB9CiAgZml4QW5kU2V0UG9zaXRpb24oKSB7CiAgICByZXR1cm4gc3VwZXIuZml4QW5kU2V0UG9zaXRpb24odGhpcy4jZ2V0Um90YXRpb24oKSk7CiAgfQogIGdldEJhc2VUcmFuc2xhdGlvbigpIHsKICAgIHJldHVybiBbMCwgMF07CiAgfQogIGdldFJlY3QodHgsIHR5KSB7CiAgICByZXR1cm4gc3VwZXIuZ2V0UmVjdCh0eCwgdHksIHRoaXMuI2dldFJvdGF0aW9uKCkpOwogIH0KICBvbmNlQWRkZWQoZm9jdXMpIHsKICAgIGlmICghdGhpcy5hbm5vdGF0aW9uRWxlbWVudElkKSB7CiAgICAgIHRoaXMucGFyZW50LmFkZFVuZG9hYmxlRWRpdG9yKHRoaXMpOwogICAgfQogICAgaWYgKGZvY3VzKSB7CiAgICAgIHRoaXMuZGl2LmZvY3VzKCk7CiAgICB9CiAgfQogIHJlbW92ZSgpIHsKICAgIHRoaXMuI2NsZWFuRHJhd0xheWVyKCk7CiAgICB0aGlzLl9yZXBvcnRUZWxlbWV0cnkoewogICAgICBhY3Rpb246ICJkZWxldGVkIgogICAgfSk7CiAgICBzdXBlci5yZW1vdmUoKTsKICB9CiAgcmVidWlsZCgpIHsKICAgIGlmICghdGhpcy5wYXJlbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3VwZXIucmVidWlsZCgpOwogICAgaWYgKHRoaXMuZGl2ID09PSBudWxsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI2FkZFRvRHJhd0xheWVyKCk7CiAgICBpZiAoIXRoaXMuaXNBdHRhY2hlZFRvRE9NKSB7CiAgICAgIHRoaXMucGFyZW50LmFkZCh0aGlzKTsKICAgIH0KICB9CiAgc2V0UGFyZW50KHBhcmVudCkgewogICAgbGV0IG11c3RCZVNlbGVjdGVkID0gZmFsc2U7CiAgICBpZiAodGhpcy5wYXJlbnQgJiYgIXBhcmVudCkgewogICAgICB0aGlzLiNjbGVhbkRyYXdMYXllcigpOwogICAgfSBlbHNlIGlmIChwYXJlbnQpIHsKICAgICAgdGhpcy4jYWRkVG9EcmF3TGF5ZXIocGFyZW50KTsKICAgICAgbXVzdEJlU2VsZWN0ZWQgPSAhdGhpcy5wYXJlbnQgJiYgdGhpcy5kaXY/LmNsYXNzTGlzdC5jb250YWlucygic2VsZWN0ZWRFZGl0b3IiKTsKICAgIH0KICAgIHN1cGVyLnNldFBhcmVudChwYXJlbnQpOwogICAgdGhpcy5zaG93KHRoaXMuX2lzVmlzaWJsZSk7CiAgICBpZiAobXVzdEJlU2VsZWN0ZWQpIHsKICAgICAgdGhpcy5zZWxlY3QoKTsKICAgIH0KICB9CiAgI2NoYW5nZVRoaWNrbmVzcyh0aGlja25lc3MpIHsKICAgIGlmICghdGhpcy4jaXNGcmVlSGlnaGxpZ2h0KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI2NyZWF0ZUZyZWVPdXRsaW5lcyh7CiAgICAgIGhpZ2hsaWdodE91dGxpbmVzOiB0aGlzLiNoaWdobGlnaHRPdXRsaW5lcy5nZXROZXdPdXRsaW5lKHRoaWNrbmVzcyAvIDIpCiAgICB9KTsKICAgIHRoaXMuZml4QW5kU2V0UG9zaXRpb24oKTsKICAgIHRoaXMuc2V0RGltcygpOwogIH0KICAjY2xlYW5EcmF3TGF5ZXIoKSB7CiAgICBpZiAodGhpcy4jaWQgPT09IG51bGwgfHwgIXRoaXMucGFyZW50KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMucGFyZW50LmRyYXdMYXllci5yZW1vdmUodGhpcy4jaWQpOwogICAgdGhpcy4jaWQgPSBudWxsOwogICAgdGhpcy5wYXJlbnQuZHJhd0xheWVyLnJlbW92ZSh0aGlzLiNvdXRsaW5lSWQpOwogICAgdGhpcy4jb3V0bGluZUlkID0gbnVsbDsKICB9CiAgI2FkZFRvRHJhd0xheWVyKHBhcmVudCA9IHRoaXMucGFyZW50KSB7CiAgICBpZiAodGhpcy4jaWQgIT09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgKHsKICAgICAgaWQ6IHRoaXMuI2lkLAogICAgICBjbGlwUGF0aElkOiB0aGlzLiNjbGlwUGF0aElkCiAgICB9ID0gcGFyZW50LmRyYXdMYXllci5kcmF3KHsKICAgICAgYmJveDogdGhpcy4jaGlnaGxpZ2h0T3V0bGluZXMuYm94LAogICAgICByb290OiB7CiAgICAgICAgdmlld0JveDogIjAgMCAxIDEiLAogICAgICAgIGZpbGw6IHRoaXMuY29sb3IsCiAgICAgICAgImZpbGwtb3BhY2l0eSI6IHRoaXMub3BhY2l0eQogICAgICB9LAogICAgICByb290Q2xhc3M6IHsKICAgICAgICBoaWdobGlnaHQ6IHRydWUsCiAgICAgICAgZnJlZTogdGhpcy4jaXNGcmVlSGlnaGxpZ2h0CiAgICAgIH0sCiAgICAgIHBhdGg6IHsKICAgICAgICBkOiB0aGlzLiNoaWdobGlnaHRPdXRsaW5lcy50b1NWR1BhdGgoKQogICAgICB9CiAgICB9LCBmYWxzZSwgdHJ1ZSkpOwogICAgdGhpcy4jb3V0bGluZUlkID0gcGFyZW50LmRyYXdMYXllci5kcmF3T3V0bGluZSh7CiAgICAgIHJvb3RDbGFzczogewogICAgICAgIGhpZ2hsaWdodE91dGxpbmU6IHRydWUsCiAgICAgICAgZnJlZTogdGhpcy4jaXNGcmVlSGlnaGxpZ2h0CiAgICAgIH0sCiAgICAgIGJib3g6IHRoaXMuI2ZvY3VzT3V0bGluZXMuYm94LAogICAgICBwYXRoOiB7CiAgICAgICAgZDogdGhpcy4jZm9jdXNPdXRsaW5lcy50b1NWR1BhdGgoKQogICAgICB9CiAgICB9LCB0aGlzLiNpc0ZyZWVIaWdobGlnaHQpOwogICAgaWYgKHRoaXMuI2hpZ2hsaWdodERpdikgewogICAgICB0aGlzLiNoaWdobGlnaHREaXYuc3R5bGUuY2xpcFBhdGggPSB0aGlzLiNjbGlwUGF0aElkOwogICAgfQogIH0KICBzdGF0aWMgI3JvdGF0ZUJib3goW3gsIHksIHdpZHRoLCBoZWlnaHRdLCBhbmdsZSkgewogICAgc3dpdGNoIChhbmdsZSkgewogICAgICBjYXNlIDkwOgogICAgICAgIHJldHVybiBbMSAtIHkgLSBoZWlnaHQsIHgsIGhlaWdodCwgd2lkdGhdOwogICAgICBjYXNlIDE4MDoKICAgICAgICByZXR1cm4gWzEgLSB4IC0gd2lkdGgsIDEgLSB5IC0gaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0XTsKICAgICAgY2FzZSAyNzA6CiAgICAgICAgcmV0dXJuIFt5LCAxIC0geCAtIHdpZHRoLCBoZWlnaHQsIHdpZHRoXTsKICAgIH0KICAgIHJldHVybiBbeCwgeSwgd2lkdGgsIGhlaWdodF07CiAgfQogIHJvdGF0ZShhbmdsZSkgewogICAgY29uc3QgewogICAgICBkcmF3TGF5ZXIKICAgIH0gPSB0aGlzLnBhcmVudDsKICAgIGxldCBib3g7CiAgICBpZiAodGhpcy4jaXNGcmVlSGlnaGxpZ2h0KSB7CiAgICAgIGFuZ2xlID0gKGFuZ2xlIC0gdGhpcy5yb3RhdGlvbiArIDM2MCkgJSAzNjA7CiAgICAgIGJveCA9IEhpZ2hsaWdodEVkaXRvci4jcm90YXRlQmJveCh0aGlzLiNoaWdobGlnaHRPdXRsaW5lcy5ib3gsIGFuZ2xlKTsKICAgIH0gZWxzZSB7CiAgICAgIGJveCA9IEhpZ2hsaWdodEVkaXRvci4jcm90YXRlQmJveChbdGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0XSwgYW5nbGUpOwogICAgfQogICAgZHJhd0xheWVyLnVwZGF0ZVByb3BlcnRpZXModGhpcy4jaWQsIHsKICAgICAgYmJveDogYm94LAogICAgICByb290OiB7CiAgICAgICAgImRhdGEtbWFpbi1yb3RhdGlvbiI6IGFuZ2xlCiAgICAgIH0KICAgIH0pOwogICAgZHJhd0xheWVyLnVwZGF0ZVByb3BlcnRpZXModGhpcy4jb3V0bGluZUlkLCB7CiAgICAgIGJib3g6IEhpZ2hsaWdodEVkaXRvci4jcm90YXRlQmJveCh0aGlzLiNmb2N1c091dGxpbmVzLmJveCwgYW5nbGUpLAogICAgICByb290OiB7CiAgICAgICAgImRhdGEtbWFpbi1yb3RhdGlvbiI6IGFuZ2xlCiAgICAgIH0KICAgIH0pOwogIH0KICByZW5kZXIoKSB7CiAgICBpZiAodGhpcy5kaXYpIHsKICAgICAgcmV0dXJuIHRoaXMuZGl2OwogICAgfQogICAgY29uc3QgZGl2ID0gc3VwZXIucmVuZGVyKCk7CiAgICBpZiAodGhpcy4jdGV4dCkgewogICAgICBkaXYuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwgdGhpcy4jdGV4dCk7CiAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoInJvbGUiLCAibWFyayIpOwogICAgfQogICAgaWYgKHRoaXMuI2lzRnJlZUhpZ2hsaWdodCkgewogICAgICBkaXYuY2xhc3NMaXN0LmFkZCgiZnJlZSIpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuI2tleWRvd24uYmluZCh0aGlzKSwgewogICAgICAgIHNpZ25hbDogdGhpcy5fdWlNYW5hZ2VyLl9zaWduYWwKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBoaWdobGlnaHREaXYgPSB0aGlzLiNoaWdobGlnaHREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGRpdi5hcHBlbmQoaGlnaGxpZ2h0RGl2KTsKICAgIGhpZ2hsaWdodERpdi5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwgInRydWUiKTsKICAgIGhpZ2hsaWdodERpdi5jbGFzc05hbWUgPSAiaW50ZXJuYWwiOwogICAgaGlnaGxpZ2h0RGl2LnN0eWxlLmNsaXBQYXRoID0gdGhpcy4jY2xpcFBhdGhJZDsKICAgIHRoaXMuc2V0RGltcygpOwogICAgYmluZEV2ZW50cyh0aGlzLCB0aGlzLiNoaWdobGlnaHREaXYsIFsicG9pbnRlcm92ZXIiLCAicG9pbnRlcmxlYXZlIl0pOwogICAgdGhpcy5lbmFibGVFZGl0aW5nKCk7CiAgICByZXR1cm4gZGl2OwogIH0KICBwb2ludGVyb3ZlcigpIHsKICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKSB7CiAgICAgIHRoaXMucGFyZW50Py5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyh0aGlzLiNvdXRsaW5lSWQsIHsKICAgICAgICByb290Q2xhc3M6IHsKICAgICAgICAgIGhvdmVyZWQ6IHRydWUKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICBwb2ludGVybGVhdmUoKSB7CiAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZCkgewogICAgICB0aGlzLnBhcmVudD8uZHJhd0xheWVyLnVwZGF0ZVByb3BlcnRpZXModGhpcy4jb3V0bGluZUlkLCB7CiAgICAgICAgcm9vdENsYXNzOiB7CiAgICAgICAgICBob3ZlcmVkOiBmYWxzZQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQogICNrZXlkb3duKGV2ZW50KSB7CiAgICBIaWdobGlnaHRFZGl0b3IuX2tleWJvYXJkTWFuYWdlci5leGVjKHRoaXMsIGV2ZW50KTsKICB9CiAgX21vdmVDYXJldChkaXJlY3Rpb24pIHsKICAgIHRoaXMucGFyZW50LnVuc2VsZWN0KHRoaXMpOwogICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICAgY2FzZSAwOgogICAgICBjYXNlIDI6CiAgICAgICAgdGhpcy4jc2V0Q2FyZXQodHJ1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMToKICAgICAgY2FzZSAzOgogICAgICAgIHRoaXMuI3NldENhcmV0KGZhbHNlKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CiAgI3NldENhcmV0KHN0YXJ0KSB7CiAgICBpZiAoIXRoaXMuI2FuY2hvck5vZGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKHN0YXJ0KSB7CiAgICAgIHNlbGVjdGlvbi5zZXRQb3NpdGlvbih0aGlzLiNhbmNob3JOb2RlLCB0aGlzLiNhbmNob3JPZmZzZXQpOwogICAgfSBlbHNlIHsKICAgICAgc2VsZWN0aW9uLnNldFBvc2l0aW9uKHRoaXMuI2ZvY3VzTm9kZSwgdGhpcy4jZm9jdXNPZmZzZXQpOwogICAgfQogIH0KICBzZWxlY3QoKSB7CiAgICBzdXBlci5zZWxlY3QoKTsKICAgIGlmICghdGhpcy4jb3V0bGluZUlkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMucGFyZW50Py5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyh0aGlzLiNvdXRsaW5lSWQsIHsKICAgICAgcm9vdENsYXNzOiB7CiAgICAgICAgaG92ZXJlZDogZmFsc2UsCiAgICAgICAgc2VsZWN0ZWQ6IHRydWUKICAgICAgfQogICAgfSk7CiAgfQogIHVuc2VsZWN0KCkgewogICAgc3VwZXIudW5zZWxlY3QoKTsKICAgIGlmICghdGhpcy4jb3V0bGluZUlkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMucGFyZW50Py5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyh0aGlzLiNvdXRsaW5lSWQsIHsKICAgICAgcm9vdENsYXNzOiB7CiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlCiAgICAgIH0KICAgIH0pOwogICAgaWYgKCF0aGlzLiNpc0ZyZWVIaWdobGlnaHQpIHsKICAgICAgdGhpcy4jc2V0Q2FyZXQoZmFsc2UpOwogICAgfQogIH0KICBnZXQgX211c3RGaXhQb3NpdGlvbigpIHsKICAgIHJldHVybiAhdGhpcy4jaXNGcmVlSGlnaGxpZ2h0OwogIH0KICBzaG93KHZpc2libGUgPSB0aGlzLl9pc1Zpc2libGUpIHsKICAgIHN1cGVyLnNob3codmlzaWJsZSk7CiAgICBpZiAodGhpcy5wYXJlbnQpIHsKICAgICAgdGhpcy5wYXJlbnQuZHJhd0xheWVyLnVwZGF0ZVByb3BlcnRpZXModGhpcy4jaWQsIHsKICAgICAgICByb290Q2xhc3M6IHsKICAgICAgICAgIGhpZGRlbjogIXZpc2libGUKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnBhcmVudC5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyh0aGlzLiNvdXRsaW5lSWQsIHsKICAgICAgICByb290Q2xhc3M6IHsKICAgICAgICAgIGhpZGRlbjogIXZpc2libGUKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICAjZ2V0Um90YXRpb24oKSB7CiAgICByZXR1cm4gdGhpcy4jaXNGcmVlSGlnaGxpZ2h0ID8gdGhpcy5yb3RhdGlvbiA6IDA7CiAgfQogICNzZXJpYWxpemVCb3hlcygpIHsKICAgIGlmICh0aGlzLiNpc0ZyZWVIaWdobGlnaHQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBbcGFnZVdpZHRoLCBwYWdlSGVpZ2h0XSA9IHRoaXMucGFnZURpbWVuc2lvbnM7CiAgICBjb25zdCBbcGFnZVgsIHBhZ2VZXSA9IHRoaXMucGFnZVRyYW5zbGF0aW9uOwogICAgY29uc3QgYm94ZXMgPSB0aGlzLiNib3hlczsKICAgIGNvbnN0IHF1YWRQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KGJveGVzLmxlbmd0aCAqIDgpOwogICAgbGV0IGkgPSAwOwogICAgZm9yIChjb25zdCB7CiAgICAgIHgsCiAgICAgIHksCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQKICAgIH0gb2YgYm94ZXMpIHsKICAgICAgY29uc3Qgc3ggPSB4ICogcGFnZVdpZHRoICsgcGFnZVg7CiAgICAgIGNvbnN0IHN5ID0gKDEgLSB5KSAqIHBhZ2VIZWlnaHQgKyBwYWdlWTsKICAgICAgcXVhZFBvaW50c1tpXSA9IHF1YWRQb2ludHNbaSArIDRdID0gc3g7CiAgICAgIHF1YWRQb2ludHNbaSArIDFdID0gcXVhZFBvaW50c1tpICsgM10gPSBzeTsKICAgICAgcXVhZFBvaW50c1tpICsgMl0gPSBxdWFkUG9pbnRzW2kgKyA2XSA9IHN4ICsgd2lkdGggKiBwYWdlV2lkdGg7CiAgICAgIHF1YWRQb2ludHNbaSArIDVdID0gcXVhZFBvaW50c1tpICsgN10gPSBzeSAtIGhlaWdodCAqIHBhZ2VIZWlnaHQ7CiAgICAgIGkgKz0gODsKICAgIH0KICAgIHJldHVybiBxdWFkUG9pbnRzOwogIH0KICAjc2VyaWFsaXplT3V0bGluZXMocmVjdCkgewogICAgcmV0dXJuIHRoaXMuI2hpZ2hsaWdodE91dGxpbmVzLnNlcmlhbGl6ZShyZWN0LCB0aGlzLiNnZXRSb3RhdGlvbigpKTsKICB9CiAgc3RhdGljIHN0YXJ0SGlnaGxpZ2h0aW5nKHBhcmVudCwgaXNMVFIsIHsKICAgIHRhcmdldDogdGV4dExheWVyLAogICAgeCwKICAgIHkKICB9KSB7CiAgICBjb25zdCB7CiAgICAgIHg6IGxheWVyWCwKICAgICAgeTogbGF5ZXJZLAogICAgICB3aWR0aDogcGFyZW50V2lkdGgsCiAgICAgIGhlaWdodDogcGFyZW50SGVpZ2h0CiAgICB9ID0gdGV4dExheWVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICBjb25zdCBzaWduYWwgPSBwYXJlbnQuY29tYmluZWRTaWduYWwoYWMpOwogICAgY29uc3QgcG9pbnRlclVwQ2FsbGJhY2sgPSBlID0+IHsKICAgICAgYWMuYWJvcnQoKTsKICAgICAgdGhpcy4jZW5kSGlnaGxpZ2h0KHBhcmVudCwgZSk7CiAgICB9OwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCBwb2ludGVyVXBDYWxsYmFjaywgewogICAgICBzaWduYWwKICAgIH0pOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsIHBvaW50ZXJVcENhbGxiYWNrLCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLCBzdG9wRXZlbnQsIHsKICAgICAgY2FwdHVyZTogdHJ1ZSwKICAgICAgcGFzc2l2ZTogZmFsc2UsCiAgICAgIHNpZ25hbAogICAgfSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCBub0NvbnRleHRNZW51LCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICB0ZXh0TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLiNoaWdobGlnaHRNb3ZlLmJpbmQodGhpcywgcGFyZW50KSwgewogICAgICBzaWduYWwKICAgIH0pOwogICAgdGhpcy5fZnJlZUhpZ2hsaWdodCA9IG5ldyBGcmVlSGlnaGxpZ2h0T3V0bGluZXIoewogICAgICB4LAogICAgICB5CiAgICB9LCBbbGF5ZXJYLCBsYXllclksIHBhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHRdLCBwYXJlbnQuc2NhbGUsIHRoaXMuX2RlZmF1bHRUaGlja25lc3MgLyAyLCBpc0xUUiwgMC4wMDEpOwogICAgKHsKICAgICAgaWQ6IHRoaXMuX2ZyZWVIaWdobGlnaHRJZCwKICAgICAgY2xpcFBhdGhJZDogdGhpcy5fZnJlZUhpZ2hsaWdodENsaXBJZAogICAgfSA9IHBhcmVudC5kcmF3TGF5ZXIuZHJhdyh7CiAgICAgIGJib3g6IFswLCAwLCAxLCAxXSwKICAgICAgcm9vdDogewogICAgICAgIHZpZXdCb3g6ICIwIDAgMSAxIiwKICAgICAgICBmaWxsOiB0aGlzLl9kZWZhdWx0Q29sb3IsCiAgICAgICAgImZpbGwtb3BhY2l0eSI6IHRoaXMuX2RlZmF1bHRPcGFjaXR5CiAgICAgIH0sCiAgICAgIHJvb3RDbGFzczogewogICAgICAgIGhpZ2hsaWdodDogdHJ1ZSwKICAgICAgICBmcmVlOiB0cnVlCiAgICAgIH0sCiAgICAgIHBhdGg6IHsKICAgICAgICBkOiB0aGlzLl9mcmVlSGlnaGxpZ2h0LnRvU1ZHUGF0aCgpCiAgICAgIH0KICAgIH0sIHRydWUsIHRydWUpKTsKICB9CiAgc3RhdGljICNoaWdobGlnaHRNb3ZlKHBhcmVudCwgZXZlbnQpIHsKICAgIGlmICh0aGlzLl9mcmVlSGlnaGxpZ2h0LmFkZChldmVudCkpIHsKICAgICAgcGFyZW50LmRyYXdMYXllci51cGRhdGVQcm9wZXJ0aWVzKHRoaXMuX2ZyZWVIaWdobGlnaHRJZCwgewogICAgICAgIHBhdGg6IHsKICAgICAgICAgIGQ6IHRoaXMuX2ZyZWVIaWdobGlnaHQudG9TVkdQYXRoKCkKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICBzdGF0aWMgI2VuZEhpZ2hsaWdodChwYXJlbnQsIGV2ZW50KSB7CiAgICBpZiAoIXRoaXMuX2ZyZWVIaWdobGlnaHQuaXNFbXB0eSgpKSB7CiAgICAgIHBhcmVudC5jcmVhdGVBbmRBZGROZXdFZGl0b3IoZXZlbnQsIGZhbHNlLCB7CiAgICAgICAgaGlnaGxpZ2h0SWQ6IHRoaXMuX2ZyZWVIaWdobGlnaHRJZCwKICAgICAgICBoaWdobGlnaHRPdXRsaW5lczogdGhpcy5fZnJlZUhpZ2hsaWdodC5nZXRPdXRsaW5lcygpLAogICAgICAgIGNsaXBQYXRoSWQ6IHRoaXMuX2ZyZWVIaWdobGlnaHRDbGlwSWQsCiAgICAgICAgbWV0aG9kT2ZDcmVhdGlvbjogIm1haW5fdG9vbGJhciIKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBwYXJlbnQuZHJhd0xheWVyLnJlbW92ZSh0aGlzLl9mcmVlSGlnaGxpZ2h0SWQpOwogICAgfQogICAgdGhpcy5fZnJlZUhpZ2hsaWdodElkID0gLTE7CiAgICB0aGlzLl9mcmVlSGlnaGxpZ2h0ID0gbnVsbDsKICAgIHRoaXMuX2ZyZWVIaWdobGlnaHRDbGlwSWQgPSAiIjsKICB9CiAgc3RhdGljIGFzeW5jIGRlc2VyaWFsaXplKGRhdGEsIHBhcmVudCwgdWlNYW5hZ2VyKSB7CiAgICBsZXQgaW5pdGlhbERhdGEgPSBudWxsOwogICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudCkgewogICAgICBjb25zdCB7CiAgICAgICAgZGF0YTogewogICAgICAgICAgcXVhZFBvaW50cywKICAgICAgICAgIHJlY3QsCiAgICAgICAgICByb3RhdGlvbiwKICAgICAgICAgIGlkLAogICAgICAgICAgY29sb3IsCiAgICAgICAgICBvcGFjaXR5LAogICAgICAgICAgcG9wdXBSZWYsCiAgICAgICAgICByaWNoVGV4dCwKICAgICAgICAgIGNvbnRlbnRzT2JqLAogICAgICAgICAgY3JlYXRpb25EYXRlLAogICAgICAgICAgbW9kaWZpY2F0aW9uRGF0ZQogICAgICAgIH0sCiAgICAgICAgcGFyZW50OiB7CiAgICAgICAgICBwYWdlOiB7CiAgICAgICAgICAgIHBhZ2VOdW1iZXIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gPSBkYXRhOwogICAgICBpbml0aWFsRGF0YSA9IGRhdGEgPSB7CiAgICAgICAgYW5ub3RhdGlvblR5cGU6IEFubm90YXRpb25FZGl0b3JUeXBlLkhJR0hMSUdIVCwKICAgICAgICBjb2xvcjogQXJyYXkuZnJvbShjb2xvciksCiAgICAgICAgb3BhY2l0eSwKICAgICAgICBxdWFkUG9pbnRzLAogICAgICAgIGJveGVzOiBudWxsLAogICAgICAgIHBhZ2VJbmRleDogcGFnZU51bWJlciAtIDEsCiAgICAgICAgcmVjdDogcmVjdC5zbGljZSgwKSwKICAgICAgICByb3RhdGlvbiwKICAgICAgICBhbm5vdGF0aW9uRWxlbWVudElkOiBpZCwKICAgICAgICBpZCwKICAgICAgICBkZWxldGVkOiBmYWxzZSwKICAgICAgICBwb3B1cFJlZiwKICAgICAgICByaWNoVGV4dCwKICAgICAgICBjb21tZW50OiBjb250ZW50c09iaj8uc3RyIHx8IG51bGwsCiAgICAgICAgY3JlYXRpb25EYXRlLAogICAgICAgIG1vZGlmaWNhdGlvbkRhdGUKICAgICAgfTsKICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIElua0Fubm90YXRpb25FbGVtZW50KSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhOiB7CiAgICAgICAgICBpbmtMaXN0cywKICAgICAgICAgIHJlY3QsCiAgICAgICAgICByb3RhdGlvbiwKICAgICAgICAgIGlkLAogICAgICAgICAgY29sb3IsCiAgICAgICAgICBib3JkZXJTdHlsZTogewogICAgICAgICAgICByYXdXaWR0aDogdGhpY2tuZXNzCiAgICAgICAgICB9LAogICAgICAgICAgcG9wdXBSZWYsCiAgICAgICAgICByaWNoVGV4dCwKICAgICAgICAgIGNvbnRlbnRzT2JqLAogICAgICAgICAgY3JlYXRpb25EYXRlLAogICAgICAgICAgbW9kaWZpY2F0aW9uRGF0ZQogICAgICAgIH0sCiAgICAgICAgcGFyZW50OiB7CiAgICAgICAgICBwYWdlOiB7CiAgICAgICAgICAgIHBhZ2VOdW1iZXIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gPSBkYXRhOwogICAgICBpbml0aWFsRGF0YSA9IGRhdGEgPSB7CiAgICAgICAgYW5ub3RhdGlvblR5cGU6IEFubm90YXRpb25FZGl0b3JUeXBlLkhJR0hMSUdIVCwKICAgICAgICBjb2xvcjogQXJyYXkuZnJvbShjb2xvciksCiAgICAgICAgdGhpY2tuZXNzLAogICAgICAgIGlua0xpc3RzLAogICAgICAgIGJveGVzOiBudWxsLAogICAgICAgIHBhZ2VJbmRleDogcGFnZU51bWJlciAtIDEsCiAgICAgICAgcmVjdDogcmVjdC5zbGljZSgwKSwKICAgICAgICByb3RhdGlvbiwKICAgICAgICBhbm5vdGF0aW9uRWxlbWVudElkOiBpZCwKICAgICAgICBpZCwKICAgICAgICBkZWxldGVkOiBmYWxzZSwKICAgICAgICBwb3B1cFJlZiwKICAgICAgICByaWNoVGV4dCwKICAgICAgICBjb21tZW50OiBjb250ZW50c09iaj8uc3RyIHx8IG51bGwsCiAgICAgICAgY3JlYXRpb25EYXRlLAogICAgICAgIG1vZGlmaWNhdGlvbkRhdGUKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgY29sb3IsCiAgICAgIHF1YWRQb2ludHMsCiAgICAgIGlua0xpc3RzLAogICAgICBvcGFjaXR5CiAgICB9ID0gZGF0YTsKICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHN1cGVyLmRlc2VyaWFsaXplKGRhdGEsIHBhcmVudCwgdWlNYW5hZ2VyKTsKICAgIGVkaXRvci5jb2xvciA9IFV0aWwubWFrZUhleENvbG9yKC4uLmNvbG9yKTsKICAgIGVkaXRvci5vcGFjaXR5ID0gb3BhY2l0eSB8fCAxOwogICAgaWYgKGlua0xpc3RzKSB7CiAgICAgIGVkaXRvci4jdGhpY2tuZXNzID0gZGF0YS50aGlja25lc3M7CiAgICB9CiAgICBlZGl0b3IuX2luaXRpYWxEYXRhID0gaW5pdGlhbERhdGE7CiAgICBpZiAoZGF0YS5jb21tZW50KSB7CiAgICAgIGVkaXRvci5zZXRDb21tZW50RGF0YShkYXRhKTsKICAgIH0KICAgIGNvbnN0IFtwYWdlV2lkdGgsIHBhZ2VIZWlnaHRdID0gZWRpdG9yLnBhZ2VEaW1lbnNpb25zOwogICAgY29uc3QgW3BhZ2VYLCBwYWdlWV0gPSBlZGl0b3IucGFnZVRyYW5zbGF0aW9uOwogICAgaWYgKHF1YWRQb2ludHMpIHsKICAgICAgY29uc3QgYm94ZXMgPSBlZGl0b3IuI2JveGVzID0gW107CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVhZFBvaW50cy5sZW5ndGg7IGkgKz0gOCkgewogICAgICAgIGJveGVzLnB1c2goewogICAgICAgICAgeDogKHF1YWRQb2ludHNbaV0gLSBwYWdlWCkgLyBwYWdlV2lkdGgsCiAgICAgICAgICB5OiAxIC0gKHF1YWRQb2ludHNbaSArIDFdIC0gcGFnZVkpIC8gcGFnZUhlaWdodCwKICAgICAgICAgIHdpZHRoOiAocXVhZFBvaW50c1tpICsgMl0gLSBxdWFkUG9pbnRzW2ldKSAvIHBhZ2VXaWR0aCwKICAgICAgICAgIGhlaWdodDogKHF1YWRQb2ludHNbaSArIDFdIC0gcXVhZFBvaW50c1tpICsgNV0pIC8gcGFnZUhlaWdodAogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVkaXRvci4jY3JlYXRlT3V0bGluZXMoKTsKICAgICAgZWRpdG9yLiNhZGRUb0RyYXdMYXllcigpOwogICAgICBlZGl0b3Iucm90YXRlKGVkaXRvci5yb3RhdGlvbik7CiAgICB9IGVsc2UgaWYgKGlua0xpc3RzKSB7CiAgICAgIGVkaXRvci4jaXNGcmVlSGlnaGxpZ2h0ID0gdHJ1ZTsKICAgICAgY29uc3QgcG9pbnRzID0gaW5rTGlzdHNbMF07CiAgICAgIGNvbnN0IHBvaW50ID0gewogICAgICAgIHg6IHBvaW50c1swXSAtIHBhZ2VYLAogICAgICAgIHk6IHBhZ2VIZWlnaHQgLSAocG9pbnRzWzFdIC0gcGFnZVkpCiAgICAgIH07CiAgICAgIGNvbnN0IG91dGxpbmVyID0gbmV3IEZyZWVIaWdobGlnaHRPdXRsaW5lcihwb2ludCwgWzAsIDAsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodF0sIDEsIGVkaXRvci4jdGhpY2tuZXNzIC8gMiwgdHJ1ZSwgMC4wMDEpOwogICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikgewogICAgICAgIHBvaW50LnggPSBwb2ludHNbaV0gLSBwYWdlWDsKICAgICAgICBwb2ludC55ID0gcGFnZUhlaWdodCAtIChwb2ludHNbaSArIDFdIC0gcGFnZVkpOwogICAgICAgIG91dGxpbmVyLmFkZChwb2ludCk7CiAgICAgIH0KICAgICAgY29uc3QgewogICAgICAgIGlkLAogICAgICAgIGNsaXBQYXRoSWQKICAgICAgfSA9IHBhcmVudC5kcmF3TGF5ZXIuZHJhdyh7CiAgICAgICAgYmJveDogWzAsIDAsIDEsIDFdLAogICAgICAgIHJvb3Q6IHsKICAgICAgICAgIHZpZXdCb3g6ICIwIDAgMSAxIiwKICAgICAgICAgIGZpbGw6IGVkaXRvci5jb2xvciwKICAgICAgICAgICJmaWxsLW9wYWNpdHkiOiBlZGl0b3IuX2RlZmF1bHRPcGFjaXR5CiAgICAgICAgfSwKICAgICAgICByb290Q2xhc3M6IHsKICAgICAgICAgIGhpZ2hsaWdodDogdHJ1ZSwKICAgICAgICAgIGZyZWU6IHRydWUKICAgICAgICB9LAogICAgICAgIHBhdGg6IHsKICAgICAgICAgIGQ6IG91dGxpbmVyLnRvU1ZHUGF0aCgpCiAgICAgICAgfQogICAgICB9LCB0cnVlLCB0cnVlKTsKICAgICAgZWRpdG9yLiNjcmVhdGVGcmVlT3V0bGluZXMoewogICAgICAgIGhpZ2hsaWdodE91dGxpbmVzOiBvdXRsaW5lci5nZXRPdXRsaW5lcygpLAogICAgICAgIGhpZ2hsaWdodElkOiBpZCwKICAgICAgICBjbGlwUGF0aElkCiAgICAgIH0pOwogICAgICBlZGl0b3IuI2FkZFRvRHJhd0xheWVyKCk7CiAgICAgIGVkaXRvci5yb3RhdGUoZWRpdG9yLnBhcmVudFJvdGF0aW9uKTsKICAgIH0KICAgIHJldHVybiBlZGl0b3I7CiAgfQogIHNlcmlhbGl6ZShpc0ZvckNvcHlpbmcgPSBmYWxzZSkgewogICAgaWYgKHRoaXMuaXNFbXB0eSgpIHx8IGlzRm9yQ29weWluZykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICh0aGlzLmRlbGV0ZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplRGVsZXRlZCgpOwogICAgfQogICAgY29uc3QgY29sb3IgPSBBbm5vdGF0aW9uRWRpdG9yLl9jb2xvck1hbmFnZXIuY29udmVydCh0aGlzLl91aU1hbmFnZXIuZ2V0Tm9uSENNQ29sb3IodGhpcy5jb2xvcikpOwogICAgY29uc3Qgc2VyaWFsaXplZCA9IHN1cGVyLnNlcmlhbGl6ZShpc0ZvckNvcHlpbmcpOwogICAgT2JqZWN0LmFzc2lnbihzZXJpYWxpemVkLCB7CiAgICAgIGNvbG9yLAogICAgICBvcGFjaXR5OiB0aGlzLm9wYWNpdHksCiAgICAgIHRoaWNrbmVzczogdGhpcy4jdGhpY2tuZXNzLAogICAgICBxdWFkUG9pbnRzOiB0aGlzLiNzZXJpYWxpemVCb3hlcygpLAogICAgICBvdXRsaW5lczogdGhpcy4jc2VyaWFsaXplT3V0bGluZXMoc2VyaWFsaXplZC5yZWN0KQogICAgfSk7CiAgICB0aGlzLmFkZENvbW1lbnQoc2VyaWFsaXplZCk7CiAgICBpZiAodGhpcy5hbm5vdGF0aW9uRWxlbWVudElkICYmICF0aGlzLiNoYXNFbGVtZW50Q2hhbmdlZChzZXJpYWxpemVkKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHNlcmlhbGl6ZWQuaWQgPSB0aGlzLmFubm90YXRpb25FbGVtZW50SWQ7CiAgICByZXR1cm4gc2VyaWFsaXplZDsKICB9CiAgI2hhc0VsZW1lbnRDaGFuZ2VkKHNlcmlhbGl6ZWQpIHsKICAgIGNvbnN0IHsKICAgICAgY29sb3IKICAgIH0gPSB0aGlzLl9pbml0aWFsRGF0YTsKICAgIHJldHVybiB0aGlzLmhhc0VkaXRlZENvbW1lbnQgfHwgc2VyaWFsaXplZC5jb2xvci5zb21lKChjLCBpKSA9PiBjICE9PSBjb2xvcltpXSk7CiAgfQogIHJlbmRlckFubm90YXRpb25FbGVtZW50KGFubm90YXRpb24pIHsKICAgIGlmICh0aGlzLmRlbGV0ZWQpIHsKICAgICAgYW5ub3RhdGlvbi5oaWRlKCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgYW5ub3RhdGlvbi51cGRhdGVFZGl0ZWQoewogICAgICByZWN0OiB0aGlzLmdldFBERlJlY3QoKSwKICAgICAgcG9wdXA6IHRoaXMuY29tbWVudAogICAgfSk7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgc3RhdGljIGNhbkNyZWF0ZU5ld0VtcHR5RWRpdG9yKCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL2RyYXcuanMKCgoKCmNsYXNzIERyYXdpbmdPcHRpb25zIHsKICAjc3ZnUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgdXBkYXRlUHJvcGVydHkobmFtZSwgdmFsdWUpIHsKICAgIHRoaXNbbmFtZV0gPSB2YWx1ZTsKICAgIHRoaXMudXBkYXRlU1ZHUHJvcGVydHkobmFtZSwgdmFsdWUpOwogIH0KICB1cGRhdGVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHsKICAgIGlmICghcHJvcGVydGllcykgewogICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpIHsKICAgICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgoIl8iKSkgewogICAgICAgIHRoaXMudXBkYXRlUHJvcGVydHkobmFtZSwgdmFsdWUpOwogICAgICB9CiAgICB9CiAgfQogIHVwZGF0ZVNWR1Byb3BlcnR5KG5hbWUsIHZhbHVlKSB7CiAgICB0aGlzLiNzdmdQcm9wZXJ0aWVzW25hbWVdID0gdmFsdWU7CiAgfQogIHRvU1ZHUHJvcGVydGllcygpIHsKICAgIGNvbnN0IHJvb3QgPSB0aGlzLiNzdmdQcm9wZXJ0aWVzOwogICAgdGhpcy4jc3ZnUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICByZXR1cm4gewogICAgICByb290CiAgICB9OwogIH0KICByZXNldCgpIHsKICAgIHRoaXMuI3N2Z1Byb3BlcnRpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogIH0KICB1cGRhdGVBbGwob3B0aW9ucyA9IHRoaXMpIHsKICAgIHRoaXMudXBkYXRlUHJvcGVydGllcyhvcHRpb25zKTsKICB9CiAgY2xvbmUoKSB7CiAgICB1bnJlYWNoYWJsZSgiTm90IGltcGxlbWVudGVkIik7CiAgfQp9CmNsYXNzIERyYXdpbmdFZGl0b3IgZXh0ZW5kcyBBbm5vdGF0aW9uRWRpdG9yIHsKICAjZHJhd091dGxpbmVzID0gbnVsbDsKICAjbXVzdEJlQ29tbWl0dGVkOwogIF9jb2xvclBpY2tlciA9IG51bGw7CiAgX2RyYXdJZCA9IG51bGw7CiAgc3RhdGljIF9jdXJyZW50RHJhd0lkID0gLTE7CiAgc3RhdGljIF9jdXJyZW50UGFyZW50ID0gbnVsbDsKICBzdGF0aWMgI2N1cnJlbnREcmF3ID0gbnVsbDsKICBzdGF0aWMgI2N1cnJlbnREcmF3aW5nQUMgPSBudWxsOwogIHN0YXRpYyAjY3VycmVudERyYXdpbmdPcHRpb25zID0gbnVsbDsKICBzdGF0aWMgX0lOTkVSX01BUkdJTiA9IDM7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcihwYXJhbXMpOwogICAgdGhpcy4jbXVzdEJlQ29tbWl0dGVkID0gcGFyYW1zLm11c3RCZUNvbW1pdHRlZCB8fCBmYWxzZTsKICAgIHRoaXMuX2FkZE91dGxpbmVzKHBhcmFtcyk7CiAgfQogIG9uVXBkYXRlZENvbG9yKCkgewogICAgdGhpcy5fY29sb3JQaWNrZXI/LnVwZGF0ZSh0aGlzLmNvbG9yKTsKICAgIHN1cGVyLm9uVXBkYXRlZENvbG9yKCk7CiAgfQogIF9hZGRPdXRsaW5lcyhwYXJhbXMpIHsKICAgIGlmIChwYXJhbXMuZHJhd091dGxpbmVzKSB7CiAgICAgIHRoaXMuI2NyZWF0ZURyYXdPdXRsaW5lcyhwYXJhbXMpOwogICAgICB0aGlzLiNhZGRUb0RyYXdMYXllcigpOwogICAgfQogIH0KICAjY3JlYXRlRHJhd091dGxpbmVzKHsKICAgIGRyYXdPdXRsaW5lcywKICAgIGRyYXdJZCwKICAgIGRyYXdpbmdPcHRpb25zCiAgfSkgewogICAgdGhpcy4jZHJhd091dGxpbmVzID0gZHJhd091dGxpbmVzOwogICAgdGhpcy5fZHJhd2luZ09wdGlvbnMgfHw9IGRyYXdpbmdPcHRpb25zOwogICAgaWYgKCF0aGlzLmFubm90YXRpb25FbGVtZW50SWQpIHsKICAgICAgdGhpcy5fdWlNYW5hZ2VyLmExMXlBbGVydChgcGRmanMtZWRpdG9yLSR7dGhpcy5lZGl0b3JUeXBlfS1hZGRlZC1hbGVydGApOwogICAgfQogICAgaWYgKGRyYXdJZCA+PSAwKSB7CiAgICAgIHRoaXMuX2RyYXdJZCA9IGRyYXdJZDsKICAgICAgdGhpcy5wYXJlbnQuZHJhd0xheWVyLmZpbmFsaXplRHJhdyhkcmF3SWQsIGRyYXdPdXRsaW5lcy5kZWZhdWx0UHJvcGVydGllcyk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLl9kcmF3SWQgPSB0aGlzLiNjcmVhdGVEcmF3aW5nKGRyYXdPdXRsaW5lcywgdGhpcy5wYXJlbnQpOwogICAgfQogICAgdGhpcy4jdXBkYXRlQmJveChkcmF3T3V0bGluZXMuYm94KTsKICB9CiAgI2NyZWF0ZURyYXdpbmcoZHJhd091dGxpbmVzLCBwYXJlbnQpIHsKICAgIGNvbnN0IHsKICAgICAgaWQKICAgIH0gPSBwYXJlbnQuZHJhd0xheWVyLmRyYXcoRHJhd2luZ0VkaXRvci5fbWVyZ2VTVkdQcm9wZXJ0aWVzKHRoaXMuX2RyYXdpbmdPcHRpb25zLnRvU1ZHUHJvcGVydGllcygpLCBkcmF3T3V0bGluZXMuZGVmYXVsdFNWR1Byb3BlcnRpZXMpLCBmYWxzZSwgZmFsc2UpOwogICAgcmV0dXJuIGlkOwogIH0KICBzdGF0aWMgX21lcmdlU1ZHUHJvcGVydGllcyhwMSwgcDIpIHsKICAgIGNvbnN0IHAxS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocDEpKTsKICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHAyKSkgewogICAgICBpZiAocDFLZXlzLmhhcyhrZXkpKSB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihwMVtrZXldLCB2YWx1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcDFba2V5XSA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcDE7CiAgfQogIHN0YXRpYyBnZXREZWZhdWx0RHJhd2luZ09wdGlvbnMoX29wdGlvbnMpIHsKICAgIHVucmVhY2hhYmxlKCJOb3QgaW1wbGVtZW50ZWQiKTsKICB9CiAgc3RhdGljIGdldCB0eXBlc01hcCgpIHsKICAgIHVucmVhY2hhYmxlKCJOb3QgaW1wbGVtZW50ZWQiKTsKICB9CiAgc3RhdGljIGdldCBpc0RyYXdlcigpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBzdGF0aWMgZ2V0IHN1cHBvcnRNdWx0aXBsZURyYXdpbmdzKCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBzdGF0aWMgdXBkYXRlRGVmYXVsdFBhcmFtcyh0eXBlLCB2YWx1ZSkgewogICAgY29uc3QgcHJvcGVydHlOYW1lID0gdGhpcy50eXBlc01hcC5nZXQodHlwZSk7CiAgICBpZiAocHJvcGVydHlOYW1lKSB7CiAgICAgIHRoaXMuX2RlZmF1bHREcmF3aW5nT3B0aW9ucy51cGRhdGVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgIH0KICAgIGlmICh0aGlzLl9jdXJyZW50UGFyZW50KSB7CiAgICAgIERyYXdpbmdFZGl0b3IuI2N1cnJlbnREcmF3LnVwZGF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgICB0aGlzLl9jdXJyZW50UGFyZW50LmRyYXdMYXllci51cGRhdGVQcm9wZXJ0aWVzKHRoaXMuX2N1cnJlbnREcmF3SWQsIHRoaXMuX2RlZmF1bHREcmF3aW5nT3B0aW9ucy50b1NWR1Byb3BlcnRpZXMoKSk7CiAgICB9CiAgfQogIHVwZGF0ZVBhcmFtcyh0eXBlLCB2YWx1ZSkgewogICAgY29uc3QgcHJvcGVydHlOYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci50eXBlc01hcC5nZXQodHlwZSk7CiAgICBpZiAocHJvcGVydHlOYW1lKSB7CiAgICAgIHRoaXMuX3VwZGF0ZVByb3BlcnR5KHR5cGUsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgfQogIH0KICBzdGF0aWMgZ2V0IGRlZmF1bHRQcm9wZXJ0aWVzVG9VcGRhdGUoKSB7CiAgICBjb25zdCBwcm9wZXJ0aWVzID0gW107CiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZGVmYXVsdERyYXdpbmdPcHRpb25zOwogICAgZm9yIChjb25zdCBbdHlwZSwgbmFtZV0gb2YgdGhpcy50eXBlc01hcCkgewogICAgICBwcm9wZXJ0aWVzLnB1c2goW3R5cGUsIG9wdGlvbnNbbmFtZV1dKTsKICAgIH0KICAgIHJldHVybiBwcm9wZXJ0aWVzOwogIH0KICBnZXQgcHJvcGVydGllc1RvVXBkYXRlKCkgewogICAgY29uc3QgcHJvcGVydGllcyA9IFtdOwogICAgY29uc3QgewogICAgICBfZHJhd2luZ09wdGlvbnMKICAgIH0gPSB0aGlzOwogICAgZm9yIChjb25zdCBbdHlwZSwgbmFtZV0gb2YgdGhpcy5jb25zdHJ1Y3Rvci50eXBlc01hcCkgewogICAgICBwcm9wZXJ0aWVzLnB1c2goW3R5cGUsIF9kcmF3aW5nT3B0aW9uc1tuYW1lXV0pOwogICAgfQogICAgcmV0dXJuIHByb3BlcnRpZXM7CiAgfQogIF91cGRhdGVQcm9wZXJ0eSh0eXBlLCBuYW1lLCB2YWx1ZSkgewogICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2RyYXdpbmdPcHRpb25zOwogICAgY29uc3Qgc2F2ZWRWYWx1ZSA9IG9wdGlvbnNbbmFtZV07CiAgICBjb25zdCBzZXR0ZXIgPSB2YWwgPT4gewogICAgICBvcHRpb25zLnVwZGF0ZVByb3BlcnR5KG5hbWUsIHZhbCk7CiAgICAgIGNvbnN0IGJib3ggPSB0aGlzLiNkcmF3T3V0bGluZXMudXBkYXRlUHJvcGVydHkobmFtZSwgdmFsKTsKICAgICAgaWYgKGJib3gpIHsKICAgICAgICB0aGlzLiN1cGRhdGVCYm94KGJib3gpOwogICAgICB9CiAgICAgIHRoaXMucGFyZW50Py5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyh0aGlzLl9kcmF3SWQsIG9wdGlvbnMudG9TVkdQcm9wZXJ0aWVzKCkpOwogICAgICBpZiAodHlwZSA9PT0gdGhpcy5jb2xvclR5cGUpIHsKICAgICAgICB0aGlzLm9uVXBkYXRlZENvbG9yKCk7CiAgICAgIH0KICAgIH07CiAgICB0aGlzLmFkZENvbW1hbmRzKHsKICAgICAgY21kOiBzZXR0ZXIuYmluZCh0aGlzLCB2YWx1ZSksCiAgICAgIHVuZG86IHNldHRlci5iaW5kKHRoaXMsIHNhdmVkVmFsdWUpLAogICAgICBwb3N0OiB0aGlzLl91aU1hbmFnZXIudXBkYXRlVUkuYmluZCh0aGlzLl91aU1hbmFnZXIsIHRoaXMpLAogICAgICBtdXN0RXhlYzogdHJ1ZSwKICAgICAgdHlwZSwKICAgICAgb3ZlcndyaXRlSWZTYW1lVHlwZTogdHJ1ZSwKICAgICAga2VlcFVuZG86IHRydWUKICAgIH0pOwogIH0KICBfb25SZXNpemluZygpIHsKICAgIHRoaXMucGFyZW50Py5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyh0aGlzLl9kcmF3SWQsIERyYXdpbmdFZGl0b3IuX21lcmdlU1ZHUHJvcGVydGllcyh0aGlzLiNkcmF3T3V0bGluZXMuZ2V0UGF0aFJlc2l6aW5nU1ZHUHJvcGVydGllcyh0aGlzLiNjb252ZXJ0VG9EcmF3U3BhY2UoKSksIHsKICAgICAgYmJveDogdGhpcy4jcm90YXRlQm94KCkKICAgIH0pKTsKICB9CiAgX29uUmVzaXplZCgpIHsKICAgIHRoaXMucGFyZW50Py5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyh0aGlzLl9kcmF3SWQsIERyYXdpbmdFZGl0b3IuX21lcmdlU1ZHUHJvcGVydGllcyh0aGlzLiNkcmF3T3V0bGluZXMuZ2V0UGF0aFJlc2l6ZWRTVkdQcm9wZXJ0aWVzKHRoaXMuI2NvbnZlcnRUb0RyYXdTcGFjZSgpKSwgewogICAgICBiYm94OiB0aGlzLiNyb3RhdGVCb3goKQogICAgfSkpOwogIH0KICBfb25UcmFuc2xhdGluZyhfeCwgX3kpIHsKICAgIHRoaXMucGFyZW50Py5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyh0aGlzLl9kcmF3SWQsIHsKICAgICAgYmJveDogdGhpcy4jcm90YXRlQm94KCkKICAgIH0pOwogIH0KICBfb25UcmFuc2xhdGVkKCkgewogICAgdGhpcy5wYXJlbnQ/LmRyYXdMYXllci51cGRhdGVQcm9wZXJ0aWVzKHRoaXMuX2RyYXdJZCwgRHJhd2luZ0VkaXRvci5fbWVyZ2VTVkdQcm9wZXJ0aWVzKHRoaXMuI2RyYXdPdXRsaW5lcy5nZXRQYXRoVHJhbnNsYXRlZFNWR1Byb3BlcnRpZXModGhpcy4jY29udmVydFRvRHJhd1NwYWNlKCksIHRoaXMucGFyZW50RGltZW5zaW9ucyksIHsKICAgICAgYmJveDogdGhpcy4jcm90YXRlQm94KCkKICAgIH0pKTsKICB9CiAgX29uU3RhcnREcmFnZ2luZygpIHsKICAgIHRoaXMucGFyZW50Py5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyh0aGlzLl9kcmF3SWQsIHsKICAgICAgcm9vdENsYXNzOiB7CiAgICAgICAgbW92aW5nOiB0cnVlCiAgICAgIH0KICAgIH0pOwogIH0KICBfb25TdG9wRHJhZ2dpbmcoKSB7CiAgICB0aGlzLnBhcmVudD8uZHJhd0xheWVyLnVwZGF0ZVByb3BlcnRpZXModGhpcy5fZHJhd0lkLCB7CiAgICAgIHJvb3RDbGFzczogewogICAgICAgIG1vdmluZzogZmFsc2UKICAgICAgfQogICAgfSk7CiAgfQogIGNvbW1pdCgpIHsKICAgIHN1cGVyLmNvbW1pdCgpOwogICAgdGhpcy5kaXNhYmxlRWRpdE1vZGUoKTsKICAgIHRoaXMuZGlzYWJsZUVkaXRpbmcoKTsKICB9CiAgZGlzYWJsZUVkaXRpbmcoKSB7CiAgICBzdXBlci5kaXNhYmxlRWRpdGluZygpOwogICAgdGhpcy5kaXYuY2xhc3NMaXN0LnRvZ2dsZSgiZGlzYWJsZWQiLCB0cnVlKTsKICB9CiAgZW5hYmxlRWRpdGluZygpIHsKICAgIHN1cGVyLmVuYWJsZUVkaXRpbmcoKTsKICAgIHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoImRpc2FibGVkIiwgZmFsc2UpOwogIH0KICBnZXRCYXNlVHJhbnNsYXRpb24oKSB7CiAgICByZXR1cm4gWzAsIDBdOwogIH0KICBnZXQgaXNSZXNpemFibGUoKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgb25jZUFkZGVkKGZvY3VzKSB7CiAgICBpZiAoIXRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCkgewogICAgICB0aGlzLnBhcmVudC5hZGRVbmRvYWJsZUVkaXRvcih0aGlzKTsKICAgIH0KICAgIHRoaXMuX2lzRHJhZ2dhYmxlID0gdHJ1ZTsKICAgIGlmICh0aGlzLiNtdXN0QmVDb21taXR0ZWQpIHsKICAgICAgdGhpcy4jbXVzdEJlQ29tbWl0dGVkID0gZmFsc2U7CiAgICAgIHRoaXMuY29tbWl0KCk7CiAgICAgIHRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpOwogICAgICBpZiAoZm9jdXMgJiYgdGhpcy5pc09uU2NyZWVuKSB7CiAgICAgICAgdGhpcy5kaXYuZm9jdXMoKTsKICAgICAgfQogICAgfQogIH0KICByZW1vdmUoKSB7CiAgICB0aGlzLiNjbGVhbkRyYXdMYXllcigpOwogICAgc3VwZXIucmVtb3ZlKCk7CiAgfQogIHJlYnVpbGQoKSB7CiAgICBpZiAoIXRoaXMucGFyZW50KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN1cGVyLnJlYnVpbGQoKTsKICAgIGlmICh0aGlzLmRpdiA9PT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNhZGRUb0RyYXdMYXllcigpOwogICAgdGhpcy4jdXBkYXRlQmJveCh0aGlzLiNkcmF3T3V0bGluZXMuYm94KTsKICAgIGlmICghdGhpcy5pc0F0dGFjaGVkVG9ET00pIHsKICAgICAgdGhpcy5wYXJlbnQuYWRkKHRoaXMpOwogICAgfQogIH0KICBzZXRQYXJlbnQocGFyZW50KSB7CiAgICBsZXQgbXVzdEJlU2VsZWN0ZWQgPSBmYWxzZTsKICAgIGlmICh0aGlzLnBhcmVudCAmJiAhcGFyZW50KSB7CiAgICAgIHRoaXMuX3VpTWFuYWdlci5yZW1vdmVTaG91bGRSZXNjYWxlKHRoaXMpOwogICAgICB0aGlzLiNjbGVhbkRyYXdMYXllcigpOwogICAgfSBlbHNlIGlmIChwYXJlbnQpIHsKICAgICAgdGhpcy5fdWlNYW5hZ2VyLmFkZFNob3VsZFJlc2NhbGUodGhpcyk7CiAgICAgIHRoaXMuI2FkZFRvRHJhd0xheWVyKHBhcmVudCk7CiAgICAgIG11c3RCZVNlbGVjdGVkID0gIXRoaXMucGFyZW50ICYmIHRoaXMuZGl2Py5jbGFzc0xpc3QuY29udGFpbnMoInNlbGVjdGVkRWRpdG9yIik7CiAgICB9CiAgICBzdXBlci5zZXRQYXJlbnQocGFyZW50KTsKICAgIGlmIChtdXN0QmVTZWxlY3RlZCkgewogICAgICB0aGlzLnNlbGVjdCgpOwogICAgfQogIH0KICAjY2xlYW5EcmF3TGF5ZXIoKSB7CiAgICBpZiAodGhpcy5fZHJhd0lkID09PSBudWxsIHx8ICF0aGlzLnBhcmVudCkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLnBhcmVudC5kcmF3TGF5ZXIucmVtb3ZlKHRoaXMuX2RyYXdJZCk7CiAgICB0aGlzLl9kcmF3SWQgPSBudWxsOwogICAgdGhpcy5fZHJhd2luZ09wdGlvbnMucmVzZXQoKTsKICB9CiAgI2FkZFRvRHJhd0xheWVyKHBhcmVudCA9IHRoaXMucGFyZW50KSB7CiAgICBpZiAodGhpcy5fZHJhd0lkICE9PSBudWxsICYmIHRoaXMucGFyZW50ID09PSBwYXJlbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuX2RyYXdJZCAhPT0gbnVsbCkgewogICAgICB0aGlzLnBhcmVudC5kcmF3TGF5ZXIudXBkYXRlUGFyZW50KHRoaXMuX2RyYXdJZCwgcGFyZW50LmRyYXdMYXllcik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuX2RyYXdpbmdPcHRpb25zLnVwZGF0ZUFsbCgpOwogICAgdGhpcy5fZHJhd0lkID0gdGhpcy4jY3JlYXRlRHJhd2luZyh0aGlzLiNkcmF3T3V0bGluZXMsIHBhcmVudCk7CiAgfQogICNjb252ZXJ0VG9QYXJlbnRTcGFjZShbeCwgeSwgd2lkdGgsIGhlaWdodF0pIHsKICAgIGNvbnN0IHsKICAgICAgcGFyZW50RGltZW5zaW9uczogW3BXLCBwSF0sCiAgICAgIHJvdGF0aW9uCiAgICB9ID0gdGhpczsKICAgIHN3aXRjaCAocm90YXRpb24pIHsKICAgICAgY2FzZSA5MDoKICAgICAgICByZXR1cm4gW3ksIDEgLSB4LCB3aWR0aCAqIChwSCAvIHBXKSwgaGVpZ2h0ICogKHBXIC8gcEgpXTsKICAgICAgY2FzZSAxODA6CiAgICAgICAgcmV0dXJuIFsxIC0geCwgMSAtIHksIHdpZHRoLCBoZWlnaHRdOwogICAgICBjYXNlIDI3MDoKICAgICAgICByZXR1cm4gWzEgLSB5LCB4LCB3aWR0aCAqIChwSCAvIHBXKSwgaGVpZ2h0ICogKHBXIC8gcEgpXTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gW3gsIHksIHdpZHRoLCBoZWlnaHRdOwogICAgfQogIH0KICAjY29udmVydFRvRHJhd1NwYWNlKCkgewogICAgY29uc3QgewogICAgICB4LAogICAgICB5LAogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0LAogICAgICBwYXJlbnREaW1lbnNpb25zOiBbcFcsIHBIXSwKICAgICAgcm90YXRpb24KICAgIH0gPSB0aGlzOwogICAgc3dpdGNoIChyb3RhdGlvbikgewogICAgICBjYXNlIDkwOgogICAgICAgIHJldHVybiBbMSAtIHksIHgsIHdpZHRoICogKHBXIC8gcEgpLCBoZWlnaHQgKiAocEggLyBwVyldOwogICAgICBjYXNlIDE4MDoKICAgICAgICByZXR1cm4gWzEgLSB4LCAxIC0geSwgd2lkdGgsIGhlaWdodF07CiAgICAgIGNhc2UgMjcwOgogICAgICAgIHJldHVybiBbeSwgMSAtIHgsIHdpZHRoICogKHBXIC8gcEgpLCBoZWlnaHQgKiAocEggLyBwVyldOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBbeCwgeSwgd2lkdGgsIGhlaWdodF07CiAgICB9CiAgfQogICN1cGRhdGVCYm94KGJib3gpIHsKICAgIFt0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdID0gdGhpcy4jY29udmVydFRvUGFyZW50U3BhY2UoYmJveCk7CiAgICBpZiAodGhpcy5kaXYpIHsKICAgICAgdGhpcy5maXhBbmRTZXRQb3NpdGlvbigpOwogICAgICB0aGlzLnNldERpbXMoKTsKICAgIH0KICAgIHRoaXMuX29uUmVzaXplZCgpOwogIH0KICAjcm90YXRlQm94KCkgewogICAgY29uc3QgewogICAgICB4LAogICAgICB5LAogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0LAogICAgICByb3RhdGlvbiwKICAgICAgcGFyZW50Um90YXRpb24sCiAgICAgIHBhcmVudERpbWVuc2lvbnM6IFtwVywgcEhdCiAgICB9ID0gdGhpczsKICAgIHN3aXRjaCAoKHJvdGF0aW9uICogNCArIHBhcmVudFJvdGF0aW9uKSAvIDkwKSB7CiAgICAgIGNhc2UgMToKICAgICAgICByZXR1cm4gWzEgLSB5IC0gaGVpZ2h0LCB4LCBoZWlnaHQsIHdpZHRoXTsKICAgICAgY2FzZSAyOgogICAgICAgIHJldHVybiBbMSAtIHggLSB3aWR0aCwgMSAtIHkgLSBoZWlnaHQsIHdpZHRoLCBoZWlnaHRdOwogICAgICBjYXNlIDM6CiAgICAgICAgcmV0dXJuIFt5LCAxIC0geCAtIHdpZHRoLCBoZWlnaHQsIHdpZHRoXTsKICAgICAgY2FzZSA0OgogICAgICAgIHJldHVybiBbeCwgeSAtIHdpZHRoICogKHBXIC8gcEgpLCBoZWlnaHQgKiAocEggLyBwVyksIHdpZHRoICogKHBXIC8gcEgpXTsKICAgICAgY2FzZSA1OgogICAgICAgIHJldHVybiBbMSAtIHksIHgsIHdpZHRoICogKHBXIC8gcEgpLCBoZWlnaHQgKiAocEggLyBwVyldOwogICAgICBjYXNlIDY6CiAgICAgICAgcmV0dXJuIFsxIC0geCAtIGhlaWdodCAqIChwSCAvIHBXKSwgMSAtIHksIGhlaWdodCAqIChwSCAvIHBXKSwgd2lkdGggKiAocFcgLyBwSCldOwogICAgICBjYXNlIDc6CiAgICAgICAgcmV0dXJuIFt5IC0gd2lkdGggKiAocFcgLyBwSCksIDEgLSB4IC0gaGVpZ2h0ICogKHBIIC8gcFcpLCB3aWR0aCAqIChwVyAvIHBIKSwgaGVpZ2h0ICogKHBIIC8gcFcpXTsKICAgICAgY2FzZSA4OgogICAgICAgIHJldHVybiBbeCAtIHdpZHRoLCB5IC0gaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0XTsKICAgICAgY2FzZSA5OgogICAgICAgIHJldHVybiBbMSAtIHksIHggLSB3aWR0aCwgaGVpZ2h0LCB3aWR0aF07CiAgICAgIGNhc2UgMTA6CiAgICAgICAgcmV0dXJuIFsxIC0geCwgMSAtIHksIHdpZHRoLCBoZWlnaHRdOwogICAgICBjYXNlIDExOgogICAgICAgIHJldHVybiBbeSAtIGhlaWdodCwgMSAtIHgsIGhlaWdodCwgd2lkdGhdOwogICAgICBjYXNlIDEyOgogICAgICAgIHJldHVybiBbeCAtIGhlaWdodCAqIChwSCAvIHBXKSwgeSwgaGVpZ2h0ICogKHBIIC8gcFcpLCB3aWR0aCAqIChwVyAvIHBIKV07CiAgICAgIGNhc2UgMTM6CiAgICAgICAgcmV0dXJuIFsxIC0geSAtIHdpZHRoICogKHBXIC8gcEgpLCB4IC0gaGVpZ2h0ICogKHBIIC8gcFcpLCB3aWR0aCAqIChwVyAvIHBIKSwgaGVpZ2h0ICogKHBIIC8gcFcpXTsKICAgICAgY2FzZSAxNDoKICAgICAgICByZXR1cm4gWzEgLSB4LCAxIC0geSAtIHdpZHRoICogKHBXIC8gcEgpLCBoZWlnaHQgKiAocEggLyBwVyksIHdpZHRoICogKHBXIC8gcEgpXTsKICAgICAgY2FzZSAxNToKICAgICAgICByZXR1cm4gW3ksIDEgLSB4LCB3aWR0aCAqIChwVyAvIHBIKSwgaGVpZ2h0ICogKHBIIC8gcFcpXTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gW3gsIHksIHdpZHRoLCBoZWlnaHRdOwogICAgfQogIH0KICByb3RhdGUoKSB7CiAgICBpZiAoIXRoaXMucGFyZW50KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMucGFyZW50LmRyYXdMYXllci51cGRhdGVQcm9wZXJ0aWVzKHRoaXMuX2RyYXdJZCwgRHJhd2luZ0VkaXRvci5fbWVyZ2VTVkdQcm9wZXJ0aWVzKHsKICAgICAgYmJveDogdGhpcy4jcm90YXRlQm94KCkKICAgIH0sIHRoaXMuI2RyYXdPdXRsaW5lcy51cGRhdGVSb3RhdGlvbigodGhpcy5wYXJlbnRSb3RhdGlvbiAtIHRoaXMucm90YXRpb24gKyAzNjApICUgMzYwKSkpOwogIH0KICBvblNjYWxlQ2hhbmdpbmcoKSB7CiAgICBpZiAoIXRoaXMucGFyZW50KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI3VwZGF0ZUJib3godGhpcy4jZHJhd091dGxpbmVzLnVwZGF0ZVBhcmVudERpbWVuc2lvbnModGhpcy5wYXJlbnREaW1lbnNpb25zLCB0aGlzLnBhcmVudC5zY2FsZSkpOwogIH0KICBzdGF0aWMgb25TY2FsZUNoYW5naW5nV2hlbkRyYXdpbmcoKSB7fQogIHJlbmRlcigpIHsKICAgIGlmICh0aGlzLmRpdikgewogICAgICByZXR1cm4gdGhpcy5kaXY7CiAgICB9CiAgICBsZXQgYmFzZVgsIGJhc2VZOwogICAgaWYgKHRoaXMuX2lzQ29weSkgewogICAgICBiYXNlWCA9IHRoaXMueDsKICAgICAgYmFzZVkgPSB0aGlzLnk7CiAgICB9CiAgICBjb25zdCBkaXYgPSBzdXBlci5yZW5kZXIoKTsKICAgIGRpdi5jbGFzc0xpc3QuYWRkKCJkcmF3Iik7CiAgICBjb25zdCBkcmF3RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXYuYXBwZW5kKGRyYXdEaXYpOwogICAgZHJhd0Rpdi5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwgInRydWUiKTsKICAgIGRyYXdEaXYuY2xhc3NOYW1lID0gImludGVybmFsIjsKICAgIHRoaXMuc2V0RGltcygpOwogICAgdGhpcy5fdWlNYW5hZ2VyLmFkZFNob3VsZFJlc2NhbGUodGhpcyk7CiAgICB0aGlzLmRpc2FibGVFZGl0aW5nKCk7CiAgICBpZiAodGhpcy5faXNDb3B5KSB7CiAgICAgIHRoaXMuX21vdmVBZnRlclBhc3RlKGJhc2VYLCBiYXNlWSk7CiAgICB9CiAgICByZXR1cm4gZGl2OwogIH0KICBzdGF0aWMgY3JlYXRlRHJhd2VySW5zdGFuY2UoX3gsIF95LCBfcGFyZW50V2lkdGgsIF9wYXJlbnRIZWlnaHQsIF9yb3RhdGlvbikgewogICAgdW5yZWFjaGFibGUoIk5vdCBpbXBsZW1lbnRlZCIpOwogIH0KICBzdGF0aWMgc3RhcnREcmF3aW5nKHBhcmVudCwgdWlNYW5hZ2VyLCBfaXNMVFIsIGV2ZW50KSB7CiAgICBjb25zdCB7CiAgICAgIHRhcmdldCwKICAgICAgb2Zmc2V0WDogeCwKICAgICAgb2Zmc2V0WTogeSwKICAgICAgcG9pbnRlcklkLAogICAgICBwb2ludGVyVHlwZQogICAgfSA9IGV2ZW50OwogICAgaWYgKEN1cnJlbnRQb2ludGVycy5pc0luaXRpYWxpemVkQW5kRGlmZmVyZW50UG9pbnRlclR5cGUocG9pbnRlclR5cGUpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgdmlld3BvcnQ6IHsKICAgICAgICByb3RhdGlvbgogICAgICB9CiAgICB9ID0gcGFyZW50OwogICAgY29uc3QgewogICAgICB3aWR0aDogcGFyZW50V2lkdGgsCiAgICAgIGhlaWdodDogcGFyZW50SGVpZ2h0CiAgICB9ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgY29uc3QgYWMgPSBEcmF3aW5nRWRpdG9yLiNjdXJyZW50RHJhd2luZ0FDID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgY29uc3Qgc2lnbmFsID0gcGFyZW50LmNvbWJpbmVkU2lnbmFsKGFjKTsKICAgIEN1cnJlbnRQb2ludGVycy5zZXRQb2ludGVyKHBvaW50ZXJUeXBlLCBwb2ludGVySWQpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsIGUgPT4gewogICAgICBpZiAoQ3VycmVudFBvaW50ZXJzLmlzU2FtZVBvaW50ZXJJZE9yUmVtb3ZlKGUucG9pbnRlcklkKSkgewogICAgICAgIHRoaXMuX2VuZERyYXcoZSk7CiAgICAgIH0KICAgIH0sIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIiwgZSA9PiB7CiAgICAgIGlmIChDdXJyZW50UG9pbnRlcnMuaXNTYW1lUG9pbnRlcklkT3JSZW1vdmUoZS5wb2ludGVySWQpKSB7CiAgICAgICAgdGhpcy5fY3VycmVudFBhcmVudC5lbmREcmF3aW5nU2Vzc2lvbigpOwogICAgICB9CiAgICB9LCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLCBlID0+IHsKICAgICAgaWYgKCFDdXJyZW50UG9pbnRlcnMuaXNTYW1lUG9pbnRlclR5cGUoZS5wb2ludGVyVHlwZSkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgQ3VycmVudFBvaW50ZXJzLmluaXRpYWxpemVBbmRBZGRQb2ludGVySWQoZS5wb2ludGVySWQpOwogICAgICBpZiAoRHJhd2luZ0VkaXRvci4jY3VycmVudERyYXcuaXNDYW5jZWxsYWJsZSgpKSB7CiAgICAgICAgRHJhd2luZ0VkaXRvci4jY3VycmVudERyYXcucmVtb3ZlTGFzdEVsZW1lbnQoKTsKICAgICAgICBpZiAoRHJhd2luZ0VkaXRvci4jY3VycmVudERyYXcuaXNFbXB0eSgpKSB7CiAgICAgICAgICB0aGlzLl9jdXJyZW50UGFyZW50LmVuZERyYXdpbmdTZXNzaW9uKHRydWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLl9lbmREcmF3KG51bGwpOwogICAgICAgIH0KICAgICAgfQogICAgfSwgewogICAgICBjYXB0dXJlOiB0cnVlLAogICAgICBwYXNzaXZlOiBmYWxzZSwKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIG5vQ29udGV4dE1lbnUsIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIHRoaXMuX2RyYXdNb3ZlLmJpbmQodGhpcyksIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBlID0+IHsKICAgICAgaWYgKEN1cnJlbnRQb2ludGVycy5pc1NhbWVUaW1lU3RhbXAoZS50aW1lU3RhbXApKSB7CiAgICAgICAgc3RvcEV2ZW50KGUpOwogICAgICB9CiAgICB9LCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICBwYXJlbnQudG9nZ2xlRHJhd2luZygpOwogICAgdWlNYW5hZ2VyLl9lZGl0b3JVbmRvQmFyPy5oaWRlKCk7CiAgICBpZiAoRHJhd2luZ0VkaXRvci4jY3VycmVudERyYXcpIHsKICAgICAgcGFyZW50LmRyYXdMYXllci51cGRhdGVQcm9wZXJ0aWVzKHRoaXMuX2N1cnJlbnREcmF3SWQsIERyYXdpbmdFZGl0b3IuI2N1cnJlbnREcmF3LnN0YXJ0TmV3KHgsIHksIHBhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHQsIHJvdGF0aW9uKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHVpTWFuYWdlci51cGRhdGVVSUZvckRlZmF1bHRQcm9wZXJ0aWVzKHRoaXMpOwogICAgRHJhd2luZ0VkaXRvci4jY3VycmVudERyYXcgPSB0aGlzLmNyZWF0ZURyYXdlckluc3RhbmNlKHgsIHksIHBhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHQsIHJvdGF0aW9uKTsKICAgIERyYXdpbmdFZGl0b3IuI2N1cnJlbnREcmF3aW5nT3B0aW9ucyA9IHRoaXMuZ2V0RGVmYXVsdERyYXdpbmdPcHRpb25zKCk7CiAgICB0aGlzLl9jdXJyZW50UGFyZW50ID0gcGFyZW50OwogICAgKHsKICAgICAgaWQ6IHRoaXMuX2N1cnJlbnREcmF3SWQKICAgIH0gPSBwYXJlbnQuZHJhd0xheWVyLmRyYXcodGhpcy5fbWVyZ2VTVkdQcm9wZXJ0aWVzKERyYXdpbmdFZGl0b3IuI2N1cnJlbnREcmF3aW5nT3B0aW9ucy50b1NWR1Byb3BlcnRpZXMoKSwgRHJhd2luZ0VkaXRvci4jY3VycmVudERyYXcuZGVmYXVsdFNWR1Byb3BlcnRpZXMpLCB0cnVlLCBmYWxzZSkpOwogIH0KICBzdGF0aWMgX2RyYXdNb3ZlKGV2ZW50KSB7CiAgICBDdXJyZW50UG9pbnRlcnMuaXNTYW1lVGltZVN0YW1wKGV2ZW50LnRpbWVTdGFtcCk7CiAgICBpZiAoIURyYXdpbmdFZGl0b3IuI2N1cnJlbnREcmF3KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgb2Zmc2V0WCwKICAgICAgb2Zmc2V0WSwKICAgICAgcG9pbnRlcklkCiAgICB9ID0gZXZlbnQ7CiAgICBpZiAoIUN1cnJlbnRQb2ludGVycy5pc1NhbWVQb2ludGVySWQocG9pbnRlcklkKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoQ3VycmVudFBvaW50ZXJzLmlzVXNpbmdNdWx0aXBsZVBvaW50ZXJzKCkpIHsKICAgICAgdGhpcy5fZW5kRHJhdyhldmVudCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuX2N1cnJlbnRQYXJlbnQuZHJhd0xheWVyLnVwZGF0ZVByb3BlcnRpZXModGhpcy5fY3VycmVudERyYXdJZCwgRHJhd2luZ0VkaXRvci4jY3VycmVudERyYXcuYWRkKG9mZnNldFgsIG9mZnNldFkpKTsKICAgIEN1cnJlbnRQb2ludGVycy5zZXRUaW1lU3RhbXAoZXZlbnQudGltZVN0YW1wKTsKICAgIHN0b3BFdmVudChldmVudCk7CiAgfQogIHN0YXRpYyBfY2xlYW51cChhbGwpIHsKICAgIGlmIChhbGwpIHsKICAgICAgdGhpcy5fY3VycmVudERyYXdJZCA9IC0xOwogICAgICB0aGlzLl9jdXJyZW50UGFyZW50ID0gbnVsbDsKICAgICAgRHJhd2luZ0VkaXRvci4jY3VycmVudERyYXcgPSBudWxsOwogICAgICBEcmF3aW5nRWRpdG9yLiNjdXJyZW50RHJhd2luZ09wdGlvbnMgPSBudWxsOwogICAgICBDdXJyZW50UG9pbnRlcnMuY2xlYXJQb2ludGVyVHlwZSgpOwogICAgICBDdXJyZW50UG9pbnRlcnMuY2xlYXJUaW1lU3RhbXAoKTsKICAgIH0KICAgIGlmIChEcmF3aW5nRWRpdG9yLiNjdXJyZW50RHJhd2luZ0FDKSB7CiAgICAgIERyYXdpbmdFZGl0b3IuI2N1cnJlbnREcmF3aW5nQUMuYWJvcnQoKTsKICAgICAgRHJhd2luZ0VkaXRvci4jY3VycmVudERyYXdpbmdBQyA9IG51bGw7CiAgICAgIEN1cnJlbnRQb2ludGVycy5jbGVhclBvaW50ZXJJZHMoKTsKICAgIH0KICB9CiAgc3RhdGljIF9lbmREcmF3KGV2ZW50KSB7CiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9jdXJyZW50UGFyZW50OwogICAgaWYgKCFwYXJlbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgcGFyZW50LnRvZ2dsZURyYXdpbmcodHJ1ZSk7CiAgICB0aGlzLl9jbGVhbnVwKGZhbHNlKTsKICAgIGlmIChldmVudD8udGFyZ2V0ID09PSBwYXJlbnQuZGl2KSB7CiAgICAgIHBhcmVudC5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyh0aGlzLl9jdXJyZW50RHJhd0lkLCBEcmF3aW5nRWRpdG9yLiNjdXJyZW50RHJhdy5lbmQoZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WSkpOwogICAgfQogICAgaWYgKHRoaXMuc3VwcG9ydE11bHRpcGxlRHJhd2luZ3MpIHsKICAgICAgY29uc3QgZHJhdyA9IERyYXdpbmdFZGl0b3IuI2N1cnJlbnREcmF3OwogICAgICBjb25zdCBkcmF3SWQgPSB0aGlzLl9jdXJyZW50RHJhd0lkOwogICAgICBjb25zdCBsYXN0RWxlbWVudCA9IGRyYXcuZ2V0TGFzdEVsZW1lbnQoKTsKICAgICAgcGFyZW50LmFkZENvbW1hbmRzKHsKICAgICAgICBjbWQ6ICgpID0+IHsKICAgICAgICAgIHBhcmVudC5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyhkcmF3SWQsIGRyYXcuc2V0TGFzdEVsZW1lbnQobGFzdEVsZW1lbnQpKTsKICAgICAgICB9LAogICAgICAgIHVuZG86ICgpID0+IHsKICAgICAgICAgIHBhcmVudC5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyhkcmF3SWQsIGRyYXcucmVtb3ZlTGFzdEVsZW1lbnQoKSk7CiAgICAgICAgfSwKICAgICAgICBtdXN0RXhlYzogZmFsc2UsCiAgICAgICAgdHlwZTogQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRFJBV19TVEVQCiAgICAgIH0pOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmVuZERyYXdpbmcoZmFsc2UpOwogIH0KICBzdGF0aWMgZW5kRHJhd2luZyhpc0Fib3J0ZWQpIHsKICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2N1cnJlbnRQYXJlbnQ7CiAgICBpZiAoIXBhcmVudCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHBhcmVudC50b2dnbGVEcmF3aW5nKHRydWUpOwogICAgcGFyZW50LmNsZWFuVW5kb1N0YWNrKEFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkRSQVdfU1RFUCk7CiAgICBpZiAoIURyYXdpbmdFZGl0b3IuI2N1cnJlbnREcmF3LmlzRW1wdHkoKSkgewogICAgICBjb25zdCB7CiAgICAgICAgcGFnZURpbWVuc2lvbnM6IFtwYWdlV2lkdGgsIHBhZ2VIZWlnaHRdLAogICAgICAgIHNjYWxlCiAgICAgIH0gPSBwYXJlbnQ7CiAgICAgIGNvbnN0IGVkaXRvciA9IHBhcmVudC5jcmVhdGVBbmRBZGROZXdFZGl0b3IoewogICAgICAgIG9mZnNldFg6IDAsCiAgICAgICAgb2Zmc2V0WTogMAogICAgICB9LCBmYWxzZSwgewogICAgICAgIGRyYXdJZDogdGhpcy5fY3VycmVudERyYXdJZCwKICAgICAgICBkcmF3T3V0bGluZXM6IERyYXdpbmdFZGl0b3IuI2N1cnJlbnREcmF3LmdldE91dGxpbmVzKHBhZ2VXaWR0aCAqIHNjYWxlLCBwYWdlSGVpZ2h0ICogc2NhbGUsIHNjYWxlLCB0aGlzLl9JTk5FUl9NQVJHSU4pLAogICAgICAgIGRyYXdpbmdPcHRpb25zOiBEcmF3aW5nRWRpdG9yLiNjdXJyZW50RHJhd2luZ09wdGlvbnMsCiAgICAgICAgbXVzdEJlQ29tbWl0dGVkOiAhaXNBYm9ydGVkCiAgICAgIH0pOwogICAgICB0aGlzLl9jbGVhbnVwKHRydWUpOwogICAgICByZXR1cm4gZWRpdG9yOwogICAgfQogICAgcGFyZW50LmRyYXdMYXllci5yZW1vdmUodGhpcy5fY3VycmVudERyYXdJZCk7CiAgICB0aGlzLl9jbGVhbnVwKHRydWUpOwogICAgcmV0dXJuIG51bGw7CiAgfQogIGNyZWF0ZURyYXdpbmdPcHRpb25zKF9kYXRhKSB7fQogIHN0YXRpYyBkZXNlcmlhbGl6ZURyYXcoX3BhZ2VYLCBfcGFnZVksIF9wYWdlV2lkdGgsIF9wYWdlSGVpZ2h0LCBfaW5uZXJXaWR0aCwgX2RhdGEpIHsKICAgIHVucmVhY2hhYmxlKCJOb3QgaW1wbGVtZW50ZWQiKTsKICB9CiAgc3RhdGljIGFzeW5jIGRlc2VyaWFsaXplKGRhdGEsIHBhcmVudCwgdWlNYW5hZ2VyKSB7CiAgICBjb25zdCB7CiAgICAgIHJhd0RpbXM6IHsKICAgICAgICBwYWdlV2lkdGgsCiAgICAgICAgcGFnZUhlaWdodCwKICAgICAgICBwYWdlWCwKICAgICAgICBwYWdlWQogICAgICB9CiAgICB9ID0gcGFyZW50LnZpZXdwb3J0OwogICAgY29uc3QgZHJhd091dGxpbmVzID0gdGhpcy5kZXNlcmlhbGl6ZURyYXcocGFnZVgsIHBhZ2VZLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQsIHRoaXMuX0lOTkVSX01BUkdJTiwgZGF0YSk7CiAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBzdXBlci5kZXNlcmlhbGl6ZShkYXRhLCBwYXJlbnQsIHVpTWFuYWdlcik7CiAgICBlZGl0b3IuY3JlYXRlRHJhd2luZ09wdGlvbnMoZGF0YSk7CiAgICBlZGl0b3IuI2NyZWF0ZURyYXdPdXRsaW5lcyh7CiAgICAgIGRyYXdPdXRsaW5lcwogICAgfSk7CiAgICBlZGl0b3IuI2FkZFRvRHJhd0xheWVyKCk7CiAgICBlZGl0b3Iub25TY2FsZUNoYW5naW5nKCk7CiAgICBlZGl0b3Iucm90YXRlKCk7CiAgICByZXR1cm4gZWRpdG9yOwogIH0KICBzZXJpYWxpemVEcmF3KGlzRm9yQ29weWluZykgewogICAgY29uc3QgW3BhZ2VYLCBwYWdlWV0gPSB0aGlzLnBhZ2VUcmFuc2xhdGlvbjsKICAgIGNvbnN0IFtwYWdlV2lkdGgsIHBhZ2VIZWlnaHRdID0gdGhpcy5wYWdlRGltZW5zaW9uczsKICAgIHJldHVybiB0aGlzLiNkcmF3T3V0bGluZXMuc2VyaWFsaXplKFtwYWdlWCwgcGFnZVksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodF0sIGlzRm9yQ29weWluZyk7CiAgfQogIHJlbmRlckFubm90YXRpb25FbGVtZW50KGFubm90YXRpb24pIHsKICAgIGFubm90YXRpb24udXBkYXRlRWRpdGVkKHsKICAgICAgcmVjdDogdGhpcy5nZXRQREZSZWN0KCkKICAgIH0pOwogICAgcmV0dXJuIG51bGw7CiAgfQogIHN0YXRpYyBjYW5DcmVhdGVOZXdFbXB0eUVkaXRvcigpIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L2VkaXRvci9kcmF3ZXJzL2lua2RyYXcuanMKCgpjbGFzcyBJbmtEcmF3T3V0bGluZXIgewogICNsYXN0ID0gbmV3IEZsb2F0NjRBcnJheSg2KTsKICAjbGluZTsKICAjbGluZXM7CiAgI3JvdGF0aW9uOwogICN0aGlja25lc3M7CiAgI3BvaW50czsKICAjbGFzdFNWR1BhdGggPSAiIjsKICAjbGFzdEluZGV4ID0gMDsKICAjb3V0bGluZXMgPSBuZXcgSW5rRHJhd091dGxpbmUoKTsKICAjcGFyZW50V2lkdGg7CiAgI3BhcmVudEhlaWdodDsKICBjb25zdHJ1Y3Rvcih4LCB5LCBwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0LCByb3RhdGlvbiwgdGhpY2tuZXNzKSB7CiAgICB0aGlzLiNwYXJlbnRXaWR0aCA9IHBhcmVudFdpZHRoOwogICAgdGhpcy4jcGFyZW50SGVpZ2h0ID0gcGFyZW50SGVpZ2h0OwogICAgdGhpcy4jcm90YXRpb24gPSByb3RhdGlvbjsKICAgIHRoaXMuI3RoaWNrbmVzcyA9IHRoaWNrbmVzczsKICAgIFt4LCB5XSA9IHRoaXMuI25vcm1hbGl6ZVBvaW50KHgsIHkpOwogICAgY29uc3QgbGluZSA9IHRoaXMuI2xpbmUgPSBbTmFOLCBOYU4sIE5hTiwgTmFOLCB4LCB5XTsKICAgIHRoaXMuI3BvaW50cyA9IFt4LCB5XTsKICAgIHRoaXMuI2xpbmVzID0gW3sKICAgICAgbGluZSwKICAgICAgcG9pbnRzOiB0aGlzLiNwb2ludHMKICAgIH1dOwogICAgdGhpcy4jbGFzdC5zZXQobGluZSwgMCk7CiAgfQogIHVwZGF0ZVByb3BlcnR5KG5hbWUsIHZhbHVlKSB7CiAgICBpZiAobmFtZSA9PT0gInN0cm9rZS13aWR0aCIpIHsKICAgICAgdGhpcy4jdGhpY2tuZXNzID0gdmFsdWU7CiAgICB9CiAgfQogICNub3JtYWxpemVQb2ludCh4LCB5KSB7CiAgICByZXR1cm4gT3V0bGluZS5fbm9ybWFsaXplUG9pbnQoeCwgeSwgdGhpcy4jcGFyZW50V2lkdGgsIHRoaXMuI3BhcmVudEhlaWdodCwgdGhpcy4jcm90YXRpb24pOwogIH0KICBpc0VtcHR5KCkgewogICAgcmV0dXJuICF0aGlzLiNsaW5lcyB8fCB0aGlzLiNsaW5lcy5sZW5ndGggPT09IDA7CiAgfQogIGlzQ2FuY2VsbGFibGUoKSB7CiAgICByZXR1cm4gdGhpcy4jcG9pbnRzLmxlbmd0aCA8PSAxMDsKICB9CiAgYWRkKHgsIHkpIHsKICAgIFt4LCB5XSA9IHRoaXMuI25vcm1hbGl6ZVBvaW50KHgsIHkpOwogICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IHRoaXMuI2xhc3Quc3ViYXJyYXkoMiwgNik7CiAgICBjb25zdCBkaWZmWCA9IHggLSB4MjsKICAgIGNvbnN0IGRpZmZZID0geSAtIHkyOwogICAgY29uc3QgZCA9IE1hdGguaHlwb3QodGhpcy4jcGFyZW50V2lkdGggKiBkaWZmWCwgdGhpcy4jcGFyZW50SGVpZ2h0ICogZGlmZlkpOwogICAgaWYgKGQgPD0gMikgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHRoaXMuI3BvaW50cy5wdXNoKHgsIHkpOwogICAgaWYgKGlzTmFOKHgxKSkgewogICAgICB0aGlzLiNsYXN0LnNldChbeDIsIHkyLCB4LCB5XSwgMik7CiAgICAgIHRoaXMuI2xpbmUucHVzaChOYU4sIE5hTiwgTmFOLCBOYU4sIHgsIHkpOwogICAgICByZXR1cm4gewogICAgICAgIHBhdGg6IHsKICAgICAgICAgIGQ6IHRoaXMudG9TVkdQYXRoKCkKICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgICBpZiAoaXNOYU4odGhpcy4jbGFzdFswXSkpIHsKICAgICAgdGhpcy4jbGluZS5zcGxpY2UoNiwgNik7CiAgICB9CiAgICB0aGlzLiNsYXN0LnNldChbeDEsIHkxLCB4MiwgeTIsIHgsIHldLCAwKTsKICAgIHRoaXMuI2xpbmUucHVzaCguLi5PdXRsaW5lLmNyZWF0ZUJlemllclBvaW50cyh4MSwgeTEsIHgyLCB5MiwgeCwgeSkpOwogICAgcmV0dXJuIHsKICAgICAgcGF0aDogewogICAgICAgIGQ6IHRoaXMudG9TVkdQYXRoKCkKICAgICAgfQogICAgfTsKICB9CiAgZW5kKHgsIHkpIHsKICAgIGNvbnN0IGNoYW5nZSA9IHRoaXMuYWRkKHgsIHkpOwogICAgaWYgKGNoYW5nZSkgewogICAgICByZXR1cm4gY2hhbmdlOwogICAgfQogICAgaWYgKHRoaXMuI3BvaW50cy5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBwYXRoOiB7CiAgICAgICAgICBkOiB0aGlzLnRvU1ZHUGF0aCgpCiAgICAgICAgfQogICAgICB9OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHN0YXJ0TmV3KHgsIHksIHBhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHQsIHJvdGF0aW9uKSB7CiAgICB0aGlzLiNwYXJlbnRXaWR0aCA9IHBhcmVudFdpZHRoOwogICAgdGhpcy4jcGFyZW50SGVpZ2h0ID0gcGFyZW50SGVpZ2h0OwogICAgdGhpcy4jcm90YXRpb24gPSByb3RhdGlvbjsKICAgIFt4LCB5XSA9IHRoaXMuI25vcm1hbGl6ZVBvaW50KHgsIHkpOwogICAgY29uc3QgbGluZSA9IHRoaXMuI2xpbmUgPSBbTmFOLCBOYU4sIE5hTiwgTmFOLCB4LCB5XTsKICAgIHRoaXMuI3BvaW50cyA9IFt4LCB5XTsKICAgIGNvbnN0IGxhc3QgPSB0aGlzLiNsaW5lcy5hdCgtMSk7CiAgICBpZiAobGFzdCkgewogICAgICBsYXN0LmxpbmUgPSBuZXcgRmxvYXQzMkFycmF5KGxhc3QubGluZSk7CiAgICAgIGxhc3QucG9pbnRzID0gbmV3IEZsb2F0MzJBcnJheShsYXN0LnBvaW50cyk7CiAgICB9CiAgICB0aGlzLiNsaW5lcy5wdXNoKHsKICAgICAgbGluZSwKICAgICAgcG9pbnRzOiB0aGlzLiNwb2ludHMKICAgIH0pOwogICAgdGhpcy4jbGFzdC5zZXQobGluZSwgMCk7CiAgICB0aGlzLiNsYXN0SW5kZXggPSAwOwogICAgdGhpcy50b1NWR1BhdGgoKTsKICAgIHJldHVybiBudWxsOwogIH0KICBnZXRMYXN0RWxlbWVudCgpIHsKICAgIHJldHVybiB0aGlzLiNsaW5lcy5hdCgtMSk7CiAgfQogIHNldExhc3RFbGVtZW50KGVsZW1lbnQpIHsKICAgIGlmICghdGhpcy4jbGluZXMpIHsKICAgICAgcmV0dXJuIHRoaXMuI291dGxpbmVzLnNldExhc3RFbGVtZW50KGVsZW1lbnQpOwogICAgfQogICAgdGhpcy4jbGluZXMucHVzaChlbGVtZW50KTsKICAgIHRoaXMuI2xpbmUgPSBlbGVtZW50LmxpbmU7CiAgICB0aGlzLiNwb2ludHMgPSBlbGVtZW50LnBvaW50czsKICAgIHRoaXMuI2xhc3RJbmRleCA9IDA7CiAgICByZXR1cm4gewogICAgICBwYXRoOiB7CiAgICAgICAgZDogdGhpcy50b1NWR1BhdGgoKQogICAgICB9CiAgICB9OwogIH0KICByZW1vdmVMYXN0RWxlbWVudCgpIHsKICAgIGlmICghdGhpcy4jbGluZXMpIHsKICAgICAgcmV0dXJuIHRoaXMuI291dGxpbmVzLnJlbW92ZUxhc3RFbGVtZW50KCk7CiAgICB9CiAgICB0aGlzLiNsaW5lcy5wb3AoKTsKICAgIHRoaXMuI2xhc3RTVkdQYXRoID0gIiI7CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB0aGlzLiNsaW5lcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBsaW5lLAogICAgICAgIHBvaW50cwogICAgICB9ID0gdGhpcy4jbGluZXNbaV07CiAgICAgIHRoaXMuI2xpbmUgPSBsaW5lOwogICAgICB0aGlzLiNwb2ludHMgPSBwb2ludHM7CiAgICAgIHRoaXMuI2xhc3RJbmRleCA9IDA7CiAgICAgIHRoaXMudG9TVkdQYXRoKCk7CiAgICB9CiAgICByZXR1cm4gewogICAgICBwYXRoOiB7CiAgICAgICAgZDogdGhpcy4jbGFzdFNWR1BhdGgKICAgICAgfQogICAgfTsKICB9CiAgdG9TVkdQYXRoKCkgewogICAgY29uc3QgZmlyc3RYID0gT3V0bGluZS5zdmdSb3VuZCh0aGlzLiNsaW5lWzRdKTsKICAgIGNvbnN0IGZpcnN0WSA9IE91dGxpbmUuc3ZnUm91bmQodGhpcy4jbGluZVs1XSk7CiAgICBpZiAodGhpcy4jcG9pbnRzLmxlbmd0aCA9PT0gMikgewogICAgICB0aGlzLiNsYXN0U1ZHUGF0aCA9IGAke3RoaXMuI2xhc3RTVkdQYXRofSBNICR7Zmlyc3RYfSAke2ZpcnN0WX0gWmA7CiAgICAgIHJldHVybiB0aGlzLiNsYXN0U1ZHUGF0aDsKICAgIH0KICAgIGlmICh0aGlzLiNwb2ludHMubGVuZ3RoIDw9IDYpIHsKICAgICAgY29uc3QgaSA9IHRoaXMuI2xhc3RTVkdQYXRoLmxhc3RJbmRleE9mKCJNIik7CiAgICAgIHRoaXMuI2xhc3RTVkdQYXRoID0gYCR7dGhpcy4jbGFzdFNWR1BhdGguc2xpY2UoMCwgaSl9IE0gJHtmaXJzdFh9ICR7Zmlyc3RZfWA7CiAgICAgIHRoaXMuI2xhc3RJbmRleCA9IDY7CiAgICB9CiAgICBpZiAodGhpcy4jcG9pbnRzLmxlbmd0aCA9PT0gNCkgewogICAgICBjb25zdCBzZWNvbmRYID0gT3V0bGluZS5zdmdSb3VuZCh0aGlzLiNsaW5lWzEwXSk7CiAgICAgIGNvbnN0IHNlY29uZFkgPSBPdXRsaW5lLnN2Z1JvdW5kKHRoaXMuI2xpbmVbMTFdKTsKICAgICAgdGhpcy4jbGFzdFNWR1BhdGggPSBgJHt0aGlzLiNsYXN0U1ZHUGF0aH0gTCAke3NlY29uZFh9ICR7c2Vjb25kWX1gOwogICAgICB0aGlzLiNsYXN0SW5kZXggPSAxMjsKICAgICAgcmV0dXJuIHRoaXMuI2xhc3RTVkdQYXRoOwogICAgfQogICAgY29uc3QgYnVmZmVyID0gW107CiAgICBpZiAodGhpcy4jbGFzdEluZGV4ID09PSAwKSB7CiAgICAgIGJ1ZmZlci5wdXNoKGBNICR7Zmlyc3RYfSAke2ZpcnN0WX1gKTsKICAgICAgdGhpcy4jbGFzdEluZGV4ID0gNjsKICAgIH0KICAgIGZvciAobGV0IGkgPSB0aGlzLiNsYXN0SW5kZXgsIGlpID0gdGhpcy4jbGluZS5sZW5ndGg7IGkgPCBpaTsgaSArPSA2KSB7CiAgICAgIGNvbnN0IFtjMXgsIGMxeSwgYzJ4LCBjMnksIHgsIHldID0gdGhpcy4jbGluZS5zbGljZShpLCBpICsgNikubWFwKE91dGxpbmUuc3ZnUm91bmQpOwogICAgICBidWZmZXIucHVzaChgQyR7YzF4fSAke2MxeX0gJHtjMnh9ICR7YzJ5fSAke3h9ICR7eX1gKTsKICAgIH0KICAgIHRoaXMuI2xhc3RTVkdQYXRoICs9IGJ1ZmZlci5qb2luKCIgIik7CiAgICB0aGlzLiNsYXN0SW5kZXggPSB0aGlzLiNsaW5lLmxlbmd0aDsKICAgIHJldHVybiB0aGlzLiNsYXN0U1ZHUGF0aDsKICB9CiAgZ2V0T3V0bGluZXMocGFyZW50V2lkdGgsIHBhcmVudEhlaWdodCwgc2NhbGUsIGlubmVyTWFyZ2luKSB7CiAgICBjb25zdCBsYXN0ID0gdGhpcy4jbGluZXMuYXQoLTEpOwogICAgbGFzdC5saW5lID0gbmV3IEZsb2F0MzJBcnJheShsYXN0LmxpbmUpOwogICAgbGFzdC5wb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KGxhc3QucG9pbnRzKTsKICAgIHRoaXMuI291dGxpbmVzLmJ1aWxkKHRoaXMuI2xpbmVzLCBwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0LCBzY2FsZSwgdGhpcy4jcm90YXRpb24sIHRoaXMuI3RoaWNrbmVzcywgaW5uZXJNYXJnaW4pOwogICAgdGhpcy4jbGFzdCA9IG51bGw7CiAgICB0aGlzLiNsaW5lID0gbnVsbDsKICAgIHRoaXMuI2xpbmVzID0gbnVsbDsKICAgIHRoaXMuI2xhc3RTVkdQYXRoID0gbnVsbDsKICAgIHJldHVybiB0aGlzLiNvdXRsaW5lczsKICB9CiAgZ2V0IGRlZmF1bHRTVkdQcm9wZXJ0aWVzKCkgewogICAgcmV0dXJuIHsKICAgICAgcm9vdDogewogICAgICAgIHZpZXdCb3g6ICIwIDAgMTAwMDAgMTAwMDAiCiAgICAgIH0sCiAgICAgIHJvb3RDbGFzczogewogICAgICAgIGRyYXc6IHRydWUKICAgICAgfSwKICAgICAgYmJveDogWzAsIDAsIDEsIDFdCiAgICB9OwogIH0KfQpjbGFzcyBJbmtEcmF3T3V0bGluZSBleHRlbmRzIE91dGxpbmUgewogICNiYm94OwogICNjdXJyZW50Um90YXRpb24gPSAwOwogICNpbm5lck1hcmdpbjsKICAjbGluZXM7CiAgI3BhcmVudFdpZHRoOwogICNwYXJlbnRIZWlnaHQ7CiAgI3BhcmVudFNjYWxlOwogICNyb3RhdGlvbjsKICAjdGhpY2tuZXNzOwogIGJ1aWxkKGxpbmVzLCBwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0LCBwYXJlbnRTY2FsZSwgcm90YXRpb24sIHRoaWNrbmVzcywgaW5uZXJNYXJnaW4pIHsKICAgIHRoaXMuI3BhcmVudFdpZHRoID0gcGFyZW50V2lkdGg7CiAgICB0aGlzLiNwYXJlbnRIZWlnaHQgPSBwYXJlbnRIZWlnaHQ7CiAgICB0aGlzLiNwYXJlbnRTY2FsZSA9IHBhcmVudFNjYWxlOwogICAgdGhpcy4jcm90YXRpb24gPSByb3RhdGlvbjsKICAgIHRoaXMuI3RoaWNrbmVzcyA9IHRoaWNrbmVzczsKICAgIHRoaXMuI2lubmVyTWFyZ2luID0gaW5uZXJNYXJnaW4gPz8gMDsKICAgIHRoaXMuI2xpbmVzID0gbGluZXM7CiAgICB0aGlzLiNjb21wdXRlQmJveCgpOwogIH0KICBnZXQgdGhpY2tuZXNzKCkgewogICAgcmV0dXJuIHRoaXMuI3RoaWNrbmVzczsKICB9CiAgc2V0TGFzdEVsZW1lbnQoZWxlbWVudCkgewogICAgdGhpcy4jbGluZXMucHVzaChlbGVtZW50KTsKICAgIHJldHVybiB7CiAgICAgIHBhdGg6IHsKICAgICAgICBkOiB0aGlzLnRvU1ZHUGF0aCgpCiAgICAgIH0KICAgIH07CiAgfQogIHJlbW92ZUxhc3RFbGVtZW50KCkgewogICAgdGhpcy4jbGluZXMucG9wKCk7CiAgICByZXR1cm4gewogICAgICBwYXRoOiB7CiAgICAgICAgZDogdGhpcy50b1NWR1BhdGgoKQogICAgICB9CiAgICB9OwogIH0KICB0b1NWR1BhdGgoKSB7CiAgICBjb25zdCBidWZmZXIgPSBbXTsKICAgIGZvciAoY29uc3QgewogICAgICBsaW5lCiAgICB9IG9mIHRoaXMuI2xpbmVzKSB7CiAgICAgIGJ1ZmZlci5wdXNoKGBNJHtPdXRsaW5lLnN2Z1JvdW5kKGxpbmVbNF0pfSAke091dGxpbmUuc3ZnUm91bmQobGluZVs1XSl9YCk7CiAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gNikgewogICAgICAgIGJ1ZmZlci5wdXNoKCJaIik7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAxMiAmJiBpc05hTihsaW5lWzZdKSkgewogICAgICAgIGJ1ZmZlci5wdXNoKGBMJHtPdXRsaW5lLnN2Z1JvdW5kKGxpbmVbMTBdKX0gJHtPdXRsaW5lLnN2Z1JvdW5kKGxpbmVbMTFdKX1gKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBmb3IgKGxldCBpID0gNiwgaWkgPSBsaW5lLmxlbmd0aDsgaSA8IGlpOyBpICs9IDYpIHsKICAgICAgICBjb25zdCBbYzF4LCBjMXksIGMyeCwgYzJ5LCB4LCB5XSA9IGxpbmUuc3ViYXJyYXkoaSwgaSArIDYpLm1hcChPdXRsaW5lLnN2Z1JvdW5kKTsKICAgICAgICBidWZmZXIucHVzaChgQyR7YzF4fSAke2MxeX0gJHtjMnh9ICR7YzJ5fSAke3h9ICR7eX1gKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ1ZmZlci5qb2luKCIiKTsKICB9CiAgc2VyaWFsaXplKFtwYWdlWCwgcGFnZVksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodF0sIGlzRm9yQ29weWluZykgewogICAgY29uc3Qgc2VyaWFsaXplZExpbmVzID0gW107CiAgICBjb25zdCBzZXJpYWxpemVkUG9pbnRzID0gW107CiAgICBjb25zdCBbeCwgeSwgd2lkdGgsIGhlaWdodF0gPSB0aGlzLiNnZXRCQm94V2l0aE5vTWFyZ2luKCk7CiAgICBsZXQgdHgsIHR5LCBzeCwgc3ksIHgxLCB5MSwgeDIsIHkyLCByZXNjYWxlRm47CiAgICBzd2l0Y2ggKHRoaXMuI3JvdGF0aW9uKSB7CiAgICAgIGNhc2UgMDoKICAgICAgICByZXNjYWxlRm4gPSBPdXRsaW5lLl9yZXNjYWxlOwogICAgICAgIHR4ID0gcGFnZVg7CiAgICAgICAgdHkgPSBwYWdlWSArIHBhZ2VIZWlnaHQ7CiAgICAgICAgc3ggPSBwYWdlV2lkdGg7CiAgICAgICAgc3kgPSAtcGFnZUhlaWdodDsKICAgICAgICB4MSA9IHBhZ2VYICsgeCAqIHBhZ2VXaWR0aDsKICAgICAgICB5MSA9IHBhZ2VZICsgKDEgLSB5IC0gaGVpZ2h0KSAqIHBhZ2VIZWlnaHQ7CiAgICAgICAgeDIgPSBwYWdlWCArICh4ICsgd2lkdGgpICogcGFnZVdpZHRoOwogICAgICAgIHkyID0gcGFnZVkgKyAoMSAtIHkpICogcGFnZUhlaWdodDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA5MDoKICAgICAgICByZXNjYWxlRm4gPSBPdXRsaW5lLl9yZXNjYWxlQW5kU3dhcDsKICAgICAgICB0eCA9IHBhZ2VYOwogICAgICAgIHR5ID0gcGFnZVk7CiAgICAgICAgc3ggPSBwYWdlV2lkdGg7CiAgICAgICAgc3kgPSBwYWdlSGVpZ2h0OwogICAgICAgIHgxID0gcGFnZVggKyB5ICogcGFnZVdpZHRoOwogICAgICAgIHkxID0gcGFnZVkgKyB4ICogcGFnZUhlaWdodDsKICAgICAgICB4MiA9IHBhZ2VYICsgKHkgKyBoZWlnaHQpICogcGFnZVdpZHRoOwogICAgICAgIHkyID0gcGFnZVkgKyAoeCArIHdpZHRoKSAqIHBhZ2VIZWlnaHQ7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTgwOgogICAgICAgIHJlc2NhbGVGbiA9IE91dGxpbmUuX3Jlc2NhbGU7CiAgICAgICAgdHggPSBwYWdlWCArIHBhZ2VXaWR0aDsKICAgICAgICB0eSA9IHBhZ2VZOwogICAgICAgIHN4ID0gLXBhZ2VXaWR0aDsKICAgICAgICBzeSA9IHBhZ2VIZWlnaHQ7CiAgICAgICAgeDEgPSBwYWdlWCArICgxIC0geCAtIHdpZHRoKSAqIHBhZ2VXaWR0aDsKICAgICAgICB5MSA9IHBhZ2VZICsgeSAqIHBhZ2VIZWlnaHQ7CiAgICAgICAgeDIgPSBwYWdlWCArICgxIC0geCkgKiBwYWdlV2lkdGg7CiAgICAgICAgeTIgPSBwYWdlWSArICh5ICsgaGVpZ2h0KSAqIHBhZ2VIZWlnaHQ7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjcwOgogICAgICAgIHJlc2NhbGVGbiA9IE91dGxpbmUuX3Jlc2NhbGVBbmRTd2FwOwogICAgICAgIHR4ID0gcGFnZVggKyBwYWdlV2lkdGg7CiAgICAgICAgdHkgPSBwYWdlWSArIHBhZ2VIZWlnaHQ7CiAgICAgICAgc3ggPSAtcGFnZVdpZHRoOwogICAgICAgIHN5ID0gLXBhZ2VIZWlnaHQ7CiAgICAgICAgeDEgPSBwYWdlWCArICgxIC0geSAtIGhlaWdodCkgKiBwYWdlV2lkdGg7CiAgICAgICAgeTEgPSBwYWdlWSArICgxIC0geCAtIHdpZHRoKSAqIHBhZ2VIZWlnaHQ7CiAgICAgICAgeDIgPSBwYWdlWCArICgxIC0geSkgKiBwYWdlV2lkdGg7CiAgICAgICAgeTIgPSBwYWdlWSArICgxIC0geCkgKiBwYWdlSGVpZ2h0OwogICAgICAgIGJyZWFrOwogICAgfQogICAgZm9yIChjb25zdCB7CiAgICAgIGxpbmUsCiAgICAgIHBvaW50cwogICAgfSBvZiB0aGlzLiNsaW5lcykgewogICAgICBzZXJpYWxpemVkTGluZXMucHVzaChyZXNjYWxlRm4obGluZSwgdHgsIHR5LCBzeCwgc3ksIGlzRm9yQ29weWluZyA/IG5ldyBBcnJheShsaW5lLmxlbmd0aCkgOiBudWxsKSk7CiAgICAgIHNlcmlhbGl6ZWRQb2ludHMucHVzaChyZXNjYWxlRm4ocG9pbnRzLCB0eCwgdHksIHN4LCBzeSwgaXNGb3JDb3B5aW5nID8gbmV3IEFycmF5KHBvaW50cy5sZW5ndGgpIDogbnVsbCkpOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgbGluZXM6IHNlcmlhbGl6ZWRMaW5lcywKICAgICAgcG9pbnRzOiBzZXJpYWxpemVkUG9pbnRzLAogICAgICByZWN0OiBbeDEsIHkxLCB4MiwgeTJdCiAgICB9OwogIH0KICBzdGF0aWMgZGVzZXJpYWxpemUocGFnZVgsIHBhZ2VZLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQsIGlubmVyTWFyZ2luLCB7CiAgICBwYXRoczogewogICAgICBsaW5lcywKICAgICAgcG9pbnRzCiAgICB9LAogICAgcm90YXRpb24sCiAgICB0aGlja25lc3MKICB9KSB7CiAgICBjb25zdCBuZXdMaW5lcyA9IFtdOwogICAgbGV0IHR4LCB0eSwgc3gsIHN5LCByZXNjYWxlRm47CiAgICBzd2l0Y2ggKHJvdGF0aW9uKSB7CiAgICAgIGNhc2UgMDoKICAgICAgICByZXNjYWxlRm4gPSBPdXRsaW5lLl9yZXNjYWxlOwogICAgICAgIHR4ID0gLXBhZ2VYIC8gcGFnZVdpZHRoOwogICAgICAgIHR5ID0gcGFnZVkgLyBwYWdlSGVpZ2h0ICsgMTsKICAgICAgICBzeCA9IDEgLyBwYWdlV2lkdGg7CiAgICAgICAgc3kgPSAtMSAvIHBhZ2VIZWlnaHQ7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgOTA6CiAgICAgICAgcmVzY2FsZUZuID0gT3V0bGluZS5fcmVzY2FsZUFuZFN3YXA7CiAgICAgICAgdHggPSAtcGFnZVkgLyBwYWdlSGVpZ2h0OwogICAgICAgIHR5ID0gLXBhZ2VYIC8gcGFnZVdpZHRoOwogICAgICAgIHN4ID0gMSAvIHBhZ2VIZWlnaHQ7CiAgICAgICAgc3kgPSAxIC8gcGFnZVdpZHRoOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE4MDoKICAgICAgICByZXNjYWxlRm4gPSBPdXRsaW5lLl9yZXNjYWxlOwogICAgICAgIHR4ID0gcGFnZVggLyBwYWdlV2lkdGggKyAxOwogICAgICAgIHR5ID0gLXBhZ2VZIC8gcGFnZUhlaWdodDsKICAgICAgICBzeCA9IC0xIC8gcGFnZVdpZHRoOwogICAgICAgIHN5ID0gMSAvIHBhZ2VIZWlnaHQ7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjcwOgogICAgICAgIHJlc2NhbGVGbiA9IE91dGxpbmUuX3Jlc2NhbGVBbmRTd2FwOwogICAgICAgIHR4ID0gcGFnZVkgLyBwYWdlSGVpZ2h0ICsgMTsKICAgICAgICB0eSA9IHBhZ2VYIC8gcGFnZVdpZHRoICsgMTsKICAgICAgICBzeCA9IC0xIC8gcGFnZUhlaWdodDsKICAgICAgICBzeSA9IC0xIC8gcGFnZVdpZHRoOwogICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKCFsaW5lcykgewogICAgICBsaW5lcyA9IFtdOwogICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHBvaW50cykgewogICAgICAgIGNvbnN0IGxlbiA9IHBvaW50Lmxlbmd0aDsKICAgICAgICBpZiAobGVuID09PSAyKSB7CiAgICAgICAgICBsaW5lcy5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoW05hTiwgTmFOLCBOYU4sIE5hTiwgcG9pbnRbMF0sIHBvaW50WzFdXSkpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gPT09IDQpIHsKICAgICAgICAgIGxpbmVzLnB1c2gobmV3IEZsb2F0MzJBcnJheShbTmFOLCBOYU4sIE5hTiwgTmFOLCBwb2ludFswXSwgcG9pbnRbMV0sIE5hTiwgTmFOLCBOYU4sIE5hTiwgcG9pbnRbMl0sIHBvaW50WzNdXSkpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGxpbmUgPSBuZXcgRmxvYXQzMkFycmF5KDMgKiAobGVuIC0gMikpOwogICAgICAgIGxpbmVzLnB1c2gobGluZSk7CiAgICAgICAgbGV0IFt4MSwgeTEsIHgyLCB5Ml0gPSBwb2ludC5zdWJhcnJheSgwLCA0KTsKICAgICAgICBsaW5lLnNldChbTmFOLCBOYU4sIE5hTiwgTmFOLCB4MSwgeTFdLCAwKTsKICAgICAgICBmb3IgKGxldCBpID0gNDsgaSA8IGxlbjsgaSArPSAyKSB7CiAgICAgICAgICBjb25zdCB4ID0gcG9pbnRbaV07CiAgICAgICAgICBjb25zdCB5ID0gcG9pbnRbaSArIDFdOwogICAgICAgICAgbGluZS5zZXQoT3V0bGluZS5jcmVhdGVCZXppZXJQb2ludHMoeDEsIHkxLCB4MiwgeTIsIHgsIHkpLCAoaSAtIDIpICogMyk7CiAgICAgICAgICBbeDEsIHkxLCB4MiwgeTJdID0gW3gyLCB5MiwgeCwgeV07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBsaW5lcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIG5ld0xpbmVzLnB1c2goewogICAgICAgIGxpbmU6IHJlc2NhbGVGbihsaW5lc1tpXS5tYXAoeCA9PiB4ID8/IE5hTiksIHR4LCB0eSwgc3gsIHN5KSwKICAgICAgICBwb2ludHM6IHJlc2NhbGVGbihwb2ludHNbaV0ubWFwKHggPT4geCA/PyBOYU4pLCB0eCwgdHksIHN4LCBzeSkKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBvdXRsaW5lcyA9IG5ldyB0aGlzLnByb3RvdHlwZS5jb25zdHJ1Y3RvcigpOwogICAgb3V0bGluZXMuYnVpbGQobmV3TGluZXMsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCwgMSwgcm90YXRpb24sIHRoaWNrbmVzcywgaW5uZXJNYXJnaW4pOwogICAgcmV0dXJuIG91dGxpbmVzOwogIH0KICAjZ2V0TWFyZ2luQ29tcG9uZW50cyh0aGlja25lc3MgPSB0aGlzLiN0aGlja25lc3MpIHsKICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMuI2lubmVyTWFyZ2luICsgdGhpY2tuZXNzIC8gMiAqIHRoaXMuI3BhcmVudFNjYWxlOwogICAgcmV0dXJuIHRoaXMuI3JvdGF0aW9uICUgMTgwID09PSAwID8gW21hcmdpbiAvIHRoaXMuI3BhcmVudFdpZHRoLCBtYXJnaW4gLyB0aGlzLiNwYXJlbnRIZWlnaHRdIDogW21hcmdpbiAvIHRoaXMuI3BhcmVudEhlaWdodCwgbWFyZ2luIC8gdGhpcy4jcGFyZW50V2lkdGhdOwogIH0KICAjZ2V0QkJveFdpdGhOb01hcmdpbigpIHsKICAgIGNvbnN0IFt4LCB5LCB3aWR0aCwgaGVpZ2h0XSA9IHRoaXMuI2Jib3g7CiAgICBjb25zdCBbbWFyZ2luWCwgbWFyZ2luWV0gPSB0aGlzLiNnZXRNYXJnaW5Db21wb25lbnRzKDApOwogICAgcmV0dXJuIFt4ICsgbWFyZ2luWCwgeSArIG1hcmdpblksIHdpZHRoIC0gMiAqIG1hcmdpblgsIGhlaWdodCAtIDIgKiBtYXJnaW5ZXTsKICB9CiAgI2NvbXB1dGVCYm94KCkgewogICAgY29uc3QgYmJveCA9IHRoaXMuI2Jib3ggPSBuZXcgRmxvYXQzMkFycmF5KFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XSk7CiAgICBmb3IgKGNvbnN0IHsKICAgICAgbGluZQogICAgfSBvZiB0aGlzLiNsaW5lcykgewogICAgICBpZiAobGluZS5sZW5ndGggPD0gMTIpIHsKICAgICAgICBmb3IgKGxldCBpID0gNCwgaWkgPSBsaW5lLmxlbmd0aDsgaSA8IGlpOyBpICs9IDYpIHsKICAgICAgICAgIFV0aWwucG9pbnRCb3VuZGluZ0JveChsaW5lW2ldLCBsaW5lW2kgKyAxXSwgYmJveCk7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGxldCBsYXN0WCA9IGxpbmVbNF0sCiAgICAgICAgbGFzdFkgPSBsaW5lWzVdOwogICAgICBmb3IgKGxldCBpID0gNiwgaWkgPSBsaW5lLmxlbmd0aDsgaSA8IGlpOyBpICs9IDYpIHsKICAgICAgICBjb25zdCBbYzF4LCBjMXksIGMyeCwgYzJ5LCB4LCB5XSA9IGxpbmUuc3ViYXJyYXkoaSwgaSArIDYpOwogICAgICAgIFV0aWwuYmV6aWVyQm91bmRpbmdCb3gobGFzdFgsIGxhc3RZLCBjMXgsIGMxeSwgYzJ4LCBjMnksIHgsIHksIGJib3gpOwogICAgICAgIGxhc3RYID0geDsKICAgICAgICBsYXN0WSA9IHk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IFttYXJnaW5YLCBtYXJnaW5ZXSA9IHRoaXMuI2dldE1hcmdpbkNvbXBvbmVudHMoKTsKICAgIGJib3hbMF0gPSBNYXRoQ2xhbXAoYmJveFswXSAtIG1hcmdpblgsIDAsIDEpOwogICAgYmJveFsxXSA9IE1hdGhDbGFtcChiYm94WzFdIC0gbWFyZ2luWSwgMCwgMSk7CiAgICBiYm94WzJdID0gTWF0aENsYW1wKGJib3hbMl0gKyBtYXJnaW5YLCAwLCAxKTsKICAgIGJib3hbM10gPSBNYXRoQ2xhbXAoYmJveFszXSArIG1hcmdpblksIDAsIDEpOwogICAgYmJveFsyXSAtPSBiYm94WzBdOwogICAgYmJveFszXSAtPSBiYm94WzFdOwogIH0KICBnZXQgYm94KCkgewogICAgcmV0dXJuIHRoaXMuI2Jib3g7CiAgfQogIHVwZGF0ZVByb3BlcnR5KG5hbWUsIHZhbHVlKSB7CiAgICBpZiAobmFtZSA9PT0gInN0cm9rZS13aWR0aCIpIHsKICAgICAgcmV0dXJuIHRoaXMuI3VwZGF0ZVRoaWNrbmVzcyh2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgI3VwZGF0ZVRoaWNrbmVzcyh0aGlja25lc3MpIHsKICAgIGNvbnN0IFtvbGRNYXJnaW5YLCBvbGRNYXJnaW5ZXSA9IHRoaXMuI2dldE1hcmdpbkNvbXBvbmVudHMoKTsKICAgIHRoaXMuI3RoaWNrbmVzcyA9IHRoaWNrbmVzczsKICAgIGNvbnN0IFtuZXdNYXJnaW5YLCBuZXdNYXJnaW5ZXSA9IHRoaXMuI2dldE1hcmdpbkNvbXBvbmVudHMoKTsKICAgIGNvbnN0IFtkaWZmTWFyZ2luWCwgZGlmZk1hcmdpblldID0gW25ld01hcmdpblggLSBvbGRNYXJnaW5YLCBuZXdNYXJnaW5ZIC0gb2xkTWFyZ2luWV07CiAgICBjb25zdCBiYm94ID0gdGhpcy4jYmJveDsKICAgIGJib3hbMF0gLT0gZGlmZk1hcmdpblg7CiAgICBiYm94WzFdIC09IGRpZmZNYXJnaW5ZOwogICAgYmJveFsyXSArPSAyICogZGlmZk1hcmdpblg7CiAgICBiYm94WzNdICs9IDIgKiBkaWZmTWFyZ2luWTsKICAgIHJldHVybiBiYm94OwogIH0KICB1cGRhdGVQYXJlbnREaW1lbnNpb25zKFt3aWR0aCwgaGVpZ2h0XSwgc2NhbGUpIHsKICAgIGNvbnN0IFtvbGRNYXJnaW5YLCBvbGRNYXJnaW5ZXSA9IHRoaXMuI2dldE1hcmdpbkNvbXBvbmVudHMoKTsKICAgIHRoaXMuI3BhcmVudFdpZHRoID0gd2lkdGg7CiAgICB0aGlzLiNwYXJlbnRIZWlnaHQgPSBoZWlnaHQ7CiAgICB0aGlzLiNwYXJlbnRTY2FsZSA9IHNjYWxlOwogICAgY29uc3QgW25ld01hcmdpblgsIG5ld01hcmdpblldID0gdGhpcy4jZ2V0TWFyZ2luQ29tcG9uZW50cygpOwogICAgY29uc3QgZGlmZk1hcmdpblggPSBuZXdNYXJnaW5YIC0gb2xkTWFyZ2luWDsKICAgIGNvbnN0IGRpZmZNYXJnaW5ZID0gbmV3TWFyZ2luWSAtIG9sZE1hcmdpblk7CiAgICBjb25zdCBiYm94ID0gdGhpcy4jYmJveDsKICAgIGJib3hbMF0gLT0gZGlmZk1hcmdpblg7CiAgICBiYm94WzFdIC09IGRpZmZNYXJnaW5ZOwogICAgYmJveFsyXSArPSAyICogZGlmZk1hcmdpblg7CiAgICBiYm94WzNdICs9IDIgKiBkaWZmTWFyZ2luWTsKICAgIHJldHVybiBiYm94OwogIH0KICB1cGRhdGVSb3RhdGlvbihyb3RhdGlvbikgewogICAgdGhpcy4jY3VycmVudFJvdGF0aW9uID0gcm90YXRpb247CiAgICByZXR1cm4gewogICAgICBwYXRoOiB7CiAgICAgICAgdHJhbnNmb3JtOiB0aGlzLnJvdGF0aW9uVHJhbnNmb3JtCiAgICAgIH0KICAgIH07CiAgfQogIGdldCB2aWV3Qm94KCkgewogICAgcmV0dXJuIHRoaXMuI2Jib3gubWFwKE91dGxpbmUuc3ZnUm91bmQpLmpvaW4oIiAiKTsKICB9CiAgZ2V0IGRlZmF1bHRQcm9wZXJ0aWVzKCkgewogICAgY29uc3QgW3gsIHldID0gdGhpcy4jYmJveDsKICAgIHJldHVybiB7CiAgICAgIHJvb3Q6IHsKICAgICAgICB2aWV3Qm94OiB0aGlzLnZpZXdCb3gKICAgICAgfSwKICAgICAgcGF0aDogewogICAgICAgICJ0cmFuc2Zvcm0tb3JpZ2luIjogYCR7T3V0bGluZS5zdmdSb3VuZCh4KX0gJHtPdXRsaW5lLnN2Z1JvdW5kKHkpfWAKICAgICAgfQogICAgfTsKICB9CiAgZ2V0IHJvdGF0aW9uVHJhbnNmb3JtKCkgewogICAgY29uc3QgWywsIHdpZHRoLCBoZWlnaHRdID0gdGhpcy4jYmJveDsKICAgIGxldCBhID0gMCwKICAgICAgYiA9IDAsCiAgICAgIGMgPSAwLAogICAgICBkID0gMCwKICAgICAgZSA9IDAsCiAgICAgIGYgPSAwOwogICAgc3dpdGNoICh0aGlzLiNjdXJyZW50Um90YXRpb24pIHsKICAgICAgY2FzZSA5MDoKICAgICAgICBiID0gaGVpZ2h0IC8gd2lkdGg7CiAgICAgICAgYyA9IC13aWR0aCAvIGhlaWdodDsKICAgICAgICBlID0gd2lkdGg7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTgwOgogICAgICAgIGEgPSAtMTsKICAgICAgICBkID0gLTE7CiAgICAgICAgZSA9IHdpZHRoOwogICAgICAgIGYgPSBoZWlnaHQ7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjcwOgogICAgICAgIGIgPSAtaGVpZ2h0IC8gd2lkdGg7CiAgICAgICAgYyA9IHdpZHRoIC8gaGVpZ2h0OwogICAgICAgIGYgPSBoZWlnaHQ7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICIiOwogICAgfQogICAgcmV0dXJuIGBtYXRyaXgoJHthfSAke2J9ICR7Y30gJHtkfSAke091dGxpbmUuc3ZnUm91bmQoZSl9ICR7T3V0bGluZS5zdmdSb3VuZChmKX0pYDsKICB9CiAgZ2V0UGF0aFJlc2l6aW5nU1ZHUHJvcGVydGllcyhbbmV3WCwgbmV3WSwgbmV3V2lkdGgsIG5ld0hlaWdodF0pIHsKICAgIGNvbnN0IFttYXJnaW5YLCBtYXJnaW5ZXSA9IHRoaXMuI2dldE1hcmdpbkNvbXBvbmVudHMoKTsKICAgIGNvbnN0IFt4LCB5LCB3aWR0aCwgaGVpZ2h0XSA9IHRoaXMuI2Jib3g7CiAgICBpZiAoTWF0aC5hYnMod2lkdGggLSBtYXJnaW5YKSA8PSBPdXRsaW5lLlBSRUNJU0lPTiB8fCBNYXRoLmFicyhoZWlnaHQgLSBtYXJnaW5ZKSA8PSBPdXRsaW5lLlBSRUNJU0lPTikgewogICAgICBjb25zdCB0eCA9IG5ld1ggKyBuZXdXaWR0aCAvIDIgLSAoeCArIHdpZHRoIC8gMik7CiAgICAgIGNvbnN0IHR5ID0gbmV3WSArIG5ld0hlaWdodCAvIDIgLSAoeSArIGhlaWdodCAvIDIpOwogICAgICByZXR1cm4gewogICAgICAgIHBhdGg6IHsKICAgICAgICAgICJ0cmFuc2Zvcm0tb3JpZ2luIjogYCR7T3V0bGluZS5zdmdSb3VuZChuZXdYKX0gJHtPdXRsaW5lLnN2Z1JvdW5kKG5ld1kpfWAsCiAgICAgICAgICB0cmFuc2Zvcm06IGAke3RoaXMucm90YXRpb25UcmFuc2Zvcm19IHRyYW5zbGF0ZSgke3R4fSAke3R5fSlgCiAgICAgICAgfQogICAgICB9OwogICAgfQogICAgY29uc3QgczF4ID0gKG5ld1dpZHRoIC0gMiAqIG1hcmdpblgpIC8gKHdpZHRoIC0gMiAqIG1hcmdpblgpOwogICAgY29uc3QgczF5ID0gKG5ld0hlaWdodCAtIDIgKiBtYXJnaW5ZKSAvIChoZWlnaHQgLSAyICogbWFyZ2luWSk7CiAgICBjb25zdCBzMnggPSB3aWR0aCAvIG5ld1dpZHRoOwogICAgY29uc3QgczJ5ID0gaGVpZ2h0IC8gbmV3SGVpZ2h0OwogICAgcmV0dXJuIHsKICAgICAgcGF0aDogewogICAgICAgICJ0cmFuc2Zvcm0tb3JpZ2luIjogYCR7T3V0bGluZS5zdmdSb3VuZCh4KX0gJHtPdXRsaW5lLnN2Z1JvdW5kKHkpfWAsCiAgICAgICAgdHJhbnNmb3JtOiBgJHt0aGlzLnJvdGF0aW9uVHJhbnNmb3JtfSBzY2FsZSgke3MyeH0gJHtzMnl9KSBgICsgYHRyYW5zbGF0ZSgke091dGxpbmUuc3ZnUm91bmQobWFyZ2luWCl9ICR7T3V0bGluZS5zdmdSb3VuZChtYXJnaW5ZKX0pIHNjYWxlKCR7czF4fSAke3MxeX0pIGAgKyBgdHJhbnNsYXRlKCR7T3V0bGluZS5zdmdSb3VuZCgtbWFyZ2luWCl9ICR7T3V0bGluZS5zdmdSb3VuZCgtbWFyZ2luWSl9KWAKICAgICAgfQogICAgfTsKICB9CiAgZ2V0UGF0aFJlc2l6ZWRTVkdQcm9wZXJ0aWVzKFtuZXdYLCBuZXdZLCBuZXdXaWR0aCwgbmV3SGVpZ2h0XSkgewogICAgY29uc3QgW21hcmdpblgsIG1hcmdpblldID0gdGhpcy4jZ2V0TWFyZ2luQ29tcG9uZW50cygpOwogICAgY29uc3QgYmJveCA9IHRoaXMuI2Jib3g7CiAgICBjb25zdCBbeCwgeSwgd2lkdGgsIGhlaWdodF0gPSBiYm94OwogICAgYmJveFswXSA9IG5ld1g7CiAgICBiYm94WzFdID0gbmV3WTsKICAgIGJib3hbMl0gPSBuZXdXaWR0aDsKICAgIGJib3hbM10gPSBuZXdIZWlnaHQ7CiAgICBpZiAoTWF0aC5hYnMod2lkdGggLSBtYXJnaW5YKSA8PSBPdXRsaW5lLlBSRUNJU0lPTiB8fCBNYXRoLmFicyhoZWlnaHQgLSBtYXJnaW5ZKSA8PSBPdXRsaW5lLlBSRUNJU0lPTikgewogICAgICBjb25zdCB0eCA9IG5ld1ggKyBuZXdXaWR0aCAvIDIgLSAoeCArIHdpZHRoIC8gMik7CiAgICAgIGNvbnN0IHR5ID0gbmV3WSArIG5ld0hlaWdodCAvIDIgLSAoeSArIGhlaWdodCAvIDIpOwogICAgICBmb3IgKGNvbnN0IHsKICAgICAgICBsaW5lLAogICAgICAgIHBvaW50cwogICAgICB9IG9mIHRoaXMuI2xpbmVzKSB7CiAgICAgICAgT3V0bGluZS5fdHJhbnNsYXRlKGxpbmUsIHR4LCB0eSwgbGluZSk7CiAgICAgICAgT3V0bGluZS5fdHJhbnNsYXRlKHBvaW50cywgdHgsIHR5LCBwb2ludHMpOwogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgcm9vdDogewogICAgICAgICAgdmlld0JveDogdGhpcy52aWV3Qm94CiAgICAgICAgfSwKICAgICAgICBwYXRoOiB7CiAgICAgICAgICAidHJhbnNmb3JtLW9yaWdpbiI6IGAke091dGxpbmUuc3ZnUm91bmQobmV3WCl9ICR7T3V0bGluZS5zdmdSb3VuZChuZXdZKX1gLAogICAgICAgICAgdHJhbnNmb3JtOiB0aGlzLnJvdGF0aW9uVHJhbnNmb3JtIHx8IG51bGwsCiAgICAgICAgICBkOiB0aGlzLnRvU1ZHUGF0aCgpCiAgICAgICAgfQogICAgICB9OwogICAgfQogICAgY29uc3QgczF4ID0gKG5ld1dpZHRoIC0gMiAqIG1hcmdpblgpIC8gKHdpZHRoIC0gMiAqIG1hcmdpblgpOwogICAgY29uc3QgczF5ID0gKG5ld0hlaWdodCAtIDIgKiBtYXJnaW5ZKSAvIChoZWlnaHQgLSAyICogbWFyZ2luWSk7CiAgICBjb25zdCB0eCA9IC1zMXggKiAoeCArIG1hcmdpblgpICsgbmV3WCArIG1hcmdpblg7CiAgICBjb25zdCB0eSA9IC1zMXkgKiAoeSArIG1hcmdpblkpICsgbmV3WSArIG1hcmdpblk7CiAgICBpZiAoczF4ICE9PSAxIHx8IHMxeSAhPT0gMSB8fCB0eCAhPT0gMCB8fCB0eSAhPT0gMCkgewogICAgICBmb3IgKGNvbnN0IHsKICAgICAgICBsaW5lLAogICAgICAgIHBvaW50cwogICAgICB9IG9mIHRoaXMuI2xpbmVzKSB7CiAgICAgICAgT3V0bGluZS5fcmVzY2FsZShsaW5lLCB0eCwgdHksIHMxeCwgczF5LCBsaW5lKTsKICAgICAgICBPdXRsaW5lLl9yZXNjYWxlKHBvaW50cywgdHgsIHR5LCBzMXgsIHMxeSwgcG9pbnRzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHsKICAgICAgcm9vdDogewogICAgICAgIHZpZXdCb3g6IHRoaXMudmlld0JveAogICAgICB9LAogICAgICBwYXRoOiB7CiAgICAgICAgInRyYW5zZm9ybS1vcmlnaW4iOiBgJHtPdXRsaW5lLnN2Z1JvdW5kKG5ld1gpfSAke091dGxpbmUuc3ZnUm91bmQobmV3WSl9YCwKICAgICAgICB0cmFuc2Zvcm06IHRoaXMucm90YXRpb25UcmFuc2Zvcm0gfHwgbnVsbCwKICAgICAgICBkOiB0aGlzLnRvU1ZHUGF0aCgpCiAgICAgIH0KICAgIH07CiAgfQogIGdldFBhdGhUcmFuc2xhdGVkU1ZHUHJvcGVydGllcyhbbmV3WCwgbmV3WV0sIHBhcmVudERpbWVuc2lvbnMpIHsKICAgIGNvbnN0IFtuZXdQYXJlbnRXaWR0aCwgbmV3UGFyZW50SGVpZ2h0XSA9IHBhcmVudERpbWVuc2lvbnM7CiAgICBjb25zdCBiYm94ID0gdGhpcy4jYmJveDsKICAgIGNvbnN0IHR4ID0gbmV3WCAtIGJib3hbMF07CiAgICBjb25zdCB0eSA9IG5ld1kgLSBiYm94WzFdOwogICAgaWYgKHRoaXMuI3BhcmVudFdpZHRoID09PSBuZXdQYXJlbnRXaWR0aCAmJiB0aGlzLiNwYXJlbnRIZWlnaHQgPT09IG5ld1BhcmVudEhlaWdodCkgewogICAgICBmb3IgKGNvbnN0IHsKICAgICAgICBsaW5lLAogICAgICAgIHBvaW50cwogICAgICB9IG9mIHRoaXMuI2xpbmVzKSB7CiAgICAgICAgT3V0bGluZS5fdHJhbnNsYXRlKGxpbmUsIHR4LCB0eSwgbGluZSk7CiAgICAgICAgT3V0bGluZS5fdHJhbnNsYXRlKHBvaW50cywgdHgsIHR5LCBwb2ludHMpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBzeCA9IHRoaXMuI3BhcmVudFdpZHRoIC8gbmV3UGFyZW50V2lkdGg7CiAgICAgIGNvbnN0IHN5ID0gdGhpcy4jcGFyZW50SGVpZ2h0IC8gbmV3UGFyZW50SGVpZ2h0OwogICAgICB0aGlzLiNwYXJlbnRXaWR0aCA9IG5ld1BhcmVudFdpZHRoOwogICAgICB0aGlzLiNwYXJlbnRIZWlnaHQgPSBuZXdQYXJlbnRIZWlnaHQ7CiAgICAgIGZvciAoY29uc3QgewogICAgICAgIGxpbmUsCiAgICAgICAgcG9pbnRzCiAgICAgIH0gb2YgdGhpcy4jbGluZXMpIHsKICAgICAgICBPdXRsaW5lLl9yZXNjYWxlKGxpbmUsIHR4LCB0eSwgc3gsIHN5LCBsaW5lKTsKICAgICAgICBPdXRsaW5lLl9yZXNjYWxlKHBvaW50cywgdHgsIHR5LCBzeCwgc3ksIHBvaW50cyk7CiAgICAgIH0KICAgICAgYmJveFsyXSAqPSBzeDsKICAgICAgYmJveFszXSAqPSBzeTsKICAgIH0KICAgIGJib3hbMF0gPSBuZXdYOwogICAgYmJveFsxXSA9IG5ld1k7CiAgICByZXR1cm4gewogICAgICByb290OiB7CiAgICAgICAgdmlld0JveDogdGhpcy52aWV3Qm94CiAgICAgIH0sCiAgICAgIHBhdGg6IHsKICAgICAgICBkOiB0aGlzLnRvU1ZHUGF0aCgpLAogICAgICAgICJ0cmFuc2Zvcm0tb3JpZ2luIjogYCR7T3V0bGluZS5zdmdSb3VuZChuZXdYKX0gJHtPdXRsaW5lLnN2Z1JvdW5kKG5ld1kpfWAKICAgICAgfQogICAgfTsKICB9CiAgZ2V0IGRlZmF1bHRTVkdQcm9wZXJ0aWVzKCkgewogICAgY29uc3QgYmJveCA9IHRoaXMuI2Jib3g7CiAgICByZXR1cm4gewogICAgICByb290OiB7CiAgICAgICAgdmlld0JveDogdGhpcy52aWV3Qm94CiAgICAgIH0sCiAgICAgIHJvb3RDbGFzczogewogICAgICAgIGRyYXc6IHRydWUKICAgICAgfSwKICAgICAgcGF0aDogewogICAgICAgIGQ6IHRoaXMudG9TVkdQYXRoKCksCiAgICAgICAgInRyYW5zZm9ybS1vcmlnaW4iOiBgJHtPdXRsaW5lLnN2Z1JvdW5kKGJib3hbMF0pfSAke091dGxpbmUuc3ZnUm91bmQoYmJveFsxXSl9YCwKICAgICAgICB0cmFuc2Zvcm06IHRoaXMucm90YXRpb25UcmFuc2Zvcm0gfHwgbnVsbAogICAgICB9LAogICAgICBiYm94CiAgICB9OwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL2luay5qcwoKCgoKCgpjbGFzcyBJbmtEcmF3aW5nT3B0aW9ucyBleHRlbmRzIERyYXdpbmdPcHRpb25zIHsKICBjb25zdHJ1Y3Rvcih2aWV3ZXJQYXJhbWV0ZXJzKSB7CiAgICBzdXBlcigpOwogICAgdGhpcy5fdmlld1BhcmFtZXRlcnMgPSB2aWV3ZXJQYXJhbWV0ZXJzOwogICAgc3VwZXIudXBkYXRlUHJvcGVydGllcyh7CiAgICAgIGZpbGw6ICJub25lIiwKICAgICAgc3Ryb2tlOiBBbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yLAogICAgICAic3Ryb2tlLW9wYWNpdHkiOiAxLAogICAgICAic3Ryb2tlLXdpZHRoIjogMSwKICAgICAgInN0cm9rZS1saW5lY2FwIjogInJvdW5kIiwKICAgICAgInN0cm9rZS1saW5lam9pbiI6ICJyb3VuZCIsCiAgICAgICJzdHJva2UtbWl0ZXJsaW1pdCI6IDEwCiAgICB9KTsKICB9CiAgdXBkYXRlU1ZHUHJvcGVydHkobmFtZSwgdmFsdWUpIHsKICAgIGlmIChuYW1lID09PSAic3Ryb2tlLXdpZHRoIikgewogICAgICB2YWx1ZSA/Pz0gdGhpc1sic3Ryb2tlLXdpZHRoIl07CiAgICAgIHZhbHVlICo9IHRoaXMuX3ZpZXdQYXJhbWV0ZXJzLnJlYWxTY2FsZTsKICAgIH0KICAgIHN1cGVyLnVwZGF0ZVNWR1Byb3BlcnR5KG5hbWUsIHZhbHVlKTsKICB9CiAgY2xvbmUoKSB7CiAgICBjb25zdCBjbG9uZSA9IG5ldyBJbmtEcmF3aW5nT3B0aW9ucyh0aGlzLl92aWV3UGFyYW1ldGVycyk7CiAgICBjbG9uZS51cGRhdGVBbGwodGhpcyk7CiAgICByZXR1cm4gY2xvbmU7CiAgfQp9CmNsYXNzIElua0VkaXRvciBleHRlbmRzIERyYXdpbmdFZGl0b3IgewogIHN0YXRpYyBfdHlwZSA9ICJpbmsiOwogIHN0YXRpYyBfZWRpdG9yVHlwZSA9IEFubm90YXRpb25FZGl0b3JUeXBlLklOSzsKICBzdGF0aWMgX2RlZmF1bHREcmF3aW5nT3B0aW9ucyA9IG51bGw7CiAgY29uc3RydWN0b3IocGFyYW1zKSB7CiAgICBzdXBlcih7CiAgICAgIC4uLnBhcmFtcywKICAgICAgbmFtZTogImlua0VkaXRvciIKICAgIH0pOwogICAgdGhpcy5fd2lsbEtlZXBBc3BlY3RSYXRpbyA9IHRydWU7CiAgICB0aGlzLmRlZmF1bHRMMTBuSWQgPSAicGRmanMtZWRpdG9yLWluay1lZGl0b3IiOwogIH0KICBzdGF0aWMgaW5pdGlhbGl6ZShsMTBuLCB1aU1hbmFnZXIpIHsKICAgIEFubm90YXRpb25FZGl0b3IuaW5pdGlhbGl6ZShsMTBuLCB1aU1hbmFnZXIpOwogICAgdGhpcy5fZGVmYXVsdERyYXdpbmdPcHRpb25zID0gbmV3IElua0RyYXdpbmdPcHRpb25zKHVpTWFuYWdlci52aWV3UGFyYW1ldGVycyk7CiAgfQogIHN0YXRpYyBnZXREZWZhdWx0RHJhd2luZ09wdGlvbnMob3B0aW9ucykgewogICAgY29uc3QgY2xvbmUgPSB0aGlzLl9kZWZhdWx0RHJhd2luZ09wdGlvbnMuY2xvbmUoKTsKICAgIGNsb25lLnVwZGF0ZVByb3BlcnRpZXMob3B0aW9ucyk7CiAgICByZXR1cm4gY2xvbmU7CiAgfQogIHN0YXRpYyBnZXQgc3VwcG9ydE11bHRpcGxlRHJhd2luZ3MoKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgc3RhdGljIGdldCB0eXBlc01hcCgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgInR5cGVzTWFwIiwgbmV3IE1hcChbW0Fubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1MsICJzdHJva2Utd2lkdGgiXSwgW0Fubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUiwgInN0cm9rZSJdLCBbQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX09QQUNJVFksICJzdHJva2Utb3BhY2l0eSJdXSkpOwogIH0KICBzdGF0aWMgY3JlYXRlRHJhd2VySW5zdGFuY2UoeCwgeSwgcGFyZW50V2lkdGgsIHBhcmVudEhlaWdodCwgcm90YXRpb24pIHsKICAgIHJldHVybiBuZXcgSW5rRHJhd091dGxpbmVyKHgsIHksIHBhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHQsIHJvdGF0aW9uLCB0aGlzLl9kZWZhdWx0RHJhd2luZ09wdGlvbnNbInN0cm9rZS13aWR0aCJdKTsKICB9CiAgc3RhdGljIGRlc2VyaWFsaXplRHJhdyhwYWdlWCwgcGFnZVksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCwgaW5uZXJNYXJnaW4sIGRhdGEpIHsKICAgIHJldHVybiBJbmtEcmF3T3V0bGluZS5kZXNlcmlhbGl6ZShwYWdlWCwgcGFnZVksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCwgaW5uZXJNYXJnaW4sIGRhdGEpOwogIH0KICBzdGF0aWMgYXN5bmMgZGVzZXJpYWxpemUoZGF0YSwgcGFyZW50LCB1aU1hbmFnZXIpIHsKICAgIGxldCBpbml0aWFsRGF0YSA9IG51bGw7CiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIElua0Fubm90YXRpb25FbGVtZW50KSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhOiB7CiAgICAgICAgICBpbmtMaXN0cywKICAgICAgICAgIHJlY3QsCiAgICAgICAgICByb3RhdGlvbiwKICAgICAgICAgIGlkLAogICAgICAgICAgY29sb3IsCiAgICAgICAgICBvcGFjaXR5LAogICAgICAgICAgYm9yZGVyU3R5bGU6IHsKICAgICAgICAgICAgcmF3V2lkdGg6IHRoaWNrbmVzcwogICAgICAgICAgfSwKICAgICAgICAgIHBvcHVwUmVmLAogICAgICAgICAgcmljaFRleHQsCiAgICAgICAgICBjb250ZW50c09iaiwKICAgICAgICAgIGNyZWF0aW9uRGF0ZSwKICAgICAgICAgIG1vZGlmaWNhdGlvbkRhdGUKICAgICAgICB9LAogICAgICAgIHBhcmVudDogewogICAgICAgICAgcGFnZTogewogICAgICAgICAgICBwYWdlTnVtYmVyCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9ID0gZGF0YTsKICAgICAgaW5pdGlhbERhdGEgPSBkYXRhID0gewogICAgICAgIGFubm90YXRpb25UeXBlOiBBbm5vdGF0aW9uRWRpdG9yVHlwZS5JTkssCiAgICAgICAgY29sb3I6IEFycmF5LmZyb20oY29sb3IpLAogICAgICAgIHRoaWNrbmVzcywKICAgICAgICBvcGFjaXR5LAogICAgICAgIHBhdGhzOiB7CiAgICAgICAgICBwb2ludHM6IGlua0xpc3RzCiAgICAgICAgfSwKICAgICAgICBib3hlczogbnVsbCwKICAgICAgICBwYWdlSW5kZXg6IHBhZ2VOdW1iZXIgLSAxLAogICAgICAgIHJlY3Q6IHJlY3Quc2xpY2UoMCksCiAgICAgICAgcm90YXRpb24sCiAgICAgICAgYW5ub3RhdGlvbkVsZW1lbnRJZDogaWQsCiAgICAgICAgaWQsCiAgICAgICAgZGVsZXRlZDogZmFsc2UsCiAgICAgICAgcG9wdXBSZWYsCiAgICAgICAgcmljaFRleHQsCiAgICAgICAgY29tbWVudDogY29udGVudHNPYmo/LnN0ciB8fCBudWxsLAogICAgICAgIGNyZWF0aW9uRGF0ZSwKICAgICAgICBtb2RpZmljYXRpb25EYXRlCiAgICAgIH07CiAgICB9CiAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBzdXBlci5kZXNlcmlhbGl6ZShkYXRhLCBwYXJlbnQsIHVpTWFuYWdlcik7CiAgICBlZGl0b3IuX2luaXRpYWxEYXRhID0gaW5pdGlhbERhdGE7CiAgICBpZiAoZGF0YS5jb21tZW50KSB7CiAgICAgIGVkaXRvci5zZXRDb21tZW50RGF0YShkYXRhKTsKICAgIH0KICAgIHJldHVybiBlZGl0b3I7CiAgfQogIGdldCB0b29sYmFyQnV0dG9ucygpIHsKICAgIHRoaXMuX2NvbG9yUGlja2VyIHx8PSBuZXcgQmFzaWNDb2xvclBpY2tlcih0aGlzKTsKICAgIHJldHVybiBbWyJjb2xvclBpY2tlciIsIHRoaXMuX2NvbG9yUGlja2VyXV07CiAgfQogIGdldCBjb2xvclR5cGUoKSB7CiAgICByZXR1cm4gQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX0NPTE9SOwogIH0KICBnZXQgY29sb3IoKSB7CiAgICByZXR1cm4gdGhpcy5fZHJhd2luZ09wdGlvbnMuc3Ryb2tlOwogIH0KICBnZXQgb3BhY2l0eSgpIHsKICAgIHJldHVybiB0aGlzLl9kcmF3aW5nT3B0aW9uc1sic3Ryb2tlLW9wYWNpdHkiXTsKICB9CiAgb25TY2FsZUNoYW5naW5nKCkgewogICAgaWYgKCF0aGlzLnBhcmVudCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBzdXBlci5vblNjYWxlQ2hhbmdpbmcoKTsKICAgIGNvbnN0IHsKICAgICAgX2RyYXdJZCwKICAgICAgX2RyYXdpbmdPcHRpb25zLAogICAgICBwYXJlbnQKICAgIH0gPSB0aGlzOwogICAgX2RyYXdpbmdPcHRpb25zLnVwZGF0ZVNWR1Byb3BlcnR5KCJzdHJva2Utd2lkdGgiKTsKICAgIHBhcmVudC5kcmF3TGF5ZXIudXBkYXRlUHJvcGVydGllcyhfZHJhd0lkLCBfZHJhd2luZ09wdGlvbnMudG9TVkdQcm9wZXJ0aWVzKCkpOwogIH0KICBzdGF0aWMgb25TY2FsZUNoYW5naW5nV2hlbkRyYXdpbmcoKSB7CiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9jdXJyZW50UGFyZW50OwogICAgaWYgKCFwYXJlbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3VwZXIub25TY2FsZUNoYW5naW5nV2hlbkRyYXdpbmcoKTsKICAgIHRoaXMuX2RlZmF1bHREcmF3aW5nT3B0aW9ucy51cGRhdGVTVkdQcm9wZXJ0eSgic3Ryb2tlLXdpZHRoIik7CiAgICBwYXJlbnQuZHJhd0xheWVyLnVwZGF0ZVByb3BlcnRpZXModGhpcy5fY3VycmVudERyYXdJZCwgdGhpcy5fZGVmYXVsdERyYXdpbmdPcHRpb25zLnRvU1ZHUHJvcGVydGllcygpKTsKICB9CiAgY3JlYXRlRHJhd2luZ09wdGlvbnMoewogICAgY29sb3IsCiAgICB0aGlja25lc3MsCiAgICBvcGFjaXR5CiAgfSkgewogICAgdGhpcy5fZHJhd2luZ09wdGlvbnMgPSBJbmtFZGl0b3IuZ2V0RGVmYXVsdERyYXdpbmdPcHRpb25zKHsKICAgICAgc3Ryb2tlOiBVdGlsLm1ha2VIZXhDb2xvciguLi5jb2xvciksCiAgICAgICJzdHJva2Utd2lkdGgiOiB0aGlja25lc3MsCiAgICAgICJzdHJva2Utb3BhY2l0eSI6IG9wYWNpdHkKICAgIH0pOwogIH0KICBzZXJpYWxpemUoaXNGb3JDb3B5aW5nID0gZmFsc2UpIHsKICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICh0aGlzLmRlbGV0ZWQpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplRGVsZXRlZCgpOwogICAgfQogICAgY29uc3QgewogICAgICBsaW5lcywKICAgICAgcG9pbnRzCiAgICB9ID0gdGhpcy5zZXJpYWxpemVEcmF3KGlzRm9yQ29weWluZyk7CiAgICBjb25zdCB7CiAgICAgIF9kcmF3aW5nT3B0aW9uczogewogICAgICAgIHN0cm9rZSwKICAgICAgICAic3Ryb2tlLW9wYWNpdHkiOiBvcGFjaXR5LAogICAgICAgICJzdHJva2Utd2lkdGgiOiB0aGlja25lc3MKICAgICAgfQogICAgfSA9IHRoaXM7CiAgICBjb25zdCBzZXJpYWxpemVkID0gT2JqZWN0LmFzc2lnbihzdXBlci5zZXJpYWxpemUoaXNGb3JDb3B5aW5nKSwgewogICAgICBjb2xvcjogQW5ub3RhdGlvbkVkaXRvci5fY29sb3JNYW5hZ2VyLmNvbnZlcnQoc3Ryb2tlKSwKICAgICAgb3BhY2l0eSwKICAgICAgdGhpY2tuZXNzLAogICAgICBwYXRoczogewogICAgICAgIGxpbmVzLAogICAgICAgIHBvaW50cwogICAgICB9CiAgICB9KTsKICAgIHRoaXMuYWRkQ29tbWVudChzZXJpYWxpemVkKTsKICAgIGlmIChpc0ZvckNvcHlpbmcpIHsKICAgICAgc2VyaWFsaXplZC5pc0NvcHkgPSB0cnVlOwogICAgICByZXR1cm4gc2VyaWFsaXplZDsKICAgIH0KICAgIGlmICh0aGlzLmFubm90YXRpb25FbGVtZW50SWQgJiYgIXRoaXMuI2hhc0VsZW1lbnRDaGFuZ2VkKHNlcmlhbGl6ZWQpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgc2VyaWFsaXplZC5pZCA9IHRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZDsKICAgIHJldHVybiBzZXJpYWxpemVkOwogIH0KICAjaGFzRWxlbWVudENoYW5nZWQoc2VyaWFsaXplZCkgewogICAgY29uc3QgewogICAgICBjb2xvciwKICAgICAgdGhpY2tuZXNzLAogICAgICBvcGFjaXR5LAogICAgICBwYWdlSW5kZXgKICAgIH0gPSB0aGlzLl9pbml0aWFsRGF0YTsKICAgIHJldHVybiB0aGlzLmhhc0VkaXRlZENvbW1lbnQgfHwgdGhpcy5faGFzQmVlbk1vdmVkIHx8IHRoaXMuX2hhc0JlZW5SZXNpemVkIHx8IHNlcmlhbGl6ZWQuY29sb3Iuc29tZSgoYywgaSkgPT4gYyAhPT0gY29sb3JbaV0pIHx8IHNlcmlhbGl6ZWQudGhpY2tuZXNzICE9PSB0aGlja25lc3MgfHwgc2VyaWFsaXplZC5vcGFjaXR5ICE9PSBvcGFjaXR5IHx8IHNlcmlhbGl6ZWQucGFnZUluZGV4ICE9PSBwYWdlSW5kZXg7CiAgfQogIHJlbmRlckFubm90YXRpb25FbGVtZW50KGFubm90YXRpb24pIHsKICAgIGlmICh0aGlzLmRlbGV0ZWQpIHsKICAgICAgYW5ub3RhdGlvbi5oaWRlKCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgewogICAgICBwb2ludHMsCiAgICAgIHJlY3QKICAgIH0gPSB0aGlzLnNlcmlhbGl6ZURyYXcoZmFsc2UpOwogICAgYW5ub3RhdGlvbi51cGRhdGVFZGl0ZWQoewogICAgICByZWN0LAogICAgICB0aGlja25lc3M6IHRoaXMuX2RyYXdpbmdPcHRpb25zWyJzdHJva2Utd2lkdGgiXSwKICAgICAgcG9pbnRzLAogICAgICBwb3B1cDogdGhpcy5jb21tZW50CiAgICB9KTsKICAgIHJldHVybiBudWxsOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL2RyYXdlcnMvY29udG91ci5qcwoKY2xhc3MgQ29udG91ckRyYXdPdXRsaW5lIGV4dGVuZHMgSW5rRHJhd091dGxpbmUgewogIHRvU1ZHUGF0aCgpIHsKICAgIGxldCBwYXRoID0gc3VwZXIudG9TVkdQYXRoKCk7CiAgICBpZiAoIXBhdGguZW5kc1dpdGgoIloiKSkgewogICAgICBwYXRoICs9ICJaIjsKICAgIH0KICAgIHJldHVybiBwYXRoOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL2RyYXdlcnMvc2lnbmF0dXJlZHJhdy5qcwoKCgoKY29uc3QgQkFTRV9IRUFERVJfTEVOR1RIID0gODsKY29uc3QgUE9JTlRTX1BST1BFUlRJRVNfTlVNQkVSID0gMzsKY2xhc3MgU2lnbmF0dXJlRXh0cmFjdG9yIHsKICBzdGF0aWMgI1BBUkFNRVRFUlMgPSB7CiAgICBtYXhEaW06IDUxMiwKICAgIHNpZ21hU0ZhY3RvcjogMC4wMiwKICAgIHNpZ21hUjogMjUsCiAgICBrZXJuZWxTaXplOiAxNgogIH07CiAgc3RhdGljICNuZWlnaGJvckluZGV4VG9JZChpMCwgajAsIGksIGopIHsKICAgIGkgLT0gaTA7CiAgICBqIC09IGowOwogICAgaWYgKGkgPT09IDApIHsKICAgICAgcmV0dXJuIGogPiAwID8gMCA6IDQ7CiAgICB9CiAgICBpZiAoaSA9PT0gMSkgewogICAgICByZXR1cm4gaiArIDY7CiAgICB9CiAgICByZXR1cm4gMiAtIGo7CiAgfQogIHN0YXRpYyAjbmVpZ2hib3JJZFRvSW5kZXggPSBuZXcgSW50MzJBcnJheShbMCwgMSwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsIDAsIC0xLCAxLCAtMSwgMSwgMCwgMSwgMV0pOwogIHN0YXRpYyAjY2xvY2t3aXNlTm9uWmVybyhidWYsIHdpZHRoLCBpMCwgajAsIGksIGosIG9mZnNldCkgewogICAgY29uc3QgaWQgPSB0aGlzLiNuZWlnaGJvckluZGV4VG9JZChpMCwgajAsIGksIGopOwogICAgZm9yIChsZXQgayA9IDA7IGsgPCA4OyBrKyspIHsKICAgICAgY29uc3Qga2sgPSAoLWsgKyBpZCAtIG9mZnNldCArIDE2KSAlIDg7CiAgICAgIGNvbnN0IHNoaWZ0SSA9IHRoaXMuI25laWdoYm9ySWRUb0luZGV4WzIgKiBra107CiAgICAgIGNvbnN0IHNoaWZ0SiA9IHRoaXMuI25laWdoYm9ySWRUb0luZGV4WzIgKiBrayArIDFdOwogICAgICBpZiAoYnVmWyhpMCArIHNoaWZ0SSkgKiB3aWR0aCArIChqMCArIHNoaWZ0SildICE9PSAwKSB7CiAgICAgICAgcmV0dXJuIGtrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQogIHN0YXRpYyAjY291bnRlckNsb2Nrd2lzZU5vblplcm8oYnVmLCB3aWR0aCwgaTAsIGowLCBpLCBqLCBvZmZzZXQpIHsKICAgIGNvbnN0IGlkID0gdGhpcy4jbmVpZ2hib3JJbmRleFRvSWQoaTAsIGowLCBpLCBqKTsKICAgIGZvciAobGV0IGsgPSAwOyBrIDwgODsgaysrKSB7CiAgICAgIGNvbnN0IGtrID0gKGsgKyBpZCArIG9mZnNldCArIDE2KSAlIDg7CiAgICAgIGNvbnN0IHNoaWZ0SSA9IHRoaXMuI25laWdoYm9ySWRUb0luZGV4WzIgKiBra107CiAgICAgIGNvbnN0IHNoaWZ0SiA9IHRoaXMuI25laWdoYm9ySWRUb0luZGV4WzIgKiBrayArIDFdOwogICAgICBpZiAoYnVmWyhpMCArIHNoaWZ0SSkgKiB3aWR0aCArIChqMCArIHNoaWZ0SildICE9PSAwKSB7CiAgICAgICAgcmV0dXJuIGtrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQogIHN0YXRpYyAjZmluZENvbnRvdXJzKGJ1Ziwgd2lkdGgsIGhlaWdodCwgdGhyZXNob2xkKSB7CiAgICBjb25zdCBOID0gYnVmLmxlbmd0aDsKICAgIGNvbnN0IHR5cGVzID0gbmV3IEludDMyQXJyYXkoTik7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICB0eXBlc1tpXSA9IGJ1ZltpXSA8PSB0aHJlc2hvbGQgPyAxIDogMDsKICAgIH0KICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaGVpZ2h0IC0gMTsgaSsrKSB7CiAgICAgIHR5cGVzW2kgKiB3aWR0aF0gPSB0eXBlc1tpICogd2lkdGggKyB3aWR0aCAtIDFdID0gMDsKICAgIH0KICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2lkdGg7IGkrKykgewogICAgICB0eXBlc1tpXSA9IHR5cGVzW3dpZHRoICogaGVpZ2h0IC0gMSAtIGldID0gMDsKICAgIH0KICAgIGxldCBuYmQgPSAxOwogICAgbGV0IGxuYmQ7CiAgICBjb25zdCBjb250b3VycyA9IFtdOwogICAgZm9yIChsZXQgaSA9IDE7IGkgPCBoZWlnaHQgLSAxOyBpKyspIHsKICAgICAgbG5iZCA9IDE7CiAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgd2lkdGggLSAxOyBqKyspIHsKICAgICAgICBjb25zdCBpaiA9IGkgKiB3aWR0aCArIGo7CiAgICAgICAgY29uc3QgcGl4ID0gdHlwZXNbaWpdOwogICAgICAgIGlmIChwaXggPT09IDApIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBsZXQgaTIgPSBpOwogICAgICAgIGxldCBqMiA9IGo7CiAgICAgICAgaWYgKHBpeCA9PT0gMSAmJiB0eXBlc1tpaiAtIDFdID09PSAwKSB7CiAgICAgICAgICBuYmQgKz0gMTsKICAgICAgICAgIGoyIC09IDE7CiAgICAgICAgfSBlbHNlIGlmIChwaXggPj0gMSAmJiB0eXBlc1tpaiArIDFdID09PSAwKSB7CiAgICAgICAgICBuYmQgKz0gMTsKICAgICAgICAgIGoyICs9IDE7CiAgICAgICAgICBpZiAocGl4ID4gMSkgewogICAgICAgICAgICBsbmJkID0gcGl4OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAocGl4ICE9PSAxKSB7CiAgICAgICAgICAgIGxuYmQgPSBNYXRoLmFicyhwaXgpOwogICAgICAgICAgfQogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHBvaW50cyA9IFtqLCBpXTsKICAgICAgICBjb25zdCBpc0hvbGUgPSBqMiA9PT0gaiArIDE7CiAgICAgICAgY29uc3QgY29udG91ciA9IHsKICAgICAgICAgIGlzSG9sZSwKICAgICAgICAgIHBvaW50cywKICAgICAgICAgIGlkOiBuYmQsCiAgICAgICAgICBwYXJlbnQ6IDAKICAgICAgICB9OwogICAgICAgIGNvbnRvdXJzLnB1c2goY29udG91cik7CiAgICAgICAgbGV0IGNvbnRvdXIwOwogICAgICAgIGZvciAoY29uc3QgYyBvZiBjb250b3VycykgewogICAgICAgICAgaWYgKGMuaWQgPT09IGxuYmQpIHsKICAgICAgICAgICAgY29udG91cjAgPSBjOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFjb250b3VyMCkgewogICAgICAgICAgY29udG91ci5wYXJlbnQgPSBpc0hvbGUgPyBsbmJkIDogMDsKICAgICAgICB9IGVsc2UgaWYgKGNvbnRvdXIwLmlzSG9sZSkgewogICAgICAgICAgY29udG91ci5wYXJlbnQgPSBpc0hvbGUgPyBjb250b3VyMC5wYXJlbnQgOiBsbmJkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb250b3VyLnBhcmVudCA9IGlzSG9sZSA/IGxuYmQgOiBjb250b3VyMC5wYXJlbnQ7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGsgPSB0aGlzLiNjbG9ja3dpc2VOb25aZXJvKHR5cGVzLCB3aWR0aCwgaSwgaiwgaTIsIGoyLCAwKTsKICAgICAgICBpZiAoayA9PT0gLTEpIHsKICAgICAgICAgIHR5cGVzW2lqXSA9IC1uYmQ7CiAgICAgICAgICBpZiAodHlwZXNbaWpdICE9PSAxKSB7CiAgICAgICAgICAgIGxuYmQgPSBNYXRoLmFicyh0eXBlc1tpal0pOwogICAgICAgICAgfQogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGxldCBzaGlmdEkgPSB0aGlzLiNuZWlnaGJvcklkVG9JbmRleFsyICoga107CiAgICAgICAgbGV0IHNoaWZ0SiA9IHRoaXMuI25laWdoYm9ySWRUb0luZGV4WzIgKiBrICsgMV07CiAgICAgICAgY29uc3QgaTEgPSBpICsgc2hpZnRJOwogICAgICAgIGNvbnN0IGoxID0gaiArIHNoaWZ0SjsKICAgICAgICBpMiA9IGkxOwogICAgICAgIGoyID0gajE7CiAgICAgICAgbGV0IGkzID0gaTsKICAgICAgICBsZXQgajMgPSBqOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBjb25zdCBrayA9IHRoaXMuI2NvdW50ZXJDbG9ja3dpc2VOb25aZXJvKHR5cGVzLCB3aWR0aCwgaTMsIGozLCBpMiwgajIsIDEpOwogICAgICAgICAgc2hpZnRJID0gdGhpcy4jbmVpZ2hib3JJZFRvSW5kZXhbMiAqIGtrXTsKICAgICAgICAgIHNoaWZ0SiA9IHRoaXMuI25laWdoYm9ySWRUb0luZGV4WzIgKiBrayArIDFdOwogICAgICAgICAgY29uc3QgaTQgPSBpMyArIHNoaWZ0STsKICAgICAgICAgIGNvbnN0IGo0ID0gajMgKyBzaGlmdEo7CiAgICAgICAgICBwb2ludHMucHVzaChqNCwgaTQpOwogICAgICAgICAgY29uc3QgaWozID0gaTMgKiB3aWR0aCArIGozOwogICAgICAgICAgaWYgKHR5cGVzW2lqMyArIDFdID09PSAwKSB7CiAgICAgICAgICAgIHR5cGVzW2lqM10gPSAtbmJkOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlc1tpajNdID09PSAxKSB7CiAgICAgICAgICAgIHR5cGVzW2lqM10gPSBuYmQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaTQgPT09IGkgJiYgajQgPT09IGogJiYgaTMgPT09IGkxICYmIGozID09PSBqMSkgewogICAgICAgICAgICBpZiAodHlwZXNbaWpdICE9PSAxKSB7CiAgICAgICAgICAgICAgbG5iZCA9IE1hdGguYWJzKHR5cGVzW2lqXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpMiA9IGkzOwogICAgICAgICAgICBqMiA9IGozOwogICAgICAgICAgICBpMyA9IGk0OwogICAgICAgICAgICBqMyA9IGo0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbnRvdXJzOwogIH0KICBzdGF0aWMgI2RvdWdsYXNQZXVja2VySGVscGVyKHBvaW50cywgc3RhcnQsIGVuZCwgb3V0cHV0KSB7CiAgICBpZiAoZW5kIC0gc3RhcnQgPD0gNCkgewogICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQgLSAyOyBpICs9IDIpIHsKICAgICAgICBvdXRwdXQucHVzaChwb2ludHNbaV0sIHBvaW50c1tpICsgMV0pOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGF4ID0gcG9pbnRzW3N0YXJ0XTsKICAgIGNvbnN0IGF5ID0gcG9pbnRzW3N0YXJ0ICsgMV07CiAgICBjb25zdCBhYnggPSBwb2ludHNbZW5kIC0gNF0gLSBheDsKICAgIGNvbnN0IGFieSA9IHBvaW50c1tlbmQgLSAzXSAtIGF5OwogICAgY29uc3QgZGlzdCA9IE1hdGguaHlwb3QoYWJ4LCBhYnkpOwogICAgY29uc3QgbmFieCA9IGFieCAvIGRpc3Q7CiAgICBjb25zdCBuYWJ5ID0gYWJ5IC8gZGlzdDsKICAgIGNvbnN0IGFhID0gbmFieCAqIGF5IC0gbmFieSAqIGF4OwogICAgY29uc3QgbSA9IGFieSAvIGFieDsKICAgIGNvbnN0IGludlMgPSAxIC8gZGlzdDsKICAgIGNvbnN0IHBoaSA9IE1hdGguYXRhbihtKTsKICAgIGNvbnN0IGNvc1BoaSA9IE1hdGguY29zKHBoaSk7CiAgICBjb25zdCBzaW5QaGkgPSBNYXRoLnNpbihwaGkpOwogICAgY29uc3QgdG1heCA9IGludlMgKiAoTWF0aC5hYnMoY29zUGhpKSArIE1hdGguYWJzKHNpblBoaSkpOwogICAgY29uc3QgcG9seSA9IGludlMgKiAoMSAtIHRtYXggKyB0bWF4ICoqIDIpOwogICAgY29uc3QgcGFydGlhbFBoaSA9IE1hdGgubWF4KE1hdGguYXRhbihNYXRoLmFicyhzaW5QaGkgKyBjb3NQaGkpICogcG9seSksIE1hdGguYXRhbihNYXRoLmFicyhzaW5QaGkgLSBjb3NQaGkpICogcG9seSkpOwogICAgbGV0IGRtYXggPSAwOwogICAgbGV0IGluZGV4ID0gc3RhcnQ7CiAgICBmb3IgKGxldCBpID0gc3RhcnQgKyAyOyBpIDwgZW5kIC0gMjsgaSArPSAyKSB7CiAgICAgIGNvbnN0IGQgPSBNYXRoLmFicyhhYSAtIG5hYnggKiBwb2ludHNbaSArIDFdICsgbmFieSAqIHBvaW50c1tpXSk7CiAgICAgIGlmIChkID4gZG1heCkgewogICAgICAgIGluZGV4ID0gaTsKICAgICAgICBkbWF4ID0gZDsKICAgICAgfQogICAgfQogICAgaWYgKGRtYXggPiAoZGlzdCAqIHBhcnRpYWxQaGkpICoqIDIpIHsKICAgICAgdGhpcy4jZG91Z2xhc1BldWNrZXJIZWxwZXIocG9pbnRzLCBzdGFydCwgaW5kZXggKyAyLCBvdXRwdXQpOwogICAgICB0aGlzLiNkb3VnbGFzUGV1Y2tlckhlbHBlcihwb2ludHMsIGluZGV4LCBlbmQsIG91dHB1dCk7CiAgICB9IGVsc2UgewogICAgICBvdXRwdXQucHVzaChheCwgYXkpOwogICAgfQogIH0KICBzdGF0aWMgI2RvdWdsYXNQZXVja2VyKHBvaW50cykgewogICAgY29uc3Qgb3V0cHV0ID0gW107CiAgICBjb25zdCBsZW4gPSBwb2ludHMubGVuZ3RoOwogICAgdGhpcy4jZG91Z2xhc1BldWNrZXJIZWxwZXIocG9pbnRzLCAwLCBsZW4sIG91dHB1dCk7CiAgICBvdXRwdXQucHVzaChwb2ludHNbbGVuIC0gMl0sIHBvaW50c1tsZW4gLSAxXSk7CiAgICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA8PSA0ID8gbnVsbCA6IG91dHB1dDsKICB9CiAgc3RhdGljICNiaWxhdGVyYWxGaWx0ZXIoYnVmLCB3aWR0aCwgaGVpZ2h0LCBzaWdtYVMsIHNpZ21hUiwga2VybmVsU2l6ZSkgewogICAgY29uc3Qga2VybmVsID0gbmV3IEZsb2F0MzJBcnJheShrZXJuZWxTaXplICoqIDIpOwogICAgY29uc3Qgc2lnbWFTMiA9IC0yICogc2lnbWFTICoqIDI7CiAgICBjb25zdCBoYWxmU2l6ZSA9IGtlcm5lbFNpemUgPj4gMTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2VybmVsU2l6ZTsgaSsrKSB7CiAgICAgIGNvbnN0IHggPSAoaSAtIGhhbGZTaXplKSAqKiAyOwogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGtlcm5lbFNpemU7IGorKykgewogICAgICAgIGtlcm5lbFtpICoga2VybmVsU2l6ZSArIGpdID0gTWF0aC5leHAoKHggKyAoaiAtIGhhbGZTaXplKSAqKiAyKSAvIHNpZ21hUzIpOwogICAgICB9CiAgICB9CiAgICBjb25zdCByYW5nZVZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoMjU2KTsKICAgIGNvbnN0IHNpZ21hUjIgPSAtMiAqIHNpZ21hUiAqKiAyOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewogICAgICByYW5nZVZhbHVlc1tpXSA9IE1hdGguZXhwKGkgKiogMiAvIHNpZ21hUjIpOwogICAgfQogICAgY29uc3QgTiA9IGJ1Zi5sZW5ndGg7CiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShOKTsKICAgIGNvbnN0IGhpc3RvZ3JhbSA9IG5ldyBVaW50MzJBcnJheSgyNTYpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewogICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKICAgICAgICBjb25zdCBpaiA9IGkgKiB3aWR0aCArIGo7CiAgICAgICAgY29uc3QgY2VudGVyID0gYnVmW2lqXTsKICAgICAgICBsZXQgc3VtID0gMDsKICAgICAgICBsZXQgbm9ybSA9IDA7CiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBrZXJuZWxTaXplOyBrKyspIHsKICAgICAgICAgIGNvbnN0IHkgPSBpICsgayAtIGhhbGZTaXplOwogICAgICAgICAgaWYgKHkgPCAwIHx8IHkgPj0gaGVpZ2h0KSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBrZXJuZWxTaXplOyBsKyspIHsKICAgICAgICAgICAgY29uc3QgeCA9IGogKyBsIC0gaGFsZlNpemU7CiAgICAgICAgICAgIGlmICh4IDwgMCB8fCB4ID49IHdpZHRoKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgbmVpZ2hib3VyID0gYnVmW3kgKiB3aWR0aCArIHhdOwogICAgICAgICAgICBjb25zdCB3ID0ga2VybmVsW2sgKiBrZXJuZWxTaXplICsgbF0gKiByYW5nZVZhbHVlc1tNYXRoLmFicyhuZWlnaGJvdXIgLSBjZW50ZXIpXTsKICAgICAgICAgICAgc3VtICs9IG5laWdoYm91ciAqIHc7CiAgICAgICAgICAgIG5vcm0gKz0gdzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgcGl4ID0gb3V0W2lqXSA9IE1hdGgucm91bmQoc3VtIC8gbm9ybSk7CiAgICAgICAgaGlzdG9ncmFtW3BpeF0rKzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFtvdXQsIGhpc3RvZ3JhbV07CiAgfQogIHN0YXRpYyAjZ2V0SGlzdG9ncmFtKGJ1ZikgewogICAgY29uc3QgaGlzdG9ncmFtID0gbmV3IFVpbnQzMkFycmF5KDI1Nik7CiAgICBmb3IgKGNvbnN0IGcgb2YgYnVmKSB7CiAgICAgIGhpc3RvZ3JhbVtnXSsrOwogICAgfQogICAgcmV0dXJuIGhpc3RvZ3JhbTsKICB9CiAgc3RhdGljICN0b1VpbnQ4KGJ1ZikgewogICAgY29uc3QgTiA9IGJ1Zi5sZW5ndGg7CiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoTiA+PiAyKTsKICAgIGxldCBtYXggPSAtSW5maW5pdHk7CiAgICBsZXQgbWluID0gSW5maW5pdHk7CiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBvdXQubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBjb25zdCBwaXggPSBvdXRbaV0gPSBidWZbaSA8PCAyXTsKICAgICAgbWF4ID0gTWF0aC5tYXgobWF4LCBwaXgpOwogICAgICBtaW4gPSBNYXRoLm1pbihtaW4sIHBpeCk7CiAgICB9CiAgICBjb25zdCByYXRpbyA9IDI1NSAvIChtYXggLSBtaW4pOwogICAgZm9yIChsZXQgaSA9IDAsIGlpID0gb3V0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgb3V0W2ldID0gKG91dFtpXSAtIG1pbikgKiByYXRpbzsKICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQogIHN0YXRpYyAjZ3Vlc3NUaHJlc2hvbGQoaGlzdG9ncmFtKSB7CiAgICBsZXQgaTsKICAgIGxldCBNID0gLUluZmluaXR5OwogICAgbGV0IEwgPSAtSW5maW5pdHk7CiAgICBjb25zdCBtaW4gPSBoaXN0b2dyYW0uZmluZEluZGV4KHYgPT4gdiAhPT0gMCk7CiAgICBsZXQgcG9zID0gbWluOwogICAgbGV0IHNwb3MgPSBtaW47CiAgICBmb3IgKGkgPSBtaW47IGkgPCAyNTY7IGkrKykgewogICAgICBjb25zdCB2ID0gaGlzdG9ncmFtW2ldOwogICAgICBpZiAodiA+IE0pIHsKICAgICAgICBpZiAoaSAtIHBvcyA+IEwpIHsKICAgICAgICAgIEwgPSBpIC0gcG9zOwogICAgICAgICAgc3BvcyA9IGkgLSAxOwogICAgICAgIH0KICAgICAgICBNID0gdjsKICAgICAgICBwb3MgPSBpOwogICAgICB9CiAgICB9CiAgICBmb3IgKGkgPSBzcG9zIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKGhpc3RvZ3JhbVtpXSA+IGhpc3RvZ3JhbVtpICsgMV0pIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGk7CiAgfQogIHN0YXRpYyAjZ2V0R3JheVBpeGVscyhiaXRtYXApIHsKICAgIGNvbnN0IG9yaWdpbmFsQml0bWFwID0gYml0bWFwOwogICAgY29uc3QgewogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0CiAgICB9ID0gYml0bWFwOwogICAgY29uc3QgewogICAgICBtYXhEaW0KICAgIH0gPSB0aGlzLiNQQVJBTUVURVJTOwogICAgbGV0IG5ld1dpZHRoID0gd2lkdGg7CiAgICBsZXQgbmV3SGVpZ2h0ID0gaGVpZ2h0OwogICAgaWYgKHdpZHRoID4gbWF4RGltIHx8IGhlaWdodCA+IG1heERpbSkgewogICAgICBsZXQgcHJldldpZHRoID0gd2lkdGg7CiAgICAgIGxldCBwcmV2SGVpZ2h0ID0gaGVpZ2h0OwogICAgICBsZXQgc3RlcHMgPSBNYXRoLmxvZzIoTWF0aC5tYXgod2lkdGgsIGhlaWdodCkgLyBtYXhEaW0pOwogICAgICBjb25zdCBpc3RlcHMgPSBNYXRoLmZsb29yKHN0ZXBzKTsKICAgICAgc3RlcHMgPSBzdGVwcyA9PT0gaXN0ZXBzID8gaXN0ZXBzIC0gMSA6IGlzdGVwczsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7CiAgICAgICAgbmV3V2lkdGggPSBNYXRoLmNlaWwocHJldldpZHRoIC8gMik7CiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5jZWlsKHByZXZIZWlnaHQgLyAyKTsKICAgICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKG5ld1dpZHRoLCBuZXdIZWlnaHQpOwogICAgICAgIGNvbnN0IGN0eCA9IG9mZnNjcmVlbi5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgIGN0eC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwLCBwcmV2V2lkdGgsIHByZXZIZWlnaHQsIDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpOwogICAgICAgIHByZXZXaWR0aCA9IG5ld1dpZHRoOwogICAgICAgIHByZXZIZWlnaHQgPSBuZXdIZWlnaHQ7CiAgICAgICAgaWYgKGJpdG1hcCAhPT0gb3JpZ2luYWxCaXRtYXApIHsKICAgICAgICAgIGJpdG1hcC5jbG9zZSgpOwogICAgICAgIH0KICAgICAgICBiaXRtYXAgPSBvZmZzY3JlZW4udHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7CiAgICAgIH0KICAgICAgY29uc3QgcmF0aW8gPSBNYXRoLm1pbihtYXhEaW0gLyBuZXdXaWR0aCwgbWF4RGltIC8gbmV3SGVpZ2h0KTsKICAgICAgbmV3V2lkdGggPSBNYXRoLnJvdW5kKG5ld1dpZHRoICogcmF0aW8pOwogICAgICBuZXdIZWlnaHQgPSBNYXRoLnJvdW5kKG5ld0hlaWdodCAqIHJhdGlvKTsKICAgIH0KICAgIGNvbnN0IG9mZnNjcmVlbiA9IG5ldyBPZmZzY3JlZW5DYW52YXMobmV3V2lkdGgsIG5ld0hlaWdodCk7CiAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiLCB7CiAgICAgIHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZQogICAgfSk7CiAgICBjdHguZmlsbFN0eWxlID0gIndoaXRlIjsKICAgIGN0eC5maWxsUmVjdCgwLCAwLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKICAgIGN0eC5maWx0ZXIgPSAiZ3JheXNjYWxlKDEpIjsKICAgIGN0eC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwLCBiaXRtYXAud2lkdGgsIGJpdG1hcC5oZWlnaHQsIDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpOwogICAgY29uc3QgZ3JheUltYWdlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KS5kYXRhOwogICAgY29uc3QgdWludDhCdWYgPSB0aGlzLiN0b1VpbnQ4KGdyYXlJbWFnZSk7CiAgICByZXR1cm4gW3VpbnQ4QnVmLCBuZXdXaWR0aCwgbmV3SGVpZ2h0XTsKICB9CiAgc3RhdGljIGV4dHJhY3RDb250b3Vyc0Zyb21UZXh0KHRleHQsIHsKICAgIGZvbnRGYW1pbHksCiAgICBmb250U3R5bGUsCiAgICBmb250V2VpZ2h0CiAgfSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0LCByb3RhdGlvbiwgaW5uZXJNYXJnaW4pIHsKICAgIGxldCBjYW52YXMgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsIDEpOwogICAgbGV0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIsIHsKICAgICAgYWxwaGE6IGZhbHNlCiAgICB9KTsKICAgIGNvbnN0IGZvbnRTaXplID0gMjAwOwogICAgY29uc3QgZm9udCA9IGN0eC5mb250ID0gYCR7Zm9udFN0eWxlfSAke2ZvbnRXZWlnaHR9ICR7Zm9udFNpemV9cHggJHtmb250RmFtaWx5fWA7CiAgICBjb25zdCB7CiAgICAgIGFjdHVhbEJvdW5kaW5nQm94TGVmdCwKICAgICAgYWN0dWFsQm91bmRpbmdCb3hSaWdodCwKICAgICAgYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQsCiAgICAgIGFjdHVhbEJvdW5kaW5nQm94RGVzY2VudCwKICAgICAgZm9udEJvdW5kaW5nQm94QXNjZW50LAogICAgICBmb250Qm91bmRpbmdCb3hEZXNjZW50LAogICAgICB3aWR0aAogICAgfSA9IGN0eC5tZWFzdXJlVGV4dCh0ZXh0KTsKICAgIGNvbnN0IFNDQUxFID0gMS41OwogICAgY29uc3QgY2FudmFzV2lkdGggPSBNYXRoLmNlaWwoTWF0aC5tYXgoTWF0aC5hYnMoYWN0dWFsQm91bmRpbmdCb3hMZWZ0KSArIE1hdGguYWJzKGFjdHVhbEJvdW5kaW5nQm94UmlnaHQpIHx8IDAsIHdpZHRoKSAqIFNDQUxFKTsKICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IE1hdGguY2VpbChNYXRoLm1heChNYXRoLmFicyhhY3R1YWxCb3VuZGluZ0JveEFzY2VudCkgKyBNYXRoLmFicyhhY3R1YWxCb3VuZGluZ0JveERlc2NlbnQpIHx8IGZvbnRTaXplLCBNYXRoLmFicyhmb250Qm91bmRpbmdCb3hBc2NlbnQpICsgTWF0aC5hYnMoZm9udEJvdW5kaW5nQm94RGVzY2VudCkgfHwgZm9udFNpemUpICogU0NBTEUpOwogICAgY2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0KTsKICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIsIHsKICAgICAgYWxwaGE6IHRydWUsCiAgICAgIHdpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZQogICAgfSk7CiAgICBjdHguZm9udCA9IGZvbnQ7CiAgICBjdHguZmlsdGVyID0gImdyYXlzY2FsZSgxKSI7CiAgICBjdHguZmlsbFN0eWxlID0gIndoaXRlIjsKICAgIGN0eC5maWxsUmVjdCgwLCAwLCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0KTsKICAgIGN0eC5maWxsU3R5bGUgPSAiYmxhY2siOwogICAgY3R4LmZpbGxUZXh0KHRleHQsIGNhbnZhc1dpZHRoICogKFNDQUxFIC0gMSkgLyAyLCBjYW52YXNIZWlnaHQgKiAoMyAtIFNDQUxFKSAvIDIpOwogICAgY29uc3QgdWludDhCdWYgPSB0aGlzLiN0b1VpbnQ4KGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodCkuZGF0YSk7CiAgICBjb25zdCBoaXN0b2dyYW0gPSB0aGlzLiNnZXRIaXN0b2dyYW0odWludDhCdWYpOwogICAgY29uc3QgdGhyZXNob2xkID0gdGhpcy4jZ3Vlc3NUaHJlc2hvbGQoaGlzdG9ncmFtKTsKICAgIGNvbnN0IGNvbnRvdXJMaXN0ID0gdGhpcy4jZmluZENvbnRvdXJzKHVpbnQ4QnVmLCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0LCB0aHJlc2hvbGQpOwogICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RyYXduTGluZXMoewogICAgICBsaW5lczogewogICAgICAgIGN1cnZlczogY29udG91ckxpc3QsCiAgICAgICAgd2lkdGg6IGNhbnZhc1dpZHRoLAogICAgICAgIGhlaWdodDogY2FudmFzSGVpZ2h0CiAgICAgIH0sCiAgICAgIHBhZ2VXaWR0aCwKICAgICAgcGFnZUhlaWdodCwKICAgICAgcm90YXRpb24sCiAgICAgIGlubmVyTWFyZ2luLAogICAgICBtdXN0U21vb3RoOiB0cnVlLAogICAgICBhcmVDb250b3VyczogdHJ1ZQogICAgfSk7CiAgfQogIHN0YXRpYyBwcm9jZXNzKGJpdG1hcCwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0LCByb3RhdGlvbiwgaW5uZXJNYXJnaW4pIHsKICAgIGNvbnN0IFt1aW50OEJ1Ziwgd2lkdGgsIGhlaWdodF0gPSB0aGlzLiNnZXRHcmF5UGl4ZWxzKGJpdG1hcCk7CiAgICBjb25zdCBbYnVmZmVyLCBoaXN0b2dyYW1dID0gdGhpcy4jYmlsYXRlcmFsRmlsdGVyKHVpbnQ4QnVmLCB3aWR0aCwgaGVpZ2h0LCBNYXRoLmh5cG90KHdpZHRoLCBoZWlnaHQpICogdGhpcy4jUEFSQU1FVEVSUy5zaWdtYVNGYWN0b3IsIHRoaXMuI1BBUkFNRVRFUlMuc2lnbWFSLCB0aGlzLiNQQVJBTUVURVJTLmtlcm5lbFNpemUpOwogICAgY29uc3QgdGhyZXNob2xkID0gdGhpcy4jZ3Vlc3NUaHJlc2hvbGQoaGlzdG9ncmFtKTsKICAgIGNvbnN0IGNvbnRvdXJMaXN0ID0gdGhpcy4jZmluZENvbnRvdXJzKGJ1ZmZlciwgd2lkdGgsIGhlaWdodCwgdGhyZXNob2xkKTsKICAgIHJldHVybiB0aGlzLnByb2Nlc3NEcmF3bkxpbmVzKHsKICAgICAgbGluZXM6IHsKICAgICAgICBjdXJ2ZXM6IGNvbnRvdXJMaXN0LAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodAogICAgICB9LAogICAgICBwYWdlV2lkdGgsCiAgICAgIHBhZ2VIZWlnaHQsCiAgICAgIHJvdGF0aW9uLAogICAgICBpbm5lck1hcmdpbiwKICAgICAgbXVzdFNtb290aDogdHJ1ZSwKICAgICAgYXJlQ29udG91cnM6IHRydWUKICAgIH0pOwogIH0KICBzdGF0aWMgcHJvY2Vzc0RyYXduTGluZXMoewogICAgbGluZXMsCiAgICBwYWdlV2lkdGgsCiAgICBwYWdlSGVpZ2h0LAogICAgcm90YXRpb24sCiAgICBpbm5lck1hcmdpbiwKICAgIG11c3RTbW9vdGgsCiAgICBhcmVDb250b3VycwogIH0pIHsKICAgIGlmIChyb3RhdGlvbiAlIDE4MCAhPT0gMCkgewogICAgICBbcGFnZVdpZHRoLCBwYWdlSGVpZ2h0XSA9IFtwYWdlSGVpZ2h0LCBwYWdlV2lkdGhdOwogICAgfQogICAgY29uc3QgewogICAgICBjdXJ2ZXMsCiAgICAgIHdpZHRoLAogICAgICBoZWlnaHQKICAgIH0gPSBsaW5lczsKICAgIGNvbnN0IHRoaWNrbmVzcyA9IGxpbmVzLnRoaWNrbmVzcyA/PyAwOwogICAgY29uc3QgbGluZXNBbmRQb2ludHMgPSBbXTsKICAgIGNvbnN0IHJhdGlvID0gTWF0aC5taW4ocGFnZVdpZHRoIC8gd2lkdGgsIHBhZ2VIZWlnaHQgLyBoZWlnaHQpOwogICAgY29uc3QgeFNjYWxlID0gcmF0aW8gLyBwYWdlV2lkdGg7CiAgICBjb25zdCB5U2NhbGUgPSByYXRpbyAvIHBhZ2VIZWlnaHQ7CiAgICBjb25zdCBuZXdDdXJ2ZXMgPSBbXTsKICAgIGZvciAoY29uc3QgewogICAgICBwb2ludHMKICAgIH0gb2YgY3VydmVzKSB7CiAgICAgIGNvbnN0IHJlZHVjZWRQb2ludHMgPSBtdXN0U21vb3RoID8gdGhpcy4jZG91Z2xhc1BldWNrZXIocG9pbnRzKSA6IHBvaW50czsKICAgICAgaWYgKCFyZWR1Y2VkUG9pbnRzKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgbmV3Q3VydmVzLnB1c2gocmVkdWNlZFBvaW50cyk7CiAgICAgIGNvbnN0IGxlbiA9IHJlZHVjZWRQb2ludHMubGVuZ3RoOwogICAgICBjb25zdCBuZXdQb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KGxlbik7CiAgICAgIGNvbnN0IGxpbmUgPSBuZXcgRmxvYXQzMkFycmF5KDMgKiAobGVuID09PSAyID8gMiA6IGxlbiAtIDIpKTsKICAgICAgbGluZXNBbmRQb2ludHMucHVzaCh7CiAgICAgICAgbGluZSwKICAgICAgICBwb2ludHM6IG5ld1BvaW50cwogICAgICB9KTsKICAgICAgaWYgKGxlbiA9PT0gMikgewogICAgICAgIG5ld1BvaW50c1swXSA9IHJlZHVjZWRQb2ludHNbMF0gKiB4U2NhbGU7CiAgICAgICAgbmV3UG9pbnRzWzFdID0gcmVkdWNlZFBvaW50c1sxXSAqIHlTY2FsZTsKICAgICAgICBsaW5lLnNldChbTmFOLCBOYU4sIE5hTiwgTmFOLCBuZXdQb2ludHNbMF0sIG5ld1BvaW50c1sxXV0sIDApOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGxldCBbeDEsIHkxLCB4MiwgeTJdID0gcmVkdWNlZFBvaW50czsKICAgICAgeDEgKj0geFNjYWxlOwogICAgICB5MSAqPSB5U2NhbGU7CiAgICAgIHgyICo9IHhTY2FsZTsKICAgICAgeTIgKj0geVNjYWxlOwogICAgICBuZXdQb2ludHMuc2V0KFt4MSwgeTEsIHgyLCB5Ml0sIDApOwogICAgICBsaW5lLnNldChbTmFOLCBOYU4sIE5hTiwgTmFOLCB4MSwgeTFdLCAwKTsKICAgICAgZm9yIChsZXQgaSA9IDQ7IGkgPCBsZW47IGkgKz0gMikgewogICAgICAgIGNvbnN0IHggPSBuZXdQb2ludHNbaV0gPSByZWR1Y2VkUG9pbnRzW2ldICogeFNjYWxlOwogICAgICAgIGNvbnN0IHkgPSBuZXdQb2ludHNbaSArIDFdID0gcmVkdWNlZFBvaW50c1tpICsgMV0gKiB5U2NhbGU7CiAgICAgICAgbGluZS5zZXQoT3V0bGluZS5jcmVhdGVCZXppZXJQb2ludHMoeDEsIHkxLCB4MiwgeTIsIHgsIHkpLCAoaSAtIDIpICogMyk7CiAgICAgICAgW3gxLCB5MSwgeDIsIHkyXSA9IFt4MiwgeTIsIHgsIHldOwogICAgICB9CiAgICB9CiAgICBpZiAobGluZXNBbmRQb2ludHMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgb3V0bGluZSA9IGFyZUNvbnRvdXJzID8gbmV3IENvbnRvdXJEcmF3T3V0bGluZSgpIDogbmV3IElua0RyYXdPdXRsaW5lKCk7CiAgICBvdXRsaW5lLmJ1aWxkKGxpbmVzQW5kUG9pbnRzLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQsIDEsIHJvdGF0aW9uLCBhcmVDb250b3VycyA/IDAgOiB0aGlja25lc3MsIGlubmVyTWFyZ2luKTsKICAgIHJldHVybiB7CiAgICAgIG91dGxpbmUsCiAgICAgIG5ld0N1cnZlcywKICAgICAgYXJlQ29udG91cnMsCiAgICAgIHRoaWNrbmVzcywKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfTsKICB9CiAgc3RhdGljIGFzeW5jIGNvbXByZXNzU2lnbmF0dXJlKHsKICAgIG91dGxpbmVzLAogICAgYXJlQ29udG91cnMsCiAgICB0aGlja25lc3MsCiAgICB3aWR0aCwKICAgIGhlaWdodAogIH0pIHsKICAgIGxldCBtaW5EaWZmID0gSW5maW5pdHk7CiAgICBsZXQgbWF4RGlmZiA9IC1JbmZpbml0eTsKICAgIGxldCBvdXRsaW5lc0xlbmd0aCA9IDA7CiAgICBmb3IgKGNvbnN0IHBvaW50cyBvZiBvdXRsaW5lcykgewogICAgICBvdXRsaW5lc0xlbmd0aCArPSBwb2ludHMubGVuZ3RoOwogICAgICBmb3IgKGxldCBpID0gMiwgaWkgPSBwb2ludHMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgIGNvbnN0IGR4ID0gcG9pbnRzW2ldIC0gcG9pbnRzW2kgLSAyXTsKICAgICAgICBtaW5EaWZmID0gTWF0aC5taW4obWluRGlmZiwgZHgpOwogICAgICAgIG1heERpZmYgPSBNYXRoLm1heChtYXhEaWZmLCBkeCk7CiAgICAgIH0KICAgIH0KICAgIGxldCBidWZmZXJUeXBlOwogICAgaWYgKG1pbkRpZmYgPj0gLTEyOCAmJiBtYXhEaWZmIDw9IDEyNykgewogICAgICBidWZmZXJUeXBlID0gSW50OEFycmF5OwogICAgfSBlbHNlIGlmIChtaW5EaWZmID49IC0zMjc2OCAmJiBtYXhEaWZmIDw9IDMyNzY3KSB7CiAgICAgIGJ1ZmZlclR5cGUgPSBJbnQxNkFycmF5OwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyVHlwZSA9IEludDMyQXJyYXk7CiAgICB9CiAgICBjb25zdCBsZW4gPSBvdXRsaW5lcy5sZW5ndGg7CiAgICBjb25zdCBoZWFkZXJMZW5ndGggPSBCQVNFX0hFQURFUl9MRU5HVEggKyBQT0lOVFNfUFJPUEVSVElFU19OVU1CRVIgKiBsZW47CiAgICBjb25zdCBoZWFkZXIgPSBuZXcgVWludDMyQXJyYXkoaGVhZGVyTGVuZ3RoKTsKICAgIGxldCBvZmZzZXQgPSAwOwogICAgaGVhZGVyW29mZnNldCsrXSA9IGhlYWRlckxlbmd0aCAqIFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICsgKG91dGxpbmVzTGVuZ3RoIC0gMiAqIGxlbikgKiBidWZmZXJUeXBlLkJZVEVTX1BFUl9FTEVNRU5UOwogICAgaGVhZGVyW29mZnNldCsrXSA9IDA7CiAgICBoZWFkZXJbb2Zmc2V0KytdID0gd2lkdGg7CiAgICBoZWFkZXJbb2Zmc2V0KytdID0gaGVpZ2h0OwogICAgaGVhZGVyW29mZnNldCsrXSA9IGFyZUNvbnRvdXJzID8gMCA6IDE7CiAgICBoZWFkZXJbb2Zmc2V0KytdID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih0aGlja25lc3MgPz8gMCkpOwogICAgaGVhZGVyW29mZnNldCsrXSA9IGxlbjsKICAgIGhlYWRlcltvZmZzZXQrK10gPSBidWZmZXJUeXBlLkJZVEVTX1BFUl9FTEVNRU5UOwogICAgZm9yIChjb25zdCBwb2ludHMgb2Ygb3V0bGluZXMpIHsKICAgICAgaGVhZGVyW29mZnNldCsrXSA9IHBvaW50cy5sZW5ndGggLSAyOwogICAgICBoZWFkZXJbb2Zmc2V0KytdID0gcG9pbnRzWzBdOwogICAgICBoZWFkZXJbb2Zmc2V0KytdID0gcG9pbnRzWzFdOwogICAgfQogICAgY29uc3QgY3MgPSBuZXcgQ29tcHJlc3Npb25TdHJlYW0oImRlZmxhdGUtcmF3Iik7CiAgICBjb25zdCB3cml0ZXIgPSBjcy53cml0YWJsZS5nZXRXcml0ZXIoKTsKICAgIGF3YWl0IHdyaXRlci5yZWFkeTsKICAgIHdyaXRlci53cml0ZShoZWFkZXIpOwogICAgY29uc3QgQnVmZmVyQ3RvciA9IGJ1ZmZlclR5cGUucHJvdG90eXBlLmNvbnN0cnVjdG9yOwogICAgZm9yIChjb25zdCBwb2ludHMgb2Ygb3V0bGluZXMpIHsKICAgICAgY29uc3QgZGlmZnMgPSBuZXcgQnVmZmVyQ3Rvcihwb2ludHMubGVuZ3RoIC0gMik7CiAgICAgIGZvciAobGV0IGkgPSAyLCBpaSA9IHBvaW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgZGlmZnNbaSAtIDJdID0gcG9pbnRzW2ldIC0gcG9pbnRzW2kgLSAyXTsKICAgICAgfQogICAgICB3cml0ZXIud3JpdGUoZGlmZnMpOwogICAgfQogICAgd3JpdGVyLmNsb3NlKCk7CiAgICBjb25zdCBidWYgPSBhd2FpdCBuZXcgUmVzcG9uc2UoY3MucmVhZGFibGUpLmFycmF5QnVmZmVyKCk7CiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7CiAgICByZXR1cm4gdG9CYXNlNjRVdGlsKGJ5dGVzKTsKICB9CiAgc3RhdGljIGFzeW5jIGRlY29tcHJlc3NTaWduYXR1cmUoc2lnbmF0dXJlRGF0YSkgewogICAgdHJ5IHsKICAgICAgY29uc3QgYnl0ZXMgPSBmcm9tQmFzZTY0VXRpbChzaWduYXR1cmVEYXRhKTsKICAgICAgY29uc3QgewogICAgICAgIHJlYWRhYmxlLAogICAgICAgIHdyaXRhYmxlCiAgICAgIH0gPSBuZXcgRGVjb21wcmVzc2lvblN0cmVhbSgiZGVmbGF0ZS1yYXciKTsKICAgICAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGUuZ2V0V3JpdGVyKCk7CiAgICAgIGF3YWl0IHdyaXRlci5yZWFkeTsKICAgICAgd3JpdGVyLndyaXRlKGJ5dGVzKS50aGVuKGFzeW5jICgpID0+IHsKICAgICAgICBhd2FpdCB3cml0ZXIucmVhZHk7CiAgICAgICAgYXdhaXQgd3JpdGVyLmNsb3NlKCk7CiAgICAgIH0pLmNhdGNoKCgpID0+IHt9KTsKICAgICAgbGV0IGRhdGEgPSBudWxsOwogICAgICBsZXQgb2Zmc2V0ID0gMDsKICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiByZWFkYWJsZSkgewogICAgICAgIGRhdGEgfHw9IG5ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheShjaHVuay5idWZmZXIsIDAsIDQpWzBdKTsKICAgICAgICBkYXRhLnNldChjaHVuaywgb2Zmc2V0KTsKICAgICAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoOwogICAgICB9CiAgICAgIGNvbnN0IGhlYWRlciA9IG5ldyBVaW50MzJBcnJheShkYXRhLmJ1ZmZlciwgMCwgZGF0YS5sZW5ndGggPj4gMik7CiAgICAgIGNvbnN0IHZlcnNpb24gPSBoZWFkZXJbMV07CiAgICAgIGlmICh2ZXJzaW9uICE9PSAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZlcnNpb246ICR7dmVyc2lvbn1gKTsKICAgICAgfQogICAgICBjb25zdCB3aWR0aCA9IGhlYWRlclsyXTsKICAgICAgY29uc3QgaGVpZ2h0ID0gaGVhZGVyWzNdOwogICAgICBjb25zdCBhcmVDb250b3VycyA9IGhlYWRlcls0XSA9PT0gMDsKICAgICAgY29uc3QgdGhpY2tuZXNzID0gaGVhZGVyWzVdOwogICAgICBjb25zdCBudW1iZXJPZkRyYXdpbmdzID0gaGVhZGVyWzZdOwogICAgICBjb25zdCBidWZmZXJUeXBlID0gaGVhZGVyWzddOwogICAgICBjb25zdCBvdXRsaW5lcyA9IFtdOwogICAgICBjb25zdCBkaWZmc09mZnNldCA9IChCQVNFX0hFQURFUl9MRU5HVEggKyBQT0lOVFNfUFJPUEVSVElFU19OVU1CRVIgKiBudW1iZXJPZkRyYXdpbmdzKSAqIFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UOwogICAgICBsZXQgZGlmZnM7CiAgICAgIHN3aXRjaCAoYnVmZmVyVHlwZSkgewogICAgICAgIGNhc2UgSW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UOgogICAgICAgICAgZGlmZnMgPSBuZXcgSW50OEFycmF5KGRhdGEuYnVmZmVyLCBkaWZmc09mZnNldCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ6CiAgICAgICAgICBkaWZmcyA9IG5ldyBJbnQxNkFycmF5KGRhdGEuYnVmZmVyLCBkaWZmc09mZnNldCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ6CiAgICAgICAgICBkaWZmcyA9IG5ldyBJbnQzMkFycmF5KGRhdGEuYnVmZmVyLCBkaWZmc09mZnNldCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBvZmZzZXQgPSAwOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mRHJhd2luZ3M7IGkrKykgewogICAgICAgIGNvbnN0IGxlbiA9IGhlYWRlcltQT0lOVFNfUFJPUEVSVElFU19OVU1CRVIgKiBpICsgQkFTRV9IRUFERVJfTEVOR1RIXTsKICAgICAgICBjb25zdCBwb2ludHMgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiArIDIpOwogICAgICAgIG91dGxpbmVzLnB1c2gocG9pbnRzKTsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IFBPSU5UU19QUk9QRVJUSUVTX05VTUJFUiAtIDE7IGorKykgewogICAgICAgICAgcG9pbnRzW2pdID0gaGVhZGVyW1BPSU5UU19QUk9QRVJUSUVTX05VTUJFUiAqIGkgKyBCQVNFX0hFQURFUl9MRU5HVEggKyBqICsgMV07CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVuOyBqKyspIHsKICAgICAgICAgIHBvaW50c1tqICsgMl0gPSBwb2ludHNbal0gKyBkaWZmc1tvZmZzZXQrK107CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgYXJlQ29udG91cnMsCiAgICAgICAgdGhpY2tuZXNzLAogICAgICAgIG91dGxpbmVzLAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodAogICAgICB9OwogICAgfSBjYXRjaCAoZSkgewogICAgICB3YXJuKGBkZWNvbXByZXNzU2lnbmF0dXJlOiAke2V9YCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL3NpZ25hdHVyZS5qcwoKCgoKCgoKY2xhc3MgU2lnbmF0dXJlT3B0aW9ucyBleHRlbmRzIERyYXdpbmdPcHRpb25zIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKCk7CiAgICBzdXBlci51cGRhdGVQcm9wZXJ0aWVzKHsKICAgICAgZmlsbDogQW5ub3RhdGlvbkVkaXRvci5fZGVmYXVsdExpbmVDb2xvciwKICAgICAgInN0cm9rZS13aWR0aCI6IDAKICAgIH0pOwogIH0KICBjbG9uZSgpIHsKICAgIGNvbnN0IGNsb25lID0gbmV3IFNpZ25hdHVyZU9wdGlvbnMoKTsKICAgIGNsb25lLnVwZGF0ZUFsbCh0aGlzKTsKICAgIHJldHVybiBjbG9uZTsKICB9Cn0KY2xhc3MgRHJhd25TaWduYXR1cmVPcHRpb25zIGV4dGVuZHMgSW5rRHJhd2luZ09wdGlvbnMgewogIGNvbnN0cnVjdG9yKHZpZXdlclBhcmFtZXRlcnMpIHsKICAgIHN1cGVyKHZpZXdlclBhcmFtZXRlcnMpOwogICAgc3VwZXIudXBkYXRlUHJvcGVydGllcyh7CiAgICAgIHN0cm9rZTogQW5ub3RhdGlvbkVkaXRvci5fZGVmYXVsdExpbmVDb2xvciwKICAgICAgInN0cm9rZS13aWR0aCI6IDEKICAgIH0pOwogIH0KICBjbG9uZSgpIHsKICAgIGNvbnN0IGNsb25lID0gbmV3IERyYXduU2lnbmF0dXJlT3B0aW9ucyh0aGlzLl92aWV3UGFyYW1ldGVycyk7CiAgICBjbG9uZS51cGRhdGVBbGwodGhpcyk7CiAgICByZXR1cm4gY2xvbmU7CiAgfQp9CmNsYXNzIFNpZ25hdHVyZUVkaXRvciBleHRlbmRzIERyYXdpbmdFZGl0b3IgewogICNpc0V4dHJhY3RlZCA9IGZhbHNlOwogICNkZXNjcmlwdGlvbiA9IG51bGw7CiAgI3NpZ25hdHVyZURhdGEgPSBudWxsOwogICNzaWduYXR1cmVVVUlEID0gbnVsbDsKICBzdGF0aWMgX3R5cGUgPSAic2lnbmF0dXJlIjsKICBzdGF0aWMgX2VkaXRvclR5cGUgPSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5TSUdOQVRVUkU7CiAgc3RhdGljIF9kZWZhdWx0RHJhd2luZ09wdGlvbnMgPSBudWxsOwogIGNvbnN0cnVjdG9yKHBhcmFtcykgewogICAgc3VwZXIoewogICAgICAuLi5wYXJhbXMsCiAgICAgIG11c3RCZUNvbW1pdHRlZDogdHJ1ZSwKICAgICAgbmFtZTogInNpZ25hdHVyZUVkaXRvciIKICAgIH0pOwogICAgdGhpcy5fd2lsbEtlZXBBc3BlY3RSYXRpbyA9IHRydWU7CiAgICB0aGlzLiNzaWduYXR1cmVEYXRhID0gcGFyYW1zLnNpZ25hdHVyZURhdGEgfHwgbnVsbDsKICAgIHRoaXMuI2Rlc2NyaXB0aW9uID0gbnVsbDsKICAgIHRoaXMuZGVmYXVsdEwxMG5JZCA9ICJwZGZqcy1lZGl0b3Itc2lnbmF0dXJlLWVkaXRvcjEiOwogIH0KICBzdGF0aWMgaW5pdGlhbGl6ZShsMTBuLCB1aU1hbmFnZXIpIHsKICAgIEFubm90YXRpb25FZGl0b3IuaW5pdGlhbGl6ZShsMTBuLCB1aU1hbmFnZXIpOwogICAgdGhpcy5fZGVmYXVsdERyYXdpbmdPcHRpb25zID0gbmV3IFNpZ25hdHVyZU9wdGlvbnMoKTsKICAgIHRoaXMuX2RlZmF1bHREcmF3blNpZ25hdHVyZU9wdGlvbnMgPSBuZXcgRHJhd25TaWduYXR1cmVPcHRpb25zKHVpTWFuYWdlci52aWV3UGFyYW1ldGVycyk7CiAgfQogIHN0YXRpYyBnZXREZWZhdWx0RHJhd2luZ09wdGlvbnMob3B0aW9ucykgewogICAgY29uc3QgY2xvbmUgPSB0aGlzLl9kZWZhdWx0RHJhd2luZ09wdGlvbnMuY2xvbmUoKTsKICAgIGNsb25lLnVwZGF0ZVByb3BlcnRpZXMob3B0aW9ucyk7CiAgICByZXR1cm4gY2xvbmU7CiAgfQogIHN0YXRpYyBnZXQgc3VwcG9ydE11bHRpcGxlRHJhd2luZ3MoKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHN0YXRpYyBnZXQgdHlwZXNNYXAoKSB7CiAgICByZXR1cm4gc2hhZG93KHRoaXMsICJ0eXBlc01hcCIsIG5ldyBNYXAoKSk7CiAgfQogIHN0YXRpYyBnZXQgaXNEcmF3ZXIoKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGdldCB0ZWxlbWV0cnlGaW5hbERhdGEoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAic2lnbmF0dXJlIiwKICAgICAgaGFzRGVzY3JpcHRpb246ICEhdGhpcy4jZGVzY3JpcHRpb24KICAgIH07CiAgfQogIHN0YXRpYyBjb21wdXRlVGVsZW1ldHJ5RmluYWxEYXRhKGRhdGEpIHsKICAgIGNvbnN0IGhhc0Rlc2NyaXB0aW9uU3RhdHMgPSBkYXRhLmdldCgiaGFzRGVzY3JpcHRpb24iKTsKICAgIHJldHVybiB7CiAgICAgIGhhc0FsdFRleHQ6IGhhc0Rlc2NyaXB0aW9uU3RhdHMuZ2V0KHRydWUpID8/IDAsCiAgICAgIGhhc05vQWx0VGV4dDogaGFzRGVzY3JpcHRpb25TdGF0cy5nZXQoZmFsc2UpID8/IDAKICAgIH07CiAgfQogIGdldCBpc1Jlc2l6YWJsZSgpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBvblNjYWxlQ2hhbmdpbmcoKSB7CiAgICBpZiAodGhpcy5fZHJhd0lkID09PSBudWxsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN1cGVyLm9uU2NhbGVDaGFuZ2luZygpOwogIH0KICByZW5kZXIoKSB7CiAgICBpZiAodGhpcy5kaXYpIHsKICAgICAgcmV0dXJuIHRoaXMuZGl2OwogICAgfQogICAgbGV0IGJhc2VYLCBiYXNlWTsKICAgIGNvbnN0IHsKICAgICAgX2lzQ29weQogICAgfSA9IHRoaXM7CiAgICBpZiAoX2lzQ29weSkgewogICAgICB0aGlzLl9pc0NvcHkgPSBmYWxzZTsKICAgICAgYmFzZVggPSB0aGlzLng7CiAgICAgIGJhc2VZID0gdGhpcy55OwogICAgfQogICAgc3VwZXIucmVuZGVyKCk7CiAgICBpZiAodGhpcy5fZHJhd0lkID09PSBudWxsKSB7CiAgICAgIGlmICh0aGlzLiNzaWduYXR1cmVEYXRhKSB7CiAgICAgICAgY29uc3QgewogICAgICAgICAgbGluZXMsCiAgICAgICAgICBtdXN0U21vb3RoLAogICAgICAgICAgYXJlQ29udG91cnMsCiAgICAgICAgICBkZXNjcmlwdGlvbiwKICAgICAgICAgIHV1aWQsCiAgICAgICAgICBoZWlnaHRJblBhZ2UKICAgICAgICB9ID0gdGhpcy4jc2lnbmF0dXJlRGF0YTsKICAgICAgICBjb25zdCB7CiAgICAgICAgICByYXdEaW1zOiB7CiAgICAgICAgICAgIHBhZ2VXaWR0aCwKICAgICAgICAgICAgcGFnZUhlaWdodAogICAgICAgICAgfSwKICAgICAgICAgIHJvdGF0aW9uCiAgICAgICAgfSA9IHRoaXMucGFyZW50LnZpZXdwb3J0OwogICAgICAgIGNvbnN0IG91dGxpbmUgPSBTaWduYXR1cmVFeHRyYWN0b3IucHJvY2Vzc0RyYXduTGluZXMoewogICAgICAgICAgbGluZXMsCiAgICAgICAgICBwYWdlV2lkdGgsCiAgICAgICAgICBwYWdlSGVpZ2h0LAogICAgICAgICAgcm90YXRpb24sCiAgICAgICAgICBpbm5lck1hcmdpbjogU2lnbmF0dXJlRWRpdG9yLl9JTk5FUl9NQVJHSU4sCiAgICAgICAgICBtdXN0U21vb3RoLAogICAgICAgICAgYXJlQ29udG91cnMKICAgICAgICB9KTsKICAgICAgICB0aGlzLmFkZFNpZ25hdHVyZShvdXRsaW5lLCBoZWlnaHRJblBhZ2UsIGRlc2NyaXB0aW9uLCB1dWlkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmRpdi5zZXRBdHRyaWJ1dGUoImRhdGEtbDEwbi1hcmdzIiwgSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgZGVzY3JpcHRpb246ICIiCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMuZGl2LmhpZGRlbiA9IHRydWU7CiAgICAgICAgdGhpcy5fdWlNYW5hZ2VyLmdldFNpZ25hdHVyZSh0aGlzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhpcy5kaXYuc2V0QXR0cmlidXRlKCJkYXRhLWwxMG4tYXJncyIsIEpTT04uc3RyaW5naWZ5KHsKICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy4jZGVzY3JpcHRpb24gfHwgIiIKICAgICAgfSkpOwogICAgfQogICAgaWYgKF9pc0NvcHkpIHsKICAgICAgdGhpcy5faXNDb3B5ID0gdHJ1ZTsKICAgICAgdGhpcy5fbW92ZUFmdGVyUGFzdGUoYmFzZVgsIGJhc2VZKTsKICAgIH0KICAgIHJldHVybiB0aGlzLmRpdjsKICB9CiAgc2V0VXVpZCh1dWlkKSB7CiAgICB0aGlzLiNzaWduYXR1cmVVVUlEID0gdXVpZDsKICAgIHRoaXMuYWRkRWRpdFRvb2xiYXIoKTsKICB9CiAgZ2V0VXVpZCgpIHsKICAgIHJldHVybiB0aGlzLiNzaWduYXR1cmVVVUlEOwogIH0KICBnZXQgZGVzY3JpcHRpb24oKSB7CiAgICByZXR1cm4gdGhpcy4jZGVzY3JpcHRpb247CiAgfQogIHNldCBkZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgewogICAgdGhpcy4jZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKICAgIGlmICghdGhpcy5kaXYpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5kaXYuc2V0QXR0cmlidXRlKCJkYXRhLWwxMG4tYXJncyIsIEpTT04uc3RyaW5naWZ5KHsKICAgICAgZGVzY3JpcHRpb24KICAgIH0pKTsKICAgIHN1cGVyLmFkZEVkaXRUb29sYmFyKCkudGhlbih0b29sYmFyID0+IHsKICAgICAgdG9vbGJhcj8udXBkYXRlRWRpdFNpZ25hdHVyZUJ1dHRvbihkZXNjcmlwdGlvbik7CiAgICB9KTsKICB9CiAgZ2V0U2lnbmF0dXJlUHJldmlldygpIHsKICAgIGNvbnN0IHsKICAgICAgbmV3Q3VydmVzLAogICAgICBhcmVDb250b3VycywKICAgICAgdGhpY2tuZXNzLAogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0CiAgICB9ID0gdGhpcy4jc2lnbmF0dXJlRGF0YTsKICAgIGNvbnN0IG1heERpbSA9IE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpOwogICAgY29uc3Qgb3V0bGluZURhdGEgPSBTaWduYXR1cmVFeHRyYWN0b3IucHJvY2Vzc0RyYXduTGluZXMoewogICAgICBsaW5lczogewogICAgICAgIGN1cnZlczogbmV3Q3VydmVzLm1hcChwb2ludHMgPT4gKHsKICAgICAgICAgIHBvaW50cwogICAgICAgIH0pKSwKICAgICAgICB0aGlja25lc3MsCiAgICAgICAgd2lkdGgsCiAgICAgICAgaGVpZ2h0CiAgICAgIH0sCiAgICAgIHBhZ2VXaWR0aDogbWF4RGltLAogICAgICBwYWdlSGVpZ2h0OiBtYXhEaW0sCiAgICAgIHJvdGF0aW9uOiAwLAogICAgICBpbm5lck1hcmdpbjogMCwKICAgICAgbXVzdFNtb290aDogZmFsc2UsCiAgICAgIGFyZUNvbnRvdXJzCiAgICB9KTsKICAgIHJldHVybiB7CiAgICAgIGFyZUNvbnRvdXJzLAogICAgICBvdXRsaW5lOiBvdXRsaW5lRGF0YS5vdXRsaW5lCiAgICB9OwogIH0KICBnZXQgdG9vbGJhckJ1dHRvbnMoKSB7CiAgICBpZiAodGhpcy5fdWlNYW5hZ2VyLnNpZ25hdHVyZU1hbmFnZXIpIHsKICAgICAgcmV0dXJuIFtbImVkaXRTaWduYXR1cmUiLCB0aGlzLl91aU1hbmFnZXIuc2lnbmF0dXJlTWFuYWdlcl1dOwogICAgfQogICAgcmV0dXJuIHN1cGVyLnRvb2xiYXJCdXR0b25zOwogIH0KICBhZGRTaWduYXR1cmUoZGF0YSwgaGVpZ2h0SW5QYWdlLCBkZXNjcmlwdGlvbiwgdXVpZCkgewogICAgY29uc3QgewogICAgICB4OiBzYXZlZFgsCiAgICAgIHk6IHNhdmVkWQogICAgfSA9IHRoaXM7CiAgICBjb25zdCB7CiAgICAgIG91dGxpbmUKICAgIH0gPSB0aGlzLiNzaWduYXR1cmVEYXRhID0gZGF0YTsKICAgIHRoaXMuI2lzRXh0cmFjdGVkID0gb3V0bGluZSBpbnN0YW5jZW9mIENvbnRvdXJEcmF3T3V0bGluZTsKICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKICAgIGxldCBkcmF3aW5nT3B0aW9uczsKICAgIGlmICh0aGlzLiNpc0V4dHJhY3RlZCkgewogICAgICBkcmF3aW5nT3B0aW9ucyA9IFNpZ25hdHVyZUVkaXRvci5nZXREZWZhdWx0RHJhd2luZ09wdGlvbnMoKTsKICAgIH0gZWxzZSB7CiAgICAgIGRyYXdpbmdPcHRpb25zID0gU2lnbmF0dXJlRWRpdG9yLl9kZWZhdWx0RHJhd25TaWduYXR1cmVPcHRpb25zLmNsb25lKCk7CiAgICAgIGRyYXdpbmdPcHRpb25zLnVwZGF0ZVByb3BlcnRpZXMoewogICAgICAgICJzdHJva2Utd2lkdGgiOiBvdXRsaW5lLnRoaWNrbmVzcwogICAgICB9KTsKICAgIH0KICAgIHRoaXMuX2FkZE91dGxpbmVzKHsKICAgICAgZHJhd091dGxpbmVzOiBvdXRsaW5lLAogICAgICBkcmF3aW5nT3B0aW9ucwogICAgfSk7CiAgICBjb25zdCBbLCBwYWdlSGVpZ2h0XSA9IHRoaXMucGFnZURpbWVuc2lvbnM7CiAgICBsZXQgbmV3SGVpZ2h0ID0gaGVpZ2h0SW5QYWdlIC8gcGFnZUhlaWdodDsKICAgIG5ld0hlaWdodCA9IG5ld0hlaWdodCA+PSAxID8gMC41IDogbmV3SGVpZ2h0OwogICAgdGhpcy53aWR0aCAqPSBuZXdIZWlnaHQgLyB0aGlzLmhlaWdodDsKICAgIGlmICh0aGlzLndpZHRoID49IDEpIHsKICAgICAgbmV3SGVpZ2h0ICo9IDAuOSAvIHRoaXMud2lkdGg7CiAgICAgIHRoaXMud2lkdGggPSAwLjk7CiAgICB9CiAgICB0aGlzLmhlaWdodCA9IG5ld0hlaWdodDsKICAgIHRoaXMuc2V0RGltcygpOwogICAgdGhpcy54ID0gc2F2ZWRYOwogICAgdGhpcy55ID0gc2F2ZWRZOwogICAgdGhpcy5jZW50ZXIoKTsKICAgIHRoaXMuX29uUmVzaXplZCgpOwogICAgdGhpcy5vblNjYWxlQ2hhbmdpbmcoKTsKICAgIHRoaXMucm90YXRlKCk7CiAgICB0aGlzLl91aU1hbmFnZXIuYWRkVG9Bbm5vdGF0aW9uU3RvcmFnZSh0aGlzKTsKICAgIHRoaXMuc2V0VXVpZCh1dWlkKTsKICAgIHRoaXMuX3JlcG9ydFRlbGVtZXRyeSh7CiAgICAgIGFjdGlvbjogInBkZmpzLnNpZ25hdHVyZS5pbnNlcnRlZCIsCiAgICAgIGRhdGE6IHsKICAgICAgICBoYXNCZWVuU2F2ZWQ6ICEhdXVpZCwKICAgICAgICBoYXNEZXNjcmlwdGlvbjogISFkZXNjcmlwdGlvbgogICAgICB9CiAgICB9KTsKICAgIHRoaXMuZGl2LmhpZGRlbiA9IGZhbHNlOwogIH0KICBnZXRGcm9tSW1hZ2UoYml0bWFwKSB7CiAgICBjb25zdCB7CiAgICAgIHJhd0RpbXM6IHsKICAgICAgICBwYWdlV2lkdGgsCiAgICAgICAgcGFnZUhlaWdodAogICAgICB9LAogICAgICByb3RhdGlvbgogICAgfSA9IHRoaXMucGFyZW50LnZpZXdwb3J0OwogICAgcmV0dXJuIFNpZ25hdHVyZUV4dHJhY3Rvci5wcm9jZXNzKGJpdG1hcCwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0LCByb3RhdGlvbiwgU2lnbmF0dXJlRWRpdG9yLl9JTk5FUl9NQVJHSU4pOwogIH0KICBnZXRGcm9tVGV4dCh0ZXh0LCBmb250SW5mbykgewogICAgY29uc3QgewogICAgICByYXdEaW1zOiB7CiAgICAgICAgcGFnZVdpZHRoLAogICAgICAgIHBhZ2VIZWlnaHQKICAgICAgfSwKICAgICAgcm90YXRpb24KICAgIH0gPSB0aGlzLnBhcmVudC52aWV3cG9ydDsKICAgIHJldHVybiBTaWduYXR1cmVFeHRyYWN0b3IuZXh0cmFjdENvbnRvdXJzRnJvbVRleHQodGV4dCwgZm9udEluZm8sIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCwgcm90YXRpb24sIFNpZ25hdHVyZUVkaXRvci5fSU5ORVJfTUFSR0lOKTsKICB9CiAgZ2V0RHJhd25TaWduYXR1cmUoY3VydmVzKSB7CiAgICBjb25zdCB7CiAgICAgIHJhd0RpbXM6IHsKICAgICAgICBwYWdlV2lkdGgsCiAgICAgICAgcGFnZUhlaWdodAogICAgICB9LAogICAgICByb3RhdGlvbgogICAgfSA9IHRoaXMucGFyZW50LnZpZXdwb3J0OwogICAgcmV0dXJuIFNpZ25hdHVyZUV4dHJhY3Rvci5wcm9jZXNzRHJhd25MaW5lcyh7CiAgICAgIGxpbmVzOiBjdXJ2ZXMsCiAgICAgIHBhZ2VXaWR0aCwKICAgICAgcGFnZUhlaWdodCwKICAgICAgcm90YXRpb24sCiAgICAgIGlubmVyTWFyZ2luOiBTaWduYXR1cmVFZGl0b3IuX0lOTkVSX01BUkdJTiwKICAgICAgbXVzdFNtb290aDogZmFsc2UsCiAgICAgIGFyZUNvbnRvdXJzOiBmYWxzZQogICAgfSk7CiAgfQogIGNyZWF0ZURyYXdpbmdPcHRpb25zKHsKICAgIGFyZUNvbnRvdXJzLAogICAgdGhpY2tuZXNzCiAgfSkgewogICAgaWYgKGFyZUNvbnRvdXJzKSB7CiAgICAgIHRoaXMuX2RyYXdpbmdPcHRpb25zID0gU2lnbmF0dXJlRWRpdG9yLmdldERlZmF1bHREcmF3aW5nT3B0aW9ucygpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5fZHJhd2luZ09wdGlvbnMgPSBTaWduYXR1cmVFZGl0b3IuX2RlZmF1bHREcmF3blNpZ25hdHVyZU9wdGlvbnMuY2xvbmUoKTsKICAgICAgdGhpcy5fZHJhd2luZ09wdGlvbnMudXBkYXRlUHJvcGVydGllcyh7CiAgICAgICAgInN0cm9rZS13aWR0aCI6IHRoaWNrbmVzcwogICAgICB9KTsKICAgIH0KICB9CiAgc2VyaWFsaXplKGlzRm9yQ29weWluZyA9IGZhbHNlKSB7CiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB7CiAgICAgIGxpbmVzLAogICAgICBwb2ludHMKICAgIH0gPSB0aGlzLnNlcmlhbGl6ZURyYXcoaXNGb3JDb3B5aW5nKTsKICAgIGNvbnN0IHsKICAgICAgX2RyYXdpbmdPcHRpb25zOiB7CiAgICAgICAgInN0cm9rZS13aWR0aCI6IHRoaWNrbmVzcwogICAgICB9CiAgICB9ID0gdGhpczsKICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBPYmplY3QuYXNzaWduKHN1cGVyLnNlcmlhbGl6ZShpc0ZvckNvcHlpbmcpLCB7CiAgICAgIGlzU2lnbmF0dXJlOiB0cnVlLAogICAgICBhcmVDb250b3VyczogdGhpcy4jaXNFeHRyYWN0ZWQsCiAgICAgIGNvbG9yOiBbMCwgMCwgMF0sCiAgICAgIHRoaWNrbmVzczogdGhpcy4jaXNFeHRyYWN0ZWQgPyAwIDogdGhpY2tuZXNzCiAgICB9KTsKICAgIHRoaXMuYWRkQ29tbWVudChzZXJpYWxpemVkKTsKICAgIGlmIChpc0ZvckNvcHlpbmcpIHsKICAgICAgc2VyaWFsaXplZC5wYXRocyA9IHsKICAgICAgICBsaW5lcywKICAgICAgICBwb2ludHMKICAgICAgfTsKICAgICAgc2VyaWFsaXplZC51dWlkID0gdGhpcy4jc2lnbmF0dXJlVVVJRDsKICAgICAgc2VyaWFsaXplZC5pc0NvcHkgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgc2VyaWFsaXplZC5saW5lcyA9IGxpbmVzOwogICAgfQogICAgaWYgKHRoaXMuI2Rlc2NyaXB0aW9uKSB7CiAgICAgIHNlcmlhbGl6ZWQuYWNjZXNzaWJpbGl0eURhdGEgPSB7CiAgICAgICAgdHlwZTogIkZpZ3VyZSIsCiAgICAgICAgYWx0OiB0aGlzLiNkZXNjcmlwdGlvbgogICAgICB9OwogICAgfQogICAgcmV0dXJuIHNlcmlhbGl6ZWQ7CiAgfQogIHN0YXRpYyBkZXNlcmlhbGl6ZURyYXcocGFnZVgsIHBhZ2VZLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQsIGlubmVyTWFyZ2luLCBkYXRhKSB7CiAgICBpZiAoZGF0YS5hcmVDb250b3VycykgewogICAgICByZXR1cm4gQ29udG91ckRyYXdPdXRsaW5lLmRlc2VyaWFsaXplKHBhZ2VYLCBwYWdlWSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0LCBpbm5lck1hcmdpbiwgZGF0YSk7CiAgICB9CiAgICByZXR1cm4gSW5rRHJhd091dGxpbmUuZGVzZXJpYWxpemUocGFnZVgsIHBhZ2VZLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQsIGlubmVyTWFyZ2luLCBkYXRhKTsKICB9CiAgc3RhdGljIGFzeW5jIGRlc2VyaWFsaXplKGRhdGEsIHBhcmVudCwgdWlNYW5hZ2VyKSB7CiAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBzdXBlci5kZXNlcmlhbGl6ZShkYXRhLCBwYXJlbnQsIHVpTWFuYWdlcik7CiAgICBlZGl0b3IuI2lzRXh0cmFjdGVkID0gZGF0YS5hcmVDb250b3VyczsKICAgIGVkaXRvci5kZXNjcmlwdGlvbiA9IGRhdGEuYWNjZXNzaWJpbGl0eURhdGE/LmFsdCB8fCAiIjsKICAgIGVkaXRvci4jc2lnbmF0dXJlVVVJRCA9IGRhdGEudXVpZDsKICAgIHJldHVybiBlZGl0b3I7CiAgfQp9Cgo7Ly8gLi9zcmMvZGlzcGxheS9lZGl0b3Ivc3RhbXAuanMKCgoKCmNsYXNzIFN0YW1wRWRpdG9yIGV4dGVuZHMgQW5ub3RhdGlvbkVkaXRvciB7CiAgI2JpdG1hcCA9IG51bGw7CiAgI2JpdG1hcElkID0gbnVsbDsKICAjYml0bWFwUHJvbWlzZSA9IG51bGw7CiAgI2JpdG1hcFVybCA9IG51bGw7CiAgI2JpdG1hcEZpbGUgPSBudWxsOwogICNiaXRtYXBGaWxlTmFtZSA9ICIiOwogICNjYW52YXMgPSBudWxsOwogICNtaXNzaW5nQ2FudmFzID0gZmFsc2U7CiAgI3Jlc2l6ZVRpbWVvdXRJZCA9IG51bGw7CiAgI2lzU3ZnID0gZmFsc2U7CiAgI2hhc0JlZW5BZGRlZEluVW5kb1N0YWNrID0gZmFsc2U7CiAgc3RhdGljIF90eXBlID0gInN0YW1wIjsKICBzdGF0aWMgX2VkaXRvclR5cGUgPSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5TVEFNUDsKICBjb25zdHJ1Y3RvcihwYXJhbXMpIHsKICAgIHN1cGVyKHsKICAgICAgLi4ucGFyYW1zLAogICAgICBuYW1lOiAic3RhbXBFZGl0b3IiCiAgICB9KTsKICAgIHRoaXMuI2JpdG1hcFVybCA9IHBhcmFtcy5iaXRtYXBVcmw7CiAgICB0aGlzLiNiaXRtYXBGaWxlID0gcGFyYW1zLmJpdG1hcEZpbGU7CiAgICB0aGlzLmRlZmF1bHRMMTBuSWQgPSAicGRmanMtZWRpdG9yLXN0YW1wLWVkaXRvciI7CiAgfQogIHN0YXRpYyBpbml0aWFsaXplKGwxMG4sIHVpTWFuYWdlcikgewogICAgQW5ub3RhdGlvbkVkaXRvci5pbml0aWFsaXplKGwxMG4sIHVpTWFuYWdlcik7CiAgfQogIHN0YXRpYyBpc0hhbmRsaW5nTWltZUZvclBhc3RpbmcobWltZSkgewogICAgcmV0dXJuIFN1cHBvcnRlZEltYWdlTWltZVR5cGVzLmluY2x1ZGVzKG1pbWUpOwogIH0KICBzdGF0aWMgcGFzdGUoaXRlbSwgcGFyZW50KSB7CiAgICBwYXJlbnQucGFzdGVFZGl0b3IoewogICAgICBtb2RlOiBBbm5vdGF0aW9uRWRpdG9yVHlwZS5TVEFNUAogICAgfSwgewogICAgICBiaXRtYXBGaWxlOiBpdGVtLmdldEFzRmlsZSgpCiAgICB9KTsKICB9CiAgYWx0VGV4dEZpbmlzaCgpIHsKICAgIGlmICh0aGlzLl91aU1hbmFnZXIudXNlTmV3QWx0VGV4dEZsb3cpIHsKICAgICAgdGhpcy5kaXYuaGlkZGVuID0gZmFsc2U7CiAgICB9CiAgICBzdXBlci5hbHRUZXh0RmluaXNoKCk7CiAgfQogIGdldCB0ZWxlbWV0cnlGaW5hbERhdGEoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAic3RhbXAiLAogICAgICBoYXNBbHRUZXh0OiAhIXRoaXMuYWx0VGV4dERhdGE/LmFsdFRleHQKICAgIH07CiAgfQogIHN0YXRpYyBjb21wdXRlVGVsZW1ldHJ5RmluYWxEYXRhKGRhdGEpIHsKICAgIGNvbnN0IGhhc0FsdFRleHRTdGF0cyA9IGRhdGEuZ2V0KCJoYXNBbHRUZXh0Iik7CiAgICByZXR1cm4gewogICAgICBoYXNBbHRUZXh0OiBoYXNBbHRUZXh0U3RhdHMuZ2V0KHRydWUpID8/IDAsCiAgICAgIGhhc05vQWx0VGV4dDogaGFzQWx0VGV4dFN0YXRzLmdldChmYWxzZSkgPz8gMAogICAgfTsKICB9CiAgI2dldEJpdG1hcEZldGNoZWQoZGF0YSwgZnJvbUlkID0gZmFsc2UpIHsKICAgIGlmICghZGF0YSkgewogICAgICB0aGlzLnJlbW92ZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNiaXRtYXAgPSBkYXRhLmJpdG1hcDsKICAgIGlmICghZnJvbUlkKSB7CiAgICAgIHRoaXMuI2JpdG1hcElkID0gZGF0YS5pZDsKICAgICAgdGhpcy4jaXNTdmcgPSBkYXRhLmlzU3ZnOwogICAgfQogICAgaWYgKGRhdGEuZmlsZSkgewogICAgICB0aGlzLiNiaXRtYXBGaWxlTmFtZSA9IGRhdGEuZmlsZS5uYW1lOwogICAgfQogICAgdGhpcy4jY3JlYXRlQ2FudmFzKCk7CiAgfQogICNnZXRCaXRtYXBEb25lKCkgewogICAgdGhpcy4jYml0bWFwUHJvbWlzZSA9IG51bGw7CiAgICB0aGlzLl91aU1hbmFnZXIuZW5hYmxlV2FpdGluZyhmYWxzZSk7CiAgICBpZiAoIXRoaXMuI2NhbnZhcykgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGhpcy5fdWlNYW5hZ2VyLnVzZU5ld0FsdFRleHRXaGVuQWRkaW5nSW1hZ2UgJiYgdGhpcy5fdWlNYW5hZ2VyLnVzZU5ld0FsdFRleHRGbG93ICYmIHRoaXMuI2JpdG1hcCkgewogICAgICB0aGlzLmFkZEVkaXRUb29sYmFyKCkudGhlbigoKSA9PiB7CiAgICAgICAgdGhpcy5fZWRpdFRvb2xiYXIuaGlkZSgpOwogICAgICAgIHRoaXMuX3VpTWFuYWdlci5lZGl0QWx0VGV4dCh0aGlzLCB0cnVlKTsKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghdGhpcy5fdWlNYW5hZ2VyLnVzZU5ld0FsdFRleHRXaGVuQWRkaW5nSW1hZ2UgJiYgdGhpcy5fdWlNYW5hZ2VyLnVzZU5ld0FsdFRleHRGbG93ICYmIHRoaXMuI2JpdG1hcCkgewogICAgICB0aGlzLl9yZXBvcnRUZWxlbWV0cnkoewogICAgICAgIGFjdGlvbjogInBkZmpzLmltYWdlLmltYWdlX2FkZGVkIiwKICAgICAgICBkYXRhOiB7CiAgICAgICAgICBhbHRfdGV4dF9tb2RhbDogZmFsc2UsCiAgICAgICAgICBhbHRfdGV4dF90eXBlOiAiZW1wdHkiCiAgICAgICAgfQogICAgICB9KTsKICAgICAgdHJ5IHsKICAgICAgICB0aGlzLm1sR3Vlc3NBbHRUZXh0KCk7CiAgICAgIH0gY2F0Y2gge30KICAgIH0KICAgIHRoaXMuZGl2LmZvY3VzKCk7CiAgfQogIGFzeW5jIG1sR3Vlc3NBbHRUZXh0KGltYWdlRGF0YSA9IG51bGwsIHVwZGF0ZUFsdFRleHREYXRhID0gdHJ1ZSkgewogICAgaWYgKHRoaXMuaGFzQWx0VGV4dERhdGEoKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgbWxNYW5hZ2VyCiAgICB9ID0gdGhpcy5fdWlNYW5hZ2VyOwogICAgaWYgKCFtbE1hbmFnZXIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJObyBNTC4iKTsKICAgIH0KICAgIGlmICghKGF3YWl0IG1sTWFuYWdlci5pc0VuYWJsZWRGb3IoImFsdFRleHQiKSkpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJNTCBpc24ndCBlbmFibGVkIGZvciBhbHQgdGV4dC4iKTsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgZGF0YSwKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfSA9IGltYWdlRGF0YSB8fCB0aGlzLmNvcHlDYW52YXMobnVsbCwgbnVsbCwgdHJ1ZSkuaW1hZ2VEYXRhOwogICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtbE1hbmFnZXIuZ3Vlc3MoewogICAgICBuYW1lOiAiYWx0VGV4dCIsCiAgICAgIHJlcXVlc3Q6IHsKICAgICAgICBkYXRhLAogICAgICAgIHdpZHRoLAogICAgICAgIGhlaWdodCwKICAgICAgICBjaGFubmVsczogZGF0YS5sZW5ndGggLyAod2lkdGggKiBoZWlnaHQpCiAgICAgIH0KICAgIH0pOwogICAgaWYgKCFyZXNwb25zZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIHJlc3BvbnNlIGZyb20gdGhlIEFJIHNlcnZpY2UuIik7CiAgICB9CiAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJFcnJvciBmcm9tIHRoZSBBSSBzZXJ2aWNlLiIpOwogICAgfQogICAgaWYgKHJlc3BvbnNlLmNhbmNlbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghcmVzcG9uc2Uub3V0cHV0KSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gdmFsaWQgcmVzcG9uc2UgZnJvbSB0aGUgQUkgc2VydmljZS4iKTsKICAgIH0KICAgIGNvbnN0IGFsdFRleHQgPSByZXNwb25zZS5vdXRwdXQ7CiAgICBhd2FpdCB0aGlzLnNldEd1ZXNzZWRBbHRUZXh0KGFsdFRleHQpOwogICAgaWYgKHVwZGF0ZUFsdFRleHREYXRhICYmICF0aGlzLmhhc0FsdFRleHREYXRhKCkpIHsKICAgICAgdGhpcy5hbHRUZXh0RGF0YSA9IHsKICAgICAgICBhbHQ6IGFsdFRleHQsCiAgICAgICAgZGVjb3JhdGl2ZTogZmFsc2UKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBhbHRUZXh0OwogIH0KICAjZ2V0Qml0bWFwKCkgewogICAgaWYgKHRoaXMuI2JpdG1hcElkKSB7CiAgICAgIHRoaXMuX3VpTWFuYWdlci5lbmFibGVXYWl0aW5nKHRydWUpOwogICAgICB0aGlzLl91aU1hbmFnZXIuaW1hZ2VNYW5hZ2VyLmdldEZyb21JZCh0aGlzLiNiaXRtYXBJZCkudGhlbihkYXRhID0+IHRoaXMuI2dldEJpdG1hcEZldGNoZWQoZGF0YSwgdHJ1ZSkpLmZpbmFsbHkoKCkgPT4gdGhpcy4jZ2V0Qml0bWFwRG9uZSgpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuI2JpdG1hcFVybCkgewogICAgICBjb25zdCB1cmwgPSB0aGlzLiNiaXRtYXBVcmw7CiAgICAgIHRoaXMuI2JpdG1hcFVybCA9IG51bGw7CiAgICAgIHRoaXMuX3VpTWFuYWdlci5lbmFibGVXYWl0aW5nKHRydWUpOwogICAgICB0aGlzLiNiaXRtYXBQcm9taXNlID0gdGhpcy5fdWlNYW5hZ2VyLmltYWdlTWFuYWdlci5nZXRGcm9tVXJsKHVybCkudGhlbihkYXRhID0+IHRoaXMuI2dldEJpdG1hcEZldGNoZWQoZGF0YSkpLmZpbmFsbHkoKCkgPT4gdGhpcy4jZ2V0Qml0bWFwRG9uZSgpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuI2JpdG1hcEZpbGUpIHsKICAgICAgY29uc3QgZmlsZSA9IHRoaXMuI2JpdG1hcEZpbGU7CiAgICAgIHRoaXMuI2JpdG1hcEZpbGUgPSBudWxsOwogICAgICB0aGlzLl91aU1hbmFnZXIuZW5hYmxlV2FpdGluZyh0cnVlKTsKICAgICAgdGhpcy4jYml0bWFwUHJvbWlzZSA9IHRoaXMuX3VpTWFuYWdlci5pbWFnZU1hbmFnZXIuZ2V0RnJvbUZpbGUoZmlsZSkudGhlbihkYXRhID0+IHRoaXMuI2dldEJpdG1hcEZldGNoZWQoZGF0YSkpLmZpbmFsbHkoKCkgPT4gdGhpcy4jZ2V0Qml0bWFwRG9uZSgpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgaW5wdXQudHlwZSA9ICJmaWxlIjsKICAgIGlucHV0LmFjY2VwdCA9IFN1cHBvcnRlZEltYWdlTWltZVR5cGVzLmpvaW4oIiwiKTsKICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX3VpTWFuYWdlci5fc2lnbmFsOwogICAgdGhpcy4jYml0bWFwUHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gewogICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBhc3luYyAoKSA9PiB7CiAgICAgICAgaWYgKCFpbnB1dC5maWxlcyB8fCBpbnB1dC5maWxlcy5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX3VpTWFuYWdlci5lbmFibGVXYWl0aW5nKHRydWUpOwogICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuX3VpTWFuYWdlci5pbWFnZU1hbmFnZXIuZ2V0RnJvbUZpbGUoaW5wdXQuZmlsZXNbMF0pOwogICAgICAgICAgdGhpcy5fcmVwb3J0VGVsZW1ldHJ5KHsKICAgICAgICAgICAgYWN0aW9uOiAicGRmanMuaW1hZ2UuaW1hZ2Vfc2VsZWN0ZWQiLAogICAgICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAgYWx0X3RleHRfbW9kYWw6IHRoaXMuX3VpTWFuYWdlci51c2VOZXdBbHRUZXh0RmxvdwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuI2dldEJpdG1hcEZldGNoZWQoZGF0YSk7CiAgICAgICAgfQogICAgICAgIHJlc29sdmUoKTsKICAgICAgfSwgewogICAgICAgIHNpZ25hbAogICAgICB9KTsKICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2FuY2VsIiwgKCkgPT4gewogICAgICAgIHRoaXMucmVtb3ZlKCk7CiAgICAgICAgcmVzb2x2ZSgpOwogICAgICB9LCB7CiAgICAgICAgc2lnbmFsCiAgICAgIH0pOwogICAgfSkuZmluYWxseSgoKSA9PiB0aGlzLiNnZXRCaXRtYXBEb25lKCkpOwogICAgaW5wdXQuY2xpY2soKTsKICB9CiAgcmVtb3ZlKCkgewogICAgaWYgKHRoaXMuI2JpdG1hcElkKSB7CiAgICAgIHRoaXMuI2JpdG1hcCA9IG51bGw7CiAgICAgIHRoaXMuX3VpTWFuYWdlci5pbWFnZU1hbmFnZXIuZGVsZXRlSWQodGhpcy4jYml0bWFwSWQpOwogICAgICB0aGlzLiNjYW52YXM/LnJlbW92ZSgpOwogICAgICB0aGlzLiNjYW52YXMgPSBudWxsOwogICAgICBpZiAodGhpcy4jcmVzaXplVGltZW91dElkKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI3Jlc2l6ZVRpbWVvdXRJZCk7CiAgICAgICAgdGhpcy4jcmVzaXplVGltZW91dElkID0gbnVsbDsKICAgICAgfQogICAgfQogICAgc3VwZXIucmVtb3ZlKCk7CiAgfQogIHJlYnVpbGQoKSB7CiAgICBpZiAoIXRoaXMucGFyZW50KSB7CiAgICAgIGlmICh0aGlzLiNiaXRtYXBJZCkgewogICAgICAgIHRoaXMuI2dldEJpdG1hcCgpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN1cGVyLnJlYnVpbGQoKTsKICAgIGlmICh0aGlzLmRpdiA9PT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGhpcy4jYml0bWFwSWQgJiYgdGhpcy4jY2FudmFzID09PSBudWxsKSB7CiAgICAgIHRoaXMuI2dldEJpdG1hcCgpOwogICAgfQogICAgaWYgKCF0aGlzLmlzQXR0YWNoZWRUb0RPTSkgewogICAgICB0aGlzLnBhcmVudC5hZGQodGhpcyk7CiAgICB9CiAgfQogIG9uY2VBZGRlZChmb2N1cykgewogICAgdGhpcy5faXNEcmFnZ2FibGUgPSB0cnVlOwogICAgaWYgKGZvY3VzKSB7CiAgICAgIHRoaXMuZGl2LmZvY3VzKCk7CiAgICB9CiAgfQogIGlzRW1wdHkoKSB7CiAgICByZXR1cm4gISh0aGlzLiNiaXRtYXBQcm9taXNlIHx8IHRoaXMuI2JpdG1hcCB8fCB0aGlzLiNiaXRtYXBVcmwgfHwgdGhpcy4jYml0bWFwRmlsZSB8fCB0aGlzLiNiaXRtYXBJZCB8fCB0aGlzLiNtaXNzaW5nQ2FudmFzKTsKICB9CiAgZ2V0IHRvb2xiYXJCdXR0b25zKCkgewogICAgcmV0dXJuIFtbImFsdFRleHQiLCB0aGlzLmNyZWF0ZUFsdFRleHQoKV1dOwogIH0KICBnZXQgaXNSZXNpemFibGUoKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgcmVuZGVyKCkgewogICAgaWYgKHRoaXMuZGl2KSB7CiAgICAgIHJldHVybiB0aGlzLmRpdjsKICAgIH0KICAgIGxldCBiYXNlWCwgYmFzZVk7CiAgICBpZiAodGhpcy5faXNDb3B5KSB7CiAgICAgIGJhc2VYID0gdGhpcy54OwogICAgICBiYXNlWSA9IHRoaXMueTsKICAgIH0KICAgIHN1cGVyLnJlbmRlcigpOwogICAgdGhpcy5kaXYuaGlkZGVuID0gdHJ1ZTsKICAgIHRoaXMuY3JlYXRlQWx0VGV4dCgpOwogICAgaWYgKCF0aGlzLiNtaXNzaW5nQ2FudmFzKSB7CiAgICAgIGlmICh0aGlzLiNiaXRtYXApIHsKICAgICAgICB0aGlzLiNjcmVhdGVDYW52YXMoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiNnZXRCaXRtYXAoKTsKICAgICAgfQogICAgfQogICAgaWYgKHRoaXMuX2lzQ29weSkgewogICAgICB0aGlzLl9tb3ZlQWZ0ZXJQYXN0ZShiYXNlWCwgYmFzZVkpOwogICAgfQogICAgdGhpcy5fdWlNYW5hZ2VyLmFkZFNob3VsZFJlc2NhbGUodGhpcyk7CiAgICByZXR1cm4gdGhpcy5kaXY7CiAgfQogIHNldENhbnZhcyhhbm5vdGF0aW9uRWxlbWVudElkLCBjYW52YXMpIHsKICAgIGNvbnN0IHsKICAgICAgaWQ6IGJpdG1hcElkLAogICAgICBiaXRtYXAKICAgIH0gPSB0aGlzLl91aU1hbmFnZXIuaW1hZ2VNYW5hZ2VyLmdldEZyb21DYW52YXMoYW5ub3RhdGlvbkVsZW1lbnRJZCwgY2FudmFzKTsKICAgIGNhbnZhcy5yZW1vdmUoKTsKICAgIGlmIChiaXRtYXBJZCAmJiB0aGlzLl91aU1hbmFnZXIuaW1hZ2VNYW5hZ2VyLmlzVmFsaWRJZChiaXRtYXBJZCkpIHsKICAgICAgdGhpcy4jYml0bWFwSWQgPSBiaXRtYXBJZDsKICAgICAgaWYgKGJpdG1hcCkgewogICAgICAgIHRoaXMuI2JpdG1hcCA9IGJpdG1hcDsKICAgICAgfQogICAgICB0aGlzLiNtaXNzaW5nQ2FudmFzID0gZmFsc2U7CiAgICAgIHRoaXMuI2NyZWF0ZUNhbnZhcygpOwogICAgfQogIH0KICBfb25SZXNpemVkKCkgewogICAgdGhpcy5vblNjYWxlQ2hhbmdpbmcoKTsKICB9CiAgb25TY2FsZUNoYW5naW5nKCkgewogICAgaWYgKCF0aGlzLnBhcmVudCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGhpcy4jcmVzaXplVGltZW91dElkICE9PSBudWxsKSB7CiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiNyZXNpemVUaW1lb3V0SWQpOwogICAgfQogICAgY29uc3QgVElNRV9UT19XQUlUID0gMjAwOwogICAgdGhpcy4jcmVzaXplVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHRoaXMuI3Jlc2l6ZVRpbWVvdXRJZCA9IG51bGw7CiAgICAgIHRoaXMuI2RyYXdCaXRtYXAoKTsKICAgIH0sIFRJTUVfVE9fV0FJVCk7CiAgfQogICNjcmVhdGVDYW52YXMoKSB7CiAgICBjb25zdCB7CiAgICAgIGRpdgogICAgfSA9IHRoaXM7CiAgICBsZXQgewogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0CiAgICB9ID0gdGhpcy4jYml0bWFwOwogICAgY29uc3QgW3BhZ2VXaWR0aCwgcGFnZUhlaWdodF0gPSB0aGlzLnBhZ2VEaW1lbnNpb25zOwogICAgY29uc3QgTUFYX1JBVElPID0gMC43NTsKICAgIGlmICh0aGlzLndpZHRoKSB7CiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCAqIHBhZ2VXaWR0aDsKICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKiBwYWdlSGVpZ2h0OwogICAgfSBlbHNlIGlmICh3aWR0aCA+IE1BWF9SQVRJTyAqIHBhZ2VXaWR0aCB8fCBoZWlnaHQgPiBNQVhfUkFUSU8gKiBwYWdlSGVpZ2h0KSB7CiAgICAgIGNvbnN0IGZhY3RvciA9IE1hdGgubWluKE1BWF9SQVRJTyAqIHBhZ2VXaWR0aCAvIHdpZHRoLCBNQVhfUkFUSU8gKiBwYWdlSGVpZ2h0IC8gaGVpZ2h0KTsKICAgICAgd2lkdGggKj0gZmFjdG9yOwogICAgICBoZWlnaHQgKj0gZmFjdG9yOwogICAgfQogICAgdGhpcy5fdWlNYW5hZ2VyLmVuYWJsZVdhaXRpbmcoZmFsc2UpOwogICAgY29uc3QgY2FudmFzID0gdGhpcy4jY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICBjYW52YXMuc2V0QXR0cmlidXRlKCJyb2xlIiwgImltZyIpOwogICAgdGhpcy5hZGRDb250YWluZXIoY2FudmFzKTsKICAgIHRoaXMud2lkdGggPSB3aWR0aCAvIHBhZ2VXaWR0aDsKICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0IC8gcGFnZUhlaWdodDsKICAgIHRoaXMuc2V0RGltcygpOwogICAgaWYgKHRoaXMuX2luaXRpYWxPcHRpb25zPy5pc0NlbnRlcmVkKSB7CiAgICAgIHRoaXMuY2VudGVyKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZpeEFuZFNldFBvc2l0aW9uKCk7CiAgICB9CiAgICB0aGlzLl9pbml0aWFsT3B0aW9ucyA9IG51bGw7CiAgICBpZiAoIXRoaXMuX3VpTWFuYWdlci51c2VOZXdBbHRUZXh0V2hlbkFkZGluZ0ltYWdlIHx8ICF0aGlzLl91aU1hbmFnZXIudXNlTmV3QWx0VGV4dEZsb3cgfHwgdGhpcy5hbm5vdGF0aW9uRWxlbWVudElkKSB7CiAgICAgIGRpdi5oaWRkZW4gPSBmYWxzZTsKICAgIH0KICAgIHRoaXMuI2RyYXdCaXRtYXAoKTsKICAgIGlmICghdGhpcy4jaGFzQmVlbkFkZGVkSW5VbmRvU3RhY2spIHsKICAgICAgdGhpcy5wYXJlbnQuYWRkVW5kb2FibGVFZGl0b3IodGhpcyk7CiAgICAgIHRoaXMuI2hhc0JlZW5BZGRlZEluVW5kb1N0YWNrID0gdHJ1ZTsKICAgIH0KICAgIHRoaXMuX3JlcG9ydFRlbGVtZXRyeSh7CiAgICAgIGFjdGlvbjogImluc2VydGVkX2ltYWdlIgogICAgfSk7CiAgICBpZiAodGhpcy4jYml0bWFwRmlsZU5hbWUpIHsKICAgICAgdGhpcy5kaXYuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaXB0aW9uIiwgdGhpcy4jYml0bWFwRmlsZU5hbWUpOwogICAgfQogICAgaWYgKCF0aGlzLmFubm90YXRpb25FbGVtZW50SWQpIHsKICAgICAgdGhpcy5fdWlNYW5hZ2VyLmExMXlBbGVydCgicGRmanMtZWRpdG9yLXN0YW1wLWFkZGVkLWFsZXJ0Iik7CiAgICB9CiAgfQogIGNvcHlDYW52YXMobWF4RGF0YURpbWVuc2lvbiwgbWF4UHJldmlld0RpbWVuc2lvbiwgY3JlYXRlSW1hZ2VEYXRhID0gZmFsc2UpIHsKICAgIGlmICghbWF4RGF0YURpbWVuc2lvbikgewogICAgICBtYXhEYXRhRGltZW5zaW9uID0gMjI0OwogICAgfQogICAgY29uc3QgewogICAgICB3aWR0aDogYml0bWFwV2lkdGgsCiAgICAgIGhlaWdodDogYml0bWFwSGVpZ2h0CiAgICB9ID0gdGhpcy4jYml0bWFwOwogICAgY29uc3Qgb3V0cHV0U2NhbGUgPSBuZXcgT3V0cHV0U2NhbGUoKTsKICAgIGxldCBiaXRtYXAgPSB0aGlzLiNiaXRtYXA7CiAgICBsZXQgd2lkdGggPSBiaXRtYXBXaWR0aCwKICAgICAgaGVpZ2h0ID0gYml0bWFwSGVpZ2h0OwogICAgbGV0IGNhbnZhcyA9IG51bGw7CiAgICBpZiAobWF4UHJldmlld0RpbWVuc2lvbikgewogICAgICBpZiAoYml0bWFwV2lkdGggPiBtYXhQcmV2aWV3RGltZW5zaW9uIHx8IGJpdG1hcEhlaWdodCA+IG1heFByZXZpZXdEaW1lbnNpb24pIHsKICAgICAgICBjb25zdCByYXRpbyA9IE1hdGgubWluKG1heFByZXZpZXdEaW1lbnNpb24gLyBiaXRtYXBXaWR0aCwgbWF4UHJldmlld0RpbWVuc2lvbiAvIGJpdG1hcEhlaWdodCk7CiAgICAgICAgd2lkdGggPSBNYXRoLmZsb29yKGJpdG1hcFdpZHRoICogcmF0aW8pOwogICAgICAgIGhlaWdodCA9IE1hdGguZmxvb3IoYml0bWFwSGVpZ2h0ICogcmF0aW8pOwogICAgICB9CiAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBjb25zdCBzY2FsZWRXaWR0aCA9IGNhbnZhcy53aWR0aCA9IE1hdGguY2VpbCh3aWR0aCAqIG91dHB1dFNjYWxlLnN4KTsKICAgICAgY29uc3Qgc2NhbGVkSGVpZ2h0ID0gY2FudmFzLmhlaWdodCA9IE1hdGguY2VpbChoZWlnaHQgKiBvdXRwdXRTY2FsZS5zeSk7CiAgICAgIGlmICghdGhpcy4jaXNTdmcpIHsKICAgICAgICBiaXRtYXAgPSB0aGlzLiNzY2FsZUJpdG1hcChzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKICAgICAgfQogICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmZpbHRlciA9IHRoaXMuX3VpTWFuYWdlci5oY21GaWx0ZXI7CiAgICAgIGxldCB3aGl0ZSA9ICJ3aGl0ZSIsCiAgICAgICAgYmxhY2sgPSAiI2NmY2ZkOCI7CiAgICAgIGlmICh0aGlzLl91aU1hbmFnZXIuaGNtRmlsdGVyICE9PSAibm9uZSIpIHsKICAgICAgICBibGFjayA9ICJibGFjayI7CiAgICAgIH0gZWxzZSBpZiAoQ29sb3JTY2hlbWUuaXNEYXJrTW9kZSkgewogICAgICAgIHdoaXRlID0gIiM4ZjhmOWQiOwogICAgICAgIGJsYWNrID0gIiM0MjQxNGQiOwogICAgICB9CiAgICAgIGNvbnN0IGJveERpbSA9IDE1OwogICAgICBjb25zdCBib3hEaW1XaWR0aCA9IGJveERpbSAqIG91dHB1dFNjYWxlLnN4OwogICAgICBjb25zdCBib3hEaW1IZWlnaHQgPSBib3hEaW0gKiBvdXRwdXRTY2FsZS5zeTsKICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBPZmZzY3JlZW5DYW52YXMoYm94RGltV2lkdGggKiAyLCBib3hEaW1IZWlnaHQgKiAyKTsKICAgICAgY29uc3QgcGF0dGVybkN0eCA9IHBhdHRlcm4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgcGF0dGVybkN0eC5maWxsU3R5bGUgPSB3aGl0ZTsKICAgICAgcGF0dGVybkN0eC5maWxsUmVjdCgwLCAwLCBib3hEaW1XaWR0aCAqIDIsIGJveERpbUhlaWdodCAqIDIpOwogICAgICBwYXR0ZXJuQ3R4LmZpbGxTdHlsZSA9IGJsYWNrOwogICAgICBwYXR0ZXJuQ3R4LmZpbGxSZWN0KDAsIDAsIGJveERpbVdpZHRoLCBib3hEaW1IZWlnaHQpOwogICAgICBwYXR0ZXJuQ3R4LmZpbGxSZWN0KGJveERpbVdpZHRoLCBib3hEaW1IZWlnaHQsIGJveERpbVdpZHRoLCBib3hEaW1IZWlnaHQpOwogICAgICBjdHguZmlsbFN0eWxlID0gY3R4LmNyZWF0ZVBhdHRlcm4ocGF0dGVybiwgInJlcGVhdCIpOwogICAgICBjdHguZmlsbFJlY3QoMCwgMCwgc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7CiAgICAgIGN0eC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwLCBiaXRtYXAud2lkdGgsIGJpdG1hcC5oZWlnaHQsIDAsIDAsIHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwogICAgfQogICAgbGV0IGltYWdlRGF0YSA9IG51bGw7CiAgICBpZiAoY3JlYXRlSW1hZ2VEYXRhKSB7CiAgICAgIGxldCBkYXRhV2lkdGgsIGRhdGFIZWlnaHQ7CiAgICAgIGlmIChvdXRwdXRTY2FsZS5zeW1tZXRyaWMgJiYgYml0bWFwLndpZHRoIDwgbWF4RGF0YURpbWVuc2lvbiAmJiBiaXRtYXAuaGVpZ2h0IDwgbWF4RGF0YURpbWVuc2lvbikgewogICAgICAgIGRhdGFXaWR0aCA9IGJpdG1hcC53aWR0aDsKICAgICAgICBkYXRhSGVpZ2h0ID0gYml0bWFwLmhlaWdodDsKICAgICAgfSBlbHNlIHsKICAgICAgICBiaXRtYXAgPSB0aGlzLiNiaXRtYXA7CiAgICAgICAgaWYgKGJpdG1hcFdpZHRoID4gbWF4RGF0YURpbWVuc2lvbiB8fCBiaXRtYXBIZWlnaHQgPiBtYXhEYXRhRGltZW5zaW9uKSB7CiAgICAgICAgICBjb25zdCByYXRpbyA9IE1hdGgubWluKG1heERhdGFEaW1lbnNpb24gLyBiaXRtYXBXaWR0aCwgbWF4RGF0YURpbWVuc2lvbiAvIGJpdG1hcEhlaWdodCk7CiAgICAgICAgICBkYXRhV2lkdGggPSBNYXRoLmZsb29yKGJpdG1hcFdpZHRoICogcmF0aW8pOwogICAgICAgICAgZGF0YUhlaWdodCA9IE1hdGguZmxvb3IoYml0bWFwSGVpZ2h0ICogcmF0aW8pOwogICAgICAgICAgaWYgKCF0aGlzLiNpc1N2ZykgewogICAgICAgICAgICBiaXRtYXAgPSB0aGlzLiNzY2FsZUJpdG1hcChkYXRhV2lkdGgsIGRhdGFIZWlnaHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKGRhdGFXaWR0aCwgZGF0YUhlaWdodCk7CiAgICAgIGNvbnN0IG9mZnNjcmVlbkN0eCA9IG9mZnNjcmVlbi5nZXRDb250ZXh0KCIyZCIsIHsKICAgICAgICB3aWxsUmVhZEZyZXF1ZW50bHk6IHRydWUKICAgICAgfSk7CiAgICAgIG9mZnNjcmVlbkN0eC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwLCBiaXRtYXAud2lkdGgsIGJpdG1hcC5oZWlnaHQsIDAsIDAsIGRhdGFXaWR0aCwgZGF0YUhlaWdodCk7CiAgICAgIGltYWdlRGF0YSA9IHsKICAgICAgICB3aWR0aDogZGF0YVdpZHRoLAogICAgICAgIGhlaWdodDogZGF0YUhlaWdodCwKICAgICAgICBkYXRhOiBvZmZzY3JlZW5DdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIGRhdGFXaWR0aCwgZGF0YUhlaWdodCkuZGF0YQogICAgICB9OwogICAgfQogICAgcmV0dXJuIHsKICAgICAgY2FudmFzLAogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0LAogICAgICBpbWFnZURhdGEKICAgIH07CiAgfQogICNzY2FsZUJpdG1hcCh3aWR0aCwgaGVpZ2h0KSB7CiAgICBjb25zdCB7CiAgICAgIHdpZHRoOiBiaXRtYXBXaWR0aCwKICAgICAgaGVpZ2h0OiBiaXRtYXBIZWlnaHQKICAgIH0gPSB0aGlzLiNiaXRtYXA7CiAgICBsZXQgbmV3V2lkdGggPSBiaXRtYXBXaWR0aDsKICAgIGxldCBuZXdIZWlnaHQgPSBiaXRtYXBIZWlnaHQ7CiAgICBsZXQgYml0bWFwID0gdGhpcy4jYml0bWFwOwogICAgd2hpbGUgKG5ld1dpZHRoID4gMiAqIHdpZHRoIHx8IG5ld0hlaWdodCA+IDIgKiBoZWlnaHQpIHsKICAgICAgY29uc3QgcHJldldpZHRoID0gbmV3V2lkdGg7CiAgICAgIGNvbnN0IHByZXZIZWlnaHQgPSBuZXdIZWlnaHQ7CiAgICAgIGlmIChuZXdXaWR0aCA+IDIgKiB3aWR0aCkgewogICAgICAgIG5ld1dpZHRoID0gbmV3V2lkdGggPj0gMTYzODQgPyBNYXRoLmZsb29yKG5ld1dpZHRoIC8gMikgLSAxIDogTWF0aC5jZWlsKG5ld1dpZHRoIC8gMik7CiAgICAgIH0KICAgICAgaWYgKG5ld0hlaWdodCA+IDIgKiBoZWlnaHQpIHsKICAgICAgICBuZXdIZWlnaHQgPSBuZXdIZWlnaHQgPj0gMTYzODQgPyBNYXRoLmZsb29yKG5ld0hlaWdodCAvIDIpIC0gMSA6IE1hdGguY2VpbChuZXdIZWlnaHQgLyAyKTsKICAgICAgfQogICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKG5ld1dpZHRoLCBuZXdIZWlnaHQpOwogICAgICBjb25zdCBjdHggPSBvZmZzY3JlZW4uZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDAsIHByZXZXaWR0aCwgcHJldkhlaWdodCwgMCwgMCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7CiAgICAgIGJpdG1hcCA9IG9mZnNjcmVlbi50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTsKICAgIH0KICAgIHJldHVybiBiaXRtYXA7CiAgfQogICNkcmF3Qml0bWFwKCkgewogICAgY29uc3QgW3BhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHRdID0gdGhpcy5wYXJlbnREaW1lbnNpb25zOwogICAgY29uc3QgewogICAgICB3aWR0aCwKICAgICAgaGVpZ2h0CiAgICB9ID0gdGhpczsKICAgIGNvbnN0IG91dHB1dFNjYWxlID0gbmV3IE91dHB1dFNjYWxlKCk7CiAgICBjb25zdCBzY2FsZWRXaWR0aCA9IE1hdGguY2VpbCh3aWR0aCAqIHBhcmVudFdpZHRoICogb3V0cHV0U2NhbGUuc3gpOwogICAgY29uc3Qgc2NhbGVkSGVpZ2h0ID0gTWF0aC5jZWlsKGhlaWdodCAqIHBhcmVudEhlaWdodCAqIG91dHB1dFNjYWxlLnN5KTsKICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuI2NhbnZhczsKICAgIGlmICghY2FudmFzIHx8IGNhbnZhcy53aWR0aCA9PT0gc2NhbGVkV2lkdGggJiYgY2FudmFzLmhlaWdodCA9PT0gc2NhbGVkSGVpZ2h0KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNhbnZhcy53aWR0aCA9IHNjYWxlZFdpZHRoOwogICAgY2FudmFzLmhlaWdodCA9IHNjYWxlZEhlaWdodDsKICAgIGNvbnN0IGJpdG1hcCA9IHRoaXMuI2lzU3ZnID8gdGhpcy4jYml0bWFwIDogdGhpcy4jc2NhbGVCaXRtYXAoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7CiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGN0eC5maWx0ZXIgPSB0aGlzLl91aU1hbmFnZXIuaGNtRmlsdGVyOwogICAgY3R4LmRyYXdJbWFnZShiaXRtYXAsIDAsIDAsIGJpdG1hcC53aWR0aCwgYml0bWFwLmhlaWdodCwgMCwgMCwgc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7CiAgfQogICNzZXJpYWxpemVCaXRtYXAodG9VcmwpIHsKICAgIGlmICh0b1VybCkgewogICAgICBpZiAodGhpcy4jaXNTdmcpIHsKICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl91aU1hbmFnZXIuaW1hZ2VNYW5hZ2VyLmdldFN2Z1VybCh0aGlzLiNiaXRtYXBJZCk7CiAgICAgICAgaWYgKHVybCkgewogICAgICAgICAgcmV0dXJuIHVybDsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICAgICh7CiAgICAgICAgd2lkdGg6IGNhbnZhcy53aWR0aCwKICAgICAgICBoZWlnaHQ6IGNhbnZhcy5oZWlnaHQKICAgICAgfSA9IHRoaXMuI2JpdG1hcCk7CiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICBjdHguZHJhd0ltYWdlKHRoaXMuI2JpdG1hcCwgMCwgMCk7CiAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCk7CiAgICB9CiAgICBpZiAodGhpcy4jaXNTdmcpIHsKICAgICAgY29uc3QgW3BhZ2VXaWR0aCwgcGFnZUhlaWdodF0gPSB0aGlzLnBhZ2VEaW1lbnNpb25zOwogICAgICBjb25zdCB3aWR0aCA9IE1hdGgucm91bmQodGhpcy53aWR0aCAqIHBhZ2VXaWR0aCAqIFBpeGVsc1BlckluY2guUERGX1RPX0NTU19VTklUUyk7CiAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGgucm91bmQodGhpcy5oZWlnaHQgKiBwYWdlSGVpZ2h0ICogUGl4ZWxzUGVySW5jaC5QREZfVE9fQ1NTX1VOSVRTKTsKICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsKICAgICAgY29uc3QgY3R4ID0gb2Zmc2NyZWVuLmdldENvbnRleHQoIjJkIik7CiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy4jYml0bWFwLCAwLCAwLCB0aGlzLiNiaXRtYXAud2lkdGgsIHRoaXMuI2JpdG1hcC5oZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICByZXR1cm4gb2Zmc2NyZWVuLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpOwogICAgfQogICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZSh0aGlzLiNiaXRtYXApOwogIH0KICBzdGF0aWMgYXN5bmMgZGVzZXJpYWxpemUoZGF0YSwgcGFyZW50LCB1aU1hbmFnZXIpIHsKICAgIGxldCBpbml0aWFsRGF0YSA9IG51bGw7CiAgICBsZXQgbWlzc2luZ0NhbnZhcyA9IGZhbHNlOwogICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBTdGFtcEFubm90YXRpb25FbGVtZW50KSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhOiB7CiAgICAgICAgICByZWN0LAogICAgICAgICAgcm90YXRpb24sCiAgICAgICAgICBpZCwKICAgICAgICAgIHN0cnVjdFBhcmVudCwKICAgICAgICAgIHBvcHVwUmVmLAogICAgICAgICAgcmljaFRleHQsCiAgICAgICAgICBjb250ZW50c09iaiwKICAgICAgICAgIGNyZWF0aW9uRGF0ZSwKICAgICAgICAgIG1vZGlmaWNhdGlvbkRhdGUKICAgICAgICB9LAogICAgICAgIGNvbnRhaW5lciwKICAgICAgICBwYXJlbnQ6IHsKICAgICAgICAgIHBhZ2U6IHsKICAgICAgICAgICAgcGFnZU51bWJlcgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY2FudmFzCiAgICAgIH0gPSBkYXRhOwogICAgICBsZXQgYml0bWFwSWQsIGJpdG1hcDsKICAgICAgaWYgKGNhbnZhcykgewogICAgICAgIGRlbGV0ZSBkYXRhLmNhbnZhczsKICAgICAgICAoewogICAgICAgICAgaWQ6IGJpdG1hcElkLAogICAgICAgICAgYml0bWFwCiAgICAgICAgfSA9IHVpTWFuYWdlci5pbWFnZU1hbmFnZXIuZ2V0RnJvbUNhbnZhcyhjb250YWluZXIuaWQsIGNhbnZhcykpOwogICAgICAgIGNhbnZhcy5yZW1vdmUoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtaXNzaW5nQ2FudmFzID0gdHJ1ZTsKICAgICAgICBkYXRhLl9oYXNOb0NhbnZhcyA9IHRydWU7CiAgICAgIH0KICAgICAgY29uc3QgYWx0VGV4dCA9IChhd2FpdCBwYXJlbnQuX3N0cnVjdFRyZWUuZ2V0QXJpYUF0dHJpYnV0ZXMoYCR7QW5ub3RhdGlvblByZWZpeH0ke2lkfWApKT8uZ2V0KCJhcmlhLWxhYmVsIikgfHwgIiI7CiAgICAgIGluaXRpYWxEYXRhID0gZGF0YSA9IHsKICAgICAgICBhbm5vdGF0aW9uVHlwZTogQW5ub3RhdGlvbkVkaXRvclR5cGUuU1RBTVAsCiAgICAgICAgYml0bWFwSWQsCiAgICAgICAgYml0bWFwLAogICAgICAgIHBhZ2VJbmRleDogcGFnZU51bWJlciAtIDEsCiAgICAgICAgcmVjdDogcmVjdC5zbGljZSgwKSwKICAgICAgICByb3RhdGlvbiwKICAgICAgICBhbm5vdGF0aW9uRWxlbWVudElkOiBpZCwKICAgICAgICBpZCwKICAgICAgICBkZWxldGVkOiBmYWxzZSwKICAgICAgICBhY2Nlc3NpYmlsaXR5RGF0YTogewogICAgICAgICAgZGVjb3JhdGl2ZTogZmFsc2UsCiAgICAgICAgICBhbHRUZXh0CiAgICAgICAgfSwKICAgICAgICBpc1N2ZzogZmFsc2UsCiAgICAgICAgc3RydWN0UGFyZW50LAogICAgICAgIHBvcHVwUmVmLAogICAgICAgIHJpY2hUZXh0LAogICAgICAgIGNvbW1lbnQ6IGNvbnRlbnRzT2JqPy5zdHIgfHwgbnVsbCwKICAgICAgICBjcmVhdGlvbkRhdGUsCiAgICAgICAgbW9kaWZpY2F0aW9uRGF0ZQogICAgICB9OwogICAgfQogICAgY29uc3QgZWRpdG9yID0gYXdhaXQgc3VwZXIuZGVzZXJpYWxpemUoZGF0YSwgcGFyZW50LCB1aU1hbmFnZXIpOwogICAgY29uc3QgewogICAgICByZWN0LAogICAgICBiaXRtYXAsCiAgICAgIGJpdG1hcFVybCwKICAgICAgYml0bWFwSWQsCiAgICAgIGlzU3ZnLAogICAgICBhY2Nlc3NpYmlsaXR5RGF0YQogICAgfSA9IGRhdGE7CiAgICBpZiAobWlzc2luZ0NhbnZhcykgewogICAgICB1aU1hbmFnZXIuYWRkTWlzc2luZ0NhbnZhcyhkYXRhLmlkLCBlZGl0b3IpOwogICAgICBlZGl0b3IuI21pc3NpbmdDYW52YXMgPSB0cnVlOwogICAgfSBlbHNlIGlmIChiaXRtYXBJZCAmJiB1aU1hbmFnZXIuaW1hZ2VNYW5hZ2VyLmlzVmFsaWRJZChiaXRtYXBJZCkpIHsKICAgICAgZWRpdG9yLiNiaXRtYXBJZCA9IGJpdG1hcElkOwogICAgICBpZiAoYml0bWFwKSB7CiAgICAgICAgZWRpdG9yLiNiaXRtYXAgPSBiaXRtYXA7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGVkaXRvci4jYml0bWFwVXJsID0gYml0bWFwVXJsOwogICAgfQogICAgZWRpdG9yLiNpc1N2ZyA9IGlzU3ZnOwogICAgY29uc3QgW3BhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHRdID0gZWRpdG9yLnBhZ2VEaW1lbnNpb25zOwogICAgZWRpdG9yLndpZHRoID0gKHJlY3RbMl0gLSByZWN0WzBdKSAvIHBhcmVudFdpZHRoOwogICAgZWRpdG9yLmhlaWdodCA9IChyZWN0WzNdIC0gcmVjdFsxXSkgLyBwYXJlbnRIZWlnaHQ7CiAgICBpZiAoYWNjZXNzaWJpbGl0eURhdGEpIHsKICAgICAgZWRpdG9yLmFsdFRleHREYXRhID0gYWNjZXNzaWJpbGl0eURhdGE7CiAgICB9CiAgICBlZGl0b3IuX2luaXRpYWxEYXRhID0gaW5pdGlhbERhdGE7CiAgICBpZiAoZGF0YS5jb21tZW50KSB7CiAgICAgIGVkaXRvci5zZXRDb21tZW50RGF0YShkYXRhKTsKICAgIH0KICAgIGVkaXRvci4jaGFzQmVlbkFkZGVkSW5VbmRvU3RhY2sgPSAhIWluaXRpYWxEYXRhOwogICAgcmV0dXJuIGVkaXRvcjsKICB9CiAgc2VyaWFsaXplKGlzRm9yQ29weWluZyA9IGZhbHNlLCBjb250ZXh0ID0gbnVsbCkgewogICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKHRoaXMuZGVsZXRlZCkgewogICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVEZWxldGVkKCk7CiAgICB9CiAgICBjb25zdCBzZXJpYWxpemVkID0gT2JqZWN0LmFzc2lnbihzdXBlci5zZXJpYWxpemUoaXNGb3JDb3B5aW5nKSwgewogICAgICBiaXRtYXBJZDogdGhpcy4jYml0bWFwSWQsCiAgICAgIGlzU3ZnOiB0aGlzLiNpc1N2ZwogICAgfSk7CiAgICB0aGlzLmFkZENvbW1lbnQoc2VyaWFsaXplZCk7CiAgICBpZiAoaXNGb3JDb3B5aW5nKSB7CiAgICAgIHNlcmlhbGl6ZWQuYml0bWFwVXJsID0gdGhpcy4jc2VyaWFsaXplQml0bWFwKHRydWUpOwogICAgICBzZXJpYWxpemVkLmFjY2Vzc2liaWxpdHlEYXRhID0gdGhpcy5zZXJpYWxpemVBbHRUZXh0KHRydWUpOwogICAgICBzZXJpYWxpemVkLmlzQ29weSA9IHRydWU7CiAgICAgIHJldHVybiBzZXJpYWxpemVkOwogICAgfQogICAgY29uc3QgewogICAgICBkZWNvcmF0aXZlLAogICAgICBhbHRUZXh0CiAgICB9ID0gdGhpcy5zZXJpYWxpemVBbHRUZXh0KGZhbHNlKTsKICAgIGlmICghZGVjb3JhdGl2ZSAmJiBhbHRUZXh0KSB7CiAgICAgIHNlcmlhbGl6ZWQuYWNjZXNzaWJpbGl0eURhdGEgPSB7CiAgICAgICAgdHlwZTogIkZpZ3VyZSIsCiAgICAgICAgYWx0OiBhbHRUZXh0CiAgICAgIH07CiAgICB9CiAgICBpZiAodGhpcy5hbm5vdGF0aW9uRWxlbWVudElkKSB7CiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLiNoYXNFbGVtZW50Q2hhbmdlZChzZXJpYWxpemVkKTsKICAgICAgaWYgKGNoYW5nZXMuaXNTYW1lKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZXMuaXNTYW1lQWx0VGV4dCkgewogICAgICAgIGRlbGV0ZSBzZXJpYWxpemVkLmFjY2Vzc2liaWxpdHlEYXRhOwogICAgICB9IGVsc2UgewogICAgICAgIHNlcmlhbGl6ZWQuYWNjZXNzaWJpbGl0eURhdGEuc3RydWN0UGFyZW50ID0gdGhpcy5faW5pdGlhbERhdGEuc3RydWN0UGFyZW50ID8/IC0xOwogICAgICB9CiAgICAgIHNlcmlhbGl6ZWQuaWQgPSB0aGlzLmFubm90YXRpb25FbGVtZW50SWQ7CiAgICAgIGRlbGV0ZSBzZXJpYWxpemVkLmJpdG1hcElkOwogICAgICByZXR1cm4gc2VyaWFsaXplZDsKICAgIH0KICAgIGlmIChjb250ZXh0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBzZXJpYWxpemVkOwogICAgfQogICAgY29udGV4dC5zdGFtcHMgfHw9IG5ldyBNYXAoKTsKICAgIGNvbnN0IGFyZWEgPSB0aGlzLiNpc1N2ZyA/IChzZXJpYWxpemVkLnJlY3RbMl0gLSBzZXJpYWxpemVkLnJlY3RbMF0pICogKHNlcmlhbGl6ZWQucmVjdFszXSAtIHNlcmlhbGl6ZWQucmVjdFsxXSkgOiBudWxsOwogICAgaWYgKCFjb250ZXh0LnN0YW1wcy5oYXModGhpcy4jYml0bWFwSWQpKSB7CiAgICAgIGNvbnRleHQuc3RhbXBzLnNldCh0aGlzLiNiaXRtYXBJZCwgewogICAgICAgIGFyZWEsCiAgICAgICAgc2VyaWFsaXplZAogICAgICB9KTsKICAgICAgc2VyaWFsaXplZC5iaXRtYXAgPSB0aGlzLiNzZXJpYWxpemVCaXRtYXAoZmFsc2UpOwogICAgfSBlbHNlIGlmICh0aGlzLiNpc1N2ZykgewogICAgICBjb25zdCBwcmV2RGF0YSA9IGNvbnRleHQuc3RhbXBzLmdldCh0aGlzLiNiaXRtYXBJZCk7CiAgICAgIGlmIChhcmVhID4gcHJldkRhdGEuYXJlYSkgewogICAgICAgIHByZXZEYXRhLmFyZWEgPSBhcmVhOwogICAgICAgIHByZXZEYXRhLnNlcmlhbGl6ZWQuYml0bWFwLmNsb3NlKCk7CiAgICAgICAgcHJldkRhdGEuc2VyaWFsaXplZC5iaXRtYXAgPSB0aGlzLiNzZXJpYWxpemVCaXRtYXAoZmFsc2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2VyaWFsaXplZDsKICB9CiAgI2hhc0VsZW1lbnRDaGFuZ2VkKHNlcmlhbGl6ZWQpIHsKICAgIGNvbnN0IHsKICAgICAgcGFnZUluZGV4LAogICAgICBhY2Nlc3NpYmlsaXR5RGF0YTogewogICAgICAgIGFsdFRleHQKICAgICAgfQogICAgfSA9IHRoaXMuX2luaXRpYWxEYXRhOwogICAgY29uc3QgaXNTYW1lUGFnZUluZGV4ID0gc2VyaWFsaXplZC5wYWdlSW5kZXggPT09IHBhZ2VJbmRleDsKICAgIGNvbnN0IGlzU2FtZUFsdFRleHQgPSAoc2VyaWFsaXplZC5hY2Nlc3NpYmlsaXR5RGF0YT8uYWx0IHx8ICIiKSA9PT0gYWx0VGV4dDsKICAgIHJldHVybiB7CiAgICAgIGlzU2FtZTogIXRoaXMuaGFzRWRpdGVkQ29tbWVudCAmJiAhdGhpcy5faGFzQmVlbk1vdmVkICYmICF0aGlzLl9oYXNCZWVuUmVzaXplZCAmJiBpc1NhbWVQYWdlSW5kZXggJiYgaXNTYW1lQWx0VGV4dCwKICAgICAgaXNTYW1lQWx0VGV4dAogICAgfTsKICB9CiAgcmVuZGVyQW5ub3RhdGlvbkVsZW1lbnQoYW5ub3RhdGlvbikgewogICAgaWYgKHRoaXMuZGVsZXRlZCkgewogICAgICBhbm5vdGF0aW9uLmhpZGUoKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBhbm5vdGF0aW9uLnVwZGF0ZUVkaXRlZCh7CiAgICAgIHJlY3Q6IHRoaXMuZ2V0UERGUmVjdCgpLAogICAgICBwb3B1cDogdGhpcy5jb21tZW50CiAgICB9KTsKICAgIHJldHVybiBudWxsOwogIH0KfQoKOy8vIC4vc3JjL2Rpc3BsYXkvZWRpdG9yL2Fubm90YXRpb25fZWRpdG9yX2xheWVyLmpzCgoKCgoKCgoKY2xhc3MgQW5ub3RhdGlvbkVkaXRvckxheWVyIHsKICAjYWNjZXNzaWJpbGl0eU1hbmFnZXI7CiAgI2FsbG93Q2xpY2sgPSBmYWxzZTsKICAjYW5ub3RhdGlvbkxheWVyID0gbnVsbDsKICAjY2xpY2tBQyA9IG51bGw7CiAgI2VkaXRvckZvY3VzVGltZW91dElkID0gbnVsbDsKICAjZWRpdG9ycyA9IG5ldyBNYXAoKTsKICAjaGFkUG9pbnRlckRvd24gPSBmYWxzZTsKICAjaXNEaXNhYmxpbmcgPSBmYWxzZTsKICAjaXNFbmFibGluZyA9IGZhbHNlOwogICNkcmF3aW5nQUMgPSBudWxsOwogICNmb2N1c2VkRWxlbWVudCA9IG51bGw7CiAgI3RleHRMYXllciA9IG51bGw7CiAgI3RleHRTZWxlY3Rpb25BQyA9IG51bGw7CiAgI3RleHRMYXllckRibENsaWNrQUMgPSBudWxsOwogICNsYXN0UG9pbnRlckRvd25UaW1lc3RhbXAgPSAtMTsKICAjdWlNYW5hZ2VyOwogIHN0YXRpYyBfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICBzdGF0aWMgI2VkaXRvclR5cGVzID0gbmV3IE1hcChbRnJlZVRleHRFZGl0b3IsIElua0VkaXRvciwgU3RhbXBFZGl0b3IsIEhpZ2hsaWdodEVkaXRvciwgU2lnbmF0dXJlRWRpdG9yXS5tYXAodHlwZSA9PiBbdHlwZS5fZWRpdG9yVHlwZSwgdHlwZV0pKTsKICBjb25zdHJ1Y3Rvcih7CiAgICB1aU1hbmFnZXIsCiAgICBwYWdlSW5kZXgsCiAgICBkaXYsCiAgICBzdHJ1Y3RUcmVlTGF5ZXIsCiAgICBhY2Nlc3NpYmlsaXR5TWFuYWdlciwKICAgIGFubm90YXRpb25MYXllciwKICAgIGRyYXdMYXllciwKICAgIHRleHRMYXllciwKICAgIHZpZXdwb3J0LAogICAgbDEwbgogIH0pIHsKICAgIGNvbnN0IGVkaXRvclR5cGVzID0gWy4uLkFubm90YXRpb25FZGl0b3JMYXllci4jZWRpdG9yVHlwZXMudmFsdWVzKCldOwogICAgaWYgKCFBbm5vdGF0aW9uRWRpdG9yTGF5ZXIuX2luaXRpYWxpemVkKSB7CiAgICAgIEFubm90YXRpb25FZGl0b3JMYXllci5faW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICBmb3IgKGNvbnN0IGVkaXRvclR5cGUgb2YgZWRpdG9yVHlwZXMpIHsKICAgICAgICBlZGl0b3JUeXBlLmluaXRpYWxpemUobDEwbiwgdWlNYW5hZ2VyKTsKICAgICAgfQogICAgfQogICAgdWlNYW5hZ2VyLnJlZ2lzdGVyRWRpdG9yVHlwZXMoZWRpdG9yVHlwZXMpOwogICAgdGhpcy4jdWlNYW5hZ2VyID0gdWlNYW5hZ2VyOwogICAgdGhpcy5wYWdlSW5kZXggPSBwYWdlSW5kZXg7CiAgICB0aGlzLmRpdiA9IGRpdjsKICAgIHRoaXMuI2FjY2Vzc2liaWxpdHlNYW5hZ2VyID0gYWNjZXNzaWJpbGl0eU1hbmFnZXI7CiAgICB0aGlzLiNhbm5vdGF0aW9uTGF5ZXIgPSBhbm5vdGF0aW9uTGF5ZXI7CiAgICB0aGlzLnZpZXdwb3J0ID0gdmlld3BvcnQ7CiAgICB0aGlzLiN0ZXh0TGF5ZXIgPSB0ZXh0TGF5ZXI7CiAgICB0aGlzLmRyYXdMYXllciA9IGRyYXdMYXllcjsKICAgIHRoaXMuX3N0cnVjdFRyZWUgPSBzdHJ1Y3RUcmVlTGF5ZXI7CiAgICB0aGlzLiN1aU1hbmFnZXIuYWRkTGF5ZXIodGhpcyk7CiAgfQogIGdldCBpc0VtcHR5KCkgewogICAgcmV0dXJuIHRoaXMuI2VkaXRvcnMuc2l6ZSA9PT0gMDsKICB9CiAgZ2V0IGlzSW52aXNpYmxlKCkgewogICAgcmV0dXJuIHRoaXMuaXNFbXB0eSAmJiB0aGlzLiN1aU1hbmFnZXIuZ2V0TW9kZSgpID09PSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5OT05FOwogIH0KICB1cGRhdGVUb29sYmFyKG9wdGlvbnMpIHsKICAgIHRoaXMuI3VpTWFuYWdlci51cGRhdGVUb29sYmFyKG9wdGlvbnMpOwogIH0KICB1cGRhdGVNb2RlKG1vZGUgPSB0aGlzLiN1aU1hbmFnZXIuZ2V0TW9kZSgpKSB7CiAgICB0aGlzLiNjbGVhbnVwKCk7CiAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICAgY2FzZSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5OT05FOgogICAgICAgIHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoIm5vbkVkaXRpbmciLCB0cnVlKTsKICAgICAgICB0aGlzLmRpc2FibGVUZXh0U2VsZWN0aW9uKCk7CiAgICAgICAgdGhpcy50b2dnbGVQb2ludGVyRXZlbnRzKGZhbHNlKTsKICAgICAgICB0aGlzLnRvZ2dsZUFubm90YXRpb25MYXllclBvaW50ZXJFdmVudHModHJ1ZSk7CiAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2soKTsKICAgICAgICByZXR1cm47CiAgICAgIGNhc2UgQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOgogICAgICAgIHRoaXMuZGlzYWJsZVRleHRTZWxlY3Rpb24oKTsKICAgICAgICB0aGlzLnRvZ2dsZVBvaW50ZXJFdmVudHModHJ1ZSk7CiAgICAgICAgdGhpcy5lbmFibGVDbGljaygpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEFubm90YXRpb25FZGl0b3JUeXBlLkhJR0hMSUdIVDoKICAgICAgICB0aGlzLmVuYWJsZVRleHRTZWxlY3Rpb24oKTsKICAgICAgICB0aGlzLnRvZ2dsZVBvaW50ZXJFdmVudHMoZmFsc2UpOwogICAgICAgIHRoaXMuZGlzYWJsZUNsaWNrKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhpcy5kaXNhYmxlVGV4dFNlbGVjdGlvbigpOwogICAgICAgIHRoaXMudG9nZ2xlUG9pbnRlckV2ZW50cyh0cnVlKTsKICAgICAgICB0aGlzLmVuYWJsZUNsaWNrKCk7CiAgICB9CiAgICB0aGlzLnRvZ2dsZUFubm90YXRpb25MYXllclBvaW50ZXJFdmVudHMoZmFsc2UpOwogICAgY29uc3QgewogICAgICBjbGFzc0xpc3QKICAgIH0gPSB0aGlzLmRpdjsKICAgIGNsYXNzTGlzdC50b2dnbGUoIm5vbkVkaXRpbmciLCBmYWxzZSk7CiAgICBpZiAobW9kZSA9PT0gQW5ub3RhdGlvbkVkaXRvclR5cGUuUE9QVVApIHsKICAgICAgY2xhc3NMaXN0LnRvZ2dsZSgiY29tbWVudEVkaXRpbmciLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNsYXNzTGlzdC50b2dnbGUoImNvbW1lbnRFZGl0aW5nIiwgZmFsc2UpOwogICAgICBmb3IgKGNvbnN0IGVkaXRvclR5cGUgb2YgQW5ub3RhdGlvbkVkaXRvckxheWVyLiNlZGl0b3JUeXBlcy52YWx1ZXMoKSkgewogICAgICAgIGNsYXNzTGlzdC50b2dnbGUoYCR7ZWRpdG9yVHlwZS5fdHlwZX1FZGl0aW5nYCwgbW9kZSA9PT0gZWRpdG9yVHlwZS5fZWRpdG9yVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuZGl2LmhpZGRlbiA9IGZhbHNlOwogIH0KICBoYXNUZXh0TGF5ZXIodGV4dExheWVyKSB7CiAgICByZXR1cm4gdGV4dExheWVyID09PSB0aGlzLiN0ZXh0TGF5ZXI/LmRpdjsKICB9CiAgc2V0RWRpdGluZ1N0YXRlKGlzRWRpdGluZykgewogICAgdGhpcy4jdWlNYW5hZ2VyLnNldEVkaXRpbmdTdGF0ZShpc0VkaXRpbmcpOwogIH0KICBhZGRDb21tYW5kcyhwYXJhbXMpIHsKICAgIHRoaXMuI3VpTWFuYWdlci5hZGRDb21tYW5kcyhwYXJhbXMpOwogIH0KICBjbGVhblVuZG9TdGFjayh0eXBlKSB7CiAgICB0aGlzLiN1aU1hbmFnZXIuY2xlYW5VbmRvU3RhY2sodHlwZSk7CiAgfQogIHRvZ2dsZURyYXdpbmcoZW5hYmxlZCA9IGZhbHNlKSB7CiAgICB0aGlzLmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJkcmF3aW5nIiwgIWVuYWJsZWQpOwogIH0KICB0b2dnbGVQb2ludGVyRXZlbnRzKGVuYWJsZWQgPSBmYWxzZSkgewogICAgdGhpcy5kaXYuY2xhc3NMaXN0LnRvZ2dsZSgiZGlzYWJsZWQiLCAhZW5hYmxlZCk7CiAgfQogIHRvZ2dsZUFubm90YXRpb25MYXllclBvaW50ZXJFdmVudHMoZW5hYmxlZCA9IGZhbHNlKSB7CiAgICB0aGlzLiNhbm5vdGF0aW9uTGF5ZXI/LnRvZ2dsZVBvaW50ZXJFdmVudHMoZW5hYmxlZCk7CiAgfQogIGdldCAjYWxsRWRpdG9yc0l0ZXJhdG9yKCkgewogICAgcmV0dXJuIHRoaXMuI2VkaXRvcnMuc2l6ZSAhPT0gMCA/IHRoaXMuI2VkaXRvcnMudmFsdWVzKCkgOiB0aGlzLiN1aU1hbmFnZXIuZ2V0RWRpdG9ycyh0aGlzLnBhZ2VJbmRleCk7CiAgfQogIGFzeW5jIGVuYWJsZSgpIHsKICAgIHRoaXMuI2lzRW5hYmxpbmcgPSB0cnVlOwogICAgdGhpcy5kaXYudGFiSW5kZXggPSAwOwogICAgdGhpcy50b2dnbGVQb2ludGVyRXZlbnRzKHRydWUpOwogICAgdGhpcy5kaXYuY2xhc3NMaXN0LnRvZ2dsZSgibm9uRWRpdGluZyIsIGZhbHNlKTsKICAgIHRoaXMuI3RleHRMYXllckRibENsaWNrQUM/LmFib3J0KCk7CiAgICB0aGlzLiN0ZXh0TGF5ZXJEYmxDbGlja0FDID0gbnVsbDsKICAgIGNvbnN0IGFubm90YXRpb25FbGVtZW50SWRzID0gbmV3IFNldCgpOwogICAgZm9yIChjb25zdCBlZGl0b3Igb2YgdGhpcy4jYWxsRWRpdG9yc0l0ZXJhdG9yKSB7CiAgICAgIGVkaXRvci5lbmFibGVFZGl0aW5nKCk7CiAgICAgIGVkaXRvci5zaG93KHRydWUpOwogICAgICBpZiAoZWRpdG9yLmFubm90YXRpb25FbGVtZW50SWQpIHsKICAgICAgICB0aGlzLiN1aU1hbmFnZXIucmVtb3ZlQ2hhbmdlZEV4aXN0aW5nQW5ub3RhdGlvbihlZGl0b3IpOwogICAgICAgIGFubm90YXRpb25FbGVtZW50SWRzLmFkZChlZGl0b3IuYW5ub3RhdGlvbkVsZW1lbnRJZCk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGFubm90YXRpb25MYXllciA9IHRoaXMuI2Fubm90YXRpb25MYXllcjsKICAgIGlmIChhbm5vdGF0aW9uTGF5ZXIpIHsKICAgICAgZm9yIChjb25zdCBlZGl0YWJsZSBvZiBhbm5vdGF0aW9uTGF5ZXIuZ2V0RWRpdGFibGVBbm5vdGF0aW9ucygpKSB7CiAgICAgICAgZWRpdGFibGUuaGlkZSgpOwogICAgICAgIGlmICh0aGlzLiN1aU1hbmFnZXIuaXNEZWxldGVkQW5ub3RhdGlvbkVsZW1lbnQoZWRpdGFibGUuZGF0YS5pZCkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoYW5ub3RhdGlvbkVsZW1lbnRJZHMuaGFzKGVkaXRhYmxlLmRhdGEuaWQpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgdGhpcy5kZXNlcmlhbGl6ZShlZGl0YWJsZSk7CiAgICAgICAgaWYgKCFlZGl0b3IpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB0aGlzLmFkZE9yUmVidWlsZChlZGl0b3IpOwogICAgICAgIGVkaXRvci5lbmFibGVFZGl0aW5nKCk7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuI2lzRW5hYmxpbmcgPSBmYWxzZTsKICAgIHRoaXMuI3VpTWFuYWdlci5fZXZlbnRCdXMuZGlzcGF0Y2goImVkaXRvcnNyZW5kZXJlZCIsIHsKICAgICAgc291cmNlOiB0aGlzLAogICAgICBwYWdlTnVtYmVyOiB0aGlzLnBhZ2VJbmRleCArIDEKICAgIH0pOwogIH0KICBkaXNhYmxlKCkgewogICAgdGhpcy4jaXNEaXNhYmxpbmcgPSB0cnVlOwogICAgdGhpcy5kaXYudGFiSW5kZXggPSAtMTsKICAgIHRoaXMudG9nZ2xlUG9pbnRlckV2ZW50cyhmYWxzZSk7CiAgICB0aGlzLmRpdi5jbGFzc0xpc3QudG9nZ2xlKCJub25FZGl0aW5nIiwgdHJ1ZSk7CiAgICBpZiAodGhpcy4jdGV4dExheWVyICYmICF0aGlzLiN0ZXh0TGF5ZXJEYmxDbGlja0FDKSB7CiAgICAgIHRoaXMuI3RleHRMYXllckRibENsaWNrQUMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuI3VpTWFuYWdlci5jb21iaW5lZFNpZ25hbCh0aGlzLiN0ZXh0TGF5ZXJEYmxDbGlja0FDKTsKICAgICAgdGhpcy4jdGV4dExheWVyLmRpdi5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsIGUgPT4gewogICAgICAgIGNvbnN0IERCTF9DTElDS19USFJFU0hPTEQgPSA1MDA7CiAgICAgICAgY29uc3QgewogICAgICAgICAgY2xpZW50WCwKICAgICAgICAgIGNsaWVudFksCiAgICAgICAgICB0aW1lU3RhbXAKICAgICAgICB9ID0gZTsKICAgICAgICBjb25zdCBsYXN0UG9pbnRlckRvd25UaW1lc3RhbXAgPSB0aGlzLiNsYXN0UG9pbnRlckRvd25UaW1lc3RhbXA7CiAgICAgICAgaWYgKHRpbWVTdGFtcCAtIGxhc3RQb2ludGVyRG93blRpbWVzdGFtcCA+IERCTF9DTElDS19USFJFU0hPTEQpIHsKICAgICAgICAgIHRoaXMuI2xhc3RQb2ludGVyRG93blRpbWVzdGFtcCA9IHRpbWVTdGFtcDsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy4jbGFzdFBvaW50ZXJEb3duVGltZXN0YW1wID0gLTE7CiAgICAgICAgY29uc3QgewogICAgICAgICAgY2xhc3NMaXN0CiAgICAgICAgfSA9IHRoaXMuZGl2OwogICAgICAgIGNsYXNzTGlzdC50b2dnbGUoImdldEVsZW1lbnRzIiwgdHJ1ZSk7CiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTsKICAgICAgICBjbGFzc0xpc3QudG9nZ2xlKCJnZXRFbGVtZW50cyIsIGZhbHNlKTsKICAgICAgICBpZiAoIXRoaXMuZGl2LmNvbnRhaW5zKGVsZW1lbnRzWzBdKSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgaWQ7CiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtBbm5vdGF0aW9uRWRpdG9yUHJlZml4fVswLTldKyRgKTsKICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHsKICAgICAgICAgIGlmIChyZWdleC50ZXN0KGVsZW1lbnQuaWQpKSB7CiAgICAgICAgICAgIGlkID0gZWxlbWVudC5pZDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghaWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy4jZWRpdG9ycy5nZXQoaWQpOwogICAgICAgIGlmIChlZGl0b3I/LmFubm90YXRpb25FbGVtZW50SWQgPT09IG51bGwpIHsKICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlZGl0b3IuZGJsY2xpY2soZSk7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgc2lnbmFsLAogICAgICAgIGNhcHR1cmU6IHRydWUKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBhbm5vdGF0aW9uTGF5ZXIgPSB0aGlzLiNhbm5vdGF0aW9uTGF5ZXI7CiAgICBjb25zdCBuZWVkRmFrZUFubm90YXRpb24gPSBbXTsKICAgIGlmIChhbm5vdGF0aW9uTGF5ZXIpIHsKICAgICAgY29uc3QgY2hhbmdlZEFubm90YXRpb25zID0gbmV3IE1hcCgpOwogICAgICBjb25zdCByZXNldEFubm90YXRpb25zID0gbmV3IE1hcCgpOwogICAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiB0aGlzLiNhbGxFZGl0b3JzSXRlcmF0b3IpIHsKICAgICAgICBlZGl0b3IuZGlzYWJsZUVkaXRpbmcoKTsKICAgICAgICBpZiAoIWVkaXRvci5hbm5vdGF0aW9uRWxlbWVudElkKSB7CiAgICAgICAgICBuZWVkRmFrZUFubm90YXRpb24ucHVzaChlZGl0b3IpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChlZGl0b3Iuc2VyaWFsaXplKCkgIT09IG51bGwpIHsKICAgICAgICAgIGNoYW5nZWRBbm5vdGF0aW9ucy5zZXQoZWRpdG9yLmFubm90YXRpb25FbGVtZW50SWQsIGVkaXRvcik7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzZXRBbm5vdGF0aW9ucy5zZXQoZWRpdG9yLmFubm90YXRpb25FbGVtZW50SWQsIGVkaXRvcik7CiAgICAgICAgfQogICAgICAgIHRoaXMuZ2V0RWRpdGFibGVBbm5vdGF0aW9uKGVkaXRvci5hbm5vdGF0aW9uRWxlbWVudElkKT8uc2hvdygpOwogICAgICAgIGVkaXRvci5yZW1vdmUoKTsKICAgICAgfQogICAgICBjb25zdCBlZGl0YWJsZXMgPSBhbm5vdGF0aW9uTGF5ZXIuZ2V0RWRpdGFibGVBbm5vdGF0aW9ucygpOwogICAgICBmb3IgKGNvbnN0IGVkaXRhYmxlIG9mIGVkaXRhYmxlcykgewogICAgICAgIGNvbnN0IHsKICAgICAgICAgIGlkCiAgICAgICAgfSA9IGVkaXRhYmxlLmRhdGE7CiAgICAgICAgaWYgKHRoaXMuI3VpTWFuYWdlci5pc0RlbGV0ZWRBbm5vdGF0aW9uRWxlbWVudChpZCkpIHsKICAgICAgICAgIGVkaXRhYmxlLnVwZGF0ZUVkaXRlZCh7CiAgICAgICAgICAgIGRlbGV0ZWQ6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGxldCBlZGl0b3IgPSByZXNldEFubm90YXRpb25zLmdldChpZCk7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgZWRpdG9yLnJlc2V0QW5ub3RhdGlvbkVsZW1lbnQoZWRpdGFibGUpOwogICAgICAgICAgZWRpdG9yLnNob3coZmFsc2UpOwogICAgICAgICAgZWRpdGFibGUuc2hvdygpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGVkaXRvciA9IGNoYW5nZWRBbm5vdGF0aW9ucy5nZXQoaWQpOwogICAgICAgIGlmIChlZGl0b3IpIHsKICAgICAgICAgIHRoaXMuI3VpTWFuYWdlci5hZGRDaGFuZ2VkRXhpc3RpbmdBbm5vdGF0aW9uKGVkaXRvcik7CiAgICAgICAgICBpZiAoZWRpdG9yLnJlbmRlckFubm90YXRpb25FbGVtZW50KGVkaXRhYmxlKSkgewogICAgICAgICAgICBlZGl0b3Iuc2hvdyhmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVkaXRhYmxlLnNob3coKTsKICAgICAgfQogICAgfQogICAgdGhpcy4jY2xlYW51cCgpOwogICAgaWYgKHRoaXMuaXNFbXB0eSkgewogICAgICB0aGlzLmRpdi5oaWRkZW4gPSB0cnVlOwogICAgfQogICAgY29uc3QgewogICAgICBjbGFzc0xpc3QKICAgIH0gPSB0aGlzLmRpdjsKICAgIGZvciAoY29uc3QgZWRpdG9yVHlwZSBvZiBBbm5vdGF0aW9uRWRpdG9yTGF5ZXIuI2VkaXRvclR5cGVzLnZhbHVlcygpKSB7CiAgICAgIGNsYXNzTGlzdC5yZW1vdmUoYCR7ZWRpdG9yVHlwZS5fdHlwZX1FZGl0aW5nYCk7CiAgICB9CiAgICB0aGlzLmRpc2FibGVUZXh0U2VsZWN0aW9uKCk7CiAgICB0aGlzLnRvZ2dsZUFubm90YXRpb25MYXllclBvaW50ZXJFdmVudHModHJ1ZSk7CiAgICBhbm5vdGF0aW9uTGF5ZXI/LnVwZGF0ZUZha2VBbm5vdGF0aW9ucyhuZWVkRmFrZUFubm90YXRpb24pOwogICAgdGhpcy4jaXNEaXNhYmxpbmcgPSBmYWxzZTsKICB9CiAgZ2V0RWRpdGFibGVBbm5vdGF0aW9uKGlkKSB7CiAgICByZXR1cm4gdGhpcy4jYW5ub3RhdGlvbkxheWVyPy5nZXRFZGl0YWJsZUFubm90YXRpb24oaWQpIHx8IG51bGw7CiAgfQogIHNldEFjdGl2ZUVkaXRvcihlZGl0b3IpIHsKICAgIGNvbnN0IGN1cnJlbnRBY3RpdmUgPSB0aGlzLiN1aU1hbmFnZXIuZ2V0QWN0aXZlKCk7CiAgICBpZiAoY3VycmVudEFjdGl2ZSA9PT0gZWRpdG9yKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI3VpTWFuYWdlci5zZXRBY3RpdmVFZGl0b3IoZWRpdG9yKTsKICB9CiAgZW5hYmxlVGV4dFNlbGVjdGlvbigpIHsKICAgIHRoaXMuZGl2LnRhYkluZGV4ID0gLTE7CiAgICBpZiAodGhpcy4jdGV4dExheWVyPy5kaXYgJiYgIXRoaXMuI3RleHRTZWxlY3Rpb25BQykgewogICAgICB0aGlzLiN0ZXh0U2VsZWN0aW9uQUMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuI3VpTWFuYWdlci5jb21iaW5lZFNpZ25hbCh0aGlzLiN0ZXh0U2VsZWN0aW9uQUMpOwogICAgICB0aGlzLiN0ZXh0TGF5ZXIuZGl2LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgdGhpcy4jdGV4dExheWVyUG9pbnRlckRvd24uYmluZCh0aGlzKSwgewogICAgICAgIHNpZ25hbAogICAgICB9KTsKICAgICAgdGhpcy4jdGV4dExheWVyLmRpdi5jbGFzc0xpc3QuYWRkKCJoaWdobGlnaHRpbmciKTsKICAgIH0KICB9CiAgZGlzYWJsZVRleHRTZWxlY3Rpb24oKSB7CiAgICB0aGlzLmRpdi50YWJJbmRleCA9IDA7CiAgICBpZiAodGhpcy4jdGV4dExheWVyPy5kaXYgJiYgdGhpcy4jdGV4dFNlbGVjdGlvbkFDKSB7CiAgICAgIHRoaXMuI3RleHRTZWxlY3Rpb25BQy5hYm9ydCgpOwogICAgICB0aGlzLiN0ZXh0U2VsZWN0aW9uQUMgPSBudWxsOwogICAgICB0aGlzLiN0ZXh0TGF5ZXIuZGl2LmNsYXNzTGlzdC5yZW1vdmUoImhpZ2hsaWdodGluZyIpOwogICAgfQogIH0KICAjdGV4dExheWVyUG9pbnRlckRvd24oZXZlbnQpIHsKICAgIHRoaXMuI3VpTWFuYWdlci51bnNlbGVjdEFsbCgpOwogICAgY29uc3QgewogICAgICB0YXJnZXQKICAgIH0gPSBldmVudDsKICAgIGlmICh0YXJnZXQgPT09IHRoaXMuI3RleHRMYXllci5kaXYgfHwgKHRhcmdldC5nZXRBdHRyaWJ1dGUoInJvbGUiKSA9PT0gImltZyIgfHwgdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZW5kT2ZDb250ZW50IikpICYmIHRoaXMuI3RleHRMYXllci5kaXYuY29udGFpbnModGFyZ2V0KSkgewogICAgICBjb25zdCB7CiAgICAgICAgaXNNYWMKICAgICAgfSA9IHV0aWxfRmVhdHVyZVRlc3QucGxhdGZvcm07CiAgICAgIGlmIChldmVudC5idXR0b24gIT09IDAgfHwgZXZlbnQuY3RybEtleSAmJiBpc01hYykgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLiN1aU1hbmFnZXIuc2hvd0FsbEVkaXRvcnMoImhpZ2hsaWdodCIsIHRydWUsIHRydWUpOwogICAgICB0aGlzLiN0ZXh0TGF5ZXIuZGl2LmNsYXNzTGlzdC5hZGQoImZyZWUiKTsKICAgICAgdGhpcy50b2dnbGVEcmF3aW5nKCk7CiAgICAgIEhpZ2hsaWdodEVkaXRvci5zdGFydEhpZ2hsaWdodGluZyh0aGlzLCB0aGlzLiN1aU1hbmFnZXIuZGlyZWN0aW9uID09PSAibHRyIiwgewogICAgICAgIHRhcmdldDogdGhpcy4jdGV4dExheWVyLmRpdiwKICAgICAgICB4OiBldmVudC54LAogICAgICAgIHk6IGV2ZW50LnkKICAgICAgfSk7CiAgICAgIHRoaXMuI3RleHRMYXllci5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgKCkgPT4gewogICAgICAgIHRoaXMuI3RleHRMYXllci5kaXYuY2xhc3NMaXN0LnJlbW92ZSgiZnJlZSIpOwogICAgICAgIHRoaXMudG9nZ2xlRHJhd2luZyh0cnVlKTsKICAgICAgfSwgewogICAgICAgIG9uY2U6IHRydWUsCiAgICAgICAgc2lnbmFsOiB0aGlzLiN1aU1hbmFnZXIuX3NpZ25hbAogICAgICB9KTsKICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIH0KICB9CiAgZW5hYmxlQ2xpY2soKSB7CiAgICBpZiAodGhpcy4jY2xpY2tBQykgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNjbGlja0FDID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgY29uc3Qgc2lnbmFsID0gdGhpcy4jdWlNYW5hZ2VyLmNvbWJpbmVkU2lnbmFsKHRoaXMuI2NsaWNrQUMpOwogICAgdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLCB0aGlzLnBvaW50ZXJkb3duLmJpbmQodGhpcyksIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIGNvbnN0IHBvaW50ZXJ1cCA9IHRoaXMucG9pbnRlcnVwLmJpbmQodGhpcyk7CiAgICB0aGlzLmRpdi5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCBwb2ludGVydXAsIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICAgIHRoaXMuZGl2LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLCBwb2ludGVydXAsIHsKICAgICAgc2lnbmFsCiAgICB9KTsKICB9CiAgZGlzYWJsZUNsaWNrKCkgewogICAgdGhpcy4jY2xpY2tBQz8uYWJvcnQoKTsKICAgIHRoaXMuI2NsaWNrQUMgPSBudWxsOwogIH0KICBhdHRhY2goZWRpdG9yKSB7CiAgICB0aGlzLiNlZGl0b3JzLnNldChlZGl0b3IuaWQsIGVkaXRvcik7CiAgICBjb25zdCB7CiAgICAgIGFubm90YXRpb25FbGVtZW50SWQKICAgIH0gPSBlZGl0b3I7CiAgICBpZiAoYW5ub3RhdGlvbkVsZW1lbnRJZCAmJiB0aGlzLiN1aU1hbmFnZXIuaXNEZWxldGVkQW5ub3RhdGlvbkVsZW1lbnQoYW5ub3RhdGlvbkVsZW1lbnRJZCkpIHsKICAgICAgdGhpcy4jdWlNYW5hZ2VyLnJlbW92ZURlbGV0ZWRBbm5vdGF0aW9uRWxlbWVudChlZGl0b3IpOwogICAgfQogIH0KICBkZXRhY2goZWRpdG9yKSB7CiAgICB0aGlzLiNlZGl0b3JzLmRlbGV0ZShlZGl0b3IuaWQpOwogICAgdGhpcy4jYWNjZXNzaWJpbGl0eU1hbmFnZXI/LnJlbW92ZVBvaW50ZXJJblRleHRMYXllcihlZGl0b3IuY29udGVudERpdik7CiAgICBpZiAoIXRoaXMuI2lzRGlzYWJsaW5nICYmIGVkaXRvci5hbm5vdGF0aW9uRWxlbWVudElkKSB7CiAgICAgIHRoaXMuI3VpTWFuYWdlci5hZGREZWxldGVkQW5ub3RhdGlvbkVsZW1lbnQoZWRpdG9yKTsKICAgIH0KICB9CiAgcmVtb3ZlKGVkaXRvcikgewogICAgdGhpcy5kZXRhY2goZWRpdG9yKTsKICAgIHRoaXMuI3VpTWFuYWdlci5yZW1vdmVFZGl0b3IoZWRpdG9yKTsKICAgIGVkaXRvci5kaXYucmVtb3ZlKCk7CiAgICBlZGl0b3IuaXNBdHRhY2hlZFRvRE9NID0gZmFsc2U7CiAgfQogIGNoYW5nZVBhcmVudChlZGl0b3IpIHsKICAgIGlmIChlZGl0b3IucGFyZW50ID09PSB0aGlzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChlZGl0b3IucGFyZW50ICYmIGVkaXRvci5hbm5vdGF0aW9uRWxlbWVudElkKSB7CiAgICAgIHRoaXMuI3VpTWFuYWdlci5hZGREZWxldGVkQW5ub3RhdGlvbkVsZW1lbnQoZWRpdG9yLmFubm90YXRpb25FbGVtZW50SWQpOwogICAgICBBbm5vdGF0aW9uRWRpdG9yLmRlbGV0ZUFubm90YXRpb25FbGVtZW50KGVkaXRvcik7CiAgICAgIGVkaXRvci5hbm5vdGF0aW9uRWxlbWVudElkID0gbnVsbDsKICAgIH0KICAgIHRoaXMuYXR0YWNoKGVkaXRvcik7CiAgICBlZGl0b3IucGFyZW50Py5kZXRhY2goZWRpdG9yKTsKICAgIGVkaXRvci5zZXRQYXJlbnQodGhpcyk7CiAgICBpZiAoZWRpdG9yLmRpdiAmJiBlZGl0b3IuaXNBdHRhY2hlZFRvRE9NKSB7CiAgICAgIGVkaXRvci5kaXYucmVtb3ZlKCk7CiAgICAgIHRoaXMuZGl2LmFwcGVuZChlZGl0b3IuZGl2KTsKICAgIH0KICB9CiAgYWRkKGVkaXRvcikgewogICAgaWYgKGVkaXRvci5wYXJlbnQgPT09IHRoaXMgJiYgZWRpdG9yLmlzQXR0YWNoZWRUb0RPTSkgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLmNoYW5nZVBhcmVudChlZGl0b3IpOwogICAgdGhpcy4jdWlNYW5hZ2VyLmFkZEVkaXRvcihlZGl0b3IpOwogICAgdGhpcy5hdHRhY2goZWRpdG9yKTsKICAgIGlmICghZWRpdG9yLmlzQXR0YWNoZWRUb0RPTSkgewogICAgICBjb25zdCBkaXYgPSBlZGl0b3IucmVuZGVyKCk7CiAgICAgIHRoaXMuZGl2LmFwcGVuZChkaXYpOwogICAgICBlZGl0b3IuaXNBdHRhY2hlZFRvRE9NID0gdHJ1ZTsKICAgIH0KICAgIGVkaXRvci5maXhBbmRTZXRQb3NpdGlvbigpOwogICAgZWRpdG9yLm9uY2VBZGRlZCghdGhpcy4jaXNFbmFibGluZyk7CiAgICB0aGlzLiN1aU1hbmFnZXIuYWRkVG9Bbm5vdGF0aW9uU3RvcmFnZShlZGl0b3IpOwogICAgZWRpdG9yLl9yZXBvcnRUZWxlbWV0cnkoZWRpdG9yLnRlbGVtZXRyeUluaXRpYWxEYXRhKTsKICB9CiAgbW92ZUVkaXRvckluRE9NKGVkaXRvcikgewogICAgaWYgKCFlZGl0b3IuaXNBdHRhY2hlZFRvRE9NKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgYWN0aXZlRWxlbWVudAogICAgfSA9IGRvY3VtZW50OwogICAgaWYgKGVkaXRvci5kaXYuY29udGFpbnMoYWN0aXZlRWxlbWVudCkgJiYgIXRoaXMuI2VkaXRvckZvY3VzVGltZW91dElkKSB7CiAgICAgIGVkaXRvci5fZm9jdXNFdmVudHNBbGxvd2VkID0gZmFsc2U7CiAgICAgIHRoaXMuI2VkaXRvckZvY3VzVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgdGhpcy4jZWRpdG9yRm9jdXNUaW1lb3V0SWQgPSBudWxsOwogICAgICAgIGlmICghZWRpdG9yLmRpdi5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkgewogICAgICAgICAgZWRpdG9yLmRpdi5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIiwgKCkgPT4gewogICAgICAgICAgICBlZGl0b3IuX2ZvY3VzRXZlbnRzQWxsb3dlZCA9IHRydWU7CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIG9uY2U6IHRydWUsCiAgICAgICAgICAgIHNpZ25hbDogdGhpcy4jdWlNYW5hZ2VyLl9zaWduYWwKICAgICAgICAgIH0pOwogICAgICAgICAgYWN0aXZlRWxlbWVudC5mb2N1cygpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlZGl0b3IuX2ZvY3VzRXZlbnRzQWxsb3dlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9LCAwKTsKICAgIH0KICAgIGVkaXRvci5fc3RydWN0VHJlZVBhcmVudElkID0gdGhpcy4jYWNjZXNzaWJpbGl0eU1hbmFnZXI/Lm1vdmVFbGVtZW50SW5ET00odGhpcy5kaXYsIGVkaXRvci5kaXYsIGVkaXRvci5jb250ZW50RGl2LCB0cnVlKTsKICB9CiAgYWRkT3JSZWJ1aWxkKGVkaXRvcikgewogICAgaWYgKGVkaXRvci5uZWVkc1RvQmVSZWJ1aWx0KCkpIHsKICAgICAgZWRpdG9yLnBhcmVudCB8fD0gdGhpczsKICAgICAgZWRpdG9yLnJlYnVpbGQoKTsKICAgICAgZWRpdG9yLnNob3coKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuYWRkKGVkaXRvcik7CiAgICB9CiAgfQogIGFkZFVuZG9hYmxlRWRpdG9yKGVkaXRvcikgewogICAgY29uc3QgY21kID0gKCkgPT4gZWRpdG9yLl91aU1hbmFnZXIucmVidWlsZChlZGl0b3IpOwogICAgY29uc3QgdW5kbyA9ICgpID0+IHsKICAgICAgZWRpdG9yLnJlbW92ZSgpOwogICAgfTsKICAgIHRoaXMuYWRkQ29tbWFuZHMoewogICAgICBjbWQsCiAgICAgIHVuZG8sCiAgICAgIG11c3RFeGVjOiBmYWxzZQogICAgfSk7CiAgfQogIGdldEVkaXRvckJ5VUlEKHVpZCkgewogICAgZm9yIChjb25zdCBlZGl0b3Igb2YgdGhpcy4jZWRpdG9ycy52YWx1ZXMoKSkgewogICAgICBpZiAoZWRpdG9yLnVpZCA9PT0gdWlkKSB7CiAgICAgICAgcmV0dXJuIGVkaXRvcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGdldE5leHRJZCgpIHsKICAgIHJldHVybiB0aGlzLiN1aU1hbmFnZXIuZ2V0SWQoKTsKICB9CiAgZ2V0ICNjdXJyZW50RWRpdG9yVHlwZSgpIHsKICAgIHJldHVybiBBbm5vdGF0aW9uRWRpdG9yTGF5ZXIuI2VkaXRvclR5cGVzLmdldCh0aGlzLiN1aU1hbmFnZXIuZ2V0TW9kZSgpKTsKICB9CiAgY29tYmluZWRTaWduYWwoYWMpIHsKICAgIHJldHVybiB0aGlzLiN1aU1hbmFnZXIuY29tYmluZWRTaWduYWwoYWMpOwogIH0KICAjY3JlYXRlTmV3RWRpdG9yKHBhcmFtcykgewogICAgY29uc3QgZWRpdG9yVHlwZSA9IHRoaXMuI2N1cnJlbnRFZGl0b3JUeXBlOwogICAgcmV0dXJuIGVkaXRvclR5cGUgPyBuZXcgZWRpdG9yVHlwZS5wcm90b3R5cGUuY29uc3RydWN0b3IocGFyYW1zKSA6IG51bGw7CiAgfQogIGNhbkNyZWF0ZU5ld0VtcHR5RWRpdG9yKCkgewogICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRFZGl0b3JUeXBlPy5jYW5DcmVhdGVOZXdFbXB0eUVkaXRvcigpOwogIH0KICBhc3luYyBwYXN0ZUVkaXRvcihvcHRpb25zLCBwYXJhbXMpIHsKICAgIHRoaXMudXBkYXRlVG9vbGJhcihvcHRpb25zKTsKICAgIGF3YWl0IHRoaXMuI3VpTWFuYWdlci51cGRhdGVNb2RlKG9wdGlvbnMubW9kZSk7CiAgICBjb25zdCB7CiAgICAgIG9mZnNldFgsCiAgICAgIG9mZnNldFkKICAgIH0gPSB0aGlzLiNnZXRDZW50ZXJQb2ludCgpOwogICAgY29uc3QgaWQgPSB0aGlzLmdldE5leHRJZCgpOwogICAgY29uc3QgZWRpdG9yID0gdGhpcy4jY3JlYXRlTmV3RWRpdG9yKHsKICAgICAgcGFyZW50OiB0aGlzLAogICAgICBpZCwKICAgICAgeDogb2Zmc2V0WCwKICAgICAgeTogb2Zmc2V0WSwKICAgICAgdWlNYW5hZ2VyOiB0aGlzLiN1aU1hbmFnZXIsCiAgICAgIGlzQ2VudGVyZWQ6IHRydWUsCiAgICAgIC4uLnBhcmFtcwogICAgfSk7CiAgICBpZiAoZWRpdG9yKSB7CiAgICAgIHRoaXMuYWRkKGVkaXRvcik7CiAgICB9CiAgfQogIGFzeW5jIGRlc2VyaWFsaXplKGRhdGEpIHsKICAgIHJldHVybiAoYXdhaXQgQW5ub3RhdGlvbkVkaXRvckxheWVyLiNlZGl0b3JUeXBlcy5nZXQoZGF0YS5hbm5vdGF0aW9uVHlwZSA/PyBkYXRhLmFubm90YXRpb25FZGl0b3JUeXBlKT8uZGVzZXJpYWxpemUoZGF0YSwgdGhpcywgdGhpcy4jdWlNYW5hZ2VyKSkgfHwgbnVsbDsKICB9CiAgY3JlYXRlQW5kQWRkTmV3RWRpdG9yKGV2ZW50LCBpc0NlbnRlcmVkLCBkYXRhID0ge30pIHsKICAgIGNvbnN0IGlkID0gdGhpcy5nZXROZXh0SWQoKTsKICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuI2NyZWF0ZU5ld0VkaXRvcih7CiAgICAgIHBhcmVudDogdGhpcywKICAgICAgaWQsCiAgICAgIHg6IGV2ZW50Lm9mZnNldFgsCiAgICAgIHk6IGV2ZW50Lm9mZnNldFksCiAgICAgIHVpTWFuYWdlcjogdGhpcy4jdWlNYW5hZ2VyLAogICAgICBpc0NlbnRlcmVkLAogICAgICAuLi5kYXRhCiAgICB9KTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgdGhpcy5hZGQoZWRpdG9yKTsKICAgIH0KICAgIHJldHVybiBlZGl0b3I7CiAgfQogIGdldCBib3VuZGluZ0NsaWVudFJlY3QoKSB7CiAgICByZXR1cm4gdGhpcy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgfQogICNnZXRDZW50ZXJQb2ludCgpIHsKICAgIGNvbnN0IHsKICAgICAgeCwKICAgICAgeSwKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfSA9IHRoaXMuYm91bmRpbmdDbGllbnRSZWN0OwogICAgY29uc3QgdGxYID0gTWF0aC5tYXgoMCwgeCk7CiAgICBjb25zdCB0bFkgPSBNYXRoLm1heCgwLCB5KTsKICAgIGNvbnN0IGJyWCA9IE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoLCB4ICsgd2lkdGgpOwogICAgY29uc3QgYnJZID0gTWF0aC5taW4od2luZG93LmlubmVySGVpZ2h0LCB5ICsgaGVpZ2h0KTsKICAgIGNvbnN0IGNlbnRlclggPSAodGxYICsgYnJYKSAvIDIgLSB4OwogICAgY29uc3QgY2VudGVyWSA9ICh0bFkgKyBiclkpIC8gMiAtIHk7CiAgICBjb25zdCBbb2Zmc2V0WCwgb2Zmc2V0WV0gPSB0aGlzLnZpZXdwb3J0LnJvdGF0aW9uICUgMTgwID09PSAwID8gW2NlbnRlclgsIGNlbnRlclldIDogW2NlbnRlclksIGNlbnRlclhdOwogICAgcmV0dXJuIHsKICAgICAgb2Zmc2V0WCwKICAgICAgb2Zmc2V0WQogICAgfTsKICB9CiAgYWRkTmV3RWRpdG9yKGRhdGEgPSB7fSkgewogICAgdGhpcy5jcmVhdGVBbmRBZGROZXdFZGl0b3IodGhpcy4jZ2V0Q2VudGVyUG9pbnQoKSwgdHJ1ZSwgZGF0YSk7CiAgfQogIHNldFNlbGVjdGVkKGVkaXRvcikgewogICAgdGhpcy4jdWlNYW5hZ2VyLnNldFNlbGVjdGVkKGVkaXRvcik7CiAgfQogIHRvZ2dsZVNlbGVjdGVkKGVkaXRvcikgewogICAgdGhpcy4jdWlNYW5hZ2VyLnRvZ2dsZVNlbGVjdGVkKGVkaXRvcik7CiAgfQogIHVuc2VsZWN0KGVkaXRvcikgewogICAgdGhpcy4jdWlNYW5hZ2VyLnVuc2VsZWN0KGVkaXRvcik7CiAgfQogIHBvaW50ZXJ1cChldmVudCkgewogICAgY29uc3QgewogICAgICBpc01hYwogICAgfSA9IHV0aWxfRmVhdHVyZVRlc3QucGxhdGZvcm07CiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwIHx8IGV2ZW50LmN0cmxLZXkgJiYgaXNNYWMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gdGhpcy5kaXYpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCF0aGlzLiNoYWRQb2ludGVyRG93bikgewogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiNoYWRQb2ludGVyRG93biA9IGZhbHNlOwogICAgaWYgKHRoaXMuI2N1cnJlbnRFZGl0b3JUeXBlPy5pc0RyYXdlciAmJiB0aGlzLiNjdXJyZW50RWRpdG9yVHlwZS5zdXBwb3J0TXVsdGlwbGVEcmF3aW5ncykgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXRoaXMuI2FsbG93Q2xpY2spIHsKICAgICAgdGhpcy4jYWxsb3dDbGljayA9IHRydWU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gdGhpcy4jdWlNYW5hZ2VyLmdldE1vZGUoKTsKICAgIGlmIChjdXJyZW50TW9kZSA9PT0gQW5ub3RhdGlvbkVkaXRvclR5cGUuU1RBTVAgfHwgY3VycmVudE1vZGUgPT09IEFubm90YXRpb25FZGl0b3JUeXBlLlNJR05BVFVSRSkgewogICAgICB0aGlzLiN1aU1hbmFnZXIudW5zZWxlY3RBbGwoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5jcmVhdGVBbmRBZGROZXdFZGl0b3IoZXZlbnQsIGZhbHNlKTsKICB9CiAgcG9pbnRlcmRvd24oZXZlbnQpIHsKICAgIGlmICh0aGlzLiN1aU1hbmFnZXIuZ2V0TW9kZSgpID09PSBBbm5vdGF0aW9uRWRpdG9yVHlwZS5ISUdITElHSFQpIHsKICAgICAgdGhpcy5lbmFibGVUZXh0U2VsZWN0aW9uKCk7CiAgICB9CiAgICBpZiAodGhpcy4jaGFkUG9pbnRlckRvd24pIHsKICAgICAgdGhpcy4jaGFkUG9pbnRlckRvd24gPSBmYWxzZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgewogICAgICBpc01hYwogICAgfSA9IHV0aWxfRmVhdHVyZVRlc3QucGxhdGZvcm07CiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwIHx8IGV2ZW50LmN0cmxLZXkgJiYgaXNNYWMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gdGhpcy5kaXYpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jaGFkUG9pbnRlckRvd24gPSB0cnVlOwogICAgaWYgKHRoaXMuI2N1cnJlbnRFZGl0b3JUeXBlPy5pc0RyYXdlcikgewogICAgICB0aGlzLnN0YXJ0RHJhd2luZ1Nlc3Npb24oZXZlbnQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLiN1aU1hbmFnZXIuZ2V0QWN0aXZlKCk7CiAgICB0aGlzLiNhbGxvd0NsaWNrID0gIWVkaXRvciB8fCBlZGl0b3IuaXNFbXB0eSgpOwogIH0KICBzdGFydERyYXdpbmdTZXNzaW9uKGV2ZW50KSB7CiAgICB0aGlzLmRpdi5mb2N1cyh7CiAgICAgIHByZXZlbnRTY3JvbGw6IHRydWUKICAgIH0pOwogICAgaWYgKHRoaXMuI2RyYXdpbmdBQykgewogICAgICB0aGlzLiNjdXJyZW50RWRpdG9yVHlwZS5zdGFydERyYXdpbmcodGhpcywgdGhpcy4jdWlNYW5hZ2VyLCBmYWxzZSwgZXZlbnQpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLiN1aU1hbmFnZXIuc2V0Q3VycmVudERyYXdpbmdTZXNzaW9uKHRoaXMpOwogICAgdGhpcy4jZHJhd2luZ0FDID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgY29uc3Qgc2lnbmFsID0gdGhpcy4jdWlNYW5hZ2VyLmNvbWJpbmVkU2lnbmFsKHRoaXMuI2RyYXdpbmdBQyk7CiAgICB0aGlzLmRpdi5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKHsKICAgICAgcmVsYXRlZFRhcmdldAogICAgfSkgPT4gewogICAgICBpZiAocmVsYXRlZFRhcmdldCAmJiAhdGhpcy5kaXYuY29udGFpbnMocmVsYXRlZFRhcmdldCkpIHsKICAgICAgICB0aGlzLiNmb2N1c2VkRWxlbWVudCA9IG51bGw7CiAgICAgICAgdGhpcy5jb21taXRPclJlbW92ZSgpOwogICAgICB9CiAgICB9LCB7CiAgICAgIHNpZ25hbAogICAgfSk7CiAgICB0aGlzLiNjdXJyZW50RWRpdG9yVHlwZS5zdGFydERyYXdpbmcodGhpcywgdGhpcy4jdWlNYW5hZ2VyLCBmYWxzZSwgZXZlbnQpOwogIH0KICBwYXVzZShvbikgewogICAgaWYgKG9uKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBhY3RpdmVFbGVtZW50CiAgICAgIH0gPSBkb2N1bWVudDsKICAgICAgaWYgKHRoaXMuZGl2LmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQpKSB7CiAgICAgICAgdGhpcy4jZm9jdXNlZEVsZW1lbnQgPSBhY3RpdmVFbGVtZW50OwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh0aGlzLiNmb2N1c2VkRWxlbWVudCkgewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0aGlzLiNmb2N1c2VkRWxlbWVudD8uZm9jdXMoKTsKICAgICAgICB0aGlzLiNmb2N1c2VkRWxlbWVudCA9IG51bGw7CiAgICAgIH0sIDApOwogICAgfQogIH0KICBlbmREcmF3aW5nU2Vzc2lvbihpc0Fib3J0ZWQgPSBmYWxzZSkgewogICAgaWYgKCF0aGlzLiNkcmF3aW5nQUMpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB0aGlzLiN1aU1hbmFnZXIuc2V0Q3VycmVudERyYXdpbmdTZXNzaW9uKG51bGwpOwogICAgdGhpcy4jZHJhd2luZ0FDLmFib3J0KCk7CiAgICB0aGlzLiNkcmF3aW5nQUMgPSBudWxsOwogICAgdGhpcy4jZm9jdXNlZEVsZW1lbnQgPSBudWxsOwogICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRFZGl0b3JUeXBlLmVuZERyYXdpbmcoaXNBYm9ydGVkKTsKICB9CiAgZmluZE5ld1BhcmVudChlZGl0b3IsIHgsIHkpIHsKICAgIGNvbnN0IGxheWVyID0gdGhpcy4jdWlNYW5hZ2VyLmZpbmRQYXJlbnQoeCwgeSk7CiAgICBpZiAobGF5ZXIgPT09IG51bGwgfHwgbGF5ZXIgPT09IHRoaXMpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgbGF5ZXIuY2hhbmdlUGFyZW50KGVkaXRvcik7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgY29tbWl0T3JSZW1vdmUoKSB7CiAgICBpZiAodGhpcy4jZHJhd2luZ0FDKSB7CiAgICAgIHRoaXMuZW5kRHJhd2luZ1Nlc3Npb24oKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIG9uU2NhbGVDaGFuZ2luZygpIHsKICAgIGlmICghdGhpcy4jZHJhd2luZ0FDKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuI2N1cnJlbnRFZGl0b3JUeXBlLm9uU2NhbGVDaGFuZ2luZ1doZW5EcmF3aW5nKHRoaXMpOwogIH0KICBkZXN0cm95KCkgewogICAgdGhpcy5jb21taXRPclJlbW92ZSgpOwogICAgaWYgKHRoaXMuI3VpTWFuYWdlci5nZXRBY3RpdmUoKT8ucGFyZW50ID09PSB0aGlzKSB7CiAgICAgIHRoaXMuI3VpTWFuYWdlci5jb21taXRPclJlbW92ZSgpOwogICAgICB0aGlzLiN1aU1hbmFnZXIuc2V0QWN0aXZlRWRpdG9yKG51bGwpOwogICAgfQogICAgaWYgKHRoaXMuI2VkaXRvckZvY3VzVGltZW91dElkKSB7CiAgICAgIGNsZWFyVGltZW91dCh0aGlzLiNlZGl0b3JGb2N1c1RpbWVvdXRJZCk7CiAgICAgIHRoaXMuI2VkaXRvckZvY3VzVGltZW91dElkID0gbnVsbDsKICAgIH0KICAgIGZvciAoY29uc3QgZWRpdG9yIG9mIHRoaXMuI2VkaXRvcnMudmFsdWVzKCkpIHsKICAgICAgdGhpcy4jYWNjZXNzaWJpbGl0eU1hbmFnZXI/LnJlbW92ZVBvaW50ZXJJblRleHRMYXllcihlZGl0b3IuY29udGVudERpdik7CiAgICAgIGVkaXRvci5zZXRQYXJlbnQobnVsbCk7CiAgICAgIGVkaXRvci5pc0F0dGFjaGVkVG9ET00gPSBmYWxzZTsKICAgICAgZWRpdG9yLmRpdi5yZW1vdmUoKTsKICAgIH0KICAgIHRoaXMuZGl2ID0gbnVsbDsKICAgIHRoaXMuI2VkaXRvcnMuY2xlYXIoKTsKICAgIHRoaXMuI3VpTWFuYWdlci5yZW1vdmVMYXllcih0aGlzKTsKICB9CiAgI2NsZWFudXAoKSB7CiAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiB0aGlzLiNlZGl0b3JzLnZhbHVlcygpKSB7CiAgICAgIGlmIChlZGl0b3IuaXNFbXB0eSgpKSB7CiAgICAgICAgZWRpdG9yLnJlbW92ZSgpOwogICAgICB9CiAgICB9CiAgfQogIHJlbmRlcih7CiAgICB2aWV3cG9ydAogIH0pIHsKICAgIHRoaXMudmlld3BvcnQgPSB2aWV3cG9ydDsKICAgIHNldExheWVyRGltZW5zaW9ucyh0aGlzLmRpdiwgdmlld3BvcnQpOwogICAgZm9yIChjb25zdCBlZGl0b3Igb2YgdGhpcy4jdWlNYW5hZ2VyLmdldEVkaXRvcnModGhpcy5wYWdlSW5kZXgpKSB7CiAgICAgIHRoaXMuYWRkKGVkaXRvcik7CiAgICAgIGVkaXRvci5yZWJ1aWxkKCk7CiAgICB9CiAgICB0aGlzLnVwZGF0ZU1vZGUoKTsKICB9CiAgdXBkYXRlKHsKICAgIHZpZXdwb3J0CiAgfSkgewogICAgdGhpcy4jdWlNYW5hZ2VyLmNvbW1pdE9yUmVtb3ZlKCk7CiAgICB0aGlzLiNjbGVhbnVwKCk7CiAgICBjb25zdCBvbGRSb3RhdGlvbiA9IHRoaXMudmlld3BvcnQucm90YXRpb247CiAgICBjb25zdCByb3RhdGlvbiA9IHZpZXdwb3J0LnJvdGF0aW9uOwogICAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0OwogICAgc2V0TGF5ZXJEaW1lbnNpb25zKHRoaXMuZGl2LCB7CiAgICAgIHJvdGF0aW9uCiAgICB9KTsKICAgIGlmIChvbGRSb3RhdGlvbiAhPT0gcm90YXRpb24pIHsKICAgICAgZm9yIChjb25zdCBlZGl0b3Igb2YgdGhpcy4jZWRpdG9ycy52YWx1ZXMoKSkgewogICAgICAgIGVkaXRvci5yb3RhdGUocm90YXRpb24pOwogICAgICB9CiAgICB9CiAgfQogIGdldCBwYWdlRGltZW5zaW9ucygpIHsKICAgIGNvbnN0IHsKICAgICAgcGFnZVdpZHRoLAogICAgICBwYWdlSGVpZ2h0CiAgICB9ID0gdGhpcy52aWV3cG9ydC5yYXdEaW1zOwogICAgcmV0dXJuIFtwYWdlV2lkdGgsIHBhZ2VIZWlnaHRdOwogIH0KICBnZXQgc2NhbGUoKSB7CiAgICByZXR1cm4gdGhpcy4jdWlNYW5hZ2VyLnZpZXdQYXJhbWV0ZXJzLnJlYWxTY2FsZTsKICB9Cn0KCjsvLyAuL3NyYy9kaXNwbGF5L2RyYXdfbGF5ZXIuanMKCgpjbGFzcyBEcmF3TGF5ZXIgewogICNwYXJlbnQgPSBudWxsOwogICNtYXBwaW5nID0gbmV3IE1hcCgpOwogICN0b1VwZGF0ZSA9IG5ldyBNYXAoKTsKICBzdGF0aWMgI2lkID0gMDsKICBjb25zdHJ1Y3Rvcih7CiAgICBwYWdlSW5kZXgKICB9KSB7CiAgICB0aGlzLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDsKICB9CiAgc2V0UGFyZW50KHBhcmVudCkgewogICAgaWYgKCF0aGlzLiNwYXJlbnQpIHsKICAgICAgdGhpcy4jcGFyZW50ID0gcGFyZW50OwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGhpcy4jcGFyZW50ICE9PSBwYXJlbnQpIHsKICAgICAgaWYgKHRoaXMuI21hcHBpbmcuc2l6ZSA+IDApIHsKICAgICAgICBmb3IgKGNvbnN0IHJvb3Qgb2YgdGhpcy4jbWFwcGluZy52YWx1ZXMoKSkgewogICAgICAgICAgcm9vdC5yZW1vdmUoKTsKICAgICAgICAgIHBhcmVudC5hcHBlbmQocm9vdCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuI3BhcmVudCA9IHBhcmVudDsKICAgIH0KICB9CiAgc3RhdGljIGdldCBfc3ZnRmFjdG9yeSgpIHsKICAgIHJldHVybiBzaGFkb3codGhpcywgIl9zdmdGYWN0b3J5IiwgbmV3IERPTVNWR0ZhY3RvcnkoKSk7CiAgfQogIHN0YXRpYyAjc2V0Qm94KGVsZW1lbnQsIFt4LCB5LCB3aWR0aCwgaGVpZ2h0XSkgewogICAgY29uc3QgewogICAgICBzdHlsZQogICAgfSA9IGVsZW1lbnQ7CiAgICBzdHlsZS50b3AgPSBgJHsxMDAgKiB5fSVgOwogICAgc3R5bGUubGVmdCA9IGAkezEwMCAqIHh9JWA7CiAgICBzdHlsZS53aWR0aCA9IGAkezEwMCAqIHdpZHRofSVgOwogICAgc3R5bGUuaGVpZ2h0ID0gYCR7MTAwICogaGVpZ2h0fSVgOwogIH0KICAjY3JlYXRlU1ZHKCkgewogICAgY29uc3Qgc3ZnID0gRHJhd0xheWVyLl9zdmdGYWN0b3J5LmNyZWF0ZSgxLCAxLCB0cnVlKTsKICAgIHRoaXMuI3BhcmVudC5hcHBlbmQoc3ZnKTsKICAgIHN2Zy5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwgdHJ1ZSk7CiAgICByZXR1cm4gc3ZnOwogIH0KICAjY3JlYXRlQ2xpcFBhdGgoZGVmcywgcGF0aElkKSB7CiAgICBjb25zdCBjbGlwUGF0aCA9IERyYXdMYXllci5fc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJjbGlwUGF0aCIpOwogICAgZGVmcy5hcHBlbmQoY2xpcFBhdGgpOwogICAgY29uc3QgY2xpcFBhdGhJZCA9IGBjbGlwXyR7cGF0aElkfWA7CiAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGUoImlkIiwgY2xpcFBhdGhJZCk7CiAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGUoImNsaXBQYXRoVW5pdHMiLCAib2JqZWN0Qm91bmRpbmdCb3giKTsKICAgIGNvbnN0IGNsaXBQYXRoVXNlID0gRHJhd0xheWVyLl9zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInVzZSIpOwogICAgY2xpcFBhdGguYXBwZW5kKGNsaXBQYXRoVXNlKTsKICAgIGNsaXBQYXRoVXNlLnNldEF0dHJpYnV0ZSgiaHJlZiIsIGAjJHtwYXRoSWR9YCk7CiAgICBjbGlwUGF0aFVzZS5jbGFzc0xpc3QuYWRkKCJjbGlwIik7CiAgICByZXR1cm4gY2xpcFBhdGhJZDsKICB9CiAgI3VwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCwgcHJvcGVydGllcykgewogICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpIHsKICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7CiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KICBkcmF3KHByb3BlcnRpZXMsIGlzUGF0aFVwZGF0YWJsZSA9IGZhbHNlLCBoYXNDbGlwID0gZmFsc2UpIHsKICAgIGNvbnN0IGlkID0gRHJhd0xheWVyLiNpZCsrOwogICAgY29uc3Qgcm9vdCA9IHRoaXMuI2NyZWF0ZVNWRygpOwogICAgY29uc3QgZGVmcyA9IERyYXdMYXllci5fc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJkZWZzIik7CiAgICByb290LmFwcGVuZChkZWZzKTsKICAgIGNvbnN0IHBhdGggPSBEcmF3TGF5ZXIuX3N2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgicGF0aCIpOwogICAgZGVmcy5hcHBlbmQocGF0aCk7CiAgICBjb25zdCBwYXRoSWQgPSBgcGF0aF9wJHt0aGlzLnBhZ2VJbmRleH1fJHtpZH1gOwogICAgcGF0aC5zZXRBdHRyaWJ1dGUoImlkIiwgcGF0aElkKTsKICAgIHBhdGguc2V0QXR0cmlidXRlKCJ2ZWN0b3ItZWZmZWN0IiwgIm5vbi1zY2FsaW5nLXN0cm9rZSIpOwogICAgaWYgKGlzUGF0aFVwZGF0YWJsZSkgewogICAgICB0aGlzLiN0b1VwZGF0ZS5zZXQoaWQsIHBhdGgpOwogICAgfQogICAgY29uc3QgY2xpcFBhdGhJZCA9IGhhc0NsaXAgPyB0aGlzLiNjcmVhdGVDbGlwUGF0aChkZWZzLCBwYXRoSWQpIDogbnVsbDsKICAgIGNvbnN0IHVzZSA9IERyYXdMYXllci5fc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJ1c2UiKTsKICAgIHJvb3QuYXBwZW5kKHVzZSk7CiAgICB1c2Uuc2V0QXR0cmlidXRlKCJocmVmIiwgYCMke3BhdGhJZH1gKTsKICAgIHRoaXMudXBkYXRlUHJvcGVydGllcyhyb290LCBwcm9wZXJ0aWVzKTsKICAgIHRoaXMuI21hcHBpbmcuc2V0KGlkLCByb290KTsKICAgIHJldHVybiB7CiAgICAgIGlkLAogICAgICBjbGlwUGF0aElkOiBgdXJsKCMke2NsaXBQYXRoSWR9KWAKICAgIH07CiAgfQogIGRyYXdPdXRsaW5lKHByb3BlcnRpZXMsIG11c3RSZW1vdmVTZWxmSW50ZXJzZWN0aW9ucykgewogICAgY29uc3QgaWQgPSBEcmF3TGF5ZXIuI2lkKys7CiAgICBjb25zdCByb290ID0gdGhpcy4jY3JlYXRlU1ZHKCk7CiAgICBjb25zdCBkZWZzID0gRHJhd0xheWVyLl9zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoImRlZnMiKTsKICAgIHJvb3QuYXBwZW5kKGRlZnMpOwogICAgY29uc3QgcGF0aCA9IERyYXdMYXllci5fc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJwYXRoIik7CiAgICBkZWZzLmFwcGVuZChwYXRoKTsKICAgIGNvbnN0IHBhdGhJZCA9IGBwYXRoX3Ake3RoaXMucGFnZUluZGV4fV8ke2lkfWA7CiAgICBwYXRoLnNldEF0dHJpYnV0ZSgiaWQiLCBwYXRoSWQpOwogICAgcGF0aC5zZXRBdHRyaWJ1dGUoInZlY3Rvci1lZmZlY3QiLCAibm9uLXNjYWxpbmctc3Ryb2tlIik7CiAgICBsZXQgbWFza0lkOwogICAgaWYgKG11c3RSZW1vdmVTZWxmSW50ZXJzZWN0aW9ucykgewogICAgICBjb25zdCBtYXNrID0gRHJhd0xheWVyLl9zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoIm1hc2siKTsKICAgICAgZGVmcy5hcHBlbmQobWFzayk7CiAgICAgIG1hc2tJZCA9IGBtYXNrX3Ake3RoaXMucGFnZUluZGV4fV8ke2lkfWA7CiAgICAgIG1hc2suc2V0QXR0cmlidXRlKCJpZCIsIG1hc2tJZCk7CiAgICAgIG1hc2suc2V0QXR0cmlidXRlKCJtYXNrVW5pdHMiLCAib2JqZWN0Qm91bmRpbmdCb3giKTsKICAgICAgY29uc3QgcmVjdCA9IERyYXdMYXllci5fc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJyZWN0Iik7CiAgICAgIG1hc2suYXBwZW5kKHJlY3QpOwogICAgICByZWN0LnNldEF0dHJpYnV0ZSgid2lkdGgiLCAiMSIpOwogICAgICByZWN0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwgIjEiKTsKICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoImZpbGwiLCAid2hpdGUiKTsKICAgICAgY29uc3QgdXNlID0gRHJhd0xheWVyLl9zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInVzZSIpOwogICAgICBtYXNrLmFwcGVuZCh1c2UpOwogICAgICB1c2Uuc2V0QXR0cmlidXRlKCJocmVmIiwgYCMke3BhdGhJZH1gKTsKICAgICAgdXNlLnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwgIm5vbmUiKTsKICAgICAgdXNlLnNldEF0dHJpYnV0ZSgiZmlsbCIsICJibGFjayIpOwogICAgICB1c2Uuc2V0QXR0cmlidXRlKCJmaWxsLXJ1bGUiLCAibm9uemVybyIpOwogICAgICB1c2UuY2xhc3NMaXN0LmFkZCgibWFzayIpOwogICAgfQogICAgY29uc3QgdXNlMSA9IERyYXdMYXllci5fc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJ1c2UiKTsKICAgIHJvb3QuYXBwZW5kKHVzZTEpOwogICAgdXNlMS5zZXRBdHRyaWJ1dGUoImhyZWYiLCBgIyR7cGF0aElkfWApOwogICAgaWYgKG1hc2tJZCkgewogICAgICB1c2UxLnNldEF0dHJpYnV0ZSgibWFzayIsIGB1cmwoIyR7bWFza0lkfSlgKTsKICAgIH0KICAgIGNvbnN0IHVzZTIgPSB1c2UxLmNsb25lTm9kZSgpOwogICAgcm9vdC5hcHBlbmQodXNlMik7CiAgICB1c2UxLmNsYXNzTGlzdC5hZGQoIm1haW5PdXRsaW5lIik7CiAgICB1c2UyLmNsYXNzTGlzdC5hZGQoInNlY29uZGFyeU91dGxpbmUiKTsKICAgIHRoaXMudXBkYXRlUHJvcGVydGllcyhyb290LCBwcm9wZXJ0aWVzKTsKICAgIHRoaXMuI21hcHBpbmcuc2V0KGlkLCByb290KTsKICAgIHJldHVybiBpZDsKICB9CiAgZmluYWxpemVEcmF3KGlkLCBwcm9wZXJ0aWVzKSB7CiAgICB0aGlzLiN0b1VwZGF0ZS5kZWxldGUoaWQpOwogICAgdGhpcy51cGRhdGVQcm9wZXJ0aWVzKGlkLCBwcm9wZXJ0aWVzKTsKICB9CiAgdXBkYXRlUHJvcGVydGllcyhlbGVtZW50T3JJZCwgcHJvcGVydGllcykgewogICAgaWYgKCFwcm9wZXJ0aWVzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsKICAgICAgcm9vdCwKICAgICAgYmJveCwKICAgICAgcm9vdENsYXNzLAogICAgICBwYXRoCiAgICB9ID0gcHJvcGVydGllczsKICAgIGNvbnN0IGVsZW1lbnQgPSB0eXBlb2YgZWxlbWVudE9ySWQgPT09ICJudW1iZXIiID8gdGhpcy4jbWFwcGluZy5nZXQoZWxlbWVudE9ySWQpIDogZWxlbWVudE9ySWQ7CiAgICBpZiAoIWVsZW1lbnQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHJvb3QpIHsKICAgICAgdGhpcy4jdXBkYXRlUHJvcGVydGllcyhlbGVtZW50LCByb290KTsKICAgIH0KICAgIGlmIChiYm94KSB7CiAgICAgIERyYXdMYXllci4jc2V0Qm94KGVsZW1lbnQsIGJib3gpOwogICAgfQogICAgaWYgKHJvb3RDbGFzcykgewogICAgICBjb25zdCB7CiAgICAgICAgY2xhc3NMaXN0CiAgICAgIH0gPSBlbGVtZW50OwogICAgICBmb3IgKGNvbnN0IFtjbGFzc05hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyb290Q2xhc3MpKSB7CiAgICAgICAgY2xhc3NMaXN0LnRvZ2dsZShjbGFzc05hbWUsIHZhbHVlKTsKICAgICAgfQogICAgfQogICAgaWYgKHBhdGgpIHsKICAgICAgY29uc3QgZGVmcyA9IGVsZW1lbnQuZmlyc3RDaGlsZDsKICAgICAgY29uc3QgcGF0aEVsZW1lbnQgPSBkZWZzLmZpcnN0Q2hpbGQ7CiAgICAgIHRoaXMuI3VwZGF0ZVByb3BlcnRpZXMocGF0aEVsZW1lbnQsIHBhdGgpOwogICAgfQogIH0KICB1cGRhdGVQYXJlbnQoaWQsIGxheWVyKSB7CiAgICBpZiAobGF5ZXIgPT09IHRoaXMpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3Qgcm9vdCA9IHRoaXMuI21hcHBpbmcuZ2V0KGlkKTsKICAgIGlmICghcm9vdCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBsYXllci4jcGFyZW50LmFwcGVuZChyb290KTsKICAgIHRoaXMuI21hcHBpbmcuZGVsZXRlKGlkKTsKICAgIGxheWVyLiNtYXBwaW5nLnNldChpZCwgcm9vdCk7CiAgfQogIHJlbW92ZShpZCkgewogICAgdGhpcy4jdG9VcGRhdGUuZGVsZXRlKGlkKTsKICAgIGlmICh0aGlzLiNwYXJlbnQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy4jbWFwcGluZy5nZXQoaWQpLnJlbW92ZSgpOwogICAgdGhpcy4jbWFwcGluZy5kZWxldGUoaWQpOwogIH0KICBkZXN0cm95KCkgewogICAgdGhpcy4jcGFyZW50ID0gbnVsbDsKICAgIGZvciAoY29uc3Qgcm9vdCBvZiB0aGlzLiNtYXBwaW5nLnZhbHVlcygpKSB7CiAgICAgIHJvb3QucmVtb3ZlKCk7CiAgICB9CiAgICB0aGlzLiNtYXBwaW5nLmNsZWFyKCk7CiAgICB0aGlzLiN0b1VwZGF0ZS5jbGVhcigpOwogIH0KfQoKOy8vIC4vc3JjL3BkZi5qcwoKCgoKCgoKCgoKCgoKCgoKewogIGdsb2JhbFRoaXMuX3BkZmpzVGVzdGluZ1V0aWxzID0gewogICAgSGlnaGxpZ2h0T3V0bGluZXI6IEhpZ2hsaWdodE91dGxpbmVyCiAgfTsKfQpnbG9iYWxUaGlzLnBkZmpzTGliID0gewogIEFib3J0RXhjZXB0aW9uOiBBYm9ydEV4Y2VwdGlvbiwKICBBbm5vdGF0aW9uRWRpdG9yTGF5ZXI6IEFubm90YXRpb25FZGl0b3JMYXllciwKICBBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZTogQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUsCiAgQW5ub3RhdGlvbkVkaXRvclR5cGU6IEFubm90YXRpb25FZGl0b3JUeXBlLAogIEFubm90YXRpb25FZGl0b3JVSU1hbmFnZXI6IEFubm90YXRpb25FZGl0b3JVSU1hbmFnZXIsCiAgQW5ub3RhdGlvbkxheWVyOiBBbm5vdGF0aW9uTGF5ZXIsCiAgQW5ub3RhdGlvbk1vZGU6IEFubm90YXRpb25Nb2RlLAogIEFubm90YXRpb25UeXBlOiBBbm5vdGF0aW9uVHlwZSwKICBhcHBseU9wYWNpdHk6IGFwcGx5T3BhY2l0eSwKICBidWlsZDogYnVpbGQsCiAgQ29sb3JQaWNrZXI6IENvbG9yUGlja2VyLAogIGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw6IGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwsCiAgQ1NTQ29uc3RhbnRzOiBDU1NDb25zdGFudHMsCiAgRE9NU1ZHRmFjdG9yeTogRE9NU1ZHRmFjdG9yeSwKICBEcmF3TGF5ZXI6IERyYXdMYXllciwKICBGZWF0dXJlVGVzdDogdXRpbF9GZWF0dXJlVGVzdCwKICBmZXRjaERhdGE6IGZldGNoRGF0YSwKICBmaW5kQ29udHJhc3RDb2xvcjogZmluZENvbnRyYXN0Q29sb3IsCiAgZ2V0RG9jdW1lbnQ6IGdldERvY3VtZW50LAogIGdldEZpbGVuYW1lRnJvbVVybDogZ2V0RmlsZW5hbWVGcm9tVXJsLAogIGdldFBkZkZpbGVuYW1lRnJvbVVybDogZ2V0UGRmRmlsZW5hbWVGcm9tVXJsLAogIGdldFJHQjogZ2V0UkdCLAogIGdldFV1aWQ6IGdldFV1aWQsCiAgZ2V0WGZhUGFnZVZpZXdwb3J0OiBnZXRYZmFQYWdlVmlld3BvcnQsCiAgR2xvYmFsV29ya2VyT3B0aW9uczogR2xvYmFsV29ya2VyT3B0aW9ucywKICBJbWFnZUtpbmQ6IHV0aWxfSW1hZ2VLaW5kLAogIEludmFsaWRQREZFeGNlcHRpb246IEludmFsaWRQREZFeGNlcHRpb24sCiAgaXNEYXRhU2NoZW1lOiBpc0RhdGFTY2hlbWUsCiAgaXNQZGZGaWxlOiBpc1BkZkZpbGUsCiAgaXNWYWxpZEV4cGxpY2l0RGVzdDogaXNWYWxpZEV4cGxpY2l0RGVzdCwKICBNYXRoQ2xhbXA6IE1hdGhDbGFtcCwKICBub0NvbnRleHRNZW51OiBub0NvbnRleHRNZW51LAogIG5vcm1hbGl6ZVVuaWNvZGU6IG5vcm1hbGl6ZVVuaWNvZGUsCiAgT1BTOiBPUFMsCiAgT3V0cHV0U2NhbGU6IE91dHB1dFNjYWxlLAogIFBhc3N3b3JkUmVzcG9uc2VzOiBQYXNzd29yZFJlc3BvbnNlcywKICBQREZEYXRhUmFuZ2VUcmFuc3BvcnQ6IFBERkRhdGFSYW5nZVRyYW5zcG9ydCwKICBQREZEYXRlU3RyaW5nOiBQREZEYXRlU3RyaW5nLAogIFBERldvcmtlcjogUERGV29ya2VyLAogIFBlcm1pc3Npb25GbGFnOiBQZXJtaXNzaW9uRmxhZywKICBQaXhlbHNQZXJJbmNoOiBQaXhlbHNQZXJJbmNoLAogIFJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbjogUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uLAogIHJlbmRlclJpY2hUZXh0OiByZW5kZXJSaWNoVGV4dCwKICBSZXNwb25zZUV4Y2VwdGlvbjogUmVzcG9uc2VFeGNlcHRpb24sCiAgc2V0TGF5ZXJEaW1lbnNpb25zOiBzZXRMYXllckRpbWVuc2lvbnMsCiAgc2hhZG93OiBzaGFkb3csCiAgU2lnbmF0dXJlRXh0cmFjdG9yOiBTaWduYXR1cmVFeHRyYWN0b3IsCiAgc3RvcEV2ZW50OiBzdG9wRXZlbnQsCiAgU3VwcG9ydGVkSW1hZ2VNaW1lVHlwZXM6IFN1cHBvcnRlZEltYWdlTWltZVR5cGVzLAogIFRleHRMYXllcjogVGV4dExheWVyLAogIFRvdWNoTWFuYWdlcjogVG91Y2hNYW5hZ2VyLAogIHVwZGF0ZVVybEhhc2g6IHVwZGF0ZVVybEhhc2gsCiAgVXRpbDogVXRpbCwKICBWZXJib3NpdHlMZXZlbDogVmVyYm9zaXR5TGV2ZWwsCiAgdmVyc2lvbjogdmVyc2lvbiwKICBYZmFMYXllcjogWGZhTGF5ZXIKfTsKCmV4cG9ydCB7IEFib3J0RXhjZXB0aW9uLCBBbm5vdGF0aW9uRWRpdG9yTGF5ZXIsIEFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLCBBbm5vdGF0aW9uRWRpdG9yVHlwZSwgQW5ub3RhdGlvbkVkaXRvclVJTWFuYWdlciwgQW5ub3RhdGlvbkxheWVyLCBBbm5vdGF0aW9uTW9kZSwgQW5ub3RhdGlvblR5cGUsIENTU0NvbnN0YW50cywgQ29sb3JQaWNrZXIsIERPTVNWR0ZhY3RvcnksIERyYXdMYXllciwgdXRpbF9GZWF0dXJlVGVzdCBhcyBGZWF0dXJlVGVzdCwgR2xvYmFsV29ya2VyT3B0aW9ucywgdXRpbF9JbWFnZUtpbmQgYXMgSW1hZ2VLaW5kLCBJbnZhbGlkUERGRXhjZXB0aW9uLCBNYXRoQ2xhbXAsIE9QUywgT3V0cHV0U2NhbGUsIFBERkRhdGFSYW5nZVRyYW5zcG9ydCwgUERGRGF0ZVN0cmluZywgUERGV29ya2VyLCBQYXNzd29yZFJlc3BvbnNlcywgUGVybWlzc2lvbkZsYWcsIFBpeGVsc1BlckluY2gsIFJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbiwgUmVzcG9uc2VFeGNlcHRpb24sIFNpZ25hdHVyZUV4dHJhY3RvciwgU3VwcG9ydGVkSW1hZ2VNaW1lVHlwZXMsIFRleHRMYXllciwgVG91Y2hNYW5hZ2VyLCBVdGlsLCBWZXJib3NpdHlMZXZlbCwgWGZhTGF5ZXIsIGFwcGx5T3BhY2l0eSwgYnVpbGQsIGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwsIGZldGNoRGF0YSwgZmluZENvbnRyYXN0Q29sb3IsIGdldERvY3VtZW50LCBnZXRGaWxlbmFtZUZyb21VcmwsIGdldFBkZkZpbGVuYW1lRnJvbVVybCwgZ2V0UkdCLCBnZXRVdWlkLCBnZXRYZmFQYWdlVmlld3BvcnQsIGlzRGF0YVNjaGVtZSwgaXNQZGZGaWxlLCBpc1ZhbGlkRXhwbGljaXREZXN0LCBub0NvbnRleHRNZW51LCBub3JtYWxpemVVbmljb2RlLCByZW5kZXJSaWNoVGV4dCwgc2V0TGF5ZXJEaW1lbnNpb25zLCBzaGFkb3csIHN0b3BFdmVudCwgdXBkYXRlVXJsSGFzaCwgdmVyc2lvbiB9OwoKLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGRmLm1qcy5tYXA=", import.meta.url);
112
113
  const loadingTask = getDocument({
113
114
  url: src,
114
- cMapUrl: "../../../../node_modules/pdfjs-dist/cmaps/",
115
- iccUrl: "../../../../node_modules/pdfjs-dist/iccs/",
116
- wasmUrl: "../../../../node_modules/pdfjs-dist/wasm/",
117
- standardFontDataUrl: "../../../../node_modules/pdfjs-dist/standard_fonts/",
115
+ cMapUrl: `${baseURL}/cmaps/`,
116
+ iccUrl: `${baseURL}/iccs/`,
117
+ wasmUrl: `${baseURL}/wasm/`,
118
+ standardFontDataUrl: `${baseURL}/standard_fonts/`,
118
119
  pdfBug: isDev,
119
120
  cMapPacked: true,
120
121
  enableXfa: true,