three-nebula 11.0.0 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/three-nebula.cjs +109 -0
  3. package/dist/three-nebula.cjs.map +1 -0
  4. package/dist/three-nebula.mjs +2968 -0
  5. package/dist/three-nebula.mjs.map +1 -0
  6. package/dist/three-nebula.umd.js +109 -0
  7. package/dist/three-nebula.umd.js.map +1 -0
  8. package/package.json +23 -47
  9. package/specs/01-emitter-hierarchy.md +200 -0
  10. package/specs/02-determinism-scrubbing.md +188 -0
  11. package/specs/03-sound-renderer.md +183 -0
  12. package/specs/04-schema-versioning.md +140 -0
  13. package/specs/05-content-addressed-assets.md +288 -0
  14. package/specs/README.md +80 -0
  15. package/build/cjs/behaviour/Alpha.js +0 -189
  16. package/build/cjs/behaviour/Attraction.js +0 -189
  17. package/build/cjs/behaviour/Behaviour.js +0 -253
  18. package/build/cjs/behaviour/Collision.js +0 -146
  19. package/build/cjs/behaviour/Color.js +0 -148
  20. package/build/cjs/behaviour/CrossZone.js +0 -141
  21. package/build/cjs/behaviour/Force.js +0 -126
  22. package/build/cjs/behaviour/Gravity.js +0 -78
  23. package/build/cjs/behaviour/RandomDrift.js +0 -153
  24. package/build/cjs/behaviour/Repulsion.js +0 -123
  25. package/build/cjs/behaviour/Rotate.js +0 -265
  26. package/build/cjs/behaviour/Scale.js +0 -177
  27. package/build/cjs/behaviour/Spring.js +0 -133
  28. package/build/cjs/behaviour/constants.js +0 -28
  29. package/build/cjs/behaviour/index.js +0 -112
  30. package/build/cjs/behaviour/types.js +0 -33
  31. package/build/cjs/constants/index.js +0 -61
  32. package/build/cjs/core/Particle.js +0 -390
  33. package/build/cjs/core/Pool.js +0 -203
  34. package/build/cjs/core/System.js +0 -366
  35. package/build/cjs/core/constants.js +0 -163
  36. package/build/cjs/core/fromJSON.js +0 -128
  37. package/build/cjs/core/fromJSONAsync.js +0 -239
  38. package/build/cjs/core/index.js +0 -32
  39. package/build/cjs/core/three/Euler.js +0 -233
  40. package/build/cjs/core/three/Math.js +0 -91
  41. package/build/cjs/core/three/Matrix4.js +0 -745
  42. package/build/cjs/core/three/Quaternion.js +0 -451
  43. package/build/cjs/core/three/Vector3.js +0 -464
  44. package/build/cjs/core/three/constants.js +0 -298
  45. package/build/cjs/core/three/index.js +0 -48
  46. package/build/cjs/core/types.js +0 -13
  47. package/build/cjs/debug/Debug.js +0 -209
  48. package/build/cjs/debug/constants.js +0 -19
  49. package/build/cjs/debug/index.js +0 -24
  50. package/build/cjs/debug/log.js +0 -38
  51. package/build/cjs/ease/index.js +0 -149
  52. package/build/cjs/emitter/Emitter.js +0 -798
  53. package/build/cjs/emitter/FollowEmitter.js +0 -146
  54. package/build/cjs/emitter/constants.js +0 -20
  55. package/build/cjs/emitter/index.js +0 -24
  56. package/build/cjs/emitter/types.js +0 -11
  57. package/build/cjs/events/EventDispatcher.js +0 -105
  58. package/build/cjs/events/constants.js +0 -23
  59. package/build/cjs/events/index.js +0 -27
  60. package/build/cjs/index.js +0 -151
  61. package/build/cjs/initializer/Body.js +0 -122
  62. package/build/cjs/initializer/BodySprite.js +0 -146
  63. package/build/cjs/initializer/Initializer.js +0 -109
  64. package/build/cjs/initializer/InitializerUtil.js +0 -54
  65. package/build/cjs/initializer/Life.js +0 -106
  66. package/build/cjs/initializer/Mass.js +0 -101
  67. package/build/cjs/initializer/Position.js +0 -152
  68. package/build/cjs/initializer/Radius.js +0 -118
  69. package/build/cjs/initializer/Rate.js +0 -150
  70. package/build/cjs/initializer/Rotation.js +0 -95
  71. package/build/cjs/initializer/Texture.js +0 -139
  72. package/build/cjs/initializer/Velocity/PolarVelocity.js +0 -102
  73. package/build/cjs/initializer/Velocity/RadialVelocity.js +0 -111
  74. package/build/cjs/initializer/Velocity/VectorVelocity.js +0 -108
  75. package/build/cjs/initializer/Velocity/Velocity.js +0 -94
  76. package/build/cjs/initializer/Velocity/index.js +0 -32
  77. package/build/cjs/initializer/constants.js +0 -43
  78. package/build/cjs/initializer/index.js +0 -108
  79. package/build/cjs/initializer/types.js +0 -37
  80. package/build/cjs/math/ArraySpan.js +0 -103
  81. package/build/cjs/math/Box.js +0 -46
  82. package/build/cjs/math/ColorSpan.js +0 -113
  83. package/build/cjs/math/MathUtils.js +0 -57
  84. package/build/cjs/math/Polar3D.js +0 -115
  85. package/build/cjs/math/Span.js +0 -88
  86. package/build/cjs/math/Vector3D.js +0 -76
  87. package/build/cjs/math/constants.js +0 -35
  88. package/build/cjs/math/index.js +0 -122
  89. package/build/cjs/math/integration.js +0 -59
  90. package/build/cjs/math/types.js +0 -19
  91. package/build/cjs/renderer/BaseRenderer.js +0 -108
  92. package/build/cjs/renderer/CustomRenderer.js +0 -65
  93. package/build/cjs/renderer/GPURenderer/Desktop/index.js +0 -371
  94. package/build/cjs/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -13
  95. package/build/cjs/renderer/GPURenderer/Desktop/shaders/index.js +0 -22
  96. package/build/cjs/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -17
  97. package/build/cjs/renderer/GPURenderer/Mobile/index.js +0 -385
  98. package/build/cjs/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -13
  99. package/build/cjs/renderer/GPURenderer/Mobile/shaders/index.js +0 -22
  100. package/build/cjs/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -15
  101. package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -58
  102. package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -93
  103. package/build/cjs/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -9
  104. package/build/cjs/renderer/GPURenderer/common/TextureAtlas/index.js +0 -221
  105. package/build/cjs/renderer/GPURenderer/common/constants.js +0 -22
  106. package/build/cjs/renderer/GPURenderer/common/index.js +0 -38
  107. package/build/cjs/renderer/GPURenderer/common/shaders/constants.js +0 -9
  108. package/build/cjs/renderer/GPURenderer/common/stores/Target.js +0 -45
  109. package/build/cjs/renderer/GPURenderer/common/stores/UniqueList.js +0 -51
  110. package/build/cjs/renderer/GPURenderer/common/stores/index.js +0 -22
  111. package/build/cjs/renderer/GPURenderer/index.js +0 -97
  112. package/build/cjs/renderer/MeshRenderer.js +0 -136
  113. package/build/cjs/renderer/SpriteRenderer.js +0 -68
  114. package/build/cjs/renderer/index.js +0 -40
  115. package/build/cjs/renderer/types.js +0 -21
  116. package/build/cjs/utils/ColorUtil.js +0 -39
  117. package/build/cjs/utils/PUID.js +0 -26
  118. package/build/cjs/utils/THREEUtil.js +0 -40
  119. package/build/cjs/utils/Util.js +0 -69
  120. package/build/cjs/utils/index.js +0 -61
  121. package/build/cjs/utils/uid.js +0 -12
  122. package/build/cjs/zone/BoxZone.js +0 -178
  123. package/build/cjs/zone/LineZone.js +0 -101
  124. package/build/cjs/zone/MeshZone.js +0 -101
  125. package/build/cjs/zone/PointZone.js +0 -99
  126. package/build/cjs/zone/ScreenZone.js +0 -164
  127. package/build/cjs/zone/SphereZone.js +0 -155
  128. package/build/cjs/zone/Zone.js +0 -172
  129. package/build/cjs/zone/index.js +0 -56
  130. package/build/cjs/zone/types.js +0 -21
  131. package/build/esm/behaviour/Alpha.js +0 -134
  132. package/build/esm/behaviour/Attraction.js +0 -135
  133. package/build/esm/behaviour/Behaviour.js +0 -215
  134. package/build/esm/behaviour/Collision.js +0 -100
  135. package/build/esm/behaviour/Color.js +0 -101
  136. package/build/esm/behaviour/CrossZone.js +0 -82
  137. package/build/esm/behaviour/Force.js +0 -83
  138. package/build/esm/behaviour/Gravity.js +0 -40
  139. package/build/esm/behaviour/RandomDrift.js +0 -97
  140. package/build/esm/behaviour/Repulsion.js +0 -81
  141. package/build/esm/behaviour/Rotate.js +0 -214
  142. package/build/esm/behaviour/Scale.js +0 -131
  143. package/build/esm/behaviour/Spring.js +0 -90
  144. package/build/esm/behaviour/constants.js +0 -11
  145. package/build/esm/behaviour/index.js +0 -14
  146. package/build/esm/behaviour/types.js +0 -14
  147. package/build/esm/constants/index.js +0 -42
  148. package/build/esm/core/Particle.js +0 -357
  149. package/build/esm/core/Pool.js +0 -161
  150. package/build/esm/core/System.js +0 -320
  151. package/build/esm/core/constants.js +0 -127
  152. package/build/esm/core/fromJSON.js +0 -107
  153. package/build/esm/core/fromJSONAsync.js +0 -210
  154. package/build/esm/core/index.js +0 -4
  155. package/build/esm/core/three/Euler.js +0 -224
  156. package/build/esm/core/three/Math.js +0 -84
  157. package/build/esm/core/three/Matrix4.js +0 -739
  158. package/build/esm/core/three/Quaternion.js +0 -445
  159. package/build/esm/core/three/Vector3.js +0 -457
  160. package/build/esm/core/three/constants.js +0 -148
  161. package/build/esm/core/three/index.js +0 -5
  162. package/build/esm/core/types.js +0 -4
  163. package/build/esm/debug/Debug.js +0 -195
  164. package/build/esm/debug/constants.js +0 -7
  165. package/build/esm/debug/index.js +0 -3
  166. package/build/esm/debug/log.js +0 -31
  167. package/build/esm/ease/index.js +0 -113
  168. package/build/esm/emitter/Emitter.js +0 -708
  169. package/build/esm/emitter/FollowEmitter.js +0 -97
  170. package/build/esm/emitter/constants.js +0 -7
  171. package/build/esm/emitter/index.js +0 -3
  172. package/build/esm/emitter/types.js +0 -3
  173. package/build/esm/events/EventDispatcher.js +0 -82
  174. package/build/esm/events/constants.js +0 -9
  175. package/build/esm/events/index.js +0 -4
  176. package/build/esm/index.js +0 -13
  177. package/build/esm/initializer/Body.js +0 -83
  178. package/build/esm/initializer/BodySprite.js +0 -108
  179. package/build/esm/initializer/Initializer.js +0 -84
  180. package/build/esm/initializer/InitializerUtil.js +0 -48
  181. package/build/esm/initializer/Life.js +0 -66
  182. package/build/esm/initializer/Mass.js +0 -60
  183. package/build/esm/initializer/Position.js +0 -98
  184. package/build/esm/initializer/Radius.js +0 -75
  185. package/build/esm/initializer/Rate.js +0 -107
  186. package/build/esm/initializer/Rotation.js +0 -54
  187. package/build/esm/initializer/Texture.js +0 -101
  188. package/build/esm/initializer/Velocity/PolarVelocity.js +0 -63
  189. package/build/esm/initializer/Velocity/RadialVelocity.js +0 -72
  190. package/build/esm/initializer/Velocity/VectorVelocity.js +0 -69
  191. package/build/esm/initializer/Velocity/Velocity.js +0 -52
  192. package/build/esm/initializer/Velocity/index.js +0 -4
  193. package/build/esm/initializer/constants.js +0 -26
  194. package/build/esm/initializer/index.js +0 -12
  195. package/build/esm/initializer/types.js +0 -16
  196. package/build/esm/math/ArraySpan.js +0 -62
  197. package/build/esm/math/Box.js +0 -25
  198. package/build/esm/math/ColorSpan.js +0 -71
  199. package/build/esm/math/MathUtils.js +0 -48
  200. package/build/esm/math/Polar3D.js +0 -81
  201. package/build/esm/math/Span.js +0 -63
  202. package/build/esm/math/Vector3D.js +0 -34
  203. package/build/esm/math/constants.js +0 -24
  204. package/build/esm/math/index.js +0 -10
  205. package/build/esm/math/integration.js +0 -47
  206. package/build/esm/math/types.js +0 -7
  207. package/build/esm/renderer/BaseRenderer.js +0 -78
  208. package/build/esm/renderer/CustomRenderer.js +0 -23
  209. package/build/esm/renderer/GPURenderer/Desktop/index.js +0 -357
  210. package/build/esm/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -30
  211. package/build/esm/renderer/GPURenderer/Desktop/shaders/index.js +0 -3
  212. package/build/esm/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -36
  213. package/build/esm/renderer/GPURenderer/Mobile/index.js +0 -375
  214. package/build/esm/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -27
  215. package/build/esm/renderer/GPURenderer/Mobile/shaders/index.js +0 -3
  216. package/build/esm/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -33
  217. package/build/esm/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -30
  218. package/build/esm/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -70
  219. package/build/esm/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -2
  220. package/build/esm/renderer/GPURenderer/common/TextureAtlas/index.js +0 -206
  221. package/build/esm/renderer/GPURenderer/common/constants.js +0 -13
  222. package/build/esm/renderer/GPURenderer/common/index.js +0 -4
  223. package/build/esm/renderer/GPURenderer/common/shaders/constants.js +0 -2
  224. package/build/esm/renderer/GPURenderer/common/stores/Target.js +0 -26
  225. package/build/esm/renderer/GPURenderer/common/stores/UniqueList.js +0 -29
  226. package/build/esm/renderer/GPURenderer/common/stores/index.js +0 -3
  227. package/build/esm/renderer/GPURenderer/index.js +0 -57
  228. package/build/esm/renderer/MeshRenderer.js +0 -93
  229. package/build/esm/renderer/SpriteRenderer.js +0 -30
  230. package/build/esm/renderer/index.js +0 -5
  231. package/build/esm/renderer/types.js +0 -8
  232. package/build/esm/utils/ColorUtil.js +0 -32
  233. package/build/esm/utils/PUID.js +0 -19
  234. package/build/esm/utils/THREEUtil.js +0 -31
  235. package/build/esm/utils/Util.js +0 -60
  236. package/build/esm/utils/index.js +0 -13
  237. package/build/esm/utils/uid.js +0 -3
  238. package/build/esm/zone/BoxZone.js +0 -133
  239. package/build/esm/zone/LineZone.js +0 -61
  240. package/build/esm/zone/MeshZone.js +0 -60
  241. package/build/esm/zone/PointZone.js +0 -59
  242. package/build/esm/zone/ScreenZone.js +0 -116
  243. package/build/esm/zone/SphereZone.js +0 -113
  244. package/build/esm/zone/Zone.js +0 -141
  245. package/build/esm/zone/index.js +0 -7
  246. package/build/esm/zone/types.js +0 -8
  247. package/build/three-nebula.js +0 -2
  248. package/build/three-nebula.js.map +0 -1
