@toriistudio/shader-ui 0.0.4 → 0.0.5
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.
- package/dist/index.d.mts +37 -1
- package/dist/index.d.ts +37 -1
- package/dist/index.js +814 -2
- package/dist/index.mjs +811 -1
- package/package.json +4 -1
package/dist/index.js
CHANGED
|
@@ -38,7 +38,9 @@ __export(src_exports, {
|
|
|
38
38
|
MenuGlitch: () => MenuGlitch,
|
|
39
39
|
OranoParticles: () => OranoParticles,
|
|
40
40
|
ShaderArt: () => ShaderArt,
|
|
41
|
-
Snow: () => Snow
|
|
41
|
+
Snow: () => Snow,
|
|
42
|
+
WANDY_HAND_DEFAULTS: () => WANDY_HAND_DEFAULTS,
|
|
43
|
+
WandyHand: () => WandyHand
|
|
42
44
|
});
|
|
43
45
|
module.exports = __toCommonJS(src_exports);
|
|
44
46
|
|
|
@@ -2659,6 +2661,814 @@ function AnimatedDrawingSVG({
|
|
|
2659
2661
|
}
|
|
2660
2662
|
);
|
|
2661
2663
|
}
|
|
2664
|
+
|
|
2665
|
+
// src/components/WandyHand.tsx
|
|
2666
|
+
var import_react9 = require("react");
|
|
2667
|
+
var import_opentype = __toESM(require("opentype.js"));
|
|
2668
|
+
|
|
2669
|
+
// src/assets/fonts/waltographUI.ttf
|
|
2670
|
+
var waltographUI_default = "data:font/ttf;base64,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L2xpY2Vuc2VzL25jLXNhLzEuMC9XYWx0b2dyYXBoIFVJQm9sZE1HQkY6IFdhbHQgRGlzbmV5IFNjcmlwdDogMjAwMldhbHRvZ3JhcGggVUkgQm9sZDEuMFdhbHRvZ3JhcGhVSS1Cb2xkaHR0cDovL21pY2tleWF2ZW51ZS5jb20vZm9udHNUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4NCg0KQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4NCg0KMS4gRGVmaW5pdGlvbnMNCg0KICAgMS4gIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLg0KICAgMi4gIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLg0KICAgMy4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4NCiAgIDQuICJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4NCiAgIDUuICJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLg0KICAgNi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4NCg0KMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLg0KDQozLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6DQoNCiAgIDEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsNCiAgIDIuIHRvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7DQogICAzLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOw0KICAgNC4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7DQoNClRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLg0KDQo0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6DQoNCiAgIDEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4NCiAgIDIuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuDQogICAzLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4NCg0KNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyDQoNCiAgIDEuIEJ5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yJ3Mga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToNCiAgICAgICAgIDEuIExpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsNCiAgICAgICAgIDIuIFRoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4NCiAgIDIuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4NCg0KNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4NCg0KNy4gVGVybWluYXRpb24NCg0KICAgMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLg0KICAgMi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuDQoNCjguIE1pc2NlbGxhbmVvdXMNCg0KICAgMS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4NCiAgIDIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4NCiAgIDMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4NCiAgIDQuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuDQogICA1LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5odHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9uYy1zYS8xLjAvAEQAaQBnAGkAdABpAHoAZQBkACAAZABhAHQAYQAgAGMAbwBwAHkAcgBpAGcAaAB0ACAAMgAwADAAMAAtADIAMAAwADQAIABtAGkAYwBrAGUAeQBhAHYAZQBuAHUAZQAuAGMAbwBtACAAOgA6ACAAUwBvAG0AZQAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkACAAOgA6ACAARgBvAHIAIABwAGUAcgBzAG8AbgBhAGwALAAgAG4AbwBuAGMAbwBtAG0AZQByAGMAaQBhAGwAIAB1AHMAZQAgAG8AbgBsAHkAIAA6ADoAIABSAGUAbABlAGEAcwBlAGQAIAB1AG4AZABlAHIAIABDAHIAZQBhAHQAaQB2AGUAIABDAG8AbQBtAG8AbgBzACAATgBvAG4AQwBvAG0AbQBlAHIAYwBpAGEAbAAtAFMAaABhAHIAZQBBAGwAaQBrAGUAIABsAGkAYwBlAG4AcwBlACAAaAB0AHQAcAA6AC8ALwBjAHIAZQBhAHQAaQB2AGUAYwBvAG0AbQBvAG4AcwAuAG8AcgBnAC8AbABpAGMAZQBuAHMAZQBzAC8AbgBjAC0AcwBhAC8AMQAuADAALwBXAGEAbAB0AG8AZwByAGEAcABoACAAVQBJAEIAbwBsAGQATQBHAEIARgA6ACAAVwBhAGwAdAAgAEQAaQBzAG4AZQB5ACAAUwBjAHIAaQBwAHQAOgAgADIAMAAwADIAVwBhAGwAdABvAGcAcgBhAHAAaAAgAFUASQAgAEIAbwBsAGQAMQAuADAAVwBhAGwAdABvAGcAcgBhAHAAaABVAEkALQBCAG8AbABkAGgAdAB0AHAAOgAvAC8AbQBpAGMAawBlAHkAYQB2AGUAbgB1AGUALgBjAG8AbQAvAGYAbwBuAHQAcwBUAEgARQAgAFcATwBSAEsAIAAoAEEAUwAgAEQARQBGAEkATgBFAEQAIABCAEUATABPAFcAKQAgAEkAUwAgAFAAUgBPAFYASQBEAEUARAAgAFUATgBEAEUAUgAgAFQASABFACAAVABFAFIATQBTACAATwBGACAAVABIAEkAUwAgAEMAUgBFAEEAVABJAFYARQAgAEMATwBNAE0ATwBOAFMAIABQAFUAQgBMAEkAQwAgAEwASQBDAEUATgBTAEUAIAAoACIAQwBDAFAATAAiACAATwBSACAAIgBMAEkAQwBFAE4AUwBFACIAKQAuACAAVABIAEUAIABXAE8AUgBLACAASQBTACAAUABSAE8AVABFAEMAVABFAEQAIABCAFkAIABDAE8AUABZAFIASQBHAEgAVAAgAEEATgBEAC8ATwBSACAATwBUAEgARQBSACAAQQBQAFAATABJAEMAQQBCAEwARQAgAEwAQQBXAC4AIABBAE4AWQAgAFUAUwBFACAATwBGACAAVABIAEUAIABXAE8AUgBLACAATwBUAEgARQBSACAAVABIAEEATgAgAEEAUwAgAEEAVQBUAEgATwBSAEkAWgBFAEQAIABVAE4ARABFAFIAIABUAEgASQBTACAATABJAEMARQBOAFMARQAgAEkAUwAgAFAAUgBPAEgASQBCAEkAVABFAEQALgANAAoADQAKAEIAWQAgAEUAWABFAFIAQwBJAFMASQBOAEcAIABBAE4AWQAgAFIASQBHAEgAVABTACAAVABPACAAVABIAEUAIABXAE8AUgBLACAAUABSAE8AVgBJAEQARQBEACAASABFAFIARQAsACAAWQBPAFUAIABBAEMAQwBFAFAAVAAgAEEATgBEACAAQQBHAFIARQBFACAAVABPACAAQgBFACAAQgBPAFUATgBEACAAQgBZACAAVABIAEUAIABUAEUAUgBNAFMAIABPAEYAIABUAEgASQBTACAATABJAEMARQBOAFMARQAuACAAVABIAEUAIABMAEkAQwBFAE4AUwBPAFIAIABHAFIAQQBOAFQAUwAgAFkATwBVACAAVABIAEUAIABSAEkARwBIAFQAUwAgAEMATwBOAFQAQQBJAE4ARQBEACAASABFAFIARQAgAEkATgAgAEMATwBOAFMASQBEAEUAUgBBAFQASQBPAE4AIABPAEYAIABZAE8AVQBSACAAQQBDAEMARQBQAFQAQQBOAEMARQAgAE8ARgAgAFMAVQBDAEgAIABUAEUAUgBNAFMAIABBAE4ARAAgAEMATwBOAEQASQBUAEkATwBOAFMALgANAAoADQAKADEALgAgAEQAZQBmAGkAbgBpAHQAaQBvAG4AcwANAAoADQAKACAAIAAgADEALgAgACIAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsAIgAgAG0AZQBhAG4AcwAgAGEAIAB3AG8AcgBrACwAIABzAHUAYwBoACAAYQBzACAAYQAgAHAAZQByAGkAbwBkAGkAYwBhAGwAIABpAHMAcwB1AGUALAAgAGEAbgB0AGgAbwBsAG8AZwB5ACAAbwByACAAZQBuAGMAeQBjAGwAbwBwAGUAZABpAGEALAAgAGkAbgAgAHcAaABpAGMAaAAgAHQAaABlACAAVwBvAHIAawAgAGkAbgAgAGkAdABzACAAZQBuAHQAaQByAGUAdAB5ACAAaQBuACAAdQBuAG0AbwBkAGkAZgBpAGUAZAAgAGYAbwByAG0ALAAgAGEAbABvAG4AZwAgAHcAaQB0AGgAIABhACAAbgB1AG0AYgBlAHIAIABvAGYAIABvAHQAaABlAHIAIABjAG8AbgB0AHIAaQBiAHUAdABpAG8AbgBzACwAIABjAG8AbgBzAHQAaQB0AHUAdABpAG4AZwAgAHMAZQBwAGEAcgBhAHQAZQAgAGEAbgBkACAAaQBuAGQAZQBwAGUAbgBkAGUAbgB0ACAAdwBvAHIAawBzACAAaQBuACAAdABoAGUAbQBzAGUAbAB2AGUAcwAsACAAYQByAGUAIABhAHMAcwBlAG0AYgBsAGUAZAAgAGkAbgB0AG8AIABhACAAYwBvAGwAbABlAGMAdABpAHYAZQAgAHcAaABvAGwAZQAuACAAQQAgAHcAbwByAGsAIAB0AGgAYQB0ACAAYwBvAG4AcwB0AGkAdAB1AHQAZQBzACAAYQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrACAAdwBpAGwAbAAgAG4AbwB0ACAAYgBlACAAYwBvAG4AcwBpAGQAZQByAGUAZAAgAGEAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawAgACgAYQBzACAAZABlAGYAaQBuAGUAZAAgAGIAZQBsAG8AdwApACAAZgBvAHIAIAB0AGgAZQAgAHAAdQByAHAAbwBzAGUAcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADIALgAgACIARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIgAgAG0AZQBhAG4AcwAgAGEAIAB3AG8AcgBrACAAYgBhAHMAZQBkACAAdQBwAG8AbgAgAHQAaABlACAAVwBvAHIAawAgAG8AcgAgAHUAcABvAG4AIAB0AGgAZQAgAFcAbwByAGsAIABhAG4AZAAgAG8AdABoAGUAcgAgAHAAcgBlAC0AZQB4AGkAcwB0AGkAbgBnACAAdwBvAHIAawBzACwAIABzAHUAYwBoACAAYQBzACAAYQAgAHQAcgBhAG4AcwBsAGEAdABpAG8AbgAsACAAbQB1AHMAaQBjAGEAbAAgAGEAcgByAGEAbgBnAGUAbQBlAG4AdAAsACAAZAByAGEAbQBhAHQAaQB6AGEAdABpAG8AbgAsACAAZgBpAGMAdABpAG8AbgBhAGwAaQB6AGEAdABpAG8AbgAsACAAbQBvAHQAaQBvAG4AIABwAGkAYwB0AHUAcgBlACAAdgBlAHIAcwBpAG8AbgAsACAAcwBvAHUAbgBkACAAcgBlAGMAbwByAGQAaQBuAGcALAAgAGEAcgB0ACAAcgBlAHAAcgBvAGQAdQBjAHQAaQBvAG4ALAAgAGEAYgByAGkAZABnAG0AZQBuAHQALAAgAGMAbwBuAGQAZQBuAHMAYQB0AGkAbwBuACwAIABvAHIAIABhAG4AeQAgAG8AdABoAGUAcgAgAGYAbwByAG0AIABpAG4AIAB3AGgAaQBjAGgAIAB0AGgAZQAgAFcAbwByAGsAIABtAGEAeQAgAGIAZQAgAHIAZQBjAGEAcwB0ACwAIAB0AHIAYQBuAHMAZgBvAHIAbQBlAGQALAAgAG8AcgAgAGEAZABhAHAAdABlAGQALAAgAGUAeABjAGUAcAB0ACAAdABoAGEAdAAgAGEAIAB3AG8AcgBrACAAdABoAGEAdAAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawAgAHcAaQBsAGwAIABuAG8AdAAgAGIAZQAgAGMAbwBuAHMAaQBkAGUAcgBlAGQAIABhACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIABmAG8AcgAgAHQAaABlACAAcAB1AHIAcABvAHMAZQAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADMALgAgACIATABpAGMAZQBuAHMAbwByACIAIABtAGUAYQBuAHMAIAB0AGgAZQAgAGkAbgBkAGkAdgBpAGQAdQBhAGwAIABvAHIAIABlAG4AdABpAHQAeQAgAHQAaABhAHQAIABvAGYAZgBlAHIAcwAgAHQAaABlACAAVwBvAHIAawAgAHUAbgBkAGUAcgAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgANAAoAIAAgACAANAAuACAAIgBPAHIAaQBnAGkAbgBhAGwAIABBAHUAdABoAG8AcgAiACAAbQBlAGEAbgBzACAAdABoAGUAIABpAG4AZABpAHYAaQBkAHUAYQBsACAAbwByACAAZQBuAHQAaQB0AHkAIAB3AGgAbwAgAGMAcgBlAGEAdABlAGQAIAB0AGgAZQAgAFcAbwByAGsALgANAAoAIAAgACAANQAuACAAIgBXAG8AcgBrACIAIABtAGUAYQBuAHMAIAB0AGgAZQAgAGMAbwBwAHkAcgBpAGcAaAB0AGEAYgBsAGUAIAB3AG8AcgBrACAAbwBmACAAYQB1AHQAaABvAHIAcwBoAGkAcAAgAG8AZgBmAGUAcgBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADYALgAgACIAWQBvAHUAIgAgAG0AZQBhAG4AcwAgAGEAbgAgAGkAbgBkAGkAdgBpAGQAdQBhAGwAIABvAHIAIABlAG4AdABpAHQAeQAgAGUAeABlAHIAYwBpAHMAaQBuAGcAIAByAGkAZwBoAHQAcwAgAHUAbgBkAGUAcgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAdwBoAG8AIABoAGEAcwAgAG4AbwB0ACAAcAByAGUAdgBpAG8AdQBzAGwAeQAgAHYAaQBvAGwAYQB0AGUAZAAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIAB3AGkAdABoACAAcgBlAHMAcABlAGMAdAAgAHQAbwAgAHQAaABlACAAVwBvAHIAawAsACAAbwByACAAdwBoAG8AIABoAGEAcwAgAHIAZQBjAGUAaQB2AGUAZAAgAGUAeABwAHIAZQBzAHMAIABwAGUAcgBtAGkAcwBzAGkAbwBuACAAZgByAG8AbQAgAHQAaABlACAATABpAGMAZQBuAHMAbwByACAAdABvACAAZQB4AGUAcgBjAGkAcwBlACAAcgBpAGcAaAB0AHMAIAB1AG4AZABlAHIAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAGQAZQBzAHAAaQB0AGUAIABhACAAcAByAGUAdgBpAG8AdQBzACAAdgBpAG8AbABhAHQAaQBvAG4ALgANAAoADQAKADIALgAgAEYAYQBpAHIAIABVAHMAZQAgAFIAaQBnAGgAdABzAC4AIABOAG8AdABoAGkAbgBnACAAaQBuACAAdABoAGkAcwAgAGwAaQBjAGUAbgBzAGUAIABpAHMAIABpAG4AdABlAG4AZABlAGQAIAB0AG8AIAByAGUAZAB1AGMAZQAsACAAbABpAG0AaQB0ACwAIABvAHIAIAByAGUAcwB0AHIAaQBjAHQAIABhAG4AeQAgAHIAaQBnAGgAdABzACAAYQByAGkAcwBpAG4AZwAgAGYAcgBvAG0AIABmAGEAaQByACAAdQBzAGUALAAgAGYAaQByAHMAdAAgAHMAYQBsAGUAIABvAHIAIABvAHQAaABlAHIAIABsAGkAbQBpAHQAYQB0AGkAbwBuAHMAIABvAG4AIAB0AGgAZQAgAGUAeABjAGwAdQBzAGkAdgBlACAAcgBpAGcAaAB0AHMAIABvAGYAIAB0AGgAZQAgAGMAbwBwAHkAcgBpAGcAaAB0ACAAbwB3AG4AZQByACAAdQBuAGQAZQByACAAYwBvAHAAeQByAGkAZwBoAHQAIABsAGEAdwAgAG8AcgAgAG8AdABoAGUAcgAgAGEAcABwAGwAaQBjAGEAYgBsAGUAIABsAGEAdwBzAC4ADQAKAA0ACgAzAC4AIABMAGkAYwBlAG4AcwBlACAARwByAGEAbgB0AC4AIABTAHUAYgBqAGUAYwB0ACAAdABvACAAdABoAGUAIAB0AGUAcgBtAHMAIABhAG4AZAAgAGMAbwBuAGQAaQB0AGkAbwBuAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAsACAATABpAGMAZQBuAHMAbwByACAAaABlAHIAZQBiAHkAIABnAHIAYQBuAHQAcwAgAFkAbwB1ACAAYQAgAHcAbwByAGwAZAB3AGkAZABlACwAIAByAG8AeQBhAGwAdAB5AC0AZgByAGUAZQAsACAAbgBvAG4ALQBlAHgAYwBsAHUAcwBpAHYAZQAsACAAcABlAHIAcABlAHQAdQBhAGwAIAAoAGYAbwByACAAdABoAGUAIABkAHUAcgBhAHQAaQBvAG4AIABvAGYAIAB0AGgAZQAgAGEAcABwAGwAaQBjAGEAYgBsAGUAIABjAG8AcAB5AHIAaQBnAGgAdAApACAAbABpAGMAZQBuAHMAZQAgAHQAbwAgAGUAeABlAHIAYwBpAHMAZQAgAHQAaABlACAAcgBpAGcAaAB0AHMAIABpAG4AIAB0AGgAZQAgAFcAbwByAGsAIABhAHMAIABzAHQAYQB0AGUAZAAgAGIAZQBsAG8AdwA6AA0ACgANAAoAIAAgACAAMQAuACAAdABvACAAcgBlAHAAcgBvAGQAdQBjAGUAIAB0AGgAZQAgAFcAbwByAGsALAAgAHQAbwAgAGkAbgBjAG8AcgBwAG8AcgBhAHQAZQAgAHQAaABlACAAVwBvAHIAawAgAGkAbgB0AG8AIABvAG4AZQAgAG8AcgAgAG0AbwByAGUAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawBzACwAIABhAG4AZAAgAHQAbwAgAHIAZQBwAHIAbwBkAHUAYwBlACAAdABoAGUAIABXAG8AcgBrACAAYQBzACAAaQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABpAG4AIAB0AGgAZQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrAHMAOwANAAoAIAAgACAAMgAuACAAdABvACAAYwByAGUAYQB0AGUAIABhAG4AZAAgAHIAZQBwAHIAbwBkAHUAYwBlACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAcwA7AA0ACgAgACAAIAAzAC4AIAB0AG8AIABkAGkAcwB0AHIAaQBiAHUAdABlACAAYwBvAHAAaQBlAHMAIABvAHIAIABwAGgAbwBuAG8AcgBlAGMAbwByAGQAcwAgAG8AZgAsACAAZABpAHMAcABsAGEAeQAgAHAAdQBiAGwAaQBjAGwAeQAsACAAcABlAHIAZgBvAHIAbQAgAHAAdQBiAGwAaQBjAGwAeQAsACAAYQBuAGQAIABwAGUAcgBmAG8AcgBtACAAcAB1AGIAbABpAGMAbAB5ACAAYgB5ACAAbQBlAGEAbgBzACAAbwBmACAAYQAgAGQAaQBnAGkAdABhAGwAIABhAHUAZABpAG8AIAB0AHIAYQBuAHMAbQBpAHMAcwBpAG8AbgAgAHQAaABlACAAVwBvAHIAawAgAGkAbgBjAGwAdQBkAGkAbgBnACAAYQBzACAAaQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABpAG4AIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawBzADsADQAKACAAIAAgADQALgAgAHQAbwAgAGQAaQBzAHQAcgBpAGIAdQB0AGUAIABjAG8AcABpAGUAcwAgAG8AcgAgAHAAaABvAG4AbwByAGUAYwBvAHIAZABzACAAbwBmACwAIABkAGkAcwBwAGwAYQB5ACAAcAB1AGIAbABpAGMAbAB5ACwAIABwAGUAcgBmAG8AcgBtACAAcAB1AGIAbABpAGMAbAB5ACwAIABhAG4AZAAgAHAAZQByAGYAbwByAG0AIABwAHUAYgBsAGkAYwBsAHkAIABiAHkAIABtAGUAYQBuAHMAIABvAGYAIABhACAAZABpAGcAaQB0AGEAbAAgAGEAdQBkAGkAbwAgAHQAcgBhAG4AcwBtAGkAcwBzAGkAbwBuACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAcwA7AA0ACgANAAoAVABoAGUAIABhAGIAbwB2AGUAIAByAGkAZwBoAHQAcwAgAG0AYQB5ACAAYgBlACAAZQB4AGUAcgBjAGkAcwBlAGQAIABpAG4AIABhAGwAbAAgAG0AZQBkAGkAYQAgAGEAbgBkACAAZgBvAHIAbQBhAHQAcwAgAHcAaABlAHQAaABlAHIAIABuAG8AdwAgAGsAbgBvAHcAbgAgAG8AcgAgAGgAZQByAGUAYQBmAHQAZQByACAAZABlAHYAaQBzAGUAZAAuACAAVABoAGUAIABhAGIAbwB2AGUAIAByAGkAZwBoAHQAcwAgAGkAbgBjAGwAdQBkAGUAIAB0AGgAZQAgAHIAaQBnAGgAdAAgAHQAbwAgAG0AYQBrAGUAIABzAHUAYwBoACAAbQBvAGQAaQBmAGkAYwBhAHQAaQBvAG4AcwAgAGEAcwAgAGEAcgBlACAAdABlAGMAaABuAGkAYwBhAGwAbAB5ACAAbgBlAGMAZQBzAHMAYQByAHkAIAB0AG8AIABlAHgAZQByAGMAaQBzAGUAIAB0AGgAZQAgAHIAaQBnAGgAdABzACAAaQBuACAAbwB0AGgAZQByACAAbQBlAGQAaQBhACAAYQBuAGQAIABmAG8AcgBtAGEAdABzAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAbgBvAHQAIABlAHgAcAByAGUAcwBzAGwAeQAgAGcAcgBhAG4AdABlAGQAIABiAHkAIABMAGkAYwBlAG4AcwBvAHIAIABhAHIAZQAgAGgAZQByAGUAYgB5ACAAcgBlAHMAZQByAHYAZQBkAC4ADQAKAA0ACgA0AC4AIABSAGUAcwB0AHIAaQBjAHQAaQBvAG4AcwAuACAAVABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAGkAbgAgAFMAZQBjAHQAaQBvAG4AIAAzACAAYQBiAG8AdgBlACAAaQBzACAAZQB4AHAAcgBlAHMAcwBsAHkAIABtAGEAZABlACAAcwB1AGIAagBlAGMAdAAgAHQAbwAgAGEAbgBkACAAbABpAG0AaQB0AGUAZAAgAGIAeQAgAHQAaABlACAAZgBvAGwAbABvAHcAaQBuAGcAIAByAGUAcwB0AHIAaQBjAHQAaQBvAG4AcwA6AA0ACgANAAoAIAAgACAAMQAuACAAWQBvAHUAIABtAGEAeQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUALAAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBzAHAAbABhAHkALAAgAHAAdQBiAGwAaQBjAGwAeQAgAHAAZQByAGYAbwByAG0ALAAgAG8AcgAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBnAGkAdABhAGwAbAB5ACAAcABlAHIAZgBvAHIAbQAgAHQAaABlACAAVwBvAHIAawAgAG8AbgBsAHkAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABhAG4AZAAgAFkAbwB1ACAAbQB1AHMAdAAgAGkAbgBjAGwAdQBkAGUAIABhACAAYwBvAHAAeQAgAG8AZgAsACAAbwByACAAdABoAGUAIABVAG4AaQBmAG8AcgBtACAAUgBlAHMAbwB1AHIAYwBlACAASQBkAGUAbgB0AGkAZgBpAGUAcgAgAGYAbwByACwAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAHcAaQB0AGgAIABlAHYAZQByAHkAIABjAG8AcAB5ACAAbwByACAAcABoAG8AbgBvAHIAZQBjAG8AcgBkACAAbwBmACAAdABoAGUAIABXAG8AcgBrACAAWQBvAHUAIABkAGkAcwB0AHIAaQBiAHUAdABlACwAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAcwBwAGwAYQB5ACwAIABwAHUAYgBsAGkAYwBsAHkAIABwAGUAcgBmAG8AcgBtACwAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0ALgAgAFkAbwB1ACAAbQBhAHkAIABuAG8AdAAgAG8AZgBmAGUAcgAgAG8AcgAgAGkAbQBwAG8AcwBlACAAYQBuAHkAIAB0AGUAcgBtAHMAIABvAG4AIAB0AGgAZQAgAFcAbwByAGsAIAB0AGgAYQB0ACAAYQBsAHQAZQByACAAbwByACAAcgBlAHMAdAByAGkAYwB0ACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAG8AcgAgAHQAaABlACAAcgBlAGMAaQBwAGkAZQBuAHQAcwAnACAAZQB4AGUAcgBjAGkAcwBlACAAbwBmACAAdABoAGUAIAByAGkAZwBoAHQAcwAgAGcAcgBhAG4AdABlAGQAIABoAGUAcgBlAHUAbgBkAGUAcgAuACAAWQBvAHUAIABtAGEAeQAgAG4AbwB0ACAAcwB1AGIAbABpAGMAZQBuAHMAZQAgAHQAaABlACAAVwBvAHIAawAuACAAWQBvAHUAIABtAHUAcwB0ACAAawBlAGUAcAAgAGkAbgB0AGEAYwB0ACAAYQBsAGwAIABuAG8AdABpAGMAZQBzACAAdABoAGEAdAAgAHIAZQBmAGUAcgAgAHQAbwAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAYQBuAGQAIAB0AG8AIAB0AGgAZQAgAGQAaQBzAGMAbABhAGkAbQBlAHIAIABvAGYAIAB3AGEAcgByAGEAbgB0AGkAZQBzAC4AIABZAG8AdQAgAG0AYQB5ACAAbgBvAHQAIABkAGkAcwB0AHIAaQBiAHUAdABlACwAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAcwBwAGwAYQB5ACwAIABwAHUAYgBsAGkAYwBsAHkAIABwAGUAcgBmAG8AcgBtACwAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0AIAB0AGgAZQAgAFcAbwByAGsAIAB3AGkAdABoACAAYQBuAHkAIAB0AGUAYwBoAG4AbwBsAG8AZwBpAGMAYQBsACAAbQBlAGEAcwB1AHIAZQBzACAAdABoAGEAdAAgAGMAbwBuAHQAcgBvAGwAIABhAGMAYwBlAHMAcwAgAG8AcgAgAHUAcwBlACAAbwBmACAAdABoAGUAIABXAG8AcgBrACAAaQBuACAAYQAgAG0AYQBuAG4AZQByACAAaQBuAGMAbwBuAHMAaQBzAHQAZQBuAHQAIAB3AGkAdABoACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAEEAZwByAGUAZQBtAGUAbgB0AC4AIABUAGgAZQAgAGEAYgBvAHYAZQAgAGEAcABwAGwAaQBlAHMAIAB0AG8AIAB0AGgAZQAgAFcAbwByAGsAIABhAHMAIABpAG4AYwBvAHIAcABvAHIAYQB0AGUAZAAgAGkAbgAgAGEAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawAsACAAYgB1AHQAIAB0AGgAaQBzACAAZABvAGUAcwAgAG4AbwB0ACAAcgBlAHEAdQBpAHIAZQAgAHQAaABlACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsAIABhAHAAYQByAHQAIABmAHIAbwBtACAAdABoAGUAIABXAG8AcgBrACAAaQB0AHMAZQBsAGYAIAB0AG8AIABiAGUAIABtAGEAZABlACAAcwB1AGIAagBlAGMAdAAgAHQAbwAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgAgAEkAZgAgAFkAbwB1ACAAYwByAGUAYQB0AGUAIABhACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsALAAgAHUAcABvAG4AIABuAG8AdABpAGMAZQAgAGYAcgBvAG0AIABhAG4AeQAgAEwAaQBjAGUAbgBzAG8AcgAgAFkAbwB1ACAAbQB1AHMAdAAsACAAdABvACAAdABoAGUAIABlAHgAdABlAG4AdAAgAHAAcgBhAGMAdABpAGMAYQBiAGwAZQAsACAAcgBlAG0AbwB2AGUAIABmAHIAbwBtACAAdABoAGUAIABDAG8AbABsAGUAYwB0AGkAdgBlACAAVwBvAHIAawAgAGEAbgB5ACAAcgBlAGYAZQByAGUAbgBjAGUAIAB0AG8AIABzAHUAYwBoACAATABpAGMAZQBuAHMAbwByACAAbwByACAAdABoAGUAIABPAHIAaQBnAGkAbgBhAGwAIABBAHUAdABoAG8AcgAsACAAYQBzACAAcgBlAHEAdQBlAHMAdABlAGQALgAgAEkAZgAgAFkAbwB1ACAAYwByAGUAYQB0AGUAIABhACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsALAAgAHUAcABvAG4AIABuAG8AdABpAGMAZQAgAGYAcgBvAG0AIABhAG4AeQAgAEwAaQBjAGUAbgBzAG8AcgAgAFkAbwB1ACAAbQB1AHMAdAAsACAAdABvACAAdABoAGUAIABlAHgAdABlAG4AdAAgAHAAcgBhAGMAdABpAGMAYQBiAGwAZQAsACAAcgBlAG0AbwB2AGUAIABmAHIAbwBtACAAdABoAGUAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawAgAGEAbgB5ACAAcgBlAGYAZQByAGUAbgBjAGUAIAB0AG8AIABzAHUAYwBoACAATABpAGMAZQBuAHMAbwByACAAbwByACAAdABoAGUAIABPAHIAaQBnAGkAbgBhAGwAIABBAHUAdABoAG8AcgAsACAAYQBzACAAcgBlAHEAdQBlAHMAdABlAGQALgANAAoAIAAgACAAMgAuACAAWQBvAHUAIABtAGEAeQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUALAAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBzAHAAbABhAHkALAAgAHAAdQBiAGwAaQBjAGwAeQAgAHAAZQByAGYAbwByAG0ALAAgAG8AcgAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBnAGkAdABhAGwAbAB5ACAAcABlAHIAZgBvAHIAbQAgAGEAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawAgAG8AbgBsAHkAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABhAG4AZAAgAFkAbwB1ACAAbQB1AHMAdAAgAGkAbgBjAGwAdQBkAGUAIABhACAAYwBvAHAAeQAgAG8AZgAsACAAbwByACAAdABoAGUAIABVAG4AaQBmAG8AcgBtACAAUgBlAHMAbwB1AHIAYwBlACAASQBkAGUAbgB0AGkAZgBpAGUAcgAgAGYAbwByACwAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAHcAaQB0AGgAIABlAHYAZQByAHkAIABjAG8AcAB5ACAAbwByACAAcABoAG8AbgBvAHIAZQBjAG8AcgBkACAAbwBmACAAZQBhAGMAaAAgAEQAZQByAGkAdgBhAHQAaQB2AGUAIABXAG8AcgBrACAAWQBvAHUAIABkAGkAcwB0AHIAaQBiAHUAdABlACwAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAcwBwAGwAYQB5ACwAIABwAHUAYgBsAGkAYwBsAHkAIABwAGUAcgBmAG8AcgBtACwAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0ALgAgAFkAbwB1ACAAbQBhAHkAIABuAG8AdAAgAG8AZgBmAGUAcgAgAG8AcgAgAGkAbQBwAG8AcwBlACAAYQBuAHkAIAB0AGUAcgBtAHMAIABvAG4AIAB0AGgAZQAgAEQAZQByAGkAdgBhAHQAaQB2AGUAIABXAG8AcgBrAHMAIAB0AGgAYQB0ACAAYQBsAHQAZQByACAAbwByACAAcgBlAHMAdAByAGkAYwB0ACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAG8AcgAgAHQAaABlACAAcgBlAGMAaQBwAGkAZQBuAHQAcwAnACAAZQB4AGUAcgBjAGkAcwBlACAAbwBmACAAdABoAGUAIAByAGkAZwBoAHQAcwAgAGcAcgBhAG4AdABlAGQAIABoAGUAcgBlAHUAbgBkAGUAcgAsACAAYQBuAGQAIABZAG8AdQAgAG0AdQBzAHQAIABrAGUAZQBwACAAaQBuAHQAYQBjAHQAIABhAGwAbAAgAG4AbwB0AGkAYwBlAHMAIAB0AGgAYQB0ACAAcgBlAGYAZQByACAAdABvACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIABhAG4AZAAgAHQAbwAgAHQAaABlACAAZABpAHMAYwBsAGEAaQBtAGUAcgAgAG8AZgAgAHcAYQByAHIAYQBuAHQAaQBlAHMALgAgAFkAbwB1ACAAbQBhAHkAIABuAG8AdAAgAGQAaQBzAHQAcgBpAGIAdQB0AGUALAAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBzAHAAbABhAHkALAAgAHAAdQBiAGwAaQBjAGwAeQAgAHAAZQByAGYAbwByAG0ALAAgAG8AcgAgAHAAdQBiAGwAaQBjAGwAeQAgAGQAaQBnAGkAdABhAGwAbAB5ACAAcABlAHIAZgBvAHIAbQAgAHQAaABlACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIAB3AGkAdABoACAAYQBuAHkAIAB0AGUAYwBoAG4AbwBsAG8AZwBpAGMAYQBsACAAbQBlAGEAcwB1AHIAZQBzACAAdABoAGEAdAAgAGMAbwBuAHQAcgBvAGwAIABhAGMAYwBlAHMAcwAgAG8AcgAgAHUAcwBlACAAbwBmACAAdABoAGUAIABXAG8AcgBrACAAaQBuACAAYQAgAG0AYQBuAG4AZQByACAAaQBuAGMAbwBuAHMAaQBzAHQAZQBuAHQAIAB3AGkAdABoACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAgAEEAZwByAGUAZQBtAGUAbgB0AC4AIABUAGgAZQAgAGEAYgBvAHYAZQAgAGEAcABwAGwAaQBlAHMAIAB0AG8AIAB0AGgAZQAgAEQAZQByAGkAdgBhAHQAaQB2AGUAIABXAG8AcgBrACAAYQBzACAAaQBuAGMAbwByAHAAbwByAGEAdABlAGQAIABpAG4AIABhACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsALAAgAGIAdQB0ACAAdABoAGkAcwAgAGQAbwBlAHMAIABuAG8AdAAgAHIAZQBxAHUAaQByAGUAIAB0AGgAZQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrACAAYQBwAGEAcgB0ACAAZgByAG8AbQAgAHQAaABlACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsAIABpAHQAcwBlAGwAZgAgAHQAbwAgAGIAZQAgAG0AYQBkAGUAIABzAHUAYgBqAGUAYwB0ACAAdABvACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAuAA0ACgAgACAAIAAzAC4AIABZAG8AdQAgAG0AYQB5ACAAbgBvAHQAIABlAHgAZQByAGMAaQBzAGUAIABhAG4AeQAgAG8AZgAgAHQAaABlACAAcgBpAGcAaAB0AHMAIABnAHIAYQBuAHQAZQBkACAAdABvACAAWQBvAHUAIABpAG4AIABTAGUAYwB0AGkAbwBuACAAMwAgAGEAYgBvAHYAZQAgAGkAbgAgAGEAbgB5ACAAbQBhAG4AbgBlAHIAIAB0AGgAYQB0ACAAaQBzACAAcAByAGkAbQBhAHIAaQBsAHkAIABpAG4AdABlAG4AZABlAGQAIABmAG8AcgAgAG8AcgAgAGQAaQByAGUAYwB0AGUAZAAgAHQAbwB3AGEAcgBkACAAYwBvAG0AbQBlAHIAYwBpAGEAbAAgAGEAZAB2AGEAbgB0AGEAZwBlACAAbwByACAAcAByAGkAdgBhAHQAZQAgAG0AbwBuAGUAdABhAHIAeQAgAGMAbwBtAHAAZQBuAHMAYQB0AGkAbwBuAC4AIABUAGgAZQAgAGUAeABjAGgAYQBuAGcAZQAgAG8AZgAgAHQAaABlACAAVwBvAHIAawAgAGYAbwByACAAbwB0AGgAZQByACAAYwBvAHAAeQByAGkAZwBoAHQAZQBkACAAdwBvAHIAawBzACAAYgB5ACAAbQBlAGEAbgBzACAAbwBmACAAZABpAGcAaQB0AGEAbAAgAGYAaQBsAGUALQBzAGgAYQByAGkAbgBnACAAbwByACAAbwB0AGgAZQByAHcAaQBzAGUAIABzAGgAYQBsAGwAIABuAG8AdAAgAGIAZQAgAGMAbwBuAHMAaQBkAGUAcgBlAGQAIAB0AG8AIABiAGUAIABpAG4AdABlAG4AZABlAGQAIABmAG8AcgAgAG8AcgAgAGQAaQByAGUAYwB0AGUAZAAgAHQAbwB3AGEAcgBkACAAYwBvAG0AbQBlAHIAYwBpAGEAbAAgAGEAZAB2AGEAbgB0AGEAZwBlACAAbwByACAAcAByAGkAdgBhAHQAZQAgAG0AbwBuAGUAdABhAHIAeQAgAGMAbwBtAHAAZQBuAHMAYQB0AGkAbwBuACwAIABwAHIAbwB2AGkAZABlAGQAIAB0AGgAZQByAGUAIABpAHMAIABuAG8AIABwAGEAeQBtAGUAbgB0ACAAbwBmACAAYQBuAHkAIABtAG8AbgBlAHQAYQByAHkAIABjAG8AbQBwAGUAbgBzAGEAdABpAG8AbgAgAGkAbgAgAGMAbwBuAG4AZQBjAHQAaQBvAG4AIAB3AGkAdABoACAAdABoAGUAIABlAHgAYwBoAGEAbgBnAGUAIABvAGYAIABjAG8AcAB5AHIAaQBnAGgAdABlAGQAIAB3AG8AcgBrAHMALgANAAoADQAKADUALgAgAFIAZQBwAHIAZQBzAGUAbgB0AGEAdABpAG8AbgBzACwAIABXAGEAcgByAGEAbgB0AGkAZQBzACAAYQBuAGQAIABEAGkAcwBjAGwAYQBpAG0AZQByAA0ACgANAAoAIAAgACAAMQAuACAAQgB5ACAAbwBmAGYAZQByAGkAbgBnACAAdABoAGUAIABXAG8AcgBrACAAZgBvAHIAIABwAHUAYgBsAGkAYwAgAHIAZQBsAGUAYQBzAGUAIAB1AG4AZABlAHIAIAB0AGgAaQBzACAATABpAGMAZQBuAHMAZQAsACAATABpAGMAZQBuAHMAbwByACAAcgBlAHAAcgBlAHMAZQBuAHQAcwAgAGEAbgBkACAAdwBhAHIAcgBhAG4AdABzACAAdABoAGEAdAAsACAAdABvACAAdABoAGUAIABiAGUAcwB0ACAAbwBmACAATABpAGMAZQBuAHMAbwByACcAcwAgAGsAbgBvAHcAbABlAGQAZwBlACAAYQBmAHQAZQByACAAcgBlAGEAcwBvAG4AYQBiAGwAZQAgAGkAbgBxAHUAaQByAHkAOgANAAoAIAAgACAAIAAgACAAIAAgACAAMQAuACAATABpAGMAZQBuAHMAbwByACAAaABhAHMAIABzAGUAYwB1AHIAZQBkACAAYQBsAGwAIAByAGkAZwBoAHQAcwAgAGkAbgAgAHQAaABlACAAVwBvAHIAawAgAG4AZQBjAGUAcwBzAGEAcgB5ACAAdABvACAAZwByAGEAbgB0ACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAcgBpAGcAaAB0AHMAIABoAGUAcgBlAHUAbgBkAGUAcgAgAGEAbgBkACAAdABvACAAcABlAHIAbQBpAHQAIAB0AGgAZQAgAGwAYQB3AGYAdQBsACAAZQB4AGUAcgBjAGkAcwBlACAAbwBmACAAdABoAGUAIAByAGkAZwBoAHQAcwAgAGcAcgBhAG4AdABlAGQAIABoAGUAcgBlAHUAbgBkAGUAcgAgAHcAaQB0AGgAbwB1AHQAIABZAG8AdQAgAGgAYQB2AGkAbgBnACAAYQBuAHkAIABvAGIAbABpAGcAYQB0AGkAbwBuACAAdABvACAAcABhAHkAIABhAG4AeQAgAHIAbwB5AGEAbAB0AGkAZQBzACwAIABjAG8AbQBwAHUAbABzAG8AcgB5ACAAbABpAGMAZQBuAHMAZQAgAGYAZQBlAHMALAAgAHIAZQBzAGkAZAB1AGEAbABzACAAbwByACAAYQBuAHkAIABvAHQAaABlAHIAIABwAGEAeQBtAGUAbgB0AHMAOwANAAoAIAAgACAAIAAgACAAIAAgACAAMgAuACAAVABoAGUAIABXAG8AcgBrACAAZABvAGUAcwAgAG4AbwB0ACAAaQBuAGYAcgBpAG4AZwBlACAAdABoAGUAIABjAG8AcAB5AHIAaQBnAGgAdAAsACAAdAByAGEAZABlAG0AYQByAGsALAAgAHAAdQBiAGwAaQBjAGkAdAB5ACAAcgBpAGcAaAB0AHMALAAgAGMAbwBtAG0AbwBuACAAbABhAHcAIAByAGkAZwBoAHQAcwAgAG8AcgAgAGEAbgB5ACAAbwB0AGgAZQByACAAcgBpAGcAaAB0ACAAbwBmACAAYQBuAHkAIAB0AGgAaQByAGQAIABwAGEAcgB0AHkAIABvAHIAIABjAG8AbgBzAHQAaQB0AHUAdABlACAAZABlAGYAYQBtAGEAdABpAG8AbgAsACAAaQBuAHYAYQBzAGkAbwBuACAAbwBmACAAcAByAGkAdgBhAGMAeQAgAG8AcgAgAG8AdABoAGUAcgAgAHQAbwByAHQAaQBvAHUAcwAgAGkAbgBqAHUAcgB5ACAAdABvACAAYQBuAHkAIAB0AGgAaQByAGQAIABwAGEAcgB0AHkALgANAAoAIAAgACAAMgAuACAARQBYAEMARQBQAFQAIABBAFMAIABFAFgAUABSAEUAUwBTAEwAWQAgAFMAVABBAFQARQBEACAASQBOACAAVABIAEkAUwAgAEwASQBDAEUATgBTAEUAIABPAFIAIABPAFQASABFAFIAVwBJAFMARQAgAEEARwBSAEUARQBEACAASQBOACAAVwBSAEkAVABJAE4ARwAgAE8AUgAgAFIARQBRAFUASQBSAEUARAAgAEIAWQAgAEEAUABQAEwASQBDAEEAQgBMAEUAIABMAEEAVwAsACAAVABIAEUAIABXAE8AUgBLACAASQBTACAATABJAEMARQBOAFMARQBEACAATwBOACAAQQBOACAAIgBBAFMAIABJAFMAIgAgAEIAQQBTAEkAUwAsACAAVwBJAFQASABPAFUAVAAgAFcAQQBSAFIAQQBOAFQASQBFAFMAIABPAEYAIABBAE4AWQAgAEsASQBOAEQALAAgAEUASQBUAEgARQBSACAARQBYAFAAUgBFAFMAUwAgAE8AUgAgAEkATQBQAEwASQBFAEQAIABJAE4AQwBMAFUARABJAE4ARwAsACAAVwBJAFQASABPAFUAVAAgAEwASQBNAEkAVABBAFQASQBPAE4ALAAgAEEATgBZACAAVwBBAFIAUgBBAE4AVABJAEUAUwAgAFIARQBHAEEAUgBEAEkATgBHACAAVABIAEUAIABDAE8ATgBUAEUATgBUAFMAIABPAFIAIABBAEMAQwBVAFIAQQBDAFkAIABPAEYAIABUAEgARQAgAFcATwBSAEsALgANAAoADQAKADYALgAgAEwAaQBtAGkAdABhAHQAaQBvAG4AIABvAG4AIABMAGkAYQBiAGkAbABpAHQAeQAuACAARQBYAEMARQBQAFQAIABUAE8AIABUAEgARQAgAEUAWABUAEUATgBUACAAUgBFAFEAVQBJAFIARQBEACAAQgBZACAAQQBQAFAATABJAEMAQQBCAEwARQAgAEwAQQBXACwAIABBAE4ARAAgAEUAWABDAEUAUABUACAARgBPAFIAIABEAEEATQBBAEcARQBTACAAQQBSAEkAUwBJAE4ARwAgAEYAUgBPAE0AIABMAEkAQQBCAEkATABJAFQAWQAgAFQATwAgAEEAIABUAEgASQBSAEQAIABQAEEAUgBUAFkAIABSAEUAUwBVAEwAVABJAE4ARwAgAEYAUgBPAE0AIABCAFIARQBBAEMASAAgAE8ARgAgAFQASABFACAAVwBBAFIAUgBBAE4AVABJAEUAUwAgAEkATgAgAFMARQBDAFQASQBPAE4AIAA1ACwAIABJAE4AIABOAE8AIABFAFYARQBOAFQAIABXAEkATABMACAATABJAEMARQBOAFMATwBSACAAQgBFACAATABJAEEAQgBMAEUAIABUAE8AIABZAE8AVQAgAE8ATgAgAEEATgBZACAATABFAEcAQQBMACAAVABIAEUATwBSAFkAIABGAE8AUgAgAEEATgBZACAAUwBQAEUAQwBJAEEATAAsACAASQBOAEMASQBEAEUATgBUAEEATAAsACAAQwBPAE4AUwBFAFEAVQBFAE4AVABJAEEATAAsACAAUABVAE4ASQBUAEkAVgBFACAATwBSACAARQBYAEUATQBQAEwAQQBSAFkAIABEAEEATQBBAEcARQBTACAAQQBSAEkAUwBJAE4ARwAgAE8AVQBUACAATwBGACAAVABIAEkAUwAgAEwASQBDAEUATgBTAEUAIABPAFIAIABUAEgARQAgAFUAUwBFACAATwBGACAAVABIAEUAIABXAE8AUgBLACwAIABFAFYARQBOACAASQBGACAATABJAEMARQBOAFMATwBSACAASABBAFMAIABCAEUARQBOACAAQQBEAFYASQBTAEUARAAgAE8ARgAgAFQASABFACAAUABPAFMAUwBJAEIASQBMAEkAVABZACAATwBGACAAUwBVAEMASAAgAEQAQQBNAEEARwBFAFMALgANAAoADQAKADcALgAgAFQAZQByAG0AaQBuAGEAdABpAG8AbgANAAoADQAKACAAIAAgADEALgAgAFQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAYQBuAGQAIAB0AGgAZQAgAHIAaQBnAGgAdABzACAAZwByAGEAbgB0AGUAZAAgAGgAZQByAGUAdQBuAGQAZQByACAAdwBpAGwAbAAgAHQAZQByAG0AaQBuAGEAdABlACAAYQB1AHQAbwBtAGEAdABpAGMAYQBsAGwAeQAgAHUAcABvAG4AIABhAG4AeQAgAGIAcgBlAGEAYwBoACAAYgB5ACAAWQBvAHUAIABvAGYAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4AIABJAG4AZABpAHYAaQBkAHUAYQBsAHMAIABvAHIAIABlAG4AdABpAHQAaQBlAHMAIAB3AGgAbwAgAGgAYQB2AGUAIAByAGUAYwBlAGkAdgBlAGQAIABEAGUAcgBpAHYAYQB0AGkAdgBlACAAVwBvAHIAawBzACAAbwByACAAQwBvAGwAbABlAGMAdABpAHYAZQAgAFcAbwByAGsAcwAgAGYAcgBvAG0AIABZAG8AdQAgAHUAbgBkAGUAcgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABoAG8AdwBlAHYAZQByACwAIAB3AGkAbABsACAAbgBvAHQAIABoAGEAdgBlACAAdABoAGUAaQByACAAbABpAGMAZQBuAHMAZQBzACAAdABlAHIAbQBpAG4AYQB0AGUAZAAgAHAAcgBvAHYAaQBkAGUAZAAgAHMAdQBjAGgAIABpAG4AZABpAHYAaQBkAHUAYQBsAHMAIABvAHIAIABlAG4AdABpAHQAaQBlAHMAIAByAGUAbQBhAGkAbgAgAGkAbgAgAGYAdQBsAGwAIABjAG8AbQBwAGwAaQBhAG4AYwBlACAAdwBpAHQAaAAgAHQAaABvAHMAZQAgAGwAaQBjAGUAbgBzAGUAcwAuACAAUwBlAGMAdABpAG8AbgBzACAAMQAsACAAMgAsACAANQAsACAANgAsACAANwAsACAAYQBuAGQAIAA4ACAAdwBpAGwAbAAgAHMAdQByAHYAaQB2AGUAIABhAG4AeQAgAHQAZQByAG0AaQBuAGEAdABpAG8AbgAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlAC4ADQAKACAAIAAgADIALgAgAFMAdQBiAGoAZQBjAHQAIAB0AG8AIAB0AGgAZQAgAGEAYgBvAHYAZQAgAHQAZQByAG0AcwAgAGEAbgBkACAAYwBvAG4AZABpAHQAaQBvAG4AcwAsACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAGgAZQByAGUAIABpAHMAIABwAGUAcgBwAGUAdAB1AGEAbAAgACgAZgBvAHIAIAB0AGgAZQAgAGQAdQByAGEAdABpAG8AbgAgAG8AZgAgAHQAaABlACAAYQBwAHAAbABpAGMAYQBiAGwAZQAgAGMAbwBwAHkAcgBpAGcAaAB0ACAAaQBuACAAdABoAGUAIABXAG8AcgBrACkALgAgAE4AbwB0AHcAaQB0AGgAcwB0AGEAbgBkAGkAbgBnACAAdABoAGUAIABhAGIAbwB2AGUALAAgAEwAaQBjAGUAbgBzAG8AcgAgAHIAZQBzAGUAcgB2AGUAcwAgAHQAaABlACAAcgBpAGcAaAB0ACAAdABvACAAcgBlAGwAZQBhAHMAZQAgAHQAaABlACAAVwBvAHIAawAgAHUAbgBkAGUAcgAgAGQAaQBmAGYAZQByAGUAbgB0ACAAbABpAGMAZQBuAHMAZQAgAHQAZQByAG0AcwAgAG8AcgAgAHQAbwAgAHMAdABvAHAAIABkAGkAcwB0AHIAaQBiAHUAdABpAG4AZwAgAHQAaABlACAAVwBvAHIAawAgAGEAdAAgAGEAbgB5ACAAdABpAG0AZQA7ACAAcAByAG8AdgBpAGQAZQBkACwAIABoAG8AdwBlAHYAZQByACAAdABoAGEAdAAgAGEAbgB5ACAAcwB1AGMAaAAgAGUAbABlAGMAdABpAG8AbgAgAHcAaQBsAGwAIABuAG8AdAAgAHMAZQByAHYAZQAgAHQAbwAgAHcAaQB0AGgAZAByAGEAdwAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAKABvAHIAIABhAG4AeQAgAG8AdABoAGUAcgAgAGwAaQBjAGUAbgBzAGUAIAB0AGgAYQB0ACAAaABhAHMAIABiAGUAZQBuACwAIABvAHIAIABpAHMAIAByAGUAcQB1AGkAcgBlAGQAIAB0AG8AIABiAGUALAAgAGcAcgBhAG4AdABlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACkALAAgAGEAbgBkACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIAB3AGkAbABsACAAYwBvAG4AdABpAG4AdQBlACAAaQBuACAAZgB1AGwAbAAgAGYAbwByAGMAZQAgAGEAbgBkACAAZQBmAGYAZQBjAHQAIAB1AG4AbABlAHMAcwAgAHQAZQByAG0AaQBuAGEAdABlAGQAIABhAHMAIABzAHQAYQB0AGUAZAAgAGEAYgBvAHYAZQAuAA0ACgANAAoAOAAuACAATQBpAHMAYwBlAGwAbABhAG4AZQBvAHUAcwANAAoADQAKACAAIAAgADEALgAgAEUAYQBjAGgAIAB0AGkAbQBlACAAWQBvAHUAIABkAGkAcwB0AHIAaQBiAHUAdABlACAAbwByACAAcAB1AGIAbABpAGMAbAB5ACAAZABpAGcAaQB0AGEAbABsAHkAIABwAGUAcgBmAG8AcgBtACAAdABoAGUAIABXAG8AcgBrACAAbwByACAAYQAgAEMAbwBsAGwAZQBjAHQAaQB2AGUAIABXAG8AcgBrACwAIAB0AGgAZQAgAEwAaQBjAGUAbgBzAG8AcgAgAG8AZgBmAGUAcgBzACAAdABvACAAdABoAGUAIAByAGUAYwBpAHAAaQBlAG4AdAAgAGEAIABsAGkAYwBlAG4AcwBlACAAdABvACAAdABoAGUAIABXAG8AcgBrACAAbwBuACAAdABoAGUAIABzAGEAbQBlACAAdABlAHIAbQBzACAAYQBuAGQAIABjAG8AbgBkAGkAdABpAG8AbgBzACAAYQBzACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAHQAbwAgAFkAbwB1ACAAdQBuAGQAZQByACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgANAAoAIAAgACAAMgAuACAARQBhAGMAaAAgAHQAaQBtAGUAIABZAG8AdQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUAIABvAHIAIABwAHUAYgBsAGkAYwBsAHkAIABkAGkAZwBpAHQAYQBsAGwAeQAgAHAAZQByAGYAbwByAG0AIABhACAARABlAHIAaQB2AGEAdABpAHYAZQAgAFcAbwByAGsALAAgAEwAaQBjAGUAbgBzAG8AcgAgAG8AZgBmAGUAcgBzACAAdABvACAAdABoAGUAIAByAGUAYwBpAHAAaQBlAG4AdAAgAGEAIABsAGkAYwBlAG4AcwBlACAAdABvACAAdABoAGUAIABvAHIAaQBnAGkAbgBhAGwAIABXAG8AcgBrACAAbwBuACAAdABoAGUAIABzAGEAbQBlACAAdABlAHIAbQBzACAAYQBuAGQAIABjAG8AbgBkAGkAdABpAG8AbgBzACAAYQBzACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAZwByAGEAbgB0AGUAZAAgAHQAbwAgAFkAbwB1ACAAdQBuAGQAZQByACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUALgANAAoAIAAgACAAMwAuACAASQBmACAAYQBuAHkAIABwAHIAbwB2AGkAcwBpAG8AbgAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACAAaQBzACAAaQBuAHYAYQBsAGkAZAAgAG8AcgAgAHUAbgBlAG4AZgBvAHIAYwBlAGEAYgBsAGUAIAB1AG4AZABlAHIAIABhAHAAcABsAGkAYwBhAGIAbABlACAAbABhAHcALAAgAGkAdAAgAHMAaABhAGwAbAAgAG4AbwB0ACAAYQBmAGYAZQBjAHQAIAB0AGgAZQAgAHYAYQBsAGkAZABpAHQAeQAgAG8AcgAgAGUAbgBmAG8AcgBjAGUAYQBiAGkAbABpAHQAeQAgAG8AZgAgAHQAaABlACAAcgBlAG0AYQBpAG4AZABlAHIAIABvAGYAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAHQAaABpAHMAIABMAGkAYwBlAG4AcwBlACwAIABhAG4AZAAgAHcAaQB0AGgAbwB1AHQAIABmAHUAcgB0AGgAZQByACAAYQBjAHQAaQBvAG4AIABiAHkAIAB0AGgAZQAgAHAAYQByAHQAaQBlAHMAIAB0AG8AIAB0AGgAaQBzACAAYQBnAHIAZQBlAG0AZQBuAHQALAAgAHMAdQBjAGgAIABwAHIAbwB2AGkAcwBpAG8AbgAgAHMAaABhAGwAbAAgAGIAZQAgAHIAZQBmAG8AcgBtAGUAZAAgAHQAbwAgAHQAaABlACAAbQBpAG4AaQBtAHUAbQAgAGUAeAB0AGUAbgB0ACAAbgBlAGMAZQBzAHMAYQByAHkAIAB0AG8AIABtAGEAawBlACAAcwB1AGMAaAAgAHAAcgBvAHYAaQBzAGkAbwBuACAAdgBhAGwAaQBkACAAYQBuAGQAIABlAG4AZgBvAHIAYwBlAGEAYgBsAGUALgANAAoAIAAgACAANAAuACAATgBvACAAdABlAHIAbQAgAG8AcgAgAHAAcgBvAHYAaQBzAGkAbwBuACAAbwBmACAAdABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIABzAGgAYQBsAGwAIABiAGUAIABkAGUAZQBtAGUAZAAgAHcAYQBpAHYAZQBkACAAYQBuAGQAIABuAG8AIABiAHIAZQBhAGMAaAAgAGMAbwBuAHMAZQBuAHQAZQBkACAAdABvACAAdQBuAGwAZQBzAHMAIABzAHUAYwBoACAAdwBhAGkAdgBlAHIAIABvAHIAIABjAG8AbgBzAGUAbgB0ACAAcwBoAGEAbABsACAAYgBlACAAaQBuACAAdwByAGkAdABpAG4AZwAgAGEAbgBkACAAcwBpAGcAbgBlAGQAIABiAHkAIAB0AGgAZQAgAHAAYQByAHQAeQAgAHQAbwAgAGIAZQAgAGMAaABhAHIAZwBlAGQAIAB3AGkAdABoACAAcwB1AGMAaAAgAHcAYQBpAHYAZQByACAAbwByACAAYwBvAG4AcwBlAG4AdAAuAA0ACgAgACAAIAA1AC4AIABUAGgAaQBzACAATABpAGMAZQBuAHMAZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAHQAaABlACAAZQBuAHQAaQByAGUAIABhAGcAcgBlAGUAbQBlAG4AdAAgAGIAZQB0AHcAZQBlAG4AIAB0AGgAZQAgAHAAYQByAHQAaQBlAHMAIAB3AGkAdABoACAAcgBlAHMAcABlAGMAdAAgAHQAbwAgAHQAaABlACAAVwBvAHIAawAgAGwAaQBjAGUAbgBzAGUAZAAgAGgAZQByAGUALgAgAFQAaABlAHIAZQAgAGEAcgBlACAAbgBvACAAdQBuAGQAZQByAHMAdABhAG4AZABpAG4AZwBzACwAIABhAGcAcgBlAGUAbQBlAG4AdABzACAAbwByACAAcgBlAHAAcgBlAHMAZQBuAHQAYQB0AGkAbwBuAHMAIAB3AGkAdABoACAAcgBlAHMAcABlAGMAdAAgAHQAbwAgAHQAaABlACAAVwBvAHIAawAgAG4AbwB0ACAAcwBwAGUAYwBpAGYAaQBlAGQAIABoAGUAcgBlAC4AIABMAGkAYwBlAG4AcwBvAHIAIABzAGgAYQBsAGwAIABuAG8AdAAgAGIAZQAgAGIAbwB1AG4AZAAgAGIAeQAgAGEAbgB5ACAAYQBkAGQAaQB0AGkAbwBuAGEAbAAgAHAAcgBvAHYAaQBzAGkAbwBuAHMAIAB0AGgAYQB0ACAAbQBhAHkAIABhAHAAcABlAGEAcgAgAGkAbgAgAGEAbgB5ACAAYwBvAG0AbQB1AG4AaQBjAGEAdABpAG8AbgAgAGYAcgBvAG0AIABZAG8AdQAuACAAVABoAGkAcwAgAEwAaQBjAGUAbgBzAGUAIABtAGEAeQAgAG4AbwB0ACAAYgBlACAAbQBvAGQAaQBmAGkAZQBkACAAdwBpAHQAaABvAHUAdAAgAHQAaABlACAAbQB1AHQAdQBhAGwAIAB3AHIAaQB0AHQAZQBuACAAYQBnAHIAZQBlAG0AZQBuAHQAIABvAGYAIAB0AGgAZQAgAEwAaQBjAGUAbgBzAG8AcgAgAGEAbgBkACAAWQBvAHUALgBoAHQAdABwADoALwAvAGMAcgBlAGEAdABpAHYAZQBjAG8AbQBtAG8AbgBzAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBuAGMALQBzAGEALwAxAC4AMAAvAAIAAAAAAAD/6QAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAuQAAAAMABgAHAAgACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AIgAjAD4APwBAAEEAQgBGAEcASABJAEoASwBMAE4ATwBQAFEAUgBWAFcAWABaAFsAXABdAGEAqwDYALYAtAC1AIcAsgCzANkAjACsAKMAhACFAL0AhgCOAIsAigECAI0BAwDeAKIABAAFAEUAVQC3AAkAsQAgAL4AvwCpAKoAiACkAMQAxQCmAB8AxgAhAF4AYACdAFQAUwBNALsAlgCJALAAkABfAK0AyQDHAK4AYgBjAGoAaQBrAG0AbABuAKAAZABvAMsAZQDIAMoAcQBwAHIAcwDPAMwAzQDOAHUAdAB2AHcA0wDQANEArwBnAJEAegB5AHsAfQB8AKEA1gDUANUAaAB/AH4AgACBALoAZgB4AEQAWQEEAAIBBQEGAOgA8QDyAPMBBwDnAOYA9QD0APYA6wDsAOQA5QDqAO4GbWFjcm9uDnBlcmlvZGNlbnRlcmVkBS5udWxsBGEuMDEEdi4wMgRFdXJvAAAAAAH//wADAAAAAQABAQEBAQAMAPgI/wAIAAf//QAJAAj//QAKAAj//QALAAn//AAMAAr//AANAAv//AAOAAz/+wAPAAz/+wAQAA3/+wARAA7/+wASAA//+gATABD/+gAUABD/+gAVABH/+QAWABL/+QAXABP/+QAYABT/+QAZABT/+AAaABX/+AAbABb/+AAcABf/9wAdABj/9wAeABj/9wAfABn/9gAgABr/9gAhABv/9gAiABz/9gAjABz/9QAkAB3/9QAlAB7/9QAmAB//9AAnACD/9AAoACD/9AApACH/9AAqACL/8wArACP/8wAsACT/8wAtACT/8gAuACX/8gAvACb/8gAwACf/8gAxACj/8QAyACj/8QAzACn/8QA0ACr/8AA1ACv/8AA2ACz/8AA3ACz/7wA4AC3/7wA5AC7/7wA6AC//7wA7ADD/7gA8ADD/7gA9ADH/7gA+ADL/7QA/ADP/7QBAADT/7QBBADT/7QBCADX/7ABDADb/7ABEADf/7ABFADj/6wBGADj/6wBHADn/6wBIADr/6wBJADv/6gBKADz/6gBLADz/6gBMAD3/6QBNAD7/6QBOAD//6QBPAED/6QBQAED/6ABRAEH/6ABSAEL/6ABTAEP/5wBUAET/5wBVAET/5wBWAEX/5gBXAEb/5gBYAEf/5gBZAEj/5gBaAEj/5QBbAEn/5QBcAEr/5QBdAEv/5ABeAEz/5ABfAEz/5ABgAE3/5ABhAE7/4wBiAE//4wBjAFD/4wBkAFD/4gBlAFH/4gBmAFL/4gBnAFP/4gBoAFT/4QBpAFT/4QBqAFX/4QBrAFb/4ABsAFf/4ABtAFj/4ABuAFj/3wBvAFn/3wBwAFr/3wBxAFv/3wByAFz/3gBzAFz/3gB0AF3/3gB1AF7/3QB2AF//3QB3AGD/3QB4AGD/3QB5AGH/3AB6AGL/3AB7AGP/3AB8AGT/2wB9AGT/2wB+AGX/2wB/AGb/2wCAAGf/2gCBAGj/2gCCAGj/2gCDAGn/2QCEAGr/2QCFAGv/2QCGAGz/2QCHAGz/2ACIAG3/2ACJAG7/2ACKAG//1wCLAHD/1wCMAHD/1wCNAHH/1gCOAHL/1gCPAHP/1gCQAHT/1gCRAHT/1QCSAHX/1QCTAHb/1QCUAHf/1ACVAHj/1ACWAHj/1ACXAHn/1ACYAHr/0wCZAHv/0wCaAHz/0wCbAHz/0gCcAH3/0gCdAH7/0gCeAH//0gCfAID/0QCgAID/0QChAIH/0QCiAIL/0ACjAIP/0ACkAIT/0AClAIT/zwCmAIX/zwCnAIb/zwCoAIf/zwCpAIj/zgCqAIj/zgCrAIn/zgCsAIr/zQCtAIv/zQCuAIz/zQCvAIz/zQCwAI3/zACxAI7/zACyAI//zACzAJD/ywC0AJD/ywC1AJH/ywC2AJL/ywC3AJP/ygC4AJT/ygC5AJT/ygC6AJX/yQC7AJb/yQC8AJf/yQC9AJj/yQC+AJj/yAC/AJn/yADAAJr/yADBAJv/xwDCAJz/xwDDAJz/xwDEAJ3/xgDFAJ7/xgDGAJ//xgDHAKD/xgDIAKD/xQDJAKH/xQDKAKL/xQDLAKP/xADMAKT/xADNAKT/xADOAKX/xADPAKb/wwDQAKf/wwDRAKj/wwDSAKj/wgDTAKn/wgDUAKr/wgDVAKv/wgDWAKz/wQDXAKz/wQDYAK3/wQDZAK7/wADaAK//wADbALD/wADcALD/vwDdALH/vwDeALL/vwDfALP/vwDgALT/vgDhALT/vgDiALX/vgDjALb/vQDkALf/vQDlALj/vQDmALj/vQDnALn/vADoALr/vADpALv/vADqALz/uwDrALz/uwDsAL3/uwDtAL7/uwDuAL//ugDvAMD/ugDwAMD/ugDxAMH/uQDyAML/uQDzAMP/uQD0AMT/uAD1AMT/uAD2AMX/uAD3AMb/uAD4AMf/twD5AMj/twD6AMj/twD7AMn/tgD8AMr/tgD9AMv/tgD+AMz/tgD/AMz/tQ==";
|
|
2671
|
+
|
|
2672
|
+
// src/components/WandyHand.tsx
|
|
2673
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
2674
|
+
function dist(a, b) {
|
|
2675
|
+
const dx = a.x - b.x;
|
|
2676
|
+
const dy = a.y - b.y;
|
|
2677
|
+
return Math.hypot(dx, dy);
|
|
2678
|
+
}
|
|
2679
|
+
function polylineLength(points) {
|
|
2680
|
+
let L = 0;
|
|
2681
|
+
for (let i = 1; i < points.length; i++) L += dist(points[i - 1], points[i]);
|
|
2682
|
+
return L;
|
|
2683
|
+
}
|
|
2684
|
+
function lerp(a, b, t) {
|
|
2685
|
+
return a + (b - a) * t;
|
|
2686
|
+
}
|
|
2687
|
+
function mulberry32(seed) {
|
|
2688
|
+
let t = seed >>> 0;
|
|
2689
|
+
return function() {
|
|
2690
|
+
t += 1831565813;
|
|
2691
|
+
let r = Math.imul(t ^ t >>> 15, t | 1);
|
|
2692
|
+
r ^= r + Math.imul(r ^ r >>> 7, r | 61);
|
|
2693
|
+
return ((r ^ r >>> 14) >>> 0) / 4294967296;
|
|
2694
|
+
};
|
|
2695
|
+
}
|
|
2696
|
+
function hashStringToSeed(str) {
|
|
2697
|
+
let h = 1779033703 ^ str.length;
|
|
2698
|
+
for (let i = 0; i < str.length; i++) {
|
|
2699
|
+
h = Math.imul(h ^ str.charCodeAt(i), 3432918353);
|
|
2700
|
+
h = h << 13 | h >>> 19;
|
|
2701
|
+
}
|
|
2702
|
+
return h >>> 0;
|
|
2703
|
+
}
|
|
2704
|
+
function randomBetween(rng, min, max) {
|
|
2705
|
+
return min + (max - min) * rng();
|
|
2706
|
+
}
|
|
2707
|
+
function randomOffset(rng, magnitude) {
|
|
2708
|
+
return {
|
|
2709
|
+
x: randomBetween(rng, -magnitude, magnitude),
|
|
2710
|
+
y: randomBetween(rng, -magnitude, magnitude)
|
|
2711
|
+
};
|
|
2712
|
+
}
|
|
2713
|
+
function easeInOut(t) {
|
|
2714
|
+
if (t <= 0) return 0;
|
|
2715
|
+
if (t >= 1) return 1;
|
|
2716
|
+
return t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2;
|
|
2717
|
+
}
|
|
2718
|
+
function sampleCubic(p0, p1, p2, p3, steps) {
|
|
2719
|
+
const pts = [];
|
|
2720
|
+
for (let i = 0; i <= steps; i++) {
|
|
2721
|
+
const t = i / steps;
|
|
2722
|
+
const mt = 1 - t;
|
|
2723
|
+
const x = mt * mt * mt * p0.x + 3 * mt * mt * t * p1.x + 3 * mt * t * t * p2.x + t * t * t * p3.x;
|
|
2724
|
+
const y = mt * mt * mt * p0.y + 3 * mt * mt * t * p1.y + 3 * mt * t * t * p2.y + t * t * t * p3.y;
|
|
2725
|
+
pts.push({ x, y });
|
|
2726
|
+
}
|
|
2727
|
+
return pts;
|
|
2728
|
+
}
|
|
2729
|
+
function sampleQuadratic(p0, p1, p2, steps) {
|
|
2730
|
+
const pts = [];
|
|
2731
|
+
for (let i = 0; i <= steps; i++) {
|
|
2732
|
+
const t = i / steps;
|
|
2733
|
+
const mt = 1 - t;
|
|
2734
|
+
const x = mt * mt * p0.x + 2 * mt * t * p1.x + t * t * p2.x;
|
|
2735
|
+
const y = mt * mt * p0.y + 2 * mt * t * p1.y + t * t * p2.y;
|
|
2736
|
+
pts.push({ x, y });
|
|
2737
|
+
}
|
|
2738
|
+
return pts;
|
|
2739
|
+
}
|
|
2740
|
+
function pathToPolylines(commands, samplesPerCurve = 16) {
|
|
2741
|
+
const polylines = [];
|
|
2742
|
+
let current = [];
|
|
2743
|
+
let pen = { x: 0, y: 0 };
|
|
2744
|
+
let start = { x: 0, y: 0 };
|
|
2745
|
+
const pushCurrent = () => {
|
|
2746
|
+
if (current.length > 1) polylines.push(current);
|
|
2747
|
+
current = [];
|
|
2748
|
+
};
|
|
2749
|
+
for (const cmd of commands) {
|
|
2750
|
+
if (cmd.type === "M") {
|
|
2751
|
+
pushCurrent();
|
|
2752
|
+
pen = { x: cmd.x, y: cmd.y };
|
|
2753
|
+
start = { ...pen };
|
|
2754
|
+
current.push({ ...pen });
|
|
2755
|
+
} else if (cmd.type === "L") {
|
|
2756
|
+
pen = { x: cmd.x, y: cmd.y };
|
|
2757
|
+
current.push({ ...pen });
|
|
2758
|
+
} else if (cmd.type === "C") {
|
|
2759
|
+
const p0 = pen;
|
|
2760
|
+
const p1 = { x: cmd.x1, y: cmd.y1 };
|
|
2761
|
+
const p2 = { x: cmd.x2, y: cmd.y2 };
|
|
2762
|
+
const p3 = { x: cmd.x, y: cmd.y };
|
|
2763
|
+
const pts = sampleCubic(p0, p1, p2, p3, samplesPerCurve);
|
|
2764
|
+
current.push(...pts.slice(1));
|
|
2765
|
+
pen = p3;
|
|
2766
|
+
} else if (cmd.type === "Q") {
|
|
2767
|
+
const p0 = pen;
|
|
2768
|
+
const p1 = { x: cmd.x1, y: cmd.y1 };
|
|
2769
|
+
const p2 = { x: cmd.x, y: cmd.y };
|
|
2770
|
+
const pts = sampleQuadratic(p0, p1, p2, samplesPerCurve);
|
|
2771
|
+
current.push(...pts.slice(1));
|
|
2772
|
+
pen = p2;
|
|
2773
|
+
} else if (cmd.type === "Z") {
|
|
2774
|
+
current.push({ ...start });
|
|
2775
|
+
pushCurrent();
|
|
2776
|
+
}
|
|
2777
|
+
}
|
|
2778
|
+
pushCurrent();
|
|
2779
|
+
return polylines;
|
|
2780
|
+
}
|
|
2781
|
+
function polygonSignedArea(points) {
|
|
2782
|
+
let area = 0;
|
|
2783
|
+
for (let i = 0; i < points.length; i++) {
|
|
2784
|
+
const a = points[i];
|
|
2785
|
+
const b = points[(i + 1) % points.length];
|
|
2786
|
+
area += a.x * b.y - b.x * a.y;
|
|
2787
|
+
}
|
|
2788
|
+
return area / 2;
|
|
2789
|
+
}
|
|
2790
|
+
function polylineBounds(points) {
|
|
2791
|
+
let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
|
|
2792
|
+
for (const p of points) {
|
|
2793
|
+
minX = Math.min(minX, p.x);
|
|
2794
|
+
minY = Math.min(minY, p.y);
|
|
2795
|
+
maxX = Math.max(maxX, p.x);
|
|
2796
|
+
maxY = Math.max(maxY, p.y);
|
|
2797
|
+
}
|
|
2798
|
+
if (!points.length) return { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
2799
|
+
return { minX, minY, maxX, maxY };
|
|
2800
|
+
}
|
|
2801
|
+
function getEndDirection(points) {
|
|
2802
|
+
for (let i = points.length - 1; i > 0; i--) {
|
|
2803
|
+
const curr = points[i];
|
|
2804
|
+
const prev = points[i - 1];
|
|
2805
|
+
const dx = curr.x - prev.x;
|
|
2806
|
+
const dy = curr.y - prev.y;
|
|
2807
|
+
const mag = Math.hypot(dx, dy);
|
|
2808
|
+
if (mag > 0) return { x: dx / mag, y: dy / mag };
|
|
2809
|
+
}
|
|
2810
|
+
return { x: 1, y: 0 };
|
|
2811
|
+
}
|
|
2812
|
+
function drawPolylineStamped(ctx, pts, visibleLen, totalLen, strokeWidth, strokeColor, baselineOffset, offsets, poolingStrength) {
|
|
2813
|
+
if (pts.length < 2 || visibleLen <= 0 || totalLen <= 0) return;
|
|
2814
|
+
const maxDistance = Math.min(visibleLen, totalLen);
|
|
2815
|
+
if (maxDistance <= 0) return;
|
|
2816
|
+
const spacing = Math.max(0.5, strokeWidth * 0.3);
|
|
2817
|
+
let nextStamp = 0;
|
|
2818
|
+
let segmentIndex = 1;
|
|
2819
|
+
let segmentStartLen = 0;
|
|
2820
|
+
let segmentLength = dist(pts[0], pts[1]);
|
|
2821
|
+
const lastIndex = pts.length - 1;
|
|
2822
|
+
const advanceSegment = () => {
|
|
2823
|
+
while (segmentLength === 0 && segmentIndex < lastIndex) {
|
|
2824
|
+
segmentIndex++;
|
|
2825
|
+
segmentLength = dist(pts[segmentIndex - 1], pts[segmentIndex]);
|
|
2826
|
+
}
|
|
2827
|
+
};
|
|
2828
|
+
advanceSegment();
|
|
2829
|
+
const stampAt = (distance) => {
|
|
2830
|
+
const targetDistance = Math.min(distance, maxDistance);
|
|
2831
|
+
while (segmentIndex < pts.length && targetDistance > segmentStartLen + segmentLength && segmentIndex < lastIndex) {
|
|
2832
|
+
segmentStartLen += segmentLength;
|
|
2833
|
+
segmentIndex++;
|
|
2834
|
+
segmentLength = dist(pts[segmentIndex - 1], pts[segmentIndex]);
|
|
2835
|
+
advanceSegment();
|
|
2836
|
+
}
|
|
2837
|
+
const clampedSegmentLen = segmentLength || 1;
|
|
2838
|
+
const segmentDistance = Math.max(0, targetDistance - segmentStartLen);
|
|
2839
|
+
const t = segmentLength === 0 ? 0 : segmentDistance / clampedSegmentLen;
|
|
2840
|
+
const a = pts[segmentIndex - 1];
|
|
2841
|
+
const b = pts[segmentIndex];
|
|
2842
|
+
const point = {
|
|
2843
|
+
x: lerp(a.x, b.x, t),
|
|
2844
|
+
y: lerp(a.y, b.y, t)
|
|
2845
|
+
};
|
|
2846
|
+
const localProgress = maxDistance > 0 ? Math.min(1, targetDistance / maxDistance) : 1;
|
|
2847
|
+
const delta = localProgress < 0.5 ? {
|
|
2848
|
+
x: lerp(offsets.start.x, offsets.mid.x, localProgress * 2),
|
|
2849
|
+
y: lerp(offsets.start.y, offsets.mid.y, localProgress * 2)
|
|
2850
|
+
} : {
|
|
2851
|
+
x: lerp(offsets.mid.x, offsets.end.x, (localProgress - 0.5) * 2),
|
|
2852
|
+
y: lerp(offsets.mid.y, offsets.end.y, (localProgress - 0.5) * 2)
|
|
2853
|
+
};
|
|
2854
|
+
point.x += baselineOffset.x + delta.x;
|
|
2855
|
+
point.y += baselineOffset.y + delta.y;
|
|
2856
|
+
const pressure = Math.max(0, Math.sin(Math.PI * localProgress));
|
|
2857
|
+
const poolingFactor = localProgress >= 0.7 ? Math.pow((localProgress - 0.7) / 0.3, 1.1) : 0;
|
|
2858
|
+
const radius = Math.max(
|
|
2859
|
+
0.1,
|
|
2860
|
+
strokeWidth * (0.35 + 0.65 * pressure) * (1 + poolingStrength * poolingFactor)
|
|
2861
|
+
);
|
|
2862
|
+
ctx.moveTo(point.x + radius, point.y);
|
|
2863
|
+
ctx.arc(point.x, point.y, radius, 0, Math.PI * 2);
|
|
2864
|
+
};
|
|
2865
|
+
ctx.save();
|
|
2866
|
+
ctx.fillStyle = strokeColor;
|
|
2867
|
+
ctx.beginPath();
|
|
2868
|
+
while (nextStamp <= maxDistance) {
|
|
2869
|
+
stampAt(nextStamp);
|
|
2870
|
+
nextStamp += spacing;
|
|
2871
|
+
}
|
|
2872
|
+
if (nextStamp - spacing < maxDistance) {
|
|
2873
|
+
stampAt(maxDistance);
|
|
2874
|
+
}
|
|
2875
|
+
ctx.fill();
|
|
2876
|
+
ctx.restore();
|
|
2877
|
+
}
|
|
2878
|
+
function drawOvershootTail(ctx, basePoint, direction, overshootPx, strokeWidth, strokeColor) {
|
|
2879
|
+
if (overshootPx <= 0) return;
|
|
2880
|
+
const dirMag = Math.hypot(direction.x, direction.y) || 1;
|
|
2881
|
+
const dir = { x: direction.x / dirMag, y: direction.y / dirMag };
|
|
2882
|
+
const spacing = Math.max(1, strokeWidth * 0.4);
|
|
2883
|
+
ctx.save();
|
|
2884
|
+
ctx.fillStyle = strokeColor;
|
|
2885
|
+
ctx.beginPath();
|
|
2886
|
+
for (let traveled = 0; traveled <= overshootPx; traveled += spacing) {
|
|
2887
|
+
const progress = Math.min(1, traveled / Math.max(overshootPx, 1e-4));
|
|
2888
|
+
const radius = Math.max(0.1, strokeWidth * (0.25 + 0.35 * (1 - progress)));
|
|
2889
|
+
const x = basePoint.x + dir.x * traveled;
|
|
2890
|
+
const y = basePoint.y + dir.y * traveled;
|
|
2891
|
+
ctx.moveTo(x + radius, y);
|
|
2892
|
+
ctx.arc(x, y, radius, 0, Math.PI * 2);
|
|
2893
|
+
}
|
|
2894
|
+
ctx.fill();
|
|
2895
|
+
ctx.restore();
|
|
2896
|
+
}
|
|
2897
|
+
function createFlourishPath(endPoint, direction, rng) {
|
|
2898
|
+
const dirMag = Math.hypot(direction.x, direction.y);
|
|
2899
|
+
if (!dirMag) return null;
|
|
2900
|
+
const dir = { x: direction.x / dirMag, y: direction.y / dirMag };
|
|
2901
|
+
const normal = { x: -dir.y, y: dir.x };
|
|
2902
|
+
const flourishLen = randomBetween(rng, 6, 14);
|
|
2903
|
+
const curl = randomBetween(rng, -0.6, 0.6);
|
|
2904
|
+
const control = {
|
|
2905
|
+
x: endPoint.x + dir.x * (flourishLen * 0.5) + normal.x * flourishLen * 0.3 * curl,
|
|
2906
|
+
y: endPoint.y + dir.y * (flourishLen * 0.5) + normal.y * flourishLen * 0.3 * curl
|
|
2907
|
+
};
|
|
2908
|
+
const finalPoint = {
|
|
2909
|
+
x: endPoint.x + dir.x * flourishLen + normal.x * flourishLen * 0.15 * curl,
|
|
2910
|
+
y: endPoint.y + dir.y * flourishLen + normal.y * flourishLen * 0.15 * curl
|
|
2911
|
+
};
|
|
2912
|
+
const flourishPoints = sampleQuadratic(endPoint, control, finalPoint, 12);
|
|
2913
|
+
const length = polylineLength(flourishPoints);
|
|
2914
|
+
if (length <= 0) return null;
|
|
2915
|
+
return { points: flourishPoints, length };
|
|
2916
|
+
}
|
|
2917
|
+
var ZERO_OFFSETS = {
|
|
2918
|
+
start: { x: 0, y: 0 },
|
|
2919
|
+
mid: { x: 0, y: 0 },
|
|
2920
|
+
end: { x: 0, y: 0 }
|
|
2921
|
+
};
|
|
2922
|
+
function resolveCurveSamples(controlValue) {
|
|
2923
|
+
return Math.max(2, Math.round(controlValue * controlValue * 0.75));
|
|
2924
|
+
}
|
|
2925
|
+
function computeBounds(polylines) {
|
|
2926
|
+
let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
|
|
2927
|
+
for (const line of polylines) {
|
|
2928
|
+
for (const p of line) {
|
|
2929
|
+
minX = Math.min(minX, p.x);
|
|
2930
|
+
minY = Math.min(minY, p.y);
|
|
2931
|
+
maxX = Math.max(maxX, p.x);
|
|
2932
|
+
maxY = Math.max(maxY, p.y);
|
|
2933
|
+
}
|
|
2934
|
+
}
|
|
2935
|
+
if (minX === Infinity || minY === Infinity || maxX === -Infinity || maxY === -Infinity) {
|
|
2936
|
+
return { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
2937
|
+
}
|
|
2938
|
+
return { minX, minY, maxX, maxY };
|
|
2939
|
+
}
|
|
2940
|
+
function prepareText(font, text, fontSize, samplesPerCurve) {
|
|
2941
|
+
const glyphs = font.stringToGlyphs(text);
|
|
2942
|
+
const characters = Array.from(text);
|
|
2943
|
+
const contours = [];
|
|
2944
|
+
let totalLen = 0;
|
|
2945
|
+
let penX = 0;
|
|
2946
|
+
const scale = fontSize / font.unitsPerEm;
|
|
2947
|
+
let currentWordIndex = 0;
|
|
2948
|
+
let hasGlyphInCurrentWord = false;
|
|
2949
|
+
const lengthThreshold = Math.max(fontSize * 0.65, 20);
|
|
2950
|
+
const areaThreshold = Math.max(fontSize * fontSize * 0.02, 40);
|
|
2951
|
+
const punctuationRegex = /[!?,.;:'"()]/;
|
|
2952
|
+
for (let i = 0; i < glyphs.length; i++) {
|
|
2953
|
+
const glyph = glyphs[i];
|
|
2954
|
+
const char = characters[i] ?? "";
|
|
2955
|
+
const isWhitespaceChar = /\s/.test(char);
|
|
2956
|
+
const isPunctuationGlyph = punctuationRegex.test(char);
|
|
2957
|
+
if (isWhitespaceChar) {
|
|
2958
|
+
if (hasGlyphInCurrentWord) {
|
|
2959
|
+
currentWordIndex++;
|
|
2960
|
+
hasGlyphInCurrentWord = false;
|
|
2961
|
+
}
|
|
2962
|
+
const advanceWidth2 = glyph.advanceWidth && glyph.advanceWidth > 0 ? glyph.advanceWidth : font.unitsPerEm;
|
|
2963
|
+
penX += advanceWidth2 * scale;
|
|
2964
|
+
continue;
|
|
2965
|
+
}
|
|
2966
|
+
hasGlyphInCurrentWord = true;
|
|
2967
|
+
const commands = glyph.getPath(penX, 0, fontSize).commands;
|
|
2968
|
+
const glyphLines = pathToPolylines(commands, samplesPerCurve);
|
|
2969
|
+
for (let contourIndex = 0; contourIndex < glyphLines.length; contourIndex++) {
|
|
2970
|
+
const pl = glyphLines[contourIndex];
|
|
2971
|
+
if (pl.length < 2) continue;
|
|
2972
|
+
const length = polylineLength(pl);
|
|
2973
|
+
if (length <= 0) continue;
|
|
2974
|
+
const bounds2 = polylineBounds(pl);
|
|
2975
|
+
const boundsArea = (bounds2.maxX - bounds2.minX) * (bounds2.maxY - bounds2.minY);
|
|
2976
|
+
const signedArea = polygonSignedArea(pl);
|
|
2977
|
+
const isHole = signedArea < 0;
|
|
2978
|
+
const isSecondary = isPunctuationGlyph || length < lengthThreshold || boundsArea < areaThreshold;
|
|
2979
|
+
contours.push({
|
|
2980
|
+
id: `word${currentWordIndex}-glyph${i}-contour${contourIndex}`,
|
|
2981
|
+
points: pl,
|
|
2982
|
+
length,
|
|
2983
|
+
bounds: bounds2,
|
|
2984
|
+
boundsArea,
|
|
2985
|
+
glyphIndex: i,
|
|
2986
|
+
wordIndex: currentWordIndex,
|
|
2987
|
+
signedArea,
|
|
2988
|
+
isHole,
|
|
2989
|
+
isSecondary,
|
|
2990
|
+
isPunctuation: isPunctuationGlyph
|
|
2991
|
+
});
|
|
2992
|
+
totalLen += length;
|
|
2993
|
+
}
|
|
2994
|
+
const advanceWidth = glyph.advanceWidth && glyph.advanceWidth > 0 ? glyph.advanceWidth : font.unitsPerEm;
|
|
2995
|
+
penX += advanceWidth * scale;
|
|
2996
|
+
if (i < glyphs.length - 1) {
|
|
2997
|
+
const kern = font.getKerningValue(glyph, glyphs[i + 1]);
|
|
2998
|
+
penX += kern * scale;
|
|
2999
|
+
}
|
|
3000
|
+
}
|
|
3001
|
+
const polylines = contours.map((c) => c.points);
|
|
3002
|
+
const bounds = computeBounds(polylines);
|
|
3003
|
+
return { contours, polylines, totalLen, bounds };
|
|
3004
|
+
}
|
|
3005
|
+
function createStrokePlan(contours, totalLen, durationMs, text, imperfectionsEnabled) {
|
|
3006
|
+
if (!contours.length || totalLen <= 0) {
|
|
3007
|
+
return { strokes: [], totalMs: 0 };
|
|
3008
|
+
}
|
|
3009
|
+
const seed = hashStringToSeed(text);
|
|
3010
|
+
const rng = mulberry32(seed || 1);
|
|
3011
|
+
const effectiveDuration = durationMs > 0 ? durationMs : Math.max(totalLen, 1);
|
|
3012
|
+
const baseSpeed = totalLen / Math.max(effectiveDuration, 1);
|
|
3013
|
+
const wordGroups = /* @__PURE__ */ new Map();
|
|
3014
|
+
for (const contour of contours) {
|
|
3015
|
+
const existing = wordGroups.get(contour.wordIndex) ?? {
|
|
3016
|
+
primaries: [],
|
|
3017
|
+
secondaries: [],
|
|
3018
|
+
baselineDrift: { x: 0, y: 0 }
|
|
3019
|
+
};
|
|
3020
|
+
if (!wordGroups.has(contour.wordIndex)) {
|
|
3021
|
+
existing.baselineDrift = imperfectionsEnabled ? {
|
|
3022
|
+
x: randomBetween(rng, -1, 1),
|
|
3023
|
+
y: randomBetween(rng, -1, 1)
|
|
3024
|
+
} : { x: 0, y: 0 };
|
|
3025
|
+
}
|
|
3026
|
+
if (contour.isSecondary) existing.secondaries.push(contour);
|
|
3027
|
+
else existing.primaries.push(contour);
|
|
3028
|
+
wordGroups.set(contour.wordIndex, existing);
|
|
3029
|
+
}
|
|
3030
|
+
const sortContours = (items) => items.sort((a, b) => {
|
|
3031
|
+
if (a.glyphIndex !== b.glyphIndex) {
|
|
3032
|
+
return a.glyphIndex - b.glyphIndex;
|
|
3033
|
+
}
|
|
3034
|
+
if (a.isHole !== b.isHole) {
|
|
3035
|
+
return Number(a.isHole) - Number(b.isHole);
|
|
3036
|
+
}
|
|
3037
|
+
return b.boundsArea - a.boundsArea;
|
|
3038
|
+
});
|
|
3039
|
+
const wordIndices = Array.from(wordGroups.keys()).sort((a, b) => a - b);
|
|
3040
|
+
const strokes = [];
|
|
3041
|
+
let cursor = 0;
|
|
3042
|
+
let lastWordIndex = null;
|
|
3043
|
+
const scheduleContour = (contour, kind, baselineDrift, isLastInWord) => {
|
|
3044
|
+
const length = contour.length;
|
|
3045
|
+
const durationMultiplier = lerp(0.8, 1.2, rng());
|
|
3046
|
+
const baseDuration = baseSpeed > 0 ? length / baseSpeed : length / Math.max(totalLen, 1);
|
|
3047
|
+
const durationMsForStroke = Math.max(baseDuration * durationMultiplier, 24);
|
|
3048
|
+
const isNewWord = lastWordIndex === null || contour.wordIndex !== lastWordIndex;
|
|
3049
|
+
let pauseBeforeMs = 0;
|
|
3050
|
+
if (strokes.length > 0) {
|
|
3051
|
+
if (isNewWord) {
|
|
3052
|
+
pauseBeforeMs = randomBetween(rng, 120, 250);
|
|
3053
|
+
} else if (contour.isPunctuation) {
|
|
3054
|
+
pauseBeforeMs = randomBetween(rng, 60, 140);
|
|
3055
|
+
} else {
|
|
3056
|
+
pauseBeforeMs = randomBetween(rng, 10, 60);
|
|
3057
|
+
if (kind === "secondary") {
|
|
3058
|
+
pauseBeforeMs += randomBetween(rng, 40, 110);
|
|
3059
|
+
}
|
|
3060
|
+
}
|
|
3061
|
+
}
|
|
3062
|
+
cursor += pauseBeforeMs;
|
|
3063
|
+
const startMs = cursor;
|
|
3064
|
+
cursor += durationMsForStroke;
|
|
3065
|
+
const offsets = imperfectionsEnabled ? {
|
|
3066
|
+
start: randomOffset(rng, 0.8),
|
|
3067
|
+
mid: randomOffset(rng, 0.6),
|
|
3068
|
+
end: randomOffset(rng, 0.8)
|
|
3069
|
+
} : ZERO_OFFSETS;
|
|
3070
|
+
const poolingStrength = imperfectionsEnabled ? randomBetween(rng, 0.05, 0.32) : 0;
|
|
3071
|
+
const overshootPx = imperfectionsEnabled ? kind === "secondary" ? randomBetween(rng, 1.5, 4) : randomBetween(rng, 2, 6) : 0;
|
|
3072
|
+
const endDirection = getEndDirection(contour.points);
|
|
3073
|
+
let flourish;
|
|
3074
|
+
if (imperfectionsEnabled && isLastInWord && kind === "main" && rng() < 0.35) {
|
|
3075
|
+
const flourishPath = createFlourishPath(
|
|
3076
|
+
contour.points[contour.points.length - 1],
|
|
3077
|
+
endDirection,
|
|
3078
|
+
rng
|
|
3079
|
+
);
|
|
3080
|
+
if (flourishPath) {
|
|
3081
|
+
flourish = flourishPath;
|
|
3082
|
+
}
|
|
3083
|
+
}
|
|
3084
|
+
strokes.push({
|
|
3085
|
+
id: contour.id,
|
|
3086
|
+
points: contour.points,
|
|
3087
|
+
length,
|
|
3088
|
+
startMs,
|
|
3089
|
+
durationMs: durationMsForStroke,
|
|
3090
|
+
pauseBeforeMs,
|
|
3091
|
+
wordBoundary: isNewWord,
|
|
3092
|
+
kind,
|
|
3093
|
+
wordIndex: contour.wordIndex,
|
|
3094
|
+
baselineDrift,
|
|
3095
|
+
offsets,
|
|
3096
|
+
poolingStrength,
|
|
3097
|
+
overshootPx,
|
|
3098
|
+
endDirection,
|
|
3099
|
+
flourish
|
|
3100
|
+
});
|
|
3101
|
+
lastWordIndex = contour.wordIndex;
|
|
3102
|
+
};
|
|
3103
|
+
for (const wordIndex of wordIndices) {
|
|
3104
|
+
const group = wordGroups.get(wordIndex);
|
|
3105
|
+
if (!group) continue;
|
|
3106
|
+
const orderedPrimaries = sortContours(group.primaries).map((contour) => ({
|
|
3107
|
+
contour,
|
|
3108
|
+
kind: "main"
|
|
3109
|
+
}));
|
|
3110
|
+
const orderedSecondaries = sortContours(group.secondaries).map(
|
|
3111
|
+
(contour) => ({
|
|
3112
|
+
contour,
|
|
3113
|
+
kind: "secondary"
|
|
3114
|
+
})
|
|
3115
|
+
);
|
|
3116
|
+
const orderedContours = [...orderedPrimaries, ...orderedSecondaries];
|
|
3117
|
+
orderedContours.forEach(({ contour, kind }, idx) => {
|
|
3118
|
+
const isLastInWord = idx === orderedContours.length - 1;
|
|
3119
|
+
scheduleContour(contour, kind, group.baselineDrift, isLastInWord);
|
|
3120
|
+
});
|
|
3121
|
+
}
|
|
3122
|
+
const totalMs = cursor;
|
|
3123
|
+
return { strokes, totalMs };
|
|
3124
|
+
}
|
|
3125
|
+
var WANDY_HAND_DEFAULTS = {
|
|
3126
|
+
fontSize: 160,
|
|
3127
|
+
durationMs: 2200,
|
|
3128
|
+
strokeWidth: 3.2,
|
|
3129
|
+
penOpacity: 1,
|
|
3130
|
+
strokeColor: "#fff",
|
|
3131
|
+
lineCap: "round",
|
|
3132
|
+
lineJoin: "round",
|
|
3133
|
+
samplesPerCurve: 5,
|
|
3134
|
+
strokeMode: "outline",
|
|
3135
|
+
canvasPadding: 8,
|
|
3136
|
+
backgroundColor: "transparent",
|
|
3137
|
+
imperfectionsEnabled: false,
|
|
3138
|
+
animate: true
|
|
3139
|
+
};
|
|
3140
|
+
function WandyHand({
|
|
3141
|
+
text,
|
|
3142
|
+
fontUrl,
|
|
3143
|
+
fontSize,
|
|
3144
|
+
durationMs = WANDY_HAND_DEFAULTS.durationMs,
|
|
3145
|
+
strokeWidth = WANDY_HAND_DEFAULTS.strokeWidth,
|
|
3146
|
+
penOpacity = WANDY_HAND_DEFAULTS.penOpacity,
|
|
3147
|
+
strokeColor = WANDY_HAND_DEFAULTS.strokeColor,
|
|
3148
|
+
lineCap = WANDY_HAND_DEFAULTS.lineCap,
|
|
3149
|
+
lineJoin = WANDY_HAND_DEFAULTS.lineJoin,
|
|
3150
|
+
samplesPerCurve = WANDY_HAND_DEFAULTS.samplesPerCurve,
|
|
3151
|
+
strokeMode = WANDY_HAND_DEFAULTS.strokeMode,
|
|
3152
|
+
canvasPadding = WANDY_HAND_DEFAULTS.canvasPadding,
|
|
3153
|
+
backgroundColor = WANDY_HAND_DEFAULTS.backgroundColor,
|
|
3154
|
+
imperfectionsEnabled = WANDY_HAND_DEFAULTS.imperfectionsEnabled,
|
|
3155
|
+
size,
|
|
3156
|
+
animate = WANDY_HAND_DEFAULTS.animate,
|
|
3157
|
+
onDrawn
|
|
3158
|
+
}) {
|
|
3159
|
+
const canvasRef = (0, import_react9.useRef)(null);
|
|
3160
|
+
const rafRef = (0, import_react9.useRef)(null);
|
|
3161
|
+
const [font, setFont] = (0, import_react9.useState)(null);
|
|
3162
|
+
const resolvedFontUrl = fontUrl ?? waltographUI_default;
|
|
3163
|
+
const onDrawnRef = (0, import_react9.useRef)(onDrawn);
|
|
3164
|
+
const drawRunRef = (0, import_react9.useRef)(0);
|
|
3165
|
+
const drawNotifiedRef = (0, import_react9.useRef)(false);
|
|
3166
|
+
const resolvedFontSize = typeof fontSize === "number" && fontSize > 0 ? fontSize : 160;
|
|
3167
|
+
const sizeValue = size !== void 0 ? typeof size === "number" ? `${Math.max(0, size)}px` : `${size}` : null;
|
|
3168
|
+
const LINE_CAP_MAP = {
|
|
3169
|
+
round: "round",
|
|
3170
|
+
butt: "butt",
|
|
3171
|
+
square: "square"
|
|
3172
|
+
};
|
|
3173
|
+
const LINE_JOIN_MAP = {
|
|
3174
|
+
round: "round",
|
|
3175
|
+
miter: "miter",
|
|
3176
|
+
bevel: "bevel"
|
|
3177
|
+
};
|
|
3178
|
+
const STROKE_MODE_MAP = {
|
|
3179
|
+
outline: "outline",
|
|
3180
|
+
"outline reveal": "outline",
|
|
3181
|
+
"full stroke": "full",
|
|
3182
|
+
full: "full"
|
|
3183
|
+
};
|
|
3184
|
+
const normalizeLineCap = (value) => {
|
|
3185
|
+
if (!value) return "round";
|
|
3186
|
+
const lower = value.toLowerCase();
|
|
3187
|
+
return LINE_CAP_MAP[lower] ?? "round";
|
|
3188
|
+
};
|
|
3189
|
+
const normalizeLineJoin = (value) => {
|
|
3190
|
+
if (!value) return "round";
|
|
3191
|
+
const lower = value.toLowerCase();
|
|
3192
|
+
return LINE_JOIN_MAP[lower] ?? "round";
|
|
3193
|
+
};
|
|
3194
|
+
const normalizeStrokeMode = (value) => {
|
|
3195
|
+
if (!value) return "outline";
|
|
3196
|
+
const lower = value.toLowerCase();
|
|
3197
|
+
return STROKE_MODE_MAP[lower] ?? "outline";
|
|
3198
|
+
};
|
|
3199
|
+
const resolvedLineCap = normalizeLineCap(lineCap);
|
|
3200
|
+
const resolvedLineJoin = normalizeLineJoin(lineJoin);
|
|
3201
|
+
const resolvedStrokeMode = normalizeStrokeMode(strokeMode);
|
|
3202
|
+
const resolvedSamplesPerCurve = resolveCurveSamples(samplesPerCurve);
|
|
3203
|
+
(0, import_react9.useEffect)(() => {
|
|
3204
|
+
onDrawnRef.current = onDrawn;
|
|
3205
|
+
}, [onDrawn]);
|
|
3206
|
+
(0, import_react9.useEffect)(() => {
|
|
3207
|
+
let cancelled = false;
|
|
3208
|
+
const loadFont = async () => {
|
|
3209
|
+
try {
|
|
3210
|
+
const response = await fetch(resolvedFontUrl);
|
|
3211
|
+
if (!response.ok) {
|
|
3212
|
+
throw new Error(
|
|
3213
|
+
`Failed to load font (${response.status} ${response.statusText})`
|
|
3214
|
+
);
|
|
3215
|
+
}
|
|
3216
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
3217
|
+
if (contentType && !contentType.includes("font") && !contentType.includes("application/octet-stream") && !resolvedFontUrl.startsWith("data:")) {
|
|
3218
|
+
throw new Error(
|
|
3219
|
+
`Unexpected font content-type "${contentType}" for ${resolvedFontUrl}`
|
|
3220
|
+
);
|
|
3221
|
+
}
|
|
3222
|
+
const buffer = await response.arrayBuffer();
|
|
3223
|
+
const loaded = import_opentype.default.parse(buffer);
|
|
3224
|
+
if (!cancelled) setFont(loaded);
|
|
3225
|
+
} catch (err) {
|
|
3226
|
+
if (!cancelled) {
|
|
3227
|
+
console.error(err);
|
|
3228
|
+
setFont(null);
|
|
3229
|
+
}
|
|
3230
|
+
}
|
|
3231
|
+
};
|
|
3232
|
+
loadFont();
|
|
3233
|
+
return () => {
|
|
3234
|
+
cancelled = true;
|
|
3235
|
+
};
|
|
3236
|
+
}, [resolvedFontUrl]);
|
|
3237
|
+
const prepared = (0, import_react9.useMemo)(() => {
|
|
3238
|
+
if (!font) return null;
|
|
3239
|
+
const safe = text.trim().length ? text : " ";
|
|
3240
|
+
return prepareText(font, safe, resolvedFontSize, resolvedSamplesPerCurve);
|
|
3241
|
+
}, [font, text, resolvedFontSize, resolvedSamplesPerCurve]);
|
|
3242
|
+
const aspectRatio = (0, import_react9.useMemo)(() => {
|
|
3243
|
+
if (!prepared) return null;
|
|
3244
|
+
const width = prepared.bounds.maxX - prepared.bounds.minX;
|
|
3245
|
+
const height = prepared.bounds.maxY - prepared.bounds.minY;
|
|
3246
|
+
return width > 0 && height > 0 ? width / height : null;
|
|
3247
|
+
}, [prepared]);
|
|
3248
|
+
const strokePlan = (0, import_react9.useMemo)(() => {
|
|
3249
|
+
if (!prepared) return null;
|
|
3250
|
+
const safe = text.trim().length ? text : " ";
|
|
3251
|
+
return createStrokePlan(
|
|
3252
|
+
prepared.contours,
|
|
3253
|
+
prepared.totalLen,
|
|
3254
|
+
durationMs,
|
|
3255
|
+
safe,
|
|
3256
|
+
imperfectionsEnabled
|
|
3257
|
+
);
|
|
3258
|
+
}, [prepared, durationMs, text, imperfectionsEnabled]);
|
|
3259
|
+
(0, import_react9.useEffect)(() => {
|
|
3260
|
+
const canvas = canvasRef.current;
|
|
3261
|
+
if (!canvas || !prepared || !strokePlan) return;
|
|
3262
|
+
drawRunRef.current += 1;
|
|
3263
|
+
drawNotifiedRef.current = false;
|
|
3264
|
+
const ctx = canvas.getContext("2d");
|
|
3265
|
+
if (!ctx) return;
|
|
3266
|
+
const safeCanvas = canvas;
|
|
3267
|
+
const safeCtx = ctx;
|
|
3268
|
+
const { polylines, bounds } = prepared;
|
|
3269
|
+
const { strokes, totalMs } = strokePlan;
|
|
3270
|
+
const textW = bounds.maxX - bounds.minX;
|
|
3271
|
+
const textH = bounds.maxY - bounds.minY;
|
|
3272
|
+
const targetAspect = textW > 0 && textH > 0 ? textW / textH : null;
|
|
3273
|
+
function resize() {
|
|
3274
|
+
const dpr = Math.max(1, window.devicePixelRatio || 1);
|
|
3275
|
+
const host = safeCanvas.parentElement ?? safeCanvas;
|
|
3276
|
+
const rect = host.getBoundingClientRect();
|
|
3277
|
+
let nextWidth = rect.width;
|
|
3278
|
+
let nextHeight = rect.height;
|
|
3279
|
+
if (targetAspect) {
|
|
3280
|
+
const rectAspect = rect.width / Math.max(rect.height, 1);
|
|
3281
|
+
if (rectAspect > targetAspect) {
|
|
3282
|
+
nextWidth = rect.height * targetAspect;
|
|
3283
|
+
nextHeight = rect.height;
|
|
3284
|
+
} else {
|
|
3285
|
+
nextWidth = rect.width;
|
|
3286
|
+
nextHeight = rect.width / targetAspect;
|
|
3287
|
+
}
|
|
3288
|
+
}
|
|
3289
|
+
safeCanvas.style.width = `${Math.max(1, nextWidth)}px`;
|
|
3290
|
+
safeCanvas.style.height = `${Math.max(1, nextHeight)}px`;
|
|
3291
|
+
safeCanvas.width = Math.floor(Math.max(1, nextWidth) * dpr);
|
|
3292
|
+
safeCanvas.height = Math.floor(Math.max(1, nextHeight) * dpr);
|
|
3293
|
+
safeCtx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
|
3294
|
+
if (!animate) {
|
|
3295
|
+
renderFrame(Number.POSITIVE_INFINITY, 1);
|
|
3296
|
+
rafRef.current = null;
|
|
3297
|
+
return;
|
|
3298
|
+
}
|
|
3299
|
+
if (rafRef.current === null) {
|
|
3300
|
+
rafRef.current = requestAnimationFrame(draw);
|
|
3301
|
+
}
|
|
3302
|
+
}
|
|
3303
|
+
resize();
|
|
3304
|
+
window.addEventListener("resize", resize);
|
|
3305
|
+
const start = performance.now();
|
|
3306
|
+
const totalTimeline = totalMs > 0 ? totalMs : Math.max(durationMs, 1);
|
|
3307
|
+
function renderFrame(timelineElapsed, timelineProgress) {
|
|
3308
|
+
safeCtx.clearRect(0, 0, safeCanvas.width, safeCanvas.height);
|
|
3309
|
+
safeCtx.lineCap = resolvedLineCap;
|
|
3310
|
+
safeCtx.lineJoin = resolvedLineJoin;
|
|
3311
|
+
safeCtx.lineWidth = strokeWidth;
|
|
3312
|
+
safeCtx.globalAlpha = penOpacity;
|
|
3313
|
+
safeCtx.strokeStyle = strokeColor;
|
|
3314
|
+
const pad = canvasPadding;
|
|
3315
|
+
const viewW = safeCanvas.clientWidth;
|
|
3316
|
+
const viewH = safeCanvas.clientHeight;
|
|
3317
|
+
const scaleToFit = Math.min(
|
|
3318
|
+
(viewW - pad * 2) / (textW || 1),
|
|
3319
|
+
(viewH - pad * 2) / (textH || 1)
|
|
3320
|
+
);
|
|
3321
|
+
const scale = sizeValue === null ? scaleToFit : Math.min(1, scaleToFit);
|
|
3322
|
+
const cx = viewW / 2;
|
|
3323
|
+
const cy = viewH / 2;
|
|
3324
|
+
safeCtx.save();
|
|
3325
|
+
safeCtx.translate(cx, cy);
|
|
3326
|
+
safeCtx.scale(scale, scale);
|
|
3327
|
+
safeCtx.translate(-(bounds.minX + textW / 2), -(bounds.minY + textH / 2));
|
|
3328
|
+
const filledContours = [];
|
|
3329
|
+
for (const stroke of strokes) {
|
|
3330
|
+
if (!stroke.points.length || stroke.length <= 0) continue;
|
|
3331
|
+
const strokeStart = stroke.startMs;
|
|
3332
|
+
const strokeEnd = stroke.startMs + stroke.durationMs;
|
|
3333
|
+
if (timelineElapsed >= strokeEnd) {
|
|
3334
|
+
drawPolylineStamped(
|
|
3335
|
+
safeCtx,
|
|
3336
|
+
stroke.points,
|
|
3337
|
+
stroke.length,
|
|
3338
|
+
stroke.length,
|
|
3339
|
+
strokeWidth,
|
|
3340
|
+
strokeColor,
|
|
3341
|
+
stroke.baselineDrift,
|
|
3342
|
+
stroke.offsets,
|
|
3343
|
+
stroke.poolingStrength
|
|
3344
|
+
);
|
|
3345
|
+
if (resolvedStrokeMode === "full") {
|
|
3346
|
+
filledContours.push(stroke.points);
|
|
3347
|
+
}
|
|
3348
|
+
const lastPoint = stroke.points[stroke.points.length - 1];
|
|
3349
|
+
const tipPoint = {
|
|
3350
|
+
x: lastPoint.x + stroke.baselineDrift.x + stroke.offsets.end.x,
|
|
3351
|
+
y: lastPoint.y + stroke.baselineDrift.y + stroke.offsets.end.y
|
|
3352
|
+
};
|
|
3353
|
+
drawOvershootTail(
|
|
3354
|
+
safeCtx,
|
|
3355
|
+
tipPoint,
|
|
3356
|
+
stroke.endDirection,
|
|
3357
|
+
stroke.overshootPx,
|
|
3358
|
+
strokeWidth,
|
|
3359
|
+
strokeColor
|
|
3360
|
+
);
|
|
3361
|
+
if (stroke.flourish) {
|
|
3362
|
+
drawPolylineStamped(
|
|
3363
|
+
safeCtx,
|
|
3364
|
+
stroke.flourish.points,
|
|
3365
|
+
stroke.flourish.length,
|
|
3366
|
+
stroke.flourish.length,
|
|
3367
|
+
strokeWidth * 0.9,
|
|
3368
|
+
strokeColor,
|
|
3369
|
+
stroke.baselineDrift,
|
|
3370
|
+
ZERO_OFFSETS,
|
|
3371
|
+
stroke.poolingStrength * 0.5
|
|
3372
|
+
);
|
|
3373
|
+
}
|
|
3374
|
+
continue;
|
|
3375
|
+
}
|
|
3376
|
+
if (timelineElapsed >= strokeStart) {
|
|
3377
|
+
const localElapsed = timelineElapsed - strokeStart;
|
|
3378
|
+
const localTLinear = Math.min(
|
|
3379
|
+
1,
|
|
3380
|
+
localElapsed / Math.max(stroke.durationMs, 1)
|
|
3381
|
+
);
|
|
3382
|
+
const easedT = easeInOut(localTLinear);
|
|
3383
|
+
const partialLen = stroke.length * easedT;
|
|
3384
|
+
drawPolylineStamped(
|
|
3385
|
+
safeCtx,
|
|
3386
|
+
stroke.points,
|
|
3387
|
+
partialLen,
|
|
3388
|
+
stroke.length,
|
|
3389
|
+
strokeWidth,
|
|
3390
|
+
strokeColor,
|
|
3391
|
+
stroke.baselineDrift,
|
|
3392
|
+
stroke.offsets,
|
|
3393
|
+
stroke.poolingStrength
|
|
3394
|
+
);
|
|
3395
|
+
}
|
|
3396
|
+
break;
|
|
3397
|
+
}
|
|
3398
|
+
if (resolvedStrokeMode === "full") {
|
|
3399
|
+
const contoursToFill = timelineProgress >= 1 ? polylines : filledContours;
|
|
3400
|
+
if (contoursToFill.length) {
|
|
3401
|
+
safeCtx.save();
|
|
3402
|
+
safeCtx.fillStyle = strokeColor;
|
|
3403
|
+
safeCtx.beginPath();
|
|
3404
|
+
for (const pl of contoursToFill) {
|
|
3405
|
+
if (!pl.length) continue;
|
|
3406
|
+
safeCtx.moveTo(pl[0].x, pl[0].y);
|
|
3407
|
+
for (let i = 1; i < pl.length; i++) {
|
|
3408
|
+
safeCtx.lineTo(pl[i].x, pl[i].y);
|
|
3409
|
+
}
|
|
3410
|
+
safeCtx.closePath();
|
|
3411
|
+
}
|
|
3412
|
+
safeCtx.fill("evenodd");
|
|
3413
|
+
safeCtx.restore();
|
|
3414
|
+
}
|
|
3415
|
+
}
|
|
3416
|
+
safeCtx.restore();
|
|
3417
|
+
if (timelineProgress >= 1 && !drawNotifiedRef.current) {
|
|
3418
|
+
drawNotifiedRef.current = true;
|
|
3419
|
+
onDrawnRef.current?.();
|
|
3420
|
+
}
|
|
3421
|
+
}
|
|
3422
|
+
function draw(now) {
|
|
3423
|
+
const elapsedRaw = now - start;
|
|
3424
|
+
const timelineElapsed = Math.min(elapsedRaw, totalTimeline);
|
|
3425
|
+
const timelineProgress = totalTimeline > 0 ? timelineElapsed / totalTimeline : 1;
|
|
3426
|
+
renderFrame(timelineElapsed, timelineProgress);
|
|
3427
|
+
if (timelineProgress < 1) {
|
|
3428
|
+
rafRef.current = requestAnimationFrame(draw);
|
|
3429
|
+
} else {
|
|
3430
|
+
rafRef.current = null;
|
|
3431
|
+
}
|
|
3432
|
+
}
|
|
3433
|
+
if (rafRef.current) cancelAnimationFrame(rafRef.current);
|
|
3434
|
+
if (animate) {
|
|
3435
|
+
rafRef.current = requestAnimationFrame(draw);
|
|
3436
|
+
} else {
|
|
3437
|
+
renderFrame(Number.POSITIVE_INFINITY, 1);
|
|
3438
|
+
rafRef.current = null;
|
|
3439
|
+
}
|
|
3440
|
+
return () => {
|
|
3441
|
+
window.removeEventListener("resize", resize);
|
|
3442
|
+
if (rafRef.current) cancelAnimationFrame(rafRef.current);
|
|
3443
|
+
rafRef.current = null;
|
|
3444
|
+
};
|
|
3445
|
+
}, [
|
|
3446
|
+
prepared,
|
|
3447
|
+
strokePlan,
|
|
3448
|
+
durationMs,
|
|
3449
|
+
strokeWidth,
|
|
3450
|
+
strokeColor,
|
|
3451
|
+
canvasPadding,
|
|
3452
|
+
resolvedLineCap,
|
|
3453
|
+
resolvedLineJoin,
|
|
3454
|
+
penOpacity,
|
|
3455
|
+
resolvedStrokeMode,
|
|
3456
|
+
sizeValue,
|
|
3457
|
+
animate
|
|
3458
|
+
]);
|
|
3459
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
3460
|
+
"div",
|
|
3461
|
+
{
|
|
3462
|
+
className: "flex w-full flex-col text-white",
|
|
3463
|
+
style: {
|
|
3464
|
+
background: backgroundColor,
|
|
3465
|
+
...sizeValue ? { width: sizeValue } : null,
|
|
3466
|
+
...aspectRatio ? { aspectRatio } : null
|
|
3467
|
+
},
|
|
3468
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "relative flex flex-1 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("canvas", { ref: canvasRef, style: { display: "block" } }) })
|
|
3469
|
+
}
|
|
3470
|
+
);
|
|
3471
|
+
}
|
|
2662
3472
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2663
3473
|
0 && (module.exports = {
|
|
2664
3474
|
AnimatedDrawingSVG,
|
|
@@ -2669,5 +3479,7 @@ function AnimatedDrawingSVG({
|
|
|
2669
3479
|
MenuGlitch,
|
|
2670
3480
|
OranoParticles,
|
|
2671
3481
|
ShaderArt,
|
|
2672
|
-
Snow
|
|
3482
|
+
Snow,
|
|
3483
|
+
WANDY_HAND_DEFAULTS,
|
|
3484
|
+
WandyHand
|
|
2673
3485
|
});
|