angular-three-rapier 2.2.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.
@@ -0,0 +1,10 @@
1
+ import { Euler, Matrix4, Object3D, Quaternion, Vector3 } from 'three';
2
+ export const _quaternion = new Quaternion();
3
+ export const _euler = new Euler();
4
+ export const _vector3 = new Vector3();
5
+ export const _object3d = new Object3D();
6
+ export const _matrix4 = new Matrix4();
7
+ export const _position = new Vector3();
8
+ export const _rotation = new Quaternion();
9
+ export const _scale = new Vector3();
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9yYXBpZXIvc3JjL2xpYi9zaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7QUFDNUMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7QUFDeEMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7QUFDMUMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdWxlciwgTWF0cml4NCwgT2JqZWN0M0QsIFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBjb25zdCBfcXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG5leHBvcnQgY29uc3QgX2V1bGVyID0gbmV3IEV1bGVyKCk7XG5leHBvcnQgY29uc3QgX3ZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xuZXhwb3J0IGNvbnN0IF9vYmplY3QzZCA9IG5ldyBPYmplY3QzRCgpO1xuZXhwb3J0IGNvbnN0IF9tYXRyaXg0ID0gbmV3IE1hdHJpeDQoKTtcbmV4cG9ydCBjb25zdCBfcG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuZXhwb3J0IGNvbnN0IF9yb3RhdGlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG5leHBvcnQgY29uc3QgX3NjYWxlID0gbmV3IFZlY3RvcjMoKTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3JhcGllci9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBY3RpdmVDb2xsaXNpb25UeXBlcyxcblx0Q29lZmZpY2llbnRDb21iaW5lUnVsZSxcblx0Q29sbGlkZXIsXG5cdENvbGxpZGVySGFuZGxlLFxuXHRJbnRlcmFjdGlvbkdyb3Vwcyxcblx0UmlnaWRCb2R5LFxuXHRSaWdpZEJvZHlIYW5kbGUsXG5cdFJvdGF0aW9uLFxuXHRUZW1wQ29udGFjdE1hbmlmb2xkLFxuXHRWZWN0b3IsXG5cdFdvcmxkLFxufSBmcm9tICdAZGltZm9yZ2UvcmFwaWVyM2QtY29tcGF0JztcbmltcG9ydCB7IE5ndE9iamVjdDNELCBOZ3RRdWF0ZXJuaW9uLCBOZ3RWZWN0b3IzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBNYXRyaXg0LCBPYmplY3QzRCwgVmVjdG9yMywgVmVjdG9yM1R1cGxlIH0gZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgdHlwZSBOZ3RyUmlnaWRCb2R5QXV0b0NvbGxpZGVyID0gJ2JhbGwnIHwgJ2N1Ym9pZCcgfCAnaHVsbCcgfCAndHJpbWVzaCcgfCBmYWxzZTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyUGh5c2ljc09wdGlvbnMge1xuXHQvKipcblx0ICogU2V0IHRoZSBncmF2aXR5IG9mIHRoZSBwaHlzaWNzIHdvcmxkXG5cdCAqIEBkZWZhdWx0VmFsdWUgWzAsIC05LjgxLCAwXVxuXHQgKi9cblx0Z3Jhdml0eTogVmVjdG9yM1R1cGxlO1xuXG5cdC8qKlxuXHQgKiBBbW91bnQgb2YgcGVuZXRyYXRpb24gdGhlIGVuZ2luZSB3b250IGF0dGVtcHQgdG8gY29ycmVjdFxuXHQgKiBAZGVmYXVsdFZhbHVlIDAuMDAxXG5cdCAqL1xuXHRhbGxvd2VkTGluZWFyRXJyb3I6IG51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIG51bWJlciBvZiBzb2x2ZXIgaXRlcmF0aW9ucyBydW4gYnkgdGhlIGNvbnN0cmFpbnRzIHNvbHZlciBmb3IgY2FsY3VsYXRpbmcgZm9yY2VzLlxuXHQgKiBUaGUgZ3JlYXRlciB0aGlzIHZhbHVlIGlzLCB0aGUgbW9zdCByaWdpZCBhbmQgcmVhbGlzdGljIHRoZSBwaHlzaWNzIHNpbXVsYXRpb24gd2lsbCBiZS5cblx0ICogSG93ZXZlciBhIGdyZWF0ZXIgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgbW9yZSBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIDRcblx0ICovXG5cdG51bVNvbHZlckl0ZXJhdGlvbnM6IG51bWJlcjtcblxuXHQvKipcblx0ICogTnVtYmVyIG9mIGFkZGl0aW9uIGZyaWN0aW9uIHJlc29sdXRpb24gaXRlcmF0aW9uIHJ1biBkdXJpbmcgdGhlIGxhc3Qgc29sdmVyIHN1Yi1zdGVwLlxuXHQgKiBUaGUgZ3JlYXRlciB0aGlzIHZhbHVlIGlzLCB0aGUgbW9zdCByZWFsaXN0aWMgZnJpY3Rpb24gd2lsbCBiZS5cblx0ICogSG93ZXZlciBhIGdyZWF0ZXIgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgbW9yZSBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIDRcblx0ICovXG5cdG51bUFkZGl0aW9uYWxGcmljdGlvbkl0ZXJhdGlvbnM6IG51bWJlcjtcblxuXHQvKipcblx0ICogTnVtYmVyIG9mIGludGVybmFsIFByb2plY3QgR2F1c3MgU2VpZGVsIChQR1MpIGl0ZXJhdGlvbnMgcnVuIGF0IGVhY2ggc29sdmVyIGl0ZXJhdGlvbi5cblx0ICogSW5jcmVhc2luZyB0aGlzIHBhcmFtZXRlciB3aWxsIGltcHJvdmUgc3RhYmlsaXR5IG9mIHRoZSBzaW11bGF0aW9uLiBJdCB3aWxsIGhhdmUgYSBsZXNzZXIgZWZmZWN0IHRoYW5cblx0ICogaW5jcmVhc2luZyBgbnVtU29sdmVySXRlcmF0aW9uc2AgYnV0IGlzIGFsc28gbGVzcyBjb21wdXRhdGlvbmFsbHkgZXhwZW5zaXZlLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIDFcblx0ICovXG5cdG51bUludGVybmFsUGdzSXRlcmF0aW9uczogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgbWF4aW1hbCBkaXN0YW5jZSBzZXBhcmF0aW5nIHR3byBvYmplY3RzIHRoYXQgd2lsbCBnZW5lcmF0ZSBwcmVkaWN0aXZlIGNvbnRhY3RzXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMC4wMDJcblx0ICpcblx0ICovXG5cdHByZWRpY3Rpb25EaXN0YW5jZTogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBNaW5pbXVtIG51bWJlciBvZiBkeW5hbWljIGJvZGllcyBpbiBlYWNoIGFjdGl2ZSBpc2xhbmRcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAxMjhcblx0ICovXG5cdG1pbklzbGFuZFNpemU6IG51bWJlcjtcblxuXHQvKipcblx0ICogTWF4aW11bSBudW1iZXIgb2Ygc3Vic3RlcHMgcGVyZm9ybWVkIGJ5IHRoZSBzb2x2ZXJcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAxXG5cdCAqL1xuXHRtYXhDY2RTdWJzdGVwczogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgRXJyb3IgUmVkdWN0aW9uIFBhcmFtZXRlciBpbiBiZXR3ZWVuIDAgYW5kIDEsIGlzIHRoZSBwcm9wb3J0aW9uIG9mIHRoZSBwb3NpdGlvbmFsIGVycm9yIHRvIGJlIGNvcnJlY3RlZCBhdCBlYWNoIHRpbWUgc3RlcC5cblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAwLjhcblx0ICovXG5cdGVycDogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgYXBwcm94aW1hdGUgc2l6ZSBvZiBtb3N0IGR5bmFtaWMgb2JqZWN0cyBpbiB0aGUgc2NlbmUuXG5cdCAqXG5cdCAqIFRoaXMgdmFsdWUgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGVzdGltYXRlIHNvbWUgbGVuZ3RoLWJhc2VkIHRvbGVyYW5jZS5cblx0ICogVGhpcyB2YWx1ZSBjYW4gYmUgdW5kZXJzdG9vZCBhcyB0aGUgbnVtYmVyIG9mIHVuaXRzLXBlci1tZXRlciBpbiB5b3VyIHBoeXNpY2FsIHdvcmxkIGNvbXBhcmVkIHRvIGEgaHVtYW4tc2l6ZWQgd29ybGQgaW4gbWV0ZXIuXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMVxuXHQgKi9cblx0bGVuZ3RoVW5pdDogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGJhc2UgYXV0b21hdGljIGNvbGxpZGVycyBmb3IgdGhpcyBwaHlzaWNzIHdvcmxkXG5cdCAqIEFsbCBNZXNoZXMgaW5zaWRlIFJpZ2lkQm9kaWVzIHdpbGwgZ2VuZXJhdGUgYSBjb2xsaWRlclxuXHQgKiBiYXNlZCBvbiB0aGlzIHZhbHVlLCBpZiBub3Qgb3ZlcnJpZGRlbi5cblx0ICovXG5cdGNvbGxpZGVycz86IE5ndHJSaWdpZEJvZHlBdXRvQ29sbGlkZXI7XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdGltZXN0ZXAgZm9yIHRoZSBzaW11bGF0aW9uLlxuXHQgKiBTZXR0aW5nIHRoaXMgdG8gYSBudW1iZXIgKGVnLiAxLzYwKSB3aWxsIHJ1biB0aGVcblx0ICogc2ltdWxhdGlvbiBhdCB0aGF0IGZyYW1lcmF0ZS4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQgdGhpcyB0b1xuXHQgKiBcInZhcnlcIiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2ltdWxhdGlvbiB0byBhbHdheXMgc3luY2hyb25pemUgd2l0aFxuXHQgKiB0aGUgY3VycmVudCBmcmFtZSBkZWx0YSB0aW1lcy5cblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAxLzYwXG5cdCAqL1xuXHR0aW1lU3RlcDogbnVtYmVyIHwgJ3ZhcnknO1xuXG5cdC8qKlxuXHQgKiBQYXVzZSB0aGUgcGh5c2ljcyBzaW11bGF0aW9uXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgZmFsc2Vcblx0ICovXG5cdHBhdXNlZDogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSW50ZXJwb2xhdGUgdGhlIHdvcmxkIHRyYW5zZm9ybSB1c2luZyB0aGUgZnJhbWUgZGVsdGEgdGltZXMuXG5cdCAqIEhhcyBubyBlZmZlY3QgaWYgdGltZVN0ZXAgaXMgc2V0IHRvIFwidmFyeVwiLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIHRydWVcblx0ICoqL1xuXHRpbnRlcnBvbGF0ZTogYm9vbGVhbjtcblxuXHQvKipcblx0ICogVGhlIHVwZGF0ZSBwcmlvcml0eSBhdCB3aGljaCB0aGUgcGh5c2ljcyBzaW11bGF0aW9uIHNob3VsZCBydW4uXG5cdCAqIE9ubHkgdXNlZCB3aGVuIGB1cGRhdGVMb29wYCBpcyBzZXQgdG8gXCJmb2xsb3dcIi5cblx0ICpcblx0ICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvaG9va3MjdGFraW5nLW92ZXItdGhlLXJlbmRlci1sb29wXG5cdCAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG5cdCAqL1xuXHR1cGRhdGVQcmlvcml0eT86IG51bWJlcjtcblxuXHQvKipcblx0ICogU2V0IHRoZSB1cGRhdGUgbG9vcCBzdHJhdGVneSBmb3IgdGhlIHBoeXNpY3Mgd29ybGQuXG5cdCAqXG5cdCAqIElmIHNldCB0byBcImZvbGxvd1wiLCB0aGUgcGh5c2ljcyB3b3JsZCB3aWxsIGJlIHN0ZXBwZWRcblx0ICogaW4gYSBgdXNlRnJhbWVgIGNhbGxiYWNrLCBtYW5hZ2VkIGJ5IEByZWFjdC10aHJlZS9maWJlci5cblx0ICogWW91IGNhbiB1c2UgYHVwZGF0ZVByaW9yaXR5YCBwcm9wIHRvIG1hbmFnZSB0aGUgc2NoZWR1bGluZy5cblx0ICpcblx0ICogSWYgc2V0IHRvIFwiaW5kZXBlbmRlbnRcIiwgdGhlIHBoeXNpY3Mgd29ybGQgd2lsbCBiZSBzdGVwcGVkXG5cdCAqIGluIGEgc2VwYXJhdGUgbG9vcCwgbm90IHRpZWQgdG8gdGhlIHJlbmRlciBsb29wLlxuXHQgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIHRoZSBcImRlbWFuZFwiIGBmcmFtZWxvb3BgIHN0cmF0ZWd5IGZvciB0aGVcblx0ICogQHJlYWN0LXRocmVlL2ZpYmVyIGA8Q2FudmFzIC8+YC5cblx0ICpcblx0ICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hZHZhbmNlZC9zY2FsaW5nLXBlcmZvcm1hbmNlI29uLWRlbWFuZC1yZW5kZXJpbmdcblx0ICogQGRlZmF1bHRWYWx1ZSBcImZvbGxvd1wiXG5cdCAqL1xuXHR1cGRhdGVMb29wOiAnZm9sbG93JyB8ICdpbmRlcGVuZGVudCc7XG5cblx0LyoqXG5cdCAqIEVuYWJsZSBkZWJ1ZyByZW5kZXJpbmcgb2YgdGhlIHBoeXNpY3Mgd29ybGQuXG5cdCAqIEBkZWZhdWx0VmFsdWUgZmFsc2Vcblx0ICovXG5cdGRlYnVnOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJSaWdpZEJvZHlTdGF0ZSB7XG5cdG1lc2hUeXBlOiAnaW5zdGFuY2VkTWVzaCcgfCAnbWVzaCc7XG5cdHJpZ2lkQm9keTogUmlnaWRCb2R5O1xuXHRvYmplY3Q6IE9iamVjdDNEO1xuXHRpbnZlcnRlZFdvcmxkTWF0cml4OiBNYXRyaXg0O1xuXHRzZXRNYXRyaXg6IChtYXRyaXg6IE1hdHJpeDQpID0+IHZvaWQ7XG5cdGdldE1hdHJpeDogKG1hdHJpeDogTWF0cml4NCkgPT4gTWF0cml4NDtcblx0LyoqXG5cdCAqIFJlcXVpcmVkIGZvciBpbnN0YW5jZWQgcmlnaWQgYm9kaWVzLlxuXHQgKi9cblx0c2NhbGU6IFZlY3RvcjM7XG5cdGlzU2xlZXBpbmc6IGJvb2xlYW47XG59XG5leHBvcnQgdHlwZSBOZ3RyUmlnaWRCb2R5U3RhdGVNYXAgPSBNYXA8UmlnaWRCb2R5WydoYW5kbGUnXSwgTmd0clJpZ2lkQm9keVN0YXRlPjtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlkZXJTdGF0ZSB7XG5cdGNvbGxpZGVyOiBDb2xsaWRlcjtcblx0b2JqZWN0OiBPYmplY3QzRDtcblxuXHQvKipcblx0ICogVGhlIHBhcmVudCBvZiB3aGljaCB0aGlzIGNvbGxpZGVyIG5lZWRzIHRvIGJhc2UgaXRzXG5cdCAqIHdvcmxkIHBvc2l0aW9uIG9uLCBjYW4gYmUgZW1wdHlcblx0ICovXG5cdHdvcmxkUGFyZW50PzogT2JqZWN0M0Q7XG59XG5leHBvcnQgdHlwZSBOZ3RyQ29sbGlkZXJTdGF0ZU1hcCA9IE1hcDxDb2xsaWRlclsnaGFuZGxlJ10sIE5ndHJDb2xsaWRlclN0YXRlPjtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uVGFyZ2V0IHtcblx0cmlnaWRCb2R5PzogUmlnaWRCb2R5O1xuXHRjb2xsaWRlcjogQ29sbGlkZXI7XG5cdHJpZ2lkQm9keU9iamVjdD86IE9iamVjdDNEO1xuXHRjb2xsaWRlck9iamVjdD86IE9iamVjdDNEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJDb2xsaXNpb25QYXlsb2FkIHtcblx0LyoqIHRoZSBvYmplY3QgZmlyaW5nIHRoZSBldmVudCAqL1xuXHR0YXJnZXQ6IE5ndHJDb2xsaXNpb25UYXJnZXQ7XG5cdC8qKiB0aGUgb3RoZXIgb2JqZWN0IGludm9sdmVkIGluIHRoZSBldmVudCAqL1xuXHRvdGhlcjogTmd0ckNvbGxpc2lvblRhcmdldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uRW50ZXJQYXlsb2FkIGV4dGVuZHMgTmd0ckNvbGxpc2lvblBheWxvYWQge1xuXHRtYW5pZm9sZDogVGVtcENvbnRhY3RNYW5pZm9sZDtcblx0ZmxpcHBlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uRXhpdFBheWxvYWQgZXh0ZW5kcyBOZ3RyQ29sbGlzaW9uUGF5bG9hZCB7fVxuZXhwb3J0IGludGVyZmFjZSBOZ3RySW50ZXJzZWN0aW9uRW50ZXJQYXlsb2FkIGV4dGVuZHMgTmd0ckNvbGxpc2lvblBheWxvYWQge31cbmV4cG9ydCBpbnRlcmZhY2UgTmd0ckludGVyc2VjdGlvbkV4aXRQYXlsb2FkIGV4dGVuZHMgTmd0ckNvbGxpc2lvblBheWxvYWQge31cbmV4cG9ydCBpbnRlcmZhY2UgTmd0ckNvbnRhY3RGb3JjZVBheWxvYWQgZXh0ZW5kcyBOZ3RyQ29sbGlzaW9uUGF5bG9hZCB7XG5cdHRvdGFsRm9yY2U6IFZlY3Rvcjtcblx0dG90YWxGb3JjZU1hZ25pdHVkZTogbnVtYmVyO1xuXHRtYXhGb3JjZURpcmVjdGlvbjogVmVjdG9yO1xuXHRtYXhGb3JjZU1hZ25pdHVkZTogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RyQ29sbGlzaW9uRW50ZXJIYW5kbGVyID0gKHBheWxvYWQ6IE5ndHJDb2xsaXNpb25FbnRlclBheWxvYWQpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBOZ3RyQ29sbGlzaW9uRXhpdEhhbmRsZXIgPSAocGF5bG9hZDogTmd0ckNvbGxpc2lvbkV4aXRQYXlsb2FkKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgTmd0ckludGVyc2VjdGlvbkVudGVySGFuZGxlciA9IChwYXlsb2FkOiBOZ3RySW50ZXJzZWN0aW9uRW50ZXJQYXlsb2FkKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgTmd0ckludGVyc2VjdGlvbkV4aXRIYW5kbGVyID0gKHBheWxvYWQ6IE5ndHJJbnRlcnNlY3Rpb25FeGl0UGF5bG9hZCkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIE5ndHJDb250YWN0Rm9yY2VIYW5kbGVyID0gKHBheWxvYWQ6IE5ndHJDb250YWN0Rm9yY2VQYXlsb2FkKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJFdmVudE1hcFZhbHVlIHtcblx0b25TbGVlcD8oKTogdm9pZDtcblx0b25XYWtlPygpOiB2b2lkO1xuXHRvbkNvbGxpc2lvbkVudGVyPzogTmd0ckNvbGxpc2lvbkVudGVySGFuZGxlcjtcblx0b25Db2xsaXNpb25FeGl0PzogTmd0ckNvbGxpc2lvbkV4aXRIYW5kbGVyO1xuXHRvbkludGVyc2VjdGlvbkVudGVyPzogTmd0ckludGVyc2VjdGlvbkVudGVySGFuZGxlcjtcblx0b25JbnRlcnNlY3Rpb25FeGl0PzogTmd0ckludGVyc2VjdGlvbkV4aXRIYW5kbGVyO1xuXHRvbkNvbnRhY3RGb3JjZT86IE5ndHJDb250YWN0Rm9yY2VIYW5kbGVyO1xufVxuZXhwb3J0IHR5cGUgTmd0ckV2ZW50TWFwID0gTWFwPENvbGxpZGVySGFuZGxlIHwgUmlnaWRCb2R5SGFuZGxlLCBOZ3RyRXZlbnRNYXBWYWx1ZT47XG5cbmV4cG9ydCB0eXBlIE5ndHJXb3JsZFN0ZXBDYWxsYmFjayA9ICh3b3JsZDogV29ybGQpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBOZ3RyV29ybGRTdGVwQ2FsbGJhY2tTZXQgPSBTZXQ8Tmd0cldvcmxkU3RlcENhbGxiYWNrPjtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlzaW9uU291cmNlIHtcblx0Y29sbGlkZXI6IHtcblx0XHRvYmplY3Q6IENvbGxpZGVyO1xuXHRcdGV2ZW50cz86IE5ndHJFdmVudE1hcFZhbHVlO1xuXHRcdHN0YXRlPzogTmd0ckNvbGxpZGVyU3RhdGU7XG5cdH07XG5cdHJpZ2lkQm9keToge1xuXHRcdG9iamVjdD86IFJpZ2lkQm9keTtcblx0XHRldmVudHM/OiBOZ3RyRXZlbnRNYXBWYWx1ZTtcblx0XHRzdGF0ZT86IE5ndHJSaWdpZEJvZHlTdGF0ZTtcblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgTmd0ckNvbGxpZGVyU2hhcGUgPVxuXHR8ICdjdWJvaWQnXG5cdHwgJ3RyaW1lc2gnXG5cdHwgJ2JhbGwnXG5cdHwgJ2NhcHN1bGUnXG5cdHwgJ2NvbnZleEh1bGwnXG5cdHwgJ2hlaWdodGZpZWxkJ1xuXHR8ICdwb2x5bGluZSdcblx0fCAncm91bmRDdWJvaWQnXG5cdHwgJ2N5bGluZGVyJ1xuXHR8ICdyb3VuZEN5bGluZGVyJ1xuXHR8ICdjb25lJ1xuXHR8ICdyb3VuZENvbmUnXG5cdHwgJ2NvbnZleE1lc2gnXG5cdHwgJ3JvdW5kQ29udmV4SHVsbCdcblx0fCAncm91bmRDb252ZXhNZXNoJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RyQ29sbGlkZXJPcHRpb25zIHtcblx0LyoqXG5cdCAqIFRoZSBvcHRpb25hbCBuYW1lIHBhc3NlZCB0byBUSFJFRSdzIE9iamVjdDNEXG5cdCAqL1xuXHRuYW1lPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBQcmluY2lwYWwgYW5ndWxhciBpbmVydGlhIG9mIHRoaXMgcmlnaWQgYm9keVxuXHQgKi9cblx0cHJpbmNpcGFsQW5ndWxhckluZXJ0aWE/OiBWZWN0b3IzVHVwbGU7XG5cblx0LyoqXG5cdCAqIFJlc3RpdHV0aW9uIGNvbnRyb2xzIGhvdyBlbGFzdGljIChha2EuIGJvdW5jeSkgYSBjb250YWN0IGlzLiBMZSBlbGFzdGljaXR5IG9mIGEgY29udGFjdCBpcyBjb250cm9sbGVkIGJ5IHRoZSByZXN0aXR1dGlvbiBjb2VmZmljaWVudFxuXHQgKi9cblx0cmVzdGl0dXRpb24/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFdoYXQgaGFwcGVucyB3aGVuIHR3byBib2RpZXMgbWVldC4gU2VlIGh0dHBzOi8vcmFwaWVyLnJzL2RvY3MvdXNlcl9ndWlkZXMvamF2YXNjcmlwdC9jb2xsaWRlcnMjZnJpY3Rpb24uXG5cdCAqL1xuXHRyZXN0aXR1dGlvbkNvbWJpbmVSdWxlPzogQ29lZmZpY2llbnRDb21iaW5lUnVsZTtcblxuXHQvKipcblx0ICogRnJpY3Rpb24gaXMgYSBmb3JjZSB0aGF0IG9wcG9zZXMgdGhlIHJlbGF0aXZlIHRhbmdlbnRpYWwgbW90aW9uIGJldHdlZW4gdHdvIHJpZ2lkLWJvZGllcyB3aXRoIGNvbGxpZGVycyBpbiBjb250YWN0LlxuXHQgKiBBIGZyaWN0aW9uIGNvZWZmaWNpZW50IG9mIDAgaW1wbGllcyBubyBmcmljdGlvbiBhdCBhbGwgKGNvbXBsZXRlbHkgc2xpZGluZyBjb250YWN0KSBhbmQgYSBjb2VmZmljaWVudFxuXHQgKiBncmVhdGVyIG9yIGVxdWFsIHRvIDEgaW1wbGllcyBhIHZlcnkgc3Ryb25nIGZyaWN0aW9uLiBWYWx1ZXMgZ3JlYXRlciB0aGFuIDEgYXJlIGFsbG93ZWQuXG5cdCAqL1xuXHRmcmljdGlvbj86IG51bWJlcjtcblxuXHQvKipcblx0ICogV2hhdCBoYXBwZW5zIHdoZW4gdHdvIGJvZGllcyBtZWV0LiBTZWUgaHR0cHM6Ly9yYXBpZXIucnMvZG9jcy91c2VyX2d1aWRlcy9qYXZhc2NyaXB0L2NvbGxpZGVycyNmcmljdGlvbi5cblx0ICovXG5cdGZyaWN0aW9uQ29tYmluZVJ1bGU/OiBDb2VmZmljaWVudENvbWJpbmVSdWxlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYml0IG1hc2sgY29uZmlndXJpbmcgdGhlIGdyb3VwcyBhbmQgbWFzayBmb3IgY29sbGlzaW9uIGhhbmRsaW5nLlxuXHQgKi9cblx0Y29sbGlzaW9uR3JvdXBzPzogSW50ZXJhY3Rpb25Hcm91cHM7XG5cblx0LyoqXG5cdCAqIFRoZSBiaXQgbWFzayBjb25maWd1cmluZyB0aGUgZ3JvdXBzIGFuZCBtYXNrIGZvciBzb2x2ZXIgaGFuZGxpbmcuXG5cdCAqL1xuXHRzb2x2ZXJHcm91cHM/OiBJbnRlcmFjdGlvbkdyb3VwcztcblxuXHQvKipcblx0ICogVGhlIGNvbGxpc2lvbiB0eXBlcyBhY3RpdmUgZm9yIHRoaXMgY29sbGlkZXIuXG5cdCAqXG5cdCAqIFVzZSBgQWN0aXZlQ29sbGlzaW9uVHlwZXNgIHRvIHNwZWNpZnkgd2hpY2ggY29sbGlzaW9uIHR5cGVzIHNob3VsZCBiZSBhY3RpdmUgZm9yIHRoaXMgY29sbGlkZXIuXG5cdCAqXG5cdCAqIEBzZWUgaHR0cHM6Ly9yYXBpZXIucnMvamF2YXNjcmlwdDNkL2NsYXNzZXMvQ29sbGlkZXIuaHRtbCNzZXRBY3RpdmVDb2xsaXNpb25UeXBlc1xuXHQgKiBAc2VlIGh0dHBzOi8vcmFwaWVyLnJzL2phdmFzY3JpcHQzZC9lbnVtcy9BY3RpdmVDb2xsaXNpb25UeXBlcy5odG1sXG5cdCAqL1xuXHRhY3RpdmVDb2xsaXNpb25UeXBlcz86IEFjdGl2ZUNvbGxpc2lvblR5cGVzO1xuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB1bmlmb3JtIGRlbnNpdHkgb2YgdGhpcyBjb2xsaWRlci5cblx0ICogSWYgdGhpcyBpcyBzZXQsIG90aGVyIG1hc3MtcHJvcGVydGllcyBsaWtlIHRoZSBhbmd1bGFyIGluZXJ0aWEgdGVuc29yIGFyZSBjb21wdXRlZFxuXHQgKiBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIGNvbGxpZGVyJ3Mgc2hhcGUuXG5cdCAqIENhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIG1hc3Mgb3IgbWFzc1Byb3BlcnRpZXMgdmFsdWVzLlxuXHQgKiBNb3JlIGluZm8gaHR0cHM6Ly9yYXBpZXIucnMvZG9jcy91c2VyX2d1aWRlcy9qYXZhc2NyaXB0L2NvbGxpZGVycyNtYXNzLXByb3BlcnRpZXNcblx0ICovXG5cdGRlbnNpdHk/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBtYXNzIG9mIHRoaXMgY29sbGlkZXIuXG5cdCAqIEdlbmVyYWxseSwgaXQncyBub3QgcmVjb21tZW5kZWQgdG8gYWRqdXN0IHRoZSBtYXNzIHByb3BlcnRpZXMgYXMgaXQgY291bGQgbGVhZCB0b1xuXHQgKiB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cblx0ICogQ2Fubm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgZGVuc2l0eSBvciBtYXNzUHJvcGVydGllcyB2YWx1ZXMuXG5cdCAqIE1vcmUgaW5mbyBodHRwczovL3JhcGllci5ycy9kb2NzL3VzZXJfZ3VpZGVzL2phdmFzY3JpcHQvY29sbGlkZXJzI21hc3MtcHJvcGVydGllc1xuXHQgKi9cblx0bWFzcz86IG51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIG1hc3MgcHJvcGVydGllcyBvZiB0aGlzIHJpZ2lkIGJvZHkuXG5cdCAqIENhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIGRlbnNpdHkgb3IgbWFzcyB2YWx1ZXMuXG5cdCAqL1xuXHRtYXNzUHJvcGVydGllcz86IHtcblx0XHRtYXNzOiBudW1iZXI7XG5cdFx0Y2VudGVyT2ZNYXNzOiBWZWN0b3I7XG5cdFx0cHJpbmNpcGFsQW5ndWxhckluZXJ0aWE6IFZlY3Rvcjtcblx0XHRhbmd1bGFySW5lcnRpYUxvY2FsRnJhbWU6IFJvdGF0aW9uO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBUaGUgY29udGFjdCBza2luIG9mIHRoZSBjb2xsaWRlci5cblx0ICpcblx0ICogVGhlIGNvbnRhY3Qgc2tpbiBhY3RzIGFzIGlmIHRoZSBjb2xsaWRlciB3YXMgZW5sYXJnZWQgd2l0aCBhIHNraW4gb2Ygd2lkdGggY29udGFjdFNraW4gYXJvdW5kIGl0LCBrZWVwaW5nIG9iamVjdHMgZnVydGhlciBhcGFydCB3aGVuIGNvbGxpZGluZy5cblx0ICpcblx0ICogQSBub24temVybyBjb250YWN0IHNraW4gY2FuIGluY3JlYXNlIHBlcmZvcm1hbmNlLCBhbmQgaW4gc29tZSBjYXNlcywgc3RhYmlsaXR5LlxuXHQgKiBIb3dldmVyIGl0IGNyZWF0ZXMgYSBzbWFsbCBnYXAgYmV0d2VlbiBjb2xsaWRpbmcgb2JqZWN0IChlcXVhbCB0byB0aGUgc3VtIG9mIHRoZWlyIHNraW4pLlxuXHQgKiBJZiB0aGUgc2tpbiBpcyBzdWZmaWNpZW50bHkgc21hbGwsIHRoaXMgbWlnaHQgbm90IGJlIHZpc3VhbGx5IHNpZ25pZmljYW50IG9yIGNhbiBiZSBoaWRkZW4gYnkgdGhlIHJlbmRlcmluZyBhc3NldHMuXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMFxuXHQgKi9cblx0Y29udGFjdFNraW46IG51bWJlcjtcblxuXHQvKipcblx0ICogU2V0cyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbGxpZGVyIGlzIGEgc2Vuc29yLlxuXHQgKi9cblx0c2Vuc29yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTmd0clJpZ2lkQm9keVR5cGUgPSAnZml4ZWQnIHwgJ2R5bmFtaWMnIHwgJ2tpbmVtYXRpY1Bvc2l0aW9uJyB8ICdraW5lbWF0aWNWZWxvY2l0eSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0clJpZ2lkQm9keU9wdGlvbnMgZXh0ZW5kcyBOZ3RyQ29sbGlkZXJPcHRpb25zIHtcblx0LyoqXG5cdCAqIFdoZXRoZXIgb3Igbm90IHRoaXMgYm9keSBjYW4gc2xlZXAuXG5cdCAqIEBkZWZhdWx0VmFsdWUgdHJ1ZVxuXHQgKi9cblx0Y2FuU2xlZXA6IGJvb2xlYW47XG5cblx0LyoqIFRoZSBsaW5lYXIgZGFtcGluZyBjb2VmZmljaWVudCBvZiB0aGlzIHJpZ2lkLWJvZHkuKi9cblx0bGluZWFyRGFtcGluZz86IG51bWJlcjtcblxuXHQvKiogVGhlIGFuZ3VsYXIgZGFtcGluZyBjb2VmZmljaWVudCBvZiB0aGlzIHJpZ2lkLWJvZHkuKi9cblx0YW5ndWxhckRhbXBpbmc/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBpbml0aWFsIGxpbmVhciB2ZWxvY2l0eSBvZiB0aGlzIGJvZHkuXG5cdCAqIEBkZWZhdWx0VmFsdWUgWzAsMCwwXVxuXHQgKi9cblx0bGluZWFyVmVsb2NpdHk6IFZlY3RvcjNUdXBsZTtcblxuXHQvKipcblx0ICogVGhlIGluaXRpYWwgYW5ndWxhciB2ZWxvY2l0eSBvZiB0aGlzIGJvZHkuXG5cdCAqIEBkZWZhdWx0VmFsdWUgWzAsMCwwXVxuXHQgKi9cblx0YW5ndWxhclZlbG9jaXR5OiBWZWN0b3IzVHVwbGU7XG5cblx0LyoqXG5cdCAqIFRoZSBzY2FsaW5nIGZhY3RvciBhcHBsaWVkIHRvIHRoZSBncmF2aXR5IGFmZmVjdGluZyB0aGUgcmlnaWQtYm9keS5cblx0ICogQGRlZmF1bHRWYWx1ZSAxLjBcblx0ICovXG5cdGdyYXZpdHlTY2FsZTogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgZG9taW5hbmNlIGdyb3VwIG9mIHRoaXMgUmlnaWRCb2R5LiBJZiBhIHJpZ2lkIGJvZHkgaGFzIGEgaGlnaGVyIGRvbWlhbmNlIGdyb3VwLFxuXHQgKiBvbiBjb2xsaXNpb24gaXQgd2lsbCBiZSBpbW11bmUgdG8gZm9yY2VzIG9yaWdpbmF0aW5nIGZyb20gdGhlIG90aGVyIGJvZGllcy5cblx0ICogaHR0cHM6Ly9yYXBpZXIucnMvZG9jcy91c2VyX2d1aWRlcy9qYXZhc2NyaXB0L3JpZ2lkX2JvZGllcyNkb21pbmFuY2Vcblx0ICogRGVmYXVsdDogMFxuXHQgKi9cblx0ZG9taW5hbmNlR3JvdXA6IG51bWJlcjtcblxuXHQvKipcblx0ICogV2hldGhlciBvciBub3QgQ29udGlub3VzIENvbGxpc2lvbiBEZXRlY3Rpb24gaXMgZW5hYmxlZCBmb3IgdGhpcyByaWdpZC1ib2R5LlxuXHQgKiBodHRwczovL3JhcGllci5ycy9kb2NzL3VzZXJfZ3VpZGVzL2phdmFzY3JpcHQvcmlnaWRfYm9kaWVzI2NvbnRpbnVvdXMtY29sbGlzaW9uLWRldGVjdGlvblxuXHQgKiBAZGVmYXVsdFZhbHVlIGZhbHNlXG5cdCAqL1xuXHRjY2Q6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFRoZSBtYXhpbXVtIHByZWRpY3Rpb24gZGlzdGFuY2UgU29mdCBDb250aW51b3VzIENvbGxpc2lvbi1EZXRlY3Rpb24uXG5cdCAqXG5cdCAqIFdoZW4gc2V0IHRvIDAsIHNvZnQtQ0NEIGlzIGRpc2FibGVkLlxuXHQgKlxuXHQgKiBTb2Z0LUNDRCBoZWxwcyBwcmV2ZW50IHR1bm5lbGluZyBlc3BlY2lhbGx5IG9mIHNsb3ctYnV0LXRoaW4gdG8gbW9kZXJhdGVseSBmYXN0IG9iamVjdHMuXG5cdCAqIFRoZSBzb2Z0IENDRCBwcmVkaWN0aW9uIGRpc3RhbmNlIGluZGljYXRlcyBob3cgZmFyIGluIHRoZSBvYmplY3TigJlzIHBhdGggdGhlIENDRCBhbGdvcml0aG0gaXMgYWxsb3dlZCB0byBpbnNwZWN0LlxuXHQgKiBMYXJnZSB2YWx1ZXMgY2FuIGltcGFjdCBwZXJmb3JtYW5jZSBiYWRseSBieSBpbmNyZWFzaW5nIHRoZSB3b3JrIG5lZWRlZCBmcm9tIHRoZSBicm9hZC1waGFzZS5cblx0ICpcblx0ICogSXQgaXMgYSBnZW5lcmFsbHkgY2hlYXBlciB2YXJpYW50IG9mIHJlZ3VsYXIgQ0NEIHNpbmNlIGl0IHJlbGllcyBvbiBwcmVkaWN0aXZlIGNvbnN0cmFpbnRzIGluc3RlYWQgb2Ygc2hhcGUtY2FzdCBhbmQgc3Vic3RlcHMuXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgMFxuXHQgKi9cblx0c29mdENjZFByZWRpY3Rpb246IG51bWJlcjtcblxuXHQvKipcblx0ICogSW5pdGlhbCBwb3NpdGlvbiBvZiB0aGUgUmlnaWRCb2R5XG5cdCAqL1xuXHRwb3NpdGlvbj86IE5ndE9iamVjdDNEWydwb3NpdGlvbiddO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsIHJvdGF0aW9uIG9mIHRoZSBSaWdpZEJvZHlcblx0ICovXG5cdHJvdGF0aW9uPzogTmd0T2JqZWN0M0RbJ3JvdGF0aW9uJ107XG5cblx0LyoqXG5cdCAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgY29sbGlkZXJzIGJhc2VkIG9uIG1lc2hlcyBpbnNpZGUgdGhpc1xuXHQgKiByaWdpZCBib2R5LlxuXHQgKlxuXHQgKiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdCBzZXR0aW5nIGdsb2JhbGx5IGJ5IHNldHRpbmcgdGhlIGNvbGxpZGVyc1xuXHQgKiBwcm9wIG9uIHRoZSA8UGh5c2ljcyAvPiBjb21wb25lbnQuXG5cdCAqXG5cdCAqIFNldHRpbmcgdGhpcyB0byBmYWxzZSB3aWxsIGRpc2FibGUgYXV0b21hdGljIGNvbGxpZGVycy5cblx0ICovXG5cdGNvbGxpZGVycz86IE5ndHJSaWdpZEJvZHlBdXRvQ29sbGlkZXIgfCBmYWxzZTtcblxuXHQvKipcblx0ICogU2V0IHRoZSBmcmljdGlvbiBvZiBhdXRvLWdlbmVyYXRlZCBjb2xsaWRlcnMuXG5cdCAqIFRoaXMgZG9lcyBub3QgYWZmZWN0IGFueSBub24tYXV0b21hdGljIGNoaWxkIGNvbGxpZGVyLWNvbXBvbmVudHMuXG5cdCAqL1xuXHRmcmljdGlvbj86IG51bWJlcjtcblxuXHQvKipcblx0ICogU2V0IHRoZSByZXN0aXR1dGlvbiAoYm91bmNpbmVzcykgb2YgYXV0by1nZW5lcmF0ZWQgY29sbGlkZXJzLlxuXHQgKiBUaGlzIGRvZXMgbm90IGFmZmVjdCBhbnkgbm9uLWF1dG9tYXRpYyBjaGlsZCBjb2xsaWRlci1jb21wb25lbnRzLlxuXHQgKi9cblx0cmVzdGl0dXRpb24/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHNvbHZlciBpdGVyYXRpb25zIHRoYXQgd2lsbCBiZSBydW4gZm9yIHRoaXNcblx0ICogcmlnaWQtYm9keSBhbmQgZXZlcnl0aGluZyB0aGF0IGludGVyYWN0cyB3aXRoIGl0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHlcblx0ICogdGhyb3VnaCBjb250YWN0cyBvciBqb2ludHMuXG5cdCAqXG5cdCAqIENvbXBhcmVkIHRvIGluY3JlYXNpbmcgdGhlIGdsb2JhbCBgV29ybGQubnVtU29sdmVySXRlcmF0aW9uYCwgc2V0dGluZyB0aGlzXG5cdCAqIHZhbHVlIGxldHMgeW91IGluY3JlYXNlIGFjY3VyYWN5IG9uIG9ubHkgYSBzdWJzZXQgb2YgdGhlIHNjZW5lLCByZXN1bHRpbmcgaW4gcmVkdWNlZFxuXHQgKiBwZXJmb3JtYW5jZSBsb3NzLlxuXHQgKi9cblx0YWRkaXRpb25hbFNvbHZlckl0ZXJhdGlvbnM/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0IGNvbGxpc2lvbiBncm91cHMgYml0bWFzayBmb3IgYWxsIGNvbGxpZGVycyBpbiB0aGlzIHJpZ2lkIGJvZHkuXG5cdCAqIENhbiBiZSBjdXN0b21pemVkIHBlci1jb2xsaWRlci5cblx0ICovXG5cdGNvbGxpc2lvbkdyb3Vwcz86IEludGVyYWN0aW9uR3JvdXBzO1xuXG5cdC8qKlxuXHQgKiBUaGUgZGVmYXVsdCBzb2x2ZXIgZ3JvdXBzIGJpdG1hc2sgZm9yIGFsbCBjb2xsaWRlcnMgaW4gdGhpcyByaWdpZCBib2R5LlxuXHQgKiBDYW4gYmUgY3VzdG9taXplZCBwZXItY29sbGlkZXIuXG5cdCAqL1xuXHRzb2x2ZXJHcm91cHM/OiBJbnRlcmFjdGlvbkdyb3VwcztcblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHQgYWN0aXZlIGNvbGxpc2lvbiB0eXBlcyBmb3IgYWxsIGNvbGxpZGVycyBpbiB0aGlzIHJpZ2lkIGJvZHkuXG5cdCAqIENhbiBiZSBjdXN0b21pemVkIHBlci1jb2xsaWRlci5cblx0ICpcblx0ICogVXNlIGBBY3RpdmVDb2xsaXNpb25UeXBlc2AgdG8gc3BlY2lmeSB3aGljaCBjb2xsaXNpb24gdHlwZXMgc2hvdWxkIGJlIGFjdGl2ZSBmb3IgdGhpcyBjb2xsaWRlci5cblx0ICpcblx0ICogQHNlZSBodHRwczovL3JhcGllci5ycy9qYXZhc2NyaXB0M2QvY2xhc3Nlcy9Db2xsaWRlci5odG1sI3NldEFjdGl2ZUNvbGxpc2lvblR5cGVzXG5cdCAqIEBzZWUgaHR0cHM6Ly9yYXBpZXIucnMvamF2YXNjcmlwdDNkL2VudW1zL0FjdGl2ZUNvbGxpc2lvblR5cGVzLmh0bWxcblx0ICovXG5cdGFjdGl2ZUNvbGxpc2lvblR5cGVzPzogQWN0aXZlQ29sbGlzaW9uVHlwZXM7XG5cblx0LyoqXG5cdCAqIExvY2tzIGFsbCByb3RhdGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlc3VsdGVkIGZyb20gZm9yY2VzIG9uIHRoZSBjcmVhdGVkIHJpZ2lkLWJvZHkuXG5cdCAqL1xuXHRsb2NrUm90YXRpb25zPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogTG9ja3MgYWxsIHRyYW5zbGF0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVzdWx0ZWQgZnJvbSBmb3JjZXMgb24gdGhlIGNyZWF0ZWQgcmlnaWQtYm9keS5cblx0ICovXG5cdGxvY2tUcmFuc2xhdGlvbnM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBBbGxvdyByb3RhdGlvbiBvZiB0aGlzIHJpZ2lkLWJvZHkgb25seSBhbG9uZyBzcGVjaWZpYyBheGVzLlxuXHQgKi9cblx0ZW5hYmxlZFJvdGF0aW9ucz86IFt4OiBib29sZWFuLCB5OiBib29sZWFuLCB6OiBib29sZWFuXTtcblxuXHQvKipcblx0ICogQWxsb3cgdHJhbnNsYXRpb24gb2YgdGhpcyByaWdpZC1ib2R5IG9ubHkgYWxvbmcgc3BlY2lmaWMgYXhlcy5cblx0ICovXG5cdGVuYWJsZWRUcmFuc2xhdGlvbnM/OiBbeDogYm9vbGVhbiwgeTogYm9vbGVhbiwgejogYm9vbGVhbl07XG5cblx0LyoqXG5cdCAqIFBhc3NlZCBkb3duIHRvIHRoZSBvYmplY3QzZCByZXByZXNlbnRpbmcgdGhpcyBjb2xsaWRlci5cblx0ICovXG5cdHVzZXJEYXRhPzogTmd0T2JqZWN0M0RbJ3VzZXJEYXRhJ107XG5cblx0LyoqXG5cdCAqIEluY2x1ZGUgaW52aXNpYmxlIG9iamVjdHMgb24gdGhlIGNvbGxpZGVyIGNyZWF0aW9uIGVzdGltYXRpb24uXG5cdCAqL1xuXHRpbmNsdWRlSW52aXNpYmxlPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogVHJhbnNmb3JtIHRoZSBSaWdpZEJvZHlTdGF0ZVxuXHQgKiBAaW50ZXJuYWwgRG8gbm90IHVzZS4gVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBJbnN0YW5jZWRSaWdpZEJvZGllcyB0byBhbHRlciB0aGUgUmlnaWRCb2R5IFN0YXRlXG5cdCAqL1xuXHR0cmFuc2Zvcm1TdGF0ZT86IChzdGF0ZTogTmd0clJpZ2lkQm9keVN0YXRlKSA9PiBOZ3RyUmlnaWRCb2R5U3RhdGU7XG59XG5cbmV4cG9ydCB0eXBlIE5ndHJDdWJvaWRBcmdzID0gW2hhbGZXaWR0aDogbnVtYmVyLCBoYWxmSGVpZ2h0OiBudW1iZXIsIGhhbGZEZXB0aDogbnVtYmVyXTtcbmV4cG9ydCB0eXBlIE5ndHJCYWxsQXJncyA9IFtyYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ2Fwc3VsZUFyZ3MgPSBbaGFsZkhlaWdodDogbnVtYmVyLCByYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ29udmV4SHVsbEFyZ3MgPSBbdmVydGljZXM6IEFycmF5TGlrZTxudW1iZXI+XTtcbmV4cG9ydCB0eXBlIE5ndHJIZWlnaHRmaWVsZEFyZ3MgPSBbXG5cdHdpZHRoOiBudW1iZXIsXG5cdGhlaWdodDogbnVtYmVyLFxuXHRoZWlnaHRzOiBudW1iZXJbXSxcblx0c2NhbGU6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9LFxuXTtcbmV4cG9ydCB0eXBlIE5ndHJUcmltZXNoQXJncyA9IFt2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sIGluZGljZXM6IEFycmF5TGlrZTxudW1iZXI+XTtcbmV4cG9ydCB0eXBlIE5ndHJQb2x5bGluZUFyZ3MgPSBbdmVydGljZXM6IEZsb2F0MzJBcnJheSwgaW5kaWNlczogVWludDMyQXJyYXldO1xuZXhwb3J0IHR5cGUgTmd0clJvdW5kQ3Vib2lkQXJncyA9IFtoYWxmV2lkdGg6IG51bWJlciwgaGFsZkhlaWdodDogbnVtYmVyLCBoYWxmRGVwdGg6IG51bWJlciwgYm9yZGVyUmFkaXVzOiBudW1iZXJdO1xuZXhwb3J0IHR5cGUgTmd0ckN5bGluZGVyQXJncyA9IFtoYWxmSGVpZ2h0OiBudW1iZXIsIHJhZGl1czogbnVtYmVyXTtcbmV4cG9ydCB0eXBlIE5ndHJSb3VuZEN5bGluZGVyQXJncyA9IFtoYWxmSGVpZ2h0OiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ29uZUFyZ3MgPSBbaGFsZkhlaWdodDogbnVtYmVyLCByYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyUm91bmRDb25lQXJncyA9IFtoYWxmSGVpZ2h0OiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyQ29udmV4TWVzaEFyZ3MgPSBbdmVydGljZXM6IEFycmF5TGlrZTxudW1iZXI+LCBpbmRpY2VzOiBBcnJheUxpa2U8bnVtYmVyPl07XG5leHBvcnQgdHlwZSBOZ3RyUm91bmRDb252ZXhIdWxsQXJncyA9IFt2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sIGluZGljZXM6IEFycmF5TGlrZTxudW1iZXI+LCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5leHBvcnQgdHlwZSBOZ3RyUm91bmRDb252ZXhNZXNoQXJncyA9IFt2ZXJ0aWNlczogQXJyYXlMaWtlPG51bWJlcj4sIGluZGljZXM6IEFycmF5TGlrZTxudW1iZXI+LCBib3JkZXJSYWRpdXM6IG51bWJlcl07XG5cbi8vIEpvaW50c1xuZXhwb3J0IGludGVyZmFjZSBOZ3RyU3BoZXJpY2FsSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJBbmNob3I6IE5ndFZlY3RvcjM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0ckZpeGVkSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTFMb2NhbEZyYW1lOiBOZ3RRdWF0ZXJuaW9uO1xuXHRib2R5MkFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJMb2NhbEZyYW1lOiBOZ3RRdWF0ZXJuaW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJQcmlzbWF0aWNKb2ludFBhcmFtcyB7XG5cdGJvZHkxQW5jaG9yOiBOZ3RWZWN0b3IzO1xuXHRib2R5MkFuY2hvcjogTmd0VmVjdG9yMztcblx0YXhpczogTmd0VmVjdG9yMztcblx0bGltaXRzPzogW21pbjogbnVtYmVyLCBtYXg6IG51bWJlcl07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0clJldm9sdXRlSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJBbmNob3I6IE5ndFZlY3RvcjM7XG5cdGF4aXM6IE5ndFZlY3RvcjM7XG5cdGxpbWl0cz86IFttaW46IG51bWJlciwgbWF4OiBudW1iZXJdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJSb3BlSm9pbnRQYXJhbXMge1xuXHRib2R5MUFuY2hvcjogTmd0VmVjdG9yMztcblx0Ym9keTJBbmNob3I6IE5ndFZlY3RvcjM7XG5cdGxlbmd0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHJTcHJpbmdKb2ludFBhcmFtcyB7XG5cdGJvZHkxQW5jaG9yOiBOZ3RWZWN0b3IzO1xuXHRib2R5MkFuY2hvcjogTmd0VmVjdG9yMztcblx0cmVzdExlbmd0aDogbnVtYmVyO1xuXHRzdGlmZm5lc3M6IG51bWJlcjtcblx0ZGFtcGluZzogbnVtYmVyO1xufVxuIl19
@@ -0,0 +1,151 @@
1
+ import { Quaternion as RapierQuaternion, Vector3 as RapierVector3 } from '@dimforge/rapier3d-compat';
2
+ import { Euler, Vector3 } from 'three';
3
+ import { mergeVertices } from 'three-stdlib';
4
+ import { _matrix4, _position, _quaternion, _rotation, _scale } from './shared';
5
+ /**
6
+ * Creates a proxy that will create a singleton instance of the given class
7
+ * when a property is accessed, and not before.
8
+ *
9
+ * @returns A proxy and a reset function, so that the instance can created again
10
+ */
11
+ export const createSingletonProxy = (
12
+ /**
13
+ * A function that returns a new instance of the class
14
+ */
15
+ createInstance) => {
16
+ let instance;
17
+ const handler = {
18
+ get(target, prop) {
19
+ if (!instance) {
20
+ instance = createInstance();
21
+ }
22
+ return Reflect.get(instance, prop);
23
+ },
24
+ set(target, prop, value) {
25
+ if (!instance) {
26
+ instance = createInstance();
27
+ }
28
+ return Reflect.set(instance, prop, value);
29
+ },
30
+ };
31
+ const proxy = new Proxy({}, handler);
32
+ const reset = () => {
33
+ instance = undefined;
34
+ };
35
+ const set = (newInstance) => {
36
+ instance = newInstance;
37
+ };
38
+ /**
39
+ * Return the proxy and a reset function
40
+ */
41
+ return { proxy, reset, set };
42
+ };
43
+ export function rapierQuaternionToQuaternion({ x, y, z, w }) {
44
+ return _quaternion.set(x, y, z, w);
45
+ }
46
+ export function vector3ToRapierVector(v) {
47
+ if (Array.isArray(v)) {
48
+ return new RapierVector3(v[0], v[1], v[2]);
49
+ }
50
+ if (typeof v === 'number') {
51
+ return new RapierVector3(v, v, v);
52
+ }
53
+ const vector = v;
54
+ return new RapierVector3(vector.x, vector.y, vector.z);
55
+ }
56
+ export function quaternionToRapierQuaternion(v) {
57
+ if (Array.isArray(v)) {
58
+ return new RapierQuaternion(v[0], v[1], v[2], v[3]);
59
+ }
60
+ return new RapierQuaternion(v.x, v.y, v.z, v.w);
61
+ }
62
+ function isChildOfMeshCollider(child) {
63
+ let flag = false;
64
+ child.traverseAncestors((a) => {
65
+ if (a.userData['ngtRapierType'] === 'MeshCollider')
66
+ flag = true;
67
+ });
68
+ return flag;
69
+ }
70
+ const autoColliderMap = {
71
+ cuboid: 'cuboid',
72
+ ball: 'ball',
73
+ hull: 'convexHull',
74
+ trimesh: 'trimesh',
75
+ };
76
+ function getColliderArgsFromGeometry(geometry, colliders) {
77
+ switch (colliders) {
78
+ case 'cuboid': {
79
+ geometry.computeBoundingBox();
80
+ const { boundingBox } = geometry;
81
+ const size = boundingBox.getSize(new Vector3());
82
+ return {
83
+ args: [size.x / 2, size.y / 2, size.z / 2],
84
+ offset: boundingBox.getCenter(new Vector3()),
85
+ };
86
+ }
87
+ case 'ball': {
88
+ geometry.computeBoundingSphere();
89
+ const { boundingSphere } = geometry;
90
+ const radius = boundingSphere.radius;
91
+ return {
92
+ args: [radius],
93
+ offset: boundingSphere.center,
94
+ };
95
+ }
96
+ case 'trimesh': {
97
+ const clonedGeometry = geometry.index ? geometry.clone() : mergeVertices(geometry);
98
+ return {
99
+ args: [clonedGeometry.attributes['position'].array, clonedGeometry.index?.array],
100
+ offset: new Vector3(),
101
+ };
102
+ }
103
+ case 'hull': {
104
+ const clonedGeometry = geometry.clone();
105
+ return {
106
+ args: [clonedGeometry.attributes['position'].array],
107
+ offset: new Vector3(),
108
+ };
109
+ }
110
+ }
111
+ return { args: [], offset: new Vector3() };
112
+ }
113
+ export function createColliderOptions(object, options, ignoreMeshColliders = true) {
114
+ const childColliderOptions = [];
115
+ object.updateWorldMatrix(true, false);
116
+ const invertedParentMatrixWorld = object.matrixWorld.clone().invert();
117
+ const colliderFromChild = (child) => {
118
+ if (child.isMesh) {
119
+ if (ignoreMeshColliders && isChildOfMeshCollider(child))
120
+ return;
121
+ const worldScale = child.getWorldScale(_scale);
122
+ const shape = autoColliderMap[options.colliders || 'cuboid'];
123
+ child.updateWorldMatrix(true, false);
124
+ _matrix4.copy(child.matrixWorld).premultiply(invertedParentMatrixWorld).decompose(_position, _rotation, _scale);
125
+ const rotationEuler = new Euler().setFromQuaternion(_rotation, 'XYZ');
126
+ const { geometry } = child;
127
+ const { args, offset } = getColliderArgsFromGeometry(geometry, options.colliders || 'cuboid');
128
+ const { mass, linearDamping, angularDamping, canSleep, ccd, gravityScale, softCcdPrediction, ...rest } = options;
129
+ childColliderOptions.push({
130
+ colliderOptions: rest,
131
+ args,
132
+ shape,
133
+ rotation: [rotationEuler.x, rotationEuler.y, rotationEuler.z],
134
+ position: [
135
+ _position.x + offset.x * worldScale.x,
136
+ _position.y + offset.y * worldScale.y,
137
+ _position.z + offset.z * worldScale.z,
138
+ ],
139
+ scale: [worldScale.x, worldScale.y, worldScale.z],
140
+ });
141
+ }
142
+ };
143
+ if (options.includeInvisible) {
144
+ object.traverse(colliderFromChild);
145
+ }
146
+ else {
147
+ object.traverseVisible(colliderFromChild);
148
+ }
149
+ return childColliderOptions;
150
+ }
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3JhcGllci9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsT0FBTyxJQUFJLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJHLE9BQU8sRUFBa0IsS0FBSyxFQUFrQixPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUcvRTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0FBSW5DOztHQUVHO0FBQ0gsY0FBMEIsRUFLekIsRUFBRTtJQUNILElBQUksUUFBb0MsQ0FBQztJQUV6QyxNQUFNLE9BQU8sR0FBaUM7UUFDN0MsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJO1lBQ2YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNmLFFBQVEsR0FBRyxjQUFjLEVBQUUsQ0FBQztZQUM3QixDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSztZQUN0QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2YsUUFBUSxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQzdCLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDO0tBQ0QsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxD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QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUXVhdGVybmlvbiBhcyBSYXBpZXJRdWF0ZXJuaW9uLCBWZWN0b3IzIGFzIFJhcGllclZlY3RvcjMgfSBmcm9tICdAZGltZm9yZ2UvcmFwaWVyM2QtY29tcGF0JztcbmltcG9ydCB7IE5ndEV1bGVyLCBOZ3RRdWF0ZXJuaW9uLCBOZ3RWZWN0b3IzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBCdWZmZXJHZW9tZXRyeSwgRXVsZXIsIE1lc2gsIE9iamVjdDNELCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VWZXJ0aWNlcyB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBfbWF0cml4NCwgX3Bvc2l0aW9uLCBfcXVhdGVybmlvbiwgX3JvdGF0aW9uLCBfc2NhbGUgfSBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQgeyBOZ3RyQ29sbGlkZXJPcHRpb25zLCBOZ3RyQ29sbGlkZXJTaGFwZSwgTmd0clJpZ2lkQm9keUF1dG9Db2xsaWRlciwgTmd0clJpZ2lkQm9keU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgcHJveHkgdGhhdCB3aWxsIGNyZWF0ZSBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gY2xhc3NcbiAqIHdoZW4gYSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCwgYW5kIG5vdCBiZWZvcmUuXG4gKlxuICogQHJldHVybnMgQSBwcm94eSBhbmQgYSByZXNldCBmdW5jdGlvbiwgc28gdGhhdCB0aGUgaW5zdGFuY2UgY2FuIGNyZWF0ZWQgYWdhaW5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNpbmdsZXRvblByb3h5ID0gPFxuXHRTaW5nbGV0b25DbGFzcyBleHRlbmRzIG9iamVjdCxcblx0Q3JlYXRpb25GbiBleHRlbmRzICgpID0+IFNpbmdsZXRvbkNsYXNzID0gKCkgPT4gU2luZ2xldG9uQ2xhc3MsXG4+KFxuXHQvKipcblx0ICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzXG5cdCAqL1xuXHRjcmVhdGVJbnN0YW5jZTogQ3JlYXRpb25Gbixcbik6IHtcblx0cHJveHk6IFNpbmdsZXRvbkNsYXNzO1xuXHRyZXNldDogKCkgPT4gdm9pZDtcblx0c2V0OiAobmV3SW5zdGFuY2U6IFNpbmdsZXRvbkNsYXNzKSA9PiB2b2lkO1xufSA9PiB7XG5cdGxldCBpbnN0YW5jZTogU2luZ2xldG9uQ2xhc3MgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3QgaGFuZGxlcjogUHJveHlIYW5kbGVyPFNpbmdsZXRvbkNsYXNzPiA9IHtcblx0XHRnZXQodGFyZ2V0LCBwcm9wKSB7XG5cdFx0XHRpZiAoIWluc3RhbmNlKSB7XG5cdFx0XHRcdGluc3RhbmNlID0gY3JlYXRlSW5zdGFuY2UoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBSZWZsZWN0LmdldChpbnN0YW5jZSEsIHByb3ApO1xuXHRcdH0sXG5cdFx0c2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcblx0XHRcdGlmICghaW5zdGFuY2UpIHtcblx0XHRcdFx0aW5zdGFuY2UgPSBjcmVhdGVJbnN0YW5jZSgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFJlZmxlY3Quc2V0KGluc3RhbmNlISwgcHJvcCwgdmFsdWUpO1xuXHRcdH0sXG5cdH07XG5cblx0Y29uc3QgcHJveHkgPSBuZXcgUHJveHkoe30gYXMgU2luZ2xldG9uQ2xhc3MsIGhhbmRsZXIpIGFzIFNpbmdsZXRvbkNsYXNzO1xuXG5cdGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuXHRcdGluc3RhbmNlID0gdW5kZWZpbmVkO1xuXHR9O1xuXG5cdGNvbnN0IHNldCA9IChuZXdJbnN0YW5jZTogU2luZ2xldG9uQ2xhc3MpID0+IHtcblx0XHRpbnN0YW5jZSA9IG5ld0luc3RhbmNlO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZXR1cm4gdGhlIHByb3h5IGFuZCBhIHJlc2V0IGZ1bmN0aW9uXG5cdCAqL1xuXHRyZXR1cm4geyBwcm94eSwgcmVzZXQsIHNldCB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJhcGllclF1YXRlcm5pb25Ub1F1YXRlcm5pb24oeyB4LCB5LCB6LCB3IH06IFJhcGllclF1YXRlcm5pb24pIHtcblx0cmV0dXJuIF9xdWF0ZXJuaW9uLnNldCh4LCB5LCB6LCB3KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvcjNUb1JhcGllclZlY3Rvcih2OiBOZ3RWZWN0b3IzKSB7XG5cdGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG5cdFx0cmV0dXJuIG5ldyBSYXBpZXJWZWN0b3IzKHZbMF0sIHZbMV0sIHZbMl0pO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuXHRcdHJldHVybiBuZXcgUmFwaWVyVmVjdG9yMyh2LCB2LCB2KTtcblx0fVxuXHRjb25zdCB2ZWN0b3IgPSB2IGFzIFZlY3RvcjM7XG5cdHJldHVybiBuZXcgUmFwaWVyVmVjdG9yMyh2ZWN0b3IueCwgdmVjdG9yLnksIHZlY3Rvci56KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1YXRlcm5pb25Ub1JhcGllclF1YXRlcm5pb24odjogTmd0UXVhdGVybmlvbikge1xuXHRpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuXHRcdHJldHVybiBuZXcgUmFwaWVyUXVhdGVybmlvbih2WzBdLCB2WzFdLCB2WzJdLCB2WzNdKTtcblx0fVxuXHRyZXR1cm4gbmV3IFJhcGllclF1YXRlcm5pb24odi54LCB2LnksIHYueiwgdi53KTtcbn1cblxuZnVuY3Rpb24gaXNDaGlsZE9mTWVzaENvbGxpZGVyKGNoaWxkOiBNZXNoKSB7XG5cdGxldCBmbGFnID0gZmFsc2U7XG5cdGNoaWxkLnRyYXZlcnNlQW5jZXN0b3JzKChhKSA9PiB7XG5cdFx0aWYgKGEudXNlckRhdGFbJ25ndFJhcGllclR5cGUnXSA9PT0gJ01lc2hDb2xsaWRlcicpIGZsYWcgPSB0cnVlO1xuXHR9KTtcblx0cmV0dXJuIGZsYWc7XG59XG5cbmNvbnN0IGF1dG9Db2xsaWRlck1hcCA9IHtcblx0Y3Vib2lkOiAnY3Vib2lkJyxcblx0YmFsbDogJ2JhbGwnLFxuXHRodWxsOiAnY29udmV4SHVsbCcsXG5cdHRyaW1lc2g6ICd0cmltZXNoJyxcbn07XG5cbmZ1bmN0aW9uIGdldENvbGxpZGVyQXJnc0Zyb21HZW9tZXRyeShcblx0Z2VvbWV0cnk6IEJ1ZmZlckdlb21ldHJ5LFxuXHRjb2xsaWRlcnM6IE5ndHJSaWdpZEJvZHlBdXRvQ29sbGlkZXIsXG4pOiB7IGFyZ3M6IHVua25vd25bXTsgb2Zmc2V0OiBWZWN0b3IzIH0ge1xuXHRzd2l0Y2ggKGNvbGxpZGVycykge1xuXHRcdGNhc2UgJ2N1Ym9pZCc6IHtcblx0XHRcdGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xuXHRcdFx0Y29uc3QgeyBib3VuZGluZ0JveCB9ID0gZ2VvbWV0cnk7XG5cdFx0XHRjb25zdCBzaXplID0gYm91bmRpbmdCb3ghLmdldFNpemUobmV3IFZlY3RvcjMoKSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRhcmdzOiBbc2l6ZS54IC8gMiwgc2l6ZS55IC8gMiwgc2l6ZS56IC8gMl0sXG5cdFx0XHRcdG9mZnNldDogYm91bmRpbmdCb3ghLmdldENlbnRlcihuZXcgVmVjdG9yMygpKSxcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Y2FzZSAnYmFsbCc6IHtcblx0XHRcdGdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO1xuXHRcdFx0Y29uc3QgeyBib3VuZGluZ1NwaGVyZSB9ID0gZ2VvbWV0cnk7XG5cblx0XHRcdGNvbnN0IHJhZGl1cyA9IGJvdW5kaW5nU3BoZXJlIS5yYWRpdXM7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGFyZ3M6IFtyYWRpdXNdLFxuXHRcdFx0XHRvZmZzZXQ6IGJvdW5kaW5nU3BoZXJlIS5jZW50ZXIsXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGNhc2UgJ3RyaW1lc2gnOiB7XG5cdFx0XHRjb25zdCBjbG9uZWRHZW9tZXRyeSA9IGdlb21ldHJ5LmluZGV4ID8gZ2VvbWV0cnkuY2xvbmUoKSA6IG1lcmdlVmVydGljZXMoZ2VvbWV0cnkpO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRhcmdzOiBbY2xvbmVkR2VvbWV0cnkuYXR0cmlidXRlc1sncG9zaXRpb24nXS5hcnJheSBhcyBGbG9hdDMyQXJyYXksIGNsb25lZEdlb21ldHJ5LmluZGV4Py5hcnJheSBhcyBVaW50MzJBcnJheV0sXG5cdFx0XHRcdG9mZnNldDogbmV3IFZlY3RvcjMoKSxcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Y2FzZSAnaHVsbCc6IHtcblx0XHRcdGNvbnN0IGNsb25lZEdlb21ldHJ5ID0gZ2VvbWV0cnkuY2xvbmUoKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGFyZ3M6IFtjbG9uZWRHZW9tZXRyeS5hdHRyaWJ1dGVzWydwb3NpdGlvbiddLmFycmF5IGFzIEZsb2F0MzJBcnJheV0sXG5cdFx0XHRcdG9mZnNldDogbmV3IFZlY3RvcjMoKSxcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgYXJnczogW10sIG9mZnNldDogbmV3IFZlY3RvcjMoKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29sbGlkZXJPcHRpb25zKG9iamVjdDogT2JqZWN0M0QsIG9wdGlvbnM6IE5ndHJSaWdpZEJvZHlPcHRpb25zLCBpZ25vcmVNZXNoQ29sbGlkZXJzID0gdHJ1ZSkge1xuXHRjb25zdCBjaGlsZENvbGxpZGVyT3B0aW9uczoge1xuXHRcdGNvbGxpZGVyT3B0aW9uczogTmd0ckNvbGxpZGVyT3B0aW9ucztcblx0XHRhcmdzOiB1bmtub3duW107XG5cdFx0c2hhcGU6IE5ndHJDb2xsaWRlclNoYXBlO1xuXHRcdHJvdGF0aW9uOiBOZ3RFdWxlcjtcblx0XHRwb3NpdGlvbjogTmd0VmVjdG9yMztcblx0XHRzY2FsZTogTmd0VmVjdG9yMztcblx0fVtdID0gW107XG5cdG9iamVjdC51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cdGNvbnN0IGludmVydGVkUGFyZW50TWF0cml4V29ybGQgPSBvYmplY3QubWF0cml4V29ybGQuY2xvbmUoKS5pbnZlcnQoKTtcblxuXHRjb25zdCBjb2xsaWRlckZyb21DaGlsZCA9IChjaGlsZDogT2JqZWN0M0QpID0+IHtcblx0XHRpZiAoKGNoaWxkIGFzIE1lc2gpLmlzTWVzaCkge1xuXHRcdFx0aWYgKGlnbm9yZU1lc2hDb2xsaWRlcnMgJiYgaXNDaGlsZE9mTWVzaENvbGxpZGVyKGNoaWxkIGFzIE1lc2gpKSByZXR1cm47XG5cblx0XHRcdGNvbnN0IHdvcmxkU2NhbGUgPSBjaGlsZC5nZXRXb3JsZFNjYWxlKF9zY2FsZSk7XG5cdFx0XHRjb25zdCBzaGFwZSA9IGF1dG9Db2xsaWRlck1hcFtvcHRpb25zLmNvbGxpZGVycyB8fCAnY3Vib2lkJ10gYXMgTmd0ckNvbGxpZGVyU2hhcGU7XG5cdFx0XHRjaGlsZC51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRfbWF0cml4NC5jb3B5KGNoaWxkLm1hdHJpeFdvcmxkKS5wcmVtdWx0aXBseShpbnZlcnRlZFBhcmVudE1hdHJpeFdvcmxkKS5kZWNvbXBvc2UoX3Bvc2l0aW9uLCBfcm90YXRpb24sIF9zY2FsZSk7XG5cblx0XHRcdGNvbnN0IHJvdGF0aW9uRXVsZXIgPSBuZXcgRXVsZXIoKS5zZXRGcm9tUXVhdGVybmlvbihfcm90YXRpb24sICdYWVonKTtcblxuXHRcdFx0Y29uc3QgeyBnZW9tZXRyeSB9ID0gY2hpbGQgYXMgTWVzaDtcblx0XHRcdGNvbnN0IHsgYXJncywgb2Zmc2V0IH0gPSBnZXRDb2xsaWRlckFyZ3NGcm9tR2VvbWV0cnkoZ2VvbWV0cnksIG9wdGlvbnMuY29sbGlkZXJzIHx8ICdjdWJvaWQnKTtcblx0XHRcdGNvbnN0IHsgbWFzcywgbGluZWFyRGFtcGluZywgYW5ndWxhckRhbXBpbmcsIGNhblNsZWVwLCBjY2QsIGdyYXZpdHlTY2FsZSwgc29mdENjZFByZWRpY3Rpb24sIC4uLnJlc3QgfSA9IG9wdGlvbnM7XG5cblx0XHRcdGNoaWxkQ29sbGlkZXJPcHRpb25zLnB1c2goe1xuXHRcdFx0XHRjb2xsaWRlck9wdGlvbnM6IHJlc3QsXG5cdFx0XHRcdGFyZ3MsXG5cdFx0XHRcdHNoYXBlLFxuXHRcdFx0XHRyb3RhdGlvbjogW3JvdGF0aW9uRXVsZXIueCwgcm90YXRpb25FdWxlci55LCByb3RhdGlvbkV1bGVyLnpdLFxuXHRcdFx0XHRwb3NpdGlvbjogW1xuXHRcdFx0XHRcdF9wb3NpdGlvbi54ICsgb2Zmc2V0LnggKiB3b3JsZFNjYWxlLngsXG5cdFx0XHRcdFx0X3Bvc2l0aW9uLnkgKyBvZmZzZXQueSAqIHdvcmxkU2NhbGUueSxcblx0XHRcdFx0XHRfcG9zaXRpb24ueiArIG9mZnNldC56ICogd29ybGRTY2FsZS56LFxuXHRcdFx0XHRdLFxuXHRcdFx0XHRzY2FsZTogW3dvcmxkU2NhbGUueCwgd29ybGRTY2FsZS55LCB3b3JsZFNjYWxlLnpdLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXG5cdGlmIChvcHRpb25zLmluY2x1ZGVJbnZpc2libGUpIHtcblx0XHRvYmplY3QudHJhdmVyc2UoY29sbGlkZXJGcm9tQ2hpbGQpO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdC50cmF2ZXJzZVZpc2libGUoY29sbGlkZXJGcm9tQ2hpbGQpO1xuXHR9XG5cblx0cmV0dXJuIGNoaWxkQ29sbGlkZXJPcHRpb25zO1xufVxuIl19