@@ -1,464 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Vector3 = Vector3;
7
-
8
- var _Math2 = require("./Math.js");
9
-
10
- var _Quaternion = require("./Quaternion.js");
11
-
12
- /**
13
- * @author mrdoob / http://mrdoob.com/
14
- * @author kile / http://kile.stravaganza.org/
15
- * @author philogb / http://blog.thejit.org/
16
- * @author mikael emtinger / http://gomo.se/
17
- * @author egraether / http://egraether.com/
18
- * @author WestLangley / http://github.com/WestLangley
19
- */
20
- function Vector3(x, y, z) {
21
- this.x = x || 0;
22
- this.y = y || 0;
23
- this.z = z || 0;
24
- }
25
-
26
- Object.assign(Vector3.prototype, {
27
- isVector3: true,
28
- set: function set(x, y, z) {
29
- this.x = x;
30
- this.y = y;
31
- this.z = z;
32
- return this;
33
- },
34
- setScalar: function setScalar(scalar) {
35
- this.x = scalar;
36
- this.y = scalar;
37
- this.z = scalar;
38
- return this;
39
- },
40
- setX: function setX(x) {
41
- this.x = x;
42
- return this;
43
- },
44
- setY: function setY(y) {
45
- this.y = y;
46
- return this;
47
- },
48
- setZ: function setZ(z) {
49
- this.z = z;
50
- return this;
51
- },
52
- setComponent: function setComponent(index, value) {
53
- switch (index) {
54
- case 0:
55
- this.x = value;
56
- break;
57
-
58
- case 1:
59
- this.y = value;
60
- break;
61
-
62
- case 2:
63
- this.z = value;
64
- break;
65
-
66
- default:
67
- throw new Error('index is out of range: ' + index);
68
- }
69
-
70
- return this;
71
- },
72
- getComponent: function getComponent(index) {
73
- switch (index) {
74
- case 0:
75
- return this.x;
76
-
77
- case 1:
78
- return this.y;
79
-
80
- case 2:
81
- return this.z;
82
-
83
- default:
84
- throw new Error('index is out of range: ' + index);
85
- }
86
- },
87
- clone: function clone() {
88
- return new this.constructor(this.x, this.y, this.z);
89
- },
90
- copy: function copy(v) {
91
- this.x = v.x;
92
- this.y = v.y;
93
- this.z = v.z;
94
- return this;
95
- },
96
- add: function add(v, w) {
97
- if (w !== undefined) {
98
- console.warn('THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');
99
- return this.addVectors(v, w);
100
- }
101
-
102
- this.x += v.x;
103
- this.y += v.y;
104
- this.z += v.z;
105
- return this;
106
- },
107
- addScalar: function addScalar(s) {
108
- this.x += s;
109
- this.y += s;
110
- this.z += s;
111
- return this;
112
- },
113
- addVectors: function addVectors(a, b) {
114
- this.x = a.x + b.x;
115
- this.y = a.y + b.y;
116
- this.z = a.z + b.z;
117
- return this;
118
- },
119
- addScaledVector: function addScaledVector(v, s) {
120
- this.x += v.x * s;
121
- this.y += v.y * s;
122
- this.z += v.z * s;
123
- return this;
124
- },
125
- sub: function sub(v, w) {
126
- if (w !== undefined) {
127
- console.warn('THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');
128
- return this.subVectors(v, w);
129
- }
130
-
131
- this.x -= v.x;
132
- this.y -= v.y;
133
- this.z -= v.z;
134
- return this;
135
- },
136
- subScalar: function subScalar(s) {
137
- this.x -= s;
138
- this.y -= s;
139
- this.z -= s;
140
- return this;
141
- },
142
- subVectors: function subVectors(a, b) {
143
- this.x = a.x - b.x;
144
- this.y = a.y - b.y;
145
- this.z = a.z - b.z;
146
- return this;
147
- },
148
- multiply: function multiply(v, w) {
149
- if (w !== undefined) {
150
- console.warn('THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.');
151
- return this.multiplyVectors(v, w);
152
- }
153
-
154
- this.x *= v.x;
155
- this.y *= v.y;
156
- this.z *= v.z;
157
- return this;
158
- },
159
- multiplyScalar: function multiplyScalar(scalar) {
160
- this.x *= scalar;
161
- this.y *= scalar;
162
- this.z *= scalar;
163
- return this;
164
- },
165
- multiplyVectors: function multiplyVectors(a, b) {
166
- this.x = a.x * b.x;
167
- this.y = a.y * b.y;
168
- this.z = a.z * b.z;
169
- return this;
170
- },
171
- applyEuler: function () {
172
- var quaternion = new _Quaternion.Quaternion();
173
- return function applyEuler(euler) {
174
- if (!(euler && euler.isEuler)) {
175
- console.error('THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.');
176
- }
177
-
178
- return this.applyQuaternion(quaternion.setFromEuler(euler));
179
- };
180
- }(),
181
- applyAxisAngle: function () {
182
- var quaternion = new _Quaternion.Quaternion();
183
- return function applyAxisAngle(axis, angle) {
184
- return this.applyQuaternion(quaternion.setFromAxisAngle(axis, angle));
185
- };
186
- }(),
187
- applyMatrix3: function applyMatrix3(m) {
188
- var x = this.x,
189
- y = this.y,
190
- z = this.z;
191
- var e = m.elements;
192
- this.x = e[0] * x + e[3] * y + e[6] * z;
193
- this.y = e[1] * x + e[4] * y + e[7] * z;
194
- this.z = e[2] * x + e[5] * y + e[8] * z;
195
- return this;
196
- },
197
- applyMatrix4: function applyMatrix4(m) {
198
- var x = this.x,
199
- y = this.y,
200
- z = this.z;
201
- var e = m.elements;
202
- var w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);
203
- this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;
204
- this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;
205
- this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;
206
- return this;
207
- },
208
- applyQuaternion: function applyQuaternion(q) {
209
- var x = this.x,
210
- y = this.y,
211
- z = this.z;
212
- var qx = q.x,
213
- qy = q.y,
214
- qz = q.z,
215
- qw = q.w; // calculate quat * vector
216
-
217
- var ix = qw * x + qy * z - qz * y;
218
- var iy = qw * y + qz * x - qx * z;
219
- var iz = qw * z + qx * y - qy * x;
220
- var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat
221
-
222
- this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;
223
- this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;
224
- this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;
225
- return this;
226
- },
227
- project: function project(camera) {
228
- return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);
229
- },
230
- unproject: function unproject(camera) {
231
- return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);
232
- },
233
- transformDirection: function transformDirection(m) {
234
- // input: THREE.Matrix4 affine matrix
235
- // vector interpreted as a direction
236
- var x = this.x,
237
- y = this.y,
238
- z = this.z;
239
- var e = m.elements;
240
- this.x = e[0] * x + e[4] * y + e[8] * z;
241
- this.y = e[1] * x + e[5] * y + e[9] * z;
242
- this.z = e[2] * x + e[6] * y + e[10] * z;
243
- return this.normalize();
244
- },
245
- divide: function divide(v) {
246
- this.x /= v.x;
247
- this.y /= v.y;
248
- this.z /= v.z;
249
- return this;
250
- },
251
- divideScalar: function divideScalar(scalar) {
252
- return this.multiplyScalar(1 / scalar);
253
- },
254
- min: function min(v) {
255
- this.x = Math.min(this.x, v.x);
256
- this.y = Math.min(this.y, v.y);
257
- this.z = Math.min(this.z, v.z);
258
- return this;
259
- },
260
- max: function max(v) {
261
- this.x = Math.max(this.x, v.x);
262
- this.y = Math.max(this.y, v.y);
263
- this.z = Math.max(this.z, v.z);
264
- return this;
265
- },
266
- clamp: function clamp(min, max) {
267
- // assumes min < max, componentwise
268
- this.x = Math.max(min.x, Math.min(max.x, this.x));
269
- this.y = Math.max(min.y, Math.min(max.y, this.y));
270
- this.z = Math.max(min.z, Math.min(max.z, this.z));
271
- return this;
272
- },
273
- clampScalar: function clampScalar(minVal, maxVal) {
274
- this.x = Math.max(minVal, Math.min(maxVal, this.x));
275
- this.y = Math.max(minVal, Math.min(maxVal, this.y));
276
- this.z = Math.max(minVal, Math.min(maxVal, this.z));
277
- return this;
278
- },
279
- clampLength: function clampLength(min, max) {
280
- var length = this.length();
281
- return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));
282
- },
283
- floor: function floor() {
284
- this.x = Math.floor(this.x);
285
- this.y = Math.floor(this.y);
286
- this.z = Math.floor(this.z);
287
- return this;
288
- },
289
- ceil: function ceil() {
290
- this.x = Math.ceil(this.x);
291
- this.y = Math.ceil(this.y);
292
- this.z = Math.ceil(this.z);
293
- return this;
294
- },
295
- round: function round() {
296
- this.x = Math.round(this.x);
297
- this.y = Math.round(this.y);
298
- this.z = Math.round(this.z);
299
- return this;
300
- },
301
- roundToZero: function roundToZero() {
302
- this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);
303
- this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);
304
- this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);
305
- return this;
306
- },
307
- negate: function negate() {
308
- this.x = -this.x;
309
- this.y = -this.y;
310
- this.z = -this.z;
311
- return this;
312
- },
313
- dot: function dot(v) {
314
- return this.x * v.x + this.y * v.y + this.z * v.z;
315
- },
316
- // TODO lengthSquared?
317
- lengthSq: function lengthSq() {
318
- return this.x * this.x + this.y * this.y + this.z * this.z;
319
- },
320
- length: function length() {
321
- return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
322
- },
323
- manhattanLength: function manhattanLength() {
324
- return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);
325
- },
326
- normalize: function normalize() {
327
- return this.divideScalar(this.length() || 1);
328
- },
329
- setLength: function setLength(length) {
330
- return this.normalize().multiplyScalar(length);
331
- },
332
- lerp: function lerp(v, alpha) {
333
- this.x += (v.x - this.x) * alpha;
334
- this.y += (v.y - this.y) * alpha;
335
- this.z += (v.z - this.z) * alpha;
336
- return this;
337
- },
338
- lerpVectors: function lerpVectors(v1, v2, alpha) {
339
- return this.subVectors(v2, v1).multiplyScalar(alpha).add(v1);
340
- },
341
- cross: function cross(v, w) {
342
- if (w !== undefined) {
343
- console.warn('THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.');
344
- return this.crossVectors(v, w);
345
- }
346
-
347
- return this.crossVectors(this, v);
348
- },
349
- crossVectors: function crossVectors(a, b) {
350
- var ax = a.x,
351
- ay = a.y,
352
- az = a.z;
353
- var bx = b.x,
354
- by = b.y,
355
- bz = b.z;
356
- this.x = ay * bz - az * by;
357
- this.y = az * bx - ax * bz;
358
- this.z = ax * by - ay * bx;
359
- return this;
360
- },
361
- projectOnVector: function projectOnVector(vector) {
362
- var scalar = vector.dot(this) / vector.lengthSq();
363
- return this.copy(vector).multiplyScalar(scalar);
364
- },
365
- projectOnPlane: function () {
366
- var v1 = new Vector3();
367
- return function projectOnPlane(planeNormal) {
368
- v1.copy(this).projectOnVector(planeNormal);
369
- return this.sub(v1);
370
- };
371
- }(),
372
- reflect: function () {
373
- // reflect incident vector off plane orthogonal to normal
374
- // normal is assumed to have unit length
375
- var v1 = new Vector3();
376
- return function reflect(normal) {
377
- return this.sub(v1.copy(normal).multiplyScalar(2 * this.dot(normal)));
378
- };
379
- }(),
380
- angleTo: function angleTo(v) {
381
- var theta = this.dot(v) / Math.sqrt(this.lengthSq() * v.lengthSq()); // clamp, to handle numerical problems
382
-
383
- return Math.acos(_Math2._Math.clamp(theta, -1, 1));
384
- },
385
- distanceTo: function distanceTo(v) {
386
- return Math.sqrt(this.distanceToSquared(v));
387
- },
388
- distanceToSquared: function distanceToSquared(v) {
389
- var dx = this.x - v.x,
390
- dy = this.y - v.y,
391
- dz = this.z - v.z;
392
- return dx * dx + dy * dy + dz * dz;
393
- },
394
- manhattanDistanceTo: function manhattanDistanceTo(v) {
395
- return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);
396
- },
397
- setFromSpherical: function setFromSpherical(s) {
398
- return this.setFromSphericalCoords(s.radius, s.phi, s.theta);
399
- },
400
- setFromSphericalCoords: function setFromSphericalCoords(radius, phi, theta) {
401
- var sinPhiRadius = Math.sin(phi) * radius;
402
- this.x = sinPhiRadius * Math.sin(theta);
403
- this.y = Math.cos(phi) * radius;
404
- this.z = sinPhiRadius * Math.cos(theta);
405
- return this;
406
- },
407
- setFromCylindrical: function setFromCylindrical(c) {
408
- return this.setFromCylindricalCoords(c.radius, c.theta, c.y);
409
- },
410
- setFromCylindricalCoords: function setFromCylindricalCoords(radius, theta, y) {
411
- this.x = radius * Math.sin(theta);
412
- this.y = y;
413
- this.z = radius * Math.cos(theta);
414
- return this;
415
- },
416
- setFromMatrixPosition: function setFromMatrixPosition(m) {
417
- var e = m.elements;
418
- this.x = e[12];
419
- this.y = e[13];
420
- this.z = e[14];
421
- return this;
422
- },
423
- setFromMatrixScale: function setFromMatrixScale(m) {
424
- var sx = this.setFromMatrixColumn(m, 0).length();
425
- var sy = this.setFromMatrixColumn(m, 1).length();
426
- var sz = this.setFromMatrixColumn(m, 2).length();
427
- this.x = sx;
428
- this.y = sy;
429
- this.z = sz;
430
- return this;
431
- },
432
- setFromMatrixColumn: function setFromMatrixColumn(m, index) {
433
- return this.fromArray(m.elements, index * 4);
434
- },
435
- equals: function equals(v) {
436
- return v.x === this.x && v.y === this.y && v.z === this.z;
437
- },
438
- fromArray: function fromArray(array, offset) {
439
- if (offset === undefined) offset = 0;
440
- this.x = array[offset];
441
- this.y = array[offset + 1];
442
- this.z = array[offset + 2];
443
- return this;
444
- },
445
- toArray: function toArray(array, offset) {
446
- if (array === undefined) array = [];
447
- if (offset === undefined) offset = 0;
448
- array[offset] = this.x;
449
- array[offset + 1] = this.y;
450
- array[offset + 2] = this.z;
451
- return array;
452
- },
453
- fromBufferAttribute: function fromBufferAttribute(attribute, index, offset) {
454
- if (offset !== undefined) {
455
- console.warn('THREE.Vector3: offset has been removed from .fromBufferAttribute().');
456
- }
457
-
458
- this.x = attribute.getX(index);
459
- this.y = attribute.getY(index);
460
- this.z = attribute.getZ(index);
461
- return this;
462
- }
463
- });
464
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3RocmVlL1ZlY3RvcjMuanMiXSwibmFtZXMiOlsiVmVjdG9yMyIsIngiLCJ5IiwieiIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsImlzVmVjdG9yMyIsInNldCIsInNldFNjYWxhciIsInNjYWxhciIsInNldFgiLCJzZXRZIiwic2V0WiIsInNldENvbXBvbmVudCIsImluZGV4IiwidmFsdWUiLCJFcnJvciIsImdldENvbXBvbmVudCIsImNsb25lIiwiY29uc3RydWN0b3IiLCJjb3B5IiwidiIsImFkZCIsInciLCJ1bmRlZmluZWQiLCJjb25zb2xlIiwid2FybiIsImFkZFZlY3RvcnMiLCJhZGRTY2FsYXIiLCJzIiwiYSIsImIiLCJhZGRTY2FsZWRWZWN0b3IiLCJzdWIiLCJzdWJWZWN0b3JzIiwic3ViU2NhbGFyIiwibXVsdGlwbHkiLCJtdWx0aXBseVZlY3RvcnMiLCJtdWx0aXBseVNjYWxhciIsImFwcGx5RXVsZXIiLCJxdWF0ZXJuaW9uIiwiUXVhdGVybmlvbiIsImV1bGVyIiwiaXNFdWxlciIsImVycm9yIiwiYXBwbHlRdWF0ZXJuaW9uIiwic2V0RnJvbUV1bGVyIiwiYXBwbHlBeGlzQW5nbGUiLCJheGlzIiwiYW5nbGUiLCJzZXRGcm9tQXhpc0FuZ2xlIiwiYXBwbHlNYXRyaXgzIiwibSIsImUiLCJlbGVtZW50cyIsImFwcGx5TWF0cml4NCIsInEiLCJxeCIsInF5IiwicXoiLCJxdyIsIml4IiwiaXkiLCJpeiIsIml3IiwicHJvamVjdCIsImNhbWVyYSIsIm1hdHJpeFdvcmxkSW52ZXJzZSIsInByb2plY3Rpb25NYXRyaXgiLCJ1bnByb2plY3QiLCJwcm9qZWN0aW9uTWF0cml4SW52ZXJzZSIsIm1hdHJpeFdvcmxkIiwidHJhbnNmb3JtRGlyZWN0aW9uIiwibm9ybWFsaXplIiwiZGl2aWRlIiwiZGl2aWRlU2NhbGFyIiwibWluIiwiTWF0aCIsIm1heCIsImNsYW1wIiwiY2xhbXBTY2FsYXIiLCJtaW5WYWwiLCJtYXhWYWwiLCJjbGFtcExlbmd0aCIsImxlbmd0aCIsImZsb29yIiwiY2VpbCIsInJvdW5kIiwicm91bmRUb1plcm8iLCJuZWdhdGUiLCJkb3QiLCJsZW5ndGhTcSIsInNxcnQiLCJtYW5oYXR0YW5MZW5ndGgiLCJhYnMiLCJzZXRMZW5ndGgiLCJsZXJwIiwiYWxwaGEiLCJsZXJwVmVjdG9ycyIsInYxIiwidjIiLCJjcm9zcyIsImNyb3NzVmVjdG9ycyIsImF4IiwiYXkiLCJheiIsImJ4IiwiYnkiLCJieiIsInByb2plY3RPblZlY3RvciIsInZlY3RvciIsInByb2plY3RPblBsYW5lIiwicGxhbmVOb3JtYWwiLCJyZWZsZWN0Iiwibm9ybWFsIiwiYW5nbGVUbyIsInRoZXRhIiwiYWNvcyIsIl9NYXRoIiwiZGlzdGFuY2VUbyIsImRpc3RhbmNlVG9TcXVhcmVkIiwiZHgiLCJkeSIsImR6IiwibWFuaGF0dGFuRGlzdGFuY2VUbyIsInNldEZyb21TcGhlcmljYWwiLCJzZXRGcm9tU3BoZXJpY2FsQ29vcmRzIiwicmFkaXVzIiwicGhpIiwic2luUGhpUmFkaXVzIiwic2luIiwiY29zIiwic2V0RnJvbUN5bGluZHJpY2FsIiwiYyIsInNldEZyb21DeWxpbmRyaWNhbENvb3JkcyIsInNldEZyb21NYXRyaXhQb3NpdGlvbiIsInNldEZyb21NYXRyaXhTY2FsZSIsInN4Iiwic2V0RnJvbU1hdHJpeENvbHVtbiIsInN5Iiwic3oiLCJmcm9tQXJyYXkiLCJlcXVhbHMiLCJhcnJheSIsIm9mZnNldCIsInRvQXJyYXkiLCJmcm9tQnVmZmVyQXR0cmlidXRlIiwiYXR0cmlidXRlIiwiZ2V0WCIsImdldFkiLCJnZXRaIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLFNBQVNBLE9BQVQsQ0FBa0JDLENBQWxCLEVBQXFCQyxDQUFyQixFQUF3QkMsQ0FBeEIsRUFBNEI7QUFFM0IsT0FBS0YsQ0FBTCxHQUFTQSxDQUFDLElB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cEJqQ0MsRUFBQUEsT0FBTyxFQUFFLGlCQUFXRixLQUFYLEVBQWtCQyxNQUFsQixFQUEyQjtBQUVuQyxRQUFLRCxLQUFLLEtBQUt2SCxTQUFmLEVBQTJCdUgsS0FBSyxHQUFHLEVBQVI7QUFDM0IsUUFBS0MsTUFBTSxLQUFLeEgsU0FBaEIsRUFBNEJ3SCxNQUFNLEdBQUcsQ0FBVDtBQUU1QkQsSUFBQUEsS0FBSyxDQUFFQyxNQUFGLENBQUwsR0FBa0IsS0FBS2hKLENBQXZCO0FBQ0ErSSxJQUFBQSxLQUFLLENBQUVDLE1BQU0sR0FBRyxDQUFYLENBQUwsR0FBc0IsS0FBSy9JLENBQTNCO0FBQ0E4SSxJQUFBQSxLQUFLLENBQUVDLE1BQU0sR0FBRyxDQUFYLENBQUwsR0FBc0IsS0FBSzlJLENBQTNCO0FBRUEsV0FBTzZJLEtBQVA7QUFFQSxHQXZxQmdDO0FBeXFCakNHLEVBQUFBLG1CQUFtQixFQUFFLDZCQUFXQyxTQUFYLEVBQXNCckksS0FBdEIsRUFBNkJrSSxNQUE3QixFQUFzQztBQUUxRCxRQUFLQSxNQUFNLEtBQUt4SCxTQUFoQixFQUE0QjtBQUUzQkMsTUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWMscUVBQWQ7QUFFQTs7QUFFRCxTQUFLMUIsQ0FBTCxHQUFTbUosU0FBUyxDQUFDQyxJQUFWLENBQWdCdEksS0FBaEIsQ0FBVDtBQUNBLFNBQUtiLENBQUwsR0FBU2tKLFNBQVMsQ0FBQ0UsSUFBVixDQUFnQnZJLEtBQWhCLENBQVQ7QUFDQSxTQUFLWixDQUFMLEdBQVNpSixTQUFTLENBQUNHLElBQVYsQ0FBZ0J4SSxLQUFoQixDQUFUO0FBRUEsV0FBTyxJQUFQO0FBRUE7QUF2ckJnQyxDQUFsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IF9NYXRoIH0gZnJvbSAnLi9NYXRoLmpzJztcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tICcuL1F1YXRlcm5pb24uanMnO1xuXG4vKipcbiAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vXG4gKiBAYXV0aG9yIGtpbGUgLyBodHRwOi8va2lsZS5zdHJhdmFnYW56YS5vcmcvXG4gKiBAYXV0aG9yIHBoaWxvZ2IgLyBodHRwOi8vYmxvZy50aGVqaXQub3JnL1xuICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS9cbiAqIEBhdXRob3IgZWdyYWV0aGVyIC8gaHR0cDovL2VncmFldGhlci5jb20vXG4gKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXlcbiAqL1xuXG5mdW5jdGlvbiBWZWN0b3IzKCB4LCB5LCB6ICkge1xuXG5cdHRoaXMueCA9IHggfHwgMDtcblx0dGhpcy55ID0geSB8fCAwO1xuXHR0aGlzLnogPSB6IHx8IDA7XG5cbn1cblxuT2JqZWN0LmFzc2lnbiggVmVjdG9yMy5wcm90b3R5cGUsIHtcblxuXHRpc1ZlY3RvcjM6IHRydWUsXG5cblx0c2V0OiBmdW5jdGlvbiAoIHgsIHksIHogKSB7XG5cblx0XHR0aGlzLnggPSB4O1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0dGhpcy56ID0gejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0c2V0U2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHtcblxuXHRcdHRoaXMueCA9IHNjYWxhcjtcblx0XHR0aGlzLnkgPSBzY2FsYXI7XG5cdFx0dGhpcy56ID0gc2NhbGFyO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRYOiBmdW5jdGlvbiAoIHggKSB7XG5cblx0XHR0aGlzLnggPSB4O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRZOiBmdW5jdGlvbiAoIHkgKSB7XG5cblx0XHR0aGlzLnkgPSB5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRaOiBmdW5jdGlvbiAoIHogKSB7XG5cblx0XHR0aGlzLnogPSB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRDb21wb25lbnQ6IGZ1bmN0aW9uICggaW5kZXgsIHZhbHVlICkge1xuXG5cdFx0c3dpdGNoICggaW5kZXggKSB7XG5cblx0XHRcdGNhc2UgMDogdGhpcy54ID0gdmFsdWU7IGJyZWFrO1xuXHRcdFx0Y2FzZSAxOiB0aGlzLnkgPSB2YWx1ZTsgYnJlYWs7XG5cdFx0XHRjYXNlIDI6IHRoaXMueiA9IHZhbHVlOyBicmVhaztcblx0XHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGdldENvbXBvbmVudDogZnVuY3Rpb24gKCBpbmRleCApIHtcblxuXHRcdHN3aXRjaCAoIGluZGV4ICkge1xuXG5cdFx0XHRjYXNlIDA6IHJldHVybiB0aGlzLng7XG5cdFx0XHRjYXNlIDE6IHJldHVybiB0aGlzLnk7XG5cdFx0XHRjYXNlIDI6IHJldHVybiB0aGlzLno7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoICdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBpbmRleCApO1xuXG5cdFx0fVxuXG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvciggdGhpcy54LCB0aGlzLnksIHRoaXMueiApO1xuXG5cdH0sXG5cblx0Y29weTogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0dGhpcy54ID0gdi54O1xuXHRcdHRoaXMueSA9IHYueTtcblx0XHR0aGlzLnogPSB2Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24gKCB2LCB3ICkge1xuXG5cdFx0aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRWZWN0b3JzKCB2LCB3ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggKz0gdi54O1xuXHRcdHRoaXMueSArPSB2Lnk7XG5cdFx0dGhpcy56ICs9IHYuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0YWRkU2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7XG5cblx0XHR0aGlzLnggKz0gcztcblx0XHR0aGlzLnkgKz0gcztcblx0XHR0aGlzLnogKz0gcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0YWRkVmVjdG9yczogZnVuY3Rpb24gKCBhLCBiICkge1xuXG5cdFx0dGhpcy54ID0gYS54ICsgYi54O1xuXHRcdHRoaXMueSA9IGEueSArIGIueTtcblx0XHR0aGlzLnogPSBhLnogKyBiLno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGFkZFNjYWxlZFZlY3RvcjogZnVuY3Rpb24gKCB2LCBzICkge1xuXG5cdFx0dGhpcy54ICs9IHYueCAqIHM7XG5cdFx0dGhpcy55ICs9IHYueSAqIHM7XG5cdFx0dGhpcy56ICs9IHYueiAqIHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHN1YjogZnVuY3Rpb24gKCB2LCB3ICkge1xuXG5cdFx0aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKCB2LCB3ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggLT0gdi54O1xuXHRcdHRoaXMueSAtPSB2Lnk7XG5cdFx0dGhpcy56IC09IHYuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0c3ViU2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7XG5cblx0XHR0aGlzLnggLT0gcztcblx0XHR0aGlzLnkgLT0gcztcblx0XHR0aGlzLnogLT0gcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0c3ViVmVjdG9yczogZnVuY3Rpb24gKCBhLCBiICkge1xuXG5cdFx0dGhpcy54ID0gYS54IC0gYi54O1xuXHRcdHRoaXMueSA9IGEueSAtIGIueTtcblx0XHR0aGlzLnogPSBhLnogLSBiLno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdG11bHRpcGx5OiBmdW5jdGlvbiAoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCAqPSB2Lng7XG5cdFx0dGhpcy55ICo9IHYueTtcblx0XHR0aGlzLnogKj0gdi56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRtdWx0aXBseVNjYWxhcjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7XG5cblx0XHR0aGlzLnggKj0gc2NhbGFyO1xuXHRcdHRoaXMueSAqPSBzY2FsYXI7XG5cdFx0dGhpcy56ICo9IHNjYWxhcjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0bXVsdGlwbHlWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7XG5cblx0XHR0aGlzLnggPSBhLnggKiBiLng7XG5cdFx0dGhpcy55ID0gYS55ICogYi55O1xuXHRcdHRoaXMueiA9IGEueiAqIGIuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0YXBwbHlFdWxlcjogZnVuY3Rpb24gKCkge1xuXG5cdFx0dmFyIHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGFwcGx5RXVsZXIoIGV1bGVyICkge1xuXG5cdFx0XHRpZiAoICEgKCBldWxlciAmJiBldWxlci5pc0V1bGVyICkgKSB7XG5cblx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4nICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uLnNldEZyb21FdWxlciggZXVsZXIgKSApO1xuXG5cdFx0fTtcblxuXHR9KCksXG5cblx0YXBwbHlBeGlzQW5nbGU6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHZhciBxdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcblxuXHRcdHJldHVybiBmdW5jdGlvbiBhcHBseUF4aXNBbmdsZSggYXhpcywgYW5nbGUgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApICk7XG5cblx0XHR9O1xuXG5cdH0oKSxcblxuXHRhcHBseU1hdHJpeDM6IGZ1bmN0aW9uICggbSApIHtcblxuXHRcdHZhciB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56O1xuXHRcdHZhciBlID0gbS5lbGVtZW50cztcblxuXHRcdHRoaXMueCA9IGVbIDAgXSAqIHggKyBlWyAzIF0gKiB5ICsgZVsgNiBdICogejtcblx0XHR0aGlzLnkgPSBlWyAxIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDcgXSAqIHo7XG5cdFx0dGhpcy56ID0gZVsgMiBdICogeCArIGVbIDUgXSAqIHkgKyBlWyA4IF0gKiB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRhcHBseU1hdHJpeDQ6IGZ1bmN0aW9uICggbSApIHtcblxuXHRcdHZhciB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56O1xuXHRcdHZhciBlID0gbS5lbGVtZW50cztcblxuXHRcdHZhciB3ID0gMSAvICggZVsgMyBdICogeCArIGVbIDcgXSAqIHkgKyBlWyAxMSBdICogeiArIGVbIDE1IF0gKTtcblxuXHRcdHRoaXMueCA9ICggZVsgMCBdICogeCArIGVbIDQgXSAqIHkgKyBlWyA4IF0gKiB6ICsgZVsgMTIgXSApICogdztcblx0XHR0aGlzLnkgPSAoIGVbIDEgXSAqIHggKyBlWyA1IF0gKiB5ICsgZVsgOSBdICogeiArIGVbIDEzIF0gKSAqIHc7XG5cdFx0dGhpcy56ID0gKCBlWyAyIF0gKiB4ICsgZVsgNiBdICogeSArIGVbIDEwIF0gKiB6ICsgZVsgMTQgXSApICogdztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0YXBwbHlRdWF0ZXJuaW9uOiBmdW5jdGlvbiAoIHEgKSB7XG5cblx0XHR2YXIgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwgeiA9IHRoaXMuejtcblx0XHR2YXIgcXggPSBxLngsIHF5ID0gcS55LCBxeiA9IHEueiwgcXcgPSBxLnc7XG5cblx0XHQvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY3RvclxuXG5cdFx0dmFyIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5O1xuXHRcdHZhciBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogejtcblx0XHR2YXIgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XG5cdFx0dmFyIGl3ID0gLSBxeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XG5cblx0XHQvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG5cblx0XHR0aGlzLnggPSBpeCAqIHF3ICsgaXcgKiAtIHF4ICsgaXkgKiAtIHF6IC0gaXogKiAtIHF5O1xuXHRcdHRoaXMueSA9IGl5ICogcXcgKyBpdyAqIC0gcXkgKyBpeiAqIC0gcXggLSBpeCAqIC0gcXo7XG5cdFx0dGhpcy56ID0gaXogKiBxdyArIGl3ICogLSBxeiArIGl4ICogLSBxeSAtIGl5ICogLSBxeDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0cHJvamVjdDogZnVuY3Rpb24gKCBjYW1lcmEgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UgKS5hcHBseU1hdHJpeDQoIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0fSxcblxuXHR1bnByb2plY3Q6IGZ1bmN0aW9uICggY2FtZXJhICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2UgKS5hcHBseU1hdHJpeDQoIGNhbWVyYS5tYXRyaXhXb3JsZCApO1xuXG5cdH0sXG5cblx0dHJhbnNmb3JtRGlyZWN0aW9uOiBmdW5jdGlvbiAoIG0gKSB7XG5cblx0XHQvLyBpbnB1dDogVEhSRUUuTWF0cml4NCBhZmZpbmUgbWF0cml4XG5cdFx0Ly8gdmVjdG9yIGludGVycHJldGVkIGFzIGEgZGlyZWN0aW9uXG5cblx0XHR2YXIgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwgeiA9IHRoaXMuejtcblx0XHR2YXIgZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0aGlzLnggPSBlWyAwIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDggXSAqIHo7XG5cdFx0dGhpcy55ID0gZVsgMSBdICogeCArIGVbIDUgXSAqIHkgKyBlWyA5IF0gKiB6O1xuXHRcdHRoaXMueiA9IGVbIDIgXSAqIHggKyBlWyA2IF0gKiB5ICsgZVsgMTAgXSAqIHo7XG5cblx0XHRyZXR1cm4gdGhpcy5ub3JtYWxpemUoKTtcblxuXHR9LFxuXG5cdGRpdmlkZTogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0dGhpcy54IC89IHYueDtcblx0XHR0aGlzLnkgLz0gdi55O1xuXHRcdHRoaXMueiAvPSB2Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGRpdmlkZVNjYWxhcjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xuXG5cdH0sXG5cblx0bWluOiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1pbiggdGhpcy54LCB2LnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1pbiggdGhpcy55LCB2LnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLm1pbiggdGhpcy56LCB2LnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0bWF4OiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1heCggdGhpcy54LCB2LnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggdGhpcy55LCB2LnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLm1heCggdGhpcy56LCB2LnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0Y2xhbXA6IGZ1bmN0aW9uICggbWluLCBtYXggKSB7XG5cblx0XHQvLyBhc3N1bWVzIG1pbiA8IG1heCwgY29tcG9uZW50d2lzZVxuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIG1pbi54LCBNYXRoLm1pbiggbWF4LngsIHRoaXMueCApICk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgoIG1pbi55LCBNYXRoLm1pbiggbWF4LnksIHRoaXMueSApICk7XG5cdFx0dGhpcy56ID0gTWF0aC5tYXgoIG1pbi56LCBNYXRoLm1pbiggbWF4LnosIHRoaXMueiApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGNsYW1wU2NhbGFyOiBmdW5jdGlvbiAoIG1pblZhbCwgbWF4VmFsICkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIG1pblZhbCwgTWF0aC5taW4oIG1heFZhbCwgdGhpcy54ICkgKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggbWluVmFsLCBNYXRoLm1pbiggbWF4VmFsLCB0aGlzLnkgKSApO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KCBtaW5WYWwsIE1hdGgubWluKCBtYXhWYWwsIHRoaXMueiApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGNsYW1wTGVuZ3RoOiBmdW5jdGlvbiAoIG1pbiwgbWF4ICkge1xuXG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoIGxlbmd0aCB8fCAxICkubXVsdGlwbHlTY2FsYXIoIE1hdGgubWF4KCBtaW4sIE1hdGgubWluKCBtYXgsIGxlbmd0aCApICkgKTtcblxuXHR9LFxuXG5cdGZsb29yOiBmdW5jdGlvbiAoKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLmZsb29yKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLmZsb29yKCB0aGlzLnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLmZsb29yKCB0aGlzLnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0Y2VpbDogZnVuY3Rpb24gKCkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5jZWlsKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLmNlaWwoIHRoaXMueSApO1xuXHRcdHRoaXMueiA9IE1hdGguY2VpbCggdGhpcy56ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHJvdW5kOiBmdW5jdGlvbiAoKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLnJvdW5kKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLnJvdW5kKCB0aGlzLnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLnJvdW5kKCB0aGlzLnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0cm91bmRUb1plcm86IGZ1bmN0aW9uICgpIHtcblxuXHRcdHRoaXMueCA9ICggdGhpcy54IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnggKSA6IE1hdGguZmxvb3IoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9ICggdGhpcy55IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnkgKSA6IE1hdGguZmxvb3IoIHRoaXMueSApO1xuXHRcdHRoaXMueiA9ICggdGhpcy56IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnogKSA6IE1hdGguZmxvb3IoIHRoaXMueiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRuZWdhdGU6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHRoaXMueCA9IC0gdGhpcy54O1xuXHRcdHRoaXMueSA9IC0gdGhpcy55O1xuXHRcdHRoaXMueiA9IC0gdGhpcy56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRkb3Q6IGZ1bmN0aW9uICggdiApIHtcblxuXHRcdHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2LnkgKyB0aGlzLnogKiB2Lno7XG5cblx0fSxcblxuXHQvLyBUT0RPIGxlbmd0aFNxdWFyZWQ/XG5cblx0bGVuZ3RoU3E6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLno7XG5cblx0fSxcblxuXHRsZW5ndGg6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBNYXRoLnNxcnQoIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiApO1xuXG5cdH0sXG5cblx0bWFuaGF0dGFuTGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gTWF0aC5hYnMoIHRoaXMueCApICsgTWF0aC5hYnMoIHRoaXMueSApICsgTWF0aC5hYnMoIHRoaXMueiApO1xuXG5cdH0sXG5cblx0bm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoIHRoaXMubGVuZ3RoKCkgfHwgMSApO1xuXG5cdH0sXG5cblx0c2V0TGVuZ3RoOiBmdW5jdGlvbiAoIGxlbmd0aCApIHtcblxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKCBsZW5ndGggKTtcblxuXHR9LFxuXG5cdGxlcnA6IGZ1bmN0aW9uICggdiwgYWxwaGEgKSB7XG5cblx0XHR0aGlzLnggKz0gKCB2LnggLSB0aGlzLnggKSAqIGFscGhhO1xuXHRcdHRoaXMueSArPSAoIHYueSAtIHRoaXMueSApICogYWxwaGE7XG5cdFx0dGhpcy56ICs9ICggdi56IC0gdGhpcy56ICkgKiBhbHBoYTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0bGVycFZlY3RvcnM6IGZ1bmN0aW9uICggdjEsIHYyLCBhbHBoYSApIHtcblxuXHRcdHJldHVybiB0aGlzLnN1YlZlY3RvcnMoIHYyLCB2MSApLm11bHRpcGx5U2NhbGFyKCBhbHBoYSApLmFkZCggdjEgKTtcblxuXHR9LFxuXG5cdGNyb3NzOiBmdW5jdGlvbiAoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcm9zc1ZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNyb3NzVmVjdG9ycyggdGhpcywgdiApO1xuXG5cdH0sXG5cblx0Y3Jvc3NWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7XG5cblx0XHR2YXIgYXggPSBhLngsIGF5ID0gYS55LCBheiA9IGEuejtcblx0XHR2YXIgYnggPSBiLngsIGJ5ID0gYi55LCBieiA9IGIuejtcblxuXHRcdHRoaXMueCA9IGF5ICogYnogLSBheiAqIGJ5O1xuXHRcdHRoaXMueSA9IGF6ICogYnggLSBheCAqIGJ6O1xuXHRcdHRoaXMueiA9IGF4ICogYnkgLSBheSAqIGJ4O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRwcm9qZWN0T25WZWN0b3I6IGZ1bmN0aW9uICggdmVjdG9yICkge1xuXG5cdFx0dmFyIHNjYWxhciA9IHZlY3Rvci5kb3QoIHRoaXMgKSAvIHZlY3Rvci5sZW5ndGhTcSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29weSggdmVjdG9yICkubXVsdGlwbHlTY2FsYXIoIHNjYWxhciApO1xuXG5cdH0sXG5cblx0cHJvamVjdE9uUGxhbmU6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gcHJvamVjdE9uUGxhbmUoIHBsYW5lTm9ybWFsICkge1xuXG5cdFx0XHR2MS5jb3B5KCB0aGlzICkucHJvamVjdE9uVmVjdG9yKCBwbGFuZU5vcm1hbCApO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5zdWIoIHYxICk7XG5cblx0XHR9O1xuXG5cdH0oKSxcblxuXHRyZWZsZWN0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHQvLyByZWZsZWN0IGluY2lkZW50IHZlY3RvciBvZmYgcGxhbmUgb3J0aG9nb25hbCB0byBub3JtYWxcblx0XHQvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBoYXZlIHVuaXQgbGVuZ3RoXG5cblx0XHR2YXIgdjEgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIHJlZmxlY3QoIG5vcm1hbCApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuc3ViKCB2MS5jb3B5KCBub3JtYWwgKS5tdWx0aXBseVNjYWxhciggMiAqIHRoaXMuZG90KCBub3JtYWwgKSApICk7XG5cblx0XHR9O1xuXG5cdH0oKSxcblxuXHRhbmdsZVRvOiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHR2YXIgdGhldGEgPSB0aGlzLmRvdCggdiApIC8gKCBNYXRoLnNxcnQoIHRoaXMubGVuZ3RoU3EoKSAqIHYubGVuZ3RoU3EoKSApICk7XG5cblx0XHQvLyBjbGFtcCwgdG8gaGFuZGxlIG51bWVyaWNhbCBwcm9ibGVtc1xuXG5cdFx0cmV0dXJuIE1hdGguYWNvcyggX01hdGguY2xhbXAoIHRoZXRhLCAtIDEsIDEgKSApO1xuXG5cdH0sXG5cblx0ZGlzdGFuY2VUbzogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy5kaXN0YW5jZVRvU3F1YXJlZCggdiApICk7XG5cblx0fSxcblxuXHRkaXN0YW5jZVRvU3F1YXJlZDogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0dmFyIGR4ID0gdGhpcy54IC0gdi54LCBkeSA9IHRoaXMueSAtIHYueSwgZHogPSB0aGlzLnogLSB2Lno7XG5cblx0XHRyZXR1cm4gZHggKiBkeCArIGR5ICogZHkgKyBkeiAqIGR6O1xuXG5cdH0sXG5cblx0bWFuaGF0dGFuRGlzdGFuY2VUbzogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0cmV0dXJuIE1hdGguYWJzKCB0aGlzLnggLSB2LnggKSArIE1hdGguYWJzKCB0aGlzLnkgLSB2LnkgKSArIE1hdGguYWJzKCB0aGlzLnogLSB2LnogKTtcblxuXHR9LFxuXG5cdHNldEZyb21TcGhlcmljYWw6IGZ1bmN0aW9uICggcyApIHtcblxuXHRcdHJldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHMoIHMucmFkaXVzLCBzLnBoaSwgcy50aGV0YSApO1xuXG5cdH0sXG5cblx0c2V0RnJvbVNwaGVyaWNhbENvb3JkczogZnVuY3Rpb24gKCByYWRpdXMsIHBoaSwgdGhldGEgKSB7XG5cblx0XHR2YXIgc2luUGhpUmFkaXVzID0gTWF0aC5zaW4oIHBoaSApICogcmFkaXVzO1xuXG5cdFx0dGhpcy54ID0gc2luUGhpUmFkaXVzICogTWF0aC5zaW4oIHRoZXRhICk7XG5cdFx0dGhpcy55ID0gTWF0aC5jb3MoIHBoaSApICogcmFkaXVzO1xuXHRcdHRoaXMueiA9IHNpblBoaVJhZGl1cyAqIE1hdGguY29zKCB0aGV0YSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRGcm9tQ3lsaW5kcmljYWw6IGZ1bmN0aW9uICggYyApIHtcblxuXHRcdHJldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3JkcyggYy5yYWRpdXMsIGMudGhldGEsIGMueSApO1xuXG5cdH0sXG5cblx0c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzOiBmdW5jdGlvbiAoIHJhZGl1cywgdGhldGEsIHkgKSB7XG5cblx0XHR0aGlzLnggPSByYWRpdXMgKiBNYXRoLnNpbiggdGhldGEgKTtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHRoaXMueiA9IHJhZGl1cyAqIE1hdGguY29zKCB0aGV0YSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRGcm9tTWF0cml4UG9zaXRpb246IGZ1bmN0aW9uICggbSApIHtcblxuXHRcdHZhciBlID0gbS5lbGVtZW50cztcblxuXHRcdHRoaXMueCA9IGVbIDEyIF07XG5cdFx0dGhpcy55ID0gZVsgMTMgXTtcblx0XHR0aGlzLnogPSBlWyAxNCBdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRGcm9tTWF0cml4U2NhbGU6IGZ1bmN0aW9uICggbSApIHtcblxuXHRcdHZhciBzeCA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMCApLmxlbmd0aCgpO1xuXHRcdHZhciBzeSA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMSApLmxlbmd0aCgpO1xuXHRcdHZhciBzeiA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMiApLmxlbmd0aCgpO1xuXG5cdFx0dGhpcy54ID0gc3g7XG5cdFx0dGhpcy55ID0gc3k7XG5cdFx0dGhpcy56ID0gc3o7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHNldEZyb21NYXRyaXhDb2x1bW46IGZ1bmN0aW9uICggbSwgaW5kZXggKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5mcm9tQXJyYXkoIG0uZWxlbWVudHMsIGluZGV4ICogNCApO1xuXG5cdH0sXG5cblx0ZXF1YWxzOiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHRyZXR1cm4gKCAoIHYueCA9PT0gdGhpcy54ICkgJiYgKCB2LnkgPT09IHRoaXMueSApICYmICggdi56ID09PSB0aGlzLnogKSApO1xuXG5cdH0sXG5cblx0ZnJvbUFycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7XG5cblx0XHRpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDtcblxuXHRcdHRoaXMueCA9IGFycmF5WyBvZmZzZXQgXTtcblx0XHR0aGlzLnkgPSBhcnJheVsgb2Zmc2V0ICsgMSBdO1xuXHRcdHRoaXMueiA9IGFycmF5WyBvZmZzZXQgKyAyIF07XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHtcblxuXHRcdGlmICggYXJyYXkgPT09IHVuZGVmaW5lZCApIGFycmF5ID0gW107XG5cdFx0aWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7XG5cblx0XHRhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLng7XG5cdFx0YXJyYXlbIG9mZnNldCArIDEgXSA9IHRoaXMueTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGhpcy56O1xuXG5cdFx0cmV0dXJuIGFycmF5O1xuXG5cdH0sXG5cblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZTogZnVuY3Rpb24gKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKSB7XG5cblx0XHRpZiAoIG9mZnNldCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuJyApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy54ID0gYXR0cmlidXRlLmdldFgoIGluZGV4ICk7XG5cdFx0dGhpcy55ID0gYXR0cmlidXRlLmdldFkoIGluZGV4ICk7XG5cdFx0dGhpcy56ID0gYXR0cmlidXRlLmdldFooIGluZGV4ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn0gKTtcblxuXG5leHBvcnQgeyBWZWN0b3IzIH07Il19