Sat May 22 23:23:44 Paris, Madrid 2010 freestorm77@gmail.com * setuptools-0.6.14devdev.egg.darcspatch.txt New patches: [setuptools-0.6.14devdev.egg.darcspatch.txt freestorm77@gmail.com**20100522212344 Ignore-this: 9c657b5380bce486773abca4b4f026fb ] { binary ./misc/dependencies/setuptools-0.6c12dev.egg oldhex *504b03040a00000000004841453a000000000000000000000000090015004547472d494e464f2f *555409000357018b490b038b4955780400e903e903504b03041400020008009240453a449e1f3e *1b0c00000c230000110015004547472d494e464f2f504b472d494e464f555409000304008b49df *028b4955780400e903e903a55a6d6fdc3612feee5fc1ba051a1bfbd2a677056e8100e73849eb36 *b1f7b26e73571c90e54a5c2dcf922890d46ef4e57efb3d435212e5951da76720b02c91c3799f67 *8679272c4fb9e5d3df853652950bf6fdecbb936b5e880533c2d695552a3727ddd7ef663f26df3f *4fc5fe64551705d7cd82bd528732573c9db04d2d73fc92a5b13ccf27acae32cd533161bc4c595d *86f76cd9d89d2a59c5933b9e09c3a65326b89179f3d5c9cfaa10d30a6f176c676db598cfaba692 *b3caed98299db9bfe7116717353ee9055bee649ecb8afd3263af374d783d150597f982a5d2d8da *cadc4c8dccfede533b792b13511a9cb65cbd614ab33f966f4f5e099368595927ef8bc77f4e58f8 *b9f2b2c93273c2fe66e869d5b3d9ae7b2abdee613663892aad28ad592cd8f9f92ddfe482a92dbb *0c6fcfcf8f37750fd3877eee33ce495cf787ae137a365f40a37bf820cb541d8ea43d5e184e8d5c *8cd54e65762758a5d55ea62265ebf54c7c12eb75eb5142cfb075cb1a557fbba775622f556df2a6 *a3db2e4c99ca53a1d9defbad2185f5674d5895c3e3044b452eac60c4c97add7f3f9f892c5baf3b *aa64d1f8fbacb23b70b59539bc77ab55411c69661a6345f1ada1b5d2921f7b07c7d2546a9158a5 *7b4e9f11515e364c41644d5b1ad0e58e70bb5a0a73c6de5cbd5fddce4654e8f4c0b81621ce9cef *754a69451f4a0efd72cb0edc449a728a8f641d517ba7b08d60a6c68956416946b1f33eaa1de581 *d67bc7dc4b7e4f45a717693a7f2f0a053b2eb502ff8539655bc12dc84fd8cbd76f6edebf6e1968 *1da31407a17ba2fe9411d5dc948968f77ac7960651545464ed8953db01d90206743680c010aef9 *187604e12bcf15e874749d08217badd72b9725c8baa6de74068687be8c9494a6e01ca777dfe92d *d1e988aed7cb8bdb9f4145947ba9555920a8d99e6b49818e64eacdbce37b517e6ba1752d78dab0 *54953845cd1e89fdf7cb77d397305aca564eeb8f24a13f1ba0068240d5380962dfee48e9495e87 *d03595484294f4de654c5d20685acf8d0cdc934fc596d7b9050d9fa949379f44525baf110a1c68 *b454b6234b47c9ad4c9cca5158b495499df3ce58adab782687e61e50777ed191dd88284c1c69ef *bfa0b091651cd63078b28374f832af8d9ebbcf0f07ed419a1d11ec628768e72af1ceea3302e2a9 *1ca8c3cb723fd5b92d08a85e690fe61e9f73d6eb6f9023b6f29367926d55ef8bbef099b32ede6b *fcb34e653e254e37cea106b1c52bf80387f8a92b9c1bf79d767564b72acfd581cc6b842b2e8fb9 *ed659361e984bde309bb59b17f4ed85b59d69f26ec86d4f2c4427a4cf6fb5907549c448eeb0a51 *86fc0fd1480d3ebea3bc19bce7999865b3285efb9898121cfadbb46a9ecffee21574061f7ba5d8 *f5cd2dd3a2048c62d28e48fb7cc6ded7484b967c06218e07a436411eb6131476ce10134627d389 *3bf6d8a1fd013de2f019ae7530698dc8b7518c15dc263bfae3f3e2fa20c46190ce479f235de53c *699de3e178bae709ad9776be4e6a8f92406021f8211c961cdb0a5dc8126eb56906c4b0ab4cb94e *7b784750692bb35a07e254a02784ebfcce967cecbe678f442947268ea2342ea30ab9af10871d19 *2d8ad7e3e88ba2cbb957ab819ee74130b58a314e33b9dc684e30c0a93d68c515b08e68c19b36eb *b2d730439bb851ee0a6c9a42ade0b0f234fb2c359dfa24b05e4f22534fa781992992063ef96315 *5388c73e88e384e074ecfc5cf96c65f0dc510c4c30620281f10622894f9ceaf06271acf647bd9c *b51cbff8eff1ce7fc15a09d44fe98aa4400c55e00d56ca04428c6d6b68a455420ecd53af422187 *20251e057884eb181826c6424ed058a910a6e6f9faa3330e1c13cd45c8862d6a46c8ba6284d50d *5b3b85f894d711859e92da58553c60f8f5c7d96817f0f19891be4912fc6e66016649184032dbcc *f0347f25f697401342cfa3bd039a11839f65ec4f9df6b527398d494e3b929f2d03ec5a5931d689 *3c8a87ad6e9c9f8e862e998ec43e3f0fddcaf9f971128c603a7a87aa52c62300da18386bf738dc *9bcbbda0481ed4ff330f350b680006bb8b12974387b48f97c342d427ce677de2fd812271908727 *715ae9bffc1567123402572ed79c9f7b5e2161873291b22801eed55d1bca082e1f9b1dc510a313 *a0cc76511ffdc475ab03a0811da1c1a2b2c37a638e3bdf31bd877cbc55350171022f978b7fffdb *bf7d0e39c7b2445eb2a961f3a4c9520dadcf9379bb7e1e1a7b689175caeaf691fc2f668b6fe8f7 *e3a9a6dba28b113ac70f2dae1801d8c78b2f86de98b67b5dfeda8848170169ff07e1097cb743b9 *6134190925f5bea32e7dc901704fc527e4106081442b8f2d6939dcb5611b6529bee1e68e38adc7 *67d706d10ba4e93bf340f6791237432e9e3cc319e93ea873922eff04fe97cdf2aad7d62420e3bd *c855e53ba63e8463841675f1080cbe47c676e1e5ba7697df03e7abdfaf51bbca74a3a0bdd06494 *d391134c505f1f7f701f863a5d263b5406ca3ffd31c81e07e0b90774da6fec5465f6e540535ee3 *661e589bfbe5c2cc87ee3bff1a7efb227a07c6bffb71fcd463819f7c3aca5c79171d3d76ec170c *a1eee7f2fb53336785b1d2f5648addc3cf0e5d6be1605b1b00bd9d7c3d25b7aa69eee21ee9700f *edb4f08dae19344be89074e932e246014caca2f15250f1eb2c0b74222146521ad233f5a5718107 *92d188b3ac469fed2800fb40041a6cb420e4fef628abbcf26eeb48fc44248e575777d9c75eae0b *045777c270711bd297c8f2a8da1b99a3e0bbba0ca8c29e11a3d382cb12600818fdecfe39578408 *4a9eb395c34854f9fa568314149dd63dfca31626c0290fcf6cd0e3a6cec067a5349a03b353759e *52cef41d6e5fa1d783796f0495a56b320800ba0c79d5cf56d8414b6b511a9fa14cdd95ea002ecf *dc7c2ef28854253531e3c04b8f9babbcce08e0b84e63c4638643146491aebdce814e6be3cf735e *14434f979f681866949f21f52e4012b405a3ae524087f48114f388f59e8ee70211b76b40fd4906 *fe02dc98658021684d8f4f79ccb99f7ec048cd690f78241ebe405177d9fb96c6d1095f14deff3f *b41fc4c0c0f73bdaf47290ef25b44a2fe783cdf3cf5f30f4b05d0bd46df3e0f7283d904e105999 *24e749050e2a3b90d8b797ce1f9c8afcfb819db0802c75e0266a39a789161411d4f4b7b742aff1 *4c345eaa0dbb029c4714289ad4e24f37c796847729b4853f672bb5b1f727cd1e5bdc6320f4c875 *55e5326ca6a9152307e5d6cdbcfccc3010897be32822799e41177657ccc6547585507f291307d9 *63560b4a502843e8354f9dd4147d200cadd96e9a4e80a587f6d1a4661206078e4908804dbeb10d *28cb8d8724672b272bbe64ce57fb6153bd69354339d9487f65418995d348b24ddded68e083d84c *57573f857af961f5d3553f1726f58591502aaa5c350e7279db94a64282f7ba45979e08741b30c5 *295600d356e851ac3925202aa8de0e6e6db063070c96a151000f3cbf3304ad97cd25cd2df15de4 *260c715cb348dee6dfa775420d598cf3ba000c02d069def8fdc5d098f17e91057b53e796fa6b05 *96e5a6766e260b1ffa624be62206dcfd29e32838857360a45bebe0265d07a8da4463f48a709977 *c8e1f06dc41f51b63ca536bae2d950d446868b8f8386356057325b68d546e51adeb812bcf63d02 *9c4a560869eeae601d3b1d3ed0f72fe2627f7241474d4668b7e93e21159cb6c0ffe1f75093436b *e8ae392c4f49ca69330c122951c4002dd4a0d8b7da523d2ad00a19886e1168ec4777082dd2ef43 *2ecce707376a6e6ebb45d3d60d28d94d25fa38f7d1c32e7a2e0c9a6dacf72882ec1eee53e8eac2 *f347aea8b9e90a6a305c9f6577d05b0e6d2eafdec5f2cd06add3c4e7879bd5c51b9a956eb764d4 *67ed0cf09d8c2612a7970ae7bf442a3965b7bcc9953e1b3aeb4e48ddbb2c3813c6101554b01226 *aa64668eb8a4691c7435122713262820379454845fe0d4789ae0eb29a478760b09efb02eab1bf3 *d5d94801fa553407a553a08bcbe5c575680fbb99aa2319a6b0a405fc22fb9d2c736ec95316ecb7 *eb5faf6f3e5c9f5ce6dc18585de8458b2c5cea59c1d880668b05fb814dd1b5573b3e584bb0c7d9 *fc0209d415eec5a2872666b036fc2f035a71b3ba225780c1b1157fb7cd98dada03b527bd67b4bb *9e4ae90f9ccb96f506be30baf5a62b48fe3ad0d3709d7a4592403bf1f270295bd086b7bccc6ad2 *64c7f060e9adaa7026be7552c48a5c10d7ed18bb97f89d4aeb5c980708751c5ee86427f7c4046d *7506a509ed6776850b4f7691827fca124ea3e3bb7eb35481c1dcc9ff00504b0304140002000800 *9240453ab81cc8a746010000c3040000140015004547472d494e464f2f534f55524345532e7478 *74555409000304008b49df028b4955780400e903e9038d94dd4ec3300c85eff72eed9e01c14008 *c1d026aead2cf5b2685912c5ee58797a52f6a391d5859baa3adf712cdb7116b3bb87d759cd079e *a0a20eac2756ced5b19bc4ad818414daa4917a8190db58ebb539fd9d250ec1d11472ac65804256 *496fec1ea165eb0ad46044df50a95ae242c203a3271b7ca147a5b7ca604edce0a160a47cb30a37 *aa65aca262bdf90d6a34a6b27e1da6ef2f4fd5f3dbe37c102ee71f8bfbd9f2a75d43fc58117add *81b37e4ba2113da70e62b09e651387080ef7e844c7978d15a9355e97a8c36e976b97e671c6ca59 *45025bf533809c6594a7b81be59f39bfbf99e5c5d35ad7409eec288f9d809bbe2f210ab4bcca43 *1663a0efa180c7834f14fe7748be0bab3f1ca4938d2ccd23a1c90dc524e1c08a5180a4f618e4a3 *6960dd2e0cf30d9420a318d746175453c0de2f3e1247d87fe1b4d3432b7de5ba7e97be01504b03 *040a00020000009240453a305c01912600000026000000160015004547472d494e464f2f746f70 *5f6c6576656c2e747874555409000304008b49df028b4955780400e903e903656173795f696e73 *74616c6c0a706b675f7265736f75726365730a7365747570746f6f6c730a504b03041400020008 *009240453a57cacfec640200009e090000190015004547472d494e464f2f656e7472795f706f69 *6e74732e747874555409000304008b49df028b4955780400e903e9039556c1cedb200cbef314ff *0bfc3d4cda0569d74dd3a46df7aa420e713b54020c48baeee9e75092265d48d30b71e2ef03db7c *86ec6b15621b950e3b699b064c1d0eacea3f0aef9ab74f6f0163eba2b577c06e74f3d162de4688 *b88cbff9f8edc16aec505bb70ccd4e9e9f8c20d6c565eccdc76f0f56b54ad7c25d0b21672f1f0c *16a043e285c2dcd9cb0783e1e9249439da65fce0e583c13c9ea836e80b25c95e3e184c9910416b *b1bece238a3f7e60a01514924a2e9e468610ae22930b294d107cfa32861aa457c50a3e80f8c37b *d6d84599deb1a6b30ce1b3b74ca7acd7a8e4e6a3c556b31d121d728c588aaaf7f07e18eba055b5 *5e0302f0899db58a7fe29a58c9cd478b853e8d82567b174f2363fb4108bb8b57a42beae61a1d9a *1a8dbcd2e2e61c76b1b4f0a82adba14f7c01fe4452fedd2a8f5b88375226346868a37f7efbf2fe *f5fbe71f9b98ee9c658c70424f1305db7a89afc74c6782d0fd21b2396862248230d06060697420 *292690678ae6f518287d7f15ce2a2ac3e6307a92a2f56fbbb68907de880c17b60a56231db36c2f *ade9eda1e30eaff67c03cacc38ef1f761fb7f2d87e023b2a0ae3a84884bd1e436784ecc29a9829 *9d23b49aae16ec64f49aa6bbdf538925ce78bd585f2fe87b3e719a0f42401f45a0d29a13a1a853 *a69bb3c090bf509ec514c4a80d3d8441dc654e82b1ac1a51438422760a1a8f93a1dd8aac597b29 *23755ba378b25eae40455f28914d948510ff6f8a22cf04970e51115a15cbd5ba431e5b7edb36fe *554e0438e29394d332da42fd78214f42518db33e42a531c19feff46c1f6682cf5b09515973e87f *1d02ca364dbda17f28e048298263ec1f504b03040a00020000009240453a9306d7320100000001 *0000001d0015004547472d494e464f2f646570656e64656e63795f6c696e6b732e747874555409 *000304008b49df028b4955780400e903e9030a504b03040a00020000009240453a9306d7320100 *000001000000110015004547472d494e464f2f7a69702d73616665555409000304008b49df028b *4955780400e903e9030a504b03041400020008000f42453a631429f1fc1400003b4800000b0015 *005f706b677574696c2e70795554090003ce028b49df028b4955780400e903e903d53cfd6fe4b6 *b1bfebafe0ed2158e9b227e4d2f743e162f19a5e7c855f9bbb83e3a0095c63c195b85ec65a699f *a8b56f53f47f7ff34152a4a4b57d7969811a896f572287c3f99ee1d0b3d9ec874e57bad3ca88ae *11e6b0df376d27f6b2b893b7cae4b3d92c495e8af71faececfc4d5561bb16bca43a5c4ee603ad1 *aa9dd4b5289add5e767a0d8f1f74b7151f8fddb6a9c5d7f9ef16421aa13b01f3cc56b6aa0458eb *a330aa3becbba6a98cd834ad28b5e95abd3e741a660d20085997e2b0cf9344ef08b5c6b84fe6e8 *3fc23ffdfb1c90d9269bb6d989eeb8878dd937df11e657f02849562b5955ab95588aeb44c0cffc *56752b1ea7daf942cc35fceb1f187c8223aa4696fc7ea3ebd27f65100fb2ba5b39ca79184c2fe3 *065decf617c132f0f9af1e66ab64b92a9a52e117f5a953b004ee05e6de2449a936c28f4881624a *eeb23382fa9259b355d55eb548ec5aa952950278d3b4009ca8dc6d95f878fe51fceeabaf85da1d *2a49e4ee1a0ba168da56155d75145b2039b012b9aa2b80b281df86465942ee640bdcac127ab693 *b7ba003a3242396298fe57c6c337f6ed8b254ecd9182f420b578e34f0bb2d0d6e27d532b061803 *02ccbebfd37bd1e99d329d043e07932c2239f2c15124614a1958b052b7aa562dacb739d4855d13 *24fa3b79a784142073f75a5630b4beadd46b90422076b1157692c0494823d4015ef41605f5089b *fdc73fe9092ef4d0ca3d503d7d25db5bb310af5edd3d04bb6bd6301adf5c7f75e31f028c7e04fe *14a0084b189baf5645258d59adfc6bf5a950fb4e7cd3b186a8f3b66ddaa9d928ea69b3ce4eafb2 *6b1b1807a36119f8fc798b8ca0f1ca802c424ce1ff056ce06790a06c3c0e7ff63074f46284d2f5 *9bb39b6894450db57602ab1e06afbd205126dbb40616d7e21cb5c80013df12aaa006a6d929b073 *c06771967a60a420a82f002d5e0284985e38ee8f11b0c2e8065c77379130f454ae8c8a67db9928 *68e329d15a56ca804cb5dc29325c38cb7f4f025aa59e588b014b03d6203b58f1035b5b36cad4f3 *4e806d6c1ebcfc93670072b60ad72a132ffabc63907d90bd050d5fa21a07ab00f1f0319a247c33 *b9fb4aeed6a5149bb321bc2cb0118eb4c7fd8ddd7a32414446ada755a98b2ea4157f1f0e6a8a68 *0c7e8d8638b4608cfb181a213bccda9dc809a468bd89260bb16fd5467f5acec1b6c377e446482c *b0313f69559546a4ec30ac6f5908a4f90208b8bfbbcd484c8139d6091b40a138b446dfabea4860 *808fb8242c013381f8f8c5117f413365512863c8575b2039536d4e9e06dc7473a84a64b702470c *9bc6a9a8375254b075d130509289aa69ee1025f60316255d7b80b4e339ae2fd1aa8399c559cda1 *db1f3a44153d12b8e99aa0aa7b05a6d54617b869b7211e6f81be6f3a05f36407bf00ae13515679 *eb9e709baf1c0b5e891482177c1662f92273ebdf02f11cd1bcbb042c994e3464454ed80a85740a *85833008005bb21e50d2f2d7eedce3f8b0d5e45d3a3099800f78568a7590bea0fb879d0242a4b0 *2001410a20591001bb170be00142aab54262daf0a4cc90d5b23e5a03006b31ed0a140e9c051405 *edb1f47754726073212e36a26e9c58f6086b36d81814565a950bc1910b9912d8590b31823cdc6e *3b8ad1f46dddb43888d743263428408165225b82d3f66db397b7b2c3e1a04d3b5d433082d8c166 *8d926db1b5a43cff24d18d9bb3c446292483a106ecd97a1560eb9965acba911666a3d93dcf90c6 *0585891313f945ee046021fc03b6ba5fcef379e6f4b7b78b46a93a050bb65bfee39fb131dc938b *99348357ed41f9e7bb6bb273f42c71fec945a3914d4080619c99b228b3ee058b1fd1ba4c834842 *0ce9c9335cffca06c7ab558aa0b229a71d88cb1800ace5040e03d6a69bf0103e8ae281a7573a77 *f2f5af5a67da7f7b164a6d54f2f45832c74b3401684652486072cbb66b5cf206c27e276be026c8 *3da0e9bdbe4946a05e82b34657ddb5120ca751d6d4776a071aafe6f78aa4100c05488e3a85c8f5 *9e048ba492e76f88422cc0d9c4b22487b008ce18bb3a162bd40aefe44e4483561c0192f59b2319 *1ebacd5fe7284345b7669e6de329ffd835fbd715f8a2dec2c03c64140efd4f719591451a6c33b0 *472ebb054988d3dd94853f16e270f84eeed330635ed012d6ce126fc1bbf9348984860c95037116 *05de53e6cc0df532a1278c9add1ef94a945b986c171f4b9d7dc18a06b8bd494ec8e4c036262fff *18e592bdb48e51eca931905aab575b6948f1fb81718d609c165fdf84a1a69b97c7dac264499249 *ac30358f72e1c95198367336171428bcc6b9b2817bc1111806bec6a60f732366345f17b33e0ebb *6d5ad08c1d8b4500382d754b36162381f2006e1bc4de2da2a345381cc0ea147c630fabb14ed1b4 *c73c86c9e6f2d90039c702b58220a9c5d0cb293970af3a188aa71c096922062ea082bf288c12c5 *faa0abeeb5d7e03e2e0d50a27c8a186fd7a88ebec2c611dcc1809eac8fb0a22c1406804e93c935 *809b58b1d9198518e07e6b8dced7a86ac3da37ccbdf04d6e0d3d55c4fc64aa5df1deecfccda1aa *58eaa720bda4ed9d815fb1519eb3803e6c35ba2e942df435356c933676afa5f09be8f13aac4961 *977ed5dc407cd9a5b37c965dbf7e731386236ef08b7e34459bfde61e4b2da9a814427b7c962556 *346becc89defb485462c5455f821f5d0b3474a3d584c5bd06fa6b7eab07886d5b1882bbc6d6756 *9f1b574d6ddb3ef385c6b4e7f5042e592f25918db16236306ba7c88a0a8262ef48a40d286d409f *29ac936460a97bff11941e756df6a0fdfd60873d15d04c8e8e375e6b3c32370029cd50ae6da9d3 *0531365c120686bda66287330149e4b03635ba1a0f7050666b4a2bdf1659ac7b32187c9e6eea6c *e8c0ec94e572eef47a8e2474901e736b05c404ba7669c240461dfd7f6e74dd9304583e44815cef *52bc9320edc9c8bd02271d2aa87b315789c8f41cc23ee785371381784f974d3d1957325503264e *c8cad8883c8fc8639312127b7a8d9032517636fc598309b8fb8c74c1f18c6d2b92cc27e3c909d1 *1812d83e3e1de6d8018f453aaccde24b07ac0f797c24c026631407f0e3cf8d029c13631294c83c *d31cda42399b7bcabb3d6eb1061e0f5fa28cc13fe3174e00edc7c100e7607a5f130f605b0dbf7b *4c31f99876a543bc56ad6af690563d56a06f4aeb0b42b0fdeefd3616f18e161ebdd0dad590ce1c *47b1b29f38161dff2a2faac6a800d32000e0acd3a80e98c499d76a0566b390e0f1f1fd83ac3b0a *ab6c7a62739f001404103b59fd41e85ce55cc583ff7ec6fa9d74b5543207a60399976dd99f3a15 *5b0d21ec71e8da60a59e21989594b293416034e0869d45cc70af1762d6ae67191f3a053ed0310d *814df83c92351f8ef4a42b477c5d61e10805de32eafaeb9b094da751cb254ac0c79f56df7ff8e1 *f2edf9237c420befb00b8461defe301f5449aa003e9a8fd42ef1f6c3771f2ffe7afeed82a4eeed *eafcc7abf3f7df5f7c789ffd9a65d7f39074605ba84c765a2fe874c0eadc6440166864a4a149b4 *313feac560d820ccc0224d183ba5336bc736ec6b515cbfc0da6ccdb91a8506b393569f7f667ee2 *4c7c21d268fd60d3d9f8b8c26ea58fb78c2ba69ca6d890203d91fde0e14281c459c9facb9f57df *5e5c9ebfbdfa70f953ac387cb21c2d3ecc053e0703a72664ec2719fc5b6b867327040c77c44f26 *708ba4da7a237be29df2a491919dab4faa784cb33c7e4ead4e28d1d8153c5a6a1da21934013804 *c79026edffd396fed49e4299397b9488bc4332c3aa5258e44fb3dc0bd7b478e2ab58122ddf7e7b *59b422f26f91c6ff0faf6351265e59e7f42fe6f463d28bb5741bfcab4f10a49bd8075c9f41f67e *2260df4c7a0d9a31e5b1a669b13945035ae1b714e698fc53e26c25745aa0f9651278c308c2209c *e853745fcc8aa89445b5813e6dc9629d71c37f43ad7942239c529d742f93e5899324f51bc86207 *1fac11062fac771cba7c462c1362314a04a26ea4c4aba80d417fd17bfec4656dec30f38f4663b0 *2520aaa5f837cf2818db42279d232c7b98390259f90ae8aa8098585dfbb2305636f5bdbac9efd4 *d10454b4906ce1c33f5ed90c70d91796f949df2502e481d7f03b5db932f3e79469c6e9bd45e56c *aac8b0a97308fadbcee0b9b85ff0b9358f4d4da5856bc4f9ecc6d614c15c19b5cf466935ee6853 *67cbe5d714bfc3b43737e1e25ec9f2fd719e4d5a4298f3d5cd93c70e614e4e33a633f23e2ba741 *8be0e8778cf58be59be712e5e96214acf69c7ad473177cb264418fdde7e71edafcaa6a4650cd9a *3cf3f08d3d69a0b38b13ba0a2274aafa4a9d6d7c8a199e895172b9c223cefee8f25275ad56f76a *ea74c2f568f61d29f67c14e75e6d95b54daa3fc5c728862c00757abaf38b7e9ff4ce9d3fe98e3a *476af5501d45017eb4e3a307c94b6d2149b7671917d475d22a3e2f0f7a06fafc5cb6cd01d888e8 *aea5d18508cca2cfd371bec339e70e55379f5a54eff1436d14b6b0c007db898a30fd066907828e *76704e301af826cb2cefa96387e271b66ce998547719f585ace165a5b0fb1870ab0f182c51c38c *3d59333806867bfa21290ca3880d25b23de651ed2a0adc3caacb530cb8f672701376e9fd451d07 *157c3a8a7708441c258c9ed1941120e3e70562983c5db87c4ee746d4c939ae72064844071127c8 *03f6b903d59187aaeb515d7828993fc40ea53e8edd47b408500883aa094a3cb5dfa9cd0c0e63c3 *0686fe04dd475fb3d9a07361a4f966a0fae1c1be53481fb4a1d5951afba804b55984ea02faa5ab *0ae5dd0174556567af61261e3bf6050a6ad17ac0c2087c38faf9316ad16124f74ff487a568ce4f *577fbd31a0ee3a2a18538b1d359d797d0f8f5a58cffb8af88267b91e386d7cdb1bde2d90c2e892 *f7a7361bf06fa4f8f57d73c7fd64418fa03fa9ad3d0776aad8ca5a9b9d11a9ca6f7342e66f106b *370fc6379d66fe94d6f5e69dac4cfa9e406a99a76d544045ec6e039b5f3505f5dcb3f2501f1c58 *2a4df6c81e0b6343dcfac067cdf6a0ba14dfbcbb3abfec7b5060075840ad8e0b473f13c08ea7fe *e9fcdd87cbf3f068bb05b35b53b39d7bc8c4abd131198e69cd5602056c43deced2ed1d8994a66e *16aef64a71afb993b4d440fb56d11930dadbadbcd790012dac1fc1e64c82813dd98ecd64ec98a7 *24d8c465ec7fe91b54f1fc780d121aa34a4750b56f8eac037e52751206638352cfdb5c5cd48c7a *218df2540b2e4190d813e3a8cf06e80b1a8f6d55f0d2353492afc3437f5d477721dc3203200019 *e369abc0d4966511de34d85d4dd4a5db29d64549125f2768806ca90db8e9bdac8bd8dd84a98d4f *7e1ecd85e28a5fe8ca82ea6914fde6512bcab8707aa92a96e9c05671a78317e499bf038231a0ee *2b9e615fc19f151f1604b6c90a051893a8ef961c0f1dc501383ed01cb40f20d25c81883a2e618e *8d328376bbd8c807bd8cd83c963ca35d0fc63dd2ad37768c61ffa6c7c599d4189bb85373884ca4 *0a61375e0c888144e168eff82c4fdc59ed882f3c39f49c591fdef2a18f6bbe6bda5550a206b142 *8ef6c1ed8c47cfecf58ca0d2ee668621e78469181b04d679b48051d0e9d4f04494daaa4adde3d1 *940b0ec9dcc4474a51b82a2ee9a3ed67d0117ef68480fc2c2ed0f3b6ccc3ed0cdd1a9df45658c2 *3afa09986f9809f9273829f77567a1d78bdbd4f14ed41a12ea6dd428eec4d287c761ab3c986e33 *eaf7633f8ed67d7b3078444eec8205a825db55482abdd39df533e01ec10512c6600bd066bec604 *536f201ba00f9e418173c27b376cc4cda4afcd87d6291696935a3c18b60c475dc72f6f7c3c6930 *8b00f3aa06c2bc086e0a66c335b0f9311660f79e453db0173c8eac843b29757622b45076dec9e6 *64774d86864d55f1789dc155a0d8fa0c0747c8bb13a9fe466350094c7cc3d8f09557f977e8f31e *d7f9f8b46b329e2d9bcef079adbfbff5a4676071f9959a3aa116e35ac17354635a2db834f079aa *f13cb518fa9213994720ba5e347d9d2f2c284f1e967c9e5426e3da29ca4d708735e80fef25876e *e7957dac0fac0ddaac2f6a7c0b1614834d0e3ca94f721045f1e9621d4109aa776741eb1606b7e0 *b90f9df60c0850eceba256bcb0d923d8417f0dc4a95a16d8570aff64593ac9184bab6b4877e55b *4db74fa29e561df79b5b0f2237dcbdaa822b3b57b671026803fc4bfa9b0ed48141c4f2d7aafb00 *9dfd1f85a2d2de7b0516deea4256b694c50e04e41082e34eef29b8f7b8f97016b662b8b18333c4 *5739c6599cf5ac41686b52d8078afe5f819bed6c0b6fd0aeee7a47dd5e364a82f810a30de85325 *c9bf01602003034e8d0285036907ae668bb096c2b943e7ef2f5a257b8df13e68670d9329ba25a4 *f0ced59cb93f67c5fa26c09f04ad0503847407e385f2762fab833a139262071222d84e4119a66b *e92f0f1083822a2bc3d7087c3e456687a433580373341015e584257101dec2da8f0aef9e019380 *8274b38092739c45c76eac0048134a7580822992d00531d2d132cfa2e84ad77899c0f56972db19 *1d30a4d2b07d539421b1c5a64ee750284c661b7c7d1d124c27045db7142e5d4d2de06e3b80e553 *e51ff03e2eeb13cc2d9afda04068b324dc25b510630c8743395f6bac3780599209002f7b79c46d *1b73406de12e6fa7417ca342fdef01b3d33c48c5fc08df588e2b2355d243adc9a800197eff7a8d *6544be9281d8821ab9db19c40b67e9430d4640f63a1cacf88385a62757e65c9a8599efd501cf6b *2e39005bfaf6d69d3cdabc3bbef90888708226ebf8aa1d448f3509bfbd6618756d662e4b6fb3f1 *75114a0cfae88805132525ea0927ad2de80acc967825a88442e8bbb62e7bcf917406e06920830c *40d876fadeaab12bb7a60e90f612e6ab4728a0f9f0b8ae6f6fdfdb3027ea7c7d35c812f18f0a5c *2a882c807d1d9a47899cb519adf7042fc5ffd0a5d29a95022082f01ab5c7362380c295a07e397e *c90b0ed7ebc7ae3887e5795f0640bf14337865e35ef45d7bfc3b0333e7c866a3c147cbafa0c3ff *faec06ff5c025a3ae6b96485b1850727af01b9f8af6fb461b1396acf1a48020c5d60c15fb13e64 *d37ddef0ffe0c4cc1f1505edbbb8ec804f047e1f87222fc58f3ffe68fff20868006cc0ba596f71 *bdadc5f840d285da6036f2ee359e1b80f4117f7bbbd917b191c6aeb32d6a992634178e21d9e066 *026ec126d1b470dc1c8d005307391bdf21c8d9c0d945863bbe30b6da86c9abc64bb6f0951d0e2e *ed3bd62b7da7c42fcd5e21b8ff0e805c74817f96ec77389c98b9e1b997385b5d99a20111c0cb6e *4482c15e2d80ec190715be1bc4cd993c84f860ff88c1cedc4eb46980bc9a0e82cf367f68c1b6a6 *b3b7127d3f82155f9833f8ffeff54c7cf144ff1e66d916095a28cb9e718f13494a9615cb27d367 *bef47a49ffe42daacb3e9dffbd9e9fec4a4739a2391674548e7b39cf4eb7a88f94eb94a0215834 *7ddf520b2f8530b413b20be81e5f24a77b6a92a1b9fd3f504b0304140002000800455459395c4f *ba45690000007e0000000f001500656173795f696e7374616c6c2e70795554090003824a0349df *028b4955780400e903e9032dcc310e83400c44d17e4f61b981341c2012658ab45c606491455969 *6d23d614b93d1031d534ef33f3b41bc537d34bdaef6d2da4569a5d55ecc3cc2995850013cd008d *2375804a31a07b263ab76caed472ec6bb8d736dc74c8670ee5ee155d7d0bbae01f5da77fa40350 *4b03041400020008006caa373afeac9b3a565800006141010010001500706b675f7265736f7572 *6365732e70795554090003cc967a49df028b4955780400e903e903cd7d7b9fdbc691e0fffc1430 *755a121286b2ec64938c437b1569ece8d67afc24398f1dcf91181233830c09300039233ac97df6 *ab577757371a9c9193bddf7ab3f610685457775757d7abab86c3e1db7c719d5f164953b4f5ae59 *14c9b3b72f0747917f068367ae51d92679b2aa2fcb45be4a2eca55912cea6a9b9755b14c6ecbed *5559c1fb0d83ce92ba71ad07edee7c5936c5625b37fb647b5534457d3149920f5785f9c0c32529 *3e6ea071eb1e56f9ba6807db3ab9ca6f0a845036f0e5f60afed540bbb680ffe65b412499cf9fcc *e759f2a8aab78f92db2b78715334f8152084e8d097f20de059b680cb8b3a81e6c9ae2d92ba9d50 *8b7a534083b2aeda047a5ee755b9d9ad0098456b406825e745595d02266d0b089415b4c5ae601c *93c1a07788309bcba22d2f71f6e08bdbbab966e4abba59cb04b7fb765baccdf76d3698149797fc *264bf26a99ec2a7c0710dc0b18cacb6db2c8613156adc0a5955995eb926628df534783c94fe586 *bf2158d4f962d76eeb75f2f6e46df2e5e75fc074e5cba281e1c31c26ed6eb3a99b2d0d6e3ebf2c *b6b365becdc7e97c3e5817dbab7a39190c87c3c1a05c5333401ea800fe1fbae14759b22dd7401a *0dfc3f3cc992aab8cd92cdf5e56e5bae92e441f2a73ffd6930d836fbe34102ff5c34f54f45d516 *db41f171516cb6c96b98ed93a6a91bfb7e0dab08cb2f3dbe5caf77dbfc7c55bc2fb649de2a0083 *0730239bedae21da812586193fdfe38a252d8cfdbcfe082b382080b505b733d8e22a6730d7abb2 *bace92f5359072d81648a5c22eeb76867f9ad74c47d2a66ce1c32c6937ab12305a1617c98c7198 *019280dacc6e9131f7b8ae97c5f4f35ffdea57290ff841f29e913de2ef90ea80b05ba0d0a4be48 *3a5052fa0a7e33385c6afc2b99320ed40bb7292f4c332205db127fe0ae20d4c7d244b0c17f7a07 *609ada96346b638b0b0e2d1d987f702e909e84c28ae56c03fbec0236c2583a03c27a57c0fa55b0 *7eb073cceb510bdbf263b9dead8117ad61b24b587d3327b0fb78fced1609ac9de0bf27d88f832e *bb6db58765c6ae5ba2ee7559114c01446060825fe58be4cdfbe44fbc1d6eebdd6a097b1fbefceb *0e064edbf811f08f47c0beb63023c438364dbddc2de0e5f93ec026497eb7db12774a6e0bd89515 *fe002a5a5c158b6b5c5a33a212d66a8ffc02e05f57f52da248b0d4da07a8c1ca01a93f6a765505 *901e21abad811face0e35d8bac083e315c853e2178c07557e5a2dcd26cd098806dc01e05de19e9 *2ac36ed6c02f98d178982d760d6c9badfe0ce7f5cd7b59939717bc8e70802ccb2db558c037b065 *f1d8a8f6498d87845d66e64db90507fcacdcb604c93669b70d0c15d80d01bed8550b82db5e9965 *a24559c24ae48b45dd2ca1f16a3f31c46561c1e6400a39df952b4d855f256b78b3ce1775fb0746 *e23df53759e7dbc5d5181bda9db4c6b5c25df3baae780b012b9c5844a7d364b8cc9bdbb21aba8d *64999ef947701951971f8f1eb6f0bf51f230198f26a3c95feab21acff8d50c27659c9e1e7f7196 *c2be9a5c36f56e33fe32755b4fb8e71ff2d54eb34fdb137241e22e88b3595d6ad2f096435c06d1 *7f663320aad90c103d150ef5bbbc2d17eea483b92e5a3e5f90f29bf27c87cbf204880324810d8c *638b2f16358c8237c848486f94c19fbb6ad62e9a72b3c55fb4739bfaa68423097ef3030d759431 *043cb566d4c38c7a301ff3a375bef11f94d5458d4fe0746cf467ad81674633631a23ccd4a3225f *7b8f0cf7ec7cbe025c81037a8d8b8ff0b0f51e11b3858f65464faa9bb2a9ab35600662018a5c4d *bd62c8cb62b1828d3e233104f6334d1a9ef880e50cce3dfc992f97b31cf6c20d4932844351e104 *32888bb25a7a9348b8b438391fb74d4e9b6886a7183e5eac8abcda6d6606553b43b412c545be5b *6d678b1c389843ff6d53ae73586b380457050d82f625200ee212efe1911a2276f3471ec17b1ec0 *3be9ec555e01bbb288bff0161e9b11d9181827b88e6f79f5ed4cd246c031320884bc2200b42d46 *d948f6f6f3baba004e089f7addbcaeb7dfd6bb6a098f7fa890df5527384706a3133b6102ce4e41 *ded0596d9812ef072626943280bf97662a40266d8b59e30643ebc14f85fdd102e517bcecf6877d *e956c49e92b874f678b48f09f2be2c80d1816453f0c2a36000a4b310526060d441c1634d46db5a *93b88c5189abc18842d90041f0a95bfe54086919287ab693e106be289645b5288648f7ed16ce48 *4331df7d377bf1f2fd0704f6bb97af9fbdfbb3fdf9fecd0fef9e9fd89fcf7f7ff2fc3fdffcf0c1 *3e7871f28793efdfbc95dfa6e7e15be12c4394e08be60276539b05542b5277535c229ef4e8c9aa *aeaf771b14e905b597af8a6d8e92f15bc7ab462f0d15eb87dfc29c99c666aadfc27cb86730d0cb *4befe77ab3dd6b18053e506c91a1bcdead56ba1540d13f5ff056d58ffeabdcbc0d80f030812722 *8f28846dc923cb7166573023abe02dab0db3ed7e53383ef3111887fbcc481f8615b38c5ca85df3 *a2c0f547a5eec93934becd9b652012d5d5ca9c197050ac41134568cf6ef272855ac00b9fab0dce *06c4749260db8f2d5b70b2e6b3f396f672729e83b28042c9b2d8a0f4502df674b8f1f74981005a *233f90480f7b77d3cc66e3b6585d2849598e527c3a99cd0891d90cfec21999cd1ee347f4c9246f *2e5b908c19d5801f8d03d415c2a8eec149b4dc1f95b851562b10748cb8b490cf5b96a350124306 *53b45bd7883437ee34c6f20ef4ac60e97304245a96822ef07b055eb3ce7eb01e2758d6455b8db6 *acfc83663b245e945c1439aa7443235e5e9637203fe38c52777657cc603303e7018e0482cadffe *3178fbe7d9ab67fffbcd3b548440329319383dfef26c60f80a62314dbe1c28de02bfbf1828e602 *bf9f0e3cee024f3e1f68f6020f8e9eb27a13db1b63f5779604d8eeb5e6c3df26f3b0cd9c0d13d7 *85fd9a45e8b9823ce70de53d226d02660c7fa0a5865706a631b7aaff7c0e3ada6e55008dca97b3 *f99c3733f2c0082a641fb282376a1599318ae4c92386f628a9cfff02e740a6e44b3c0ea1bb0e8b *9ccf692ca4d1082e9eb81e59df5335c83398fd1049a76a9a376386fca601f9a1a36b025e1dac04 *2736492d05319c4375661b0c4119285bda8f7086e99e3225ad74998492e026c87b3d1c555763d8 *22debbf4f4f3b341479d101499d8f9477baa3e3b1b282de13f8b7da023cc8437034fd37d7d2278 *5e18d6aef2adc51bf8b5a32fe0dea832a55af7a0c36706e7df0636c038b2e499804e05622aa615 *ad1db14c3a3d3d93b9867541cec48fdd485111000cd16c83469cf1e8c9ae6d9e9c97d593f69600 *8dd209f2d8713a213989a4a6b19b09a40c7c46fa29c0f2f5aceb629f2537a884411fd88c818c71 *c859f234f51a0386d01e75c5d15bb2206ce528381ef9506985681c937c8347d498ba9820f7dc18 *44c7c3c9304d3bdf9dc360ae9d9ab86a0b1f76939770fa39bd314b867f84cdf8cd67436f85a877 *a43c6fe2f306f462f8fb0a462ad32e1ffc6df4b6be2d9ab7cf47c7a3cd668167363d9881ee89d6 *d3f64a5efc038d3506466660b93d1c2ae977998a44e2c665324f8fda4db1282f4065f574206699 *7ffad39f92e76cc958ed199af0cd968c632d70ad83d625344203c4a464fb4a55144bc0a2866faf *40a26156fd7d59ed3e124b35aab7cfe5c892e8f7620c8abab3d080e1903014df6784b0463e7c09 *748306759413c6c6f6304a0fd8298c8c31f5779c4f6cb274bcb776c838c7e9e92fce6033419fc0 *1987c910686b36f4bf1272191a13c872f27079f4b01da21504e8646cceedcfd1f0a11f3c8507dd *4d12a3cb7b1b491ed00cc2caa1490788402c6b681fabab235c399ecd847520b142dd96ab557201 *c258006b7bd5d4bbcbab443c05a23907ca46c748d335c974ed5130c54d31413119748b7163e66e *fce3f271fae384fe73349e3c4a61aa19e1835f7313efeb008826b5a8e92c11bb7e12c8f0bc8b63 *5ae95878fc32338655b7b19fe728cd2e0b7b081b316439779640589b840410786d40b8d7dff0de *7e27a2c7b6017e0c6b5b94bec5b1c4cd8dac19f7b074665124eb2a40ce5713c7295ed3eef63514 *b2e586fb9c6d9bbbaafcb887fd5eb4fe7e075ccc981009b221ba23df7b66da4da7e66d4794f880 *c363a22bf21610027dc62858d6664c3c106d4bb9b1c8003c7c7bc0e269d7c620cd9f380410b93b *6018fcd3c140edb396f74e4ef8899af8cd401d8cc4ab18fa716763318f36c416ae07b17e63f746 *42050daf808745000724afdd665bd7ab36f97cf2ef93e419ece3e0bbfc624b3e453c62c88c899b *3d0083ce4412158b5b9e858fe2f3a30d3ef177388ce805f3906912d99b9d390bc405f77d574058 *3a2e8d7cd235156bf1d3887040f8baef860fdb89f05e5e69fb6996780fbe88c042f79205354d7e *45dbc0ebe06be8e1e9e7932f8748d73f7600f8839826bfee85f08be1f120faf9033934812c9073 *b7f146e6ed04ff180f91048bcbcb56b9119a82d71f78f7300e8376b359faeeb227a810801489ea *16aff36498f543420bc825a82e53630f01107f642cd3e8576ae7c78ed36f7390f384235c5ec266 *41c55ab044f9b5b8cc177b414cefcb9c7da77b27ffacf3bfd4ce33240b42e73caa5fde9695ed6a *6926f96c9a0464d45d78ffa32fbb1f7d991ef78e10bd130153519e3a607b8cfd6eb344873e100f *3178c37881c17af89b5de39179f2353d0fa9ff104eb135126e8c47487846384badcfa30d395ed6 *09c6520c2283279b83759f8c51809c218c2ce12733e5c985a3e7fb1ae9cc37e0cced4773367bee *c8ed96cc1584b98033a757d58a22380351e0a24149ef693ab9985daeea73c08cdbb00fba6a4f47 *c6fe353a93af27e86268447cf45be027f0a7399f4801b618a2e63b51e355286600074e18632244 *19c7b6a3998f5b179d9aa127857aecda09acc3d39b403675b04f33511a3f923aeb2271430102c9 *d0f2c88dd263020b882b18137209303a7d203c238381e1193fbccfd9d1ef83d066386da820cdf0 *036c7336a10e4f2860a7305e8d4ca34af2930604c2beeb58e8161ff09487de3b4624a1fd95253e *d9cafccf9914b5531198eb9c3e612312d1f29c042942fd251d0684bc59034124bee2930e561a1f *472bd6c5a8b19e9255a3ab9d161ec6f011a3ca685ba9f36207c207378426f7c3d6478500769044 *0bc53de6165170ce344dd382e8639e7dc2d788cc9f8a25e1e2cfa81707b4b651424af5352e0313 *1ea4d654cc3cdc7666be05855dfea4d71a06da0af9d5c4076d8d2202cc0030d6ec8eb747c40f9c *ebabbc9dade5f538889c4113775df0b12492e5a8f5d98744d76963a300fb86ecdba61b44f84037 *1f3a9f2bf73ccad98e154541b2733002f8cfe83a3c041a7dcdb81151453e5fe5d535fd055c9698 *2081b547e2f7201191420d07cd16f6e80a7fdc5e955bf617e1094e26ad0d7446045180ac4130d8 *27c7d0049804013e98cf110dda446503b83844165739fa7760e151aea9d7e51698d7c49b033b7e *0e7eea8eff651b591a984febe9fc2649c6abf21aa3e524146cc2b0d2f93c8df725210291debe97 *c9b41d71eca1d0878bae543d1a609dee7a0f4ae39ef3bb3ef9582c76db428d564e4fe91cc3b656 *65b174df033ee405c89b3d756cff914d131ad5c79d6de4b9b684e9902740ceaed68496801c1ec6 *57b61d5aeec4668cd71c4d90d98f66dd29b7a73b1909bc804ca02f6281ded77327e0cd05fe9c23 *a4ce8bc0c721c10ccc29e3a87264c9a7218ad669747d12b24744099a61fff7620b3bf6d3b0157b *acf039fc13a9097f62dc031de1ff5a8c91211b88e30318869c39c28acdd73e2bf663780e75e131 *0fc7347f0ef308e38b0e756bb8881f58fd695cc4ff8777b40bd91933c16907f1a25ead38a2845c *8c188ce4ab1a2ddaebc83e8d1b6b4cf2725baecb55ded021e28f7706e242b915177b46a25159b4 *5ac832d642d80ec0b6c49d86461d3e3accb944bdc9e7c958acb05383476a8418fc875cf3a6e934 *393debbed9cfae8bbd7898bd97e7f426f26291af56e7e40820885ae1345d89b5cfd7291d1e06d7 *81e783626111d6541afa5f7394c152a4d931fd3b1db8e975afdcfceefd897db65c52a83fc63623 *3f041e3c9f9be94183293aedf834df77171aa39fed3e9e7703d018a58c3459203a9c835dcbe1b5 *d838f0d418488b1a34b0765373c76259b72bbc6729810c1878e2c320e1bc87fee925f66101e5ab *db1cd691bd69dcad3fb802a30c50ddda92cb9bc32ee05c2a5ad4cb2c9cf107638c2c16399a83e6 *73b35c30a845ee0b78645161efe0ba26534bee3c0035e86376001e3626f4c183ed36a33114f098 *9cb3034dd7de379354af6f1f714f600bc936914502ba4da39bc4782385bc347992220ac3ee5d79 *b28ba471aa158d451a328d0c346f90496d0d7f500abb1188c5e42f3aa1d886226c89b0458b07c8 *1cc8d3f4cce8781edee0e4acc4cf27f023452b25ebb403851e79f3795b3536de40d0fa16693bf7 *11209b2fd2b30a2e20a7863a0a2996ba68f87e4ed53b0e3fea4746c47eaa60502d52368aef35ee *60fab52e0a098d37e63e8d90f8505d903bed6cc49283dc339cedfbe2289811b58bdf94660f8f64 *bed083c858efce5c6392014d072153cc3f48e95f4ea27356d59f3a6746cb750cbb95a9d37d686a *11db4b482d009b8845737ede1d4100393d24fb0ccd7cd44d1f848ad13e41224b9c7d11f60f7317 *d4b70f39feb54dc6d06e273c5a0859a9ed9133989544cf3243f241cb47b1b1d158429f07821eac *945877e428cc120a5945c6bbd2704988b1261f84adfdaefe21243c570906195b5c6f712631ac10 *2dc0adc5ca8239af51b1944e280c8a71c32385d0023219975560066c509f891386e687389d7d07 *3df195a85527f0b39071352a3558e960a34483091d39ed383d8efa12f6bc7a1b1fab95eda747c4 *509ff2eb536c7e1657400d37c44ddcc6ccd3074cd4a2d5f0b7ce4a7dc8427d5f2bf5614b75c45a *7dd8626dcf3063ba3658df6db9f6245fdc849de052bbcf7c32c7d94193c77287f77a70f28485c5 *7680db726830e2d523ca3507a4fca8d02ab3e0285214feda912f47df16ca9b4a629611c6546793 *1e69a3a87c31990f609030657b4ca2e486ad50c2d68d586039c58fcf8e630e49fc40382af61ba7 *7f7c730a2dcfa64f0fec0fc5d6a9b1274b0b812bb165ca6c0c6494a2d94e035947a46b914de462 *a86552a06ad58b525d7465f1d5679756a44d76953d9a333cc645766bcd8a80dc871762915a5894 *e46eddeabc810dfeb114b5897cddc074b6647453dd78ab5c544b23940aea6a7db7a3d6175fc72c *47dfe6e4860c64e974a214052bac117bee232c96cb477291cc0a13f68a9b1125746f1c55ec3316 *239503a9d2a4124cea14e57027e53815ce04f89aa511a97c778e1bfabc40f539e16bb21c16745e *d0c77d1203391d91407cc2a473805fccea6aacf784d1d43a7ae4be5f8bdc9ba3c590c140452bb6 *466239a40068f91f5b7c71f823af33ef63117d267a23f39e8aca26c6b17b59a13c7355c2d2c8b1 *5b3ba3b2b7330df4331973b467e1088876277ad3ea3456c8bf0bc4175d185ff403e1bb014464b3 *aab815e79c67e659dd14fe8149378470e56f1c57a1e8ff26228b91f107c526ff98c0b044de4c70 *28e12d4c908557a0c1909c3dd71d69039cf7dc59e16014202f83be4aec64aedc80c86158f463bd *fb669ee9f93346e44cc55a904d4f5d0e43615edc93b42dddb95b6f158080d375479c9b2b22366f *81dad2bc2f442e0b19823ec3601476b6e79937060bcc6cf5b2baa9af0d6b20d78556a0c8b0bdc8 *2b1c06340636019a54a20c00ddbb1d1ab9af70c4326b8d31aecee7dae58a93df28ab0b2b303eeb *516aa05b5a8a556eb763fd2c3d3d3e3e7a7a268152c96ec3bc720b7c50877fa1791e30c503dd34 *ad2fd40b0dd249d805694afc096ea7a3affdddbaadcd75c622309b815cb22a3ca821e7f82b0538 *baf718e73dfe3c254e2278b98b3e28cc6084f4727b7544eea350d44678401676405d11e241f292 *f9d362bf00098ce3f896bb6a8997bd75479d2fd18a515641048f6891384571f5315021e33ac083 *842c0db86434d91e99a3048d5a62b935872ba81add78b27baab3f7c6c99e563787dbf0febc81be *1557f04ec1784c949ab953c1128f010035c167331bd39825cc5eedc64efb70bd7b404e378fdea8 *62dd9c15f3cd6eeb147317d3a3ff5174af8f90f8e2f7990a78fddfd41bba275f24431cfd3069eb *e4226fc27b62b9baf436880facdfe870af71797b91efe7f3b96894232229baec65984e1a8688f1 *dec355c5157511554a56d02c8326409e1b3f80880d7456483bdf6437dbac769740127cf63a1e47 *4f4125bfc9284a63d6770c6714048e72e2d486e5c58c7f705608027438758c1673d7a33a8a4f3e *e61838ce991d8e83f0470f4626171661a2c23b4676889d95d63b4dfa5f96cdaa437b61c8ff66ac *fb00a692f9c810f123af919e1fafca735a03ebd4f0571a6d47c3e778c8a1f08ef138433b1e4bda *d0c36695efe5b9afd3ead9bb9f902107b3589495397e15ba35a8614e84aead98a0340cb957e75b *1bea93d83c45530c2369082990280e223cd0c706a24aa4b43057578e9cbce361cdaa8deb51cc8e *4e20b59dcbad870539d4805077db1a5826a676829910e510d51de7798059f44ccba2fa20101660 *40fc174b02c948dbfd46c0ad8b9c6f0fa2a3a5d92ba7a4524f3c7f8711b25a14a1303e2410de5a *ad473a918d2f2ce24a2f31facfbeb04a1d1abfc9f374beb7994db873238b3ba5ceac9e7c3a4f2e *56f965826e3034bcb498da85423a6f0b594927db6db778891b295fc026f56ae972aec8bd4c2123 *b6a453569676eb25a86175d4c890026a39d17b00062ceb606f5e265f1c6d77c03d8e93f1dc9bb3 *39aaf8b88b28386b9ee26a69fe1db496ec60c251d999ecdba27668d00f78983ddc386b4d53d0be *464a05359bfc0f7c12d98c303dbb8e55182523daa9e454615ad622edc30d8c1177f12ac8b936da *6ab1ab0c4e89ddca1e1235eec8c25c2277cc635990ea2f710d4ebfc0be19754a7ad3a023f28776 *47c4efae0d9132e50bf146740885f988cbc3684971015f96c05a0345c6772b93f6359db475b31d *13ebc6dd660d2c368c205f6daef2f3624bd22e50f1c01ff74cee582a1b9f3f9bf44aeb85863bf5 *1931ee2f0c62dbc753756a1ff080305cdbf763fd95e38f57f9b2bec5e3cd08c3f666ff589b36f0 *2c746df928240b2e2b1e3b56caeb5de3dcfe9502ee3bf765c667c6001f2c5070fc6bff821bc2a9 *067216b930c1aa129b4c2866c6ca69e3f4acdbbc732bd0c1a15dc8b10a6e060cfb24819bc42725 *6f7700497867902a20bb8977e9c88cd047a1f0462ef5a09d8f779fe7ff0a0468c3c2fb857aa39c *c99d234e69083ce8e3d6e7dca2eee24cc751ed905de776ae156c30b7016adab5b9d66a9c91d745 *b1492e6be45883fb77102349bb58fd3a943b51f9e2c418f9e6040500b46d8d1d84b4e7120ec814 *14b697a1db15b936a999cd9e583c690afad4d3231df4ced1a097951057f385ce785b616b1dcd21 *263d136df96e7d7b1f9f74c7479eadc48fa4a45c38ccfc7d649d03d437ac51b08a2825cbfb98df *38a68eacdfe34dddb6e53908801579b0536b9c53072fe5e2ccc487bf37417881bdac5aba753197 *68387f6738631cc2c29295b2047661d21c38d3e3b9721a99e152c4cf6e7541f2e1956fdaf98a78 *6653ac8a9bbc0a273357724a592d563bb2db9bb81d0a022261c378005c8fa56caf5e5f95333932 *ea53e3d5638ed64ddfe45bced241d4f5cbc00e44bc744953441e4784ced5c06468a4d820ee900c *91c97ce10455a4958e8974ccf386734029ca88a8808cd2c04961656563b3b71e9198d9be27fecd *18342ccaf7f48f9bf6668a9ca3d459d19dfb4d4d0482bd2fe69d4e82d0472d7c84b18fef0bbc6e *4eb2635be51b90fc9dc14187c4e166c196e44a3d14ecc8cd286b965816cc1db1695f024d68b207 *99bf9a9ab4373e41bc3778f599c843f41c253eeb44f7b1948f77c714a2731771e79c8476cedcf6 *f2bf51fa6ee053509a1f39a0598d8d2bae7e6b56e7b43668a6692e914935c9f0f9caf0d1802d92 *d025eccccbbc6095983b124b584eadd295a28ae3bb33eef2db9adb66a63354697891651cce5411 *8c070660597cd1d25d4825acbc2518c9b8985c4e60ea465f4c7e319acfd3afdc86efc7c54fba8a *fffcb9dec1b1b6d76945515456733e8683e509867008f229075bb27302b9cbbede29574a7bc5e9 *8e36c923d8938fc2d31935dfbfe0f402acb633c39e0e66d237d8ebfe80840cde8ea3371e926216 *118b6e442fe74289bc5039123a74c30db8f7a96c56ff25aa5a63b53b945710deccfc28834e9c79 *f752e79c2e4f6cd8cac8816e40366a537ee35bcefc98449c621257bc6d4042c2c69bc3b843c945 *0b52badbb06bca1b268626ba53c6375aef1d6a27c7e358cfaaca99402acd663fb3a964f995c7f1 *bbcda653052ef5ef29e3b8a3792c1886fccc3c32f0dcbaebda7a75bbebf78e5e9b65b3a6363561 *bdf4e93cde13e924f0280b59c5ce95e08c4055df67cf1d1b1b9a9f919ccaee92de7d62fc0f3b20 *30f0a563e245ef082c1d47976b01da6e81273ef9e31c5372fc1cc597725b62c64b4e01e042d0fb *823fd450e3960fdda0ef22800b9db26d8f7bcd0391706cfc3e121918934c5956011904bf31e28a *3633f4dc016243e6d1b63e42d5b9ddfa4e192f946daec1cda313d7314478691739519567fb08f3 *ff74d39f899bc9d95ca6decfc90a53578d63e938dc2736ce4cedcee3414fe286e026483fa0207b *99516a6dd84e6cbcf69de111f1d9a08449a813533b66656d5707e99fd66e045c97b5a9383718e7 *2dfa0fcc6946d73e4c0cb8e4a8b0ca1aee9bce6e21f99d3fa69e6cd8f4042f7dc98e0cc35cfde9 *9229e9842b61e2b6d3b3838e5602741cf593b7fddedabeb0a7d8cac656454fbfe5f55a0d52be6d *1b359469d7dfe178a16fc3db361c30e0992a38e856783fca170afa3cf03da026d58aa7886e42a0 *a7d885c599ab2c1a02f9030bbaae912bee5d761da4fa2e0ec7f34fcc1d1c1442c95f7dd8667e81 *0a0088de067a90bcde98ba5d3fbec5c2fafe9c80e30d6592d23194c7d157020e113b4194346281 *cf46f97f22214a2a8ec9c9549c43d35ee208e3b2d02d23d735e8a0b42846ad653803746cf395a4 *c0a3e68ed62d8b77e48bc2f466f585173669f41085274587d6e7e8c264dbb0330b77a227035e74 *c7cd8b4e4acd46a7b08c5cbbe8bf10d1679ab08125c7f1789c9e708c1868cd5ee3d32176676272 *f52d79a89ec85bb7fde5d34ec0e0e15dff86beeabd89a42d8f7351156fcadca2a14e091f522d54 *88808ad68b7f8b404152f4e9995231879e7a32c1645e6832eb80b259d48eb763d616394ad1b8ab *5618f91510b209e4102f35654e33d05e9b3480427b26a7d3c4f7b29219f4aaaeafc55389053870 *879cebecf7e2b0346e60f673d215c4da2c21671a0c3831a62d236705be3dd7b17726ba5b8d276f *2e77244c77638cc5e97d17edc7a7ef13ee26204abbaa04413df01a0a7fed0952086fcb7807a539 *b2c9fb9076361e6d4bda9212a90f7f0f820b1578ddd558d768ee437be911e5a844b1a3b45798c3 *0b3e7dfa989f9487c0f7a5d4f1046b4664e0ddb8e900523b21ed8af5f6b8aa7858f1cb40863551 *1323c39df55d86f0c4febbf2c6aaec40cf733ad340de7bd82075ead9c28c723c1e95384e3140bd *5877ac155d4baebc832f0ce315677d7cb5304d5fc491ab6cac6272657baacb55ec2e5edf18dacc *62b38e1d3ca6b0c3ae35ff16c8329ebade7770277d19356dde2a6397f6cb518cdfed2a2c68d54d *1ccf2e51138b9098ba1fc4736ca5b381b1055dd4c8c5e8ed96712c381fa6dbbf64a530c4ea1c79 *3644421cce92c2c1b334d9bc04f29219275fdf0ca03010927e675eb818c2a1c3c2450e5d50e4ad *8076854d1844dd94976595af6634111e98485487c46a535c908344aeaa5c120b992c09aedc804a *4961679e7fc7d062539aa49b34041a946301a220bb55dc51a0f685a846304bcb19177b7321165e *f608ae4423bb4b7a9fd5cdcc131cee933423c8694170bf8998e8bc4c64f10ed3c981941dbd6937 *7ef6107a927254ce05e6d273fcdc0105b80ec270098bdac0055676076af3d8fcecb1de9ddcc6e9 *3106cccf1d733c054fe7e8cb3e6102243bce3f3ffcc32973fe9be640b0ff67670033eefcb333d0 *1d619815ec5f315ac4f49f1aadc942f3b3874b979fc2fc4291ddeee274ffd90d6e50feb42daef8 *3c9d471179fabb92cba0f0c10d223495f413a10f4879ddea431ce97adca65ef042bd5a02bf5f88 *e118fee20c7ce9e9d333a5a39b93d55ee90b8e20e8b053f84b07d1007e28bb047208a7f1067950 *c019044930bcbce47eb970aa9335021985affa80062cb95e22a07069c5a5075007625203dc1eb6 *0cdcbde42e95b880b62a9bf71f7d96dbda7efab668aef24d8baec9864a09ee30fc04cf3e549fe8 *2ee96d03aa90ca4f46728b4eec849ed1455e0d16577975c979d54214cea9e3ad3192bcfdf387df *bf793dc3f234cf9f3dfffd89e75eb9c99b925818e642a31c0b2ce6320625ab5402986ab45a6a44 *d99b492153eb9d0eba31fdb000132393c93f4c155e0b4533dc22229e613b5fe4c2ba008c459060 *14de86e9a674f231075cd8027a39606fe86c76d3711a67fce7144dc815818df98c17817c0d1a94 *4af5d0ce7dcfe82697b4af3646fd4299bcb82cf0f6caddf895007abef58c54e35d6134f64b1237 *d0a9ef63e13c5e5b23e2da4aaddcaf32fe2d5635159d43fa1eb30903eda0121e1e0633b8f63f95 *1b04fa992aa1e042813019ce106b0d0f5d8d53c493a726d3c9ebbd1b0b4a1a758e3a9a1942828b *380f7715d55f237c2e2f47ad1689cd32f5c4b34b5f7433c3deacc64d64f9ba2b906423cfb41faf *165b5515eb940d9d049c722a90d982c2c8b0565ce50192cf33c99c833fae59acbcc4ba8bb4fc0c *8018762d1b544a2b26585fba899b3205f2cf61c9d63294377486310493578eca896ae8fe4e7a3c *3adaaeb166e623c23bedf7b6f5960356fd862537221690ce11980efad5995305fb8c6a7285b7bf *dcfb580953c3506025b6729d4cb809dae3fccac93e27819340021ff691b01f058f62e72e92b901 *18fa45ca96ef5650c583ab820a2535059d223af3fc12f4bdafc2cce0f874e42cc752216dbfbdb2 *d14bf98a4955002d6bb585de75778734c31de4791fdebcfefecf52f4406278313a7e1f52279b0d *d022d1985bbedc05878bee397ce4f59b0fdc03ec104a2625893bfd58aa5c85688a6fc5e9293a8a *cb4eacc955628292c6f8a66ef2669f7aec0ec188f7c2acad97cdc9b2c7726b7937d701e760d5bd *9cd96439559520c4041d26d4ea0921056e095b909dcad3640414537e1c85252d5e6175b7ed9567 *28c074ac9e7b46ea70a1737a3c0698ed36df8ecdaca413f40262c1ede4efc9e7bffce52fd3e4df *122c2bfe2b3feaa59d2caea0d9d8d1bd5fa53bbe6f22a562ad900ebbdd8f2391c45d7474f1c148 *746fd7df4eb640a4e9a66385c35d275ea61310c1809ce94873e46abc006220c7cde9d08395a562 *7968d1cdbc0393b00963dbbc98660a2d8930d739bacdc67fc4135693108e7169ebd0cc43016e3e *f7ec944684cb38560d7fd6bb76a0ab41fbece5c2c6ce26c9fb42cc5232764c245d2f76aed82e9e *346b5de56459c069b76a2769971548711b35ffe8b050f7145d603e4e190f73b7d11e4c8a93e19e *b924a3ec97688dbf890b142449fb8a0b9d3b91c16e61276571552df22f220d104b210a98cf3b25 *8a2996409dcfcb6255482e633748368c513c1a7259e655363ddce52e6f7238e80b3f8f4c5f67f6 *fa9688e41c7cc5f9cafc1e15398f5fd7dbe2988723629ad20e944c62cd33b94cae35d1babb1d2c *a663d648b5b5e86838c7144b160bebfac26e3945f642674deb19614fb2481787e14ee7c305e5ba *978d453594a107c3ce649d9c982ce318061791077de284083e2e528a42283b6364fe0593bc28a6 *9c62f2383ae2174c4bfeca5a3e2dc8520c85dd3d9930153e2757daebabce26efabbd1538e93232 *9ece22c5eb8358c84cb9c149b6b0f5387d1515d9e2020884cec905665c02f25bb0acdbd62e9f88 *05c6c2eb6ab50f65ec5be3e50f69949c9f76f3766e3ce3f2815a81c96668bf272826ad0a73a5bf *eb49d5f17bfe0564c6e4ab8017945b1d794c0e0029a3cae92d737d9b18a4ee8f253a94ed7c71f4 *b18d3a6691d68ae9e4043c3438f20f904fc81d3e71b19e9c398381aa37e29f2fae242ed01ac61f *165ed138d6596dfea6815d791d2ef209e70fed6209ba7c637222e20df0e48f65b5ac6f5b8a4877 *f787876c47393ab9bc6c87faa8d86b9d74f86cc339e8706a5fe4db7ca84c1294678cae40926ccb *f21df583f7e7ffef1389bb3dc24a4c43bf5a9aa782c8710d828c0ced74140e7b7447b153aab337 *f085b3cfa6a36a3b8a7543da131019ec5658ef663cf2711d0927ca379b19a5ec07212f9c879175 *e76d4da8d2392fe7aab0a7fd6716cc55bde604d4eee0188f9ebd7dfbe2d98767a32c9502aa9925 *2d0ad8e24b005a2137f0f38b4203fae1fdc9bbb7efde7cfbf2fb1302661057b60068f5fb37af4e *5ebc7bf90768437fbf7df6e1f7a383ada9c561800a79fdea8f2f5fbf78f92ef89687f69b5f3ef9 *cdaf9fbc3aa1e6127128010298469208916e249b693bd6db54423947a358704137fd97240c2c35 *75c5e2fd0c5c4fb596c799a64c0ed5bbfbb2e65d355a2947040ef593b1e1cfa22537e3d88fd44e *1ff1773e3e7cbc6b3fb37fc00fdf02f76c0b91f37a8d9a1e431a6a1b39e91b40b3649618fbe56a *9ed7d54dd16cc9eed99c975b9218e5d60b9f2f26d18317104066f881894d6f767cf114b366d24d *f60aa4e8a65c3c99b88a212c204be9d2a5499523a7d7e868e4332899d1a698c07c8f47a7ffe7d9 *d17fe5473f7d7ef49bc9d9632c7d7b3472256fecf84cbcaafcf7e78cd2442ff24b1ee27baccd41 *09c9b106edb2c6d471b9249e61de1b0e5c0f9b3f63b1296faf5096a1c19b495ba3c51313d1f05b *942f96706cb20e6167085ffa53e48a0c9abb37a62eec2801163319a5f79f4933617a32e90466fb *d6cf99c8117d39ba27a5dc974e6623574b5dc548527029057f515c39069d2d3f91a0b08c360fd6 *c6a6f3646c6be77bedd93b366a4815f6231eb2adc9f66bbe3f2ada45be610967ed260596201cbf *f3a3f833016846c74531f576fd6149a1611adcb87c0df2ae2bb764b3baef094b534357693e549a *d094cd21d5c9aeb8a976cf35c45de11838be4db4bfbd1e84cf247d857d66cb9a1f08c6c8a4447a *1894f1c925d1ed97dc3034e30aa31e47c0e1ba11b0d1284def2a8d2338df55c9c5bb037021b948 *1566e19787cbdc7c5aa75c12f5e51beef4130ad1a487cbd7fc9ca163e6bb7b4f42da538c26e20e *efeb0fbefbd9fdd93261dcdf816e2cb1e3e6e9ebd834ca62737bb82fa937e88189c69df6d45c88 *4cfbbdb0916a6687c64fa1a2aadda45b60ed8ed8a37bada36bffa92b195426a32e3f6d29637d77 *a6ef8e208c7b0d527f111fe6dda3f47aed92d1dd2474089570d43d97b16249eb75a6f658e53429 *92064a06ffd53e193d56df44b782bf49a9711ab3a105c970c6c3d7b5e98fbd140f1b8cacd5c9f4 *03bc665bcc57236e447fbf72b7ee14feb1f9b1828318fed50bc4fdd29ff57c649dd6d3a4673104 *052f113f4defa93bccce5cbf0660e05911f59cc31afd96c1a4a24b856347fc66aa249eae8e7740 *1f93025355c17619a91ac9312d7e5609bcb515748743eada44e1dd584d30e8bf9f67de8cb79b55 *b91dd35467bd53d24dd1282d17ec3742979d9a01049c85b331c2791aa59da9f340955574d29470 *640e928e8b8869fb75bd7d69a4b86219d323d948bc11ff2b194eea0dfad68db36357a974ec2267 *6151ea612ce22a881afd9f805118edf63f01a70b7393085d3efdb24a79e1bf3abed3c0c0f01e79 *5f199a7e32eaf2646caff0328240679e4a9279481456f236c8c0646445db5bda7f5c70e389693a *f64317fe654b207a07e944f56eeb701ba7236f19cc4a19cd00d749d2cd649e4294ba0b009797b6 *bea6d7c2ea4ce6897356e6c94dd96cb13a98f3b41fc847d3516c743f9368db2057410b73be996d *9ae2a2fc38d6e4e6bd0862201fe06d611822a8dc945458b229ee1aa7e6892195135f61f43e6084 *d66a18e975b1d5d6776db940abed57046d84ee404c138596fc442b5c72d50bbf9b48988cef459e *7694341d77a9b54797b51c5b7d3685d71deb1eed1351e42745b56c9154c6233c2b477d77f395f6 *6a761aae3069773e21773e1305d7dba02c8e8e4ebefbeee8e5eb6fdf8c0e7cded4f5d638d80e9b *32dd747473fd527f1424e030618620d94f9431e005fb412ca52baaef10fac1a2b1dd10139ff0fb *4fadd01f40024790a7451f3287bfe786e1e7de89d00bc0b40abefee7156ee05ad5fd75152096e6 *7c94de87493336b8ced883501a7d7c674e07fa7282ae6015e1768161a5abe00b698a218e14a01c *65a6f42f719f0444a578ea7ab3dddf97ab724c8678ca40c4a7982c936e4deaca3993135308cc04 *521a262fccd7e7cb3cb10b7eac32e1e07cbae1c5da8a63c3d04d7f432965aa395c72efcb45ec2e *c37bab7b1b188f21dfde2ca56ab7fe57b939bc536d449aa432a3f9faa9dcb0158f3c80d6468794 *db7eb2ed4d757b9f130afa169e887f91383f99c19f2eba51323068b141ce85b30e283cd0cc01e1 *b77d8c615bc5468d437a9e29a3dc451b6c9f0789b3ddea939bb8ff180303f84ca2daa930360c58 *45ebb644f9a2efc863bf0f4c2a075bc3c88e5a39b75d9c349eb91c6099846721a6526d99756f31 *be97ce2d3d0f71e98bbf395d197e631b9f05d2d7b316ab20590dd817bc1eb6e642736ec68807f6 *c396ee9b721f99073f2af3526032cf3db5eb9ffc6042659ee97ac15153ac724a10416f10a61ff8 *c1e818b210841e9b0e2947705bec96f5d145eb1f96fd536cce62a1aafb4db5f9287dfcf4f84c0e *5cf9febf67ee6d87b1c9ffa78cd3a17931a289dc4f84a71175d148390cc6e65ba4cd803d711a3a *5cc4618feafd40a7be5dd58beb204c24431f113040113d31c884b5680bc15286b19f58fcb63572 *8df09ea455d50dc3b416d4193dd2d15d7a0641fb620190dbf366b0fb20a5f28f04b27bfbdc9687 *8cbc77c2bf8939b76670bbaef29eb09341c50d747701b2e8aa5ddd691d1095daea7a3aecb4dbf4 *0365b52c3e8ed3fee17bcd4e0d80c8fd7a381c5d12f10e7e3d299c055d4f56377d18a772f8d541 *7fbff1202136a92a94e2074bfa7169038f2c31f05831324ac36d87ed44ba6c99b5e54f051faaf4 *d1e92fcf32f7e3dff58f2fdd8798737a86d1051d43d978f9f5d7bf01c6f59b5f7f9ed18f5fa6ff *f6f9c76fb36409ff79fa6d16cfb1fd20d9af973e9c2d7e06ffa45f7ffdf42980da0aa82fbfcdf8 *e5d36fd3e451f20559e1e07f474f09ce15062c15dbc52472770a118691ac316324fe3d595fe37f *c676342a623122ede62bb3db65c927c1e5a7c34aa0d94cc1f6ed0b990ccca7654b76518b454ce5 *e4353761e7ae692cd91536c178745cfee9948880dc12f2788dd3319dda193bee4b23ae3e8479a5 *a43219df85a022bd45a32e24f4a4a6173fba60ebcf40bddbe20d100a8447917c7d8d0ae1663c9c *fc2f813bc46c8dcd34dc3a6ef469185d4f173ac60c396a6372acb513984f9a0b7eeabfda111d31 *9a489e66da32fb571a96e5610ad2b75dcce76ae1067766f7e7db10777e2b817618f8d44dabf7e9 *a47698dcfa32faff4b68ee10ddb5f5ba38af9718a14e09eb2803517ec556a203d0762d45dbde16 *a386aff7f4d7110ba9355e4fc0052d4e3968513ab2a19bcb624556171b640c809b7d6fb7bb6a55 *56d787b6f4ddf4f0b387c429db06f7222543d7ddab637c8c910293a340d51c5d3465512d575224 *aa93d430e008c67cd111950255d87a2259c88a572b3102d8e959afc8301e55a42cccb01cd664fb *718b511b41dff4388d6ea6ae1731e2eef2f13195d73a9e40f1810782973b60cc68f88fb8ef995f *293318c942c1dc1d4edb09ac95be0a29e199c93f13c9d889990bbd2ccc362d9216e04442e94e0e *5f4865d3648f2214da6f9b5802488185e148ccb18a8d31a942fbd36e413bcff04bdf61cda76ad9 *cf93e0e529373d33992619782fecb82df67e4549546f48c6d41355d14ccfba0462570e9ac27fe3 *59c59651136bc7d0d1d1793ceb88340f49b023b11b630edb94e2d27cdc66db41c823d118328700 *7bd6dc3ed054bdc4833071412fb11e410248534fd1d1fad3fd83363a8627df438f1a7b7fd84647 *19fd97f47b3062246ace75d63afb172a4bca00d977b3d1d82abf858dfdca7051cfa4e9cc95e67d *720587295e06a5a431143abac21c816fff937d26ec55e059fa21acd3689d5653bfcfe1131cef93 *6dfdc48019a6ea828735b8360597f1a22a1e08c70b78348666c3361143038f6350393b00debb33 *f5fd5a9bf1880384cd95b658fe141625d89a257952290180bab2efdd7cedda68439700654a8fdd *d4ea86b0c5c949042033cad1a1c0b488e128f83aeec1b60e11a2c951f3c3280d7d116c6232974c *2846c7ae8a2c86a58f5295dc18de2376ed9f095d8b52fb5b1886a5bcd0ffd1a5774b7c64bcbabc *d477dc7ac8fc41f2a2b82956f586c273d194af5e2adfa3227bf6d1bdc6800034a46283a1971074 *c62e93500b33d0d2d81ef3466a806449f71bbc2810fa514918008169dc71acdaefd3d3cfcfc2fc *b33aa11ff5895dea94d953db5966509d9a3f523d873f54e8b92c96e1a4077329fb273a97473720 *056ff6f86fb458603a8f3be7c9c00ccc4df6b1f20ea787064fc5c29c1dd5818d8c5a8787473c3b *fc9d9df6e34331d29e82113abbcd9f3a72c20e5c1f18776c0384c98cfe50091f7316f9774a9f13 *eb051565dd058d216579a28e312f8bc0a779a90c883b5d546143e39f8a87b09bd65ee653038183 *3822893ee271ec445861f75908ee50105e047808ef8e3094c1c02b8530c39cd1acec60ee440e8a *15a1835f598449faf04b1d4b13ede4949ba8f348b3393beb82d4eb5c1352aa3c70590b2681b9d7 *b1cd80813f50cc6582a6ebaae6aec3f0a521a364ec411c700611126452498f114590aef6e2255b *bee27e956f337205a3e8e0b61a559f30f75b0c96369166c687551bd43855c54b5d39a9812baf64 *7095b407f3f9e6fa5229c654c4422e7acfa5b6195e78a70ad936f971746d4fbd8944f526d24aae *d2446a65608f9802799d916bc8bb376e73200735b65c7e2ecc7d3db720e606513b6b744964667e *bace7817306e68a724c4807f6cb05574988a01e97b370115337755e349d5c0cb8a04fbdeb6ded8 *d581a2d9aa8f44e9c2bd7de38593c214bbe45cce074e15854fcfb18286b26ad5bd3b8c25c4c988 *cc7d48f8981488b7574cdbddb929ad62d1ee04c963eca26f1ee2afee08e2321ed3480c960c49e0 *a4872bb9c82245d5a0b1749266a6bb8881686f2956695842263dca95ea58e8c55ed47994379740 *7b8f1e5ddfba4df1e16a575db31b3437d7e0f295fd28a11a3a6b6021663f5caeea73d5a07b059c *ceca850520910b5e7b91bc990906a623fafce0d7e105241e170d4bed1009f6b9e7163125abd2ce *3c4b80a786a9bb31f976eed7cddd5c884bfd9923a19309d302474e53618e9755f953c182c552f3 *a441c7b26f82d2664149210970a4c7f78c727c90ec94083ce892ec01c61031f475398527f7f698 *f4dc2cc737e9a160c9b42730a02bc748916d2b5be2616a1521ae3b234bd4e1055849dadc57d751 *81b39e9a4e34f7280be377d1a246b25cf42a5822c267d46364c620a43b381a75da6b08f5a9c880 *4b0fb969ec1ca99441547d018f51ca516656bb17489f22a4d0b6a8fc0c436a9fcde730cc3e0237 *a696716f7f0e6d9a6cab6482125a2c8a25e6649cbe38f9c3c9f76fdece5ebc7cff210a281d445d *4e18f142e130489f31fae8258dc3e5c70e93cb01025047d7cf43f808dd5e87b046130b63bd2a7e *3e9e820a029be0c037e3f4d85617effd4a5776bbffac51278df472082937815627e8f720840716 *48e380c66a02a7eb4b5f2c90b30a0e8799bd1334136543f42af5c264bf8f295c9dcf43ddabd320 *a679751a91deb52c40616a0a07c2e6e1ffffa26d4590f2752dca4f8ef748b4610d67a77f52c8bc *3a935d4f3af16bb2328571b1cc391b9317dd7d85f38291685434f9aa5c2d8339796de7ca2e274e *216d304912c555b79d3a2319d631d059d7d2ca2f1b8a8b434dafc45b73958014d9508a7ddb29cc *8c7ab9d70960b54ce5221005051e763223629ccd5c5a2c93540cb71f67826569f1afbbf2265fa1 *c5522081e6f9ada7562a629109c0f80edebf5dfd7455ccaad62eefdc4f8210d91a5db5b4d386f7 *87fc9a912e6a6d7d4a2474bb4097a1e7eba2e63684544b6ffdd04d27f88d6d2ac6f41375546510 *ea3ac765b5ba6915acd98678082f9e1e9e852d5fdc0959d69f139ff38f96dc6a31a0d2b8033406 *e45401a0552a6e277df83a18134b881814f0155d7b9ab183355848937047ce0c73b34d923c8c0c *9c51e7a2a0aac3f39a627205e8f1d0e6d177f08d1bab634ae812666848708a6b9c03d186d594a9 *c3ed593d3679e3ba85a84c009c3f695fb1835edcde46951d389996e2abf03f31d2f92ab206d678 *651c93121f4f3b4c0e0737171e3895a78dcf103158f1c61aa9a62366ea9d33c69a7561e226f982 *6a0aa068772d92b8a7e992e66441a22c10393e63aeabc1c0bf6765e313cce994f917d430107832 *c20e547f417d5403021a1ab9c3796ee42ae7649446021e6273da5065312fb1b4b095d92cfa3a1a *a1a62ae3ba2dca711266c163a16a87a24aeebba91a571a8d4fd50f98053cb95504c167a41db504 *82612e452c12e58cbcae5470a6e0d19187c7e37991ec361847eaa22b2264a04b9a327658d0d485 *8b44d8d39d50dc3ec6daa88330c6666624d46ed1e107899c3f9cb3d724d11fb5e1b09be262552c *f8fe26bb9e51fac802607cb0ef31cfdbcad783ef3e110783e89d31dc7f286da06f50f69f185d3e *ee369199d1423f0f46d7550c0e5c50b86e30b9ef6a7f24c4bf8c889be62476c8aaf3f64ee6c0ab *608ef4e862f29947b4304e7b6d90dd29f4a6af9b898e2f95f54e94b430e740faa9f3ef494f71bb *97b7d49e944b99aed61bacfa005ba76a8fcc1499f1725a5d550b89e38428c2a1e37bbbdb50dbc3 *042d0fb426b465d4a0e69d675ae90b8e2def4ce882a1959a4e5d67fe5abb4830df60f1806ba0ab *1b00468ca6b49c5a64c670eba213d2634ece037a5b8fb6e82d727a0840af1d3a00c1e453ed56ab *7f827cb42879082931da06bd5924ecfa90e936484802d4f5da3410527c82210e1485400a18d6fa *6bca16b3ecee9a4dddba0a71c1650eec08f3c7598300dad6fd3e655b7569c666fce007d3bffd43 *f08be55b15cfb24d627238c36ad81a485f72df4d7be7a61ba28b1f08f2fd12f3f1c08fe58cedc6 *81492f432d6c34e3c00561eab8ce98a0d36c5b7d659473af45a40eb64b64bd3a8321102f8667db *b4a1f51e330ed28ddb27f817d00385d3507bb63ccce71860c219cde673e461a6ea8a3d42bc6aa2 *d849e63e49fd63841dcfd084278df10acf0b94b38c05ab732890924eb7f1f435c5d10350558c95 *fbbadc24e7abbcbae6713c9151b53d4ea936c2af08578b6cf74a16bdf2e6b6ed757ab583c1f72f *5f9fcc4e5ebf20f29c98e438cdf0c7f6d1f8c1e451facdff1aa6130aff57a2c8ed1596eca0731c *c72ca3183c7ff3fac3cbd73f9c4460fdf8631ce003b6308a2d90533ba359f6dd1bba9ddd4169fc *e3eddf4f8f2667e9e3d407f3222c548b01f2833f9cbc7bfff2cdeb28a8df4ebff9fbd7f0ffd3e9 *df3f9ba6bdc01f6082c80925fb8701be7af52c89629675a6c94c16ce4e0e02ecf61673d27344c3 *9bdfbd7bf6fc3f4f3ec466ead4401a3c3fd0eaccb67af5e6c50fdf9f4490ba7d3cfe7102ff4e1f *d9291f600edad7cf5e054bc46c7538fee6ed6f71ef7e7dfa7f8ece600ecce3e408dfc034c88b64 *7cb4d9e3238aad720fe9d12adf7e3d799ca6df24f4bf61263c7b026bf1bb37ef4f92bfe38f97df *bd7ef3eee4f9b3f7270383da00b18133a7c20b81c16046e31f978fe1cbd3fce8a733fce3c7c9df *93a3749429c078807209e369f2b711489fa3e3d1022f1590205adcf2cfd111fc970431ccb9d92c *e4e9b2b881bffe63f40f941785e1023f6b6d8a5a73455af6120b9e0d59f435dec2715b2f7740b3 *a5e170ba30fc99e1bfd2f0122f3514b8d329705e7fdb76ece5c2b64f8f9f9e211aa3cf9f7ef1e5 *2f7ef9efbffaf56f822f79b363dbc94f70d6acc6bf4e993437395fe8b5395deda17bc059c7d046 *8f468f1122cb88e6194dec883c534a13a0bcb14f6007e44f40975b964b8a006b6ced12fa8a27dd *9bf3711b4bddea27fce524b68baba6aeea557dc999f28f5a9077c88e4c85b07501a21c8b875c5e *258ba66e5bbb2bd1b380125a3b228ff762fb07e904d9dbf735481ff2e02b73ae60ce7cac4b81f6 *5bc1482a17dc9281f6b66eae39b9800730e36a1e259635c00205ad0d276e61e349d523cc444fc9 *fb31d8992ce179d2aecacbab2d0e6d9d936d516335495e624a5d82f5c894da7a8453c385d848ee *33d36327705153adb316c4145b768102a02fea7a257851f9135892c69622d9abf4ea000924675c *495480e942d2a298b81acab66c3c5796b1054392ed0eedc9f5852c225641782d3488a22a4da6ca *aa6f30c69e366424c0b1fd1a96ed12b3f5b6352346f099860b43d3480e843b47804bfa2950baa8 *a422c0bcaa6fb1ed399af3cdb73691011685b118bea8b7a4af73c063536f36585904a7451241f3 *a768552f9658d7a1c94b2a5aff5301c466698d7603882a97eee447f7a0038197edb9a854c64383 *752926979364f8c5e41793cf8754b6b1a64c4f4db1b4c493e40c0c5b0d27c9339dac996543044e *5ec023c9b76c172a5f5dd60dcccd5ab24d0935c8d899068747434ea25dedcd1864079a6231f414 *8629e52ab8aa659b0c697f0ff110c071514c7d9e0c37745aae30547a88516e7546a81f3d15d9ad *155cb8121552cd790372dc15b348fc162884066bdd230df3139aa7a743b323d45c55c52de7aba9 *4c5f99b91500ba1f5dd469c3464399a7f7de64e4f0e5f01cffb5c07fd1d0e911ac3f3d358c8e27 *0dd611686d6ca78a12930bfb33f3e34f5fca16316f0a60fa8ec45e60990e9faf864e9018cc6e21 *e4036209c6963f35a3fb966d1319f624bea875d92e8a1548ab45bd03202838674c6d321343c007 *c72a072caf03d360b31812feeaa685b15fdd6222339ab572524cf00deec9cb2bf556c62885cf65 *22db70996997d754e3046d8954cd373c1c704e8cebcb1003b9bd008cb8d58670f6d3340529cce1 *44fd8f919d58ac1453e326e200129c4113ad59d196907a756a85b6f9a5eff5321a9adc8ad43244 *5cd830f129612051b3f5348c47a1075f1afdd61cc8c7e2f2a4fa4c98bcdc140d437c15ba872efd *49b176b97107f2c92391a28e3bfaa4f6b252975b9f1352f45901ea3170415369cbe35483fbe2f0 *b9fc33eab9da1820c5cfd4ed412f34940e25a3e89a0879740cbfc55ab362ee7012c91bf6ed5aa6 *46958e80169628a7941823cc76179243f8e343e1f29532c4483e03d4b0b1b0abe4b9e73f5154d1 *56572540b226305630d23bea520d5f567034974be3e9c36f861e16419628b1207819577514babc *57bffc6634244c0f41734dbfd248152b6cf2ce159b9ed0ee188f871f4f1fb667985e07eb25b872 *9e6d9aa6f2a10f4c2e667070a79b78e00edd1c5fd827e6f4999a0c3e76c059678869e73a340d25 *b4163c9e26a055248f9d19c5b5ed82e001c4602438ec911eb6faa09b2a460f15c9b33b569373dc *91b74cf1c326a57cca924b545dd042efa24ddf4e2b33fdd0ec0a8cfeb9217acc38a01d4b4546e8 *53be39e6a1caaf317cab3e532182148f31d5feb070093209926d6153b8bf124c9c8caf317172ea *194d70d6ed5dd5c872459d6b0611536b80c34bf0cff4e73bd55448ee78f8b0a1f090aa4e1e328e *f43d11a0eaacb3c8f44ea72ee709e505badf92e8ed664d5766d7c418c70fd57555df5654e87c2c *395f4dc7a995ad732fee76c89b47c503e49b312a47c02ed1a4390171def774e9971850b2ba914b *b208d6504eebed800ce9c891516aea763ef80fe2e25c5bcd55c0254a5facd017d92ce21c15d31b *623357c9842981cb8ed3012622c61c60a842b727aa59bb0759e3a39583b79c4b6ead439a945516 *936b08811fd3df44b0a734c4a719fde78b33bf2a37e344dfd35558c7c44517a1b95a5add2d99cf *8f89f2e7732baa71f40e77d39ec10ba72b703dad7c152de7d6d92e86b55b061e4803b46959119c *e2c41be3f474943ded185347a7e489a7e6dd6d448f33db11fd34e04e3be078d7fc357aa4c08932 *7c1cf2519f6d4db03a597bdc393cbbbcc2e0831f05a79119d6f1ddc332f3e88dea383a2affdca7 *0f5de8633cf2f1ce5198ee7d68a12741f13c07eb938b60bae387eb199e93216144f7446527303a *863c4709975c1d66ddec4ccde2def1e6c24381058c3909370f3233736e7e52e746fa6246212722 *510f669377fc654ccf52af70f0010634bb6ceadd86d910fd99b14fe02e7e54799c88be0c8a932a *92a0d7f71602a9b59101f95355a8ba6cfd4c233a3c58fb1be8df61dd810dcd552bbb0e9b98e90c *e8b9d84c4c86180aff1cdc45c0e3e18b1d971af478f4d0ceaa400c226900f6a9bc399baaeb9ed6 *0f5cb66aa579b162eb3d9379ba73b9f1dca3c5a668f4bb0e1d688d5a5167a9db60ad957b8be02e *cb45584843a2efe9f216791fc687b686b4a6ed0e473017f41cbb0b6572844768411331ddd9806f *3a6a29cf633469501028de9365a6376abc4b17ea286e2d7fc13b221c6823f3e9d3855967fa6f9f *a74f0651d1447c1a851eda62666a4fe9f999de31c22cba7ca2231722004db8484831b285e7417e *717d733fd475ffd80018546e179479170d173526c728e1870df66662bd7d62ae5cf45f6957918b *7c9f43a4557b35897f7a7903f8911848f897d3ebf7c672327dfbe7d9ab67fffbcdbbccd612b7c0 *ccfd0fbca1f9dd77eef647272587ea16b7822dc4e8bd80391889403cf2743963828ac677ba9bd8 *ae1a60b4126280d25eb5773f824632606c227f86b7d8a520ebd4d5d10d46aee6c8fd08ee90ab04 *d8f6760f7a5cbdecd88718a27f950799a2f991992c13994f0aea3a25adb75a084b13999a18b7fa *686e4310678f7ee125d4e04fb9aa4f27e78569e0ad2b56a0117b1ce52f1b5242896ce83276a461 *ae36345233b1a1cf3502d6c45f63cb8809eb9386494026cc28a2ac93e4aa5136828fe1dfe4bbc5 *ff0284d181bb7b4a561af817e964c92c11041b368afdd460eec7d5bafd1b1bdcd4fcc1f76a83cc *a31e3505bcce7b27873468db570bca510a186e8a66bb77035369e38f83c4abc602400c6c444c74 *69501d61686116ee2179705decfdd11ed944d4166b6426a334f3b76916eefdaccb463a1b9de724 *558c17c66a8d8c64a44e8feda2ae396dd544e6c434505fe31b6b3f32dfe143ef4323ffa056da16 *6662d1b44b55d8d97bb1ca7fda5b7bfa6d2117d04d03ba1a9d577b0164390b56d95d3dd9552bac *674121797c08adf6724163922463f424707a4affd2af0196ef891723b7463dd8049aa9ea9fc67a *8168a05a6feee35bc9ce108b9d1b58d74fcbef87bee84fb017d98f8052f9df9dd3297a7f55fa34 *bdf1a796d4e167ff907caafeb4d1f9df7efa40fdef11e51b0e55d3f100d8b273422a5436374af6 *f18099f1fb6ffaa7e267cdc1cf18bcd6a25cbaf2c37921f42d65bced68ee936b9f90a072dc77b9 *f3a010c2173595e5e1f4e9991186d3435986e3d3d07f4bf86e1b0109a0afca16ad70c9e80f6654 *09269d2df076daf289caf34681a46272ec39d32234a18a29f7d2c36c596c4887fb2482305f7d0a *452cd736f7a3f91c952d922393d3b37ff466541d19dba8c9a60a5fe3755ffad99d7b9b8d3f83ef *38a0d057fa22e4c8d1b4c77d37d809dc31ffc7d094ae4a1dfd6eb9d6172e1823bcb521d95a9903 *34ce72d78e11df34baff976bc97b63e7cd2eb27996768ce69269cefad87c8dfc7b7421812aae6c *87ad9c3c34856418e1c42938057306332703ea0e588d56d8d5d2868401bf8384b9f8c44c02cc11 *de63205998725f068b48250822eea3a84fc3077ceaaf527a16756c74e39b0fb806e29bf8616b1c *1ded0ee46226928b22df629c1897f134ee8b8fdbf46e89148711a42ebe2be3e1bd92067738725f *aae0bea85a6ce210c3a0a81b50fd5d0ac888d947eecd68d905f547ed40ae386fd23c19cb56991a *c53b0d6c42e67621730c753dac9b1caeacb0bec9acae8272690a8af93098a4de8b2f5a82eda6ee *d95c5ff69d7491bb3bfde99f0d1c17637e1cbb62777da9b6bb291410b270ba2e4f2475cb213466 *43cb4a80c8c9994e9ba54b7d474cd746c2e91550555f81e68fe07f9bbd7894fdbd59fbd55e3cc9 *2ecdbaefcd311553039c7d004f43b1810c22650fcc2e308a43b8ac823b7a9d8f468fe33a864da5 *25a557ef74379b4e0d5dc40b600383183f6c53c7087a68a9d79e1ff15af7f8fa912f2a49c0d7ed *ac52e757a4efba3b1404ef26a97bac166578ba631e691e9e750a7ee30ce8d8034f83f625561e9b *e06dd43bf2147b74fda2581597146dbb5a5119d4457d59d145accdee7c552e9cc3996a054e3a49 *1903d682cd3d3173368a7a177cf986100b07abe7dcd994d8e792de693db23b03ad47f6164f603f *0cac46ce927128994cff25a134eb569954efac19c403d767b0505ca263b070f781dc29d26a11a8 *9f83e1ad1825a9cce7ac6d936d88a23a03de86b91d16dbd57ed82d3fdf75968e1eb6d3e9c37614 *27d0c4635241e40867d89891315e4e7931660747a91b0af9abf1eddc7383802836a74fe9c64f27 *a0420f84bc4ef608670cd0502776f4ae85afc7331189dad06efe870d19172889236d5e0d3f8b84 *6e6ce8aafe38c87eccf8191543e627222ba8e9d1f382e22e9eb032395942b26941c99ba4213439 *e8c1b742b39467fa64d5250a002da04198118db2a756962f1428b2117120a2dc798b683d4c71e3 *bb5d03c481846a5eacbffd23b24e34fec8221111dd9f8a959b5b12c2a8857acc344eeb359f23c2 *f379643706648c13c8ee231a83708bee3f067727e8e99cc2c001e5ecf2717f49ad03a781dc7137 *b1a325a941206fb55b735dd04ba4a77d3cec70e01b7a0a64e8b486e7871339dc29961278e0748b *6b1b4abba8ab0b38e9b6632504558c5397d5c3734706e7f19cdb95d7a822899ea29a3ae0a408ac *ebf77c138a0a241367f6c6734161b0a82d5491dc6f7427b9584fa75567a6e2b52e288b0a7f4283 *a14874df483d9d1a5f5817e0037b0b3aafa4e89fb9f2a23c45f50de6a3d9b63d49fa4c8a0ad135 *c61b22bbae7e57058daa682b7f8c5d4950e749e90008c9e941b23189adda0dd0df2dd5d8be2d4c *3ede46b60de7f8ff2a41ebb144342f8d47b70d0a5c3fbd87025e211998f162c10b1c2b10cbe3a7 *51ddbb2fc0a66fcd638636ac87443d9e569b33a64bfcabbb528419157acb3f0b4b066986d2b3c9 *7a04ffeb623f9d8e28f9f4b6ae576dbcd68021bacbaa6e38151668d237252bc0ee63027964ba6c *93e478acb676bba180dfc596843ce8386ac8ead536d3806f0557b57b5412dcc6a087fae510fd0e *b7f56646975d625a2dccd3d87c8f9cd0576d131f3a0cb1b36e7e8b8862ee1f985d02b17115be3e *e86947ea42b77406a4349a91bc3a9b8d389f4ec7b979514974a97fe7bdf2ecd5b8570f20e5816c *db5d31bbcd9b0a33cf7683ca5e711424e852b72eed9a496bb1e4d8cd872dc7447209d7f38262f7 *f15ed9b00b8f2e81c96943e29d8c3d8391051ebb40354ffd8a1ef775296839fabec176fea40c7f *a8ce77e58a8a4f106d0e1fa362ce3d470da7aee4b67a88f1dd6ac763a117161f02c58aae676ef6 *5ded82d22eb7db12ef565664b0c19b328babbcba849580bd795b37cb04330b7b061415acedafef *482b1c68e1b6aa3abcdacff42fb159e0df6675465908cc9c61ceff1d10e1f5adb64d2352996f2c *a04744f66e5afd8f4686058cb2207ea2a7c6eb8cf441d0e925d972bf4f822dbe3db1fda7cb8215 *02fcafe549c6305e6296af8d49612171abd6566e0262f94eae4f5b2a1134f7494c0dbe7eca99ab *91619870fc6e2a8d079cf19febe9342d5e31c48c51170d722ebe68d5268f80053ec2eba9c8ccfc *6c5089976650229e339db9111b09aec1d18c9b189932753626b4d3c9c54cb0c58e2ffdd5e7913d *36433bb005a93ebc4dac2ddd1bfb2dfde6eba7f0c798466c268dfefbf86996e8bce17de59a5c30 *a1e70e8925cf08ad00ac77b4ec2fa09b579b62515e944eb69f23180964e7bf6dcc5c5ed95a05a4 *7e7b79374871c993b15c3bde1f712ef9d4944668a476028856f5857f1fee81b99e8c57498bcd86 *5ad22720454ac5489d1cf3c7239d2782279cc30da7f4d9b89352447160cc304d39ebc72f3f9cbc *ca3e9cbc7bf5f2f5b30f6fde51c6d86c93713c6086e2b2b93be5e418cad545ee9980a8f0b476b0 *38b275d33ddd4d6a8c78835e49d18c1029054735a9303c29fd8ae4b4cf2311e844a1ef41d67849 *d3d8b1b57e9ae39516ebc71f9910e8aa2548d67983ce08dc6654ccb9aa2b97d164d8934e391a17 *85eb60e663108902ed898a8a047a7edc70fab4e163bb7a8f8740b3435edb21068ce35fa79be3b3 *b00430aeacd1187408d523a687e0b8dcd8402b6cdf33304a13d237b2be582f1fb04916c385c8d6 *eb7c104dee7c17e57d828fdd4ee2281b51385fb53caa2f8e569cb63a36938303eb6ca6a28be0a0 *33179db1277af440c7ebb2628e8016e86adfad1f48f19d99ae16a39d784134b1418dd3cc105a9d *541c9145ea929d894af0eca9c857871ca29b46e31583483da5f285b4d5b957a2b98f1985c924d3 *3fbd07e9376434348fb643c7333b6bcdb3972526474de63e1f3fcdd22c198e08cc88839dfbaa70 *db8fe8928dd7a5e4eec94c8622c3a701fc176936b437bd71c255b8acc0391dd79bcc8faccd5769 *4a84016fe007473c40ebb3a0e08a3a39c781851b9b9bf931e2d10cef85536ef2764cff3629c428 *c6f0949ed9003b8ad9f6f2c1d32767e68b09029375a137a7c7984b140171b8c1d522e334916b90 *de7a4adca9011cf716153b3030df85f42679fde643f2fcd9f7df271f7efff27df2c3eb176f9eff *f0eae4f5879317c9ab930fbf7ff3e22b92beba0e83f4332dd79304baab6c3c7516ee8b00a768dc *75da1fabede22d3bb00e06cd99d2ada7633fdaec26cdb074365aab1757c8f3eacd5986b4e3a828 *4243044d2fa3c5d5234de82435190030d3074c7cd566fc426ae1161fcf426f3d3ccb826bd2f290 *2f5493f7c0c67364e672b40f0669f13911e7b8ab7762b4aa00233c19bd7ba01ae8be2008ff5454 *ada9e31a5eb10b50e238534aa9ac234b9faf3777fb72cdb4dabbd1a72373493a5599ddec0a9c45 *38ebe17bd526b2a93d565f982bd9c1453f3993460f5bfcbf3e5799b951460879432cfe6ab6a8c4 *ea8690d58d1f6a91a96d973a0baf4cdf744a8dcc4fdd9364c2684d7fdd8a35aa2bca19a9af88c4 *4dd3b4f97efbb525a5e3b87d419b06897a8e1329b7434082e84d900628c73ea86ef815e804187e *054d07be9d3bc0369ae9cf887c9dd0523fcf2b49b631537d7c07a881f857621712934e1f9c62b8 *b56407a74d75164e08b79f4e47df4a45fbded9a311dbe61fa8b9b6daf4b77d4c6d658077b43d22 *4990dada7822fbad8f14c6a27aed540faceb5575d29035b3a816f5aeda623e9a8e289763a286be *f0f31e7b09b6e98d41b1b115ddd3299eebe0c17f20d32f17d14be3ad87c45f5bd2cbda6d2c4851 *b35dbe48dc76b60c5e04a060c6e9f4694470374940ffdaea4aab77e840b455b024b3c2062362c3 *72bdfae3d7b56e2df508f923efb6ab9e197bddd53b23315255747bfe67faf56fe9f7e8b7a30488 *677474f441ec70a3df4e9114471fdc93afb9cdb78fbfb54fa48d7b329527938979f2193ff9f6f1 *6378f20f239591f5bda93140c41947be03169257093c971cc85e4113cc8087ff55e943c918ef18 *0b469be0278a0c58e4c2eb31f8d25c9c7316a120f2648648cd66a74f457feabe12fcbdb2049c85 *17ab3bd5e7bac80bc77c60d2196a975ce4e48063ff727d3e677bd4dc7c6e1dcb6428234f819926 *63d5accfc9a42f36c8514633044fd32009117d6de046bd39e6e5e9f64cd6847302ba52ad63e5e3 *0c9287bb74e9cead48b6278e81a4aadd769dc4331bf1d5baa846530dc9abb125cdd4c8e0fd3abf *c6aac5ad7dcbc887c1d10eeff7f826b1e9d03881b567f682b9dad62808d0c79954164f6184d00f *6fb11334cacde7d2642ef57028e67e8309f44c201957779166260a7e3c3c952767a20aa11c5030 *48e9cd805c493cb305cd16b4e223a66147fc557e5a9b244232bc1e1173614b5492bcbce0f171a2 *b26acf71bdfca10409283b2fe3c737b0086bca25b61f352a4d203a08a4bd9e0ab2397264846f40 *34d3a04e6a19ad9f652b764dbdf5e9596a535987d4f074d81571a891ada0353c1bc683530d5a94 *c69ad0393e50e5cc5085691b898b31a324cbcb535408a35793a3e3ffc40b183619802631208b8e *4da30b4fbab6ee776a2e87c12d5e20de6d582a90dc87830373c03c707d8dd9e9375d9f03b1357c *a552d627d29a332ac23a63e97ae609f857d717212fa8093726274381d0f2a6044a3fdf231b074d *b45a9ed71fb547c1dcb6ee2218cff4affa3298415f92cf0e539c5386b9f37c710dbcf241f21ece *29982d29036afc1dc93aaff2cba219cce40f4a69c2ef5ef113a0089a39d4f54b72b78e2f55ca5a *e32046e6678074f388494e8c03519e97a726a7b939370c3409851a7818187f508a637b0bf2592e *bc619d53913249f9833e7e4e64935f1792afc6e617023ef0ecedcb24bfc94b2a1136507982008f *3ff22f98389802bbcc0f921775d14a5794a3b4be6cf235334164595aecf9c691161cc5d07c3633 *a43533b21d9c8983bec2aa442b0f80151d277f418339da44b067f1047aa344e50465351797eff6 *d383e4cf18ce6e33e816be70867307225806d49970216f026a4bae61e12aac749a4b208e47f37e *72259e5a3db8d4f374f1a1f35c222d4c16732ab8b9b537266578ced5ae4715e9d75facd333c945 *0ca32192c3c198048c74a5dcaf69af4d67b14c5161bd9e502cf7069b2527d54dd9d415d9fad23e *2f7090ae6aec275ef0aa90dab034dade4bce96ba164331b6c23bb19c3e2a9c226369e09c4e7567 *84f275978707e87184e038a8356aba3b3dc65d1b816b3cac981778b32756a4231fb01204cd5bf0 *b53c1da0c8a3837cdba05de7fd005195cb3118424489392ae269fa3b0c205834e579316876d50c *ffdc6c4314ec0b6a431b7d9aa8e6445e309e5bbcc141397eb7e5790942db1ed8d133b99f4321f2 *41c5e02e4173ca5095dc1a20443e34298ac919adb6bdd4f7b9d8d1a5a73165f53d472c30e52b65 *13d30c2fe58cc668f730b7882893ea6db15a4dfae66f2c77d829891bfd7b62af2001038eacfc14 *0bb245d2b2492d457bcd882e5253dedd86123cfc3f504b03040a00000000001742453a00000000 *00000000000000000b0015007365747570746f6f6c732f5554090003de028b490b038b49557804 *00e903e903504b030414000200080045545939c1a946d9e0060000111700001a00150073657475 *70746f6f6c732f617263686976655f7574696c2e70795554090003824a0349df028b4955780400 *e903e903bd58dd6fdb36107fd75fc1b9282cb5aa82ed31439fb616d84b1fb616281604162d5136 *1b89d448aa8e33ec7fdfdd91fab2e52e6db605689d88c7df7dffeee4d56af5c1c95a3a292cabb4 *61e2de195e38a976acd04da315e3a6d8cbcf024f1beeec6ab58aa268b3e175bdd9b0d7ec2662f0 *b3ea54cb8bbb4d105ea5c39307d956b29e3e71dcf44f4a51f1ae761bf8db09b34a3dd6076544a1 *774a3e88f22d6945d9de32ad36a5011dc64e304b09579c3647c0b88d22d9b4da381674a72ca84c *99b629b3fb0e5c8e2aa31bd6deed364658dd99020210ae09653b23464c2f5a4aebf0a2cd8431da *0cd23ff7cfdfe0e3282a6a6e2d3bf7219e0b26d7ded9d5ea27ddd5a55a3b36dc606e2f86b8bb63 *2b28e8102c360f586c4d9196d68d58efe1629061add13bf0cd5e79615640cab610ac1f4191eb8c *b2ecbde928af0c4e180688b28b505e82017674e107ad99273d4604c51b0873c81586301dec0846 *bf9efbe0731e32fafa9d56221addf9400a58de23e7cc69964fd07348a961864b2b589e9f073dcf *23c2ca4f8cc899b48cb3aa53545150207758f2eea021eebbae11cad96b10f095c15aeef6842315 *5c56bc463ba6498ad757eb5756b4dc7027ca24655c95888f313d5a271a826087bd308249475807 *0951df8a3e58a2cc18c3fcf579624d675d9f094789b55092657f61b42a3eec65b1670d3f221e8a *5a0816e3967e879082a8b57053aa8402266a8a17463ba798da3bd91294db734766a3d8d001a796 *151c2dea2caaeb1018208ca076d0642b61f53167ba2243c60e4ed1b68300ffd146cd4285a29084 *60d93126600661f15e409a090e85c06621c7a188a02664c56cd7b6b51465eac3088672a6b47a25 *9ad61d99157f74424166c1b4be08c0220939eaada7105ab9531c121082094533944cdc48d5f908 *0f9a87e281305324a932bd758bd5899602c291951aac73643551d048c37de6d11051fa604ca821 *a4666a021c1849d91efdec14300f9502faa03b284f34d0379f06ee43edbe8f20b7c4705429fe1e *f203e28afb3d876802760ce0beea0afe0f1e5a8f5b2660ea2f153bea6eea6d7dc4361bd331a583 *949c6f74d9d5626d41c1f90c000505a4ce71e58686c28a4cbd7584d608aeaccf479ecfc7125cc7 *4e1d1e8741018f7b300a658ab11ce2a54d294cd673147d22897a8b5032d8c6f4b4567b8b3db951 *af99e3f8c7e8f623793419ae8afb42b46e61e4ccd1214e50509d18ef010bcc453cd944e787be32 *1686daecfaea1d24958f73ac9c55ea357b6e57ec39ebdd1bae260b3365a09e6f9b2ae308093364 *05760d98299448df5ad4e644eb152fa8cd69207abbad67965fd17bfb85169e0c28e95b69a26d56 *28208cc7da66485d99b42036b8983c22e0abe7764107c6758c549278bb891d6147fbb33fb98ed7 *eb7412c6e4afa17ab7d0c6290242d7d1d8c24206330fbcbe5b3230ac1e804e5a6ef0feed704afd *40ad20a7153f1875d307e093962a26dd65720b6000fbb27c09d33465331150051233fc0af1c9d4 *b90234342055b30368ee9d408bcf90ab6459f0a4c862c24cc3f9fc4e48ac3f9a1b346d3efcfd19 *8d5b9a4664fe4cf874f98c979455a74e50044fbcf07b6e56e8f6886ae20b864fc48046dd54ec8b *5b5f60d0a7f66758f100ed4b6bde13fa30d8c96268ed52806e98db618e6e8f8015cea115079792 *3cc761f59b10e364e8975c38f30c0153f2bead394c6520773f17fc9a73be6bf65bc13833a65cb0 *60c037130286915eae16f9e001caa6d7f6bb6cdfce5445672309dd94aad2d8670f19fe56c32b4c *9c2cb61b1e6703b5cf249ec1bcc7f79b7e6fe55babebce89c04fa005f692b07d65991fb5a239eb *2ec0cda0428db328891b778277d759b6c63bc46f17fb2e7a0413cceaf785d7073ba423558f6408 *df094f208845b7852a47a7cfef3e3b19365fcd27e79b8087c57c7e1b22ad33dc71acb8cc085ec6 *b3023917264a6b850a68e9fab05d9f4b9dad4cc3f5ec60e0d521469d0be012ded9ea8b578b5a5b *e8ecc5d352d4e448b488f330dc9d71635823ff256e04b42bf897ed1ee863fbf0c37f4495c1ec8b *5419ce33cad3ff4492b38c83017afb092a6566c9bca8c236dc4bbce786be6ff9ea5d764aab856e *5a3496de4721c993bf41cf12e34e97db0b6e64c55e1f143853f3665b72f6022260af19be944f48 *135e95b83a3292859df5bb193b37a2d9fa570e0f797dca1e5e00468b9f6b6cb81336cf0532097c *1ec4668bfabf48e813465c24767c2b236647898bec4e0d6a9f42e473946536c76fd8162f810370 *b66cd6783eb2371869459b5cbe305a02ffdf5cbffafef6a2e845263c29b24d1f0c9fd0d87fd0b7 *8698c88f1f3fb20fbbfd45a4936e7ae3c14e3a6ae907bf71f2b542a57b55ece13dfeaab9ab64a5 *e143e9525c35fc4e94e233ab386097d1fc2d94be9d5c66ddbe7f06ea8da2f3f76c08e2e9bb647a *b2bba6277c0d387f03504b030414000200080045545939b03f0decb50800004118000015001500 *7365747570746f6f6c732f646570656e64732e70795554090003824a0349df028b4955780400e9 *03e903ad586d73dcb611fece5f819147051953173b19bb8d9a7347b1ceae5a59f2484ac6aeaae1 *e0485062c42358029474f9f5d95d8024c8bb53da99ea832402d8c5be3ebb8bbc512b9624796bda *4626092b56b56a0cbb95956c84518d0edc8a5eeb187763b6128dbe1365902329ac74349ffff931 *393eb958bcbf3abff81ab3cf5f93f7e79f3e9f9c2e8ee9e3f2fce78bf70bfaf7c3c5f9bf166796 *415668d39aa2d4b307d9e842551dbb4bd314a9f9c52ec6ec54292ddd57102489284b1077ceae03 *063ffc42fea72d1ac963c6f3a2ca9295cada923e6fa5715f49aa2a6d446570593e9946a466580b *6e82202d85d6ccf13a24ce7b7b7b47ac6e64838bba309219c5966d51664575cb54c30aa42f4bfc *12a44d532c4121550165402c329983898baa3049126a59e671255632468e521b99254ef3d88a19 *dfa995acc5ad9c731e1303fc11c63296f33355c93857cd4a18fa9f8e4487417fb4c899dd668566 *7882892a631bd7e16ea50c9d38ec89f1c751cfc73ed871c176169bb7cd1d4db8b1158d288179af *6ba7c098f7c81cc097271da724e1839468e9599264a04192ccda3a134686a54a45a9c368b83393 *a53d8abf82c163790b11868e2297458308e0d70b09e952d111568bf41e9cf5adef7a460e668fdf *3ab930143cfde8baffc11f8dbd8eefeb837dcdd93e23916674c9765e837a8eb627f034ec8ca6ee *6d5476b423554f34e36e8333dde6799116b232e59ab5f581510768d5bff9faf9176e3812138676 *26010acbff1ea90cb60c3b797e7cb7d756f7957aacf628923b7bbd9befb0a4a72366bf5bb54a82 *bfcc9db6498427445b9a79cfdf4f2350eaa334fd6d55bb5aca86a9bccb78993197b08c233b4015 *50833b9e5e205e4ad1a4778cd3cd1cd3c011ce183bc9c9e7b96aab2cee1d4dececaedd995ad7dc *49e6104c0e06e9cd3d960443ae52dda94d44618f42335dcbb4c80b99112df27f10652b592a2a14 *7029c1584636aba2820b1f0b73a75a33c4344136422012f6ca5d219721b8adcf516091a6aa2100 *05300592c0870d80de154418d73dad0b9610a1a15a47316bab520250171440d65a4eea21fbdbba *2e419dc10c33dfb3c1463efe01e89866bd8942795cc70522db50726c6abac0208f471b64889f87 *2c9fa525d4b47073df39d9093eda964fa9ac0d3b21832f9a463587bbc8a936f49b0f20e6965238 *12776c87d8dddf69e15becc1072b9b94dd8aa3a2c549aa3f8b6eded9f0c1bbcd6d3f78495de804 *2ab2964efc7848e9ad306d1a8863103a93b5ac3259a56b14c67160105f2e3377a1988f21d616be *3263b9d2b669fe3f72a1fd0688dd21e6505c77483a72da908a3bbdf001aaa3dc6a05af5af44526 *08a8b781aea88188ca6488bf3a0c0539bf16b2840c0c551d8be636e200be454300280520a2aab1 *c924912a86a44c2d7f95a9611c3f789fa6d4288aa611ebae39a48f610f6a6fb7f3f7a35f16c9d1 *c5c79f3f2dceae62b6f872b5383b5e1ce39265b65c1ba9c160c422e44b1ee365b3549106d66012 *507ece4a5985e33ddaac4d039bafecc12783aecb12508f1669f5f1ae28259efb1118791545d570 *86eebf86cd9b5146a9fadd7c24bb4747684d17f4c42f5fdfb097dee77737df7cf7e62d2cf9128d *18a0d82fe7ecfb60da6da97a3ef7cdb40928132df1f737eced9b37dfbf3ddd380bc00285a0f590 *4742441d6ed1a5ef5d2712be1e48d7143f367a82e187da330f72bb32bc916f1041ff68b5616571 *2f19870899f96411546c003aaa665d1b477503e2a88fbd5a3406c3c515350d45c5847cc6a391ab *f1d0a0237e0209adce6a5587af863c741d480c3d1c36534fd8f4cbf81ec48a80a4a872857f2692 *2227a7de1887916e3e1f4d5e635377e2dbbf9078d7bc1b45f8cde42470c7810affb9f1dd07f74c *14246c1085967e210af7de8b8a1bf20cdbc7c188edeb3dec5689da4d379153c0410b2a1cecfae9 *1ab869cdeafcadd7aba52a8736eee0f52406ba20f8802271371342d600a2614b860d8803d598f0 *d6b5548c5bceae87bbf0bb32b47acf2953d21602f904ddbf87d1d444417bd21f00110b17ee1d73 *dbdf0d0d933ba3fb030cda32c13aad63aff70b5ca6d106f03987b5e611fc31b4907dd7d347f2a8 *83793e0cb72497574e9eeb415eb04f4e19d01ca3812c13ec6c4d46420d013dbc1d4c265368f645 *16fe25a2abf47d51b395b82d52f62786553218235186d3a17bae98950a08f3681cd7fd75f649e2 *701b034c468c42a834bf49a87f54a29c5976b1b38f1d5bd9a56a550366844e95a87304974f32e5 *d133b0f902ec6698562b6928741fa93bc7dcd4f2aff0c5611abd130ff442e1aa6181d171184e21 *df051c062664a95e6bd701ea4dec47edd1749370b0cd4dbc193dd1b6ae02cc876d65e8dd746dff *dec42e8929635db92f2a18afc671914fe3a0eb9d7d3099bee950f5ee2e7009118dd0e5bfa10058 *19cac9c22104a66d47e42625e819facca5aec47631564297e938810fa7a06b59e278870e135376 *805248f1790da396ed8e88d1a843f23041383a8b2adbaf400b617b498f4dbee106b4d88a25761c *1d81a19511b90b0d4396b223695e340083022eb8ad7086c35b3db8eba55ab50e1360ac14ecb654 *4b5112648216a514c80382b33ad8cbe1ff3d468f3618a9d6ea90464b58baa70993260bab8caaca *35e397500417c9d9d1a705274c770b1f4fcf7f3a3a8531b1460600ac0db0ba93e93d4ebc74aec3 *7c648502a2705d330e77f3ae15441f6a374df6e08a5324d17749353aede3232e705b14d0d260e6 *94ca66adc06c4bd0006d525923a20d776327724a8aec095b5500d970746534836c944fa195cae5 *c9601ba0f9e195b766cd83ab7fa6d5d3f3a363c0e0b3cb2b587bfdca35b614a2b0d04da6817b2d *c4168dba3a507cc734e0359b03ef29405aee43cf0ddffa1af8de8c611656e6f35e7b745e887c3d *ed48a46ec5ea166d9d77e88e673077aab1bf1790d3a1c32b85c1c17506e90b8d0eb69321ff553c *081ed17b977784cde7104865c1ed2d2fd8972f5f00a479865e5f4a03a6a3271169d34836381d41 *b0420e1beaf629faf1010a6ac76c360bba17cc2990c5db1a273aed9ecea1faacd4830c371fc2a3 *adc7b63da32396fe0e504b030414000200080045545939cc40e5b7600300001709000018001500 *7365747570746f6f6c732f736974652d70617463682e70795554090003824a0349df028b495578 *0400e903e903a556518be336107ecfaf18b20f7638d7ec6edf0efc701c85ebcbf51e168e1282d1 *dae344c49684a4dc3694fef7ce48726c27d9a35043882dcdcc37df379ab15beca0ae5fb5f6f9e6 *e30ae89283d1d6833bbb82ef0bd08e7fa511fe100cbefdf9f2e58fafdf3ebd7c818a3750fd9056 *ab728f3ecfa6cd6c13c3757307e9e0ab5608da424e08a5e985efb41daa2a7b93ead7e70c846a41 *693f734a79dd406f77611d7b87ef584c0fa533bdf479a2e1d06c56c1c5c886ec2873e1bde58c8a *8c0dea2802daba11cd01b3e2ef7f221be75bde279f903ddd6e7b54f93cd998d5706ea58dfab055 *494f4a0c98d775277baceb18eec158a93cac1d0adb1ca4daaf8b84508cf1639ea411488f034835 *e63071268979afaa222899b280bc34d9f0d568e5a53a6140067794865d9b93b54849906b095ac1 *77a95afdc635b7c402f49be22d6cbcb6e70932e9430c49c2507ac6db2c721a6da8e89c10177e99 *50af451b628ca66547e0f5a0db538f79e62864b6597850d8e4f46ed0c8eee54006eea04f7d0ba2 *f127d1f767b0c8cee00f78611db16e02449092ff7e960e5faf16c5f1b2ba3c8d7c797bbe4dd079 *f21a0a08a586165d9364b8a340b16569774b64fcab41e3e1f720dc6fd66a7b0b32d6fb5ac1083e *f6e27ff4bb4be37febcc8c6f452e923c419d20ce923c69c438efc95a36bd76982f7da6322d4b64 *857438d7315f7f66362af38c1359906f0f31b7c4649d06c8d8c1e1c0b4eb02c6068fdb4745fd53 *879943f56d65e3f36d3e8823f2526c99edd3ae78da2c3b3cf5fe6e430a3f97cf5491c1c480ba6f *8d76d733abae71bf97caa1f559f1b889fd2d7e209b435c97d4dae429f9268e320299f951c847b8 *773d84916cd1a15f54948eceed6c9a06e1a4b0685b568e86489a1177e13f5423b73934c1d2dc41 *c0aea3092413a30b8f10a92d28bf0a2eaaa6f9b87d4c2d13016ac114f9c08745856f759ae4f41e *b99db1a902130b532833479951496da54c555126acd60479b7c91ee03b66c4e520a3a49db4ced3 *f93a3b0a9a85a10024b13d17e034eb876d7896e860afe180f6aaa7670cf9753492bbce8f99cd4f *2413fe79a663a4521883aabd1af2b7c3ee813d2201d1f1ec677aa9c24653a714f02a9ae32f6949 *fafb68713bbf2457c01278499a8eced374a842ed3fee488a31dc6a25f92387dfbf754d5f1aa18f *63dee3a74f3c48d8a785d5bf504b03041400020008001242453a10c3b4dd570a0000001a000012 *0015007365747570746f6f6c732f636c692e6578655554090003d3028b49df028b4955780400e9 *03e903ed590d6c53d715beb61fc1f9b557425b580043437fb636231455642460120c65a46008e9 *d612634cf202de1cdbb2ef035291cdd471c5d3aba5ac83aeeb8aa6b4dd564dd3344d90f257ea26 *d46ea42201a35a34a63568305e7026b281924081b773ee7b8e9dc7ba699a34ad13573a7ee7e7bb *e79e7bee79f7debc3cf37c1731114238204521e430519b9dfceb16012a9973b4841ccc3f35f7b0 *a1fed4dc8ddbbd615b3014d816f2b4d99a3d7e7f80dab6f2b690e0b779fdb615eb1a6c6d8116be *a2b8b8a05cf3e17410526f984256a7de7564fc0e128ba9d0605c4c4a403003190909de074f2b90 *4d8bceaaea316e83163f6b5b54e1aa8fb079b10e88c51fab0ab1e64ec249c83913f9afb70acaef *a2f01c29d2022ac99d04c944bea5a2c5433dc02fd014386772df641c6423511152814ea2811157 *7a17ce5eb1351ccea4e9f3163982febcaa3f961ba716dbfd778f4beeb52f746b142f45871f145d *e392c35c795e146e49a472542235df87b5dd595713874768d3097cc3525c39be8b9567c58de59c *4c0b09898e1be80bb1042dd14ccae9630a3471400237ae7171d8d5cb919a7de082f6eefc46cd0f *903938d9da553305b59b6a66c143f8101c619d558e8a14c6b06a637c1bc6f88566524ea75faf79 *15c0e933daa88731387105e0070b08898d5a3a77401072733e21433ee00056883e130c73bc40f5 *b92096b0746ec89a95d343cb54094739c27cd603fe65c00fcdcfe2b2a385d0520896780f26327e *fc112d9f0dd1e1724013ab9dc8b771b8614efe04224d39c619d0310efdadddc466c79c72763bfa *2b8a3baec3c37c98a83227d742d76e2b4830fbe7deb2025a9a5eb61ec4b39698047ea23707e91c *064078379a24fb02912b97c761ea2a367a334167e9314ec49c034c9c3e4ce4630c8cee45ab7c67 *2af8bd3822bf844aec63eecec4d3cd02859e47f320017d720340c4b272f9ab0524d7b915213b27 *02187a369ba0f727eacd0cf3c63c2ad34b01237f744751bae2071f9e643766edefe4daa5e205a0 *132fb9940b183fc8e519b90b9a5acf92a30883879a9e082d9ab063684d10da61f4dddf07d06f3e *0b8b5524096671ecd611acdd5f93bffd6aec4cbc5d49413f0c31be629909fb95e2741d2349324f *ecad3d82911cc39faa1b1d4f46aa673709a6e5e9d9c0cc13a6c5fabf9b9f3436d5ae8ef57f6f0c *99f41486b7f470b3f71a6bebaa3edb7d4a879997ac3510c931123d59b469b3db859161605608c2 *8c258ec1a00b9c0fc4f291198baa484cb2c33a364a9766a2c57a82a7dc6ac63582c279005da00a *f3202e2a97dfd0fa02dbcd584e1c88f3e39b36bbb47cec19ae87b12025f1cd064bcffd9d67e9b4 *c8cdaf095cb24e69b2f498eaf6f6762684bfc46303b7e04d873a06ee36e38a80bbc33873dc3190 *19ef63a8a848c70011f223efa1b9492846f54cc8f5d08f30bfffc8d101e6a869c2112e27cc3b02 *bec44f272d54d38c3b91254d42de1af8a533b4087aab067616274d8429b9aadfefb8065960873e *6c2b7787193ff0d167a0805ab64c556b7a3700f69cc43c649683154a99e4324f1e7f35261e9746 *2c2a97ff9ac74a44fc232bf494435697ac28c5365aa971449c9936d4594eb07ada07e058421861 *29755ced4cd0e9961309b4bcc02c7455b44326c2f29842a726f39a56ae136e24f3c84aa9b14832 *da45237a5bf462a4e32a11a688a7d37cc66d8de636b284086f4345a5d70006aa7355fa5560e609 *5f1e4b619d085f42ef967d094b4f4274c849c7557246c9190a1d5b3ab7c03c2d3d8eab7bf3560e *6d043e7ab22c271f7b861f37b2d234e3052c7e40becdd68cc3ad0f9abc304fadb4c90b46672855 *d7c2a591a515d4220ec094d6568d84a780285c03217e8879199b9c63aee489707328b5a284f306 *69452b30e6607b724549c1c48b8125f52687351f1d5784e9787a60180b60f348c3da0e7d88111e *92615933f12284ed07d0cb90c445af052efede65c0acaa1a0b5b22cb082d882c2ba05322cb8a85 *e1e454cdc1fb56f07a0477905bd77e66f961afe595c4e25e3a3f1543e3437383eda9d83070747b *c09f8a8d0057c1efe293b1ebc041b15f544b9c8bc7ae601142003f414dec0ff01b8fc99a55da8f *b264447b2bbe1e2958d35913da156c76a538bb629cdd656d8be0d42dc2c44661bbdd66cc496c10 *dd5697cb850096f633c928fe36dac7b1737dc9218477ccd1dc73bfc18e8337016402c84ad5bcfb *82161dd84e666c6a77c1dc3103cb52edf8f36c47c1bcfb728a5dada31d5642bf22a981b0370e93 *85497f0f12a915cd53389f1ae89e9ea905b9b1dc2ceece16d41ec0c6f9eb99128417b2547ec2c4 *0ea3a74c5a256206a6e105456267d586db58b5a59b5cbd56d2c55ae361dc0858ef163ce96ee176 *f93bfc7993b98a3bdec18e3f35b1bd31765ec81b3a001dea2c3d85911b3678632237f22dfb7af3 *4fbf6310ae446ecca34b51bd3f5179160dfb7b63a7697dee79d7d94fab339d7351c29fd3e5787e *a9b679ccd6d9af9ad2e8b755f5923b68da2a8e02de540daade6ad0245818c399041135e851c739 *c351389509e52cef360e40368ae0d206bb29e60527f73e241f4e17c975abbf0fc74fbfde35d11a *8f3817e0719a2e55c797d6739221fa81d9f022def7f7dc406be88aab6f022f5e3affa7aca89ebf *e66e1bdc27a28b097d40b14ad35188d772d206ee2d64636785a1febeec790f4bc1750f96418771 *853e164b887d749a38aadda794d203685a238cc22c9d33a1446e8e29ca739b5c7d958968cd4530 *9174815d2a8b210bcb753d7d62f27dacdb86f7964bb0a372ae3e71d4c52e706fa1321d8578d78b *17607635f82758c8ba67089fd17cf2043ed3438f7d00bc38287e2c99253ba70c025e997fdd6987 *5acadc9f95f9b24ebea8934774f2b04ec62b4eaefca04e2ed2c9769d6cd5c98fea64a293cd3a99 *d3c9d53ad9a6931fd7c98b74f2629dbc5d27d7ebe4169dfc2d9decd4c91b75f2169ddc345956f0 *ab46f679af4d6e77e545f74d60b8cc7e2f49ffc7ad4efd481708f27edbfc70017968ee84aed5eb *6fb139dbf12663833b4cb3403d5b7d3c43d505045f8b0d416800d5bd447e41db4667967fba8190 *8b20077374af818eac27e4788eee24e8ead77fbecf20d87603ed05ea027a2d07fb36f007814e02 *9d03ba08741dc8bc819052a032a047811601d9819c404d40db8128506443d6d7cbc0bf01f44ba0 *04d000d030da21bed286ffcd78f288bbd91708f3847dc675e3ebb303f9af1337be83b0fdba43bc *a785ac21ee70d0b3d38fc64788dbbd8da76d1eafdf13da1626952007dd6e3708cdd877615666be *aa5599f7eff086027e4296aa722b7e7b573f79bbdd619eba3dc1a09bb60799ae1de2e27779f193 *3419226e6f602b21730cee36cf77f8a0876e279b0dee805f03741ab0bbeaed15e0833e2f652068 *65460fcdf8996b6cf6f87c01166395b13518f2fa692bf0cf1bbd61985c330edc650c7bb7f93d3e *c4fc9838a0a7331468e6d947ea4fc8ca10cfd77bb7863ca1763c8bc82a9ed605dada3cfe967aaf *9f5f0eba670ca07b26d022f8f8955e1fbfd6d3c6d4645d56ff34c07da88da0ae817a425408aef6 *b706105868ac0f785ab4311cbb58df4f8d0d3c6df46f67fd5a1cbb9af920f506fce09ff221ed7f *067a6a0bef680ed18a161fcca4d4f99f53aebf479dff9cd63836ac75d43fb95045ff7bedef504b *03041400020008006caa373a1b7c493a761f000099730000120015007365747570746f6f6c732f *646973742e70795554090003cc967a49df028b4955780400e903e903e53ddb6ee34696effa0a8e *8206a536ad4e63817d3056b368cca46783c5248d24989d8161109458921953248745b5ad09f2ef *7b6e752565abd3990916eb876e5bac2a9e3ab73ab73acaf3a2aef33c5927b7e91f2b3df4d5e638 *546d93decd66bbbe3d24257c089fd47ab56d7b955487aeed87c41f9a143ac9fd0f78a256c3b11b *da166696aa534da9cde4efd4df8f55af46c3b6ede15034e5aa6af4005099e1f2e7d9e11a413483 *e98f9756ceeb6a13ad8e1fc51b567ddff6dadf327dfe6d879bfc0a1f66eed30f7531ecdafe409f *5fb8d2f708214f30e05b98b3a47bd8e7bdd2edb1df2af8332484ff37fe163c3f9466bd369858b7 *fbd9ac54bb24dfab213f365d316cef55b9d8d67a79334be0673e9f7fe8db416d87a4d817889ba4 *57d734ae6af6c970afdc7249b58387755b94aa9cd1ec77b56e13d5e823800d638b2169daa48549 *bd374b3d0d3004f9e6d0360fea2440846bd372bbaad7c3cac045ff3fde57b54a00de559e1fdaf2 *58ab3c5f0101fb413f56c3fd2275084c654bf8b3457cae65dea6d04ae7393d842d34edf0dc8216 *247fbdbea8b44ade69ad7acb0b0bfb9400761bbe07f928ea5e15e529d928d52466c79b53f2aa9f *27aff0f576f2927eeb611b7d430f66816cc12e22e2058f97b39906e952cd56c14840450d9c52a3 *4810dd61c2f62167de2836b55a30eb14c300acfcb1a88f4a3639f427b75bd5c15a0137aebe6a60 *c487b66a865557f45a2dd2a7757ac52bd87905e18710acba15d0bd2f789fea69abba2159fc70ea *14cbd15f7026fffa6ee0dd983f03248f6830214b11215ef5c9e1087cbc31ca0b379ea44cec1bdc *ba4e13c420f0f7620fb0beea97f3608957c98230146d0f704d48e56de6bc448ec83e8b5660e3bf *a8beda9d583ae85152017b18007076d2f6c9376da30ccf07b4109ca6e9ea47c0fe8217ffdd9afe *ff4d715b08ec3bd98a76c87c06818e291bdd5d8ab6a63828dd15c0e2f0cf43b1076553c0d10433 *aad220ed1c516238406527f06a3806f88d0e07a21a70d60a4438dfb60d28ae41e7306501533c74 *7d02ca683b8140e3baa869515732536ae400bb3584709e5c8d5719a141b409c0160c5efa5b4a57 *29ee15c684e08314c3e640ce6100b3160c59e9aeae86057cb4bcbdb97e7bb70ca6c06a320bf134 *46a0f909ce9fd563d1376394186e025928d5b686654b342b0abb35bbd92c01bc253c14de7b339f *5e2b01cd077a1eb0dbf7789a0df7301e60a4f361d59de619e220931d8cd608589335d7a5dcc9a3 *41579291931c8aae43c986d7070c1a4835d2f821fb6891b8aa0675d08b88c5888b433d4ccad7bc *eb80ecb9f8b85c7eaa22f805929f86db4c3d3d50565b64eca23fc171dd6ac55b62190da93537aa *02b68f9bd3befa10b940dc11e292ae6f7f0452bef9a87a321fa2b53c2424ba53db6a57c1c0d53c *d0d781c6de8099f0c9aafa87fe083cf8bea835fcf76586a0bf35340589a035799de477eb58247e *915ec52555219c718956759c1b30c6853b3506b1ccd57c3e3109fcf5886293dc7c219f12082ff3 *eae71e4b72b20a8bf91c1631d08b0c37cd618e10d33450682ae51dda4a97eb106f0e6a10a401a1 *106d97499c3f6f9ee5b0c6c2e313c1b7a710928bb854057a71501a4ed823e8aab3fb9243b4d2c4 *556095321419d9e044868bc83b77af1a51761ec024e7455e1643f10bcc304f77b5bbf0f0498636 *d9d7ed86359527f2a3cde122cb4f55ee634c3d64b0c1e54db201d7e121188b944f60951e947df0 *40e86ac5687c18878b29d0629119438ec7ec426943d45ecda775bf39f84648b49adec9dffcb1aa *cb6dd197e81bc1be1acdcf80b4600c681dc41b228fc79234b0aad0794bf4b1232f1829b053c580 *7e6996202fc17f45535ad8905bd885fd81ec0460850684f01ee9502646fe01e434f4ba5741c884 *b889e56bb703c5517d54f52929ca529373bb6bebba7d449434ea3169298a50d409b8c08f2decbc *e8f74756ac8023f66317cbf486c14ad2582da7c9f575a0ddacdfe76938d6522722032b338b72d9 *94f8e9c6f9b6f8b3dafff11e3c5679b92a33e462de4c7f28dc6a47cdfe6c1aea215905f6b142d4 *2ab008aaba2657ccace878e938b4b064b5858f4ffc5a7c912111996f320716fb7a979cda232ca7 *ef115ff07ea70a8de54c3b43ab0305abf8585435b97eb0830fa70f5fd3d1fd58802e47c1065ae1 *823daed423f91d5c353264019aa76c1f1b0c772475bb2d104b19c1b0055e01220331d25dd594e0 *6c340f401e26302e0edbb0aba5b760969e72d9ca1d789e8a2406a946ef173aa55a7860b5ddedd3 *6457a1238f2c0b8b39d85cb48311ab1116c41aca1850e4516d001dc68b20c0182b1ae0d7a4ff1c *68fee9bc326c179b79c4741352ced20d9bb07c3de7a9f3180380aa4a86786f5ce8254376d41c68 *42c3915700826d8f60c925ef610feaa9386050c32e8786fd8d9112ab0603137c4d002f7af5fd0f *18e79c97ed9644f8f7eb2f57ff068ec01c9f28806a0e1e8e73961a9805643f2721886ab3596058 *a0dbc7aa54a438f0f52ef65474c5a6023fea946c897bf97d737664aa81176a6a0c0eb11cc15160 *4044927b04623089a7236140f09075cde75ab849a487b06a17fa0a58f06b09b2224f21a21429e5 *465946642466b4327951ba6b0125de32d394d46319a7c34da91280357c65d4f1798e12f9b1c786 *17da5bbde7d9a905a5dda0d0008f24f288dd0df01fdbde88d788824457c4fe467954dfd6470034 *215e93dfd15a814f1ac63003a651158266b8969d241ce4060d5cc121e37004e815d5c33cd0b280 *024793ebac4f20a80780fb2bf3b29dbf81f650c179e85880e2ca4836424622716d8205a723de58 *f7d28b371561d4df340cd5ad5dcea8af2d5805645ad54305d215cee09722d01a6861d61f7aa556 *7621c1ba504bdfb7c7ba44166043fac309e4194e11c0cec04673664c15235b48f793931936c5e9 *a5e9759a2c0e5573040da1ab7de3d3988937493477d05585f030e10ab5a0323484c5afd152b8fe *6b4a08933fdbe3009f647808c19e527858694fe1f0360d4b09bd00acffb95714eb2ecc677c6819 *260242a85d0128ce02a97e9459480be259b412301ede121afab6e6e085a582bf91cc87ac54c08f *80297e190e356461f10010bf578a916a242861fb0a8f8743dbfb72c0273c60c9caac33c2496a7d *44146455256ca103e4fdb1a135e95df82835603b9ef1b5168c076274cc272646436ba65960068c *744b286a06a6d287c7cc8197b01922d60b92c7b275e1f0f868b8f728620f27fbb14141048baf3b *a5010568455a2b4365ce4b3a92b428be0e4d8d90027124291a5c080f06324354a37a94441f9f16 *ffbe6f735e6f9eb7b7d188a04f9ddaecc9a5d16242e17f68c2903d4cc36d18069578e3a1d71859 *23727a1061e2c3bed3bd4b6c932328cb3e49e773106f9ca80edde034803887995802bc842124f8 *c13d655090c5002c05c6ecc9804426aa399a9cd4b680e893ac6338539cf8ad990ab4fca3dbf9ae *0510ad3da23c0b935679c3bb191f7645ddc20c72403cceb59633729b0b95882589c14e6f3000f2 *4d8b92849cc5ef895443af76a09bc0dc0ff492895123b59bb6b936bca08f9bb2c23868dbe3e984 *6f23200b321388f4e99bd497018cbca207a5ba0218b2ed01a2c59f1c2081ad0e6f05020c0498b3 *c2251f7aed2179b887e903cae1501dd44a8cadaf1db9c4564482838b249e11d9202057aca90acc *31226769a43a981e38f2002ab42db58de8837456dd1120f09396d64fd3164f7896784625ab2bd1 *d8e0b4cc8c5a49e55481cfccbbccd983a7c5fe9ee24a64aa5ec3c6f1f84587006602e6c18c12bf *cb1cd7e29994746081d5d47e74a98ccc2401329729156f15360e28c273606608eeefcbb8584820 *e38f79071482c2d6861c2dbb6a8f1f1b751598464642ece985ef57b189e272b3f44b2e29c99c12 *f26b4a62f1138ccfd0c3fc506914a81cfd443c63165ad53b8ed1682f22f245f2be78806d74c088 *bd229452d8cdc0450a8ab0c8caba4185cebc089ad6a28897faf0df7fbafefa9bf7dfb2c5fd785f *6def9343854443c7f0a42876b13956f58086ea602200b08cd2f7de3a146102dbc0e9bc2fe26c11 *ed03a99aa28e484d66c47d2c6e77f8e46c08067f400a46e9575dec548e6f5800cd28f8a86ff98d *77cbe50a9544bf7091212147b80448d60312020edbd5e694c35b567b352ce0ff205fc4b515946a *217a1223047931908782a26da9c1731a85b668686ea228937b9187fe760ca6ee96618c0b196615 *b31a557d5856cb81b5aa21cf139fbbd608be07d97df15105e1425806f6836365dadc7f3a5fc6b4 *1e2d703386335affa79f67c163719b726bf3837b7a170ef11ec5b371d3399f55e37967c48d05cd *63ea3fa39c61c546f2a8684b744eaafd5e8bcb46a60a7a3a1d30669272c2dcc70533b7c7231378 *b0ced189c32300304d5b756db748e3a760f3dd46c9c6897c2e116962eee40b97638849b193ade9 *05d5a64552288118453d51e6889f85b78368198f65516329ca2f876c8fe1db3037e0c516793973 *fea5d3a1e2805955b742f95f8e23beb0d6685846b260870601d595911e9e11314c18ef26bc1805 *b01289cd9205ec27430323dbd56d312c23a8be48be472ddda9167d4d305b29070bca7b405e9c1b *45d11c0f1bd563fc086dd8010f7b187333a10d620880bbb4ec78f46ce99f48981a914319d98437 *e441cbe550402eedb9e53b0085e6a27131e5559adc002b730d1e1f56ed04383ef76a1fcf81f84f *f023887e03eef53f9cfaf074be1410f1eb3dcd284373242b1f2048e4887560037f609bce1a0fe4 *c190dde045824c8ca630d9641a166e9fc048d11aced32b7cbc92f37c018e7d96e6a947909184b1 *1e36621542f81d88528d8653afae391ae207a17c20c8730ea4cff85ede219825e31c6520c47c12 *36fe9c55cf302ce2528a38d7697790593fa15f4f291597410c09eebf14ec46ca6cf988339c201c *18f371c87cd3a33f89f5008e1cfd92a2c645748e28f6d9f09fa9fe385db70667f945c526dbb109 *bee9138a6bdc6cb2e2790a2da7a6625660b1147635a048caf12c7b3bee0e19fb3d0ea338f27e6f *ce6044234dc484a7c7da410e985c8c4389da8f8804f3737aa7ea67518630acff089738573ceb27 *2e8c00f99f8d6c3e0b484eae1b9c283fa57adb57dd9017fd5ea737b7a93f3fbdfb7939b61b8da6 *4477858d9d45380af94f2c40b46085a9730af987eb87f31e14d5358e6b91fc2c4e061602b02aac *d6d31ff0443de5c7bec63ff04d0790a3341baf11cc22bf3dbf6ff5e0594e6169964d1483b55f51 *6241afe0f7519a58381a87890781fbb8992c822a554d0bddc2e83b3a774bb0a70772f7d1c8e3ca *5ca034bac93a169a49336afc2263ce4d0ebfbdb99b823ec893c96ea7b76056a76df8d3ee6edfde *4979da32b9e271a315c6b390e06caca5591219864e7c7cae594cd6b36598aed5ebdbf9d3fcceea *74a4f7ba058139f6f05b66fce59c795eafa97468b45c513f16272c2fec4e6b292b621561223627 *f25c60b9b2a2da5519355ae8d8edfba2348f39986f1c2b7e37b00ca86012dc3515323dc38c8089 *1597725b3ba35c4c79629e96c112eb43191ffeb4928f51d4789e49f2fc5932b6c8de956562c2f6 *6fbc80bd0deadb748dcd459ad56ca8027ff66de83635ad61e346ed0bccde233c2b244c7ca2917e *b741fe263c2fa7eb3bdcb929e31667ce2b934fa0d4493118c330164f33ccec71a2ee5201e3c196 *cc48fabbea82b0a897f6425aac933459489662998e4fba271cb54ed329a14675645e2561a37c73 *ca65b5293de696cc1c00fc4b260f66a349fb76051e036899c582acca6bb62ab38485c444ef92f4 *8af67bc5eb2d972f2e843c14ad25026cd7629826d66adadb680dd4343e7cb3d03b77fc4e1cbb0e *38c8fb1878f46a6a46b89acfaff15af08c3f6ddad9f8c7f905235f6252f0de48b4d27943943e66 *4bdccf80261b353c2aaee1380462f745f21eef7564c9ae2ef694cba4e87f83aaad4c48769205e7 *728e1414affa60e5e5e74aa2795584a84ae726da49a239b222cd3c78ebc282ab5d54ec39e69fe0 *fe7878d54476f80b9ae3edd2c7e90f582f03271355b8204261fb03e67a394adaee76d79bd3b5c0 *e3c8470681b70c185044973dd75fcbbd25538c734a7b65bc2c0a2f539514634296fc5ce2882279 *9e32e791698e5c3c433e0d9d5f2e3d71403bd238e764bb8aad2e9f451182fab8df13debd42b1f1 *0a4bdf6e876d9ac881c10b1c9334702a181c8eb895a9779fe9669974449a8df7f5193ed134ac6c *1b700e67ed7ca6a9cd9a712f9629467eed4b54f3223f3de0c28c1da9bacf43e698a1c5213406fb *33d416c32bc61259744b6bbf9bba2653a1f3a8522972eb8f4de357e84c9344e0f149327b16b153 *e88ace0f5f9e6c482903a6198e51dce67b65f54f2ae51124343cd6179220722921af387c45fac0 *bcc777b5c7aae34ca4eb3bdef15bcfa8f2eb36b2e44ba2e193f93345859fe267c7e6a1691f9b89 *78d7fe52c83d90cd3930c2620c2ed56a79886b774194ae94dc5370e846319db14a5dafbf8c9236 *623d063afb96f8e6ac2519550c7b1765475e142f7f95cc11d7e64891041d1e3c4faea247e236b6 *803328db5f4e674b04d0b367eb0b67aa470fa6c3ebd77186521c11b6578676a2b2acb004212f3d *aaf275b40932d0a451cc31b6e84e7229555ccd652af94ecc1da74fa99f709f4873a76e7eea82b4 *1905f119cf8458be9bea2fd4dba213f8f90397aad527c9c373029c4b16a5c2da9763d49ef65dae *0837b81d42b950ba9daa5d2d2f86baa84ea32c83ca6d2c0ec034be5c250e8acfe525545a51d1aa *05e6b949a745d5b94d921a9ecfff6ad2f8995f86656bbd46355ef655523f242830b51f52d789e6 *7e400e8e3b7698bba29d79a505588bd51a729b8f776dbbfe69be29faf90dfcfb8ff9cf9e0f46ef *82a38782f06835f354bb2598bb88e66692eb96a2e0c64b7d3625982b8f401a2ca2e03a1870931d *11eb765f6d49f2a46cd363fba98b0d9c0a9bb6e8c4218b02b61e35d2ab0776b94626b78cb899f2 *570963f1fd8791a1e084ddbced50e9ed02c0f644dd588d92ad6500e58f58fb9e2bd6e0020953b0 *41772cfd42a9401b77bb274c83f393ab74958ef4b479c1f99432e57c475bed88289d3533cce049 *df1b2f70fec7ef4d8d9049ec77fef5778034c4f0ddf84c714a660a5afbf03278edf07f26c440a7 *6740f69e5e04b337fe2cd064704d414e19b117c0b77c3aba86fc1ca3922132f498f8d8d9508665 *7133c91c28650bbe22aa3549303cc3ab81fc3b349075ec1f4054a032e5e075ebb54104ae106f7f *2cc0625551c472227661f64692ed8c4fffc69760e5bf58f1f9e55c3bb918f8868e23290d90580e *1e26a21a5965f6910f3779b7cd5cc4f98c0be2aff48d89cb8f2ed8cbc1992ccc25d020d9341dd0 *1da589daba8c157218f3b8204ff4a91bfa0658ec08c7516029c92ee9deba5f1839bab88e104fd5 *2179e88721bf02f2118cabf90d1b1486087084e2cbf0ac074ec0e8089695cb91f246d8697e067a *5533fcb1ae89909fdde2f9c935adf80b2646ea928d35f8d3bf647fe7c7cf8383ed22f67766c82f *60ffdf98ffff7fb2fd545955cc3e112a88ebfecf48887e717b00fbd5584224b51fca080cbd1b9b *77cf787262d6b133677b37fdebdc3989aaa34717d4ae5eecd3d90b44de0d008d89def0decac80c *b0f5cc142a46b7423c1e19907a170046172ccf5bbf5cac8ecda0c48fff547792e6b13b49379e7e *4d7f525944d1da9fed541a9cfe564ea5336602a7d27cfc4b9c4a1b46ff159c4a47ca5fd1a93499 *b9b15369403fef54ca889ba9f4e6a73a9581e9193a9579246b3ab0d67d0534d6d356c27e85b3d4 *ba92975b94f6f5e70e566c2721be4fb0c7ccea86e5749a31ac7bc474bf108e1ef45c5611dc0310 *d5fc6cc29ff2531d176afa4599b8d82579575ba0f4c9595637d37f3a91ec544f1d41d49c403156 *85af980db46b82f7f6cb3befea398d342f1b5537c973afb049fae3b9d4920c890ed77e9bd1037c *270f7039a5b882281ec0dbe2d290441558aa464b6de9e633ed9274790b6cfbbb50f6a4c7e17dad *9ec2e26edcf7cd5b4c48d04329eca17533f4faa2d29411c2bc9b59f0c9a8daf642b6f3c926a672 *7863c7740b8023511f0f741f0b8f6e691ae36c012f95939b5c8ea56098a1b2b9294f19189566a7 *67a99dc46fd6b97d599a45f71a1caf47ec625e759b52f51dd542cdfdfa65ec89c5888833b284d5 *67eb27c545bff568211fd1e4b3850784914389af3f57bceaa2194592fe04836f929f60e80d1c84 *3fff9c527b1cbc7c05b490cd5cfbc5d80e9e6ffd0be5729d8eaec171daa16cc57ce49385ba28a8 *82ec84f4fa3a0d2fed9a0bca65a1ef61b5bea0523a609286ef356aecd1a9ddd57c29942e5ba531 *838785eedebd55cb3ac942adf62b7cdfdf8f951ad2a55c4983ad9209c1b927cf9872b7048d4a93 *3e04949ee7aa49b9cec84d033076645a1638e3cc3f88ddb521be72129ccc80fd8c0a2e6d1ed3c9 *14bede9dd6a3ca4618912d50f3c06696b6c6717abc09d6f55b6ca21532e9741d1112a46a8e6a36 *5504c80584aef03c4fb3f43a5d4ebe13a01be5c23c796e373f4e09337c8ce2ba9c9c0647837f66 *4c55973d336d75eca80cccd30af0b62cf59749b39f7e5e4eaf4275186a9f752d07a565d149ab2a *8ed3b57abd46493b3b48f0bb86559f1d8348a5db80cf0d1af7397ade027bb619ebfc7bea4180c2 *86960e55c5b454de8226f97c82f6e42f13f5df4ebf0b9e05971a8383126bd64db50f0a09d0e316 *30834a16e68d9462e9a9c07381d3b11afc5ba530f7076aeb25174cb45cd504ee6320de14bd7dd8 *8f520554df1431c6895e0ca3c3e9fcee89e0fdf935784054b8f2344c05d3a71609af1fc1e08c4c *d7093ee6f090d4ccefb0b413465f60d79387468357a3c80c1d8507b5c266d6dc1d98414d9767d7 *c1ff6e6faefffd6e02175c17f845625ab154d809a3c7ebc4187c0bfb2187e87ea6f773d41b1a8f *4b7a354f5e45bd8483b6dd533f6cbe48b708db6aeb1d5d2656c34b6d555c1e9fca25d8ef7b8366 *9469191db46be13624c19dfb71a4c51e15a9578660ba61dd83819925f74750ca0966b549f0bd71 *51d38ecc4fa0bbfe3b0d17be8147ae354b1959b5bcc2bdaa3bfbc41ec529b26459f4254182d788 *a9e0dabf7f3ddd0c4492f15e1b0faf55d5b96631dfa2b9f158e9f11bd0f49e25a36e36d4aa9b0a *472430578437d7bc3e28bc4dea8e55ed3ca01abe2e6097342f757d22070964989d197f130d172a *6172964b6af7f82cbe1c26b8d303c909374c60d438f846383a0709fa131e20a67efa2c1c419192 *b0b53466a1ba4769cb321bb927dc9fc5f27280e33e6c3563ac373218dd4a3baee43f070c573d71 *cf5cdbf92568cde05d12b045f1a96d47a4e87a8be15b6672d38dc6dd0f890b3b2f247884e6f8a6 *f345edeb404152984ee63810b887197719a238a3df04c8dce19f903b6cf0c1b0ea40f2a9f70845 *4360c49f8b132f6a8cfcf43bd3fd4cda4c05eff79a47614c50991a69c71a6197060f25386c8488 *b84ba920c175b5a3ddca3b66e1adad912e9ec0c56b10e4d73e46d84599c5b5b4c9eb4abff6cae0 *681deba82052f70d1c36e54a9a26da47ea0923b21eb15a1b7e25a87d923226e7dbbed57a7b1ce6 *d4d2c6c19f71eac4eb4b82bc26ee363716024e3200d35a8c186d0bcbcd2038b0c6c510beb31470 *bb8e389bfb4e4408c08047d0b4c670d002ddb29b71b71c6c7267cf71cd7138c296e90d83423a0b *2e1ab98696a621a26d0d99ec8e0df70e240eaf868a3b607057386be1f2becc654ae2362bdbe3de *93780cebe223129c1b644a98d997bd714ec24b289e6b9762e01ff3997f2e7a0dbcf06624c690b9 *8da684b6777e72e5d41e7dad8bc288f0da4649986529e6d97c33bf4b39c28d37dfac20a58540bb *4959a8223976cd59ce88327528ef8087babe2a6c9fa6777663445f134f00d6c48ee403f5d84b6d *a780ccea013a715d3222264d78ea73db40706e0aea343a21f80d91f9b138b1774f8102d26a2425 *268961d21a5e43304414b783a33680ed636342f978056ce6536e3875468481a7b99fee180e6635 *bce4669a895a62cfbcb07be9b5272bdbad517fa6e3cbc7a2afdaa3b6fc449915d3b60c0f4038d4 *78abef34f661b41493097c8c5264d2801f6795c2ae7775dbb2372ab9bfd0dc24c6b1b643f82525 *7e0b1289337a73b3c41cb9e6a69eb572a21b826679b9bc171fa1ebc5321306a55f5fbff6be62c3 *8fa8c8d54c6704af93a90a5e1a6660a3160afc6b38c099646b077838c45ebb5bdb2d9ce91f116f *29c30630991cb7f1a599896629a3f9b397fbab846b120b5113b1d1d80854eac63c736559d676c0 *2ae9db17168af23bbcd89d8f15d5df4841ffedd858c23002e885b358441ee06ed111c62877b296 *5fb21839c1d3595c04d7537e40782a4e56c964538533dab379c0d37f79f6ca7430c44a0ad2a774 *feab098332d2a4bebe1d7f47c49c9a399ba300e77a69f52c51c37615d72a8c0af5bdfb5de3500d *879f42e3cb37529d03f89f13f7072249a3e65fbe748e81910af78c1a4378b20f8b7fc5a91aabf5 *303134e8b0652b07878d011d468ddc627f8353e300d63120b9ef2b0a92f3b76ab8fc381e1f9dea *b1f39bdf1fb6edb0af21e955bf29dfb883990b68fbc501f8529712278d4fb1f6d66f80d739f3cd *f64b739d4801dc43d762f87b359b8e77fb57cf2cee9fe5dce03bbf16d329624fd35e85971d26b8 *923a0247d71dd8d3c52f0090b74d32a6ed97604cb1d7af3d398eae2fef6cb82d96a289c65df1bd *14befa13974edb0b77177060e5ddef1815dbfc4bb9ed078fc7a2ba0bb269487de017ec78152201 *8b913dc11d812882d7c44d7ca9a3167deb57a11f424bdacb341d00731ffd669a6122c62fe73847 *5753dbcc3af066947e3105536707c56fb235423833a07970337d8adefe972b5863b878c0cec0aa *d114c1a432e6277274a7a9ef93069b3f3255361326e68f5cceb0a3af271c38a58bc18971865dfa *b57e3d702b3f621f4964db1edfd62d0fefcb80319dc5d93f8eb6992f0b616cbd9120ad745f3585 *631df002798d137eded8cd732e9eddf96a421e2aee20e80eee29a9b0be9ebdb72be41b47435d46 *52befaaf4806703fd41005302699f4221e7bf63bb588cf2632cb975b0b527349797a132831a91f *31585e69cef6c65c74ee6ba44cc6d6c482109f7ea6c4f8f2dccdf6959e5ee71577225c056e00ee *97ff5d4e7cffd4ff02504b030414000200080072606f3978203cd821210000ad6c00001b001500 *7365747570746f6f6c732f7061636b6167655f696e6465782e70795554090003081d1f49df028b *4955780400e903e903ac5c7b97d346b2ffdf9fa2a3595612230b8624bbe70e180e8121e12c01ce *40b237d738b66cb56d656449ab96184c6ebefbadaaee96baf51820b9734e88c7ea47753d7f555d *1ac7715e1f5f3f675116b33829f9a66245b4b98a769cc5f97596e6519c643bc77126c9a1c8cb8a *89a308582ec222aaf6012b79c0ea322da252c84f69b2be1730b1afab2485c7b06c7e80dff3cd15 *af02b6795395b0dcf357936d991f5871b55b965ce475b9e182a90d6ecb6771222a5ca4f93ecd77 *9d27212fcbbc6c063cd5df5fe0d793aa3c9e4f18fcd0a47d24f6409b1e7b88bf9df00f1b5e54ec *397d43738cf130c01c4bdf6db343546df6fafb0a4e27d2a8e293c9c5f7df2f9f5d3efefec78b97 *6fd90cb8126ef24391a4dc2bdd5ff96e37f3e6d3c7d3ff89a61fef4eff6b192e4efdbfb9fee487 *cb8b67f668e0f3bee4db77efc4ed19fe33779dc5236ffeabeb3c6430091e23cbc3e7fee48455fb *048e2ed89e979c5539db261f183f441be1b24d59c7f191adcbfc8a6720b1ac8a3eb07db2030eec *f6150860f2fa97d7cf973f3efdd6de9e8eef3e88181231736063e704b77d089f1ec0870777a287 *efb277e2f4dd3b0f46798fceaba44af9ccc19590c30e3df55db9905c65feeba3c5e9bb47e7d1a6 *4af26c26f6f9f51258faf7e850dc8f931d17157007d8124db78bdfbfbef7076c078f69ab77b092 *3ff9e9f2c5f2cd931f2e7ebcb0a97581a9a7a1e4e9e2f77bc11ffeb91b10774292d3e4e2bfdf5e *bc7cf3fcd5cb3730d109aba80c771f19fd7ffdf11e7d60e1c7a4804fbb8f4e288a34a93c7f3259 *2ea3345d2e61d25c1ee4b5b488e759cc3fb801735103cb5c2cb779b9049dc7afc802966b7cb2bc *4eb22413951bc8d94956f1b22879b594f3965974e0f0703199c47ccb06667a38c297da0832bfe4 *555d66cc5b476064c5f13d2f0570d26779c9bc9779c603fcc767400d2b72219275ca59c83f7086 *cba0e9d242697ecd4b38137e19d22f70567c40cbb2e2b87c4fcf6945fa57ce4bb6726ac8b3585c *27d5de73717157d13736048ef2f5bdee40bd9d22637e3e3dbbbb689ef2b45948806c2a6ba96971 *7483e9d93f3aab3564d37ad37f9e4fbf59dcb4dd3f16f254a5e4a96229ae21a501c6ba4cb26dae *65ebc17f6a4bb1d9f303b046f0128603c7c80382f860699030b8c5ffd4bc3c06e040a2dd816715 *6cab7d63a83fd07a138330e533c33afb4f9d57dcc355952aba775c7f3e3d5bf85a0eee89cb1249 *f4b9129bb1177ea1679eb8c199df3ba81e2c8fdad162a42c607094288eaa68463ad5a8e02f094f *63640e2a9d74d8727eb2aed1ac59befe0d628700af1481c74437c3d61c54b286b802df440cac18 *55b1553883f241a64b5f0cdbe13e786c93de34df44b8af245a2ea849f7cfd991c8c5099a757ab7 *567ba42f9f31d3774bc7e1e9c1bea9e1f4c8563e93ba412bf7ace1f823998c4b85bb32af0befcc *6f29076d8208cc639e6d5035c0e73df9d7ab9fde2e9f3e7ff3d65aa96304f8631cb927dd865bfa *83641952f8d7258e2bc52ccf9a25b5988167fa2bcb77ec76e8744db7a087292556b6facd029f9d *30dcb300c5e2e4ac3fb1b4eb139471a78da5e0a076ab13a0343d32f271353c5a27bb3aaf452b3e *e24f335c59cffca971f210c1c0e7f1d45f4c6ea4d7f68ee0e7961d673c141cf44a9676eab98808 *b2bc22ff6d2b893aca67ea697baa962a434d89be807df7fce5e3cb5f483f03e6909f766c4595e7 *3f616fcba3a54539e31f2a9e612013cc43c106148603c6ab4d288f76d2b800188be26c03ba157b *faac85f10351a7af6229cf68ece2f33975a3b84d8f3b5fe0b933e3a0d2ee79dc37d02de0195a5d *7ff884593661fe4bec33627a756da18ad24157d17024cbcb4394261ff912435343a1df6401a166 *84f94c933f515a4047fe728e4a0825d50d593893e8a47593b337af7eba7c72a154b000380ea738 *d0b049cbb5ef79c64b40ea2c4a81820cb67bcf3b262f58be0516d93a8ac4480d7e09b1f91c956d *a5c95da1a9499e424e54f1036b8577cc6bc881f21a44b5012c492bac5656ba1376f8eaaf5628a4 *04e3261c8183e9838cb31d7e03e81ed1be94590ee2cdf857fa68cabefed209e512dff14d548307 *11f981eb24104e08a4b46e3212480c4ebaa3242218410eb5060f772173a2381380d7aa7d9e4dcf *c2b3f02ea42d0edff12cf9303d7c9802803ff0729344a923cd5d4d7e9383b7e16ca78fc22308d0 *8daad36178731ae6b57ba143323653cb9964044cd381d1a14f608086aa4ee4f82163cf3350324c *59363c50eb610412455d26fd7821b4b401f3243b902c8f419b153fc171e154fe1e9157b354c95d *60672a72a04812e468a607f6568e75384d25f865a558270c3322949384f800c1c0d8b323cb6a60 *73b26966c0ef6bf4dac88244482248d5ea2c4dae787ad4d4e50a1c45e02100d302c041279c54c8 *970ac8169065a7f0b400a3c82a9023f02a07191d90f2bcdeed690fb59a3a7e9a832e9775c69a72 *037edb66f98a81bb9cf67244b4e50e299a30d66a744ec341edeca272b3478d97133c41a80c37a1 *d0e987d2880b4c2a8c08a0d1f2d46d2036c6ced6ddb43184181014b83127be4684d561bdf9bdf3 *4527d8601a0391a5f067b36f898ac24a688ae3bdd01d8070ca1d9f48264792f6650c520b882e10 *ab3cd8740a47485206ae60d2c448a2ad8cb21df7ce02da1e77f44fcf8c9d244834c18c1df95b57 *dcc67ae04ef85b9ea8f5e6e7c5c2ef7d59000b8281bc8c5c76fbb1836fdb5f3a739517c721eae3 *c4001497172f7a559307defcd7878bdbef44c9532a9e58b593c5a94f8ffd87fd0a4a0acef44f97 *5128aa6d932c5e629007b79b2e61bd2b21d392026cb98d41cf60186c9dce9c3d38587ce6906ed0 *57bad6e6309a8fa25ce1905520658681003228d164f32871558dca187024442a12a0c13376c59f *2adae189536099917608cf37306e2ae869e1815e8404b7698aae126833095cdfc29cae3e08616d *5a06a872f5599a6ffb4953433996c05ad281d6d1ccc6cca449f388c5fbea90c67c93c7dcb3932a *df6ff904cbe25e9ef3a0da3ffc01a3db6be43ec424fce2a922973254637b083c04c0779c0824e2 *ccd3c3f3af66d3339b5e9d54d2b90447b744020960b4dff5110319e55f3a2f049b72099b514eed *bc965143d617eedc020f0beea5a8f23c15f09bc36e3169fbba00b1d456ba5c06e4f793927b6e3b *c9f5e77717a11a334148b74901a230b338e65d64ef9332cf28796e34ffb1edab131c290b056213 *8133bfe66be2b39009b5218f56dfd1d0964bc880aae5d2133cdd06721d2c1780455555717ee74e *712c925046cb302f77774472285214f43e17959879ee6d3730fcd4eda8dc0176b87dfbea7ad2c9 *aa8d7384f6b67212ce69e5890fc2861c607efbf99439779cf939baefe64b2305bce31ab9072d83 *2cc9788ce350ff7effc37ebce594428c3d56086229d9d97f0e6034bf169d3aeaff2a5f8e1ea029 *6a07c433d02b554cb596a9f225d2891552c8705b09010c00682ba8862385445a0b81ad4c00ffcc *9e01e0319d1388f7e27d94d6045c51e00830a316f3695d9098e5101d015fe9c5008f68f8abec09 *f90d76de67234e4609e8a94389f1b814e6f0cf028efab6acb9b91daed8d6a68d42a12d11c59226 *c56b6a5b23fb83c3ec1088d683324be1ffde40d5ceef79169ad1f72c8a68a20be62df3ab01aa47 *c8b20e15f375bdf39c6754dec38875cec0a590b495df3509c1a860b21f7f376565ea74d79d169e *d4db187480161be21d42c338cfdc8a659c4b6009d0bd465c0a7630997cd1f97b240dcadfe050d7 *0d6c73cfb9e4746f6670a5097fb0120dcc0b9eb57557a7094374a985fc4498f7c6cac5c000e800 *bab2fa956345a42de2182afc0ceaf4d099fa0f8833cd71ed700fc1c765d295b16db88733423408 *771cb0c126cf30179856c782e37d88eb6bf4d089fee126cd05f77c26ab23158534cafbc0e44082 *ca5e984a29c778adaae744ad2aec41da13a7e81fe43da6682339de66e2d8122836804f434bc789 *9860dd76edb2b8b8c3acaf2abd6de0622476e5fdcb57b36fee7ed3b99c901b5b7e80d632f0e1e4 *33705107d2115207a3ebdc2f900f9795ba9b60c2a887425dc465fdbe3f6f9c9774ea5b40f219a4 *853cee79f49346807a0e99bf14490ee62fbad6a8ab48fc039ab7b7cd86ecf13a2a33cf79995752 *f195bb81b1372a09eca0574f20732a71f12618c803740556217ad393405f5259f4ea6c24d3617e *4051c16074ccb83c8e1df0a6c371406fa2d2a86a1fe08a905ba1e1195e547bffe17a61e64f6ef6 *fb3d7f3dc2bb4157db2882f296464cdf427298f6c40f341838c31bbefe9a9f751366e5c62d0f7b *103b84b1efb217a8ea9099dd6202b0daedef5ebc7af2af8ba7f089ad8fe02369ab29a195779985 *0788c4ce4651027ec3ee14f070a75bb697ee07e1560d61b819e9903d081796788b25b33fc92609 *ff971da53055c718d12b20d88a4baad1d72caa8d675579ec28e2c870b534cde8dc9b4c91727764 *8e058b9a73d22e815c6d8c178a15f2aa548e6cb7c0d41b351bb419bd9c2ced76d250d4f4015351 *6bf976428a550f5ad49fcdee8d5fd551c26ea6246268075a08521e7f80293839d4c512c36118d3 *6f4b4286a75a6510a3823dec3ac02209f6f903485b8613e2329a65275200407eaddc31822215a4 *5521980a7154873060b496a08c04f6c94f985e4c6275b049c139323ec18215b2386aba87087975 *8b62b0e60dc1b5cf675db043a518d4ccceed3949ed6a8e7ad05d7b615caaf796f287a0725b4303 *6d92b78a270dfc9175afb3c5b0c19c488ed8dc008f104122997ce4b2024b697007e63407bf42e7 *874550794722b7bbbbf00747cbbb421aadf2734fd3373ca19f2b8690e883eca33aad3cd85c83b7 *e0f73ffc39f274100077dc3764854d608235209499df006583d8bddb6f62a38848d70b084b2519 *5d85349078aabe85017f124791ae7f79b18519011a8e1a6811e06a8413e9322413351615b1cc28 *0915ba1a3e40379694ae765d8b6be0301ce17d12cb9c66c4c2f0e419bf5eaadcea73ea92c3e68d *14cad60d30f3deb8b67d63a8754311306851d4a162c49de2e8b6780c171c0d59c0def1d0a4b63c *9db927d86b774b4c6f0917eb5b28999eda8d87f89e856036d954c528b11b3c591b1a2d060c29bb *eebb0b45bd1eb8748f0eeb38628773a309ef963839c4dfc2a19c87b70476c5e1c90e5a1583af83 *7b7ed057859b908c22c571540a06f467026b2df53ae553aa7c60ea9ae5d9d4543561167afa9c69 *a0a1a1592d6300a4d9c775b0048b9d41b7842a7983658342c8802f7c862a92d7557379859bdc6f *dd81dd66e050350acc4bd52de350a6dd934e1f42834f901e4931a03975a94c95bd012cdb16f394 *efff44d1022bbb6277de418c72f53ea424e6f534c179a3c5208f8b013b4ddb4a80474e05eb0155 *7485b5b3eb3df0cd774694c0d6d04e686c59431e43efa1f8a3386a54743fb5203b352741686ec2 *d82905dfc1728c1d8cb0a460ae71c58f3d2cf20c19b286698443608b46558059e8c19aabed3f41 *34b85dec9ef8ffa7fadf88c2ea34c65207b29b2805440473dbeb5f91abd4809e1af1afcaf3fe89 *809a25796b304485074da14dacc8a8620395123fef0881e7fbbd6390bdc9fb79a2cbeafa2b3916 *9063a66275cc059aa43ede0d22b1b5315f575192f5d5102bff0022d3949766738c9169738ac3fe *7d65a996565bac19ca0e70cebcc383c5f9508555de6f3503472f749b3ec4a19c1cfc5f9c73d9b4 *25610ba5e7d67925f8efac2aea02208d79fb12d0c27ea818672ed1700c7308c38f830bdb5c613b *b662f34604e46903a399a5da16b6572cb9ea9374313299bddb7f73e5747fbc06f17394267184b7 *a7d4634f0488fa4022908509dd44d465f946847bfe41b68c7bfe8387b8d1fc9bf301080e14f74a *7bfa0752356c7780d47478a3d12ac12054a0cef7f7ea48e07ab6112c1acb1686d3f1fea8d3e1c5 *eef76f3e7467c52367206969c40819e292d4dcac3f6064b273c1c771cc56f8f54adb26fa0169bd *d84e82c6abac2753a7907e880b334734fcc860f4f3861192be3452456a2357da62f9771fbdc7ee *25acd11e99b3c311390a8af74faeee133a972f4d8367a9b32fccd05352a83bba00791c5aac53f3 *7571c6f9409a0843c7ef60f4de51f73d1a94c9a7ba77a92528c3ee9708cbeab269a4a984c369af *3f813a7bc07418de0285d8f6739d208407cd81ac45ddca00a3a8ab075d7779a300c3a82800c477 *bcb5f6bae4822cad4328438a421df471ad0d446b1aba02d9cc359da21253294af89dcb3d938291 *4b22cd8cc01aec8f5d5d364a78225ff9012633ec511916c2e1c0e30478931e0d14dc8fbc378126 *758a7e70211aaeb90b062038a8019863ca23b04ca4502a9b7d628e152659206d4064c09c271a59 *b477a42d7620075b3a7662a05300a5d1727bea99407ca97a31755c3f2442141ca2483c4a8dd780 *dea08f699f58c0a7471af3e4056fbbcd23dfb8e0c26d64ed75045dfa237987a1a4daabea0a6dc1 *3710df0e0558acadb32fb0b647759a3b664bc20a6790f35cc959ab4085635462ed70d0e9b7a84b *cd41acbe46a4be5a5db6f463d327f5e906d275087a3f8e0a7551a2160537d7321361175e94e0a3 *d6bd4941c9fa9b44aeba3dd364169db759c94b421eca4e43b929b55c51657098446a8bc45a9f6a *1eb48a03344fe76f94bc21a96687fd6a45d939923a55c4c1d2d89b439404a8ec6dd7128624740f *05c799531819e187254ed997d86308c92164be1103e2df630be26a45bd2a40c30a5b735b8ed555 *0e7025c146dc23db407c416c1a613fa248622e21aa12307a26a03f6ca507075602a46edf61ce8c *caaead117d422a813438d4f13c562a2554dfa4aa32e7dbf6481229e21656678da7e0c391455bf0 *e2e61b9caa8d58abad1f8e9d90940a5668b48c046a5ce11d955b907a402d36c70e360536d6d966 *8fbd8871d8db01f559cd36f80ec4010beb35198fa155ada1e99e515bed65d62f7785bd7e8e64d3 *ac7a35545addc40276313ae248032b966f36358c8c6b929ec1b2d07408ddf42f1104a9b30df748 *7e97831ebf7d6d0c7ca30157704a0fdfca8143315bf58352686b7c91ea0b27ee0c5c0c61f54e45 *87a59e23f35edac678fbc8f2823754fbc65ed6ea1fe68672df70c5cd2277c7b32599b2475f376f *ad056324aa8488467730907191a6ee9789da21265f8c2a7cc07eab45d5bc16528d1160b9d7710c *d6bc98dc0359301f987069d621e8d27498c3eafd6548a86a6ebcbefce793195275bc6357366ab9 *000a2f5db7758e8882dd1a5d4ddac670fdb597d0eab68ab6bc665dd279969e06ae768caafdc248 *6a87e662bc373634926bb96080e16fc3091bca5bed40bd29a17f8b014fa579b1ccafe437dd9641 *7012af28f1a60cc0f0caa24eaa08733a8439db3a056ea6c8d59541c6cac00be6d7ec809aa77083 *fdfe881d88b437b2fc7ac611bb46a8c19814c9b2d8aa3de88a6d53ec8da5de50f9d68129612388 *aa345002777587e1c9f4cc6f121d89e8226ce8c4d703daf8951a114257229a7a909011a2c3b426 *c0d9ec488434f3c0400abc8d3ae6122ee285e6659d95062dd86ec8e9059d6b7ae100d3ce66b15d *5e550880311d40b29100e2d9aa418ef89e8e0ad38472f0b126d6ead930e8c0cb5294bd0a59f2c0 *593e12c5fb675cad50c5e5199a5867611422526a4647a8f4bae3c0fb61b22b523e6856a26a0c56 *dd65495ed70400d220542a29c2fe94a5fa8e68d5da44b3aba132556334a44eb49f7c530a6288d0 *b00f5809fea9162dafa91f0143cc6a65d61c805b7e43927acbc68ed143f787a63b1dead47b439a *adf06faff666e4145709a4bdb1eca9b5aecba93b1ce6f42bd498e68c60b5fb3a21d8486338e474 *53089839072b9e8cf62ee80452552587c26ea7c360367b7af1f3c58b57afa9c3a0b96e6b45377a *e9467bea3b0f79fc4f5c98c936ad3738960e6c481f6b498df0650f925dd6ec2d28779ce328bc7d *3e1b1c89683bc96a3eca0955a4a5737b1dd63c30df1ed4552569122340c5509ceff0bd28d9c22f *d566fc38461d18eb92191f8fbfda61cd64cd547b1dabe1641cac196541dd03d538fbc1de645529 *1f68801d2f9a5b5e8eda77a4fef76da61181aaf89107e89402875f56be81bcd15d6fdc966e986f *e2c567dc12fca9ddc7bac82603c8aba91fa85b3eb3f4203db204cad253a1d24dfa884bba7af99a *e3f08bc15be6e0d28ee3070350b68546931be19afc530316e61abaabf93c783582a3088a7f217e *7a7af1faf2e2c9e3b7174fef337cfd52c694014c6844722cfd2130e11146b8677969f4196fae40 *5eb17cc7b24ad6499a544795aeab7771a9af23c63721517ab0ba99c01b41dc0023ea8ad2c87f3b *afc8102db2aa623e6933632a3c0ca7a84a47c770b4291e259d563881727f43ea7ce3df15b03cd4 *64a0c767a27fb4cab4799eea2a6e0a594dc6d7afcd7dd15fedd0adb3ea6d563089b9341eac3eda *e9f7e09be9c6dbf89dbfd821ffe20ef2a679234a2fb540db9a2f26ddc644d9523b9b9dc9a26bbf *34066ad1fc8196913f5d307ea334e9608f1fb12d40b51f7169477b40e46bacefda5517ba80e687 *02f3ddf0ff4abbb2deb68d20fcae5fc1d2702941946a0b49d02a5182344111a0291204ce936d08 *b44459aa658925e5ab4dff7be7d87b87b2dbe6c50ab9f7313b333bdfc7b6285478e7d7977c3751 *93234447d2f2f36222b51488b92b8c92833ab7459b213ae91a666c5816cdc354190d9a79ab8112 *b025ad0017f5de99406853db914e5c65505ff5300a32c8be0a956432d7f2cf7d831daf60b6c5de *67da43992184f62eb86122cfe35dbdda09ea411a0c8f19097ce2863ddb8818da59d4d0c33ad7b1 *11f4bb7a985e6ff11ea6999c1ed6e73d29ff6122eb28b48a1108e84648e4f6b146fa8a99f5a050 *246679ef50999c1e9d3f1294298c9574c5ab7d416a923a3eb99480b87c9a7b247d47e01467d3ae *1facd088dcbb7c1a2c5625de6bbc4c84e9417cfebc6896a50909a42d0ea24397611905d80f3e57 *36925018e804906906260418d3e491498c34cc05d4d4dee8b07f331edacaaad6785e6bf77f6382 *b740c5cb22af7f26f40044d50291d7208f60def0b0376e7b5ee34933ab57d54e9343200d8fc834 *335f4f2fe014ba6a30cc7692fc78fcd3c8e2478d1f74b7f5a00c5aa88d2503f1bde3448fe15c07 *89016e69416b6dd68a82273824c2635653f1aead1e41cbf505958d6512295528dd5d1bd2afe438 *d8279504378b5ccf8e371bdbaba3aa3f9c9c7ca6052091153c3d4682d78ad1640f1b42b7290c32 *cf4035c430db1cfe5e37978fc567cfe84c9f3f0fb6bec2a3a1765ef1dcf9ef695d6c6e9056e0c8 *7fd1e84172578fafb7f3721a1c8723976ae01b2ca1cbdd32c539530d1180405c0ac88dae4a739a *be53f93f72fef396f0d2ba4479bfdc3264d1559674b7e0579353157e113b5a037428994cd9dd45 *70f850fc204578c7cda61a7858094177d1c8ee7e4c269fb1b3667853cd91328312c9072b46edf0 *f1b7279199c47e9b47e07f0ed7fed0e00b1880ab68f7c05a53e19e369eaa2d924a3aadd462b082 *63b5419f69241316d53869096d42e72ebe76439f8ce0734643107bde98ac69edab8171c81010e9 *af820506dbcad1e28d5c714a460317c465189d17a32b75a48d685190313ca585ebc9ac485aaaf4 *d4122c760a67c7d2cfa3ee4a22c1068a9158d66d5bceaf5f3eca19318889bbed46feaa47901ab7 *4eb3dd3c25484714ad014058f900c8f5d4ea4c0a353a9a1cd31267810437841c1ca1e82e295364 *87c1b987a497d768fe1ac96eb42e93cab288b101e342bd5ac0812317a9e3d9a13e939f532a737f *1e9f0b122d1b0ee91c8df306f95164ac0b380031479e0db39e7d7276064fa6d93eb54995944ea7 *d6ba9a4e531e2a05acc13ee055001a629b2d834d3524ab1376f411cac4b0f7125d2268d875c10c *b78a534cb7cd8909d6d7e8b2c116d896fbb49d834e74973d9964cded2623df2fdf3abb7b1f5ef5 *5bb67e706d0d297d31def3d57a531bbecfc4120d50ac5e8fb0979a8a415e818f02412d7b80c2eb *d2e0d0c655b107da1625786a1031e5f5b2d8a1f5bd33bd0d7bda09a00b9eac8d639f2d96db36ce *2922ae6ebf226c95aa604e76dbb629b1540156179248025a3902e44580452a5c1697292f8716b4 *8b6f10fa328f4a7686212e7fdc916cfcb8fa0545886e4a865fadcbb180802c19dada158310dea1 *fea09094cdcd8505bfe8583949f1aa4b4d355467af88911b09bb07c9793f1924bd375fcadb1595 *7236ef8f3306b6f61ec12d8a758f5bfd21add1d64f8db8fe4f7bdf53ca0c9f44210e97d8ca7d2d *930fe1af9bf2be024b1facf10f27bf7dd4e18b8ae538edfb31b17e2ff66f34260ef2adb963f48b *b06429afb7181ebd79b0a138149e7d8bf7cb4d7155caa62b1aadce5c9afb5d72271d12e84adbb4 *d208c300f1a55d37859a6cf6c11f9105a7f346f704f1ce632480815fc5c8abf5f652c1059cd736 *bf83376bcd4e69c4dca4973d92dbe2fc75ee83e484619c3bc4532a2657dc29b365813c912501f1 *57bb07e8f6a2ac09dadd2da0c2d9eaba586b2ac6ce817ddd60f0e2b2bc2f823436858ae8c4c19b *dba7bd61876b9ac2c4861f1bf8be7bd0856dfeedfef46c5e0c166f07bf9cf77bdf4ecfee86e301 *fc7af906642e6463e2ba9bd9b2eeea60a838ae6d86068ceb3555133ad3e967af47cf9f8fcd09bb *5971792eb5ac7ac284b704a59d72e31951ab0abfc368cf49e064d7b5e04b4f6f38b8f74893392f *dad4f813d918f3e4f8056727ed202e605ffee3f1b9ceeb1e25fc11093828b8f9d01fe383c5f919 *61d72ad86ebbb060ff2d9d83f8c6bf5238ea79a3461383a9d4c83940e49da5364ed3f43d3d6451 *440d5b597fe2e5eab6845f907e18f0fddae5d3f5e624a7d4bd4ef4cfd879be75659af1a9c2a075 *ad6369d2d09c19795004a1bd851ebd255f92a1fbcec46b683b6353eec0e2f368f57d4afd763afd *8ea77512d75f8694704844847f1b77c2b119cc08e7b0ef93cc45febc2e37435a02985179f14c8d *f82c4a91fe5c34b08fd3a41fb1fb638a1ea8f6349719babf5f3cc32dc91a41274034073dbed970 *9f55082731b4e5345c6ab478b070ac3c31cc14aeb6b35ff8490cd55649917062ca4a50377d0b2d *ded6ab3f79d272eaa3343aedd5d82912cacfbec2a00fde226921cc96653054f4ff95fb85847a4d *6a972aa5d7320907c967f43c7b8b8d9da50416250a01dd58b4c670dda00144a3e994d26c390add *bd78df3ae87d8a44badbd6d61dd48c605d8d78058fd4121ea9253ce2353c1217f1a21a7af3804d *1a4d266a39e3bde512fe8b0d0c484d285feb2a19e56a4f7183547b5473a835bd9ef7358c45156d *fbc5ea7eda2c822f61589b4a0f967c4dce45047e1ce7b32688b17130133947d4619c2706f43737 *15c9d785cf1fa585d99ecf713c516c04f6af6822127b4f27e2e4f16e17e323325cb2a63a3a9038 *1cd9e580a4390ea8aa64dba361ce45d7e05804e43f424eed3f04139974e321d96782a7773b7f10 *6f308daf70d1cbb3fa829c231e975abb83d40bc2e6beb5152d311cf5273040d1dd5fa34168a926 *4a38ac153f02df7e61697bac42d551c88e23f1fa154aa3d7ca76c262f857aa68a140909fc57756 *af7ee05c581665a21ff0144bc4acd9d926b37d749ce6a08cc0618324cb4dc31471a3a3a33c493f *fd9a0a9235489debc63f3b7a96238f026c998d264643525bc39296763ac29a34be4f56dcc3d2bd *7efee59bece30c1504ea60f6b7f335afa1fed1c5a6f5020d22205a2e92abf5cd9cc0ecc95559b2 *ab6a07e616690a17eb6273a598a10824f83bf2a497f3156cfece3f504b03041400020008001742 *453ab6147fba1e0b0000001c0000120015007365747570746f6f6c732f6775692e657865555409 *0003de028b49df028b4955780400e903e903ed590d6c53d715be765e82139cd82da6853650434d *7fb4364b5a3a91958021180a04303fd958e3604cf242dc25b665bf17c8946c4e1d4f3cbd5acaba *d2b10eb40155d76ed3344d9085fe50e350a7d18694a64c8b46b5c14adbe73a1b516149a0b46fe7 *dcf71c3b8faed334695a27ae74f2ce77cfb9e79c7beeb9f7dd176f78bc87e4114218205926a48f *28cd4efe750b0395dcf5720939567866419faee6cc826dcdde903510f4ef0e7a5aad0d1e9fcfcf *5977b1d620efb37a7dd6559bb65a5bfd8d6c597171914db5e1741052a3cb2765a1ce3519bbe789 *296fa64ebf8498011880f4e0eb567822b6aad199957e8c5ba7c64fdb4e0598cf50b1320075f18f *595131e74ec249c8d93cf25f6f651cbb97c39994a801997327413291ef2c6bf4701ee0cbd50e3a *29cb743dc846bc2ca8283a89aa8c7ab7dda0672fdb150a211ff89c450ea33daf628fe6c6a9c636 *e746bfe466fb42b75ae1bdc8e81ca17e52ac35549c13f8eba2be625c2455df83b5dd535d158347 *b0ee24eeb001c6867bb16258d86663a4d3464222933aee5bd13857a28ae4a1576468c2880866ea *2785d1fa0443aa9e01135c62cfbaaaef23736cbab4a72a1f7bebaae6c1837f030c619d558c0b1c *f8d8a9fa78027cfc4c15c943e9e7aa9e05e5f45baad713189c5003fae5a01f1d3775b741105243 *1121a916e0406d26da1ca43a46d56679346eeade9215cb43a9e50a422f7dd4e62ad07f0784a945 *59bd57a8c40592044a668224d68b898cbd7aaf9acfad91515bac7e120610b39d48ebd0e328230d *43b0d2994248a4631235fb88dd4e62b557c098592c26563b7508c93540a0460c04e4d253e0e5b0 *1938c841c351336889b34b37031c3645210d2472ed3c67a50a385a9c8732717db960b4492b60a8 *a21cb916e7ee11e7512d085d2ca65a9b9d82c526dd095a31ee9e4cfcd2c7903750c570e6487f9b *011e2e8e4949ecc4b80ce26c0c1b4be030c6273036e9a502c848bff434e808a536e989994aea14 *d7e24a33ea1c2fcac4925a87296bcbc95764d400b3c5bccab32da021f57d2acb3db163f74c93eb *b3f203b972b1b81cfa84f7eae50b380dc0b60cee81a6d4b7e830424806d161c0c80ed39cc4ed18 *d84108ac0f6d0ff683ead7bf068b671479833071fd04d6f2afc847bf9c782bd62e0fc0380c31b6 *6a791e8edb86b3758c25c94221b1f20446f20afea9bcdaf97078e97c179fb7223d1f9885fcace8 *e0b70b937ad7cab5d1c1ef4c2093cea7faa65e66fe3efdcaeaca8f3bce6874162657ea88e8188b *9c36d6ed70d76364189819823060c963306802e703b1188ab0c28c4292bebca3e3dcb24cb45845 *f0945e28c4258212ba1d4d6017adb5c536e99d42652cb01728cb08233176b26e47bd9a8faed11a *f0052989edd0997a6feb1ee66685af7d996792d5b2cbd49b57bd2fd11de7ff1a8b8e5c879dbfca *6606ee13ca1981fb947286986324e3cf084ec29d23842f0cbf8662175f8cdd7740ae533fc4fc7e *96a143d4906bca102e27cc3b0eb910fe3c6da15c733f0d3feae20bd6c35f6eae1a41a272644f71 *328fd04ea6f28f6d97210bf41200c7cc8d61c60ebdf9317440296f322825dd010a5da7310f99e5 *a085522ad61ba6fb5f8b89c7a5c1fd5761a02522fce9757435e0909425330ed08357ac1d13ee48 *ebaa4d27693d9d859d168df36334a58e4bdd716eb6e9641c252f5309b726d229117e4554e66624 *0b5cab37f157930564b5586b14f576418fd6163f19eebc44f87c6128cd66cc76aa66c38f12fe79 *a8a8f47ad081ea5c937e169885fc9d13035827fc2d68ddf44cdcd41b171c52d27189bc25e7b842 *c3a6ee9d304f53afe3d2be82d5a96dc0474e97e6e4a36bf4013d2d4d035ec86287a44fe89a3178 *0ee2c1129ca154daf405e3e6ca95974396f0b232ce248cc09436568e85f201f29701c48e532b13 *d373cc943c186a080eac2a61bc01ae0c9e8640fb9ea94d81e5f47e3ed67b6452e667e39b044328 *8783e312ac6bea758ceeb8044b9a89155530593f8151ba242ef877818bbdf601e8aca99c0899c2 *cb0957145e5ec4e5879717f3a3c919aa81d7cd60f5049e1ed72fbf60fa41c2f4747c49825b3410 *45e1dd0b02ed03d151e0b866bf6f203a065c19bb974d46af0007857e51296f2616fd100b100238 *8a3dd177e06f2c2aa952713f62518ff227706b0cc07ace9bea5d456767c1d9dd82b3bba01e0f8c *723ce4512ff4a43b8239899e47b34b6d920994c5fd14e985b723fd0c7dc73f7a1cd53bef52cd33 *bfc68117af81521ea8ac56c41d17d4e840f66646a60ce70d9d73b12495813fcf0ee40d1d1f0cd0 *6b76a4d34c389ba804828702043303a2153ae84cbe8233590303d377a8e1e10bb1235b46bf052b *31f64aa6f0601b5aa43d0c7d038519a5fe30147116bea344fa82727d82b56aa9ab4f98496d1f6e *7c3aae11df6c35604efa032ca1f411351273bc8843feced0b3307a8e2f48fd1806549b7a6786af *5a618784af169a9e49140ebda8e33f0c5f5dc82dc3eefdf18a6114ec4f4487b81af54240b77df7 *20b7343338578b7f3f6dc3f795225b4865dd838a288d769b152bb94ed3b736f54c0592a07d7125 *904c72362a618f3bceea5e869702e118d36f6a47f0e484bb9d8bde2ee8c9d90f0507ef13b1fefa *603f5a4c1fe8515bed096739be3ed316c5bfb8991175915306dd9378dfefba8ad2e087f5fd53fa *90ca8307b70b8947f0f3c479e8e0f64315432f216feac68f838ab8e9085eb58e656e55a623e349 *9d29fa535c85b7bbdec58f8da6e8396e46a4d80af709fd4402bf3f32904148741968a0509f81e6 *aebfe08749065ac74f4d69dac7dfb072455d940f13e5b3366c3a52858fb62f6120800ea35438d5 *35888700b565e7e617e3e7f05194f4e0fad4d5f72b1675a90d7004d509144c9bffb977b350b96f *180e5be1fe145942b8db65b8db21803cc6563047918d0ef3a9c1feecfd064a91395c3e1f064cca *dcfdd1b8d0cfcd12c6d5fb916c3984a2f5fc38acb1f34ed81c4513b2fc0d08ab221ea95a0c2292 *2eb28ba55164a15cafa44f7ec67d142e86e5762a7f847a52eeccc5d8874e6dd46909cef7467fcf *8dcbf276ad3f8be26f18fc65e78e6db37001aaa50a3f6783e6ae143e2385e4417ca653f79f025e *382ffc4e348876463e0ffaf2a22b4e48754fe67b445e2469f0450d1ed3e0510dc62b622e9ea3c1 *460db66bb05983efd360a2c1060d663478a9065b35f8010d5eacc14b34b859836b34b85183b76b *b05383b769f04e0d764dc732fe9728fbbcd9bed8ed8675d4fc4f68e97cfbcd24fd1fb76ae59fb4 *fe00ebb32e0a1591bb174cf535797d8d56673bde5ead706f6de039cfae16966a55fbf996462b2a *a100ba6e26f20bdab639b3fc635b09b9083890d37700fac866425ecde93b0d7d359bffb9cd00c8 *3a80f601f5001dc8d17d1ef86340a781ce025d04ba0264d8428805a814e83ea0c540762027900b *a81988030a6fc9da7a0af88340bf008a038d008da21ce2b36cfddf8ca780b81b5afc2116f95b89 *1bb74f1bf25f256edc8370fcba83aca791ac27ee50c0b3c787c27b89dbbd9be55a3d5e9f27b83b *442a0007dc6e3780061cfb5016535b4b15ccfadabc41bf8f90650a6ec2df5e949f3cdcee10cbb9 *3d81809b6b0fd0be76888bddebc59f24488ab8bdfe5d84dca573b77abec9063c5c33d9a173fb7d *aa42b70e872bd69e063ed0e2e5a812b452bd87cbd859a06ff0b4b4f8698c95faa640d0ebe39a80 *7f5cef0dc1e41ad0718f3ee4ddedf3b4a0ce8f8803463a83fe0696fe48f17bb23ac8b235de5d41 *4fb01df02859c372d5fed6568fafb1c6eb635740df061df46df037f22dec6a6f0bbbd1d34abbc9 *a66cff63a0de82bd61ecdbca79821c1f58eb6bf2a3e24c7d8ddfd3a8fa70eca563cfebb7b25cad *af998e6b74ec6d60039cd7ef03fb1c1b547f33d2526ba8ad21c89535b6c04c2cceff9c72eddde7 *fc7c5aefd8b2d151f3f0438af6bfd7fe01504b03040a00000000004941453a0000000000000000 *00000000110015007365747570746f6f6c732f74657374732f55540900035a018b490b038b4955 *780400e903e903504b030414000200080072606f390ec5c45a1f01000015020000250015007365 *747570746f6f6c732f74657374732f746573745f7061636b616765696e6465782e707955540900 *03081d1f49df028b4955780400e903e9037d913f6f833010c5777f8a2b1d4224044d964a913255 *91daa152067644e012ac38b6e53b68faed7b26ffcad01e46209fdfef3ddb49926cebe6581f103e *6c8b67289198549224ea193e5d40f872bd6961873298313c29a54fde0506471950d7b33619309e *fc5e1bcca0b75a9611cb5f3046ef96b7e5fe78a80292eb4383749b24e4deb37386727f8951e918 *43a9c6d444639a6bbe315e7ac3e7b1f35613ce574a81548b7b888d6a57b79558534a68f6d2856b *8d5c58ff69994f7ce6779db04435eb98fdaa2816cbd7fc459e45619d45ea9bae185d27a8d95dcc *e1fb9120d620ac8b9df36863d054de871b9e1bf40c9bf1a39dcd609802e2ae72391a0c5c45a9d0 *8038a4c3fc17c410fea3d2a42d716d1b4c87ec7a4bf97b596e3721b8209c1f504b030414000200 *080045545939269c6e71b10a00004f3000001c0015007365747570746f6f6c732f74657374732f *5f5f696e69745f5f2e70795554090003824a0349df028b4955780400e903e903cd1ad96edb3af6 *3d5fa1711f2815b29a65eec364e087419302017a7b8ba69d3e0481404b74ac892ca922d5d8b9e8 *bfcf395c246af3d6e6ce18ad63d3675f79284e2693cf8c0bee2cf2d2114be610ce4455883c4f39 *710a1a3dd20736994c4e1665be72aa2c1102c09d6455e4a57010f5b64a04f3e5c7b794c3a7157d *647a31660b5aa5027f7b9fd39895271a314eb8a84492f220ca4b046cbeaf62c5ab5962659997dc *f0bc32eb7f1422c9b36bfcd16f563fa654802e2bb9be27a55b545921e89f1a23f8d6e70029299a *cda2a1f68e515195accb12f53320d76bc1320e429fb0b5286924c228cfb8a099f09d0726c2551e *5729ab179d99f321cfc03af8de651bc4ac60595cb37fdd65fc9d95c8cafc7e2bca2412ff568bbe *f33ecf39d3dfba98f86ed040162024c2828a656d9c0d5825e7815c3b011f3b348e1374064d430c *0fee7a97270ebc8cb7f30897fd3a7ee48f1c630474348b411d4dae2b01f0a55183ab3c7a97a42a *ae5c428b44310ac45a10bf861e7ce5324e16297de03343eefafdfb9b8fb737b7be09f159186674 *c5c2700731aff9ddf3948e0b344850e8b8736633873c25d9c539b9ac41a5aa0158095574877502 *9c9047655288f0a9a445c14aa99ce65282e3cb4c115236976986e1e0be7e4dcb07ae4d0eb9fa49 *c1a243cb645ea1f68e74b1ca6d034f7ce72911cbbc120e5bb308e0b207f0f76a4521ac30e525bd *762407a12411729117215d08568203271a294d32a6b15e39577946849332192e82ad0c6507a160 *9d3e3a49267247baf16f1209a50a80beae1a2ed1e6c075e2df9104d3224dc9bda7988872d398d8 *18a8499096b2126e914084a616525bb921dd64eae12b4a29e7ce954a3a59325d53f2c0f2ca54e0 *1554e75a25f75b4c6397b374e1351c215ab21c0ddeceff4b233f588e3f2685032ecbf26c3adf08 *16e531734c78f193467860b738732de2f87a48f3394d9db5bff19f5b3facd15328dea4b5bc81e5 *e786e82b48c712583e64c9338b1dcc89268a419500ac00f5e0fa5b4553b7ab85bb380b16551685 *28b24fbe41844dcf3c55bf3c9b475de1805af290b1f8681e6bc343a9d6e2c2d645c9b82c823fcd *6763f8c09bcda3632b5f7af7a7b93d772cd70aaf774916ff2e3b4537b82c369f68c219776f6401 *d63d12c23fd63dc67748964f79152d83a95842e213ef382a56be61bcb2356414cb84456ee1177e *024166e1b9369a2c00c4fba7b308a2149a92ebb5d555aaea9c1a49a781e6794046d592b6daa069 *5e61a83b69188efbb39d827d695c52d3253eb1481270f21007ef677841c5052e9a2872c006a5bf *fe220e5dffa152d0d7a442fa93c5a9e5d04fec5b9594ec052b63c9be41c0193ee4ca32fd59701a *5cc0dfc61d563af70c01840295d616116f3b7c9d1af1be18f0bf02bbb0d8c401202b39772052a1 *1a3c726bc5d476b44595a672b7e37ab66253c3f3572404f2c1c8d1a06e3bcc3b022e68927ec952 *a8d512cf80e58faeb4c33fcc26a88570b3e801036870b62f70953d66f95386e05ba54978886d04 *8a9aeb79bb20a3aa2c35e4ce68742e4e4f4f21144ff55fab42603c5331b337e9decf08a9d56f0b *78ac91bafae4d3a72515d39be98ad14ca5186a337d9a26d315d92acdc1328f09f15915213d2f11 *5d939c65be6205eeee274b218acb376fd89aae8a94c1766f35d99525d207a605ef9b877b400fa4 *fb1e58eda455faee4031da037c5f7d3bcf7190e360ce3b3dd4c19c5b4a568527cf050ad8aa43fa *e24f6178bf6f204aaafba78c01afb7da38bee4e33b6d68415f8ac11d103b035dea59db25735a06 *0ce7c43bf931c201a28d70de468802dceedd918d826d03639a0278337eb5baa51e27f9ec8e50a0 *416830d77f80167c90df806a7bcc2c36bac522de3c88096e6c3b30a0810102f6aed6d4371a78fe *901c217812a0fffce1dbddb8d58eb59d37c5f076d27258c2e50496450a525ac2ef9c8e0457d6d4 *e975795dafa3b48ad94725dc203f498429b8506b0103ffb6586ff08cf5d179606932e2be3efdf9 *e1f4fb61348253fb16b1d67b6259de06b4aeb3f7d42a3a58abbf5ca5fbd63425cf164bb6cabf53 *e88ffac891172c4a16094c58ea24a7d9b03739e8f5955f6385532f3b046f3209a723b11b82af14 *77e6d00c134e9fd68d9adab5749a592a1d698df3b635681c3b8970e6a01114e0012992ec45a430 *61d6710e5fe6551aab0117248bab224d222ad8ff50b0e1bac2771616d72ad3509665ada0fbe6f3 *ff41b6d47aaf0ab1e96adb6b505eeba7da39ad5675ef779a10ae0cb8effcdedb9bd180b10f63d4 *d2f56d9ee1c902dfd5a51a132e29c731526285b08f916dc43baadde80de94eda474935df53aaf9 *1152cd8f962ada53aae808a924ed7e6586aa9fc4db0b74ff706ae0294e7b2bd42b4b7848979993 *aa5035951924e6f6a391c3d96953fd55ec6aedea7cfb13b85c920df9f1629abd3cab5a2bbb46bc *bc62bbb8bd8ccb70bb0e35f11bb97f698f0d72eabcd41ca69f6b1e33881d780e77c098b5504281 *6f7a8febc822cfc9a511db9dc0d7898f634b4ccb78f6b9ac985f2a89c29a0a0e86cfc43742df7b *fda780383ada64e1ebc407595b84edf1af787c0810e77ec713c5eef447cb90096c8a6a27aa96e4 *fc3a4e6958de674bde5119409167504495259acedec1ce7b4891e76d8aa80775f208413fb4e36f *00254cb609eda4c9bca465824c5c025fd0713ebaef0dfc877f30317bf787a81c3f252bdb47575f *6f7e07dde877e848749e32a39cb62c9a28e14bd221f5a39343cd434830c674aa9f994ed1b730cb *d70f2507e76f6512130a008e1f51cfd1030089a083c0778c885bcf02eeb69f75dc8f1dc45fa9e7 *ace33b2ae8e22db6a3c1a41ebef5b24c59794dfc8e075af89ea982e17c139a47bfde58fdb3362f *83a2ed90646f66af0c45675541215a52980919789e95cee313c6828922bc0a513add8a7260d136 *cc3a8f318da3fea5cc97a4497fb7df67d0b2cbf0bd98b12e61c4bf53a9745f5b2bc9fc066c2c9e *b412ea5e0e1f194bfa54b6fa15ef4588e5548ae3cbd35da2657230bb89874793b6ec61f790c03b *841126b6cd4bb74dc9cb7175c078bf9aabaa256ded60e9e518d6f5abad252e1dccc91e5f5b7819 *7b00d4bb9aa12a7b4a61fc7c2c1dd5541bc31d4b4785b86f05d8f02063317e263deb28aa9d4cf8 *c2994e8603d3a0273cf2869929f7cfbc7d20c11efee99e90cf3d9a4661dd7e6a5d9bee3482601a *5c83a1dbdf7854d6db8a43703a7b8b1a55af8f638eee2f6a12f5666497f5ec8399ad274012badb *18cc598edc65daa76b370be78939943fca272ee8473cfbd3676ea889336711ad384330b6c6b3b7 *44a41b141e1b6b6c9102bc3c939739ed3b57fbb4a4d6954a7b4231f2fb6a1f3c5cf8bf425ce921 *fe93ec8d07f6aa5b7951ec7a9d08bfd9f7fbf55e1f9f63e024665abdbcfb635afb8678adf14ccd *2e725c5136d87e650bd76fb806ed8a8d0061b48adb675df2f1b6367098cfffe3caa78ec4dbe7f1 *89a1d8b9f81a6801bc8e7ddfe7d903b8465e14fcfa21d7fbb69e98fcac25617be32a85f361ff8a *1fa6f21ee10c73405da394dfed9349450cde77aa8930b0fbc45a28efd7e15d28774b5a20bcd49f *ab3bc2a42bc5f02e55dd92eca97cde52b9a13b93dbdf16d93d34393f5093f3b6263d96839a7c55 *379afec8deaee2f790987da52ec607df410dc9b689c5387ea56a9fc6b086823dec7271a05d2e94 *5deaab300ddf7dd0b439edc868d649ff587801b5102faf8e6c3c05fffbb83dc76d6559d721536e *5bcfa4cb0136dcb7e882b03d5b7734fe908fe4c26f071628c038d0afbfb51cd4beb5208f8cfe0b *504b030414000200080045545939614cddfc51120000ac4b0000220015007365747570746f6f6c *732f74657374732f746573745f7265736f75726365732e70795554090003824a0349df028b4955 *780400e903e903cd3ced72db3892fffd141866b648ce50b44439371b274a5592c9cc66f7f25171 *b27bb3b24a059190c531453204255bbeda07dae7b817bb6e80a44090a268277375aeb244828d46 *7fa3d100f5e8bbd30dcf4e17617c9aeef255129f3c22831f06c44f8230be3a279b7c39f833b640 *fbbbf79f5e9f937cc5085fb1058daf088d03c262094ba230669cd08c916592910b3f0bd3fc2f8c *062cfbc478ce9f9220217192938cad932d3b5966c99a6ce230cfe12909d76992e504215f51ce1c *b2a6d7ec6213e6ec291190e9f5d53c633cd9643e8c5280ff20b170966fd23c4922eefac97a0d54 *b98cf2dd3c8c794ea3a884be62f99c0bb2e62b419743423ee7ab93e279c29dfa300ee13bf8b8c8 *33e0efcdfb933cdb9d2335772c86214fd8adcfd29cbca36bf63acb92ecfc84c05f495145e49bf5 *7a93d345c42e584e2857109cf811e59cbc65390d684eadd7eb34df7dc8926d08c4d9129d61186f *13ff9a248bdf999f933c01f9e59b2c26eba217a20c9772581a93241e0421bf26f001642f367998 *c480e344200bd892cc412c613e9f5b9c454be7879486192fc6c23f6c752bdc13c0e3e79604dae3 *58513e2f61249e1884a0602968c45612c675a47b34a8903e686adda708336b47321736d8856a17 *b22850c0dc1a0da28f5deae5671461228cd72a0d13305623a3e1be4aa208f4024216e894011f11 *86ea2429cd57e030c9260a489a25c1c667e00635fdf0aa130d40e4afe36d9825f19ac5b9359d81 *4d463407975a4fde25317886f4537163d7d50644b32c7ffd6543232b02fc160d6c874c671d6034 *989abf24c987eb2b73e6a89034706910583f2b64ba6863f3651831949365c87e83913b9e8f5c76 *7565d80feb7e3648771e7cde84f1d8fb1a449e4454a25054f14e1822475b84f895a1066eea4259 *d230fa1c478cf39a4c6c05c9cb0dc48838da911128d5bfa657ac97f8cd6592a41297824c658813 *8e8162b1235b967168388cb77a827f533422b7e823a22e3620932a0b33a401a46c3af0391e8cc4 *b767ce2a542a8f1f31386334a7350b2511a35b88bb9c7dd940c0678446607eaa926454afc96e3a *eab2bcafe5e410072f604e82c00fe308368280a3cad7882bc920ae3ec8b29ee866f90dd97922d8 *6963aababce11016fe9164d7c012cc2296eaa8605d230f1edfdf436a28cefaa268f15625c87e71 *004f4a33ce601afdb209c12c208cf1b2fff30998a05177cd641dc634223e44d7f32a32261c5c4d *c44ea70c9e2274139ccf699a46a18f536a57607317109fe76b9afb2b0b09bbe176a9128708b9ab *66f36609262f80d16c240d1831689441aeb023452ec1828a9e62461111215fd15cd196302c2155 *fbe943483b336b2202da30eb5ac2249cb7d1b88939644a280fc8687213882e0309e471f1126495 *7799d2539562af7e7bd66af21f69c86102fdbb1ce4553186436a9c39d21c6eb8cecb3a81000c12 *43d931c90f2a1b59940adf338b003964821ca64ee6b300634f6f56ce8e70f6f46baca752116602 *fe8af9d7d2c265f211e819958a3c70210fc06c6e8eaee590c2370cbbabcb35db01a49c4aba212b *2a0d11eebb81d3dd7c0f0f6e7d04bac8440056b8ff11680c03c11ebf0c0bc5ad555267d7132a99 *74bda43cf4b99e52055a8caa075de394276b768a266438b527aab827a5b49d8290494188b317c5 *4448c2a9f2ae82d996e94670ad6a3f508cbd41ae4a616fadc012a454e9f47c3ceba91f991db648 *f6032ae19860bb32bd8ef0df268d6f31c4208c9789d143ea7556dfaa4b8b8799d101d3210d5b21 *bab1d42d5059505554d500f0cf323ffcedd7c19b77bfbc371da3041b1441f69c8cdce165acdc81 *d15ec68a54ea9679445a95b87016f92867ea62e144f2dbbcb970d20c190211305db235a998b2cc *80a52c0eb80b584c89cbd623a5361e9220201dc26ef38cf2896577c5cf1ac722d116e956566295 *486cdb6902b6642682423de9aa1bd2cf92a50b58d0470ddfc1ec6e8ba99df1e906a0598039ce63 *104eedfe32fe274e932164409e3b34ce6ba4ed3554938c5bd3cd16d6125b557348df47c69368db *a0a965192926bfc3592466fe880a138b186b0c7b0991c173acdb889c234fca44e8b07aa4a461a6 *cd0ae2600d0b2b21b112d5d61ab09880491efd4da2c7f2905ca241e2522eac717cd5fade25f92f *c9260e3a12939a74dbfa625a52d2e71cca570d1b339a168f8267ddd14c0b28e02cf320cc4ea11f *e6e0226ab6c787c38e644c17349b5dc62fe99d3421bbcdd78b350d0c04faeeb7c0190cf7ab9b16 *e508c558dc1629aea8eed12d2c9531d944c5a0aed12a28a86a4b7356738b109599d1f88a5963bb *6ef239cdaeb0463669584ba7326cbbe938aaed1568c1d4a0cbac0ebca6a925f33fa700bb576eab *184c3db968a7773201b916447765ac206a408bc5c0a6ec214316b14ccadea71b8e05d618f2fd82 *9280482381b47827246e807918dfcc310eb0262cf1a07300050f720ee837f05c5948ea33b348a3 *e870024058b3e817d244453503ad364e6ec03efd681380545b047a9f09e8b8fd2a4213a1109a1c *a0f05015461800173a2d977018208ba483579544cd4c3b54af83d6adb847389cc03ce65dc670f5 *1d5e350ce0f0c4f93e1555aeb63cac39cf61b15aa54c9d45b5224be25fb178566b5467d9da0300 *06638cf873f0cb711dcf92f2dcbf0aeb8896d042d314c14740525b3a55911c38f5b9bf13b84e55 *bd678dfc3ac986cbd328cc2db41d43726ecc3ab3bd7e23d6f854c728a4f24d0639ccd681f1eb0a *2af975be2951eac8bd04af1155d202a1e8983e6a8ef839be86d013bfc6c80ec96f95b70aa1434c *c33ab1fe2737245ec779b6fb9084717e7853420eb5c45a59995fb3b42b9b66a92bca10626cbb13 *6e0d312762b26a61289b6ee8f0f273bf77760415cdf30c38b60c8d27c3b1bb3bcae41e7bde3661 *95223e8046090d2c1b0b64da207dcbb810c2008fa6789493085c9dec9f6b4392e9edcc680b9680 *e773aa47c62a2ade67266d2df2b6cfa4a5c9c9a9d404da4c5b2fc4b49760582a5616256f564334 *e80ec74c032d5dd7fb4c77af5b68da0ba2dbb30a73075dd579682d76600ef62d94a8894296bb2c *ae10dd8bd6c3a80c4819c882de4da07f4ad7eb30df4d3fbc79f7ebec886f49ff2c3adfcba58b51 *7afa6e6f4f4d217511ce7a8c61b20cefeea21d3c2337897f4dcf8fc7a42276897ef7e155e0ef1b *a4845df7655777a48f0c2b48bcad6e00628015d2b4d5896e27a389272fe8f9e2dcc7cb2f93dbd3 *98e2d592dd4dd290afcef30d5f0dee24dc724a67cfd5d2d34c5b74e1f98586d4d11255a8e258c3 *df69b429ce354046c8791d26c2cd9a0c2734f242c801a29300b68c0bb13d626e19593016830d06 *869883b422d0c566f196a6c514b5ee9aa120da596bc849f05b3ce49b052ce6e6ec3605c1da764d *a4a24e2ee5da8475c39c65f0bfe6967ddebd92cc589a596b3c1e60014a4cd9450bf0513052435c *1e94d893c268bec9d868a2c44ab36c84d58b89450f6990266e03e2ed72138b82873953a69ca28f *d786c84344146b332c7315641780ec15660ca6d862149689dbbee2c26b433f6e433f46f4b0fee7 *7bdc457d4ed22b4a03e516b9ad0a05662c0cb25a26ff08951fc6ac1c542e6f16115d898f7afa5d *880a837425a973554a6de0b80f5a97c779250b32957270a414666dfdc7d05f61984c2b3667e561 *9c9609e63f7105d83683ab76aebbddfc2a4b362964313b745ed5544178766765a2724c87b463c5 *6040649880651b4c04c6d7e3331ae9af407da78e326b9b7e4b275784b36e09fe732ccffcb709e2 *30cf3569fccb3e2cd6f55474e9da1659e3de1938bcd3003d48873105c8d9656cfca82be60fa2e4 *9e5a016a30871254a202e4c557e26bb05aac3a3e2a8580eec350ed29238602054739d72b6bb1ce *7d444cc233dbe90d2fc23476688e69aa384cbb138ba3d25c518ba9ab653e9f148735ec9998efef *8127073c9fee85e75dd29b2458bb3e0cd53f93947d0b92343ce387d1a359888cdb7c56685e8b31 *eff14c8f28516b5637aa9b9d26af49c1a73f326da7c9f61e8dd78966dfcfa9e39c1dc98fb39193 *79c7ac7e643be2dbb38f417a7b0711653a7fe4948ed2f4d057499cd3303ee6a8478c5e3d3d343f *be566d392d586140a7c84723720443410ea06847e0f547d0ba73ad540fea471524db6233e31e5d *c00aca0dad8e6e02f7719891d90357a589e3a0a5c8fb427a0554cd9a5e045b1afb2c3868501d87 *c184793acff03c988326fbc4790ee1cbf96ee2b98f9d671039a0f5ac564bad365aa5cc843116df *63f1f94486407724bec7e2f33f6418f2b10dd0996d69bfc2acc00f645b5b27b30f0dedcb239463 *577e3f968317c30ec5e7e322fae1a0c3e383965aa806d6629cac9fbf8883bf50beea11ecf4080a *86e1e0fe833e79ead14def077d9c5fdebf6ff61b77f77bf9e2e3be1fee553e3c10e2f371e773a5 *d02096ce864878bbba784a17042e6a9fb638b42d9e888dce38c9d6340aef587018d70a14220235 *91575eef33a25a4f991ac8680b37cf2786d3382f85b39fa39523f5bfeaed026baa8863661f3ee3 *50ec0b0912c37cd7d7b6f6b533dcea1cd33e76b5eff39de8a31e37eb3e2074d28c4f6f9656a0a2 *1c088c32b00b6f1ad93d3b8d1ed2491dc9b34f0ec6cf664fefc870bd3a7af7e9387e68c7c71a93 *2d9b126291d7bd2e90efb5b4d6625bcfcdb74c19a66917af32d430ff86c5d49680284e1fc4a993 *6cf266854dbc5401a8c0d1cc5b131763a6b8994e67e21d086c27b79731d9896a0a8098bb5ad144 *223101e432960fdbe166476a4c9259f58d23577d3f051800a681058de90bdc8fca5bb8eeb151dd *881df5e1c556d79ccb8337cdbdd8f2efb6b575fadbacb5fdeea4b599b6235990762c8f30d16c7d *e2b72322413ba2e997f6f66d6b6b9b08b433775a65c412afe9880d0c3425e337036eee2010d3a2 *61810d7e7103f15e9a9cf1059bb7d0dc6f1b5159d0a3669d6e454ee50ca719125d327c33e6a81d *71009ccb1c9a06311fc85790f00440fdbe17867f5cfcfa867cc6fd554440c4fda0b8ef8f608fe1 *fe08de828276df7ffffd5b7acd328142b40c8afbcea5aa822665f4dabd610b81016f06e2a629e3 *6286ed276675bec7f3d1e21cb7d77d8ebbd191d0285d51295f4cc18adbbe18207b76cf88371c3e *1e3ef6240da2c9dd37f545f50059b7a169c8da6d93b538a0a9d6ab1e1021db261fcc6b079f8ac2 *d16064ea674ba7eab2b98286a965bf6c1e54458123ee7d5fba2065247231452e2148e2cb1597f1 *33510a3a4a65ae1129ca18cfea95a4fb93db92f8c182ef25cdc43aef091d1b1a61b5a28304ad55 *69b04fa3ecd033363688710c3ce431361edefff6f2f26b7a4f261ef9f21508fe0bc47819ff0668 *be02c923e37eab00b16d67f191c33d6d359b8e1c927ad542bff4580e2b1badc53b72781330a560 *c5721447dca97bc6be587c0f325fec9fc1255ed9eae321be4547f00bcd577be20e713d7ef8e9a0 *7c3ad09fa6d1483e1257dab3623b6f286a0c1a56ec91b16dc86e244c0b8464663868f002fcd192 *51976231e969d1ecba2e2d1e50b35d8b878aa27f9416d532d8e8d911257a45a54454c86a0fc426 *a5b718b63637a071e18672c0528ff66434289e8c06dee1674d8ce593343a6b3ca2c301cc7e6730 *ff9550bac2a42a1b0f5e3cc622d44befa77af3d815dbb7f0e5a6d1b0f14c5209170d9b2bdaaaa7 *83762f68b1f20effa86cfcac311e4a4a1aa8d4dab0f138605bf98c0ed51717f324c34d55325173 *e8a1fbe721e8605c5e78e5c5082e7e7a02b1fec9931f4513faced960a4f46c3cf6049e96664fed *f5134a535e8cca8ba18218c82bcff89dd45690a9b31de1f291c59b35cb68ceac8225cd79447950 *54488be7d3f4c7d1b9b6fa93e2da7a80d3d696d08ddfca5057d2d82f4ee239e57e18ced92dc893 *98a79f216cf2d3bf26fc7ffeadfc7887598f06f3c62f5ee801215c8ada23be6356bec0e4f29c66 *39bf09f39565fe4eb7106308f0274a94f86b1916020319befc510b4d148fc8a755c889fc4d0fb9 *c10fc40ffe2ac8ab5e92e2dd1341936cf391fc9d9228f169a4327ca41a46a0e39f38acd2c99f48 *023cd27ce562590f2f7446ec8712b527870c6efb514400f2ff8c2af30845cdbffdf8133162cdfe *fa3158f2d7d2ff9891ce7f1764cf6f92ec9a66f856826eb6a51de1e910c574f7d990d288ee8266 *3c721fbbc3f9686ceea1f200eb431287bc39518f4a6986fd02726bff9ad4f5235fcd902f66543f *8b83e51b62e1411282f54bfd78157a7043ed65830844ec36b7e6a2f6399fdbd3e18cfc484c37dd *99478ca1a1977b3892a32abd5dcbaa65b1784b4ac7daeb742facd731c7d07fc3808658c44e7283 *9202912c700f9246d10e24b6c8926b16d704a721ba59b1e2373b4c4e12b911e2108c4ed0fd8666 *31be16c1d6f83342415d3a955241dce54ff8b8e585f58dbcfd6b5cabb72f55ce24247d80eeb965 *7e8ea54926840634cd6b62157b8c7b99e0c1b62dae102c3dc2fce162fb7f178efe38812ef1972d *222d9268c1a911bc1a5a2842d3c9ff02504b0304140002000800455459399435663c82040000ef *0a0000160015007365747570746f6f6c732f5f5f696e69745f5f2e70795554090003824a0349df *028b4955780400e903e9039d564d6fe33610bdeb570cdc83a4442ba4bd2cb0810fc5b6392d8a22 *404f4120d0d22866238b2a49c5f1feface0c495976f6b439c41239f3e6cd071fb5d96cfe7cf738 *3a6d4607de80df23e49d767ef67a7039f4c6c2a0ec0b023db4e6300df80ebc6ff58e4cc86bb3d9 *64bd350770e8e7c91b33b81a1326e8c364ac87254805dff4ce2a7bfae0c3a0c9fc8f55800a1e50 *f9d96205cd0bfa661e27e5db3d7659345ed8d6ad61ab1526113ea8b1fb180b271c3b97c23de27f *b3b618cc2ee192c9d78004ca41f3758d7a36e7ffc9bc35e31b5adf10d57de2695c2daf59d3d01e *17a369600bf95dfd59fd9ad3aa1a065979ca80fe72e19b5790afabc1efb11efc18a9f0e352627e *8919e55580eaf5d81197f655bda0cbb3e72cdb19e309554d8d1e9de7c892cd16fe32236659873d *5c3815c73d5adce635a1e37b3bcc1d6e8bb2fc22f834028f44d68ea060e036121efc7df27b1a80 *0440933453fd8edaeff54855b3d87a634f900b709e05a2e105dcdecc43073b04374fd3a0510aaf *60d35ae3dca769509e06f3b08142d758c33f8fdf3e397f1ab004aef03d682f70474d3c08247683 *50e284ab69b266b25a7984c1b46a103f70a7d1abf79a78c41473d01456b01c5514c796ce419f72 *82511d504e4d34bf87fc2687568d1c74768935d1e85a653ba0c429bac0892bcdeadcee694d79ea *913135790be788277574f36ea921c566bb1c0a9a06188d8fede525ed1d0e7d59a78ec8af21331a *a8e79082279ced53b11eced0d79246262f83d571af070cb6a1bb6191acaac962afdf095076ebc9 *4cc55db9d8b054705a9c26cd3a0f02b53906384389e94820f13cd4ff1a3d06ab8addcb0b4bdd43 *4143c7b932aee0f3394cceda718c7e2c79f5c253d25fac7a4aaab888d88f55ded0f46bdf34f574 *cacbcbc0578c63316b9a1c528e2254e256f8dec772c42d065e6ddf12fb08cd05a2f89c0717a788 *5d2e6f9f72fcde84e3fe7c0e2b07b21f0fac764957e26bab1c662b5adc63edf12021e4817b40eb *543eaedccaade0ed8a68c476db7070c938cb8402615d4a602dcb245b4903b757425ca49d32cbda *413997d4f2bc11b26a9aceb4227169a38e4be1f847b96e6840dd4ce7a3a18b877e47efc8e5410d *94b4d8b13aa5d6153cf59550aee0e6e6f5b86adc2ff07bd7898448eda836af783a1a3a890bf062 *bb62b40666dccb117faddeb8baafc79a2be98aab41a16229ef6df026dbf24cd922236b35e8efd8 *c45c23fdf856459b860e7d5c72dbbb0f79b5876e5dc39fc3fda9ac28b22415aa3b4f1d2b684414 *6d4f153e17360e1879663fbeb1b3ab713b8f597a9260476465cd3dc8d4ad31881329a572e76b8b *74b3205d0822d3ce969ecf57d583e67b9c949535c101dd4a68f99bc7e6a22c912f5f13729791e6 *f673b416d5169cc2225d42fa0d59fec5f94a79e54a95008bfe729d777404795a2d897fd80e6a79 *54c36b71a619a58fadb7db2507880035098ef58eeb5d2c9bb7f4e470ba6a1c9b1303fe79faedcb *f335f8952c27be17421928f7a5f0ef99afd89db19654c3775f57d08b475b5caa6fcc376a61acf2 *e2fa83d9e075ee40f671a98e4d26aee94966846fa7b4b09b5f40be3492739665ff03504b03040a *00000000004941453a000000000000000000000000130015007365747570746f6f6c732f636f6d *6d616e642f55540900035a018b490b038b4955780400e903e903504b0304140002000800455459 *398f3ae7d013150000e44500001f0015007365747570746f6f6c732f636f6d6d616e642f626469 *73745f6567672e70795554090003824a0349df028b4955780400e903e903b53c6b73db4692dff9 *2b26507400d6202c67f75257f271735e5bf1a936ebb86ce5929ccc824162482104011c06944c6f *e5bf6f77cf03337850bead3b55252180999e9e7e3f66e2799ee0eda16eabaa10f1badaefd3328b *57592eda846fb7b3d95f0e7991b1187e337cd9e4ab439b57a5f03c6f363b633777b960fb2a3b14 *9c89bbea0063579ced78dd320056a76dbe822f0f797bc7de1edbbbaa64dfc47f9ce5fbba6a5a26 *8e226215fcb34f1b719716b34d53ed59870f53e35e4ab4e467c40250006cb3bc49f0971ed6f07d *75cf93b6e11c40ee60f1bbfe1458715d959b7cabe76c799bd4845872cf1b013b8bec7745beea81 *d0138b6adb07ce9ba66acc8057fafd7bdccf157e9313eadd3669b8a80ecd9a0b1b8f15923aa98b *b4dd54cd3e22089ade11e3a538343c814df3755b35c713c0aecab639beadf2b29583da63cd2d62 *66fc065ef4891df34f2dac016be9913fe4ab2685856619df3044a54e24a7834d5ef032ddf3f072 *c6e02fdf303ff6595e32fd41bec73ffd862d80d331f224167591b7b05a07e6f662a901e977312f *33817213f872513f1c05aa7fde5ecebf95401ad852d3a122d17f6860c90438b20a34b922561f71 *9082bb410c6b5e06f26de43ff8a1fc10d3e4c0ff50faf16f40d5e0d620e221ec245955550b044a *eb2409c24b2feabec33fdba25aa5853b2a82c7a24a33dec8dfb86292f426da5ae2f039c24fbdc1 *1a06ecc2191beb5f8926489024f81f58f8bc093d0304ffce99214e0fb84616c0bfa94afe9c65fc *c496861b89f153921d61e57cdd61a0b10eed193d7ada9f3c76c65adeecf31228faa1a40fcb50f3 *695d54820721da25e434209497799b24717d64a052ac4ed7bb740baa602c19cfc836558796c1ae *666fde276ffffa3a797ff3d35f60a33ecc271600169e43542f8c33be2e52d047dc8800c01d5943 *7f36836f423063460365c140d408d58c8b35a8132a36ace3ad1b9eb69ca525fbe0c1e80f9e636a *3d39e72080b215cd1130a993c1c0a775e66019167ec4fc951f394cf55a8ebb004d66c678103968 *d9bcdcb2f68ebb2b8691051d0dd21cb746d0eb1ef46e196db81869665b31be5f017dc12a6c79c9 *9b1489ad6550306f024a001a951e8af6929d8bd003891c5ac62074f0e39fd6c521e373c99b392e *21005314d32954a5a760695130920d9cc2a4a9045274e802335c5aec38afe7484f24c56e921438 *8c40d5821fb26a9e97a285c5526238fa279636d5a1cc58ba0169061d79320168924500607d97df *73173d470eb249f43a31002ed520fb1bd227a472eb7a79e09ebb82d8e5f59cd8f1088971205813 *1a8a1be0e05ec1a7e2cf0085afe50237f6348321db2dfc0af5424b29ef60030a9e96a322eff2c1 *c1695c1c34e0fe9f54c60d433b91a745fe999bf502c18b8de573f0510546403f6507ddaf28a089 *f24bc3af88738238c3d70bf7d349a8b83da901c38920a009182fe4e1d854458bc4f200420fec36 *4fdcb7b6dedf39cf93f51e1797309d27d44e3d3f4b54fc18a01503dbbba9bc70882fbe87e9128e *793333032108e8d11a424c44f9d21135f979950a7e1a17691dfd30ee263870067cd5610ab9fa6e *128ad6760b31c100d18eeda3880e4463cca2cd7a3c8721601f386c07b6a2f9a2b6124945477449 *cff5ef7004374b400c720e7667185dc367de0555d586cc8d9a8659804377a085da881da006033b *40d641fddb6236ce755ee8b87b0060189b07e1709451208d497c978a04c24b15ac8a2004cf9af5 *d8e080090d623623c695cc910e477923439a277eac44a56766b22a51ae20c9d236ed2bda19fb4f *8850dc50a5bd4b81757212c34968b3d5b32fd85cfb9639a62a0eda13eaa0e786b14605666a1532 *7a60c92306ce069d8e0025c8ed1a361ce817e0aa0afc11b8f91378ebce085445168d700cf765ac *d3a9cfd1edb2c30ce904c8ed31c400c0aed68102e4827658426c86c322c87420da27610049a777 *e162f1cde540a460aede542ed295a0a190a38497a3ce4e6fdc228ea1859e393a114928d9334657 *0d637c2ee0d84d5f2c5c2e0161ba8f31d0a069652e35eeacfb5c7e02b8085e8f0e9ea001a184bc *581872dc22911db8e1936797cb88c6dd3e5b8ec23963bffcf20be385e097ac497330eedf7df7dd *ecb4be77e211a735647099646d2728900dbb5843f21ea3d3093ca5031896282c8d929d0b0c3f5d *b50887a8ac5185fada45ea0dc6194474cd1717116b20a359a02d0cad241674b3385e7ef1ee5048 *8acc3227a868d2300d7cb64a826f7b066c69cd7610c771115864b2ce7ff8c3eec182e579de7579 *5fed3840ed02a58ca9b9eca39af751d67976fcf8503510db365baa12d9ea0a24948eb264d76fde *dfbcf8e187e4d5f5bbab97373fbefb35797173f3eebd4b8edd03ba429512046a7634c51377b4df *054e7ed48ba426e764cd31690ea5afad947cec865ba18f4d0c43474d424634740d3200ea8f0bfb *0c83f7168b60c6d047bc56e909dbf3362561dde48d68a7d7b2a3310bcecf1ce133db0bac383089 *335b88c1abf1750ac92713d55e29c71d688ab020d507f04d103240f844dfc9189a74ca5e401718 *672735b1908527189df1c73511273e1a91766ecff64509aa254c5420627c7cee3cf5c36a6ba171 *c507dc41781ed2a6442c1717033c3558bd7cc7129caed41902a44f46b7ed9d59af839e7861c983 *d2a4ceb2b615225883f170dfa32a067584c0480a511f7979d8935c05d61a3d6baf43449c3956d0 *33009d59b2a0361a3badbae069bcc008a1547df447cc2eed56db7b55c89bb0f12689a6a290ac51 *1109a45c8d234dfeb575acc0d0f3595545bd371d0376b4307546677ac79a539bb058715b2f316b *5250c1fa402cbba6e80b5c75e43fb533130b385575a57d8ff7e98ecb9218f993c00acc60bbdd24 *77a328b3ab63cbf5d7a01b3892704cf8ae312fd70b861de3f4374095acc7d5ebd7f3eb37dfffd8 *d5ae3a7d912510adc4bd00d690b04b391df9b36747be5ec6ef29956c23041a48787abfb2aad7df *2cbd1c4b2e3554ac61c8997ef8789ca2865a86d12cf0c5e1895e2e321c005bd5c189ca2ae1f5e2 *593f2d5d57f531d16e2769ab11ba94a06a40553083627abb9e352a6e3fb59e4357cb0e4e856da8 *78480b49000bda3fa1c4fdc64a30098e7080b789b667d82eb046031f1f5affc49c4127c1da6af8 *65f34e8dd2f56fb3b3c2c964708cb3b929ea5279f4ff8abcb0fea104c1ddb9749df56c68bae1ed *31d914e9d64d52be486755b4f6191c0802b248e05a280d8c7f02ad15c1d01f1911f5338e4699a4 *d30f4728851e7e984e793fbf78f7e6facdeb4be60080c0182224a4d58a63213f63aba3dde7bc88 *bffdea43392c897b3f09eec4500dff9f03c8a9780a66bd49857e96b0b0d00131370de66916bbf0 *c68a4323e5c11143fd39ad13e99cc48491567c319fc8d1003748e27a2948e4d8ed88ddf3660562 *bba061ea219acc31212e9682b6b0a52ec216b402b1e56572c7d1c7f7fc9b1155538875f76ab58f *07c1c9d8a20e295e64191a64ff95e3fe70be2c4043f42c4b39482eef506314e2990c0af2252ba0 *86382f6ddb2618f897c8b72046b7cb50870ece3e549910fb4e7e345a43eb71240c9d2295cdee5e *f2d1998877da44f4fb27c35e9365dc31e8a25a2a7c14919c06a1e7435aeca84dd60bf17bc12756 *3554f23822aa9acb6eef98a2c7f19245af6423cbbd88dc3018b4f74f0d8bc07bc50bae5d50c4a6 *eb349df993633a326b63d5ef33c03b59249e12023dd38fdc8202aa354ece05c9fab012ad724c1c *341bd8324f8365688495b6403694422a75fc8c3b557a0b525b424cd98a388ebd41022b87f31176 *4656e06ed1a11f94f6c8e179de4bd91edde742d8751adddd95c260571a3a68c3b4e79f163fa02e *ce5d2cdc5143d93a635955fa2d35d6d2b243135642e5a79caf3f07499a9707feff2af0784cc36a *89fbc4e369d8464f765b2023ee5d56f45c2261496f908cc47e385d25dc4c94ecb55825b0ef0016 *3d51697405f7a5ceefb484f4fbfea8a208f024bc91832a9d4970e8761ace17054583c575346932 *6c3c7ef2dc9c3db10e26848f031b0482a3781a25d15ec424dda3f35640e59d9b9c62957644fc71 *fba956d3486903842be880a89e230e2bed1d722e0610503b6f2f975277fbf6a543dbae831a97df *6f5dd65891eece43015f0187649fd643c30a4a04c3921ac75109ddb738cdb16b0bd0b00813f8d6 *a929bbb5ef477fff3d9423c09c08be3eb4e90a4f2ed9261a208db609d5fe80ef868625b3c12025 *592e23888338a40518ae633ceb8738bc8ed171d00ee0b70c147b4b51617de480da48406b63c088 *428c28c482f32664ebb4c435ef80b7d879c7a5fc91a31d1ee0d2f00d6f90fba93a2f88a94500d6 *229c0a53eb23480c26f64711abe0e5f6f28f9d39978609f628e1b97dbd0dd62417782e4d259f8a *2cdd6aaa75ac3fe83368bd1ee7a0aed30f9e3a7ca508c21c978cded9574f5779f954dcf5437c1f *5876cb3e9ad5bebef888c781ce03fd2684fc6b09499f3b0b040024e3135f3319d99d0744a950b0 *f99a79ee60cf3d6af99c8829f3c152f0a60d2e22b3c57425a8d8e17f7d0129cff31e1f3d8aefce *c9329bc38412d550c185b4aa0dce03247d88d5a5de6e3de67dfd1fde603b6846062f41e3d67715 *5044473328f5ebaa41ab219d221d22c1d3a7783495d2df29206f0b8eac6e2491418356d865c5f2 *8945686a0ba274a7db342f476121c537e918b69b1c5f754927487651ad616810ce665fec1854ad *49b343753b060237958d8cfa9341f2658e3576de42ba1829bdfd6f7d4fa2ad54eadb9da47e5988 *ba49ac856c94f743a91aec40fe69b418dc25dfbe9b3250a40e818a75fe24468e1760c1e291e805 *282debd25de3532e3b12524824fbf874a8cbd89e221f0d63a49b3ba8214900e1f86905a217e5c6 *085b132a741b7b76a57f1813bfe6e8639100785ca3e105d5560857aa0cbe64e638afd091a73ac3 *403eafa2f3db239d07376276bb10b63b962b2dd8df7be1b0efff3e8cb7c9a547cc44dc406b0cba *1fcff74c507632043e71b0f8d9322eaa07ac052088372f6eaeffeb2ab9fae5e6eacdfbeb1fdfbc *1f8fcc2c7298e23c6ef71637b37c321e27f5d1c52d0fc14b38c300d3c0c4b0676cb127fe53ff91 *6afbe0dc4befc0141d397abc5326c7f14ffd4a266e10fb3eb03703aa3b343ece19eb08068c8cd4 *89f289c87e3409d2be5cb9e36e65ad23fa232e108f87af56683f325f1f8bd680c2d944483f0805 *0cd36c4be367c5fc4406f66809b2cb970df8139990a5a0c3307e909b4f3418c1940f34036895e5 *6b30afe0f577fc2820b3ccf0b8aca8589c1db1970ba950e64b9d0b5409894edaeb6c1acd79a7d5 *606f7e862f18d41e4acc0de4f15a5f987242c4b03f5febd3aea6bbdd1592548a8f2b70d54c2133 *a2579ae9d8cd4ef0176a7c5ca26508cd8505533d1e2a2b3ec5b21c18f43b43c79ce31d17779199 *b176d9465714b8551a5093b28d24915d2351b8474cd645e49c33b6bee3ea2418090a1285ca3200 *5c236416c50fd1a6240fd995d1213569f9deb1028f889f46a5db3240ed0b9fbe5d012bcc2cdd80 *442011f02f584e0ff91e43a59955d2ba69946e4ffa8509d9f98262c8442184a959eefb8731fd1c *b53ed4411902584f41aec6209f81e241aa26181228c293d025e2fb8007d021a9ce8e6c57560ff0 *ec375c86887681ae57174418ba4b6e644712531e3c9172248f3c6a3876e1cfbe0e63355d3a3984 *97460c7fc6718cb2373a31ff39af958c49719405fef07f2f8a9b72ac3b48086ccaf084c4c2d701 *e775d513936a44168f8e07b48f7fff33ae7faa2965af46dcee975089921dc4c5620871b390b59b *32f21f5676d9861a76cfed9b293655307a2238a818970cebba7359d7a5b7a43ff01a10995b9f7e *57f7b1be4c0e8cf17d4906e5e18e836d6df48dbdba12225f1547ec4909b0cbb8c41cf83857bd1b *04b2d99850f16489ac739dd62daedbcbf9b32549036233389e861b572a72656e9f49dc6623a547 *6d154ed61cd5d6e81ad413cc568981783f4d96749e0ca245e70ada4825ae513c455d0dfe2d2474 *e97ac33edde66bf62f78e849e24b079616fa3a23dd790a3630b79748f5eda138ee57d806ecbb5c *40af49d4c7006187a1653fe96acdadafaf50e151f024c19dc1efa563f4d5580569a297e99d8b4b *4d3caad5f012af14527b43be46f9ca7a470ce44e3a538f9e1542be1a3cb63fbaa68dbb9b444340 *261b91b8136c7faca863ad9ee427eb05fd9c80009a4d7780203107eb6c03c52817830d0da4010e *63ced9bb2b83dff2b2e40d0dd0a3215cb2df40d0b7dee18fb60141ec70598e340ea61930c984bf *bdf855b68bd1f92b9ac6a7d931c9127d37cde689d48b24d9a77939f625360d02b99e2352bd9adc *62e17d13ffc9bb44d598ef653f933d3c5566847cfb37f1bf9e10bcb6aae70578c642ef7e9f1e71 *f7be2c7101505f9d7331fb7f4412073e6fa84dc638fe4af199bc98468e1392aa120cb46ed57fc4 *e11fe9530e993008574be75f41dbabd56fc017d37eb2c314fc0eb9bebc2278a9824053a4a41b78 *9037b5f6507a211c4a5b29147d8dd01c4a047b9e502e40835c973600a1ef009fe8b0f6a805b346 *221b6b4b3379a4d84481767048354775d5c549957e4bef535fc52ad618f6d582f9eb22f7ed63af *2fe5fdf188bd3dbe3d4214d5aee33177327365eba7920ad758769641375347d734fb4a594434e8 *a98e660741550f53b193471d0e8045232f61d0e90996b2ae23db2b7d7bd842a5e03de039395ef2 *78309fe434d49519d52b8164883a0b10487ae1ecf1bf33f6a255f75895f056102fa9fb6b52be28 *a757b748f6f9f6ae05e1e5745461458ddc7bd8053d03307dcba4ad0829acabca6b67ddd1bbd9c4 *a96d733baf770ed6b7ce97398ff278bc794699f6674b2945cee91124ad71c5140ac850471f1bb9 *e8caa1f01399db702116ddd5443a19e23ff8332b1652f76d299ca538876adba93cc5acd211bc7e *0501835ed18f214e334534826466d3e99e95e441664d614f988787923c98fb1346584a08e80c88 *daa09418f5ff4650b62fc04370f7695ea0ec52a68133aec14dfdf7f55b9ae931ecdce41086e358 *45459e112cd4a60ddd2eada474a9c3ed205bd8c197671500a36b504e8d1084b718f39a4525e9a8 *4f24ba46d1d527bea63e11cc7e472a276881915b639a36b1a6b9b407b26ba0b63e3b51f4b6d96e *55bc9d62f7c8095fff5cf8448034cbcc33ea2aba8d7151b2caaef76028dbe073a4af29c8505a4c *64a1d2accf4e1c29c13b38ceee285a768087831375bdf37ac4ad913aa22a13525c6cb68281f154 *f5ea642ffab34a58643dba0e67274ebe58a4c5165ead08986f8cf60d1b9ce6cb820556e8f06719 *36849822df577986ff731064939213580e3396927dfb27b6ca5bd5f1d5b0e4e5f95b254c31a846 *f21e2cd2d5ab88d9ef5e5d7dffc38b9bab57cb5b4ae2f4ec70393b459ccf00da40c9ebef87a608 *ed4a6423b3b07e5bb70c143ba95065992f143540b41bf8d94911dcdefa6920dd2920e5076d4467 *67b37f00504b030414000200080045545939e77b0c7da7080000701c00001e0015007365747570 *746f6f6c732f636f6d6d616e642f6275696c645f70792e70795554090003824a0349df028b4955 *780400e903e903bd59dd8fe3b6117ff75fc16c7090b4a7a8bda24f6efdd026d73e34480fb9f469 *bb106891b299954541a46ee314fddf33c32f9192d67b0714d5836d919ce170e6375fb4b80c72d4 *44aa6aa0fa5c1275552569fb0bd5cd79d78ef24298507ad2a25355232f17dab3ea38898ed5c395 *084b1cdea922b57f5912e3a7276864ff898fbac62dedba53278f7e167fef764d47950aacf3c0b7 *d8ef083c777777effb33ed1bce48e6e732e24424fa4c35117dd34d8c2bc2a8a6a4151dfc7c16fa *4c06da3cd113573bc3eaa7338f57d0911335f046b402787f12945092398a1ad765b0e4345d78af *899624535c4f435e649561f6917337a4a58463a302aaefe06314475081ec33d2ca915c24ecc2b8 *a6a81a2bc65f3a254b105c2802ca51b094c816def9d6f968d7c96745ae724219acb8577294a04f *e4950dd7fa22d904e7016961bd3f00bc8ade3055f4021f282891031f29ca5679d59a6fc65b5049 *4f3bf12bafe5800b54ae78d73a13e013cc526daf0c0bf1ad8ab5480e768c45ba4916a4a4fc1763 *cbfa55169b0b41e3fff96f60285a92e1706d0c6e3462f8d435138daeeb3d1cbd4b871e6282c75d *d0cf38f54b9580fafe8a4a21ce0065805b694cd148f094086f603fa344f09591375a8e576f0027 *6b2fb5535f30aa61348f3bfeb30cf88c60dbb1dfc59c165cd2f566d29ad3cde7c506f5e65e11ad *5f9017afac309689b7f89afcb3efae08f101144368a327da1190d72aaa249312fd89c8692447aa *38311102acc738454f79469787c9889f9cf430e9d9afab1453c7abe6b5db6e0e30d589ebda525a *10973e90d448d048c60fbf2f8a1903750d1454ebb1aeed7afc1d010254872387438ca13dcad7d1 *5f853bf1a4e320b456dd4c0aa8f7df16a228ef3c9d177f72a65fb07283f339b7e58eceb560bcc6 *f9df798f9183930e3c106d90e5ceb8a51a1b709db1b4bbe12f64d243d051454620ea00c718e7e6 *281442c81542088438d172a5230c397f7f780c231846dd6ec1833df8d0e1f322c5e8d7e47bd9a0 *b09e4801581a3ebb5daa742bbf5732aa22e0568cfe98117aed16df3a53fa3d169e9dac0eaa814d *5cfead7e96a2cfeff387c85d3a717c246f3dc74a0d9dd079566545b1dafd7bde9f20bd81219099 *c90c10180762526c2b27081a6b7881257a90003e7377e8e2edbb25e78f864f38070949fbc82d4f *63d984288ca2d992193ffb805bef1f8d25f13d981172098b91e741e5ad52acd83d2623485ad161 *e03dcbc98aba9c355fce5216a458ba8ac942712a644b7708b17d162d71901f6747b4aa88409b25 *75091c3d732cb2d82f50c7a8c17c95401193799695e0136b7d0060b60982bc4035932501c57b9f *3de78aea61bff441ad391c124e60845d7add7bda9cc3a233b5098ffb1a10e003ef1450483570bb *7ce34aafc64078052805f95da35971ab3cf19a60ddb8baccddc64551accc9bd41537d06641a2a2 *c8b891c7d6c1f1db459e17fded4c0fd94cdb60f083ecf956987b05c1c17de6b3a4b6f07e86ab71 *71a0dcaff0a3a1c4e57a199836765d43cf62e8c968df5303092ece2ddbe20522ac8c8cdc2f1836 *ec593af9c024c126abdcb1b0c806b4e17897163ed2d23094554959e94b80d8e89bf5d62281a894 *ffff2569a907288cd003460e5e253ef1fc660e2b1e4146f7b24bf505e56ded5a8e3ce3a7532dfa *5666b3f9b8a89b0b8b93a46f03d84d3a1737cea803cba3428b6019516d0097956d04459b019747 *c4a905b086917f5aba133eb263c8af4d069fcf988198a9acd95707436b7e1b40a0ad9c72d7cee2 *f661ab095612b6969cade1df2e3d8d416a69d375004d765b0e61f37e05f151619f0b5502f48c85 *39467b38e0b1d744f840c4d4a29fb8459cd0909aa86b5f4a73fca41ff3cfa5ada07f04dfa353a7 *f3803df6584296f0e9d79865f6d2cd9212a486561f767e0217038cffa1faa3410894c7be3836ed *a965839dc85555ae47fef31dacbedb5bc93f5cf519da66a4a7ddc829bbda84833d35d6ed7335e9 *4479a5cc7fb7f0c639a3a3541d8f2a5f1b502082099bd1b0c55e167f09af9f50a87043819d3b31 *e6f2dd0a422f248f12af569e79d7e1372e6bb2849969f161587a726c7197c781560974314ebc22 *2437db5f38e80b4095166e3de70cab3ab080b97d10bdd2b4ebb0108d2e58246112a0a2c8cff208 *1e807708ddd576b85a26fc4ebe4ba0403da232886369ac4a7c50ae8aa5b237e22bf9923ead8032 *685d7a7e794a7b2d07df4ac19bcc36b3f046511bfca639f3e6c947ef65e91905f545098254c430 *8735218940d35c434416baae8d348c432b3df23a2c8c55afc7eb569e4b53576de4e3ecc10dcc15 *22d4577cd0e41ffcfa7e1ce598b242bf8fae185022a8990e918d3ffbdc9b174d6bb980b9db66b7 *ccf97e7b50c8760910d453dfba7059f337e8793acdd8f812a618d39f4e8783cfff965705ee336a *1be4ddcc5b6c09d7e1fd0861f069b646a7f8670a8d19092278ee66ca6cfc5794c0cd15da123699 *4f95503840f05dd6328b0b618e7850fed2f73b3f6e60928a4885e28b05f9e2a0773f2c418e31e9 *d8f1cb9ebc5118f8e8da0fd08535c6b07ff7774b7ede41f0fa8949f06c3c5a03316bed2d79f115 *f9d071bc926ac52fc0af5af3cb72bc1836f7aee16e18031fde70415bcec7f8041f1c12ee0c74b2 *a568fedab8806dc89bb9bf4de356546c554d2715cf570d5062748c3238206edef76e7ad7212a70 *67d77d89d9ce3d7ed38d0e6cbbb5f67d5812e2fe263ae8effe771df6d6f5f16775da2f126e77dc *47cab6aeb36eb5d240e2bbdf7552b1ffd860f10c1cf2cd2acf55125fd234aff8bc84317b1cbc2b *afd0cd9ff855e53016876573cb1421c58130cdcfad4d8f3e2f9a42c68767dc642590a96d43898e *9be008fe888bd3b67c576081c8042889b06988b22d64d99d6920b71a8afd2eca105e7342d1a38a *e7a3e3845b8bcf8b761f311acc216f11eae6d97c877f78990ceafeb451cd2820b1fa7faab06224 *2096ececf5a33eefad8bbd810cebfea20aff5b41e899a06cbda7dd33bdaa7bbc8ef9dd378a0f14 *cb3466a815f18a70d5ac6562c2a12f684b72df7340cd7dbab1aa5058884c4117c1e777bbdf0050 *4b030414000200080045545939e60fbd5864010000e30200001e0015007365747570746f6f6c73 *2f636f6d6d616e642f736176656f7074732e70795554090003824a0349df028b4955780400e903 *e9036552416e833010bcf38a2d3d0424ca032271ea137aac2ae4609bae6a6ce435a9a2287fef1a *0c218d4fd6ce787676d6388cce079048610a68a8024799f66e0052611a8373860017d2bb1b0661 *e57fb8ee967acd25378695ad2486b6735663cfa2634067db932095659d114440e2acb84cc50e2b *8f19f0c9f3fc835148c26f06ad4a1204c181008d46312b9be95251e77186a1813c0a034de36850 *c9fdb3d972dde91e9c0717be9587c5df22b78a69f0932d48199deccc650e88c563b58e778fa729 *0a6f84e4959814f1359436f5af7fd4858a72a3b39780b68ff4eb2ddbca9a9d758304b49be0f18e *c6833a129ae6b0e677383ee08b17cbe2938af75790ce1ec21c37b88907ffb56b282f8fd2b13923 *5541beabcec294d1c63c4caf421aa495d885821d94350635f048cfedd9222b344d9e4680b8bffc *99b7cf217e1e8e5e4c6656afaeb7f2933b7e713eece4ee73f7abe615d57175560caadaa4aab425 *7f69799165f607504b0304140002000800455459397f27593604030000e90700001f0015007365 *747570746f6f6c732f636f6d6d616e642f62646973745f72706d2e70795554090003824a0349df *028b4955780400e903e9038d55db4ee330107dcf578c8a2a2722b116d87d41f413768576794328 *729b496a70ecc876802ee2df779ca649d31616ab527d3967e6ccc5ce19dcada503fa3db6ce8380 *27d516158233e0d7c2c3b290cee7b6a9a130e834f350b5e81cbc58a32b104bd37a026274060168 *e5b2f5d268d0a24610ba8067b48e36529065c00156552e75696065ea3a00c8736524d9f20684f2 *68c91401eb94e8862676a7a83b57e60536a60d8b652b5501461599f31b85a08dcec83afcbefde9 *02b92043a5d4c4d9a4635c44f456ac9e8087984aa9d041692cb48d32a2083a5ed6a8c1b61a288c *db8d5fd3dfcd25ffc1a3a8b4a6eec2a41895e37d047c4c91ac1b63f773261ce4c32aea8fdd86f4 *1917452b252893c3793c4293eb28021a059620b5f45228f91773d384e4bad8a12a0902fd1879fc *23f0800d2bae4d1e32b5805f46e3d613958774f1be5c37338a78367a3883bb2e69d34c09bd19d3 *18bb046af38c454871e7a51355483b5809d10448bec513260567572914cea7a0f019d5e2622fae *83d8fe434d263c8a878e168b8992ae2389c65117ee45fa75cc827e76e0338c0abdf0dec6037fd7 *da29ebac759dc3d2fb87848ba6217bf19189306236e867e949c4819cb0ec24755a19a59801257d *af36f7d7570fa74d5153f146f8357fa40b157799d9ed2c85c3702763b29f24c9113d19fb8d5aff *b0c1ba24d07edeb77ccc76d7987476ed81dab516b76f80d9de7ebad86d93799315c2e3a95e1d1c *4593b1d391d7e20973d7e06a2cfa9ea63e1bd4c44725e254bcbc3f8fc758c9e748ea67dc62a3c4 *0a6396b194e56cefa29063c2ede93d2968c02ba9f1f28a186c4eea69312864e7fd6c8afd7e1a3b *aa9c4a21f4fda46cc1c820ffa8a0b33fa6b52bfc760df3b7508ef76cfed6db7de75ed859fa254a *aba9de95c2229f9027dce413150e7ddbf06643af98f3f414c329bf47a02c733278cd7aa719bed2 *87a17bca33d2232a7a65beae61ded93fe5787b0299fe34e28f3c6d2b9e6e8b39bd52e19d0cfb14 *5157bde1f06152547aae1d5a1ff7f3025fe3dedaf9454af2fae6389204b35d4bed753785627b6f *a7c63f504b030414000200080045545939ba48756d3d1100002a3700001e001500736574757074 *6f6f6c732f636f6d6d616e642f6567675f696e666f2e70795554090003824a0349df028b495578 *0400e903e903a51b6b73dcb6f1fbfd0a84ae86a4c563e474da264aaf9d8c1d673c6d1d8f9d473b *927ac7237127567c0520255dd2fcf7ee2e0012047927b7f5641c89582cf68d7dc09ee749de764d *5bd7858cd3ba2c932a8bf97ebfceab5dbd58bc143c69394b5896cb56e4dbaecdebca970c419608 *020b82a76d2d0e0c76b2b4ae5a5eb5d2f3bcc5e219fbee3697acacb3aee04cded65d91b12d6777 *bc6901b26c9236dfc2ca43dedeb27787f6b6aed867f16f1779d9d4a265b58c98e08b9da84b3610 *c9f4ea4b45ab5a46ea803460810b518b1ee8b9b36cbe17f5dec5db332f11da00d22fee19f8b701 *0086efb968d7c0cbad0bb7cb0b5e58c85ec3ef7fedf13577fbb5e0b2ee44ca7bc29a44480e9f7f *ea40ac254a326232d9f17595943cd2cb70a0043544ec7ac1e00fadf7df0e392fb27591571cb67e *5db5e2f0aeceab366279cbc59ae38775835f60b9add74823e2d6e2b0797f488a3b20e53e6d45b1 *58a445222533961168f187974442c6652af2068d83ad98977ebcd5809920824e027135219080e1 *8a3ee29fc0c73ddb44f2951f319fc35fde6072686e495ee5d57e0677cea5d7e399f9e3b120e3bb *a42bda4b9044c3ea1d6b6fc14e4923ac159c875e185994b4c97e29efab25c82447612341c28f46 *67785f651993dd56eb831958f6e6151cc2cce7aa2bb75c4cd1672037449b219f880a3f30d92665 *c3021eef63f6d9c5c5ef2e7ef7d9e7e1c7a0db76799191e0b688f043c3d37c7760fcb129f2346f *19c0209a040e7a025b554f587fefb2fe0abeb784ec8800aeb4bc6f26b80ddfaf904c8527afd2a2 *cbb82d81c9fe1b653d5b70609e54b6018da43951dc0d6dabf81e22d03dc77db0e797099397335b *a35993ea79d05be8e75f17fa8f72911db094b77952e43f73436a2079b1d34e44be0cbf52f8459f *049aded6159f2e1ad91e5b477739ba483e32b70874afc9608eae8220d6bd3e57ec620a41ca9aac *6c457dc7abb575faeba490ce01f7b05f9aa37b91c9e4be0f6e2af22070c44cdcb26467023a6a53 *87309ee5ed1a82c42edff760d6b760a44b8372ace15f7c43b67f3951fd2fbe2b16fff24219dc5a *9b83f995240bbf1b51c920fc75846ff82d5cccff3132d9e5d5c888d85356d4df200418db5139de *f3562d85e1bc3e2c824f59a201dbf3cc7c850dfd0eb876c6e2c38b319808747aff05fe995cadce *a4cfce149f3d63914b85c5811263aff2c714538e1f92a2e35f63823026452439f8cb2b736f7f4b *5225b82981de9bea1e849f8dae364672ae451f41e501eea5c74b76269767d2636713344f71e230 *d2ff9aef1c2f87fc0a1d66cc10dc80bde646ca6e92f42ed9f335008c36b89123200cc0d02fbf86 *682181ef4735a4489d80058b1cb5af929d209c6447bec1e38747838f95788c25119efbfd45ee1f *e7fa9315ebc9b99ce7449f0460989ac5ff829427182189c6b0a17d9abff421588ffd48bb6e7acb *d3bbb513d16c4b7fc63e704ce448d2bd45ec4098985d6c79c57770f342b291d135cb74de292d04 *eaa6a7642c625bfcdffa01b31cfc95b7693cd0fa6c2ce291b24bde26108492d87152cbce6caadf *ecd803c7abb4051c49d3f08c25a2ee20a947ba0be007894ed8bbbf7cb37cf3f6f5b7114b20b7cf *f7b72de6f40063e14ac9342b80de418a7bcb48687507e497c91ddce6602fb0238164a13a308959 *4952308a37606c9841f0ccc206a9099260d8a0ca642a80269b3579cccce1f86c4d99bca5638007 *e7a9ea961c88aa97268beff861b51ae93d2eea072e82706c6700ba3e21571794e25a66ed1865f2 *c169ff7f82a9feceec2f880701c9feba16eb8c171c7e425fd3f7e603487db83d23ccae9208ad33 *e52bba942d3ea188fb1131b10d426d500f1bb37383d141a14761f2b2690f8335812de93d24e26a *49eb5070603d0846d54279824b946f63ec0453da6c14d9446cb8d9c4f3d80813033990ea361b64 *7db3d1a81d9469524021345cfd9b8d2d903e85d8c4ce1936565ef5a813387259373dbaae2a38d4 *44964cf823e8030a2b30fd87db3cbd558e90402925a848213cb243d7da8214465e538be636a960 *09d1b10084ba21b510453b524d34083d73215ad1f130b675671b3bb23613282d89cf1986758316 *80c4c452c56530938259a7999b891c0b5545a44e532828c563144f309b577b67ca4521ad530119 *caf500e480fa87254589e79af5045538f922009318fb2907114fe953ce376736aebf3de1651fed *58a858e419ca6728714557852cd941f10e92ac201ea76448ede06c1b3c8d6c00aae84c855d902a *2bc138f10a02ec7906a914567e088a905b8e5890ee960f52d081164999b7245416dd771e6e4514 *a004d87536d5c1e83e552a44418ac31a381a8b7987f774c3ab601098ffb0f5c74ad3c61a8ced52 *ada4452d796029641af7668c15187ba502d87f2dfc7999d0a94a28deff24087030882979753767 *644e6eeda4fcca9e47bda023c97e9f9cb3732bd1b70e02b2660b8af20ebd3f389635417602e116 *2435770bef206db9553510264d43cd06018d3768b393f654d0175e4af342fa4ea4519fe13cdec0 *259d64414fc3aaff299cd9a14d027629639bcf11f1e448c384a3fcee1b0846024a0048872ad540 *28f2ad8cdbc716559c63e74cb24685774874b60756171910aa32399bfdaa389aa2d2f1cc730ef0 *46d6e404e4aa086762bced0b00e124ef504b666bdd840cc6d636694e0cd98b3fcdcdfb1a774c82 *de73be1a03cd6e1fb517f0da085cefb0b9f56380f743bc12dd1593a25a2124bc1ce83f07069642 *95947438ba857d7810ced28715bd73d7a936439b97fc4b1b3d7e88c1fc77f843e02dcffe71569e *6596f2b4bbf669f8b1527f42d9c4ed67ba319d28045671826353bb41c5fbf06de50557fff46ece *43cfb709b99fc06245821743865d2fd8759da93d23afa5120acbc4082d4ba20b831ab0671c0c95 *e22433504aa330081b70fbf4c6c5af579737d8c5bb992c62c737af3aae3cb1aa413b15a458782e *465e88d000206a707dea4222ae49691c0b5ed6f7dc58d0fc5d34f24a625681473e06a99c43341a *efa4a46705b791e0108a4e5e514eaa0496928856e21824f0bf50263df9feb91bfdac33cba409c0 *da62d91479ab5aff6a3ffe1ef8d7d5f5e3457a5db9142b232b08cbd5c50dfc8732dd0fd10d9301 *3818e901bae614056605e71b04bfbd9949ef20090733222a1f832b88ec4176f5c54d484644d98a *ca16770c6ebc200bfff405b93ec2dc9c03d2d0c9d1e664f6c73f3f96c5ac7c0c85e412b1e48948 *6f550a11efa10e698217a1b224e29a37b5cc69b0f0fdfbbf7e142b658f4631542243e4531459e9 *b6a1e3667991a7f261afab044feb7d95ff0cb68cb6f7a9b63c3ca94cda2f99bccb9ba64f38d048 *c3ffcd9b5caba479cbea488b853aee00b0d6ca27199ffb9ffa24486cd892e1881a9c1c56a6fa43 *ef57bb6c2d1a94e1ff19116888d6f6d31c2c05417634cf894862983c8f4b813e86a25ecdaf51af *70cb6b4d9ad58a1e0ebd03c334cef3f0d2b66e9170a6733bdcb64e28879cf21b5e71811df40fdf *7efffee5d71f28a528932adf7128f331ceda89a759e85b69a77309cf426add4465497c6b54d89e *11d3c4d1068f7b825653126c38cc234337dbd013d1150298df06f9cc37d71c4141ed62b75cf0d8 *ffb76ba8509eea1502c4a9d40b979dfef6d1bad65b7acffff0f93984e56948f5ded69063b07f80 *8930205480c7cfceda6f136c47e83665de4aea407f391d77c221d4bd78c88b827ce3a11677e032 *02111507357a574f00e2e6003ab8e745dd78315c1933d4f9ef0a8e8214cadc4ced877f6b94aa57 *d2887a5bf012b0f8e74023703b9d9a81c49c0eece278c57e648a747cbbdb064605ab00410dc85c *0b024376553f98e9b619d007e607ad53f03afc42330bddb74c71a220595d1507d58580301cb1a6 *485a0ccea0ae8c4316816537433b510f228c996377b5ca741902774469d90e5510203b00d0b7db *b5f0317b25ea5fe78fba98a0ee3014f2904d43b0abd88f7064fd304e761011308fffbbba5cbe18 *622792040bf6e38580e83861e2f8f35c7d41e95fac5922a0218d556275a34ba6244ba8e050141a *c62eef6f5fbd7df3faeb0fdf4139ed9d1a9acecfbb3ab83ef47c18871f2fc6ab0d44233efddc93 *468a9c2c53cf6a6d05bc17c7a7702e510db0fe74516d45c4defa261d03471323cac3a36d3d0311 *84643a60f36507071112266bf8e04350d8abce1af5f8ed0ef9883a4a66a09e76e3799265bdcc83 *53c6a36a28adeb399231695e1b00f718521edd31eb622ca03195128ab1a38b2ae95f671dbe7d80 *4326f34c576a6e7faf3783999b5bb5f34cf34c050a90aa3f22c1674123b8ecca640bc606111c16 *0aead80d77db81f963a1fa940efb8e7cfcd034eb46e9c1d05880f89c11b691b1f8f36d3d55c1ad *263a87af8e4e256f3e5941aa7739999cd3ab0bd4235098f240c14600aa1263f4630577e34c051f *79da014b430f3562630b57ad3419cebfbc607d2b722409e6437def9902bf77164ba77837ab085c *cabd0ab090bd760daa08075b5202d225e1d2ed7bc9864752ae8b020e3b99f5e067f018a1bbf9aa *ffdd55d9a5e71a3f228b1d62ac9bc2b605377ed0d629c411fbb72e9dc1133f0276905d9f04a746 *e1e48df63b31fb15014846431eb935e828fed8e2511af2f4c4e1c9c0475e6279708f2c5fa7653f *1fc46cdd44ef6cade7af43bbd13f2615fd2209af4ba8eba0427b0e551798cb2e7f5ca913acbe68 *af4227784da2877972738a34f57864a08b6a25c806677bad84a32b0af5aa63714cec635e7054d3 *3343c7c5aa5b3bae2aff1b249a467b73a33a4d5ca6496362c4c72207d073e107ef5f7ef8f7cb1f *3efcfb1a2be2d03fc728c3720906b8e78fab17987c8c4732cc1a2b98e7a9435ed73f70558e8ee9 *30958df4522e87184a992e8660c2c87c83028279a29e5ff29f3a5ea51c2b4ed402c609c483f33d *ecc5408a234a5029e4ed92a276dec60b3b02cf8c3fbc87ad170e0de7a478480e5253f0eedb0f6f *febe94eda11882ffc29e9078d795a76a989edd70e174a1ec3f83b84c091b8029ab7e8222c7199e *cc4d8126030f1d17d12926b30ef3320153505c9f7bb530018efb27ae9000df53dfdf785cbfe2c2 *4e91e88e7f91915e998544ad8c008fbf5e7aa69501ae4db69ca92e166877781e0129964ad5472f *7d1d346982dd04accee84580db9be8c9992a6866064391a3704875589f7915a2a561046b4d0892 *1de6cc1050c00745e0ea2af27fce9b3502f911babe15fa555fbc1f787c39fca839c15ded61bd2b *92fd8819f5dc39d45609d7e25a1552725d6f658d938c278cf3a3e6d4f3c5b9f7e357efdfbe79fb *cd25f3f5a1d82bf1cd33119aae424a65bd45bf887fff0978db18cbf75265827a06655eb3c94fe1 *aa138934bf9b61364bc45e12305c5eb1377a0538b8e6e849dc6909e83721aeb61656c3f80a9b0f *2a4658efc5834cdd7263b2b1bf05d77aa8f2361ad8211f11ac53d75fed7278d34fc7b0a694f6d3 *19b23c9d5d605fbaba3a9337d7957edea710b379e2f03c204319193237fbcac5b305e5d933785f *e3a4766c68cbb6ad9b021b1f14029e922eb8a0a4ae670a1932a48377fc200733baba334df7d88f *5e845717e37e254aef0e8536097b34feb4bf6862069f52985cf615d3c0c19258a0ebcae1bb9726 *921e52df2934711f2a22a11081153ec1f9937011fb0e1fa1d8a23d093d7d7504e04e2393a40976 *111804bd4ceff135e7a9e864b0456c084e101dd43eebe99735e0d4280791d19770e8d51db5bbfe *ac813ddaabb91c0945b7f19f1037254b133bb127e40bc3522ec969210909201b428c2a11a14912 *8ed7dd47a23a0c70f59689526d05369589891837a3e99fe4a992b14931d0a8793375782b15b0a8 *34bb6c5a2f673bfb847b65fd439658bd9c5363970919e12924835af5c02c328b31e94a06e1cc4c *af0f572654516f54bd4656a73b699625b551cc599cb6209a2b1e9852ad3f7da367f9d691718392 *20be3fa537790f9cb20b7a51c996e2d9b36790a2ee304d1d72140c4509dd57fa895ba5ff0d50bd *d3c892b97fccb1189e5e4eef5b6bfc6e3dce3749eeb01af9e27baba641b3a27c191b054e0a83af *1d55e9403f06c2fb415174193f5f0a1a505fcbe7bf81b8871842d7fa68d3e59137608ce6780831 *ccf216d6f205c6ca678bff00504b0304140002000800455459394eedf3090c0500008c0e000026 *0015007365747570746f6f6c732f636f6d6d616e642f696e7374616c6c5f6567675f696e666f2e *70795554090003824a0349df028b4955780400e903e90395574d6fe33610bdfb57105a18a21a5a *8bbd6691d3f6d24b0f2dd08b37101489b2d948244152f968d1ffde37fab264c959ac0e8145cdbc *79c37933642a671ae665686d30a6f64c35d6b8c0be99a6c975b9ab969fd3dc1567f522b336a87a *b46db5cd8be76cf8d4bb94ca07b299006b731258759de76e58345e307fa615c1ecf32973d29bd6 *15d2ef76459d7b386b1ff2bacee4e994295d193ef04aee770c4f1445bff5162cd72c85d581ac28 *8e2c8271efac328e85b364c4303f4938ec3acf52fac2291b94d1ec81fd2c4a8fd17ae932d36178 *801cbb457a783cf03e00e221162c2ef127bae0053366869f51223acfc79159858f2aa8bc56ffc8 *119f7b595743d6f4d06b3aee0e8011ff77a3e505a252fac700286cd66a982b2dcbc972649fd5ea *291697578489c5e22d49263ca9b2a22941a3033e0178645066455f341e8d658c2e7e4fb9973a6f *243c170a487f85829c7a6a89139fcce9a144c5f0b70f4b35cb0865b1f0229d87f3e49b4c663cb9 *8ba73ac7577bd2c5079d1912992dad42ee9023ac8c4f6d1ecee9df46697e5d1531a5972cdd4d1b *6c1b3ad5cce0660a70addeac18d6a7ed8c476af1057de235839d3eaa6aa2ab3ce8f1995102ed97 *4c9b3033a9957e5ed8dc2fea307673ea646330138293726e8e7e77ef19183f748bc3cb4c32f58c *907c43bdfd07d1ba2ff24d166d901c5ead267a62113011d11fc445e9138beee658f33da024e78c *9671962a94dab74e6653ebf24dd005b7eea530f69df643303eb4f7f844dff08908ee3dcd81bd8f *d89ef199f404db8c916cf73e89cb632e49cf938b7ca8ff068d5dcbc861983bbd90e1c56fa47ded *f48911eb6e065ee62319520a5e05791846a39f5c08ce3faba691d0992b44e9af2bfa0943aa0ed2 *31d0607dee87c2e8e04c3dcd5e25fd572a18029df3c06220c54c7996d7aff9bbbf82cb59fc393e *78697397075932129640c2a7dc95b5c471622a66eb3c609c3729c354f6a107bbc2196d0edeca42 *55aae890d285151d0948cf6256b338f52ffa3366e3b7bffefc1c2f931c3407de290ae6827f55e1 *ccc933618000e1bb1106366bdf59c9ba01bf6a89a186696eadc450a06d5e18e1e04d4bf9d49ef8 *5a798262a24daf7d8680589f969787fc4dbd8ab1e610e3ade772caad247c253beded38ca329274 *67edb3516b7cd5d670b81fd84f9f20b26e040bf9361fd8ded6d0ed5bd8eee8d189dd3db0f800d8 *e7536ac339febab9e9a3f5c59f76bdbbb08c578b7edf23b136fde144aa8835e24c6144fcfa1427 *2b398223c988f660252370070aae71b5e4944b973d8fd3f9113e9d212e4720ba52c4df75bca566 *f85124006d0bf682c037bf7773f02b6bba330797903c040c89779f36a66cd1a9c7bd7b146c8ff3 *b349beebe826060627a8f4672f323cde1fbe3c2682923dd2af4dbff56a95be3a48619b6a345c55 *c14e68f92a0ce6d136a1c8aeae03c888745b39ba737c49d22aab4d91d7fe18d3cca41b14d2bc9d *5ef4cb9ed24a5c7233a692b3a0c319bae060459c65749fccb2d4bea3dc37a11a209110014965f9 *80d6ac527485442fe76d1df89e949538daa6e1f3b8f45154da35ded02c3c3ef6979026cd70e016 *c478868e3428ab2c8b050c6fe271db27a1596307383bb6a94df67c9066e2b7fdf7acaf105fcbe4 *aae1d2a2365ece0fddcd11b539d1fefd6fb7d1b8fd04985d7bd369324e78fd3ead6e2cfded79d6 *d50b83d73352deee56f0395e5a08b57a04d497f5f8a0f167ec6c57e0f850832bc78fc52a4e0517 *7842e728aac75a8bfff0b08269d06583c9ea66c7ca70d2c00f07c3ff504b030414000200080045 *54593999ec28779e000000150100001e0015007365747570746f6f6c732f636f6d6d616e642f72 *656769737465722e70795554090003824a0349df028b4955780400e903e903454f490ec3200cbc *f30a4b3d24b9a4f74a7d42df802c301495a5b221fd7e4995129f3c9e4563c725810d525b0d5156 *5352c26c5726df6fc410d2bb7085815140ff815226a2c820e7c12c37057db4b6c5680df7d3b31e *37f5135872c02dcf42d11d9e7d2ef0c017813426a84facf021c0be3709d9c3863158308d997285 *8c89ae1bb1849221645746ca1ebaf6747d3c354fe4bdde25d3324467b1d143a92f504b03041400 *020008004554593908a45d7a9e080000f91900001c0015007365747570746f6f6c732f636f6d6d *616e642f75706c6f61642e70795554090003824a0349df028b4955780400e903e903a5585b6fdb *38167ef7afe06a10509ada6a9b49a680077ee84c9336334d1324192c168961d0126d73abdb9254 *53cf62fefb9e438aba59560bac1f0c8a3c379ecbc7437a9e170ba54b2d121546799ab22c0ecb22 *c9593c995ca545c2539e6945f48e93778e90504b41892ad71513f1ed1c2958f4996d39d139b9dd *df5e05a1e77993c946e6296934712973a988488b5c6af2637f39ca25778bbf59f97d1255b0e7cc *d1988f1e855b4bf2ed44cbfd7c42e06748764ced12b17604697c3ee15f235e687265662ed0b816 *3d10b469ab61aedc48e5d167aedd579130bdc9653aa9edcf36627bcba4e2d2cdedb42ec002f7b9 *668aff7ce6be4a991448edbea37b2d45b6bdba214c11379e4ca2842945acd3fdca49c17c62cc8e *b98aa428b4c833b2205e1599b5c898dcf703e459967717976ffffcf8b0babbb8bdb9bf7ab8b9fb *1770523474fef265b12f4458ecf52ecfc25c6ecd37b57c256c6b951b550a381ecd24fe7c2a7991 *2ba173b95fd029a1924eeb45b0492624df9086863cc67cc3ca44cfc9895a7ae464c0a460da12af *76f9f34c725580660e0a3ee5196f69a09009108b3dd99449421c1dd1fcabb66105c3bf7049bb32 *c536435b55db56334b3622e10a9d5679b3541008b22db65d0922867a11da6e59e0dffbdbf7c4cd *a2bb6214d2886cb32fcd689de7096759dbab079bb5962e5db8374464420b9688bfb8e3f3154f36 *c1bc168e9f21862b6329c7e0d2ee5201f9f49ccb7860a915a5c345346d55fb77415ef59671a70b *72c91248e9ce4aed9485895db3970d24ead84ec4a62700f127cb75a3b0a1c59f6442b5e0ebc648 *3555ee77e84c625e974a6398c86c6683944b18d6aa20763bf6859314220409e07504046d137380 *b9ec8b9050338038abcf7cefd30f37d71734e85917810380b8607a17fe3b1799df703e5a8e2504 *3cc4a293110d3acc568f61e55f6183ca97514f7eed6f9665799945dca77f9adcc5ea477814992d *881345a1ea80ff803d32180666b6c12c6c7ff8ff3d60aacbc7e51c9dd37659f5c95cfe7d83acc9 *4524fcfb98b190b3808b439b0197d5b9d2089b0f6a3cccfe4afa966b400b832033e34283708d69 *e36a9d474694b60a754c65eddb7185ceb7230a5be53fa6b08e5227d7bfe9d043479a9943886f50 *4096d940e1d79af0a097625d622d9b8f9581d3efae7cef536e9a0583c2248274d100cd500b9cc9 *447049aac6c66b368a5050cd4e49b107bf28103735124cac80fbfb6db36136878959f6c744078d *5fda2c28633a6a53cb7b3f907b043481a7ee7f4aae60bf07907a089e70c2ad98dc9a63c8830f6f *4abcd92ce69a453b83906682798dca651fa13a607d98824ec3e3e9fc7469d4cc20df2296cc30bb *417087bf2bdd747ebe9330041bb1dcaf2095163630f6a3f2a675caa580fe0022872d6ecc349bb4 *8044834e44e78267bedbde94ca350d2cbe34b9813d5c55af0e90dd94df04b1119da65674eb3405 *4f55915c2ce8daa40ddf6ea939dd0ed30acf14e86556691e97905b7e0ff51b0ddeba1409f4ab19 *003cb655ae410dddc0d790347cf1ba310fdd009c5d4ca77316a166805ddcd0aaba03747d4e0b99 *eb284f56552202f1eb3e893d0b0e770478b332fe0a7a0cb5ac619e6af980ad8a1f9dfb2e12d36a *aa4f89fbd1fb02ac72a5d4dbd4be36a129b12e09dc0c56b1d84255d1398c7da729dcf1af76be6f *dfdf0381270bc8081b7a59a4b41b529c9e92bac20542751d4c5cf40f7a039c9d0f9c9075f6d9dc *40603b515503e077f43422793268675ca66b7a2cf73af2e9f727df23ad64d0a5398fcc78f21d68 *6599110f708de9527223c23f5e94e405f142a622ef78d3d1f975c0e085657570d00116c5a1912c *0caeb012fe01be2286595bd3e03456e8af4c8988786089bd0a42fb17e5708933973dbfdb0f80b5 *73a4ec1cda4188b485dfd1ff2bf83e76165c5f5d5fc0d56f6fee2e180f9c8443f7a18b796be810 *6366fbfc59e7f7fec3fd1f97bfbffbf8feddfd9bf3b39f2e7fffe3e3e587bb8b37e73f9f9dc2df *9bb39f4ecfcfda578362d516f694cd66143758cd356995c56dc20edf0b3482b68c8b91c4dd8143 *37f0bb473474da90be2c29cd818cdb0b85e6e90144fe009d7c16c3e19fc2ad53143080104901b7 *3ce71f850e47aff7eb0ac1c2372a02f28f85fd7c5c0e34ded60c38d3cca07b76a196da4c33980f *35716d5d026ea080bb471ac70d5eb4e82f2e37171e003e169d617e7cb51c6472165aa2d787441c *2e6e23fa3cefe8a621272bc30f483094e1b384b8f8ed888f12420efd665175061d9d6925a198e6 *e8c7748661fe8534db3e812c1895b6c94697bda7ec29f346498e6c0d42661d803869bd3a7bbd34 *88f924e9b027bbbba40126a7f90421044e79c948c69f139171e2272574e4e49a452a980cf0b7eb *6990c0ebecabaa29b30e87a9b1b70d23dd9ba3775fae53a1355e1f4fcc6b88ed299ae6a8dfe907 *53bc6286579f2e6f3ae0b436e0844576679bd1d6da3fa11f6719b5d7f0522689589f12b8b2469c *3c433df2ea0905766a0418f46cb11b549562bbd3e459c01069364242ab2f7baa54b4e3299b8248 *0d0de714754113cd244bd59400a90420d948b6b56fa00bf2d4099e7ba80bddc0efefbd017a05f0 *adcde5c58aaf9f2c8c96faab56d639ea8c952681f03dae97423805a6554f8ae18787875ba8928c *9b5ecdb73beb1de23d81eadb12ef4745f6f1c1debade9a3dbbfb165c12ca4c95053e6942fc2a13 *bc177630e9b79eadb618d227e15f7802b32e93ea35ddbf67a2d161648dedb54366a928759504be *87a79f67823e4cb883239d4b9f3ad0311de2689340ed49c2a47ed90225578d0b68814e8691ee98 *4a28aaaddec1bd1ba1143e7cacd32018677e0bc35c8abf4caf01bc580f031c503e96430d390aab *cb6a6b026d1fc9ed73b77dc29f123e70a9ade102ade615025cdcdddddc7515490efd59d6c45e56 *598740e41e14fdce3b83843e079a3a85b97bfaead5986e7a6f5e2e9a975fff440573d7e33a4153 *1009ad9b8246772cb20d841dcffafe1b9b7d26de3040c6f8ff56def35edd00b7df5ebbe614d01b *69e89fe88f6fce2b45d0a04eab99c9ff00504b030414000200080045545939a3f3b68866050000 *900f00001d0015007365747570746f6f6c732f636f6d6d616e642f696e7374616c6c2e70795554 *090003824a0349df028b4955780400e903e9039d57df6fa346107ef75f31711ec0a94d4f7d8c64 *55774a54a5aafa7289aaea74420b2cf636b04b779773e85fdf998585053b97e850e418d8f9e69b *df6351374a5b30dcb68d55aa325b301d7e1c2a95ad4aad6a2884b1ad1595497255d74c168990c6 *b2aa02d1cbfa5b66201dbe2f25b9d64a1b2f70e79f7fd4877b7ab35ae51533c623c51e6673bb02 *bcd6ebf593e1c099e9fc1bb06ad46b8f1c1a963fb303dfc2e9e782375c165ce6821b945c3988d6 *709daac60a250dec479ec9ecf94ff0c51da62b8e5455ecd0da5d2bd168c46659c5a32dfca924aa *593fea0ea4b2c4033190833057ebcd369037421e2abefbc6b541f41d7fb15c4bd4d9ed7abcc283 *8d32ce56442b20eb280a96d7de30c85a511508450a73cd99e5109515b311f0c3c178cd5fdd6786 *71e44c5eb277f92a34f9358bdf6349a05df2533a640aa90e5d3ab0489132322a158257acce0a86 *f95795b7f0a85b3ef3a11730b9168d3578fe55815e792a73d45988dcc6218f8d7b69daec32b3bc *2ea054dafd1772f2d64c4094f4fecb87af2eee744ce6bd66f462a8accfb88297784858c12af11f *f70e8f89f790d68eaf57f5dad1f124dd2518a11455a46184d0124aa3f9c13e64e910b2740a593a *84eca294546444234650806ba8d93387bb87cf8f4f8f0f7f7c4eefee3f3dfd0627a59f418bc3d1 *5e4de69642becfd8cb07c773e86947472b656f67d5f16edb283146495e79c43745e7ea508c623d *9201f47df084e74a2f24e8d24c6047386b72f1d94157ef7fab16ead62066c3735176b0dbf5c080 *0989df49ede9c865df0190ffd019d697e17cc330e7ef3753a48e6808fa01edd72c6d983d2e4315 *868088fc88f7ae81bf3495c885850c499d982e76945ecc8a4c54c27650ab027b2922a8134c5ca8 *c5517ecdc0340e281d94e62b16ac5693f68783549a87c0ce8f0302799249ea9e10a38119a707ba *95d47b19c6f8c8758035d4369c843daad6fac0b810bdd91ee745464cd252bc52b83ddb4268ea50 *51b49a6286dc9651ba867bef61cdff6d396611b531eae3c676a861b0f55780df29c50a1c9af62c *c6179bca0fc67c19a6917418988f16f3b771b3b3e096e72ec1c9e170e2f88731cb5116ebd86d11 *6e358937c4e87ba149001eca2500cdd15e7c0baad5fd635423706dc8686af3002842b2be894750 *2323e5c64134ed31f40d871065c28db0e666011880d15212021a8f789127931da8de03ac735403 *2851d7bc1034f1076d373535de1bb260c6798b3d022713ba53c9c862917fc3bd8173193a6bf4cb *9c1cb27ac41506f0cf54845e75f05cb5c5a1eb410de735ed1e0114956832dd4fc3b427b9a73e95 *a4076e4bcd6a1effb2599c48b1fa5b5705fd7d52a6b4743274330ac5519a4a944bd3681b4567b2 *f42a94ccb193e07eea9eafc20c9febbada9f4593f22a00bddacf1db36c697ff58123ff86494ae1 *f63d025bcb503f43e619ec677c8163b08d54856b389862dfe98f5425a66ddce29c11e3f46601e5 *b926b3e7174a709a87865f98ab851a16b37e09c7927597ef3f8bd7432b9a40c3ed7c3f20225d2d *307fb0755050bd5b53b7eec7512813052d82f6b0fd0c31be403700c792d407b35fbfacb7408d79 *3f0e2fbc77d3741f8cec69c3dc842a132e4dab79eab793029b0ebad7df622995344ffa20d0dca8 *5b898376fc1d821033385661311bb4b9e9529724987c4934ae54a40b2a8559b4c376efd678401f *79381c1b41b135227f86b6e973ca9d4f88018d11034a56dd2dee25eed98e16eb198f6123405716 *fc2531399331155a421f71744342d126f07eefa9a908e2683439284472382dd1df0fb4cafe9989 *93b2140768d3daafabf924f23f40e9378a4538d6f8e03bef2d0bf1933fe5f8ee86a38c18800af1 *6672c49a7ebf726de30fdbb7b5ce9332198ca67fb3e75463e1aafe06aa9ffc67d7f5ea7f504b03 *04140002000800603f453ab2c623f10f4300009ef60000220015007365747570746f6f6c732f63 *6f6d6d616e642f656173795f696e7374616c6c2e70795554090003b4fe8a49df028b4955780400 *e903e903bd7dfd77db3696e8effc2b5865fd4826949c64b63be729a3cec924eed4bb6d9297a4d3 *e93a3e2a254136c712a92129cbeabef9dfdffd0040000469bbb3fb72665c5b022e2e808b8b8bfb *f9e4abddb1b92e8b60341a7d09ceb2fa189e1775936d36c1d8f81704afc3a62c37e1baacc25599 *175761b66fca6dd6e44bf8fb506cca6c752aee9a2a5b36a78b7dbe5985e53a5ce575b36ff24d3d *5e64b558851f78ac5db6bcc9ae443d09c36f119e68b27c035fafcae57e2b8a06a096451ad64284 *cdb508b3e5b2dceeb2e288c3228a12c34973d7046be8998600e536aff386daff62b409afcbad08 *7730da2ff3f92408e6f3f0ba6976d3d3d39dc86e268dd80800bedd1779739cc06fa76fc5ed1b40 *4154a706145c9d20dfeecaaa09eb630de3d5935dd65ca7e1aff98e3f0774af71aa69d888ed8eb1 *822ff9970afe0f80a0519515ab721bacab721b5e6dca4528a1e2effc692d9afd0ed7ba56dfbd01 *04a19bfbf5a4860f17e59d6a56ed8b397dcb0df5daabef37e5550a9f5673fcd4693381592dcb62 *9d5f6984443367d2986ff285db5c54555969c86fd5e7afabab33fc266d3f7abfc3cd949f7e0942 *f8a7bfa34f3bd3caaae5757e2b084d35c2be409a99cbaf3a5d2441cdf36225f47a7ce00fcff1b3 *1448a0aac57c8153981ff222878d7d18981f3f7e3ffff4e6bbb31fce3aed97bc31aa25031757b0 *ccf003a0ac4beeb2bbb99a57a22ef7d552e8457b1ac09acfc59d58ee9b6cb111e14c51d5a428ab *2dfe12438b49db2241f2056a041a9e8517b494519d6d05d25894869100829de74cb1f8f787e61a *97baca177bdc839adaf011554b305faeafa294416db3bcc026b8f330e87c5701e43b01dd82cb20 *588975a8068b772fd2ddcb644afdf275789dd559d354b13a152d564988eb135343fca76628ee00 *b11ae07003f7e39709f59023e0bf0a56bd2a74430793c068d21d4c2fa7f9c11218128e9f84b3d9 *637abc4c246e41b0dc64751d9aab1ecba32a1107aef1435600458559cb2489399eca0ee1ae2a81 *266ae42fd86325ea6595d391813d1e7d0b94780afba19b33030d1503e54e920ce770806be09f35 *1c932be2a335c0f85ced4540cdf6b5a8e625c1ae3501e1bf38e2ad9ec1eebf2b0be05523391e31 *e290bf1d2569db6304ac6d5cde8ca0e9afa3b6bd422ccc6a98b2647f76c7ed7ed3e4e35b51d500 *1abb6ee94776039d76bb1a68e916b87e09bbf9f77d5e8918082454ad2d40fbdd5595ad04f6fe11 *7fc0cdb414a1fc348c6b81cc028edb87e38773bab66036a26e14b03ab1c1c9198c8141ce10dcca *372dc0ebedf947bb236f98ee579bfdf8bbdadb4fdc2d37fb9518cb36d8ed0e7fbc2d8ba8091d08 *76d76c73c88ef57859ee8ed823c31f6fe08f107b1442ace02e552482632b6080a33b696074e37d *b521d473fc811735f23cbcbe25b549461a1227b501ac01c278931737354158133aab558e74936d *104e5c2788026f07ed83265e0bd20a6ee2468cf112dae4cb06ae7a5a0cfc519470771557a29273 *7b058709d708081aeefbdc01945fc1616d01d5e3ac196f8fe32aaf915c89be756b3aa48f034fc7 *17775b2c9bb23ad2b4172307648f4494174806afc21b217624a9c0a500c7c11e21c223bacd7f15 *781ca3f791011a36be2ef1b8efe0588587bcb90e65633aa8d370fcfe052df197115fddf0c11744 *d000317effd26d426d900d8fdf3fc7bd826b8c2ea40be0f919e087709f5fda48c2f4cb6aa53986 *31001ef902d833cef6709dc3a6d369c6e6e106d83b1296244820536cedcc5f52f7be00fe814bf0 *9f111e47eb5498ec250d6103411005910dc6cb1a1b18c8840277ab0654a34f513a5228a81dcce1 *881cae4525c2c90ed693f0090f657563c31140d3b828748722424abeac776299af73f3c4c1c455 *735ceaad0da928c72bb1a3cbf85d7766f0958063562cf3eeb26ccac3f8ba840b9228e33becbca3 *791774c860ee217e8d8b5f87db3dcc139665796d83d994cb6c33ae8b6c575f97703aca1b0486f2 *c2884608895451d20619a60e497ea13e2170d3e54db96fc9f5927e2e40141259e1bd5922be2670 *048befb32462f13ffc48326ffcd56071c60988ba5c021b0f1c791a49ef5d0bc8d805df8a18f32b *c4159c2e9047618230b9ffb2e973aae7f80fbe8b2b01d78c942067960c1ac81b1ec91f1864b681 *33ae560daeabcdda1077f0cf09009e97370085fe2234e71a4dfe060f9fdd4912d21ce85bf5e415 *363f916b3f57f7931f10e03c87bbc1fb2d32fe39317eefd7444473cd25bd6d404af177560c5061 *2b9987afa9baee654bde9a39528dfa88e86e2ee9ce0b439f55d9a328e7481a2d4c3815733a77de *ee555936aa2d4b4a06a04a90ac2ffbe98e4fc2f7f2b414d059b210c2e136cf943c07dcd21dcb7e *a0f8b0011e36471ee65991399d655f273e5573e354f929828e996e06726633df1ee778ccbced91 *f7220dd443842a56f0d028ff067482cdfeeb1f5d103b2d5e0b24826fe11214c64abea619c20d93 *ad2c593c94470b1e63b7a2c067ca01444ce0f3f57e4192bb5891de00054e035c064d0bc585255f *2e40b0e483bd9a84e16790094201a27685d215725d794fc2bd916f36262c466d892a085a7cbcf3 *11de2a037ae6f7f6be62219b5e3375128523731223035a0d6b447a11351f144ec21caf42909e6e *c5a6dc8d70424afa1c2942a269d6808401ac0454aa506c176285cc7e622ffb7c55c1beeefde705 *ced2a2ac3585ad8c27a6face212fb305aa28e6eac5a2b89f253d619fd4d313dfa5dc01886ad9c4 *f67b37d1309296d14ac25e00efbc010e103368f5a7c16f5122320517d5646a61066beebc54559f *0497587d97d7c818dbef6c20f86f535e4d503d108fde228678e04ef005a0bb747ac0d0c42a6855 *7873ba601d1cf31a0e9f8122f21404f2703cf5eb7bdb5442c4fde8e13f01e7b21f040cba2fecf1 *da7d82dbe4feeb702eee7630853832ae3810eadadb0dfe70ee1dfc5a312183429e84e76b383545 *598ce5d10dad076f7b6f1d40d2d4125eaa0e3a9e63f360120646afa664c92bcc9bf660c1c6b8b7 *319c5d3c5ed30ef97bae6c63d2e63df2bdd0b8536b3824a8a10a1747fdf1265fb49c802572a070 *d4951870a01ff012fc3f9065cbac142fd5fd91861a78ac63439826aa66f74563001a8fe525480f *8a31a95ff1578442cc9239cfb2daaf1ca6838c610f5c178841b4ac2132a611d9cf2c9712ccbf4c *7660ac567e230e798dda58a1d976682c364d5c0392e291b9f6d1a370d6b2ed10dea149c27ebc15 *a6e3b19485fa36e831d8c1c8ea1d8748c8df92765ca5050312dc66bb18ffe453caaa6f544ee26f *8923d6e1bc8d9b1fd9b6fe3b4ebae741b7cd591cf21c0903dc45e0e12c9225237b402d575c4ff0 *ded8c549429c9d9e64f660937ab7c9e10e49239b995d5a7f91b5833aab7ed33ece6c33dd550f33 *45c67fc8e0c1363aa9c318008fc7fa859a84ab52f012d0ed02f7c1aacb69c5860634b70246a35e *004e6d997ff42a03daf7aae6e35ebebd7a36ea222a770a58a522829117800ffdbe4ba24b3c936c *876258dc99ad4544fa5a5472fc94ffa4e7aa061627fdaf1be70314a1948de8b8cb27ac279994d5 *d5699d6f771b31724ed975b68217823c29dd695c4c2f2d39031bcee1cbada64a831da4eede3ad7 *41d291485a7092065ca4bacbedb6400444d5c4cfd3165a12744eaaf912ea3dabeaa174a1cfa073 *040d28c6216c97a84b211a64f434baec60e5186d7aaf54f7edc444623cd763ff3a69c248a512d3 *da6963159fa9b39032c633fa69b37e870af94daf303a2b6ef3aa2c50731ff702f7ec8bf116efdd *16689bd7ea31133bdd4024ce6a81db555c253de4623df89d4fe43e26037bd88571d1ddcaae8ae3 *be7d84939115687263b043cb3600245bade62d6eeeea248f17530c2d2e10b7feb5cbb8dc3d514d *5390ae9c9d68aa63cfd618fa925c918efaacf725113f0fff3073fac3072f93a9bc26fe926df682 *2db41603bf5b0a1076db6fbb480d5c33a3f1588f461aca850881ebbca027eacb9187b83dba0914 *27ef5348d8583de6e21bbdc994f67f01b22a5c7c5da523a1d0bdf2607603aac83063f704b45d86 *b00662d4c31ad4d4b5624a3ddc7caab5c1892a7bbc67963fe0eaf3d3e6086f213650b44f9878bc *48502f5ec042e084c76385cd00d61a4754edfd56c4de952130dbba7d0cd7441cd21ec866cd56e9 *1ea393083c33c4669798e4c384bd6f76fb46321bfdd884a7b3fbbe542b2ed5177ff8a657b361cf *0ac539e407fc65de1c63134cbb369db34b57224ca2bd153b2bd6ea274d0333764adb8596bacac4 *e5f586deb40bb55d1673957c8c422b38a7ce77f0e8c5cb1d28f3a88da3fceef30b9e00620ebb09 *43c2cf5883f52b127071e85909ef44589fbb2a2bae448c1d25aac980aa4236b990002ed1adc2f9 *e842a133bdec80f1bbce2029b2db8c7f87c84543f88568dd7772a85024649b556cec50aa304c52 *2f841176c443d8633e437d43745247a3f0a45fb2e6a18261099d5ae2fb04a90a7aa0c6535f716d *5352d76c8e0f3a0bbe4364687e76b5d8afca39fa4ce159770fe66834fac86e1d996c3a564d4966 *214d86f10cd60cacd52d90ba7659ae040a47703f020321e3f4e61816597e2b5e21a16721cadccb *bcdcd7e829d41c43902b42da3058ddf61cc3500d1c55616a7b8ee51e1ecf61b6411534aa5d6062 *62078fb912fe3731a7d2cf0f76f98afd7f0034fc6e8a5274dffa5ab32bd904ff83d7fef314659d *6d7687a2439fdfccdfca5c1e3febcd3142cf8831329ab1f28338a9819c702463b3fa28a3879b7a *ae6e647b8fbab9f583d9775134f0d6fb0c5b327e9bf65ed39e5b3a1cbea65b7f00f2452116b7af *7640b73e58248c5c97fb0d5fd120cf80e4b09ab8b7a45e43e759daa5f7bf880aaf64d295752c7a *40c268e2192fb31d4906b47b78f392e7824962d88bd587be07a501b3a515c37664d18b04954626 *81201a5162aa22b7378461c3f8a05753561dfb49be4462bd11a4159223b8541fbeffe411319f84 *efafc38380d33e1ec34b6b27d67b3ccc640d21bfc4909ee9c7702bb2425a6810ab5a1f51d4408a *8903f49ce51792d0f68b1ac40db4ff4816808e4368dc0973b40af1fee08d57c2266c6d48bbacae *4d1bd06a85a3a30b0c42c2e906f7ab3cf482983a6b54d08699b61ba142fac3cf9fbf7bffeec3eb *cfdfa57857210b6b485c1277fc871ef58f2d65d47a3c7a31309d18cff3169da0fb5ed15fba9bf2 *aefc23325ba1d4e7b825b46cd78234be800be9b7b49b85f27d83836a8b2f167e862e07e9b3ed33 *f8dc046a448f32b4d1a1d9cf64e60603b7df5780ac6939756fa6e459c437f8185b469dbe733609 *198747da8814e0e4fee71c1af55a5053c368e20742e70808467f9d468728992c37c0ace224e8b7 *c1f8c1c95317cb63979ebfa7fff6a90460559b390b350d2c142d6b9c0cd18cfd92b14cf3eefef1 *2b4cddeb68aaa1e6b881f887226bff65d1cac6a4375763ccb735908d8d612f456bfd92e28a5ed5 *92cff0eefaddc6eabbd473c4ee559a18806d270285a0ede1e01af9944bad8492f88c4d5d233b7a *8d4ad303b927e1fd42ac64b23bb2cc85425566587afbf0b57715b16388ac790376a6f9c1901f8b *e452c635eaa33de73285dd4627dad168991923d25b725bc2cdcec2735e74a5c72040b1625da2aa *925ca1e85a2997cb7d056c178d68303f38c1f81d5ac180c77bc0a295d06f579cf2444e6a1ea8c7 *f80882a5f9d245d790f1d8f0534db5b10d597e803752fb72d1c62dd1a02894a029b31d16168596 *e824943ee64b72578f938b1797695729dd3dd40e7975840a9bcc70279ed15604248eb773d4260f *5ada026f0d023909c30f1b8112bedc36bcfad0f6087db2ab2c2f68cacbeb123d113200b85e8b4a *3b6c74d732663506aed19836cb5ac98025d96412982254f7401af3f820aaeb6c57e32655ca0cda *ce862447be71e03bb8b0e8e2b1a60eb7e5f97a8046d8b30376076ea071792884a19e498936b6d9 *910f2609175748c7415673c8cc6a9b17c883b20609b70a47f8e61d2944273436c258952dbe4627 *0cb27010df66cbeb1c9dc3d5d087bc26dfce7b362130b0466a151548aec71059038b6635bd6b05 *d9d968355ba12614ad4a3cb8cd2af2919a0401460d21bd565b5e34fc1f0919dae7a78324fac64b *cbbd156614660d1d8be1a82033eae8bad96e824052278919b4e23b104d7680216cf9f21a351635 *29326846bc8b3601dbb4e6e8c7583906e406272f701f0f8e1cd47d429c6d7779952fe98d7bcbcf *092585194eaeec0bb54305072f3eeeda849cc4bdef888e1b42d79be50de287e7ac15f2e408089f *5c5c3aa2beebb1d695bb4608adc5a8bc51ed555790ccca9bc86cd0278bc9be039a39f49fb9f108 *609d9ea408c11150fed2373cca5fc1e3e4a92159aa9f1579e5c7354ba8f148eaadcafa15a17752 *b160c8df46efff234abe14f8be57d34a93c4034cca91afc2f5cc72036be767042fd9b14a81df2f *097774368b8a26f26bf08032b0498aba1d52f2b43bc83626331aca0720db34eef355c18cd8907b *402ca3a4cf794a8d3c81ab5f547102d84a033076f3452bc19003fac827644930862681e1b6cc57 *4439a4a520ee54924b7fb12a0fbdb0acf58661837bd497b066d9a1504a4cfaa32bbce2a7f1450b *3a8dc66711fc58c20f7ccb4697e9f3240806fccc9cb3d5eff9404ca27776a3cf679f3e871f5e7f *fa74f6760acc0259aac82aba81141769d9d728ed05a484c5877924185a328a95b275b71e45a79c *fd7ada9e90c7acce7d3cc5dfbd95df8dfefa43af1166e079d5baa1d09a7ffbfafc7bb9e624c1bc *7bffd9bbe25de62d178e7d720dff76be24d02e2b5da0a4eb2592a67d57fdc442127987091d3085 *37e72fd8f8973484c9a21ca2bec26b4bfaafdb0a2fd315c4f16fa767074a955bd164abacc9e6ec *a6132907adc4639e619f0be5116a774789650840e719c3ede21ea65763f8703b5edadb8c9c6015 *167af4d3e899d13b1950f25b381d2a3c6195de22da9c7617d12ace8609b9796447b7d4bcb6d393 *f3bd5a48e4a814782c6d7af436829e876c73e3ebe3f3c7a57e037e43d280a2d46716ffa7f1b5d3 *e9bdef6d0794e173818b022436579650b92cf844f368bfb53bd26fb4839e17b7d9066e0915cc19 *9e5453126b97da3ead2da428e1fff8f1fbda6793a630b1d67c1bc6522ac1e7243d87c66d105fa8 *de415d38f85244db6332acd8b6d7a6bb345d6fada0cb888360808f762c198e419c376472238eae *99f0e16b7f52695db19424497c7d25d71e1e4d990e87626db2cff6162b4452afe5beb39296a86f *5b7d35a1a10ff2ae9e11c335a6d76c772ca4abe40393edcd0a7f8f6568af1555301eb563ab5045 *d7d57fc0b34ef3349456774753e5e713a75d3f179cc5c7d69a9f786fd736ea3e7688c8d1da3711 *3e93c93d4b4f85f5ed724d90f7cbd7523fffb08f350ee867c1ed6279dc88d4b7d248cfe30f0a1c *d672a2d75dccf1d70a9202c2bb9e9280e291c5c827d4d5c80cadda19b641d1931e52e8e4da9e9e *bfa163885c3052da4b6dfe3fbd78f7ccd95c347bbe8ff02145978a99ccf560788c6044bcc4ccf3 *f47218576702782ffa777c2d9ae5f5dc34717b9c08ad7999516ba97dba0cb70e236acbc76e8d73 *42b8f56aa6a506f48d364f22ab07d14e5e0526e274e59e54f828448c7bbd410cd4fc7b00633e9b *8dc2783c366238c3fa26dfd5a61e44462cd1cd8691a6c9e83e3f324327d2217e928dd02e2d3076 *169e986fcffe72f6fdfb0ff3b7e79f3e77f17c124e60cc31c53aac88bf1b6a6e499b703c9cc380 *34d9a3fce716362548764dc21d93f3e84754d88cba142d8f06b60deea7f4de83d48e48ae941c2d *669e28837ebc4f9b2e1b914ccc830487042926d791fd1921f3deeae169aa039bb0f5cd661a3e4d *fd289971eb52a539c0871819670ac5efcb4a79c166055296a5c96a07924605e303e59be03b7c0f *e8ab164eaa1b62355f4c3022717b0c389c8002310141b446392e8e906e0de5c503007583ebba41 *a186db7068469198e1156a5eae37be9aa6954845858fb87e07eec89da83dc56a90912b53963d27 *d750485e9530811d088470d20e22bc29ca03dc5c241870e8fa8492f2c057749ef9ac73abb5038d *bb69571e69119b74a34288ef161d37ee0b92f964442b3dc72ebdf28d75486733b58a7e96ba0074 *6e1ec0183ad420cd78725a323e00857e5e96bc0d4bb7f5b81fb4769995b68a069472ccd875db98 *3ab0532ba991b5d81672fed8cf1f92de352748d37f82130fbd01159a17866ca0dd84988851ad61 *c16f57e332782c46f5c5f3cbcefdd0390abd7efd0f58172d2514046b3a249cd10d643f44fcf813 *6337242c737967487669f81469c90de2dcef561870b143ce41ea8661b77c5f23e3b4f535f129a0 *fa9b1921e817742ee1c9867ea3d675ac0f87d9934eaf0cf28f3dabc14b60a9e76880ebac36b438 *3ae7c751865334774d94dc1bfae0442d04f7ea8bb0a1a8fbc61b76eba68c0896f746af2028dff0 *967c66ac8d7bd9846ac9c3af66663bfca84f6bf909a4c91d7227335d0a4bb0c8aeecad36c81b38 *e15ffffa571d38affcbd2c39f8801e4315b2c8924c596b2300c237179a873a8592c51a4ddceb8a *f3101cca3dcc7cbfe3243ea6e954ea6bf170d5e506adc868243d88087ebd2a9b0eaf82a124a94e *80a88c816377055aacad7556b8c347031d8c07bb9fd2a0b975eda5fa53643ab5c52c269416a9ee *a138ef35e4df6803e680498f102991a9ff5456b8a79f44135f5c2613b9c4dd095d1880953f84c1 *76d2ae637ecf5ca4aecd74077a5736dfe2eea7e1b06ab0373cc57ecc494c573611b3f7aea0b082 *61d4fec2f4f6465e71bf15ab73ed3ce4e011eacb9369dd24ab93daa7671cc4daf30cf509ee245c *ba47ef5bca10a74c0d95d888db0c9d36247934257aef42ef9c05e76cd9e4b7e8e73c78e142cf7e *010fb99a1995d9bd700674da9606d07bc07d67e65b74e1b8162bc3bbf22187475ff7eccb3ca7ec *467ea38dda02999ea85734913c575f18dcfe9ebb105a8f31a1529dad857b07faac74ea7aea427a *0c14bf196b9b1d17628e3e5df64316b37c2ad57bcaf940e728191b03adea8e19fa1e5df580ca7b *55bb4ad25eaff87ecdb51be075c2d96a94d3fa0df082ae497558816dce3de837b26a7545a76dc7 *82642d6d470252fde57da71b0e48f3c608fa5d6e8d319bb570a7030eb3762f953203f5a3680228 *d71c1ab2dd757c5281fd353215274053764383685c7c31ce497502f45e4cbdd7adc6a54b660a72 *aaa0c00b63d0c47cffda5be20bceb42cd8e39e5dea2ac1ce6a0665902764ce6f77a0c61e2e77ff *8e529aa596e4e82cbc92a99627f268ea09e3b1ebd8a65775d3d54eb9a6cf3e46d76751ee3ec228 *9b199c354a77c1c658fc287660da9156e4ef234dc34fb17962bebc1cdb718ba36d2c567f342055 *e103ec96f42de4b1639bdaff2c0a51b1d3ed465c65cba3ca5c235783a471e50b9b37a6715d2ad6 *e1babbef26427f6a863ac3df650a6935051353cb64edba643308a928f6a4313020a91c23fcc935 *501b660069bf4fc267a1476279129ebdfef4f3f8fcdda7cfafbfff7efcf6ec2fe34f6f3e9e7ff8 *3c0d4fd80850a527b18964f5a5f0d857e76a256acacbacfa7adbf6678396305ee9bcb70a4ee205 *b4121bd5b207290a3b6484d40af62085ae3f947d4c75ea0c99805446e26f6db9a4995bf53fbc3b *ffe33b23b7c1da1b6f43abc58472ae336d6bd44207b7872d679721f49ff1681199517956271654 *ccaeea1a40a6bc12b311269651f9cd6671e275c7294c5f3352b0931b70eba0a339b2c5258ca83f *9d738dae8d25a608c5f76e0942c864773c85ff1fc2c3291ad219a4b542175dc9a94d8192de714a *913b3351dba54f163ed7961c1477244f818990f86b2faf9365a57d4c72b0904f9633300abdee37 *fc2869bd681856d797be3fa95be7fa5320bc4ea8fc653a3a8c9ee14e3bada4f3a7162d02afafa7 *2dbb5c031c05f6f9efbffedaf646b695b8fd1272c786c4e63772090aa5a30ffb7529d115054dbc *214a56d8cb9b1ce86feb3e1ff430ca5fb3632bf14aff17ae9a30f6e37c1974cc8cc323de89878d *78277a4734735b164716b250b24dc9771cc8572695a6db9144f2c02b51b9362753e0237eefc8b4 *4abb674fd298dceee8cecd2ecbe09f91b279735378955e01fbac9d7be4373e0354b76c51b331ca *ea681d34434e9cc01e540dcf4aae3aa73428e1f548cb7d10da1ce13cff75ee1137c32d7de1a8ea *5be3d6c01cd857d3786adef3c834e903eb03305bc6ef3136cb09a4c25e5a1ceb7b278491ea1e3d *20d0a705e99b15657cdb948bb87fb0a7913562e2f3176258d387b904f89326909e0c0d7da426cb *18a4ba0472a522bb878286dd87e56b8d914dbe79f14fe1fb03baebee36c242b4fe6fc2d4a104c6 *18de852631bd2b0f981b25c408e28c348b8aebca3cf50f7471b42d256c1cb1dd6b520b9fc4ab2e *b818ca08667a40f041c46cb2adb75c0bdc7374c8bbce35e1f1f5851fdfe7e5ea69436e2f52f144 *49bf9beb1f941e4a354fad03a13f8dcefefc679072bf7d1f0d7aa61ad0cfaeae34705d7d68a27f *1306869db7b0a9879ee0634413508b911a6aa67e49bc37beb3629e5b7e25d0c72c93b54c863350 *740ccc9e39f8e1e9e3d07e9bfc1302960526f07980754847a31a78dcca5ad3b16d945298a93a36 *ed3a9a18f42ab3e43d6934edcbeedb0f4ec6db706e1a8e5d9d934f8fd105d0e1659b996be871c0 *72559683a35a4973b48e2db5064ed2d147c409afe3d133efeeb204b2cc60a5e740ffee8a0caf5d *cf31966dd5b71e51c1af195ba7985addd04ba5c0d109fbd123fc172d2868c7c0fd90c55d3aa068 *dd65c23b43673fa470dadef49f1507074366e3da42547404703963e9d38fcea3d6eda16be65faf *ce5abd34172ae8a537605a3da7ad1b76116f9f8df0e9c86fc6c4e7e3ddcfb9d28ee6d9182b7173 *9519ef44eff698575ed701a5c3b52c6e7d270ce5e1f0c3ec9310a482437f218a3f4849cf8df780 *6eb55ca357a9a792589f4c0200b18fd74df581f6c5136db0cf182f23d4fd278a9aab43dc629494 *fcaa645b287a12be51090856fbedf6689b2dcb051ae780b960093a780cb0f18425a16c23ed7eee *ed605eae71b7ce90691c9fc172a06b461ca94b364a23fc227288507a0378dbab5a2a491aee3659 *83d1d0b311ecc6ef5e8e7c5e7530e3b2803eecf2a023110bf988132bcb595251b1f22d50ae6aee *4dae7d39b11176d2b9526c4745fc0acd2348381234b4814f22ab0979e43a43c8aef0686865a536 *7af8863af9fa202cac82f71f9d4e9d5b5f42499ccc316a3cbc26a539cddaf4093e676ff395a87c *521fe1ac1049780bfefad7bf062e57c2805f8f064282b07690b5730aad5335b57bde6c6a76d39e *d865feda0e5d365546919ad6583a0b4cc31793e75f8aa8eba27793dee28b05c9151d806b8360fd *17edcd1fbe8958c1a422157b228335322735062ac2e818927483ef8b4db684cfe718b41a259326 *6f409e8243719bdca7e3b2b2ecfbe9a70df07b8096933f04f26aaae398fc51cd0a701cf4bbdaef *dc84478eb6b3552ba245088d77f71b982ebd69e3ff446c8b746da4c3e5acf1b65a4817ada46c5c *735954cbe6c0ed75a9e95a66f29b99f92efdc2a217336565625664f01d9f6f3b1e8ece3bc378cb *b547c87bcba98364a748503ab4d02a09aad4dc667530762347972d58cc7d2d4c8d37305514f369 *83da9c07ac246a50df2d8b21c06045cdee822d0b510536a589c4acb9d97793c23c55f9372b8372 *c125aa36f9c249addc94bbf906432dece23a8663675c57cbb4eb6240aebad55229393b27bddcac *d2421c902215d2de035e9ba22074ea919f61284c55270ecfe0b70bcaf5896d2fbd8d3143a3c24f *a6103fed89e8f73862681a7e4a707afae182ade8e2ebcedfd4416f6c0de92aa25230f6c72bac4f *d39f2280d0b818bf409fd3f6385282d5f9b65cedb1cca96a92f442d13b7d61654c00314df60646 *02ffc7415ef40231e84805c0c222f7d57bf1cc5f567c85cdfb6a16b1d5eed36934fd9fc5ba3d15 *0ae955dd0c06a1ad9c401bf51c078232a783290efdd57bd80ff5a7d71fdf9dbffbf354c685aa40 *21b62fb9eb2687b614c34f94188dcafd4ce54e39ae4e9166c6df98c71a971535bce36f8cf9060f *d3c46b9297181a9759b37759c69a5259d15d638cdf514540139f05848ec094e7265337f118cc22 *e1db6e0c953acf0872e03c2bb32b47f8f17908fea9c3f48c48b60be3e84b83792fdfe892210342 *87155c02e7d34eff165d69d2854eb19a741abadd58fb79a40cab346adc22c092acba2a709275d0 *3b4cb616cd71bede6457b177c286dc6dbf4e5a4859916d8ebf0a7d55d33ad1a4930431e15458ca *25af3986385a60919c0af58f344ba0379126c0a84381ca867ed11366d3dc350f784ba434323e46 *3a5ef0fd2235b4ed61e86c89bd6bac843b20adf2f836ca407f24453b31f476b8892f6986992396 *fdafd07a5a94a199fc76044c785c37c70d3c8a75cddd91a11a31623e42fd3ca108f2b2caaa7c73 *d49560f9218cd73d65071357949dacb633fd702419bcf174d2ec62258f5cca52eb7e4d7282dd03 *ad45bae83cfcdee2a7846b57d4d992c88435e048877d238e2c2f4de676760c4d48bcb5899ce0ae *22b7de104b9607863b341720448eb08ca62f8044e0b7127efb875c1c730a71126ef3abeb26dc08 *cc9c462100fbc6a267f4d440337cda1c775a6ed7dd1d35340c7e013ff89aeb548b4975da0cae71 *4492701d5fb86af4cb679efc925d57b50724d620539db0ce8fbe97078bd4a9a4dcb44bbd15eab8 *c651339435a9203b37bcd4490bbdd452b6a4e47e59a03af68365bd61d85e8c546f1d2669d02ae7 *0b092f70d203e296749f3f27c2ed2984e1fa81e6c5be1ff1e1f2790f493ae4b655db2c3dd0fd35 *0dbdf186b2a5bab0eeabfb878adfbb86e95366dbc145040910c9309a2ad6b2bfba0e1e3aa6c5b6 *f5217052b820c17967c5255c30ccc2b1c018d51fbd8cd0a849e8f436dd2f3d1524fb939ef70531 *bd6e90d5363287a8d41d980c5c31ede928e9b57eba7a08cfec741ad42fc1f8bfeb5ff0e6fdbb6f *bf3f7ff3395422b09b32950f13f9f7e8c2d8946552974061469ed546d340375d0804a2e325d822 *4d0eeb0b113e5d086005e2a999fadf2ec01d70e9faa85685e78996c2f0e7721ffef0e3a7cf2a57 *2bd5895ddbf120d21da95805a6168087a4043c0a0dba1a61ebb850bc50e363316e6c065772d0e6 *12e08876ccf88ab9574f42b8f9e16f291678764dd1d38333e5b7b949bf0431e7c697d982c8aa6f *64b0c47499582f8203723023a637793ee70222cd15532ad328e9c779c9b285ce771bc07a9d1a89 *4460c926899caa4cced0aabf1f9461f54b604f4221c1c17b664a004aa7c9933166c924037b1388 *9c525f72b223cf44e3f1db44cdb6ace4820c5508e0b629f962316c797a3d8b62ae086566874e0c *9b5a6bf814f0b7c312bf20b01c815471f63243ea3ac045f0f7f21e012441ca0e0b9c1f6bd9dbb9 *46cd35feefe3089623e811d53e2b51555202b6b27618dfae37fbfa3af61bec7f6b75275969caca *1a019b42594e577b21b3c132cc51d75c66c5f4ea3867c5f9311a73d646bb8d6cb9fc3bb1d9adf7 *1b9b3cb75809e14aa8c8b1dd26232f3e5536070b56d6eef6c0ee7c294e621c2da9c3137cb7008b *486af88d4227937af4c03ce07625f2de74c6c19fc432634646498acd80d8ac36286ccc79d8c73a *4ed5608c704c0329c92b9e2e0b95627e0639df1c71c3dc8eb001d2c740335599cd38887ceed89c *7cb3e19a5468b88b94af7c128598ec16eb3ee49b8c8e1849e46bcc895d63bac00ceb3652b21138 *8268afc19c9298e55706008b9a622875b2c440d9960c576f39d8e824262904edc120d7c0268bba *311648c2780884d9ec2496cd1538ae627187aae94700faa6079022062c730ecf155159a7d4ba66 *8c74eb525ef4d47cd5d5f4fca986142d11eba22c2dea85da97965bd580332a8962428f0a1f9c5b *3a32014d04b68bf85818c6627235c1f2c62c21c8d4cb8a96a2ba538d396d1bc3629a05333037a1 *fa2a5bad64226d85c6e2c8b99bb174105f65a6a5124ea36b1ab55ea8ea4befb5a7b645b631375a *be06e188c3b751041bf9f9fddbf7d3d0f2a5a3ef63cd953a4e02b8174688415bf9ccf5c5337cb6 *7b1c3ba5ef82f10e54de0c5687d6a64172577f3a608921de3d85b4c1a0e5592527d404bb56e11a *ec7ca192f826203f9da37b02b2809a916eca72c369fc9bda729e4c5bd94186f272445a3032924f *8d282a0277fbaa94a23811adedd90b0489a97aa72a837eccf34cead6f356c20c0274a1d03eb98c *9c9d717ccd4246a8d018a9eacdf4cd16b929da1e27527cf2ec23469d2074b5833d0e8f29190dcd *141c58218a3933d6ea923502e2a8cd182c319968d55e94b66abee437005296d4c8b085b7522e19 *356794003ee6f837973149dbe2372f6d96738bc7e3360a9f8656c9bd701cbeb01f4b08b5ad6f1b *8da367b78eefb955f9cf19c6edfdf7a88ba1d7b1d0ed681acbfda990471f99c6d0df880d08c6ae *5e683f63f6647df6627a9986917a3fd84b37900ac1a41c93666c0052b7f189b2b59ddda143f0ed *4344ae4fa68bb5807e582b03c572f6608e6f27d2a29d260635fb1c7887a8daa067493e179149ae *1108f9f017d67530ca0553839e1c998e9f0e25cc8c30411cc169b6bb7144096c670fe38103eb4f *64a16c5412234f09bebe6dea1c6d1bb88cc5714a095fa8811c6d966c7ad12d798e690b504c93f0 *fce979551204d5ea02b3e6f8754bf8b53627fa026f8c7475c63e7b2303086b4bb8f59e3f5bd5f2 *aee47ea4d361977a1910a2a85596f2fa6332ea4fbedcdd2c799b21ece1c47a325b9e1fca3d5544 *410600d1afc16b01e511681dea96ed2932122bd1f1e949da305ccdc84dbf4bfbacb357a8be6d92 *2469e75b552547f6a1e74b2e6aaf84693f4f1070eb54f695234af9f79283fab457f0897c5db855 *e9e8ed8d598092e14a4dd2e7395e7915d906760faaa9aec19b75d5d5081a564ff0df40aa763757 *5c67378823d5032be60f3761874aa3221e0b49ad0886da5c676507cec63df1277ee576bba9af57 *2bb9a5a853e9dbd0dc67d5b71743270493a5f7d06645fe58f726e1b312b53c7eab0da67edf6e6b *86d55f3c6b5267b722f6a77bc593379b45ad7819f9129c9e918fa32a23d98ac90d8e03cb02db0c *4f1f90d2408cde17d96d062f67e0805f7940a1ea5e96b8e4ba5fda18231fbf9264fed8bd277a93 *5438f11fc66c6461c9c17c1514d9d006081a793afa4d15dadfb1b5fe44079fc557791ada1b42de *7195d89041dad96669c6ed0252969a964bdb51904ad2a9969cbbc2f4c4fe20dbe0226225645c6f *ee6efa0fe2115a89c5fe2a1efda8be6c3dd60dd09eb4187220cae5c190c770b18e95d700a7ec65 *6d385d04f016427f3e77324678402728c81f07e278b1bda20f30d6d8a8d4adbdd4d63d0e6a781a *d0e7d8e37da45c790ccf336def3ff579f43cd08148a1d9db885da26cacc8f98bee3bfbf3baecc3 *6470085f30ad5ea1c1fc4b92ed70528d9af2bed905051d1f22ef2ea6b0210f74417978141619a5 *2935a99cbd47bd848ff45918a35d10b6b589d7c905fe77f2e9f3fc87f76fcf2e93f0ff86cfbffe *faeb24fc5fe1f3dffffeebaf3b20389a7dcd6910ccf787893f13b0318ba9edadd03e70f1a7f25b *3041f40bff4f5400b72e1a86fdb4978ed413d7e1dff7b98013ff0819919fbdb66f8e7f5752325e *6cf35fc5ec798a0bbf14b3170f89f252629ceaeef11930470c86fdf40c342ca82d4a7e4963c8bf *b82b793ca64eb996b679a7b4c45de55708c514b99d04a93d75469db26cade26b91adba1527f134 *b6bac920f8990d88caea253553aa5ba6b5e9689d33a0a88a7a70de0210698c4a7a643fbdce97d7 *219b46db5a852801865c634d717ba0f40915f30dfeff97a624a3d9401dc050d501344a46a27345 *06c32b2855107ca7bca230aa1ff5890452d607248eb32c2b9c8ed222cb172080784a6662d41b3e *b8be641ae6133149cdaa868089bd0398a6908b2a1945906b733814580794e5d237bda73c62a817 *06b5e4e70debd6c95c42aa78d6b21b9d0ff0158981b8997c90246910ada0297cd0b86d24ca9f24 *e634a4ebfbf04c547d298bf01628a673a54e36e0b4a51531cab3667f9d7c0134875e6fbfa170e3 *9325ac4ab91d9b888d9520079b412947c5ca3e6f6d3152cc77b55d9031396b54652aae3579236c *a3932a02d91ab738d39ef21ac0abd836de92a5412a7de3de6ab8948d5b6e3cc784b57b1aa59194 *439320e8302ab76e4bb770e40f3af489bc0a2983ba55f55718d5b39dc2f31d55835b5678da9391 *57bd4157f92a94d5cb8d6a0c4d69044a12c47b1f13e148e26cf8cd68cf6165459ba385b300b1b9 *7d798c64cf31c05e5edbfd25af21479aa1f2448ca2275da314d275854ca14ab018eb2bd5be4e29 *5d3b258fc683de323c5c1a558b08d3d966abd8ab3493bd2c811829623e5f94651327539f28fa88 *dc15667466bb9ee32b99704e978e7e15eee81c8dfc6094574ede4ca80e094dce73bf5b81a57241 *be9ac93dee494631a2784f9dd15eee933ff7c89052b1133be88364bd37d51e1d16438f4dc27de8 *0dd9790458f2d6058f72e98615f7d4f60e02873fc8446bb2e6d227e95fdb6ef70e649fbbcea7b4 *6a56a1eee85f50757bbac917a76c22fb17185d8945f53570fc5379c4d8572b4a7d89e310560b6c *91174633e9832e27faf6ecdbd73f7eff59e2dd41d08bdcf7805c1f125e043ec918406b643a3fec *8f2b5f0d4fd1a3d834b7a19b497e35bfcd2a5df800bd80492c0561979ecd68248b2389271c62a3 *4f97a5b248e5be2a3e213f96329531e1535d4c111f2e4a1e7393931a081a7f5140bd9b0dacfdfa *22c275892e7555a42ee81aeeebadce6fe49017dd5bb21c6c4a0dec7dec869be1d2a6b754b34282 *9601a6feb052808f3d7863a82fa5c3ecaf942493e4389d6040b3644eff03b0de2fea8637cdc59a *6c2448188e0133db70dc5f3b2435ebb0249a745f8ee516528b410c1fa4e66e2503c578b1384d44 *87bb27488ba1b7b71cd23bba2cc5b436834bc89b16f222aa7f786cc8155e39a8ab1d7ca244828c *ccc128fcb1fb30e5890bd4fd4f49e3665229c661f6f7c84332a4484ea1163b695832c22f2fc8eb *83fe666b181e38e9c0206332e982d1ada69d204e6ddfb2bbf150e4b8ce60bcf192f93af41d6d89 *858aeec7be7154d62fc5f60eed9c555e2f4b7fe951b9507e676af92e1b011f34441e192092f893 *bbc0b211a9f862f9f468e4b0bf8a2f7cc3ddeb74de8a011bc4eb11edf9a21985cf68b5e4657331 *fddde5638038ab30dcd5bf9e1b733d19a7e4f22176107701bd635fe8f7f4fd83eb695cde9fc1cc *a230dce255561df2c26b5420455d056c039db1d8705f874f5181fc14d364a8f72b567a0428abf0 *f56ee72905fe24d40fae49f8463fe2490fbd13d518d94b0ad09b10afea2a631f1c0f98d377a241 *4c74b32519291642bb73953ed617f13377a26712b5a7d2cf04af4b65c3b018cd77ef7f38ebaf24 *8e9dfa632ddc23fa707a43b88fa0ec482e4ef4983ed27dfe115d7efbd18b6c592c31582690e55c *aa9996c4fd9ea72f4c7726bc4380f06500bdcc350d1fc4564fdb6547f551e63eb90fd3ce8ea896 *5202302e1f8f67a4fe9a0753211af24379ef59d15b79816586e56ce001fd732e8076b5fba1197b *40ca068e37939aaee1e0be5a8882e3fd83d65ba352215f3cb0cfc5cf2ded267deeec9cab1a0e8e *320dbc314ec61b441417b28f1dc3edc455aac49f9527e567172c6b8bac8cfa1d648fb49ef2e354 *29db7c11a79e1838895d2703aa3f20fc49f8934c89bf249ded42960536d57c0f8a07c361255271 *e49ac1a3ae95d487ca398709b44333f91c286aa0a9ca4d3f2acebbe2232a86ad69f813c858dc49 *2db813a9456f712c3fa5bcfd687b6445aa756fa61607233e235a755294c578b5df51e5d4622c45 *f156cbc8e371586ad37951e0b7b8d0d46ada17f78bdf9a6a1399287cd413fd4b403b0789805414 *831e27bdf705f5d54e08a218b83bf05461f3e1b408de2386dd927f3254918f16424acd2348a035 *abbb2f3b98667c2a150bbf58f695541663b64bda3b37450b8ad74c181f89cba292f20df5fd8075 *7fabc9c7ec60fe9d6a4ba71c30b0a8d74e95409ab4a063be031e50510504991f67323f2b561fc5 *f22d061aaf2d0e299b0ef857396657103ca83c0fea6662ee7df1bf2fc3b18474f1f565d2fef16f *97cea34176fd43f8e2e554c6cdaa85a225443deebd6928d620df8b9b58831bbf78696ad9e41bb7 *a9f698a8e213294ecfdfa7d6aa1b19d3af524c00050b0a42dc76435711f79576eb78f4873ccf47 *e99a35963096b58000401d83f8f9dd8b97bffbd7afffedf7afd350fffea7a4775575f0709b27ae *b1120db81385d19f31b206129ce06e88a6e2ffd2e9d7a611306637855514fd63c00b14d363e1d4 *d7bb582de644fd12cb559148c9c7ebf2ba8a9f2720fc603e948ea3ae85a92716d9b7e54a330ca8 *60dda41a2d616561e6eb5255683b4dc8cd374aee1f437e0600a420e2da630d46efa807ac6448f8 *47976ffc59a093b1187f83d999486632b32cb1fe25bcca6f810029db1d79912911c97cfc6b74e2 *e8c38f1fcfbe3fffd3293eaf31b11e7cf2fdebcff8c9ee48a9f5e65cc2fa772f650bb3af6cd9fd *46e7c131f24e28ed9c4a74c2e7fa5783c5fc67befb9652c39ab3efb2269c27a5cd83f3f22be9ba *e97e75b6474a781457e04d8da872b090c8d3938445e6bbe6f427b3d9efc850c8d9545e5ece666d *aa3def75ca0d5f5c3a19faa90a775f7a24ad5dd1aef488950a0a4778d3979789b9ac51cf05dbad *a16bcde60fdfbc54f4fe40a16f488033ba8f8b7a7773f558202af7d1648f8579e2842542499dc0 *6f24adf940d2c3090e03f43065ac5f99adb058d6b3d894ee7147d95b49546993eb7df902839ef6 *bf7571dd7676da5719c33798f8cad19dc598ddef14fe47b9fdd41aa43b4c034d872af1b3915f2d *238979b4e33b95a3283dcaaa21697834957097569f498d519fc9abf6830a4de41ab6e468ea5bc9 *b076c879cd824898998fc397a6dd032b611815352704803b04065fff4bb6d90b879fdf6f951bbd *a3dbefc78fdfa7ada8bc66a79bcaaabf48e580c3938a0cce140666d5e35e6eb2ba0e3f34d76666 *d33a36620b5a66fcda487f47211f661fe2ce32444b736090181bb4e53a45f7e673905e9af95caa *908d1208f22d6d97ace1440fad9ba9faf5556bfea24ef73fd95bbb5a560bb61739627c37fac318 *3b71a0ccb178045292b15c1367721797295d98fc33e9e47d71cfb02c020c6be9269fcf76b1ca22 *9c72329395b5673c61b4fc9991378ca3e306d00e620787d4d9612e2541b569e67ba49391c75aff *64a00c89bd8cd3de871a1b53cdc620ad373d7945dd77db3ddcc89a9c551af2410f239929d77ae7 *f538aae3c2ea446056d678979d662d230e254168c66cceec49dfa47ad17d42bebdf468260681bc *8010a300e9253abaa0d7d4a244af0cca6cb06a5dce3cd0b659b1478ecc2917e0454ee1b8421efb *ac0e0f62b3e95bb4765964d636e7d405f72a44cd539bfad7f4a179bda877681cbffe87b8b19dbb *12f7a85dd8bce9efa1d81e1219f540c50c56c712580f9a6a1e1d445409c91f8bf2104e93c76d2f *a907287d919d4e4a5b91795b94a3b4267d4f0a9d0eb6ecfe009d8fba524e53ee97d7e175a66bd9 *c97282adceeb704dfee49eb1adbd57d4edad7caed7d928559bc9caacbe1266ec7eb532aea505d0 *2f65dac9eb1b339adb72fbc0f90ec744c9321c6d4e37cd7cad1081d460d6b60615faf7ba077dca *6e5b17158b2fda15ad1987b8b78e1dbc525e912e793edff10b9c024855f8beb7b2dd493d54198f *2016e23053402e5af0d3cb579e8ec83ac287b7decdb431fc58a7d11c830359ea8fd20d6b191f69 *e54d5eb5c3efa6bbcb19a0ef1d9a71d3e3a110fc0c8784f6dee27d940d3f188e4e19bad5240793 *212b03fbdcfa10d9d75ec79548b91151bd96573e05aaaf4ac7108e0651bea5b43fe8b3b6dd35c7 *7b89b377668197b538f21f0670f9021851c65cadc25ff0e35fda34cd869009e7d039d6fdf15d2d *1b1a88015396a160f816b763815e7519a7ee6f8a82f63ccd1c0d6dc1e9ee127c640739b90a32b9 *caf03a30f3ed8921ec860e1af353d18bbf697e9d790466616d33968a9a3859450a1658e101d249 *41e888f1b1532508e50083e319a28191a442ea3a2e10be21e1a28f030e966d1af87d3683172fd1 *08fe17535e931b84b3b0c42708876f6672ecae29890af2ce4c64a6fec4b586c3c6725f75bc3fdb *76f6b3d49b1d6e67a849ec6683abdb15a02cccb053727f692e846238fbf4557f4d8d3aa378b3cc *db3f53a5c79e1187689f9aba70c793afa40de28a0309b4777f0c6b0e124ac207c4184e2bff6d4f *2e9df4823211e8ca6b2a8d2948f4f4009b4b4d3a7d82d7af01994300790df9b186aada801f67cd *f29a9ea606a0097d1ad367bc9c0a794cfba27c90a851bbbe6d13fa62725595fb5dfc8204d628b2 *9e58dc726a420da367f22f055e2eb061e6688bbece945f0d555509ba9b6db52d9af9dff7652348 *f1d17ec333bb5ee1637af4e4ab13f3abfa2496e8242878b83571738c2fccd1253e86fe6994d5cb *3c879b9eb3824598739abe945f24e89f050da75641bb624cdf4aed70e924a54929b8617c47d9b8 *f040c13308f3050029d5bec5ecdcf8fcb9f75136f63dcacccd18dfe9ed50002e5e38f9ee9ff092 *87bb7d81a9c7844c33be2ac94f1e2e6562fe126590c0f18422e11fb2e3c00975b0083a9bb9ceef *e67f635f8af6f3d85c37b571bf7d7b259b80becc25b2bd8afd8bd7fb6249e92d9039280d1ae633 *85cfd1ac56aa9b8933cdb31f2330eba231f4ce0c8a807098e0fcfca78fe79fcf3a71b00815db69 *c59bce5db4a464350a5f52bbc187a8900c63fce5c525fd2e7f85a7ebb3301ec9ec2da850a37920 *6454b970bcac55abccb8f2d00a6ac46b535888ace6172e65e40bbcf63881263a04708620528ffc *82707eb1389b2e06a878180ed9baaccf0924becb7f5d2da9d75ca226f544f071e2fb5c49d37385 *1c4392d3731af3577af7d4839a3e368b046ef8237eb07af88c5413f86e7d5b61e681ae9f7776df *6436f347f61bd85cf65cac3c575dd93ee65b4c09b9b3e80f1c57f28d3affa3f39aa3e6f9736d96 *94a1567c85fc71d45513ebd84d6b80348cf09045969e38fe742c9aec8e74c169f8f9b863a57137 *fab055dbd96b2cbfe6c80039bffada3cce9a4edf6268ea9654721c9dd586011a4c04534b8493fa *3a8c55685e7b5f278a566d33d64ebd75dceb83efd0ab1c4fe67ac7668c97c6deef2cedbf5a92f7 *9f7839cedfcbb5d0c95aeca4642a651a0f003cf1c95711af8175a7e139d66bf07ff694e04ea7ed *220d25b4a01c5f61b65c96958a2053b5c950c38f1f5598324bebc0b9ae6aab67c588271ad352b1 *16e8e0f63ce8b4006e3322ef72c00d458078f4a5d11fa873a73b98bb8da32a812e1aa90cf41414 *29fb5bbec9bc305fbe38763dc0eb99e97f424f4c6e3b8adc208555b947c2807b76c9e175a88ea9 *419abc169cc594c31fb3f0cbc891272d640109ccf9552c9ebe4c80e1c2df23e7292c57abfffec3 *45594c7dd525ba03158bae80ed0cd0edbb94ebe90cd43bc0c3b74af7b1d694c2f2e082da38cb7a *ef864bda8fa4228b9b39befa9ad349b9d896debb5679c5eef8fb0ccffde1ba44a12173785e18c3 *b7e56e076797332f5e8bcde6749135a7a2594e2c671d239b7927e18391d0defeee10255e0ea744 *2b955d3eacb363cd150f19413564cbe487e6ec874ee06a64cbcb26c7e4a4478befeb208316b0ad *d3ff2ab292819c63e828aaa7d8b896119b92af9fba941959d0b599118ec25c9adb48917fb09c80 *d4aeeba6858d86fd84d1059002f71e51423616a23faabd3de784d362595e1570e1068166f22499 *94fa59c5f93e800258ea0bfaf2e93f09ff9d21e37d9835f902c8bc39b6262c16f49e72a24360b3 *75cd74cb9fb32842091f189ca1d6220db14c554eb1c6326d4a394a43a35ff7aa9a77609b370fea *29f92236ceb1352c4e7c0dc755aca6ac4c5312d4c305ef69e0f1deb728e86fd96d26d3a1f45ce6 *d273b5ac6eb28af2a2fdbbce996e3d93548654becf33d41e11291b40e0e82e603195a90e2404e0 *f3f033b9f719f5247c436f1acce1ca69a80e1aa15456d7002a5e54e58d287a12e9eb2a4c3f162a *b83a5b65b015165a78bbf10cd3d1b073fa88f06853d9ab9af175f8eefd67437ef0a9cb2500c314 *a302d461f3eb09efeea4acae4ef3bade8b172f5ebc44cceec5486705054996aa778f1ea084894e *f77585e193a7a2b80d31e3fb498ff8637cdad1dae82a83bf4559c31ebbb2d0105f20492b2a35fb *9dca2e94594a4c2042cada45451475766c1435d999909592596d3a5d28d75ad632c998005bf334 *1a9973d048b71107a451a12a4420b7d6706d296d10ba6e5ded73fde7b4e3499e0aea488891071b *e23f47e310014dfcf18a06e7f51b749e8467af3ffd3c960194e3b3779f3ffe3c6687b2a9ca915b *a5277210fc8deea6ca6bcb99abf5aae773184e75bfc7eee3fd9ad8b995965a7176742a90b3a7ed *f376f77ec87c276f62efb774e66dd0b15e80b05d81502d4112fb0d5d5e9b8ea59de8098f9acd22 *7202246d704779d6b2b4f78592fb4f65ab540ab718e8df0a1ec89c33e99db8c9e0f97ced64fd51 *d1ac383318dc4f80567c190a280a146a78c6dc9ec42126611c2df21bd53794808b65277fe5c542 *1ce6fa7c556252ef177114ff314f5a5d61944ac9e2c07f71f3e41155d007268173586e1e360740 *846a39a55cc8e9374de860cdc89ed0508a3a69606ba15fbc9c62c1394a026350d4578aa27ae2ce *48b5d64279c42272d79e6eecc04fc7e419ad36b47e6609b951034b4d55ca9eddb1df1cb9e06c56 *9e9248129a7f7db9b61a2d5c27f78699c3b0ddf19ed8cb6811e9427258cd282f30e20fc5afdf94 *7b924e6949c53bd466d4a4630509122e272e09432157ece8808e036548a9e83db0fe86b9761837 *0e80dc2f585237cb584d86f621957b656e83140b65f258963765550c12316bbe6d29ed10fe3d6b *b5a8ed0dfc11aebbaaa6aa22aa4c8995310a404f98963f5372471486719a19085cad85518af72f *27ff6ae6688fea6bb4a0608e702e1fc1c232b47f39f99d6e8899a650c6c3dae98004c58ed2d276 *1e79d6e4a6561e40394525e93b06aaba0e5a2337b7ec4660dc078674bc81a25ac3fdcd92fed577 *46e04bab8cecbe012ac324a1066fbbaa9786ad716ee511150de694535bef371b5f5e4d06e6940c *76a30f642a3d448233e9496068c0985be7c9998d17cc73cbbd48aada3fbd3dff181baf2ebdc24c *c96a44879a351d0f89b6defa6eda24d04ec6a9af37b42d9eed616869d862eadb210b17ecb51da4 *062f21509f3e32a0e38f297ab0ece2aecd94402715ed0b6ccdafa9fc09265b47355acb549f52e9 *6ff81a734d715a2d7a0dd45c864d4978bafd2b94cc6f9ff7157be0c0c33929d1e7738c440954e4 *2ff6830fa0274178a53f544a27fa3879156e3320531524467fe03733f6827dfaf4e69018da0233 *6fad81abafc184d391732bd3f7d89ca969f1ada4cfc98f9f5efff94cd547db63024612ab39a57b *1d5ec857eba5e9383d2fabf9beda8493097130d859b3cb787c2d36bba07574a6e7543127e0da68 *ec6890e41bb35d79f413e0a537dabb3a1c46fe24a4b41f8613095e3d7391f390b1e91f0737f8bc *4566e62cc9447fd5cf3efa7ad083cbed6d1adae27b12330e00b6b0e669b273bab9d33fc1a4cb7d *833598deb062be8ecdefadc43cdb6dd98237bc6548a7545f9728716d647d0dba2b528338b50788 *b5cc9b6cbb5865530ba7c900ac56f18b47a07b5dd1a7b3f678a17538e81dd6f062c1ba01be47a6 *ae9630fe3b88b4185eacf24251d584dbe8f2190ee4cdc8246f1bf3aca3d3810da4b39db449b37b *3689cfbd533d81b5d0ff0f504b0304140002000800455459390d094bbb92070000091500001b00 *15007365747570746f6f6c732f636f6d6d616e642f73646973742e70795554090003824a0349df *028b4955780400e903e9038d585b6fdb36147ef7af6055ac94504569866ed8b2b945d1a5403174 *039a6d2fae2b3012657396498da49278c3fefbce21a9abdd2c7a8825f2dc78ce772e4ca5d59e94 *c2d8d68ada6485daef992c33834b44ec1ba52df11fcc90dcbd2daa290ffeed480b256fb9b679c3 *ec7646d791d46ab308afcaa444f3949803bc34bb4daeb951ad2eb8592cb8b4c20a6ec892ac1604 *9e387a56db1fa234fa314a52fcdae017895e85cfbf5ae5166844fd026b94711414283a116cdfb8 *b56751b2582f1625af482bb92958c3e39259965c3aca4a69a2ea3295fc8e08493a63fc263e480b *a6e14fa67953b382c7812171449adb564b47e0d5689e5742965cc7e01ccbb584232b631bad8ae5 *2f4af2a01949912e2e85966c0fdea944cdf12d19b457a05a355cc6dd5e4af5ef34995b578169ac *8c87f52a2b6a65f878050eba67b6d8e231836119ea17f036f648f7606441b4e3c9365ab54d7c91 *4c2844d51f6cca3a62ef08d017db29fb41f0ba247f2a2171af77c340183c8b467acff6b48de695 *b84f4d5bc14fb01bac91ca12bf35d8138478d2b15865329495a1d099c0c5f0a0da3b56ef00b1b7 *85d57567e692d2a0378aa27760216175ed22680067107c50732b8c501253c56a55035d8f38deb8 *288c1321c338e4803f7dc81b30c99a981ab0b4b14a41eea1e4002b43c7000169c0b977e06db25a *210c3a236711f50e476a7fae1cfeb0b6b65f3e1b4a4727a5c4ab462dc188417488f403810ce1e9 *3c2e0c9ec623626a61a76fd03395760cb347899d3ac095acf916af279240eb4382c65e3ff2e203 *7ca7a2c0ef3115596df2d989e7f5a0079a3c106a6ee565cf49a1f86a5e58a5a1740d38031c425c *de01015f7ca998dc84628227aa85e4782257117c49c125a8b48007247a4a0a26a925ade141a3a3 *7d328282b658c8912d334d2d6c3c4100a88d1d4db25c7e3d75d10e8e96c2fec6970d249aec4f2b *1de447ec8993a39a8492964bfa33054f958e0fbea6fe3a8e4ee7addf74cb1747c00822fff0221d *ed09114735b77b6ec0e6ddc24b33fcf2812aed6bd3e22824aefd3887e28a8993cb47fbdced5f3e *a6f27ad2d58b351640ac4480a63cb40a50a0394e0d0de698a6ae4e44f1ea73b47e9e44f1eb27ab *cfafd6cf4b5e73cbcb6564c18d5142b1eb67ef9300f420f17f60fe50cb3bd5eea64e84037b5f59 *3ccb9d80e3d1ef6942c09747ebdff5b036ed0d4c33ae5a5f64df9c5f642f27051690ae748971d8 *b32636568f42918e6213d34ff2d3fd8be293a4c9eae2723dab02a1430569185d38a5ff4a5e2dbf *75d8f29fab6fd6cb65e4bd191d230d3b8a902d0fc6ef444382e71f15e6a003e3dc23fcc8393fbe *bedfd7f34ed30f1033743c38487cc18c7e1a9b4e18497222516094ccee989671d44ab47e23c5df *bc241964f5793005ed034968dc570606bfae05029443c71a06ccf1f01ad3b77f5c9f5f792134cc *8f3e153ba48e811f7dfe74f7fa1c707f0eb83f8f1cc03f80d1e929c963fb70569d66c0033c60fc *194c4d8de79a358847f09ddd30c34ff33ac4dc22ce5fe25c3c7b8a9a19e3ef01b1bf040ccde77a *cffa3b82dd82ab51a4c17664b7426e20891a1cf6212e378793d38f1304bd43e7aab1b03744c49d *87fa089a25940d9c93875090286c3910fa81c9dd37b4b86951123a03ee33678643096368428da6 *47a370c674c77973066db701f97447c7e2710bce34136a35e78469d71958058e2405d41d8b678d *c8f3113bd3c556dc7257c96233538b22cf2030782c5a4ed4765dfb40ac224d6b9d09a78e171480 *6cc4773412b10ad3c7a563588f55afbdc325df80cdb71c9d0e0effe7df457ffdd0ad8c0dafab51 *c2e26706eb79b820c6946f36b990951add3ab8c88b3d764b47bde116d1c56accc907f91c393a09 *a303ec5e4ebf729a2e630d7483329ecceb81b3d391d2eb5f7ffff8f6ea3ab3f79626338dc59617 *38c0b3723feeb5a3bd3db70c2bd77c77cf763c1f47020886bb17ace77ee25f1270029442eddc99 *8d39523ad0d174b59edec8701943ead842943dede5a9e907ae04280d91447de33c9a7e1c25b619 *9c1a7acdc73d64d8eb1cec4af7081ce0af1cd3a586849ac3046e295391be5864279806d4dc17bc *b153b6a704ea7e79205b56ec30095c2b7769d009f12e8a3fbcf9e5fdbbabebdf3221939904a83e *06af7db7505e0de1cc1c0013d0caea9a4275b228c8c2af6f9198bc28de49c5ff5bcc849507a4c0 *4e6cb7ad818607dd35b0c0d96ac2b5567ac2630e2683a3391cc6c9eaeb75666f720985177f2b0d *3d28abf25a15508457b43b155d9f1c16351330abf721980077160156bba92f8e3e5ebdf9e9c315 *feabc3bf610a443394211890e1681ee9928adf43f44c5c9db8b78491749887c78db9cf14d79d8f *782308832c194c3bcedf084b3f3c13b3552d4c055b0665136a3d5115d65404b64f70b476ea1bec *e49d635c5e6a8827b4b91ccbb4f34e4ab0ed41be6a9f1b66749a80cfc7320e59fe945ca38d78e9 *eaaa0d0935ce4fe75d2f83c6563a08638fe01e95fedf687dca7157f526856c50ec6ffb59516de8 *647edf32e32a8b322905853b186651f72c72283b99e7562b9121cc9567856a0e29314242771196 *ecc5666bc90d0705ba3c43425ea6483b137207bd48e1adef8e49eb0eb86572c3c7bd2accce1346 *b0cfabf7a61d2306cd7105281e9d3c259e7a5a86ffb7c36406629407337c260639f3e7e9e23f50 *4b0304140002000800455459394f3f761e37010000730200001e0015007365747570746f6f6c73 *2f636f6d6d616e642f5f5f696e69745f5f2e70795554090003824a0349df028b4955780400e903 *e9037592c16ec3200c86ef3c85d51dd24a118749bb4ceaeebbed5e558816a7432280304997b79f *21a992495d2ef8b7f1c76f8252da39a5e0082701fc35da594d4d0bcdc558ca0a6fb755a4d85731 *586714fee455c4a9c40647742136ed8c424d93b29e321f51cacc62d985126fd24ba89cbd149942 *d6194b447ac410333d78544cd40266ce9728e39c19a20bda6c694f0e53744d76c34b786320a675 *c0bbf5652f6f380b61fb1852069a48d8ae2c72c44436f88f63f32adf9af74a79814f0f5f53fe0e *1e380bda1bd09730620b053964eb08acbfbac120079920dc3dcc7ee11afa9e1b2a48cd7f4226ec *b97bff18e92084e852e8579a5cba64f50c8bcd2a44715aeeb9011fb8e4e7b4ec42ea75564b23cd *ce9f954eb5f9cccf61ffe701ec9609254be8acc3dde15f06491d237ab3af2cf66fd0cd1bdb7a99 *bf504b0304140002000800455459398c488c3367030000b0090000210015007365747570746f6f *6c732f636f6d6d616e642f696e7374616c6c5f6c69622e70795554090003824a0349df028b4955 *780400e903e9039d555dafa4360c7de75744acaa812d8b765f57bafbd4f6b1aad4c7ab2b940133 *934e268992706769d5ff5e3b133e02a8aaca0312c13e3eb68fe3deea3beb84f38317d2d5adbedf *b9ea6aa19ce75236529c99b81b6d3d5b1f71c79ad577164db4cbb25672e7d6c6c5dab2fc9a317c *f23cff49ab9367bceb18c6344242c77ac92f8e79cd7afc54fc0e8ee99e29ad3efd36faab56e1dc *a16f16403ae859731e3db4ba8366f1291cc8be62665cce62587a1207c75ed8ebdbfcafd77672c3 *0c128405801e41b4fc645083eadc43f86b71aacd782a535b7a5aadbc50036c4188691df3df7ba5 *546b6e0c062a26823fb2bccdcb43446dbcb88b3f817d639fff07ac46d8d9cb821facda382d0db0 *830af55e251d289c0721bb62a1a7073f153cfc8f9a585920f9d948b850df5fb5da94e503e3f2c1 *473789a6a23eb5dc017b00bbf277605c8d0cbe7b504ea06250d7e720a90eb864d4a304ee491553 *6b225e31512897142fe01bf8deca8110dd36dbf0a703ccebafbfe743e5cc9428cd9615671c2fad *ea2025c35b68f075e397a99231ff82fc70fc9e9e14b7178a4bec64d7c4c92c4eb172a772dbd8da *097591d0bc8325a60d55c1a2bb1c1bf4c460ddecb19168d0fded42b544067bc5186e3d750e6d6a *67a4f028f47d7cf6b8928082f11e23e0dc2e9db008a45d6db8bfd67f68f194cf7ce1e0ff8a7d0c *18e5210671ed89e9a9c18b45f8a6a199ab92cf76f3ad4fc77c56fd7b4d283d89567df98664bf1c *e742146ba3cd4ac2715622e4a2a056e374790b50244342e2ed8388a3eaaaf9b7b1e0c0be4373c7 *997bf9522d0738d9e0921337dea55037f7f2b96212de41be3c19af9a8c5732e0fd9ca006a1a5b0 *e1285c6c5bec03b9cf1a5dcd4699c89990a27d5aff58a7f562a8971a1d966685fc81fd1c49cce3 *c4e238b155d33f3ed705eb69c3f92b109219fc82137e38a462bcd6b8fbb86daf0273a64d382dbd *411132a9125aafed983acf7b733297fa921d5d79b863e6631284e90b67db8a75ce97bbcd8287a4 *efc3cad18341ea07b7aac87fbf096370e8a775cbe992a19df9036ec15d71cabca2783bbcd88d5f *b8749065db48d8075de4d41d0a84c09fbee13baf5848609a1a2c10c52b28401a61aac2b4677614 *62783c5f826fcb5e6c07052bb81bbb29527a733fbbbebbb6e331f62651e1cee33f0b7fd5c07fd3 *fc6bbfdc60130774790ecbd2f5b783e4c836fb07504b030414000200080045545939361d3c6dbb *060000b51400001d0015007365747570746f6f6c732f636f6d6d616e642f646576656c6f702e70 *795554090003824a0349df028b4955780400e903e903a5586d6fdb3610feee5f715150486a6415 *fb1ac05fd676c080b52bb615289005026dd1361b99d4482a89f7eb7747893229cbc9801aa89388 *77c77b79eeb953b75a1dc070dbb556a9c6941b75383059979c996325a4b1ac69401c5aa52d84cf *165b52ac85b19d15a847df5e6ea3e423d7b66a99ddf772edc3aed2dca84e6fb8f1621f50598b35 *6a2a59c01714fec42dab99650548a50fac11fff2c0c8789937d0a8ddd40daeb5d2a3c0dbc5f08b *399a0214fe3b455ac0ae51ebc562d33063a0e68fbc516d168698df2e003f4992fcc92d742db46c *f3c0761cb64a7b8503971605164eb2e666a3454bf1c00a129f3daf2624a4811a1c54cdd341b533 *5c57caa91ad40ddd28a3b31bb8730af4c9924e0e42490149475f5ffd13b07b61a04fb97721c98b *4099ef764bcaee0af53e2bc9519b02b57b92b77bb00ad69c3cabc9757a5c924a23e4036c45335a *bbef43586356399397a2981e6320e9e87e3ad818d05721824c77e0a6627ad751b2c8dc2fac311c *e01a14a24b8b9ac39a19ee53bf05ddc9ccf0663bd48d3e620bf4a41c2f3a1dd1c79d1dbac68a0a *4d9abe6e7fe98e9f4b8d162a8a3fcb47098e4ecd58f5d288952a287aa0e8c49e989678de6abe61 *96d73e3b28368625a4b0a2ef057f3a8932761043a06ac6a75838d749d3c3a844976e8a4db9169a *35e68e59f3c48e062bd81e2bd79c2b48cb14a86efd11d011a043d8a6fdc53dc0369dae855ef41f *1ffc56c81743e702edbb7b77dc565e9a00e480e4408ef16d559287a0e0a25c6bf5c065e5cfe312 *6a26106a1f3cad7c2456c92289e40ba219653497ecc0e18da676c1ef35c78a53d708b91bdb1dbb *3cd47d03193ae06f2e66bcc923f94901b027a81dee061b74fffd7c41e7b337ca5e432b360fc46c *aea64b4cbf6b71d7dd06946c8eb7c8c47ddb935bb11f03a9e06d357f2ecd86c98c28b5a4af2c7d *4b5a693e003902a2639015f27149282abf2bd137eed834e888cb8a0fef261d9927cdcfed110d10 *dd88f1af330218f18f9c48989de9d8a045bc676c6de86716580ee2b15808e4cbd5645865915f11 *ec2682af2420f22acfe16a355cf922567f77a59e41ac43ed72e9591f0e9db144f00c31dc302b1e *07da774d4b6cef47cbb9151cb8485856e923a13eb9e9dd5a9ce33580da27f64077d5c1d07783b4 *1f370e49a99f5771894905b31cae0b7164fdf545f42c5c27b241e0525d5dc7e5b17eabd5770cd1 *c1ef842dfa2b0873fcb5f52ce4cb5e6ade366cc3a9c686b745fa2e8d90d05e3994f59c17d7b375 *8c59be4be12d642d2e641d8e0dd2bff9e925266e23677e006905b479e42b1abc9ab3d83b9fff00 *1adf33995aa02662b4341ad4a2c5c86f1f2e3ee8772a07cb39280e813007a81197b8d2b4c5659f *a3f13a3fa82783e61a3ee24a82cc7e1840454c829c69d512ff9a201637917102a51e616948bc3f *77a2a9813f63bcc6ad43422e1d602686783093478b6b52ae50392d50cfa9ada6d8885c38294ca4 *7cf04658ccd131cbc937de076af7cc7a8ea3c940db248a2d0ddb4ef8757c79c01dcf6293b2b61a *b38a559be3da604a65af1ac827065e11f76b4990ee8de6582460325861879d768a1f040e3689a5 *f18d10443aa255653485af1c2515334bde9349927a632073066901307952c483ae8097e6811d28 *4e1f2bac589ca92d4da296cb2cb6973c257142708bd458982c9e623790fc2d13fc31a18aa9eea6 *518667d152a08c45fac33735136608b73447deb8b06cc533458ecd59b6441883043debbbd51481 *3d8420ecf1cb9d6bfe4f874dea76fac93ad15f59851322ebdf4bc631509c522615edcd260f96c5 *c98e7efe2ee069903fa32d13e775c263a742ffc10feaf1470addbfd8483bbcc6dca130ce070ab2 *c586a319484f088fb4774dbcba8fcc600ca325ca04ea647751ddef0bb89bd0f90400f793487db4 *f42a9225bf5180ae034c1fe7ed29adc0d6f832cd6b8cdc7b919f99d278919653af5f463a7db036 *9d1ceb764ac0ffef97fe35a8253aae5abf87116a1cab692a2351c0d181167c253b73b62c86082c *0740c7575dc3b76fdfc0ec55872c8eafa50a367b8eab341513d3827b914ba1ef86abc57cb23f2b *cb6fe1a8ba7e193b251acd0c0b843701c8e41d1e1daf923c7e45f298a78c0dc22ef4c2b56bdc00 *6e95122648243e9886f6eba99b715fe3c84035979b230249c196bc5be3ba46a9ebc72bee907bf6 *28945e9cc360fa7e79c153e7e80c5f3f21b5b75c8f3918287bd808cec89accf87a85d6247f5a1a *7b6c785996f3f36fb868f4eacc21d4241a534ddd5b1a8fa8e2bd56bf2aa28b17314465bdbb9f80 *b6d7bdf0e211fe4f5a165c93e77346865dd51b2116a2475970477e61c29c248a547f4d67cd5b5c *205081b6125667afcd91f31dc359c97a1a0f3c2e42fb0544ce5ef8fc07504b0304140002000800 *4554593954894b4e8c0500005a1100001a0015007365747570746f6f6c732f636f6d6d616e642f *746573742e70795554090003824a0349df028b4955780400e903e903ad58cd8edb3610befb2918 *050b495d594dd09b015f9a264081342dd25e8a85c1a525ca6656265592dac479face509444c9f2 *ee1ea2836173663eceff8c5c69752286dbb6b14ad5868853a3b425efd4e9c464b9aa905c0a635b *2b6a9373ad951e987eebcfff6cac50f23d12579e66cea6136e1e0e5473a35a5df041f2a78ed64a *612d37b63ffe07be7f54ace43a232726e46a55d4cc18f277c1a414f2d0d192912dddac56049e92 *57a48613a4980f00fd872adb9a2786d71540b91fc04bfc1345d16730594bc2886985e5445584d5 *3541650c299801550b252de8c04b2224b1474e0ee2914b0fb61ab07eaf1cb13b26c20064c38a07 *76e09953c9633a7bdd1503b3416061f32b5047065892dcdfb3b214e85f565387757f4faa561678 *9481ae80292c70960418072c04d29d8d8fac6e39b1ca9d39843cf4c428e214dd92bbdd70242aaf *4d4ea964274ee9ab6d3c664bdea195aac02ff18690d7a43d1c07f10135674dc36519442ebf1a2e *1fad74156a01ce60d6eaa42366249a3b250ac27b71adb7612e933c73494c69c3ec91d278065e29 *4d2a81e196a4cf6d5a433594a2971e1c063073717f1d22e4a09ef92aec3189f3e61ca72e8e4800 *3f532aa03e2845c225003ea6ddfb64d9cee3741be7f12d02dd6dd6bfec2ea4796df83226283698 *c4bf0974d3221f3e17a6e285b7f1cfa1e68bc2e9e62ae64b6c5a14be6e123e58cd42b697a29344 *c1049c66e627b83919749a254ccd65e2e4d357dbb7d3bb7ded3940d762de6127f3dcabeb3a7b39 *c777f7660705552a195b5268cea04f312281023da96b5b98884ad667f8e8cb7dd5374d84487c1f *effb2494bb3fc17ea05be95ab0af7c5659ae21a5d74dcd0a4ef6ada84bec0fbec39a420bd7e721 *30d14b443bc1d6704d951374cd65b036895176dd39761b67f12986bafe0cc08e409d8531969869 *78212a015677cc519acd511c338298389bf833c2487a6f7993139e1f72121b0539e5332cb830ed *d177e368c16c16ac16df796f89cb94208b5d9c471430f4138464813ce4f6157aedba634f1f55a8 *845c54204cc7b912308c10659a6013be716a5d322e9be54e7021d062dfa2260179f57c395e010c *94b98d027a1454ca82e2b3d261c2f0c5a5e4b28345ffaa16568cb3cfad331496f70554945f0a32 *c8634ba4b264afec319a60047d60548ae9834bf19991bbcb203d72bd5773ff4c817221a1726cf2 *268bd76bcf1fa7cbe1f649b318c685d43a70ebe6dc452cb338608c3304fb313746c1ce50740dc8 *716ca69b1db48c31e3712ad246ab2fbcb054490a1ba51bc77ea9c3152828c0d7e4bd34ad86ed09 *8c2b9965a85bdbacad5ac3af59a54117a05e8d24e687038cab4ac5414c5f935fb18511fecd7269 *5cebea9bdb0c8907bd618074fd0fa6a7858e26a413dbbe4d9fd061140894e08216a7b22f11081a *ed9b40394846bdf65120a8000b3d85a26793e3d7bbcd6e42ee37d08ec3ff82d034e72400b2fa3c *0bad871b9313ea439f3af35d703aa573546b0f6b749a4ee4bf2afd00d1a6900e79bf2424531658 *d22883e5f6916146baad8a4b58fa6b76da97ccbd8b6cdc67eeb97832bb44f3ff5aa17912df98ed *f6c6c4e486846ae12e9191e0008a0b433c43c1fc0a5473aeafafb803bc0b9eecdd7ec132b8b7e6 *4ccfcc0de96d83a99a04f17991f7c692819c9a0fa6be6a272d1ba267c11aea3d6516ea77c25f71 *5b1ca94fd2c3c124cf43a64f6be0d6869ef9075c3fc14b9f9a8ad3cbba028b499c7f51a273ded8 *82d3c5c159ea3305475f996dd0ce14640e649f79104d03e122d1f09a7b632292803c062ac5bc84 *ebd3974ecd1119a4e505f022dc20fc643375bdc86fa69364f2af49f394ea5ed6fbcb87f3aedb53 *de8047df4be81d7f814b2d1488363c89be6da3dbf96448e7b2dde6ba1da1dc329ef8b86e3f3070 *cf28d46b90e37f05d3198f5329f39f77031fa5f8f640e9ee761ae8ece2d5f1633fb942c582d245 *473df3fc0f504b0304140002000800455459397e33f9e31c0c0000cf2c00001f00150073657475 *70746f6f6c732f636f6d6d616e642f6275696c645f6578742e70795554090003824a0349df028b *4955780400e903e903ed1a6b8fdbc6f1bb7ec55a078354cca3ddc7a72bae4012a78d0123096c03 *4e7139102b7225d1477105eeca3ab5e87fefccbe7749de23edc71e9c805acecccece7b66b919f8 *9e34ad9047d976a2acf97e4ffba65c1fdbaea9d8bd24edfec00749fc0215a46a8e955b58c8e17c *b520f07741be9592ed0f92484e8e82915fce03bb271b3e68f4b6df124060bd68792f0ad26e08fd *4adb8eae3ba6086c90198554be752c3dc28ae783ddd70cf67ea7a07e18063e68b63c08b94e585f *18921cb81167b1d8c4d2d8b41dabf0d16e5df3c3b9c2550d29983c1e24e700eace6541dfb7eb81 *0ee794640d123e0081c1c2f5ec54d9b5141858aa79bf69b76effa3907cdffe933994826c99ac34 *54f5950e8bf867be7cfff6e38fdf7ef8e1ed72850adad33b46c47160240012a4857f7d2b5bda01 *ede6513642dc04d882747c9b9261a81207f0cd62b1a35f5935c8ae01bdfc8d76822dc0682a005f *0bb7d2b56b793e30f89d891d1d589381d236a8acf2d05109b6b527d7d764d9d0e1d4f64badf190 *cca7e1c816ac031c2eca9eee197901b47a99695067bccefe1aa7ed0f9fdebfad7efaf9b37b1f32 *ace8da17a30d7171ce1ef1ef4085582c1ab60127a89a2e172bfd0ed8749b78e801ec6ce8895804 *3f321084faab3ba0e59d22f7e66d68e22ec3b1cf05eb362b4f74b95c7e8790814b82116842a0b5 *81d5920fe782c81deb95e1237397976d0f72af19603b4a1cb633cbe046b04b697e8134c29f0579 *e3703c97a5e3cdbd4c6804f41d08ead32ffb533974e5aafe6895e495e0c7a166f96ae1c4320f94 *084b730b323027422fdbb4bdf697ca44cd3cb360993f0b463f15bc7a8de9778b99de1cbb4e9967 *b003c056763d4751e1c32a468320308966d6738b1fa3ed7973a0720758f67d290e5d2bf3accc62 *c803adefe856396099955f78dbe706f9e6eaf20fb793c015980f20586928a68257b9798e711b26 *3cdba875f070d8456f196017f6c59a0a734483b48a098aa19ea5a764a5f9830853380a8b880224 *b4ee44cf42d94941d857f0040c3eca44306882094224973bda2bf6c1202468b6c0fc074a86309b *900348890e458676bb93a1e7a199e08bfa380cac979005e58ef7af5d8ca3235a10739a325a73d9 *298f96535914b1a80bf2950d6b2ed8b5128af9518c4834c3b90257d550e64704144b1fe484165b *f58c354205c7ab315748ea34b45247cf50cb04e4011a0371a0ca9154a1222b68c806ca20af832a *7a2ee3e44ec023d5ea8e0a2ae51004c6223b6091617c5d6481a35f90cf7cb8a3033f02362ae530 *70284ff602e48df58be07b5bd780a4b4ee4eaf3f7e7ef777dcef3520fcb1fcf3c2db3458cb0932 *a5d949d95d610c086a8e6f38e81cca84ad585d25eaddb48390a4e140f66c360456000bd988ed5c *53c3e2c607d5f95d57285af39cecf90943bdd992d6f2483ba24e06cad940bcedb5e9b23d6d7bb0 *fb08d964a54803e5138fbe58f8883c8a5f1acd45b120597bd70eb69cc61f07415d0dda885cede9 *e1c602dd8649a605710b49fb5a05e0c2547589b6367d6108da20a3822966631f5926a4a5b6173b *8840ae9e2b3bbd4310c0fbc2144101f758cff8a2032d5d395bd7f6772a8b3567c06deb98cda6d8 *f4298f0f3318c5cca6c89aee327bb5e9434644927c0da625eb35eb0bcc8a1f304c8a34c9066a9c *038e4b84587470b49f78cf2640d0376e6ee31746ebf0e65ffff64cda9cfe0416a741479bd8007f *3d5a01374c99aa77acbe0b0b920eaae73c415ccd9d104d70bedc1845dfc7ad3cf28460b389724b *b54255ac90fcf95590b26274c4ea99b5d0ef28b3e2bdc6471ac5058d130176b2b19452df83f5df *a6339ed1187aadfa9d62e2f15494d62dd0483e3ea5c21ec801528aa301e6bd19a5ce958f5a1cd8 *f1fe8e7a120ea46b3e1b31e097027f52d535aa1ceca10c59759a5e7168c3232c8b7141914294f4 *706050986b3ab3dbc4b2736547b82f143bb2ddb3eaf1fda7202d1f8e74d0834c7a4e1276821037 *1df8c229429e14857af5da7445766c3055ce15e846b52904d5e3625cdc3dda7ddb3fb9c7e81ace *0a545396c76a881a705f8afcfaebafe447d61d5e10f20e4a923e93aa3156a549db304a4e3b8605 *049624826179ac6beab22c47d442166e323b10c9d09f97dbba26979fbbe2f29e5c1af703d1924b *28ff18447806adb05ead3aceef8e87e523d4bfff3ea41ed27c0cf3e3cf1aa76cce93d0e3d94f6e *1f529f86c4d44d48355645c7e890e86204743c3454b21c34f950ca7f90b3510a69fbba3b36aac8 *17b670c7bc7d3569b69858aa10251f11598db6d0aa9b277e41320d92119dbc1194124cb6846f48 *aedaa2afb483768380737649a18cb92682b14947131d0bde1d46034056a9079e9be64b91181d41 *d9dffc09900545c5edad101ed8da1ab4d95cfd7fbcad0e5a2d7baa661c7c1ea3cf513e3f47ed21 *4a3e2232de6250238da7d19e8ad2b9a732c57f7f57f1f51756cba7f3ef51f21191c0352e20b6d5 *77d01bf96969e6277aba8ec9577a451baa629a607e67b419a509bd8f9e979aedb052182d965585 *f9bd0add356dc570785989f37ecd3bdbc3f9d1e2739a24d318608a8ca9a663ce513737660139f0 *8ca6929ae2b24a53a89bb9cf26a2a71e2c18393e94a5239ce08c93dcab03feb7e394c98aff69e3 *cba04a1bd5bc713930996d5271782138a58d8ade29ad2d97cb0fda28e4706428840c00328d8c53 *366ad333fa04c6429c5008ac5fcd2c299c53ebaa42eec07bc58e1fbb86a87ecb4feb14b62224cc *fca33b9335c3b90fca432694a8b0bb17aee8fe02b9d08c8ac04f798d242e376a9a64e64558d8d3 *8412d8986ceb4b232507ba08ca6bcc16d8e5352df82d5e54dcb1b3c86fe04dd830615e3092085a *8d604a7bb8db86a3dcb8070a66c06ab8fbea26cb6ee31ecb701297e310f047ae031bbd0a80ed09 *aeac9747f727664df73b5100e2477938ca511f6e96c7b39f08de834396c702e5c9e3fbd2623cbb *c17c8aa3e2e4fa918934f9665635e39acd1cda761948fe555646d7108f81d613b078c762c47035 *194be688f180989d246950afdc204e69cfd710951ff71a6fb8565611e8bee35ba8ff363c5f220d *3594c556b8e31487f1a8a7972a36bc14cb221662b8493045016cd5dfa62a09397a401d5ad4613e *349cdb6e525164f790dac12eed666976a42dd884bbf556d7851ef8d592d06e80547f269ace0bf2 *0bd4ef80d1b08e49562ea382050351d8d725b5239e1314e6c917d92951bfc92379f65b6f22c5cd *c80296a8c6aa5a732e851ce801ea88d5d5727c71b084ffb61d5fd32e862ee0a79a37a827adbeaa *9a2160ae64a1f32cd46d3d84976a606e9a0caf97aff455ea127adb6eb99a266377041144144afb *e4071d95523430f772582da7ccff2519dd44c53394191e4065b120e68e0cd9cecb25c3c8a3c528 *e6e54c1cfd07e469e4646e6e371dddaaf12434f510179b0e6d432de6ab3931229e9bf700527d6a *00781a16ebaa596e7120b2c32bc1746e6415b55a3d7800a2d81631db4d57daabfbd913288b2a51 *48ae00710a777bcfb06d4b9ee773e6e4fd005f5e245ac8935c246e3705b2c4fb4636ec9159f25b *7c5577bb4addbdeeb860f96a228a25c123fea623fc38667d966e0210e1842ff21b17756e0b975e *aedf14b3e3693393c27a617a6a151fe589a95ed5f510cc21d74e65fb24fd91bf92371369fcf173 *d987078ef7fc23ea6f59a6b38a2b44e7e3bf31b2638f557480ba505fd6f859a8be81459fb8bef6 *1fcc5c10fdd5886e24892b00f5cba8bc8f9b4d9be675f7eb52b1290cc3d47c8d7d751116bf7a0b *bd4ec296dd2c4d75f30995b88d34780d5b1fb7607c58700cb43a408a1db6634cf58e83c1b897a6 *e7c4afddcc02bec49e9ff6db6b770db5ba227e7a908f5b243d2bacdebffbeec3b71ffe312f9cc5 *b8ead26589934d2c96698914c955422810238b44124572f89882974174fc6066ec6785ce6c54a7 *e3f9c68f2a86f369c7a0fb62f6b623fce84bc1678bff1b56625849077962043b0ed5cbb66a300e *411a021c3fd909b99483c03bfcf7c1f008271b81522fb47d0de44487fe355d6354579a51433028 *c9d597037b062d74bf0d27ed17ff1b515e4cca72428493a2f3641219fa411b1582e1e79ece22b0 *d347107578ff11a3ff88a4e14ce0e5037eb0a746078b09379cf8ca48f707b129fa286e0bc6677c *3690ce515d9dbabc5fae4a94831427d07c9ea994960ebca154680f44bd2320ca4d7bff173d0981 *7f77ddb1d99ef5974d3839b1373b900ad22f44280869b361ea13254d669136b64610f6f1e64f57 *b78be4961b54a97a3f746d144e1c199d237b298521cfc4a9e980f31f504b030414000200080045 *5459396fe6f56cb802000075070000250015007365747570746f6f6c732f636f6d6d616e642f69 *6e7374616c6c5f736372697074732e70795554090003824a0349df028b4955780400e903e90385 *554d8fd4300cbdf75798ae56d359aa8a0b4242dadb0a890312370e80aa4ceb76036952c529c3f0 *eb71daa45fb303bd4d6c3f3fdbcf9ec69a0e6a496e7052515199ae13ba2ea42627942aa9b2b277 *04b2eb8d75b07ffe9680ff0441b933258d074641976889182dbae0540adb520e74a1127f633538 *71529843f5dc997a8aef7fb6a5453283ad7026f1c46cad3c3161a373f82cdcf32774a2164ee480 *9a068b652d2d56ced84b12624c2034571ac1946993a45282685f5cb62fe9f87eac364dd32703da *d84e28984c3134875e0d04425f00db96e31b03672bfa1e6df0248e4e46981a1b0e934e0a25ff60 *697a5f0e6584aa0989fcb7e750dc0a9923fcaf429b127b78840f42112ef9eca0f70946777e2fc3 *e4b334324f174cd94c7ef5aaf34560b440bdc8774e0970e7f343232d397086111d0cfd046c06d7 *4885346321f3de226ffcb8b4afdfafe88d556fa3eea036fa300f88f5e1ec057a23b58359db9ad9 *145c3678ec579b788b6eb03a5978c9b2ea6a4e3f26f4526ea41ec751ffb383be731cb5966eb649 *34017b16e549106e759d5d59570f3ed331bf05a645b775ff8596fce2cc010bc913fdbfb8c36990 *aa8ee33d2cc1cb063300c70ae76c3621e687c578c8b7ebbe1219956756b71e1b1501ae2570a3e7 *27dfe108901e7338940cc882e387f690874db8aeb93116fc196215ec2f53e62173589fa685e3f1 *05759ead741810b2070f714cc62feedfc6c187e44184614c95d18e15ca37912f203ea62ecde141 *b67c6bb05e25e41bf2c523f1a159b7ddabd72f967bc659dbf321f47727c6f3cd2bbc6ab2f4e3b4 *16dc22b8a778cc18e29ed21db5b1c0b8dc8cba74d071a1e86766a8e859b4c50fdeae6cefbf81db *5dabb8d585bf943ccc09f198ac175c1b176e90bdf8b16edbbf3ffb33c4daa9f11c394130e6e939 *7dedfbbcf39ac698c559ecad953284d9f675fcc78ab06fdebd7d1be67eebfb0b504b0304140002 *0008004554593952822fb0df050000aa1300001c0015007365747570746f6f6c732f636f6d6d61 *6e642f7365746f70742e70795554090003824a0349df028b4955780400e903e9039d58dd8f9c36 *107fe7afb0904e40b24bd4d7abaed22949fbd40f2552fb703ab15e30bb6e584036dc661bb57f7b *67fc850dec25171ef6843df39b99df8cc7c3f153df8981545c0ee3c01bb9219d8c6ad19d8864c3 *d80f5dd748c2b5d0dbee74a26da5b79d468ebf56a4ecda272686a2a7c3712667459aee30476042 *74c209bc8aa2a2a04d5314e48e3c240059f34351f386251b92b08a0f855ec3d7ae1f78d7167b2a *d52e380d2bc963144515ab89a79b7ee26d7517375d499b38bb8d083c711cffc206321c19419196 *9e18e96af5ee11a25436e4d0747bfcdb09d233b11d2513063f52603b34b023a7510e640f38adc2 *32063724d6fab10288513bb63ea8bfbc26cac3bb446924da437c042442b42ab6b1cfcbfa90cc14 *34f252a39339e621ffbbe36dea36f1b13b151718743aa5a250641545b649a64567139f6c661d43 *f16c57dd00690303080cdb7d27f9e78440dd90244f30f824b9e628fbdc831c02a67e21a5f17f6f *6e647f091c8ac90ddacab43b8272c9c89fb419d97b2ca629dcd8af818c0c979eb91c19aaa16e0c *852a393a2248140618e990670fd6965788a9ad9e0d9e9a81b707289b4a5c0a31b6773fd346b2a9 *e0de831aa1a6724641b17c55f591a123bc2d9bb16264676176a6b6dc3be112b42b5ea21e1517ac *31f7c699c40076bbdfa0fa763bf2847c802b9fd88555647f5158a53ec56f24535a04fdce09b99f *a99113a3ad44a72ad6b081a953c1da810b468cea46e19d8fe87ce0530389928e0ac400b2cb236d *0fe00638a8112b081750e960f17285776f153134e7d3d21ba5a704f3e020a9def256d1fb071578 *4a4d5ff940cffeb212866694576c3f1ed2f803a3155a9d6506d16e245483cdb12e38e83212ea7c *86994e9bb900bcf4c16a3dea9d1aa2b7ec11ddbb24d260b9caf9c04e32cda6f30407cdc949826c *dc06471923e06ddda5f13b640623b0997db8918f5e00ce6e1889eb09dae953f7c40a239a9abf93 *20835a0eed837f2d1c79a57da472a11a4acf38bfaf14e52d3b874e439ebfc565e736adaaeb3e5b *de358d1b5dddc0b9a17549b9179a115e237e251c97811b99dfc889fa553d7c66a530c5b9aa91ad *aefa79d33096828d7e5d57f3f36698782667cf541b3bf5c345a7cde6f0eb81af50703dc52faad0 *eb95ba4cd8554bf147d3827422b11c0596cccb92a98ae7fb730a3d6196495dbb591485a9f84b70 *e3eca24d992c9bbb68e2a3c63bba67ed747325e724fb511b3e031e4b6b78adf3b2e924dc9b5154 *36544ae28d5ba91907a7abed7e2f07414bb85a619b68053c78e6c691ba699f182c9ff970349d56 *792cb17b2b1cbc7c0bdbf160fe732ea7e692de4ec31ffc2ce98b257d62ae6742eaf0e29210d1f6 *cc2b6fb0c32142d98eb38d6704ed7b26c66f36518e42c0fda8024824998d2b2b962cf57768a75e *b5b33e25800592c20842c766b873536166d11f35917b18dde1d25ce572496510b60f83a30e6fa1 *c068c3ffb11d065b45537b7d025f730d6a6622b0873d339450c935fb6455c2cde166d3f950f3f6 *590faca20af4d1bf3e97be857dc169e6b4872351a5fec46827c32c5b407ac1bc0450d5c70a9c8b *1c6e1b3cb3cb1b67811be8058808e0c45fe29d9e8843f71aaf4fc8eca71f423c3d7abfb3c5febb *4acf6c087705fd2b4edeb26725af61746d9b8bfa4e5a29739de5956eeb1c89d6db68c0c9068a61 *52c0477725fd99987add6cea621ff16c9b96b56d781b1c74aacfb16d561593a5e06a1b2cc5000b *1f3a46de8c75fa70e2d44b212947f7d1a881bedaf38c23aa4794ea472fa033a139e8b449d05ff4 *3a6ac267b2fed5925a35148685adba5d943c7c6ca22d3dfd982f62ad1c6ae9cb586b08d4d00b24 *1d5b00cc949e02b16a8fe4b57f87e47ee4d7da962f3fdf7d4d1eac132fea573ee635e9b0a42cef *6b4dabb315b0dc021a0a4de3daaea1eba5bdcef77e5d76d15dacfb669425ea3b64727d75c27de6 *64870779bbb5f0afe0e715bc9be3bbf463e2c37a826ad8ae3c42bedb0d57c518df76abd1e26c62 *1686a03999fe777c14ce734127f9122d07be89d85bf2c5e313e2e81b5a423fdd269ba448b2db30 *f87f03ac7f374bbb6662f3feebf23f504b0304140002000800455459394fbf45adf90100000c06 *0000230015007365747570746f6f6c732f636f6d6d616e642f62646973745f77696e696e73742e *70795554090003824a0349df028b4955780400e903e903bd54c16e9c3010bdf315a344112079ad *2a552f91f6da634fb955956560a06e8d8d6c93847e7d07d60b78bb59b59772329e796fde3c8fdd *3adb43a37c1883d29ed7b6efa56978356f89576594f101543f581720dd941e44b293c534eb19f8 *c96759ada5f729aa4821e55396017d0db6503b940105be61e151b70ca4ab8dec91413b6a7d5a55 *2af472387eb106090af14b39f9df13952bc542d02a8d1e8ed0619021b805cde7885315d9630d83 *7c4bcc197cfd56662b856a610104e98840bca0f304d9542e39a44f6a8d4ecc32a894f57c90e13b *ff6195d9ea89463996006f7f770f9e53f71f1f0fc3444beafc0e1efe010fc5e6cc951eca32e11a *a6b84ffaaf646749f23db4ea0d1ef9a78be9519db14e990e0e8713fc7026f503d60945251baa54 *e40941ce7269a69ca58ea642e94466ac32bbe37dfac3962dc61df6f6050b026d44a83dfedf438c *e7b74eebfbee2f16acd1cedaab466d1006efd945562d7063c32dbf765ec96140d31433aadc2eb1 *43aa1a94d4ea178af89840bc86f197c524e1c72a6ef9e387dd75aefbe63c59fbcbc7af711789bc *1b159256cfc2a8d3228f96904fe7a5d0aacacbb47312c5776112383f42f37cbf5af7939e183b12 *e1fa904235762bde61189d992976468da751d995593a16ca0b8a99f96a1ce1d98db8c6839b524d *17efde4ab926b5ca90de0bd495329f250d7996fd06504b030414000200080045545939f6ad2b7a *ea020000c10700001c0015007365747570746f6f6c732f636f6d6d616e642f726f746174652e70 *795554090003824a0349df028b4955780400e903e9039555c1929b300cbde72b34ccec60ef123e *606772eaf6d8edad974c26434010376053db749bfdfa4a2640bc493bad0f0946d2d393f46c54d7 *1beba152ce0f5eb52e03e356b5351d38f443ef8d691da8d1e993e9ba4257a3798ec8f97772298d *fe89d6effbc21f3ff84d2ead693e22a0b5c6ce0e8fab55d916ce8135bef0282e69e5f30a682549 *f2822d7a04d35668038a55070232da917115bc2a74a5553dbf840d24d51f23323821f64a37f00a *1adfd079a8558b2e09308343bb3701c611ce36bce425d2aef0e5719366bc4b3bfa4fa8668f961c *bd81600561f1c7a02c563291d9552c335857ca72785a712c6db0f4c69ee1ed8816c11f31e60985 *c51884795ff2437a62103d7407aacfd4637a2e2ac620621c35e1ecc65e1d68c658e8eb3a775317 *6b505a7955b4ea1d2707e1b0ad2fd3e0c5db7c2c7803af46636c610a7baaefae91e94c863965ad *f45f13aafa3aa772217c31f3b28572082f93c2be06a0cf2c3311f905457d1968eaaec752d56720 *2830163a435310254b6fedb02f2c29b19297b9ce934e6ec104e64d0e69feaefa9481d21c9b2695 *b1a7bca92534e27f4b89992fe30f0a5ea63dc3797b8eb1af67a0b417f37e89c15f25f61ebe15ed *8021ebbfb35baf0374c7240f0885e61cd8a04da2fa9553daf942972896b16670281cb2787523ef *909ef4b6bd99c0f51524fa9c217a2125d4340c6ab1be8acf5ddf2a2fd22c9511cc2e1629dd84fb *41933295c66a16657a6065a7d9789c59e1e1344fcf522e82b683be7b68e8fdbe1c6f3791904cf6 *4ad7e6aa39e19a6c5a7398ae467e5eac5cd0a8c4b8acb85d93cb66398ed38d903754992e3a14f2 *297d4c9f2eae51f8a8a54d482d8ccbb9adf977a3c68ae6d39d5d62a5bc1bbd9d432965e715a5ac *65568f53e14b66f4dcdd06e78e0a177750738b346747dc579191be2f39f751240f55f0144e2e17 *e2834b3268518b8021b3a93df76987ffed7c2a9e3ff023eec2731513ffe71b352e6cc2576ba650 *cb1b573a0adaf8cb94ec794feab8c5e345ad1c74abf4897ab8fa0d504b03041400020008004554 *59395f4ee6ab4c030000910900001b0015007365747570746f6f6c732f636f6d6d616e642f616c *6961732e70795554090003824a0349df028b4955780400e903e903bd55cbaedb3610ddeb2b062a *2e24d5b6906c8db840d174990405b2730c819647be6c255225a9db3841fe3dc38724ca0f24ab6a *215be4993333678643def5521938716d06c35bbd06a99346c90e349aa13752b61ab807fd21bb8e *8993df9e2c4afb1e21b5142fa84cd533f37c851b21ad3c5f33a052524d805faffd97b5775cd292 *eccd88c3133715396cf899a2ee0d97a23a328d6bf08b55c35b4c921336a09fff1da4c19ca973b1 *4d809e344dffb24bc004d0ead0a130d048052d33a8a0674a737186e3856c5bfc5ceabee5262fc8 *cc995b640d5c4096666b48b3945e9f3ed9f72fa977601fde781039d882a27c94a09f5eb9389280 *a0ff23fb9bdff6f4759809eeda8445fa4e92a46e99d6c05ace741e693067f9161b2e284dca8344 *ab0703e6999186e245fe831a24ed512e9d540841666d9374e627d4b5e28e1576909e6ea96420ba *cfe348c297ad9426997535caad89f3a31ad0fb1a34aaca676037f6930679a6b0932f483a03648a *7ec202e483a08e282821f40a64c5da991d6015374419737b6f47ea2b64227218e3af7757b01f83 *388cca349439379cfc7ec111986b6c9b622e5fccf9083d81ed5749dad860de939ccb8d9072d89a *62a082fc7404f7b171b3c69ea864d0a2c8a7b0a83b5fcfc4ae1119d7086fc763fcc1d1fe69cf72 *bec0b94e7c376803bac79a3717c0cfac36edc575cd74faf2a98e20588705fcf78c02d25baac11d *cdcdc647ba0414b3366a10d7723876b40abbb4ec0452fc38d8b8cb339aa04c75e2b5c9b300ce02 *65d0484833976aa947af38a591863109bf7bfbf41e66b37c96183b5cbc0e76767896ed8d0c81c9 *8dc9b2bf78204d20b2ee98a9fc4870eff548522ccbe7e6c89c1cb694deb2e4bbdd55c903df6e96 *60b1bdeca1db98c32cb8eef0c9fbff907594f9d2bdc687dedecb10999b80dccdc3460e94882dd5 *934ae1c9037ee4e9d68be78df4dcbf3a24f725cb202bff965ce41debf370a3ad67bbd7db4311b5 *6a743bfa82dadbd09eab357c9d5a7b0b5fdddf6df0f2eddb3a9c0c75a9e8fc109fbb3f17ea7a92 *515c9f8e9683aaddcd3b461bf6f7167d18ef3a0f83dd2ebea2f3ecdcca236bb3e8a08e40c8361b *bfbbf116902553b73c60b3d3fe1197ddfb79a656d68fc21a8de37ac68e46b5774f2aa3eef05bf1 *f5ed575616b3a2caae8272c977504b030414000200080045545939dac13ca0a70100003f040000 *170015007365747570746f6f6c732f657874656e73696f6e2e70795554090003824a0349df028b *4955780400e903e90385534d8fdb2010bdf32b46e9c14e9a72e96da5bd35955af5d0436f518458 *3c4ed062b018d8b5ff7df1b7934d5a0e9661de7bc363664aef2a28348518b421ae9c47d055ed7c *804313d092761624819877ac9c2813509c3188686b19d4050bb640e1f926962fb12d63c1b74f0c *d2ea157fb71e1bfe6dbeca4bd4a610d8cc69e603868dc23ac08ffefce0bdf383ce45bea1a83b9d *94f9bb34840cd3e74ef08f8fc8185346122d46d7d71b489bcd6671132e32402424c8b8caa0d426 *fd6a0bb5910ac195e9b86e9b319098ac97d025581756e907e56e7d02e5ec1b266f1d1170ca4410 *1c7035e30a2c41086d7510222734e57e27fd99f6bbddebfb7691ebd6e2803f645c11c845af928f *67389eae02a5f3d0dbebe87c845d271bed11475bd0bb0e977c7881ed47d82a1597759d08391d9f *be7c3d7dce54b6fd005fcaf63f911b37abbb264be3df54e85ffac54bdfe677aafc33a67e36fa15 *4182c77334d22f7db14fbd37f45fe8664126602f945e8702caa2aff5d8a5d4d2fe66a0d6fbb9c6 *ec1ac3d74373b8039a890f90a90ed95ab2aaa42d9621cafa4ab6c42b57443315727570fc27fbf4 *20eb5f504b0304140002000800455459390ca882586d080000831d000015001500736574757074 *6f6f6c732f73616e64626f782e70795554090003824a0349df028b4955780400e903e903c5596d *6fdb3812feae5f4178d193d455857e2be0433e046df6b0c05e5ab8e9158bc01068894eb896451d *49d9f11eeebfdf0c4949d48b9decb6b835104b2187f3fa706648f37d2da4264225449de02bcb36 *0d2f35afb22c219aedeb2d2f594244cd24d542069950e40a49d3bd289a92a97ba1d28aeed91aa6 *6a56c1243e82ad147b5270a51bcd4b9532298554845b691fdaf11b1c0eb28c966596c1d2fb80c0 *6771bd515ad25c7fa655b1114f8b842c3e70c97250e0e48db9d77f715152cd458563b2a932c574 *532f92601d146c4bba91c87c672a97bcd609a1f241c54b2b70b1583515a1bdc2c4d09296565949 *ac20bc225c2b2074eac052c3429445068368be4a1f98ce8f45149b19450f2c036107e7377cbd5f *aefbb99aea473787afdd9cd1b6e3895329dd287c46edff308bbe1f58165bb118bbd1eadf04afa2 *8e6d12224968a9f996544277945c0141d4b2889738b1a73b06ffa87eb83741ef6b90d3c225c517 *20e8e71d5686c84973519f9c93b43cd950b4aafb7c1c6b94f977d4247f44ed3a43e27ea1cfc508 *effd8de8f2ddb4feb184604706059335d609956252476f1332230a3f634c7a2aa580ba68408c9f *92ee37055d12f6c47234704a61d068d8a4f509203c37ff9f30cb70759685cb21a46102e18013f0 *baa7b88bc3ff4e980cade8ff634f39ab35f97c52e0ee9b270e1c0f437f024c0ee85045c062f77a *ff76bd9c8890942b3618fd81dc0ab9a7254841c6bf354a1309dacbca906d790549c00b9f0f94a6 *2ea806947b50eab5de0a4976ec843bd344d45b184fb44742043a10fbdc96a460e520ab01e1ba5b *dc61ceedf2381883c502acdbcec13c00bb547009eaed860a82bca44a915132ec32d657496b120a *1512abb3094988c9378a43e2b2b8f1ce814bddd092ffceab8741625398bd0cbf0c04f00303f13f *d112226706317b6619afb8ce32c076b9f5fc89ffa619d55aaa2e6fb71fc4a0116c5e4009741d14 *8e7802139776902e559a4aad8e1cd25b9885b131e7912a1461842748d5b3587b3a9a4462688812 *8dcc99a7a8af87a7f4284f306de4601944e2843cb811cbcfca8e7b91b8bdadc06d53e59e38574a *421c0e4953154c027cda020201680bc67cbe320a76e60c1de695e6d4955a7f086184f0312c4c0d *9e72eea27c279be1f6b45bd15813797b6bbc2b675859c0fc7145cfe968ac3768f122bcdf650540 *d86caeec08c8877e243241e97513923fa0bec0bb8d1eb019c106b9e17a1b3d25f3a4503a798d89 *2c79fd7a779ca60cdfdc69a2731c3ac74bb6a735a8c9ad7a7312e6fcdeea1e5da277b4a8bef38d *0feefb8564f88e5d50c9ab1d3ed5696f5ebd0c0d16b5bbaaf3ce929422873046f1bd69e5303ae7 *3d3e8a8b0250976c4a9774465ddd8aea4ca0ba5730e4a5414349df10b1b6ddf2c2c5abbad156e9 *31f38bc13a4b3c8894d912ed3e38e3b01037459858ba781adb3ebf409ad436c44a435ec557539b *f00517db012809f6451ccdc87e67487a3660b83818ac34558b16b9777ca0057638ea18e48f5208 *2bd86a30d0486ad4df0adaf2adb06f9555020dcd45b5c5779ae74c299b01ff1c28cfc1ed0c2cb1 *9e64361cdf215ffc75d0f350e52f178deed69fc7e5f742f10092a164b440e8006ccd510266c26f *8ae92456c388febb61f2f41d8278367e20fa30c84ad1b9683c1be9e7426545cdc6c54ebd3408f6 *a86942f02d11f07ceb391df4e0d8799bddd6ef8061bbf31e3a0438186b418c9d98c9db75d0c39d *0ce813727c64fa117a218377a4b1eef0bb2167a9e99f7b1dfc6d6234b0571170dcbfb01b7bb5d0 *5b66db190e6a469e8dd1d05463e5440917c1192d2e8bb6ebbe4db6e92846922f762f337a200f05 *87a41d23b6554808eedfc4b4daae55201dfb397da3997ecd0f50b7f8c7f00dde008546474fbfe4 *0f30d0223cdb0a61b6b7c7a3c9217c745ef2ae78184cf05c7b26226a29b1e987a866d35deb9037 *a456ac29c41b57f8da83d251720894a8f1d45300b314cd84c3a28abc1afd6c1dbe587f7b3e17eb *f04ca57559d8b158c7678e71891ab8a68f841bf7ae8c2a38b3e754b1eec609927e69b381e3118f *78d4926df9d3f4d6c9e39f8461bf6a14ae7478e0f493517bcde70e5efd3e20162164b403cc1d04 *195f1246de3abb0c71d58b3107682bc1662e0821bb0a65784e0c64592469af1522431a4a6dbe37 *e6fb0b7e7f71675aa47387b45d344a1ebd1b7b6b5b34f5da0c3519ef516b81a136c4fef6e9ccb4 *c562fe50ef89b6648b817f76b385a03b0efa75f1b983ee8533648bb31761d1e832a9d0edf4d5d5 *10dd900edb29ffd2c1876f7cb6a20f0ece2f391e3b4ffc3f0a1ad8dcf1eaae3bfa84f567c0e76d *9679af5fc6e26c2dff8b4b99bb73eabc00a263c4c460107479b967507982da5ff4457bb4f73693 *976beccf2cdb92e27a9372debe7bf7eeac134a717c53b2032b312cf6ce6f64a36145fe46beae7e *bebbc97efae5fa1f9fa70840a9cfa61f2b6031a3e34cee71da18524b690983c057e40a16144dee *2ec0db1f975221335bbaeefd5e9ed084bc8d8dd91460dd7be463f675f5f1f6975fc9c76cf5e1eb *0a1ed79f3edddc7e8097f7ab9beb3b78deadbedcbec7e7cd3f3f7d5c5daf7e5da4aa2eb98ee275 *804ab55dc4a44a0c7fa2ea9b88ebc1052a0125a1e66adbff82a57c7b22d0e71a5729738f8edd9f *e2501f70d8a5a0ae9bb0a5190ae0f482d5791448c7ba2dc92bf54ac25710dc01cf9ae63bfac086 *7a41df3fab9bd18b407a38894612ab61a01f2958226d09c35c08b903b5bda1eaf4730529b22ccd *7d72814434696f66c986b18ad08d9020234565b8eab4c96985dc3668f39695783d6f1881369b93 *cfd9b2db53732f1fa8a636bf10d2523359e111c2adb3490dcf2eb67103ec570873b0032f63cd8f *72c60381f300487904ce29219f4a065503180182f6c630a764083e6af423e20a5418591ce0cf27 *1afe98346d22e4fa0263894229c11607d61d85dc51291a9802dbe981f2926e4a9642d4c82bbb95 *302304173e3f04ff03504b010217030a00000000004841453a0000000000000000000000000900 *0d000000000000001000fd41000000004547472d494e464f2f555405000357018b495578000050 *4b010217031400020008009240453a449e1f3e1b0c00000c23000011000d000000000001000000 *b4813c0000004547472d494e464f2f504b472d494e464f555405000304008b4955780000504b01 *0217031400020008009240453ab81cc8a746010000c304000014000d000000000001000000b481 *9b0c00004547472d494e464f2f534f55524345532e747874555405000304008b4955780000504b *010217030a00020000009240453a305c0191260000002600000016000d000000000001000000b4 *81280e00004547472d494e464f2f746f705f6c6576656c2e747874555405000304008b49557800 *00504b010217031400020008009240453a57cacfec640200009e09000019000d00000000000100 *0000b481970e00004547472d494e464f2f656e7472795f706f696e74732e747874555405000304 *008b4955780000504b010217030a00020000009240453a9306d73201000000010000001d000d00 *0000000001000000b481471100004547472d494e464f2f646570656e64656e63795f6c696e6b73 *2e747874555405000304008b4955780000504b010217030a00020000009240453a9306d7320100 *00000100000011000d000000000001000000b481981100004547472d494e464f2f7a69702d7361 *6665555405000304008b4955780000504b010217031400020008000f42453a631429f1fc140000 *3b4800000b000d000000000001000000a481dd1100005f706b677574696c2e70795554050003ce *028b4955780000504b01021703140002000800455459395c4fba45690000007e0000000f000d00 *0000000001000000b48117270000656173795f696e7374616c6c2e70795554050003824a034955 *780000504b010217031400020008006caa373afeac9b3a565800006141010010000d0000000000 *01000000b481c2270000706b675f7265736f75726365732e70795554050003cc967a4955780000 *504b010217030a00000000001742453a0000000000000000000000000b000d0000000000000010 *00fd415b8000007365747570746f6f6c732f5554050003de028b4955780000504b010217031400 *0200080045545939c1a946d9e0060000111700001a000d000000000001000000b4819980000073 *65747570746f6f6c732f617263686976655f7574696c2e70795554050003824a03495578000050 *4b0102170314000200080045545939b03f0decb50800004118000015000d000000000001000000 *b481c68700007365747570746f6f6c732f646570656e64732e70795554050003824a0349557800 *00504b0102170314000200080045545939cc40e5b7600300001709000018000d00000000000100 *0000b481c39000007365747570746f6f6c732f736974652d70617463682e70795554050003824a *034955780000504b010217031400020008001242453a10c3b4dd570a0000001a000012000d0000 *00000000000000fd816e9400007365747570746f6f6c732f636c692e6578655554050003d3028b *4955780000504b010217031400020008006caa373a1b7c493a761f00009973000012000d000000 *000001000000b4810a9f00007365747570746f6f6c732f646973742e70795554050003cc967a49 *55780000504b0102170314000200080072606f3978203cd821210000ad6c00001b000d00000000 *0001000000b481c5be00007365747570746f6f6c732f7061636b6167655f696e6465782e707955 *54050003081d1f4955780000504b010217031400020008001742453ab6147fba1e0b0000001c00 *0012000d000000000000000000fd8134e000007365747570746f6f6c732f6775692e6578655554 *050003de028b4955780000504b010217030a00000000004941453a000000000000000000000000 *11000d000000000000001000fd4197eb00007365747570746f6f6c732f74657374732f55540500 *035a018b4955780000504b0102170314000200080072606f390ec5c45a1f010000150200002500 *0d000000000001000000b481dbeb00007365747570746f6f6c732f74657374732f746573745f70 *61636b616765696e6465782e70795554050003081d1f4955780000504b01021703140002000800 *45545939269c6e71b10a00004f3000001c000d000000000001000000b48152ed00007365747570 *746f6f6c732f74657374732f5f5f696e69745f5f2e70795554050003824a034955780000504b01 *02170314000200080045545939614cddfc51120000ac4b000022000d000000000001000000b481 *52f800007365747570746f6f6c732f74657374732f746573745f7265736f75726365732e707955 *54050003824a034955780000504b01021703140002000800455459399435663c82040000ef0a00 *0016000d000000000001000000b481f80a01007365747570746f6f6c732f5f5f696e69745f5f2e *70795554050003824a034955780000504b010217030a00000000004941453a0000000000000000 *0000000013000d000000000000001000fd41c30f01007365747570746f6f6c732f636f6d6d616e *642f55540500035a018b4955780000504b01021703140002000800455459398f3ae7d013150000 *e44500001f000d000000000001000000b481091001007365747570746f6f6c732f636f6d6d616e *642f62646973745f6567672e70795554050003824a034955780000504b01021703140002000800 *45545939e77b0c7da7080000701c00001e000d000000000001000000b4816e2501007365747570 *746f6f6c732f636f6d6d616e642f6275696c645f70792e70795554050003824a03495578000050 *4b0102170314000200080045545939e60fbd5864010000e30200001e000d000000000001000000 *b481662e01007365747570746f6f6c732f636f6d6d616e642f736176656f7074732e7079555405 *0003824a034955780000504b01021703140002000800455459397f27593604030000e90700001f *000d000000000001000000b4811b3001007365747570746f6f6c732f636f6d6d616e642f626469 *73745f72706d2e70795554050003824a034955780000504b0102170314000200080045545939ba *48756d3d1100002a3700001e000d000000000001000000b481713301007365747570746f6f6c73 *2f636f6d6d616e642f6567675f696e666f2e70795554050003824a034955780000504b01021703 *140002000800455459394eedf3090c0500008c0e000026000d000000000001000000b481ff4401 *007365747570746f6f6c732f636f6d6d616e642f696e7374616c6c5f6567675f696e666f2e7079 *5554050003824a034955780000504b010217031400020008004554593999ec28779e0000001501 *00001e000d000000000001000000b481644a01007365747570746f6f6c732f636f6d6d616e642f *72656769737465722e70795554050003824a034955780000504b01021703140002000800455459 *3908a45d7a9e080000f91900001c000d000000000001000000b481534b01007365747570746f6f *6c732f636f6d6d616e642f75706c6f61642e70795554050003824a034955780000504b01021703 *14000200080045545939a3f3b68866050000900f00001d000d000000000001000000b481405401 *007365747570746f6f6c732f636f6d6d616e642f696e7374616c6c2e70795554050003824a0349 *55780000504b01021703140002000800603f453ab2c623f10f4300009ef6000022000d00000000 *0001000000b481f65901007365747570746f6f6c732f636f6d6d616e642f656173795f696e7374 *616c6c2e70795554050003b4fe8a4955780000504b01021703140002000800455459390d094bbb *92070000091500001b000d000000000001000000b4815a9d01007365747570746f6f6c732f636f *6d6d616e642f73646973742e70795554050003824a034955780000504b01021703140002000800 *455459394f3f761e37010000730200001e000d000000000001000000b4813aa501007365747570 *746f6f6c732f636f6d6d616e642f5f5f696e69745f5f2e70795554050003824a03495578000050 *4b01021703140002000800455459398c488c3367030000b009000021000d000000000001000000 *b481c2a601007365747570746f6f6c732f636f6d6d616e642f696e7374616c6c5f6c69622e7079 *5554050003824a034955780000504b0102170314000200080045545939361d3c6dbb060000b514 *00001d000d000000000001000000b4817daa01007365747570746f6f6c732f636f6d6d616e642f *646576656c6f702e70795554050003824a034955780000504b0102170314000200080045545939 *54894b4e8c0500005a1100001a000d000000000001000000b48188b101007365747570746f6f6c *732f636f6d6d616e642f746573742e70795554050003824a034955780000504b01021703140002 *000800455459397e33f9e31c0c0000cf2c00001f000d000000000001000000b48161b701007365 *747570746f6f6c732f636f6d6d616e642f6275696c645f6578742e70795554050003824a034955 *780000504b01021703140002000800455459396fe6f56cb80200007507000025000d0000000000 *01000000b481cfc301007365747570746f6f6c732f636f6d6d616e642f696e7374616c6c5f7363 *72697074732e70795554050003824a034955780000504b01021703140002000800455459395282 *2fb0df050000aa1300001c000d000000000001000000b481dfc601007365747570746f6f6c732f *636f6d6d616e642f7365746f70742e70795554050003824a034955780000504b01021703140002 *000800455459394fbf45adf90100000c06000023000d000000000001000000b4810dcd01007365 *747570746f6f6c732f636f6d6d616e642f62646973745f77696e696e73742e7079555405000382 *4a034955780000504b0102170314000200080045545939f6ad2b7aea020000c10700001c000d00 *0000000001000000b4815ccf01007365747570746f6f6c732f636f6d6d616e642f726f74617465 *2e70795554050003824a034955780000504b01021703140002000800455459395f4ee6ab4c0300 *00910900001b000d000000000001000000b48195d201007365747570746f6f6c732f636f6d6d61 *6e642f616c6961732e70795554050003824a034955780000504b01021703140002000800455459 *39dac13ca0a70100003f04000017000d000000000001000000b4812fd601007365747570746f6f *6c732f657874656e73696f6e2e70795554050003824a034955780000504b010217031400020008 *00455459390ca882586d080000831d000015000d000000000001000000b48120d8010073657475 *70746f6f6c732f73616e64626f782e70795554050003824a034955780000504b0506000000002f *002f00780f0000d5e001000000 newhex * rmfile ./misc/dependencies/setuptools-0.6c12dev.egg adddir ./setuptools-0.6c14devdev.egg adddir ./setuptools-0.6c14devdev.egg/EGG-INFO addfile ./setuptools-0.6c14devdev.egg/EGG-INFO/PKG-INFO hunk ./setuptools-0.6c14devdev.egg/EGG-INFO/PKG-INFO 1 +Metadata-Version: 1.0 +Name: setuptools +Version: 0.6c14devdev +Summary: Download, build, install, upgrade, and uninstall Python packages -- easily! +Home-page: http://pypi.python.org/pypi/setuptools +Author: Phillip J. Eby +Author-email: distutils-sig@python.org +License: PSF or ZPL +Description: =============================== + Installing and Using Setuptools + =============================== + + .. contents:: **Table of Contents** + + + ------------------------- + Installation Instructions + ------------------------- + + Windows + ======= + + Install setuptools using the provided ``.exe`` installer. If you've previously + installed older versions of setuptools, please delete all ``setuptools*.egg`` + and ``setuptools.pth`` files from your system's ``site-packages`` directory + (and any other ``sys.path`` directories) FIRST. + + If you are upgrading a previous version of setuptools that was installed using + an ``.exe`` installer, please be sure to also *uninstall that older version* + via your system's "Add/Remove Programs" feature, BEFORE installing the newer + version. + + Once installation is complete, you will find an ``easy_install.exe`` program in + your Python ``Scripts`` subdirectory. Be sure to add this directory to your + ``PATH`` environment variable, if you haven't already done so. + + + RPM-Based Systems + ================= + + Install setuptools using the provided source RPM. The included ``.spec`` file + assumes you are installing using the default ``python`` executable, and is not + specific to a particular Python version. The ``easy_install`` executable will + be installed to a system ``bin`` directory such as ``/usr/bin``. + + If you wish to install to a location other than the default Python + installation's default ``site-packages`` directory (and ``$prefix/bin`` for + scripts), please use the ``.egg``-based installation approach described in the + following section. + + + Cygwin, Mac OS X, Linux, Other + ============================== + + 1. Download the appropriate egg for your version of Python (e.g. + ``setuptools-0.6c9-py2.4.egg``). Do NOT rename it. + + 2. Run it as if it were a shell script, e.g. ``sh setuptools-0.6c9-py2.4.egg``. + Setuptools will install itself using the matching version of Python (e.g. + ``python2.4``), and will place the ``easy_install`` executable in the + default location for installing Python scripts (as determined by the + standard distutils configuration files, or by the Python installation). + + If you want to install setuptools to somewhere other than ``site-packages`` or + your default distutils installation locations for libraries and scripts, you + may include EasyInstall command-line options such as ``--prefix``, + ``--install-dir``, and so on, following the ``.egg`` filename on the same + command line. For example:: + + sh setuptools-0.6c9-py2.4.egg --prefix=~ + + You can use ``--help`` to get a full options list, but we recommend consulting + the `EasyInstall manual`_ for detailed instructions, especially `the section + on custom installation locations`_. + + .. _EasyInstall manual: http://peak.telecommunity.com/DevCenter/EasyInstall + .. _the section on custom installation locations: http://peak.telecommunity.com/DevCenter/EasyInstall#custom-installation-locations + + + Cygwin Note + ----------- + + If you are trying to install setuptools for the **Windows** version of Python + (as opposed to the Cygwin version that lives in ``/usr/bin``), you must make + sure that an appropriate executable (``python2.3``, ``python2.4``, or + ``python2.5``) is on your **Cygwin** ``PATH`` when invoking the egg. For + example, doing the following at a Cygwin bash prompt will install setuptools + for the **Windows** Python found at ``C:\\Python24``:: + + ln -s /cygdrive/c/Python24/python.exe python2.4 + PATH=.:$PATH sh setuptools-0.6c9-py2.4.egg + rm python2.4 + + + Downloads + ========= + + All setuptools downloads can be found at `the project's home page in the Python + Package Index`_. Scroll to the very bottom of the page to find the links. + + .. _the project's home page in the Python Package Index: http://pypi.python.org/pypi/setuptools + + In addition to the PyPI downloads, the development version of ``setuptools`` + is available from the `Python SVN sandbox`_, and in-development versions of the + `0.6 branch`_ are available as well. + + .. _0.6 branch: http://svn.python.org/projects/sandbox/branches/setuptools-0.6/#egg=setuptools-dev06 + + .. _Python SVN sandbox: http://svn.python.org/projects/sandbox/trunk/setuptools/#egg=setuptools-dev + + -------------------------------- + Using Setuptools and EasyInstall + -------------------------------- + + Here are some of the available manuals, tutorials, and other resources for + learning about Setuptools, Python Eggs, and EasyInstall: + + * `The EasyInstall user's guide and reference manual`_ + * `The setuptools Developer's Guide`_ + * `The pkg_resources API reference`_ + * `Package Compatibility Notes`_ (user-maintained) + * `The Internal Structure of Python Eggs`_ + + Questions, comments, and bug reports should be directed to the `distutils-sig + mailing list`_. If you have written (or know of) any tutorials, documentation, + plug-ins, or other resources for setuptools users, please let us know about + them there, so this reference list can be updated. If you have working, + *tested* patches to correct problems or add features, you may submit them to + the `setuptools bug tracker`_. + + .. _setuptools bug tracker: http://bugs.python.org/setuptools/ + .. _Package Compatibility Notes: http://peak.telecommunity.com/DevCenter/PackageNotes + .. _The Internal Structure of Python Eggs: http://peak.telecommunity.com/DevCenter/EggFormats + .. _The setuptools Developer's Guide: http://peak.telecommunity.com/DevCenter/setuptools + .. _The pkg_resources API reference: http://peak.telecommunity.com/DevCenter/PkgResources + .. _The EasyInstall user's guide and reference manual: http://peak.telecommunity.com/DevCenter/EasyInstall + .. _distutils-sig mailing list: http://mail.python.org/pipermail/distutils-sig/ + + + ------- + Credits + ------- + + * The original design for the ``.egg`` format and the ``pkg_resources`` API was + co-created by Phillip Eby and Bob Ippolito. Bob also implemented the first + version of ``pkg_resources``, and supplied the OS X operating system version + compatibility algorithm. + + * Ian Bicking implemented many early "creature comfort" features of + easy_install, including support for downloading via Sourceforge and + Subversion repositories. Ian's comments on the Web-SIG about WSGI + application deployment also inspired the concept of "entry points" in eggs, + and he has given talks at PyCon and elsewhere to inform and educate the + community about eggs and setuptools. + + * Jim Fulton contributed time and effort to build automated tests of various + aspects of ``easy_install``, and supplied the doctests for the command-line + ``.exe`` wrappers on Windows. + + * Phillip J. Eby is the principal author and maintainer of setuptools, and + first proposed the idea of an importable binary distribution format for + Python application plug-ins. + + * Significant parts of the implementation of setuptools were funded by the Open + Source Applications Foundation, to provide a plug-in infrastructure for the + Chandler PIM application. In addition, many OSAF staffers (such as Mike + "Code Bear" Taylor) contributed their time and stress as guinea pigs for the + use of eggs and setuptools, even before eggs were "cool". (Thanks, guys!) + + +Keywords: CPAN PyPI distutils eggs package management +Platform: UNKNOWN +Classifier: Development Status :: 3 - Alpha +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Python Software Foundation License +Classifier: License :: OSI Approved :: Zope Public License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: System :: Archiving :: Packaging +Classifier: Topic :: System :: Systems Administration +Classifier: Topic :: Utilities addfile ./setuptools-0.6c14devdev.egg/EGG-INFO/SOURCES.txt hunk ./setuptools-0.6c14devdev.egg/EGG-INFO/SOURCES.txt 1 - +README.txt +easy_install.py +pkg_resources.py +setup.cfg +setup.py +setuptools/__init__.py +setuptools/archive_util.py +setuptools/depends.py +setuptools/dist.py +setuptools/extension.py +setuptools/package_index.py +setuptools/sandbox.py +setuptools/site-patch.py +setuptools.egg-info/PKG-INFO +setuptools.egg-info/SOURCES.txt +setuptools.egg-info/dependency_links.txt +setuptools.egg-info/entry_points.txt +setuptools.egg-info/top_level.txt +setuptools.egg-info/zip-safe +setuptools/command/__init__.py +setuptools/command/alias.py +setuptools/command/bdist_egg.py +setuptools/command/bdist_rpm.py +setuptools/command/bdist_wininst.py +setuptools/command/build_ext.py +setuptools/command/build_py.py +setuptools/command/develop.py +setuptools/command/easy_install.py +setuptools/command/egg_info.py +setuptools/command/install.py +setuptools/command/install_egg_info.py +setuptools/command/install_lib.py +setuptools/command/install_scripts.py +setuptools/command/register.py +setuptools/command/rotate.py +setuptools/command/saveopts.py +setuptools/command/sdist.py +setuptools/command/setopt.py +setuptools/command/test.py +setuptools/command/upload.py +setuptools/tests/__init__.py +setuptools/tests/test_packageindex.py +setuptools/tests/test_resources.py addfile ./setuptools-0.6c14devdev.egg/EGG-INFO/dependency_links.txt hunk ./setuptools-0.6c14devdev.egg/EGG-INFO/dependency_links.txt 1 + addfile ./setuptools-0.6c14devdev.egg/EGG-INFO/entry_points.txt hunk ./setuptools-0.6c14devdev.egg/EGG-INFO/entry_points.txt 1 +[distutils.commands] +bdist_rpm = setuptools.command.bdist_rpm:bdist_rpm +rotate = setuptools.command.rotate:rotate +develop = setuptools.command.develop:develop +setopt = setuptools.command.setopt:setopt +build_py = setuptools.command.build_py:build_py +saveopts = setuptools.command.saveopts:saveopts +egg_info = setuptools.command.egg_info:egg_info +register = setuptools.command.register:register +install_egg_info = setuptools.command.install_egg_info:install_egg_info +alias = setuptools.command.alias:alias +easy_install = setuptools.command.easy_install:easy_install +install_scripts = setuptools.command.install_scripts:install_scripts +bdist_wininst = setuptools.command.bdist_wininst:bdist_wininst +bdist_egg = setuptools.command.bdist_egg:bdist_egg +install = setuptools.command.install:install +test = setuptools.command.test:test +install_lib = setuptools.command.install_lib:install_lib +build_ext = setuptools.command.build_ext:build_ext +sdist = setuptools.command.sdist:sdist + +[egg_info.writers] +dependency_links.txt = setuptools.command.egg_info:overwrite_arg +requires.txt = setuptools.command.egg_info:write_requirements +PKG-INFO = setuptools.command.egg_info:write_pkg_info +eager_resources.txt = setuptools.command.egg_info:overwrite_arg +top_level.txt = setuptools.command.egg_info:write_toplevel_names +namespace_packages.txt = setuptools.command.egg_info:overwrite_arg +entry_points.txt = setuptools.command.egg_info:write_entries +depends.txt = setuptools.command.egg_info:warn_depends_obsolete + +[console_scripts] +easy_install = setuptools.command.easy_install:main +easy_install-2.6 = setuptools.command.easy_install:main + +[setuptools.file_finders] +svn_cvs = setuptools.command.sdist:_default_revctrl + +[distutils.setup_keywords] +dependency_links = setuptools.dist:assert_string_list +entry_points = setuptools.dist:check_entry_points +extras_require = setuptools.dist:check_extras +test_runner = setuptools.dist:check_importable +package_data = setuptools.dist:check_package_data +install_requires = setuptools.dist:check_requirements +include_package_data = setuptools.dist:assert_bool +exclude_package_data = setuptools.dist:check_package_data +namespace_packages = setuptools.dist:check_nsp +test_suite = setuptools.dist:check_test_suite +eager_resources = setuptools.dist:assert_string_list +zip_safe = setuptools.dist:assert_bool +test_loader = setuptools.dist:check_importable +tests_require = setuptools.dist:check_requirements + +[setuptools.installation] +eggsecutable = setuptools.command.easy_install:bootstrap + addfile ./setuptools-0.6c14devdev.egg/EGG-INFO/top_level.txt hunk ./setuptools-0.6c14devdev.egg/EGG-INFO/top_level.txt 1 +easy_install +pkg_resources +setuptools addfile ./setuptools-0.6c14devdev.egg/EGG-INFO/zip-safe hunk ./setuptools-0.6c14devdev.egg/EGG-INFO/zip-safe 1 + addfile ./setuptools-0.6c14devdev.egg/easy_install.py hunk ./setuptools-0.6c14devdev.egg/easy_install.py 1 +"""Run the EasyInstall command""" + +if __name__ == '__main__': + from setuptools.command.easy_install import main + main() addfile ./setuptools-0.6c14devdev.egg/easy_install.pyc binary ./setuptools-0.6c14devdev.egg/easy_install.pyc oldhex * newhex *d1f20d0a291ef84b630000000000000000030000004000000073320000006400005a0000650100 *6401006a02006f1b00016402006403006b02006c03005a030001650300830000016e0100016404 *00532805000000731b00000052756e207468652045617379496e7374616c6c20636f6d6d616e64 *74080000005f5f6d61696e5f5f69ffffffff280100000074040000006d61696e4e280400000074 *070000005f5f646f635f5f74080000005f5f6e616d655f5f741f0000007365747570746f6f6c73 *2e636f6d6d616e642e656173795f696e7374616c6c520100000028000000002800000000280000 *000073250000006275696c645c62646973742e77696e33325c6567675c656173795f696e737461 *6c6c2e707974080000003c6d6f64756c653e01000000730600000006020d011001 addfile ./setuptools-0.6c14devdev.egg/pkg_resources.py hunk ./setuptools-0.6c14devdev.egg/pkg_resources.py 1 +"""Package resource API +-------------------- + +A resource is a logical file contained within a package, or a logical +subdirectory thereof. The package resource API expects resource names +to have their path parts separated with ``/``, *not* whatever the local +path separator is. Do not use os.path operations to manipulate resource +names being passed into the API. + +The package resource API is designed to work with normal filesystem packages, +.egg files, and unpacked .egg files. It can also work in a limited way with +.zip files and with custom PEP 302 loaders that support the ``get_data()`` +method. +""" + +import sys, os, zipimport, time, re, imp, new + +try: + frozenset +except NameError: + from sets import ImmutableSet as frozenset + +# capture these to bypass sandboxing +from os import utime, rename, unlink, mkdir +from os import open as os_open +from os.path import isdir, split + +def _bypass_ensure_directory(name, mode=0777): + # Sandbox-bypassing version of ensure_directory() + dirname, filename = split(name) + if dirname and filename and not isdir(dirname): + _bypass_ensure_directory(dirname) + mkdir(dirname, mode) + + + + + + + + +def get_supported_platform(): + """Return this platform's maximum compatible version. + + distutils.util.get_platform() normally reports the minimum version + of Mac OS X that would be required to *use* extensions produced by + distutils. But what we want when checking compatibility is to know the + version of Mac OS X that we are *running*. To allow usage of packages that + explicitly require a newer version of Mac OS X, we must also know the + current version of the OS. + + If this condition occurs for any other platform with a version in its + platform strings, this function should be extended accordingly. + """ + plat = get_build_platform(); m = macosVersionString.match(plat) + if m is not None and sys.platform == "darwin": + try: + plat = 'macosx-%s-%s' % ('.'.join(_macosx_vers()[:2]), m.group(3)) + except ValueError: + pass # not Mac OS X + return plat + + + + + + + + + + + + + + + + + + + + + +__all__ = [ + # Basic resource access and distribution/entry point discovery + 'require', 'run_script', 'get_provider', 'get_distribution', + 'load_entry_point', 'get_entry_map', 'get_entry_info', 'iter_entry_points', + 'resource_string', 'resource_stream', 'resource_filename', + 'resource_listdir', 'resource_exists', 'resource_isdir', + + # Environmental control + 'declare_namespace', 'working_set', 'add_activation_listener', + 'find_distributions', 'set_extraction_path', 'cleanup_resources', + 'get_default_cache', + + # Primary implementation classes + 'Environment', 'WorkingSet', 'ResourceManager', + 'Distribution', 'Requirement', 'EntryPoint', + + # Exceptions + 'ResolutionError','VersionConflict','DistributionNotFound','UnknownExtra', + 'ExtractionError', + + # Parsing functions and string utilities + 'parse_requirements', 'parse_version', 'safe_name', 'safe_version', + 'get_platform', 'compatible_platforms', 'yield_lines', 'split_sections', + 'safe_extra', 'to_filename', + + # filesystem utilities + 'ensure_directory', 'normalize_path', + + # Distribution "precedence" constants + 'EGG_DIST', 'BINARY_DIST', 'SOURCE_DIST', 'CHECKOUT_DIST', 'DEVELOP_DIST', + + # "Provider" interfaces, implementations, and registration/lookup APIs + 'IMetadataProvider', 'IResourceProvider', 'FileMetadata', + 'PathMetadata', 'EggMetadata', 'EmptyProvider', 'empty_provider', + 'NullProvider', 'EggProvider', 'DefaultProvider', 'ZipProvider', + 'register_finder', 'register_namespace_handler', 'register_loader_type', + 'fixup_namespace_packages', 'get_importer', + + # Deprecated/backward compatibility only + 'run_main', 'AvailableDistributions', +] +class ResolutionError(Exception): + """Abstract base for dependency resolution errors""" + def __repr__(self): + return self.__class__.__name__+repr(self.args) + +class VersionConflict(ResolutionError): + """An already-installed version conflicts with the requested version""" + +class DistributionNotFound(ResolutionError): + """A requested distribution was not found""" + +class UnknownExtra(ResolutionError): + """Distribution doesn't have an "extra feature" of the given name""" + +_provider_factories = {} +PY_MAJOR = sys.version[:3] +EGG_DIST = 3 +BINARY_DIST = 2 +SOURCE_DIST = 1 +CHECKOUT_DIST = 0 +DEVELOP_DIST = -1 + +def register_loader_type(loader_type, provider_factory): + """Register `provider_factory` to make providers for `loader_type` + + `loader_type` is the type or class of a PEP 302 ``module.__loader__``, + and `provider_factory` is a function that, passed a *module* object, + returns an ``IResourceProvider`` for that module. + """ + _provider_factories[loader_type] = provider_factory + +def get_provider(moduleOrReq): + """Return an IResourceProvider for the named module or requirement""" + if isinstance(moduleOrReq,Requirement): + return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0] + try: + module = sys.modules[moduleOrReq] + except KeyError: + __import__(moduleOrReq) + module = sys.modules[moduleOrReq] + loader = getattr(module, '__loader__', None) + return _find_adapter(_provider_factories, loader)(module) + +def _macosx_vers(_cache=[]): + if not _cache: + info = os.popen('/usr/bin/sw_vers').read().splitlines() + for line in info: + key, value = line.split(None, 1) + if key == 'ProductVersion:': + _cache.append(value.strip().split(".")) + break + else: + raise ValueError, "What?!" + return _cache[0] + +def _macosx_arch(machine): + return {'PowerPC':'ppc', 'Power_Macintosh':'ppc'}.get(machine,machine) + +def get_build_platform(): + """Return this platform's string for platform-specific distributions + + XXX Currently this is the same as ``distutils.util.get_platform()``, but it + needs some hacks for Linux and Mac OS X. + """ + from distutils.util import get_platform + plat = get_platform() + if sys.platform == "darwin" and not plat.startswith('macosx-'): + try: + version = _macosx_vers() + machine = os.uname()[4].replace(" ", "_") + return "macosx-%d.%d-%s" % (int(version[0]), int(version[1]), + _macosx_arch(machine)) + except ValueError: + # if someone is running a non-Mac darwin system, this will fall + # through to the default implementation + pass + return plat + +macosVersionString = re.compile(r"macosx-(\d+)\.(\d+)-(.*)") +darwinVersionString = re.compile(r"darwin-(\d+)\.(\d+)\.(\d+)-(.*)") +get_platform = get_build_platform # XXX backward compat + +def compatible_platforms(provided,required): + """Can code for the `provided` platform run on the `required` platform? + + Returns true if either platform is ``None``, or the platforms are equal. + + XXX Needs compatibility checks for Linux and other unixy OSes. + """ + if provided is None or required is None or provided==required: + return True # easy case + + # Mac OS X special cases + reqMac = macosVersionString.match(required) + if reqMac: + provMac = macosVersionString.match(provided) + + # is this a Mac package? + if not provMac: + # this is backwards compatibility for packages built before + # setuptools 0.6. All packages built after this point will + # use the new macosx designation. + provDarwin = darwinVersionString.match(provided) + if provDarwin: + dversion = int(provDarwin.group(1)) + macosversion = "%s.%s" % (reqMac.group(1), reqMac.group(2)) + if dversion == 7 and macosversion >= "10.3" or \ + dversion == 8 and macosversion >= "10.4": + + #import warnings + #warnings.warn("Mac eggs should be rebuilt to " + # "use the macosx designation instead of darwin.", + # category=DeprecationWarning) + return True + return False # egg isn't macosx or legacy darwin + + # are they the same major version and machine type? + if provMac.group(1) != reqMac.group(1) or \ + provMac.group(3) != reqMac.group(3): + return False + + + + # is the required OS major update >= the provided one? + if int(provMac.group(2)) > int(reqMac.group(2)): + return False + + return True + + # XXX Linux and other platforms' special cases should go here + return False + + +def run_script(dist_spec, script_name): + """Locate distribution `dist_spec` and run its `script_name` script""" + ns = sys._getframe(1).f_globals + name = ns['__name__'] + ns.clear() + ns['__name__'] = name + require(dist_spec)[0].run_script(script_name, ns) + +run_main = run_script # backward compatibility + +def get_distribution(dist): + """Return a current distribution object for a Requirement or string""" + if isinstance(dist,basestring): dist = Requirement.parse(dist) + if isinstance(dist,Requirement): dist = get_provider(dist) + if not isinstance(dist,Distribution): + raise TypeError("Expected string, Requirement, or Distribution", dist) + return dist + +def load_entry_point(dist, group, name): + """Return `name` entry point of `group` for `dist` or raise ImportError""" + return get_distribution(dist).load_entry_point(group, name) + +def get_entry_map(dist, group=None): + """Return the entry point map for `group`, or the full entry map""" + return get_distribution(dist).get_entry_map(group) + +def get_entry_info(dist, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return get_distribution(dist).get_entry_info(group, name) + + +class IMetadataProvider: + + def has_metadata(name): + """Does the package's distribution contain the named metadata?""" + + def get_metadata(name): + """The named metadata resource as a string""" + + def get_metadata_lines(name): + """Yield named metadata resource as list of non-blank non-comment lines + + Leading and trailing whitespace is stripped from each line, and lines + with ``#`` as the first non-blank character are omitted.""" + + def metadata_isdir(name): + """Is the named metadata a directory? (like ``os.path.isdir()``)""" + + def metadata_listdir(name): + """List of metadata names in the directory (like ``os.listdir()``)""" + + def run_script(script_name, namespace): + """Execute the named script in the supplied namespace dictionary""" + + + + + + + + + + + + + + + + + + + +class IResourceProvider(IMetadataProvider): + """An object that provides access to package resources""" + + def get_resource_filename(manager, resource_name): + """Return a true filesystem path for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_stream(manager, resource_name): + """Return a readable file-like object for `resource_name` + + `manager` must be an ``IResourceManager``""" + + def get_resource_string(manager, resource_name): + """Return a string containing the contents of `resource_name` + + `manager` must be an ``IResourceManager``""" + + def has_resource(resource_name): + """Does the package contain the named resource?""" + + def resource_isdir(resource_name): + """Is the named resource a directory? (like ``os.path.isdir()``)""" + + def resource_listdir(resource_name): + """List of resource names in the directory (like ``os.listdir()``)""" + + + + + + + + + + + + + + + +class WorkingSet(object): + """A collection of active distributions on sys.path (or a similar list)""" + + def __init__(self, entries=None): + """Create working set from list of path entries (default=sys.path)""" + self.entries = [] + self.entry_keys = {} + self.by_key = {} + self.callbacks = [] + + if entries is None: + entries = sys.path + + for entry in entries: + self.add_entry(entry) + + + def add_entry(self, entry): + """Add a path item to ``.entries``, finding any distributions on it + + ``find_distributions(entry,False)`` is used to find distributions + corresponding to the path entry, and they are added. `entry` is + always appended to ``.entries``, even if it is already present. + (This is because ``sys.path`` can contain the same value more than + once, and the ``.entries`` of the ``sys.path`` WorkingSet should always + equal ``sys.path``.) + """ + self.entry_keys.setdefault(entry, []) + self.entries.append(entry) + for dist in find_distributions(entry, True): + self.add(dist, entry, False) + + + def __contains__(self,dist): + """True if `dist` is the active distribution for its project""" + return self.by_key.get(dist.key) == dist + + + + + + def find(self, req): + """Find a distribution matching requirement `req` + + If there is an active distribution for the requested project, this + returns it as long as it meets the version requirement specified by + `req`. But, if there is an active distribution for the project and it + does *not* meet the `req` requirement, ``VersionConflict`` is raised. + If there is no active distribution for the requested project, ``None`` + is returned. + """ + dist = self.by_key.get(req.key) + if dist is not None and dist not in req: + raise VersionConflict(dist,req) # XXX add more info + else: + return dist + + def iter_entry_points(self, group, name=None): + """Yield entry point objects from `group` matching `name` + + If `name` is None, yields all entry points in `group` from all + distributions in the working set, otherwise only ones matching + both `group` and `name` are yielded (in distribution order). + """ + for dist in self: + entries = dist.get_entry_map(group) + if name is None: + for ep in entries.values(): + yield ep + elif name in entries: + yield entries[name] + + def run_script(self, requires, script_name): + """Locate distribution for `requires` and run `script_name` script""" + ns = sys._getframe(1).f_globals + name = ns['__name__'] + ns.clear() + ns['__name__'] = name + self.require(requires)[0].run_script(script_name, ns) + + + + def __iter__(self): + """Yield distributions for non-duplicate projects in the working set + + The yield order is the order in which the items' path entries were + added to the working set. + """ + seen = {} + for item in self.entries: + for key in self.entry_keys[item]: + if key not in seen: + seen[key]=1 + yield self.by_key[key] + + def add(self, dist, entry=None, insert=True): + """Add `dist` to working set, associated with `entry` + + If `entry` is unspecified, it defaults to the ``.location`` of `dist`. + On exit from this routine, `entry` is added to the end of the working + set's ``.entries`` (if it wasn't already present). + + `dist` is only added to the working set if it's for a project that + doesn't already have a distribution in the set. If it's added, any + callbacks registered with the ``subscribe()`` method will be called. + """ + if insert: + dist.insert_on(self.entries, entry) + + if entry is None: + entry = dist.location + keys = self.entry_keys.setdefault(entry,[]) + keys2 = self.entry_keys.setdefault(dist.location,[]) + if dist.key in self.by_key: + return # ignore hidden distros + + self.by_key[dist.key] = dist + if dist.key not in keys: + keys.append(dist.key) + if dist.key not in keys2: + keys2.append(dist.key) + self._added_new(dist) + + def resolve(self, requirements, env=None, installer=None): + """List all distributions needed to (recursively) meet `requirements` + + `requirements` must be a sequence of ``Requirement`` objects. `env`, + if supplied, should be an ``Environment`` instance. If + not supplied, it defaults to all distributions available within any + entry or distribution in the working set. `installer`, if supplied, + will be invoked with each requirement that cannot be met by an + already-installed distribution; it should return a ``Distribution`` or + ``None``. + """ + + requirements = list(requirements)[::-1] # set up the stack + processed = {} # set of processed requirements + best = {} # key -> dist + to_activate = [] + + while requirements: + req = requirements.pop(0) # process dependencies breadth-first + if req in processed: + # Ignore cyclic or redundant dependencies + continue + dist = best.get(req.key) + if dist is None: + # Find the best distribution and add it to the map + dist = self.by_key.get(req.key) + if dist is None: + if env is None: + env = Environment(self.entries) + dist = best[req.key] = env.best_match(req, self, installer) + if dist is None: + raise DistributionNotFound(req) # XXX put more info here + to_activate.append(dist) + if dist not in req: + # Oops, the "best" so far conflicts with a dependency + raise VersionConflict(dist,req) # XXX put more info here + requirements.extend(dist.requires(req.extras)[::-1]) + processed[req] = True + + return to_activate # return list of distros to activate + + def find_plugins(self, + plugin_env, full_env=None, installer=None, fallback=True + ): + """Find all activatable distributions in `plugin_env` + + Example usage:: + + distributions, errors = working_set.find_plugins( + Environment(plugin_dirlist) + ) + map(working_set.add, distributions) # add plugins+libs to sys.path + print "Couldn't load", errors # display errors + + The `plugin_env` should be an ``Environment`` instance that contains + only distributions that are in the project's "plugin directory" or + directories. The `full_env`, if supplied, should be an ``Environment`` + contains all currently-available distributions. If `full_env` is not + supplied, one is created automatically from the ``WorkingSet`` this + method is called on, which will typically mean that every directory on + ``sys.path`` will be scanned for distributions. + + `installer` is a standard installer callback as used by the + ``resolve()`` method. The `fallback` flag indicates whether we should + attempt to resolve older versions of a plugin if the newest version + cannot be resolved. + + This method returns a 2-tuple: (`distributions`, `error_info`), where + `distributions` is a list of the distributions found in `plugin_env` + that were loadable, along with any other distributions that are needed + to resolve their dependencies. `error_info` is a dictionary mapping + unloadable plugin distributions to an exception instance describing the + error that occurred. Usually this will be a ``DistributionNotFound`` or + ``VersionConflict`` instance. + """ + + plugin_projects = list(plugin_env) + plugin_projects.sort() # scan project names in alphabetic order + + error_info = {} + distributions = {} + + if full_env is None: + env = Environment(self.entries) + env += plugin_env + else: + env = full_env + plugin_env + + shadow_set = self.__class__([]) + map(shadow_set.add, self) # put all our entries in shadow_set + + for project_name in plugin_projects: + + for dist in plugin_env[project_name]: + + req = [dist.as_requirement()] + + try: + resolvees = shadow_set.resolve(req, env, installer) + + except ResolutionError,v: + error_info[dist] = v # save error info + if fallback: + continue # try the next older version of project + else: + break # give up on this project, keep going + + else: + map(shadow_set.add, resolvees) + distributions.update(dict.fromkeys(resolvees)) + + # success, no need to try any more versions of this project + break + + distributions = list(distributions) + distributions.sort() + + return distributions, error_info + + + + + + def require(self, *requirements): + """Ensure that distributions matching `requirements` are activated + + `requirements` must be a string or a (possibly-nested) sequence + thereof, specifying the distributions and versions required. The + return value is a sequence of the distributions that needed to be + activated to fulfill the requirements; all relevant distributions are + included, even if they were already activated in this working set. + """ + + needed = self.resolve(parse_requirements(requirements)) + + for dist in needed: + self.add(dist) + + return needed + + + def subscribe(self, callback): + """Invoke `callback` for all distributions (including existing ones)""" + if callback in self.callbacks: + return + self.callbacks.append(callback) + for dist in self: + callback(dist) + + + def _added_new(self, dist): + for callback in self.callbacks: + callback(dist) + + + + + + + + + + + +class Environment(object): + """Searchable snapshot of distributions on a search path""" + + def __init__(self, search_path=None, platform=get_supported_platform(), python=PY_MAJOR): + """Snapshot distributions available on a search path + + Any distributions found on `search_path` are added to the environment. + `search_path` should be a sequence of ``sys.path`` items. If not + supplied, ``sys.path`` is used. + + `platform` is an optional string specifying the name of the platform + that platform-specific distributions must be compatible with. If + unspecified, it defaults to the current platform. `python` is an + optional string naming the desired version of Python (e.g. ``'2.4'``); + it defaults to the current version. + + You may explicitly set `platform` (and/or `python`) to ``None`` if you + wish to map *all* distributions, not just those compatible with the + running platform or Python version. + """ + self._distmap = {} + self._cache = {} + self.platform = platform + self.python = python + self.scan(search_path) + + def can_add(self, dist): + """Is distribution `dist` acceptable for this environment? + + The distribution must match the platform and python version + requirements specified when this environment was created, or False + is returned. + """ + return (self.python is None or dist.py_version is None + or dist.py_version==self.python) \ + and compatible_platforms(dist.platform,self.platform) + + def remove(self, dist): + """Remove `dist` from the environment""" + self._distmap[dist.key].remove(dist) + + def scan(self, search_path=None): + """Scan `search_path` for distributions usable in this environment + + Any distributions found are added to the environment. + `search_path` should be a sequence of ``sys.path`` items. If not + supplied, ``sys.path`` is used. Only distributions conforming to + the platform/python version defined at initialization are added. + """ + if search_path is None: + search_path = sys.path + + for item in search_path: + for dist in find_distributions(item): + self.add(dist) + + def __getitem__(self,project_name): + """Return a newest-to-oldest list of distributions for `project_name` + """ + try: + return self._cache[project_name] + except KeyError: + project_name = project_name.lower() + if project_name not in self._distmap: + return [] + + if project_name not in self._cache: + dists = self._cache[project_name] = self._distmap[project_name] + _sort_dists(dists) + + return self._cache[project_name] + + def add(self,dist): + """Add `dist` if we ``can_add()`` it and it isn't already added""" + if self.can_add(dist) and dist.has_version(): + dists = self._distmap.setdefault(dist.key,[]) + if dist not in dists: + dists.append(dist) + if dist.key in self._cache: + _sort_dists(self._cache[dist.key]) + + + def best_match(self, req, working_set, installer=None): + """Find distribution best matching `req` and usable on `working_set` + + This calls the ``find(req)`` method of the `working_set` to see if a + suitable distribution is already active. (This may raise + ``VersionConflict`` if an unsuitable version of the project is already + active in the specified `working_set`.) If a suitable distribution + isn't active, this method returns the newest distribution in the + environment that meets the ``Requirement`` in `req`. If no suitable + distribution is found, and `installer` is supplied, then the result of + calling the environment's ``obtain(req, installer)`` method will be + returned. + """ + dist = working_set.find(req) + if dist is not None: + return dist + for dist in self[req.key]: + if dist in req: + return dist + return self.obtain(req, installer) # try and download/install + + def obtain(self, requirement, installer=None): + """Obtain a distribution matching `requirement` (e.g. via download) + + Obtain a distro that matches requirement (e.g. via download). In the + base ``Environment`` class, this routine just returns + ``installer(requirement)``, unless `installer` is None, in which case + None is returned instead. This method is a hook that allows subclasses + to attempt other ways of obtaining a distribution before falling back + to the `installer` argument.""" + if installer is not None: + return installer(requirement) + + def __iter__(self): + """Yield the unique project names of the available distributions""" + for key in self._distmap.keys(): + if self[key]: yield key + + + + + def __iadd__(self, other): + """In-place addition of a distribution or environment""" + if isinstance(other,Distribution): + self.add(other) + elif isinstance(other,Environment): + for project in other: + for dist in other[project]: + self.add(dist) + else: + raise TypeError("Can't add %r to environment" % (other,)) + return self + + def __add__(self, other): + """Add an environment or distribution to an environment""" + new = self.__class__([], platform=None, python=None) + for env in self, other: + new += env + return new + + +AvailableDistributions = Environment # XXX backward compatibility + + +class ExtractionError(RuntimeError): + """An error occurred extracting a resource + + The following attributes are available from instances of this exception: + + manager + The resource manager that raised this exception + + cache_path + The base directory for resource extraction + + original_error + The exception instance that caused extraction to fail + """ + + + + +class ResourceManager: + """Manage resource extraction and packages""" + extraction_path = None + + def __init__(self): + self.cached_files = {} + + def resource_exists(self, package_or_requirement, resource_name): + """Does the named resource exist?""" + return get_provider(package_or_requirement).has_resource(resource_name) + + def resource_isdir(self, package_or_requirement, resource_name): + """Is the named resource an existing directory?""" + return get_provider(package_or_requirement).resource_isdir( + resource_name + ) + + def resource_filename(self, package_or_requirement, resource_name): + """Return a true filesystem path for specified resource""" + return get_provider(package_or_requirement).get_resource_filename( + self, resource_name + ) + + def resource_stream(self, package_or_requirement, resource_name): + """Return a readable file-like object for specified resource""" + return get_provider(package_or_requirement).get_resource_stream( + self, resource_name + ) + + def resource_string(self, package_or_requirement, resource_name): + """Return specified resource as a string""" + return get_provider(package_or_requirement).get_resource_string( + self, resource_name + ) + + def resource_listdir(self, package_or_requirement, resource_name): + """List the contents of the named resource directory""" + return get_provider(package_or_requirement).resource_listdir( + resource_name + ) + + def extraction_error(self): + """Give an error message for problems extracting file(s)""" + + old_exc = sys.exc_info()[1] + cache_path = self.extraction_path or get_default_cache() + + err = ExtractionError("""Can't extract file(s) to egg cache + +The following error occurred while trying to extract file(s) to the Python egg +cache: + + %s + +The Python egg cache directory is currently set to: + + %s + +Perhaps your account does not have write access to this directory? You can +change the cache directory by setting the PYTHON_EGG_CACHE environment +variable to point to an accessible directory. +""" % (old_exc, cache_path) + ) + err.manager = self + err.cache_path = cache_path + err.original_error = old_exc + raise err + + + + + + + + + + + + + + + + def get_cache_path(self, archive_name, names=()): + """Return absolute location in cache for `archive_name` and `names` + + The parent directory of the resulting path will be created if it does + not already exist. `archive_name` should be the base filename of the + enclosing egg (which may not be the name of the enclosing zipfile!), + including its ".egg" extension. `names`, if provided, should be a + sequence of path name parts "under" the egg's extraction location. + + This method should only be called by resource providers that need to + obtain an extraction location, and only for names they intend to + extract, as it tracks the generated names for possible cleanup later. + """ + extract_path = self.extraction_path or get_default_cache() + target_path = os.path.join(extract_path, archive_name+'-tmp', *names) + try: + _bypass_ensure_directory(target_path) + except: + self.extraction_error() + + self.cached_files[target_path] = 1 + return target_path + + + + + + + + + + + + + + + + + + + + def postprocess(self, tempname, filename): + """Perform any platform-specific postprocessing of `tempname` + + This is where Mac header rewrites should be done; other platforms don't + have anything special they should do. + + Resource providers should call this method ONLY after successfully + extracting a compressed resource. They must NOT call it on resources + that are already in the filesystem. + + `tempname` is the current (temporary) name of the file, and `filename` + is the name it will be renamed to by the caller after this routine + returns. + """ + + if os.name == 'posix': + # Make the resource executable + mode = ((os.stat(tempname).st_mode) | 0555) & 07777 + os.chmod(tempname, mode) + + + + + + + + + + + + + + + + + + + + + + + def set_extraction_path(self, path): + """Set the base path where resources will be extracted to, if needed. + + If you do not call this routine before any extractions take place, the + path defaults to the return value of ``get_default_cache()``. (Which + is based on the ``PYTHON_EGG_CACHE`` environment variable, with various + platform-specific fallbacks. See that routine's documentation for more + details.) + + Resources are extracted to subdirectories of this path based upon + information given by the ``IResourceProvider``. You may set this to a + temporary directory, but then you must call ``cleanup_resources()`` to + delete the extracted files when done. There is no guarantee that + ``cleanup_resources()`` will be able to remove all extracted files. + + (Note: you may not change the extraction path for a given resource + manager once resources have been extracted, unless you first call + ``cleanup_resources()``.) + """ + if self.cached_files: + raise ValueError( + "Can't change extraction path, files already extracted" + ) + + self.extraction_path = path + + def cleanup_resources(self, force=False): + """ + Delete all extracted resource files and directories, returning a list + of the file and directory names that could not be successfully removed. + This function does not have any concurrency protection, so it should + generally only be called when the extraction path is a temporary + directory exclusive to a single process. This method is not + automatically called; you must call it explicitly or register it as an + ``atexit`` function if you wish to ensure cleanup of a temporary + directory used for extractions. + """ + # XXX + + + +def get_default_cache(): + """Determine the default cache location + + This returns the ``PYTHON_EGG_CACHE`` environment variable, if set. + Otherwise, on Windows, it returns a "Python-Eggs" subdirectory of the + "Application Data" directory. On all other systems, it's "~/.python-eggs". + """ + try: + return os.environ['PYTHON_EGG_CACHE'] + except KeyError: + pass + + if os.name!='nt': + return os.path.expanduser('~/.python-eggs') + + app_data = 'Application Data' # XXX this may be locale-specific! + app_homes = [ + (('APPDATA',), None), # best option, should be locale-safe + (('USERPROFILE',), app_data), + (('HOMEDRIVE','HOMEPATH'), app_data), + (('HOMEPATH',), app_data), + (('HOME',), None), + (('WINDIR',), app_data), # 95/98/ME + ] + + for keys, subdir in app_homes: + dirname = '' + for key in keys: + if key in os.environ: + dirname = os.path.join(dirname, os.environ[key]) + else: + break + else: + if subdir: + dirname = os.path.join(dirname,subdir) + return os.path.join(dirname, 'Python-Eggs') + else: + raise RuntimeError( + "Please set the PYTHON_EGG_CACHE enviroment variable" + ) + +def safe_name(name): + """Convert an arbitrary string to a standard distribution name + + Any runs of non-alphanumeric/. characters are replaced with a single '-'. + """ + return re.sub('[^A-Za-z0-9.]+', '-', name) + + +def safe_version(version): + """Convert an arbitrary string to a standard version string + + Spaces become dots, and all other non-alphanumeric characters become + dashes, with runs of multiple dashes condensed to a single dash. + """ + version = version.replace(' ','.') + return re.sub('[^A-Za-z0-9.]+', '-', version) + + +def safe_extra(extra): + """Convert an arbitrary string to a standard 'extra' name + + Any runs of non-alphanumeric characters are replaced with a single '_', + and the result is always lowercased. + """ + return re.sub('[^A-Za-z0-9.]+', '_', extra).lower() + + +def to_filename(name): + """Convert a project or version name to its filename-escaped form + + Any '-' characters are currently replaced with '_'. + """ + return name.replace('-','_') + + + + + + + + +class NullProvider: + """Try to implement resources and metadata for arbitrary PEP 302 loaders""" + + egg_name = None + egg_info = None + loader = None + + def __init__(self, module): + self.loader = getattr(module, '__loader__', None) + self.module_path = os.path.dirname(getattr(module, '__file__', '')) + + def get_resource_filename(self, manager, resource_name): + return self._fn(self.module_path, resource_name) + + def get_resource_stream(self, manager, resource_name): + return StringIO(self.get_resource_string(manager, resource_name)) + + def get_resource_string(self, manager, resource_name): + return self._get(self._fn(self.module_path, resource_name)) + + def has_resource(self, resource_name): + return self._has(self._fn(self.module_path, resource_name)) + + def has_metadata(self, name): + return self.egg_info and self._has(self._fn(self.egg_info,name)) + + def get_metadata(self, name): + if not self.egg_info: + return "" + return self._get(self._fn(self.egg_info,name)) + + def get_metadata_lines(self, name): + return yield_lines(self.get_metadata(name)) + + def resource_isdir(self,resource_name): + return self._isdir(self._fn(self.module_path, resource_name)) + + def metadata_isdir(self,name): + return self.egg_info and self._isdir(self._fn(self.egg_info,name)) + + + def resource_listdir(self,resource_name): + return self._listdir(self._fn(self.module_path,resource_name)) + + def metadata_listdir(self,name): + if self.egg_info: + return self._listdir(self._fn(self.egg_info,name)) + return [] + + def run_script(self,script_name,namespace): + script = 'scripts/'+script_name + if not self.has_metadata(script): + raise ResolutionError("No script named %r" % script_name) + script_text = self.get_metadata(script).replace('\r\n','\n') + script_text = script_text.replace('\r','\n') + script_filename = self._fn(self.egg_info,script) + namespace['__file__'] = script_filename + if os.path.exists(script_filename): + execfile(script_filename, namespace, namespace) + else: + from linecache import cache + cache[script_filename] = ( + len(script_text), 0, script_text.split('\n'), script_filename + ) + script_code = compile(script_text,script_filename,'exec') + exec script_code in namespace, namespace + + def _has(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _isdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _listdir(self, path): + raise NotImplementedError( + "Can't perform this operation for unregistered loader type" + ) + + def _fn(self, base, resource_name): + if resource_name: + return os.path.join(base, *resource_name.split('/')) + return base + + def _get(self, path): + if hasattr(self.loader, 'get_data'): + return self.loader.get_data(path) + raise NotImplementedError( + "Can't perform this operation for loaders without 'get_data()'" + ) + +register_loader_type(object, NullProvider) + + +class EggProvider(NullProvider): + """Provider based on a virtual filesystem""" + + def __init__(self,module): + NullProvider.__init__(self,module) + self._setup_prefix() + + def _setup_prefix(self): + # we assume here that our metadata may be nested inside a "basket" + # of multiple eggs; that's why we use module_path instead of .archive + path = self.module_path + old = None + while path!=old: + if path.lower().endswith('.egg'): + self.egg_name = os.path.basename(path) + self.egg_info = os.path.join(path, 'EGG-INFO') + self.egg_root = path + break + old = path + path, base = os.path.split(path) + + + + + + +class DefaultProvider(EggProvider): + """Provides access to package resources in the filesystem""" + + def _has(self, path): + return os.path.exists(path) + + def _isdir(self,path): + return os.path.isdir(path) + + def _listdir(self,path): + return os.listdir(path) + + def get_resource_stream(self, manager, resource_name): + return open(self._fn(self.module_path, resource_name), 'rb') + + def _get(self, path): + stream = open(path, 'rb') + try: + return stream.read() + finally: + stream.close() + +register_loader_type(type(None), DefaultProvider) + + +class EmptyProvider(NullProvider): + """Provider that returns nothing for all requests""" + + _isdir = _has = lambda self,path: False + _get = lambda self,path: '' + _listdir = lambda self,path: [] + module_path = None + + def __init__(self): + pass + +empty_provider = EmptyProvider() + + + + +class ZipProvider(EggProvider): + """Resource support for zips and eggs""" + + eagers = None + + def __init__(self, module): + EggProvider.__init__(self,module) + self.zipinfo = zipimport._zip_directory_cache[self.loader.archive] + self.zip_pre = self.loader.archive+os.sep + + def _zipinfo_name(self, fspath): + # Convert a virtual filename (full path to file) into a zipfile subpath + # usable with the zipimport directory cache for our target archive + if fspath.startswith(self.zip_pre): + return fspath[len(self.zip_pre):] + raise AssertionError( + "%s is not a subpath of %s" % (fspath,self.zip_pre) + ) + + def _parts(self,zip_path): + # Convert a zipfile subpath into an egg-relative path part list + fspath = self.zip_pre+zip_path # pseudo-fs path + if fspath.startswith(self.egg_root+os.sep): + return fspath[len(self.egg_root)+1:].split(os.sep) + raise AssertionError( + "%s is not a subpath of %s" % (fspath,self.egg_root) + ) + + def get_resource_filename(self, manager, resource_name): + if not self.egg_name: + raise NotImplementedError( + "resource_filename() only supported for .egg, not .zip" + ) + # no need to lock for extraction, since we use temp names + zip_path = self._resource_to_zip(resource_name) + eagers = self._get_eager_resources() + if '/'.join(self._parts(zip_path)) in eagers: + for name in eagers: + self._extract_resource(manager, self._eager_to_zip(name)) + return self._extract_resource(manager, zip_path) + + def _extract_resource(self, manager, zip_path): + + if zip_path in self._index(): + for name in self._index()[zip_path]: + last = self._extract_resource( + manager, os.path.join(zip_path, name) + ) + return os.path.dirname(last) # return the extracted directory name + + zip_stat = self.zipinfo[zip_path] + t,d,size = zip_stat[5], zip_stat[6], zip_stat[3] + date_time = ( + (d>>9)+1980, (d>>5)&0xF, d&0x1F, # ymd + (t&0xFFFF)>>11, (t>>5)&0x3F, (t&0x1F) * 2, 0, 0, -1 # hms, etc. + ) + timestamp = time.mktime(date_time) + + try: + real_path = manager.get_cache_path( + self.egg_name, self._parts(zip_path) + ) + + if os.path.isfile(real_path): + stat = os.stat(real_path) + if stat.st_size==size and stat.st_mtime==timestamp: + # size and stamp match, don't bother extracting + return real_path + + outf, tmpnam = _mkstemp(".$extract", dir=os.path.dirname(real_path)) + os.write(outf, self.loader.get_data(zip_path)) + os.close(outf) + utime(tmpnam, (timestamp,timestamp)) + manager.postprocess(tmpnam, real_path) + + try: + rename(tmpnam, real_path) + + except os.error: + if os.path.isfile(real_path): + stat = os.stat(real_path) + + if stat.st_size==size and stat.st_mtime==timestamp: + # size and stamp match, somebody did it just ahead of + # us, so we're done + return real_path + elif os.name=='nt': # Windows, del old file and retry + unlink(real_path) + rename(tmpnam, real_path) + return real_path + raise + + except os.error: + manager.extraction_error() # report a user-friendly error + + return real_path + + def _get_eager_resources(self): + if self.eagers is None: + eagers = [] + for name in ('native_libs.txt', 'eager_resources.txt'): + if self.has_metadata(name): + eagers.extend(self.get_metadata_lines(name)) + self.eagers = eagers + return self.eagers + + def _index(self): + try: + return self._dirindex + except AttributeError: + ind = {} + for path in self.zipinfo: + parts = path.split(os.sep) + while parts: + parent = os.sep.join(parts[:-1]) + if parent in ind: + ind[parent].append(parts[-1]) + break + else: + ind[parent] = [parts.pop()] + self._dirindex = ind + return ind + + def _has(self, fspath): + zip_path = self._zipinfo_name(fspath) + return zip_path in self.zipinfo or zip_path in self._index() + + def _isdir(self,fspath): + return self._zipinfo_name(fspath) in self._index() + + def _listdir(self,fspath): + return list(self._index().get(self._zipinfo_name(fspath), ())) + + def _eager_to_zip(self,resource_name): + return self._zipinfo_name(self._fn(self.egg_root,resource_name)) + + def _resource_to_zip(self,resource_name): + return self._zipinfo_name(self._fn(self.module_path,resource_name)) + +register_loader_type(zipimport.zipimporter, ZipProvider) + + + + + + + + + + + + + + + + + + + + + + + + +class FileMetadata(EmptyProvider): + """Metadata handler for standalone PKG-INFO files + + Usage:: + + metadata = FileMetadata("/path/to/PKG-INFO") + + This provider rejects all data and metadata requests except for PKG-INFO, + which is treated as existing, and will be the contents of the file at + the provided location. + """ + + def __init__(self,path): + self.path = path + + def has_metadata(self,name): + return name=='PKG-INFO' + + def get_metadata(self,name): + if name=='PKG-INFO': + return open(self.path,'rU').read() + raise KeyError("No metadata except PKG-INFO is available") + + def get_metadata_lines(self,name): + return yield_lines(self.get_metadata(name)) + + + + + + + + + + + + + + + + +class PathMetadata(DefaultProvider): + """Metadata provider for egg directories + + Usage:: + + # Development eggs: + + egg_info = "/path/to/PackageName.egg-info" + base_dir = os.path.dirname(egg_info) + metadata = PathMetadata(base_dir, egg_info) + dist_name = os.path.splitext(os.path.basename(egg_info))[0] + dist = Distribution(basedir,project_name=dist_name,metadata=metadata) + + # Unpacked egg directories: + + egg_path = "/path/to/PackageName-ver-pyver-etc.egg" + metadata = PathMetadata(egg_path, os.path.join(egg_path,'EGG-INFO')) + dist = Distribution.from_filename(egg_path, metadata=metadata) + """ + + def __init__(self, path, egg_info): + self.module_path = path + self.egg_info = egg_info + + +class EggMetadata(ZipProvider): + """Metadata provider for .egg files""" + + def __init__(self, importer): + """Create a metadata provider from a zipimporter""" + + self.zipinfo = zipimport._zip_directory_cache[importer.archive] + self.zip_pre = importer.archive+os.sep + self.loader = importer + if importer.prefix: + self.module_path = os.path.join(importer.archive, importer.prefix) + else: + self.module_path = importer.archive + self._setup_prefix() + + +class ImpWrapper: + """PEP 302 Importer that wraps Python's "normal" import algorithm""" + + def __init__(self, path=None): + self.path = path + + def find_module(self, fullname, path=None): + subname = fullname.split(".")[-1] + if subname != fullname and self.path is None: + return None + if self.path is None: + path = None + else: + path = [self.path] + try: + file, filename, etc = imp.find_module(subname, path) + except ImportError: + return None + return ImpLoader(file, filename, etc) + + +class ImpLoader: + """PEP 302 Loader that wraps Python's "normal" import algorithm""" + + def __init__(self, file, filename, etc): + self.file = file + self.filename = filename + self.etc = etc + + def load_module(self, fullname): + try: + mod = imp.load_module(fullname, self.file, self.filename, self.etc) + finally: + if self.file: self.file.close() + # Note: we don't set __loader__ because we want the module to look + # normal; i.e. this is just a wrapper for standard import machinery + return mod + + + + +def get_importer(path_item): + """Retrieve a PEP 302 "importer" for the given path item + + If there is no importer, this returns a wrapper around the builtin import + machinery. The returned importer is only cached if it was created by a + path hook. + """ + try: + importer = sys.path_importer_cache[path_item] + except KeyError: + for hook in sys.path_hooks: + try: + importer = hook(path_item) + except ImportError: + pass + else: + break + else: + importer = None + + sys.path_importer_cache.setdefault(path_item,importer) + if importer is None: + try: + importer = ImpWrapper(path_item) + except ImportError: + pass + return importer + + + + + + + + + + + + + + +_distribution_finders = {} + +def register_finder(importer_type, distribution_finder): + """Register `distribution_finder` to find distributions in sys.path items + + `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item + handler), and `distribution_finder` is a callable that, passed a path + item and the importer instance, yields ``Distribution`` instances found on + that path item. See ``pkg_resources.find_on_path`` for an example.""" + _distribution_finders[importer_type] = distribution_finder + + +def find_distributions(path_item, only=False): + """Yield distributions accessible via `path_item`""" + importer = get_importer(path_item) + finder = _find_adapter(_distribution_finders, importer) + return finder(importer, path_item, only) + +def find_in_zip(importer, path_item, only=False): + metadata = EggMetadata(importer) + if metadata.has_metadata('PKG-INFO'): + yield Distribution.from_filename(path_item, metadata=metadata) + if only: + return # don't yield nested distros + for subitem in metadata.resource_listdir('/'): + if subitem.endswith('.egg'): + subpath = os.path.join(path_item, subitem) + for dist in find_in_zip(zipimport.zipimporter(subpath), subpath): + yield dist + +register_finder(zipimport.zipimporter, find_in_zip) + +def StringIO(*args, **kw): + """Thunk to load the real StringIO on demand""" + global StringIO + try: + from cStringIO import StringIO + except ImportError: + from StringIO import StringIO + return StringIO(*args,**kw) + +def find_nothing(importer, path_item, only=False): + return () +register_finder(object,find_nothing) + +def find_on_path(importer, path_item, only=False): + """Yield distributions accessible on a sys.path directory""" + path_item = _normalize_cached(path_item) + + if os.path.isdir(path_item): + if path_item.lower().endswith('.egg'): + # unpacked egg + yield Distribution.from_filename( + path_item, metadata=PathMetadata( + path_item, os.path.join(path_item,'EGG-INFO') + ) + ) + else: + # scan for .egg and .egg-info in directory + for entry in os.listdir(path_item): + lower = entry.lower() + if lower.endswith('.egg-info'): + fullpath = os.path.join(path_item, entry) + if os.path.isdir(fullpath): + # egg-info directory, allow getting metadata + metadata = PathMetadata(path_item, fullpath) + else: + metadata = FileMetadata(fullpath) + yield Distribution.from_location( + path_item,entry,metadata,precedence=DEVELOP_DIST + ) + elif not only and lower.endswith('.egg'): + for dist in find_distributions(os.path.join(path_item, entry)): + yield dist + elif not only and lower.endswith('.egg-link'): + for line in file(os.path.join(path_item, entry)): + if not line.strip(): continue + for item in find_distributions(os.path.join(path_item,line.rstrip())): + yield item + break +register_finder(ImpWrapper, find_on_path) + +_namespace_handlers = {} +_namespace_packages = {} + +def register_namespace_handler(importer_type, namespace_handler): + """Register `namespace_handler` to declare namespace packages + + `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item + handler), and `namespace_handler` is a callable like this:: + + def namespace_handler(importer,path_entry,moduleName,module): + # return a path_entry to use for child packages + + Namespace handlers are only called if the importer object has already + agreed that it can handle the relevant path item, and they should only + return a subpath if the module __path__ does not already contain an + equivalent subpath. For an example namespace handler, see + ``pkg_resources.file_ns_handler``. + """ + _namespace_handlers[importer_type] = namespace_handler + +def _handle_ns(packageName, path_item): + """Ensure that named package includes a subpath of path_item (if needed)""" + importer = get_importer(path_item) + if importer is None: + return None + loader = importer.find_module(packageName) + if loader is None: + return None + module = sys.modules.get(packageName) + if module is None: + module = sys.modules[packageName] = new.module(packageName) + module.__path__ = []; _set_parent_ns(packageName) + elif not hasattr(module,'__path__'): + raise TypeError("Not a package:", packageName) + handler = _find_adapter(_namespace_handlers, importer) + subpath = handler(importer,path_item,packageName,module) + if subpath is not None: + path = module.__path__; path.append(subpath) + loader.load_module(packageName); module.__path__ = path + return subpath + +def declare_namespace(packageName): + """Declare that package 'packageName' is a namespace package""" + + imp.acquire_lock() + try: + if packageName in _namespace_packages: + return + + path, parent = sys.path, None + if '.' in packageName: + parent = '.'.join(packageName.split('.')[:-1]) + declare_namespace(parent) + __import__(parent) + try: + path = sys.modules[parent].__path__ + except AttributeError: + raise TypeError("Not a package:", parent) + + # Track what packages are namespaces, so when new path items are added, + # they can be updated + _namespace_packages.setdefault(parent,[]).append(packageName) + _namespace_packages.setdefault(packageName,[]) + + for path_item in path: + # Ensure all the parent's path items are reflected in the child, + # if they apply + _handle_ns(packageName, path_item) + + finally: + imp.release_lock() + +def fixup_namespace_packages(path_item, parent=None): + """Ensure that previously-declared namespace packages include path_item""" + imp.acquire_lock() + try: + for package in _namespace_packages.get(parent,()): + subpath = _handle_ns(package, path_item) + if subpath: fixup_namespace_packages(subpath,package) + finally: + imp.release_lock() + +def file_ns_handler(importer, path_item, packageName, module): + """Compute an ns-package subpath for a filesystem or zipfile importer""" + + subpath = os.path.join(path_item, packageName.split('.')[-1]) + normalized = _normalize_cached(subpath) + for item in module.__path__: + if _normalize_cached(item)==normalized: + break + else: + # Only return the path if it's not already there + return subpath + +register_namespace_handler(ImpWrapper,file_ns_handler) +register_namespace_handler(zipimport.zipimporter,file_ns_handler) + + +def null_ns_handler(importer, path_item, packageName, module): + return None + +register_namespace_handler(object,null_ns_handler) + + +def normalize_path(filename): + """Normalize a file/dir name for comparison purposes""" + return os.path.normcase(os.path.realpath(filename)) + +def _normalize_cached(filename,_cache={}): + try: + return _cache[filename] + except KeyError: + _cache[filename] = result = normalize_path(filename) + return result + +def _set_parent_ns(packageName): + parts = packageName.split('.') + name = parts.pop() + if parts: + parent = '.'.join(parts) + setattr(sys.modules[parent], name, sys.modules[packageName]) + + +def yield_lines(strs): + """Yield non-empty/non-comment lines of a ``basestring`` or sequence""" + if isinstance(strs,basestring): + for s in strs.splitlines(): + s = s.strip() + if s and not s.startswith('#'): # skip blank lines/comments + yield s + else: + for ss in strs: + for s in yield_lines(ss): + yield s + +LINE_END = re.compile(r"\s*(#.*)?$").match # whitespace and comment +CONTINUE = re.compile(r"\s*\\\s*(#.*)?$").match # line continuation +DISTRO = re.compile(r"\s*((\w|[-.])+)").match # Distribution or extra +VERSION = re.compile(r"\s*(<=?|>=?|==|!=)\s*((\w|[-.])+)").match # ver. info +COMMA = re.compile(r"\s*,").match # comma between items +OBRACKET = re.compile(r"\s*\[").match +CBRACKET = re.compile(r"\s*\]").match +MODULE = re.compile(r"\w+(\.\w+)*$").match +EGG_NAME = re.compile( + r"(?P[^-]+)" + r"( -(?P[^-]+) (-py(?P[^-]+) (-(?P.+))? )? )?", + re.VERBOSE | re.IGNORECASE +).match + +component_re = re.compile(r'(\d+ | [a-z]+ | \.| -)', re.VERBOSE) +replace = {'pre':'c', 'preview':'c','-':'final-','rc':'c','dev':'@'}.get + +def _parse_version_parts(s): + for part in component_re.split(s): + part = replace(part,part) + if not part or part=='.': + continue + if part[:1] in '0123456789': + yield part.zfill(8) # pad for numeric comparison + else: + yield '*'+part + + yield '*final' # ensure that alpha/beta/candidate are before final + +def parse_version(s): + """Convert a version string to a chronologically-sortable key + + This is a rough cross between distutils' StrictVersion and LooseVersion; + if you give it versions that would work with StrictVersion, then it behaves + the same; otherwise it acts like a slightly-smarter LooseVersion. It is + *possible* to create pathological version coding schemes that will fool + this parser, but they should be very rare in practice. + + The returned value will be a tuple of strings. Numeric portions of the + version are padded to 8 digits so they will compare numerically, but + without relying on how numbers compare relative to strings. Dots are + dropped, but dashes are retained. Trailing zeros between alpha segments + or dashes are suppressed, so that e.g. "2.4.0" is considered the same as + "2.4". Alphanumeric parts are lower-cased. + + The algorithm assumes that strings like "-" and any alpha string that + alphabetically follows "final" represents a "patch level". So, "2.4-1" + is assumed to be a branch or patch of "2.4", and therefore "2.4.1" is + considered newer than "2.4-1", which in turn is newer than "2.4". + + Strings like "a", "b", "c", "alpha", "beta", "candidate" and so on (that + come before "final" alphabetically) are assumed to be pre-release versions, + so that the version "2.4" is considered newer than "2.4a1". + + Finally, to handle miscellaneous cases, the strings "pre", "preview", and + "rc" are treated as if they were "c", i.e. as though they were release + candidates, and therefore are not as new as a version string that does not + contain them, and "dev" is replaced with an '@' so that it sorts lower than + than any other pre-release tag. + """ + parts = [] + for part in _parse_version_parts(s.lower()): + if part.startswith('*'): + if part<'*final': # remove '-' before a prerelease tag + while parts and parts[-1]=='*final-': parts.pop() + # remove trailing zeros from each series of numeric parts + while parts and parts[-1]=='00000000': + parts.pop() + parts.append(part) + return tuple(parts) + +class EntryPoint(object): + """Object representing an advertised importable object""" + + def __init__(self, name, module_name, attrs=(), extras=(), dist=None): + if not MODULE(module_name): + raise ValueError("Invalid module name", module_name) + self.name = name + self.module_name = module_name + self.attrs = tuple(attrs) + self.extras = Requirement.parse(("x[%s]" % ','.join(extras))).extras + self.dist = dist + + def __str__(self): + s = "%s = %s" % (self.name, self.module_name) + if self.attrs: + s += ':' + '.'.join(self.attrs) + if self.extras: + s += ' [%s]' % ','.join(self.extras) + return s + + def __repr__(self): + return "EntryPoint.parse(%r)" % str(self) + + def load(self, require=True, env=None, installer=None): + if require: self.require(env, installer) + entry = __import__(self.module_name, globals(),globals(), ['__name__']) + for attr in self.attrs: + try: + entry = getattr(entry,attr) + except AttributeError: + raise ImportError("%r has no %r attribute" % (entry,attr)) + return entry + + def require(self, env=None, installer=None): + if self.extras and not self.dist: + raise UnknownExtra("Can't require() without a distribution", self) + map(working_set.add, + working_set.resolve(self.dist.requires(self.extras),env,installer)) + + + + #@classmethod + def parse(cls, src, dist=None): + """Parse a single entry point from string `src` + + Entry point syntax follows the form:: + + name = some.module:some.attr [extra1,extra2] + + The entry name and module name are required, but the ``:attrs`` and + ``[extras]`` parts are optional + """ + try: + attrs = extras = () + name,value = src.split('=',1) + if '[' in value: + value,extras = value.split('[',1) + req = Requirement.parse("x["+extras) + if req.specs: raise ValueError + extras = req.extras + if ':' in value: + value,attrs = value.split(':',1) + if not MODULE(attrs.rstrip()): + raise ValueError + attrs = attrs.rstrip().split('.') + except ValueError: + raise ValueError( + "EntryPoint must be in 'name=module:attrs [extras]' format", + src + ) + else: + return cls(name.strip(), value.strip(), attrs, extras, dist) + + parse = classmethod(parse) + + + + + + + + + #@classmethod + def parse_group(cls, group, lines, dist=None): + """Parse an entry point group""" + if not MODULE(group): + raise ValueError("Invalid group name", group) + this = {} + for line in yield_lines(lines): + ep = cls.parse(line, dist) + if ep.name in this: + raise ValueError("Duplicate entry point", group, ep.name) + this[ep.name]=ep + return this + + parse_group = classmethod(parse_group) + + #@classmethod + def parse_map(cls, data, dist=None): + """Parse a map of entry point groups""" + if isinstance(data,dict): + data = data.items() + else: + data = split_sections(data) + maps = {} + for group, lines in data: + if group is None: + if not lines: + continue + raise ValueError("Entry points must be listed in groups") + group = group.strip() + if group in maps: + raise ValueError("Duplicate group name", group) + maps[group] = cls.parse_group(group, lines, dist) + return maps + + parse_map = classmethod(parse_map) + + + + + + +class Distribution(object): + """Wrap an actual or potential sys.path entry w/metadata""" + def __init__(self, + location=None, metadata=None, project_name=None, version=None, + py_version=PY_MAJOR, platform=None, precedence = EGG_DIST + ): + self.project_name = safe_name(project_name or 'Unknown') + if version is not None: + self._version = safe_version(version) + self.py_version = py_version + self.platform = platform + self.location = location + self.precedence = precedence + self._provider = metadata or empty_provider + + #@classmethod + def from_location(cls,location,basename,metadata=None,**kw): + project_name, version, py_version, platform = [None]*4 + basename, ext = os.path.splitext(basename) + if ext.lower() in (".egg",".egg-info"): + match = EGG_NAME(basename) + if match: + project_name, version, py_version, platform = match.group( + 'name','ver','pyver','plat' + ) + return cls( + location, metadata, project_name=project_name, version=version, + py_version=py_version, platform=platform, **kw + ) + from_location = classmethod(from_location) + + hashcmp = property( + lambda self: ( + getattr(self,'parsed_version',()), self.precedence, self.key, + -len(self.location or ''), self.location, self.py_version, + self.platform + ) + ) + def __cmp__(self, other): return cmp(self.hashcmp, other) + def __hash__(self): return hash(self.hashcmp) + + # These properties have to be lazy so that we don't have to load any + # metadata until/unless it's actually needed. (i.e., some distributions + # may not know their name or version without loading PKG-INFO) + + #@property + def key(self): + try: + return self._key + except AttributeError: + self._key = key = self.project_name.lower() + return key + key = property(key) + + #@property + def parsed_version(self): + try: + return self._parsed_version + except AttributeError: + self._parsed_version = pv = parse_version(self.version) + return pv + + parsed_version = property(parsed_version) + + #@property + def version(self): + try: + return self._version + except AttributeError: + for line in self._get_metadata('PKG-INFO'): + if line.lower().startswith('version:'): + self._version = safe_version(line.split(':',1)[1].strip()) + return self._version + else: + raise ValueError( + "Missing 'Version:' header and/or PKG-INFO file", self + ) + version = property(version) + + + + + #@property + def _dep_map(self): + try: + return self.__dep_map + except AttributeError: + dm = self.__dep_map = {None: []} + for name in 'requires.txt', 'depends.txt': + for extra,reqs in split_sections(self._get_metadata(name)): + if extra: extra = safe_extra(extra) + dm.setdefault(extra,[]).extend(parse_requirements(reqs)) + return dm + _dep_map = property(_dep_map) + + def requires(self,extras=()): + """List of Requirements needed for this distro if `extras` are used""" + dm = self._dep_map + deps = [] + deps.extend(dm.get(None,())) + for ext in extras: + try: + deps.extend(dm[safe_extra(ext)]) + except KeyError: + raise UnknownExtra( + "%s has no such extra feature %r" % (self, ext) + ) + return deps + + def _get_metadata(self,name): + if self.has_metadata(name): + for line in self.get_metadata_lines(name): + yield line + + def activate(self,path=None): + """Ensure distribution is importable on `path` (default=sys.path)""" + if path is None: path = sys.path + self.insert_on(path) + if path is sys.path: + fixup_namespace_packages(self.location) + for pkg in self._get_metadata('namespace_packages.txt'): + if pkg in sys.modules: declare_namespace(pkg) + + def egg_name(self): + """Return what this distribution's standard .egg filename should be""" + filename = "%s-%s-py%s" % ( + to_filename(self.project_name), to_filename(self.version), + self.py_version or PY_MAJOR + ) + + if self.platform: + filename += '-'+self.platform + return filename + + def __repr__(self): + if self.location: + return "%s (%s)" % (self,self.location) + else: + return str(self) + + def __str__(self): + try: version = getattr(self,'version',None) + except ValueError: version = None + version = version or "[unknown version]" + return "%s %s" % (self.project_name,version) + + def __getattr__(self,attr): + """Delegate all unrecognized public attributes to .metadata provider""" + if attr.startswith('_'): + raise AttributeError,attr + return getattr(self._provider, attr) + + #@classmethod + def from_filename(cls,filename,metadata=None, **kw): + return cls.from_location( + _normalize_cached(filename), os.path.basename(filename), metadata, + **kw + ) + from_filename = classmethod(from_filename) + + def as_requirement(self): + """Return a ``Requirement`` that matches this distribution exactly""" + return Requirement.parse('%s==%s' % (self.project_name, self.version)) + + def load_entry_point(self, group, name): + """Return the `name` entry point of `group` or raise ImportError""" + ep = self.get_entry_info(group,name) + if ep is None: + raise ImportError("Entry point %r not found" % ((group,name),)) + return ep.load() + + def get_entry_map(self, group=None): + """Return the entry point map for `group`, or the full entry map""" + try: + ep_map = self._ep_map + except AttributeError: + ep_map = self._ep_map = EntryPoint.parse_map( + self._get_metadata('entry_points.txt'), self + ) + if group is not None: + return ep_map.get(group,{}) + return ep_map + + def get_entry_info(self, group, name): + """Return the EntryPoint object for `group`+`name`, or ``None``""" + return self.get_entry_map(group).get(name) + + + + + + + + + + + + + + + + + + + + def insert_on(self, path, loc = None): + """Insert self.location in path before its nearest parent directory""" + + loc = loc or self.location + if not loc: + return + + if path is sys.path: + self.check_version_conflict() + + nloc = _normalize_cached(loc) + bdir = os.path.dirname(nloc) + npath= map(_normalize_cached, path) + + bp = None + for p, item in enumerate(npath): + if item==nloc: + break + elif item==bdir and self.precedence==EGG_DIST: + # if it's an .egg, give it precedence over its directory + path.insert(p, loc) + npath.insert(p, nloc) + break + else: + path.append(loc) + return + + # p is the spot where we found or inserted loc; now remove duplicates + while 1: + try: + np = npath.index(nloc, p+1) + except ValueError: + break + else: + del npath[np], path[np] + p = np # ha! + + return + + + + def check_version_conflict(self): + if self.key=='setuptools': + return # ignore the inevitable setuptools self-conflicts :( + + nsp = dict.fromkeys(self._get_metadata('namespace_packages.txt')) + loc = normalize_path(self.location) + for modname in self._get_metadata('top_level.txt'): + if (modname not in sys.modules or modname in nsp + or modname in _namespace_packages + ): + continue + + fn = getattr(sys.modules[modname], '__file__', None) + if fn and normalize_path(fn).startswith(loc): + continue + issue_warning( + "Module %s was already imported from %s, but %s is being added" + " to sys.path" % (modname, fn, self.location), + ) + + def has_version(self): + try: + self.version + except ValueError: + issue_warning("Unbuilt egg for "+repr(self)) + return False + return True + + def clone(self,**kw): + """Copy this distribution, substituting in any changed keyword args""" + for attr in ( + 'project_name', 'version', 'py_version', 'platform', 'location', + 'precedence' + ): + kw.setdefault(attr, getattr(self,attr,None)) + kw.setdefault('metadata', self._provider) + return self.__class__(**kw) + + + + + #@property + def extras(self): + return [dep for dep in self._dep_map if dep] + extras = property(extras) + + +def issue_warning(*args,**kw): + level = 1 + g = globals() + try: + # find the first stack frame that is *not* code in + # the pkg_resources module, to use for the warning + while sys._getframe(level).f_globals is g: + level += 1 + except ValueError: + pass + from warnings import warn + warn(stacklevel = level+1, *args, **kw) + + + + + + + + + + + + + + + + + + + + + + + +def parse_requirements(strs): + """Yield ``Requirement`` objects for each specification in `strs` + + `strs` must be an instance of ``basestring``, or a (possibly-nested) + iterable thereof. + """ + # create a steppable iterator, so we can handle \-continuations + lines = iter(yield_lines(strs)) + + def scan_list(ITEM,TERMINATOR,line,p,groups,item_name): + + items = [] + + while not TERMINATOR(line,p): + if CONTINUE(line,p): + try: + line = lines.next(); p = 0 + except StopIteration: + raise ValueError( + "\\ must not appear on the last nonblank line" + ) + + match = ITEM(line,p) + if not match: + raise ValueError("Expected "+item_name+" in",line,"at",line[p:]) + + items.append(match.group(*groups)) + p = match.end() + + match = COMMA(line,p) + if match: + p = match.end() # skip the comma + elif not TERMINATOR(line,p): + raise ValueError( + "Expected ',' or end-of-list in",line,"at",line[p:] + ) + + match = TERMINATOR(line,p) + if match: p = match.end() # skip the terminator, if any + return line, p, items + + for line in lines: + match = DISTRO(line) + if not match: + raise ValueError("Missing distribution spec", line) + project_name = match.group(1) + p = match.end() + extras = [] + + match = OBRACKET(line,p) + if match: + p = match.end() + line, p, extras = scan_list( + DISTRO, CBRACKET, line, p, (1,), "'extra' name" + ) + + line, p, specs = scan_list(VERSION,LINE_END,line,p,(1,2),"version spec") + specs = [(op,safe_version(val)) for op,val in specs] + yield Requirement(project_name, specs, extras) + + +def _sort_dists(dists): + tmp = [(dist.hashcmp,dist) for dist in dists] + tmp.sort() + dists[::-1] = [d for hc,d in tmp] + + + + + + + + + + + + + + + + + +class Requirement: + def __init__(self, project_name, specs, extras): + """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!""" + self.unsafe_name, project_name = project_name, safe_name(project_name) + self.project_name, self.key = project_name, project_name.lower() + index = [(parse_version(v),state_machine[op],op,v) for op,v in specs] + index.sort() + self.specs = [(op,ver) for parsed,trans,op,ver in index] + self.index, self.extras = index, tuple(map(safe_extra,extras)) + self.hashCmp = ( + self.key, tuple([(op,parsed) for parsed,trans,op,ver in index]), + frozenset(self.extras) + ) + self.__hash = hash(self.hashCmp) + + def __str__(self): + specs = ','.join([''.join(s) for s in self.specs]) + extras = ','.join(self.extras) + if extras: extras = '[%s]' % extras + return '%s%s%s' % (self.project_name, extras, specs) + + def __eq__(self,other): + return isinstance(other,Requirement) and self.hashCmp==other.hashCmp + + def __contains__(self,item): + if isinstance(item,Distribution): + if item.key <> self.key: return False + if self.index: item = item.parsed_version # only get if we need it + elif isinstance(item,basestring): + item = parse_version(item) + last = None + for parsed,trans,op,ver in self.index: + action = trans[cmp(item,parsed)] + if action=='F': return False + elif action=='T': return True + elif action=='+': last = True + elif action=='-' or last is None: last = False + if last is None: last = True # no rules encountered + return last + + + def __hash__(self): + return self.__hash + + def __repr__(self): return "Requirement.parse(%r)" % str(self) + + #@staticmethod + def parse(s): + reqs = list(parse_requirements(s)) + if reqs: + if len(reqs)==1: + return reqs[0] + raise ValueError("Expected only one requirement", s) + raise ValueError("No requirements found", s) + + parse = staticmethod(parse) + +state_machine = { + # =>< + '<' : '--T', + '<=': 'T-T', + '>' : 'F+F', + '>=': 'T+F', + '==': 'T..', + '!=': 'F++', +} + + +def _get_mro(cls): + """Get an mro for a type or classic class""" + if not isinstance(cls,type): + class cls(cls,object): pass + return cls.__mro__[1:] + return cls.__mro__ + +def _find_adapter(registry, ob): + """Return an adapter factory for `ob` from `registry`""" + for t in _get_mro(getattr(ob, '__class__', type(ob))): + if t in registry: + return registry[t] + + +def ensure_directory(path): + """Ensure that the parent directory of `path` exists""" + dirname = os.path.dirname(path) + if not os.path.isdir(dirname): + os.makedirs(dirname) + +def split_sections(s): + """Split a string or iterable thereof into (section,content) pairs + + Each ``section`` is a stripped version of the section header ("[section]") + and each ``content`` is a list of stripped lines excluding blank lines and + comment-only lines. If there are any such lines before the first section + header, they're returned in a first ``section`` of ``None``. + """ + section = None + content = [] + for line in yield_lines(s): + if line.startswith("["): + if line.endswith("]"): + if section or content: + yield section, content + section = line[1:-1].strip() + content = [] + else: + raise ValueError("Invalid section heading", line) + else: + content.append(line) + + # wrap up last segment + yield section, content + +def _mkstemp(*args,**kw): + from tempfile import mkstemp + old_open = os.open + try: + os.open = os_open # temporarily bypass sandboxing + return mkstemp(*args,**kw) + finally: + os.open = old_open # and then put it back + + +# Set up global resource manager +_manager = ResourceManager() +def _initialize(g): + for name in dir(_manager): + if not name.startswith('_'): + g[name] = getattr(_manager, name) +_initialize(globals()) + +# Prepare the master working set and make the ``require()`` API available +working_set = WorkingSet() +try: + # Does the main program list any requirements? + from __main__ import __requires__ +except ImportError: + pass # No: just use the default working set based on sys.path +else: + # Yes: ensure the requirements are met, by prefixing sys.path if necessary + try: + working_set.require(__requires__) + except VersionConflict: # try it without defaults already on sys.path + working_set = WorkingSet([]) # by starting with an empty path + for dist in working_set.resolve( + parse_requirements(__requires__), Environment() + ): + working_set.add(dist) + for entry in sys.path: # add any missing entries from sys.path + if entry not in working_set.entries: + working_set.add_entry(entry) + sys.path[:] = working_set.entries # then copy back to sys.path + +require = working_set.require +iter_entry_points = working_set.iter_entry_points +add_activation_listener = working_set.subscribe +run_script = working_set.run_script +run_main = run_script # backward compatibility +# Activate all distributions already on sys.path, and ensure that +# all distributions added to the working set in the future (e.g. by +# calling ``require()``) will get activated as well. +add_activation_listener(lambda dist: dist.activate()) +working_set.entries=[]; map(working_set.add_entry,sys.path) # match order + addfile ./setuptools-0.6c14devdev.egg/pkg_resources.pyc binary ./setuptools-0.6c14devdev.egg/pkg_resources.pyc oldhex * newhex *d1f20d0a2e1ef84b630000000000000000500000004000000073a80800006400005a0000640100 *6402006b01005a01006401006402006b02005a02006401006402006b03005a0300640100640200 *6b04005a04006401006402006b05005a05006401006402006b06005a06006401006402006b0700 *5a070079080065080001576e2300046509006a0a006f1700010101016401006403006b0a006c0b *005a0800016e020001586401006404006b02006c0c005a0c006c0d005a0d006c0e005a0e006c0f *005a0f00016401006405006b02006c10005a1100016401006406006b12006c13005a13006c1400 *5a1400016407006408008401005a15006409008400005a1600640a00640b00640c00640d00640e *00640f00641000641100641200641300641400641500641600641700641800641900641a00641b *00641c00641d00641e00641f006420006421006422006423006424006425006426006427006428 *00642900642a00642b00642c00642d00642e00642f006430006431006432006433006434006435 *00643600643700643800643900643a00643b00643c00643d00643e00643f006440006441006442 *00644300644400644500644600644700644800644900644a00644b00644c006743005a17006425 *00651800660100644d00840000830000595a1900642600651900660100644e0084000083000059 *5a1a00642700651900660100644f00840000830000595a1b006428006519006601006450008400 *00830000595a1c006800005a1d00650100691e00645100205a1f006451005a20006452005a2100 *6453005a22006454005a23006401005a24006455008400005a25006456008400005a2600670000 *6457008401005a27006458008400005a28006459008400005a2900650500692a00645a00830100 *5a2b00650500692a00645b008301005a2c006529005a2d00645c008400005a2e00645d00840000 *5a2f00652f005a3000645e008400005a3100645f008400005a32006533006460008401005a3400 *6461008400005a3500643b00660000646200840000830000595a3600643c006536006601006463 *00840000830000595a3700642000653800660100646400840000830000595a3900641f00653800 *660100646500840000830000595a3a00653a005a3b00642900653c006601006466008400008300 *00595a3d00642100660000646700840000830000595a3e006468008400005a3f00646900840000 *5a4000646a008400005a4100646b008400005a4200646c008400005a4300644200660000646d00 *840000830000595a440065250065380065440083020001644300654400660100646e0084000083 *0000595a4500644400654500660100646f00840000830000595a46006525006547006533008301 *0065460083020001644000654400660100647000840000830000595a48006548008300005a4900 *644500654500660100647100840000830000595a4a00652500650300694b00654a008302000164 *3d00654800660100647200840000830000595a4c00643e00654600660100647300840000830000 *595a4d00643f00654a00660100647400840000830000595a4e0064750066000064760084000083 *0000595a4f00647700660000647800840000830000595a50006479008400005a51006800005a52 *00647a008400005a5300655400647b008401005a5500655400647c008401005a56006553006503 *00694b0065560083020001647d00840000615700655400647e008401005a580065530065380065 *580083020001655400647f008401005a5900655300654f00655900830200016800005a5a006800 *005a5b006480008400005a5c006481008400005a5d006482008400005a5e006533006483008401 *005a5f006484008400005a6000655c00654f0065600083020001655c00650300694b0065600083 *0200016485008400005a6100655c00653800656100830200016486008400005a62006800006487 *008401005a63006488008400005a64006489008400005a6500650500692a00648a008301006966 *005a6700650500692a00648b008301006966005a6800650500692a00648c008301006966005a69 *00650500692a00648d008301006966005a6a00650500692a00648e008301006966005a6b006505 *00692a00648f008301006966005a6c00650500692a006490008301006966005a6d00650500692a *006491008301006966005a6e00650500692a00649200650500696f006505006970004283020069 *66005a7100650500692a00649300650500696f008302005a720068050064940064950036649400 *649600366497006498003664940064990036649a00649b00366973005a7400649c008400005a75 *00649d008400005a7600642400653800660100649e00840000830000595a770064220065380066 *0100649f00840000830000595a780064a0008400005a790064a1008400005a7a0064a200840000 *5a7b0064230066000064a300840000830000595a7c0068060064a40064a5003664a60064a70036 *64a80064a9003664aa0064ab003664ac0064ad003664ae0064af00365a7d0064b0008400005a7e *0064b1008400005a7f0064b2008400005a800064b3008400005a810064b4008400005a8200653e *008300005a830064b5008400005a8400658400658500830000830100016539008300005a860079 *140064010064b6006b87006c88005a880001576e1300046589006a0a006f0700010101016eaa00 *0158791100658600698a0065880083010001576e940004651a006a0a006f880001010101653900 *6700008301005a8600783000658600698b00657a00658800830100653a00830000830200445d13 *005a8c00658600698d00658c008301000171f30757783200650100698e00445d27005a8f00658f *006586006990006a07006f110001658600699100658f00830100016e0100017114085765860069 *9000650100698e00286e02000158658600698a005a8a006586006992005a92006586006993005a *9400658600692f005a2f00652f005a300065940064b700840000830100016700006586005f9000 *659500658600699100650100698e00830200016402005328b800000073590200005061636b6167 *65207265736f75726365204150490a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a0a4120 *7265736f757263652069732061206c6f676963616c2066696c6520636f6e7461696e6564207769 *7468696e2061207061636b6167652c206f722061206c6f676963616c0a7375626469726563746f *72792074686572656f662e2020546865207061636b616765207265736f75726365204150492065 *787065637473207265736f75726365206e616d65730a746f206861766520746865697220706174 *682070617274732073657061726174656420776974682060602f60602c202a6e6f742a20776861 *746576657220746865206c6f63616c0a7061746820736570617261746f722069732e2020446f20 *6e6f7420757365206f732e70617468206f7065726174696f6e7320746f206d616e6970756c6174 *65207265736f757263650a6e616d6573206265696e672070617373656420696e746f2074686520 *4150492e0a0a546865207061636b616765207265736f7572636520415049206973206465736967 *6e656420746f20776f726b2077697468206e6f726d616c2066696c6573797374656d207061636b *616765732c0a2e6567672066696c65732c20616e6420756e7061636b6564202e6567672066696c *65732e202049742063616e20616c736f20776f726b20696e2061206c696d697465642077617920 *776974680a2e7a69702066696c657320616e64207769746820637573746f6d2050455020333032 *206c6f6164657273207468617420737570706f7274207468652060606765745f64617461282960 *600a6d6574686f642e0a69ffffffff4e2801000000740c000000496d6d757461626c6553657428 *0400000074050000007574696d65740600000072656e616d657406000000756e6c696e6b740500 *00006d6b646972280100000074040000006f70656e280200000074050000006973646972740500 *000073706c697469ff0100006302000000040000000300000043000000734d0000007400007c00 *008301005c02007d02007d03007c02006f3000017c03006f2900017401007c02008301000c6f1b *00017402007c0200830100017403007c02007c0100830200016e0100016400005328010000004e *28040000005207000000520600000074180000005f6279706173735f656e737572655f64697265 *63746f72795204000000280400000074040000006e616d6574040000006d6f6465740700000064 *69726e616d65740800000066696c656e616d6528000000002800000000733a000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b *675f7265736f75726365732e707952080000001c0000007308000000000212011c010a01630000 *000002000000080000004300000073800000007400008300007d00007401006902007c00008301 *007d01007c01006406006a09006f5700017404006905006401006a02006f470001792d00640200 *640300690600740700830000640400208301007c0100690800640500830100660200167d000057 *717c00047409006a0a006f070001010101717c0001586e0100017c0000532807000000735a0200 *0052657475726e207468697320706c6174666f726d2773206d6178696d756d20636f6d70617469 *626c652076657273696f6e2e0a0a20202020646973747574696c732e7574696c2e6765745f706c *6174666f726d2829206e6f726d616c6c79207265706f72747320746865206d696e696d756d2076 *657273696f6e0a202020206f66204d6163204f532058207468617420776f756c64206265207265 *71756972656420746f202a7573652a20657874656e73696f6e732070726f64756365642062790a *20202020646973747574696c732e202042757420776861742077652077616e74207768656e2063 *6865636b696e6720636f6d7061746962696c69747920697320746f206b6e6f77207468650a2020 *202076657273696f6e206f66204d6163204f532058207468617420776520617265202a72756e6e *696e672a2e2020546f20616c6c6f77207573616765206f66207061636b6167657320746861740a *202020206578706c696369746c7920726571756972652061206e657765722076657273696f6e20 *6f66204d6163204f5320582c207765206d75737420616c736f206b6e6f77207468650a20202020 *63757272656e742076657273696f6e206f6620746865204f532e0a0a2020202049662074686973 *20636f6e646974696f6e206f636375727320666f7220616e79206f7468657220706c6174666f72 *6d207769746820612076657273696f6e20696e206974730a20202020706c6174666f726d207374 *72696e67732c20746869732066756e6374696f6e2073686f756c6420626520657874656e646564 *206163636f7264696e676c792e0a20202020740600000064617277696e730c0000006d61636f73 *782d25732d257374010000002e690200000069030000004e280a00000074120000006765745f62 *75696c645f706c6174666f726d74120000006d61636f7356657273696f6e537472696e67740500 *00006d6174636874040000004e6f6e6574030000007379737408000000706c6174666f726d7404 *0000006a6f696e740c0000005f6d61636f73785f76657273740500000067726f7570740a000000 *56616c75654572726f7228020000007404000000706c617474010000006d280000000028000000 *00733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c706b675f7265736f75726365732e707974160000006765745f737570706f *727465645f706c6174666f726d2a0000007310000000000d09000f011d0103012d010e01090174 *0700000072657175697265740a00000072756e5f736372697074740c0000006765745f70726f76 *6964657274100000006765745f646973747269627574696f6e74100000006c6f61645f656e7472 *795f706f696e74740d0000006765745f656e7472795f6d6170740e0000006765745f656e747279 *5f696e666f7411000000697465725f656e7472795f706f696e7473740f0000007265736f757263 *655f737472696e67740f0000007265736f757263655f73747265616d74110000007265736f7572 *63655f66696c656e616d6574100000007265736f757263655f6c697374646972740f0000007265 *736f757263655f657869737473740e0000007265736f757263655f697364697274110000006465 *636c6172655f6e616d657370616365740b000000776f726b696e675f7365747417000000616464 *5f61637469766174696f6e5f6c697374656e6572741200000066696e645f646973747269627574 *696f6e7374130000007365745f65787472616374696f6e5f706174687411000000636c65616e75 *705f7265736f757263657374110000006765745f64656661756c745f6361636865740b00000045 *6e7669726f6e6d656e74740a000000576f726b696e67536574740f0000005265736f757263654d *616e61676572740c000000446973747269627574696f6e740b000000526571756972656d656e74 *740a000000456e747279506f696e74740f0000005265736f6c7574696f6e4572726f72740f0000 *0056657273696f6e436f6e666c6963747414000000446973747269627574696f6e4e6f74466f75 *6e64740c000000556e6b6e6f776e4578747261740f00000045787472616374696f6e4572726f72 *741200000070617273655f726571756972656d656e7473740d00000070617273655f7665727369 *6f6e7409000000736166655f6e616d65740c000000736166655f76657273696f6e740c00000067 *65745f706c6174666f726d7414000000636f6d70617469626c655f706c6174666f726d73740b00 *00007969656c645f6c696e6573740e00000073706c69745f73656374696f6e73740a0000007361 *66655f6578747261740b000000746f5f66696c656e616d657410000000656e737572655f646972 *6563746f7279740e0000006e6f726d616c697a655f7061746874080000004547475f4449535474 *0b00000042494e4152595f44495354740b000000534f555243455f44495354740d000000434845 *434b4f55545f44495354740c000000444556454c4f505f444953547411000000494d6574616461 *746150726f76696465727411000000495265736f7572636550726f7669646572740c0000004669 *6c654d65746164617461740c000000506174684d65746164617461740b0000004567674d657461 *64617461740d000000456d70747950726f7669646572740e000000656d7074795f70726f766964 *6572740c0000004e756c6c50726f7669646572740b00000045676750726f7669646572740f0000 *0044656661756c7450726f7669646572740b0000005a697050726f7669646572740f0000007265 *6769737465725f66696e646572741a00000072656769737465725f6e616d6573706163655f6861 *6e646c6572741400000072656769737465725f6c6f616465725f74797065741800000066697875 *705f6e616d6573706163655f7061636b61676573740c0000006765745f696d706f727465727408 *00000072756e5f6d61696e7416000000417661696c61626c65446973747269627574696f6e7363 *0000000000000000010000004200000073170000006500005a01006400005a0200640100840000 *5a030052532802000000732e0000004162737472616374206261736520666f7220646570656e64 *656e6379207265736f6c7574696f6e206572726f72736301000000010000000300000043000000 *73170000007c00006900006901007402007c0000690300830100175328010000004e2804000000 *74090000005f5f636c6173735f5f74080000005f5f6e616d655f5f740400000072657072740400 *0000617267732801000000740400000073656c6628000000002800000000733a000000433a5c74 *61686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c70 *6b675f7265736f75726365732e707974080000005f5f726570725f5f7e00000073020000000001 *28040000005260000000740a0000005f5f6d6f64756c655f5f74070000005f5f646f635f5f5264 *000000280000000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572636573 *2e707952370000007c000000730400000006010601630000000000000000010000004200000073 *0e0000006500005a01006400005a0200525328010000007341000000416e20616c72656164792d *696e7374616c6c65642076657273696f6e20636f6e666c69637473207769746820746865207265 *717565737465642076657273696f6e280300000052600000005265000000526600000028000000 *0028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952380000 *0081000000730200000006016300000000000000000100000042000000730e0000006500005a01 *006400005a02005253280100000073260000004120726571756573746564206469737472696275 *74696f6e20776173206e6f7420666f756e64280300000052600000005265000000526600000028 *0000000028000000002800000000733a000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952 *3900000084000000730200000006016300000000000000000100000042000000730e0000006500 *005a01006400005a020052532801000000733e000000446973747269627574696f6e20646f6573 *6e2774206861766520616e20226578747261206665617475726522206f66207468652067697665 *6e206e616d65280300000052600000005265000000526600000028000000002800000000280000 *0000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c706b675f7265736f75726365732e7079523a0000008700000073020000 *000601690300000069020000006901000000690000000063020000000200000003000000430000 *00730e0000007c01007400007c00003c640100532802000000730f010000526567697374657220 *6070726f76696465725f666163746f72796020746f206d616b652070726f76696465727320666f *7220606c6f616465725f74797065600a0a20202020606c6f616465725f74797065602069732074 *68652074797065206f7220636c617373206f66206120504550203330322060606d6f64756c652e *5f5f6c6f616465725f5f60602c0a20202020616e64206070726f76696465725f666163746f7279 *6020697320612066756e6374696f6e20746861742c207061737365642061202a6d6f64756c652a *206f626a6563742c0a2020202072657475726e7320616e206060495265736f7572636550726f76 *69646572606020666f722074686174206d6f64756c652e0a202020204e28010000007413000000 *5f70726f76696465725f666163746f726965732802000000740b0000006c6f616465725f747970 *65741000000070726f76696465725f666163746f727928000000002800000000733a000000433a *5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e656767 *5c706b675f7265736f75726365732e7079525a0000009200000073020000000007630100000003 *000000070000004300000073980000007400007c00007401008302006f2500017402006903007c *0000830100701400017404007405007c0000830100830100640100195301791100740600690700 *7c0000197d0100576e2a00047408006a0a006f1e00010101017409007c00008301000174060069 *07007c0000197d01006e02000158740a007c01006402006403008303007d0200740c00740d007c *02008302007c0100830100532804000000733f00000052657475726e20616e20495265736f7572 *636550726f766964657220666f7220746865206e616d6564206d6f64756c65206f722072657175 *6972656d656e746900000000740a0000005f5f6c6f616465725f5f4e280e000000740a00000069 *73696e7374616e63655235000000522b000000740400000066696e64521c000000740300000073 *7472521300000074070000006d6f64756c657374080000004b65794572726f72740a0000005f5f *696d706f72745f5f7407000000676574617474725212000000740d0000005f66696e645f616461 *7074657252670000002803000000740b0000006d6f64756c654f7252657174060000006d6f6475 *6c6574060000006c6f6164657228000000002800000000733a000000433a5c7461686f652d6c61 *66735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f *75726365732e7079521e0000009b0000007312000000000210012501030111010e010a01120112 *016301000000050000000400000043000000738e0000007c0000707f0001740000690100640100 *8301006902008300006903008300007d01007861007c0100445d4c007d02007c02006904006400 *006402008302005c02007d03007d04007c03006403006a02006f2100017c00006906007c040069 *0700830000690400640400830100830100015071290001712900577408006405008202006e0100 *017c0000640600195328070000004e73100000002f7573722f62696e2f73775f76657273690100 *0000730f00000050726f6475637456657273696f6e3a520e0000007306000000576861743f2169 *00000000280900000074020000006f737405000000706f70656e740400000072656164740a0000 *0073706c69746c696e6573520700000052120000007406000000617070656e6474050000007374 *7269705218000000280500000074060000005f63616368657404000000696e666f74040000006c *696e6574030000006b6579740500000076616c756528000000002800000000733a000000433a5c *7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c *706b675f7265736f75726365732e70795216000000a70000007314000000000107011b01070006 *0118010d011c0109020d016301000000010000000300000043000000731e000000680200640100 *64020036640100640300366900007c00007c00008302005328040000004e740300000070706374 *07000000506f7765725043740f000000506f7765725f4d6163696e746f73682801000000740300 *0000676574280100000074070000006d616368696e6528000000002800000000733a000000433a *5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e656767 *5c706b675f7265736f75726365732e7079740c0000005f6d61636f73785f61726368b300000073 *020000000001630000000004000000090000004300000073ac0000006401006402006b00006c01 *007d0000017c00008300007d01007402006903006403006a02006f7f00017c0100690400640400 *8301000c6f6e00017954007405008300007d020074060069070083000064050019690800640600 *6407008302007d03006408007409007c0200640900198301007409007c0200640a001983010074 *0a007c030083010066030016535771a80004740b006a0a006f07000101010171a80001586e0100 *017c010053280b00000073c400000052657475726e207468697320706c6174666f726d27732073 *7472696e6720666f7220706c6174666f726d2d737065636966696320646973747269627574696f *6e730a0a202020205858582043757272656e746c792074686973206973207468652073616d6520 *6173206060646973747574696c732e7574696c2e6765745f706c6174666f726d282960602c2062 *75742069740a202020206e6565647320736f6d65206861636b7320666f72204c696e757820616e *64204d6163204f5320582e0a2020202069ffffffff28010000005240000000520d000000730700 *00006d61636f73782d690400000074010000002074010000005f730f0000006d61636f73782d25 *642e25642d257369000000006901000000280c000000740e000000646973747574696c732e7574 *696c524000000052130000005214000000740a0000007374617274737769746852160000005276 *0000007405000000756e616d6574070000007265706c6163657403000000696e74528600000052 *18000000280400000052400000005219000000740700000076657273696f6e5285000000280000 *00002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c706b675f7265736f75726365732e7079520f000000b60000 *0073160000000006100109012101030109011c011d0112010e03090173180000006d61636f7378 *2d285c642b295c2e285c642b292d282e2a29731f00000064617277696e2d285c642b295c2e285c *642b295c2e285c642b292d282e2a29630200000007000000040000004300000073630100007c00 *006409006a0800701a00017c01006409006a0800700d00017c00007c01006a02006f0500017401 *0053017402006903007c01008301007d02007c02006f1d01017402006903007c00008301007d03 *007c0300708f00017404006903007c00008301007d04007c04006f7400017405007c0400690600 *6401008301008301007d05006402007c02006906006401008301007c0200690600640300830100 *660200167d06007c05006404006a02006f0d00017c06006405006a0500701a00017c0500640600 *6a02006f1200017c06006407006a05006f05000174010053016e01000174070053017c03006906 *006401008301007c02006906006401008301006a0300701f00017c03006906006408008301007c *02006906006408008301006a03006f05000174070053017405007c030069060064030083010083 *01007405007c02006906006403008301008301006a04006f050001740700530174010053017407 *0053280a00000073db00000043616e20636f646520666f7220746865206070726f766964656460 *20706c6174666f726d2072756e206f6e20746865206072657175697265646020706c6174666f72 *6d3f0a0a2020202052657475726e7320747275652069662065697468657220706c6174666f726d *2069732060604e6f6e6560602c206f722074686520706c6174666f726d73206172652065717561 *6c2e0a0a20202020585858204e6565647320636f6d7061746962696c69747920636865636b7320 *666f72204c696e757820616e64206f7468657220756e697879204f5365732e0a20202020690100 *0000730500000025732e257369020000006907000000730400000031302e336908000000730400 *000031302e3469030000004e280800000052120000007404000000547275655210000000521100 *0000741300000064617277696e56657273696f6e537472696e67528d0000005217000000740500 *000046616c73652807000000740800000070726f76696465647408000000726571756972656474 *060000007265714d6163740700000070726f764d6163740a00000070726f7644617277696e7408 *0000006476657273696f6e740c0000006d61636f7376657273696f6e2800000000280000000073 *3a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464657664 *65762e6567675c706b675f7265736f75726365732e70795241000000ce000000732a0000000007 *270105030f0107010f0307040f010701150122011a011a06090105031f011f0105052b01050205 *036302000000040000000300000043000000734e0000007400006901006401008301006902007d *02007c0200640200197d03007c0200690300830000017c03007c02006402003c7404007c000083 *0100640300196905007c01007c02008302000164040053280500000073400000004c6f63617465 *20646973747269627574696f6e2060646973745f737065636020616e642072756e206974732060 *7363726970745f6e616d6560207363726970746901000000526000000069000000004e28060000 *00521300000074090000005f6765746672616d657409000000665f676c6f62616c737405000000 *636c656172521c000000521d00000028040000007409000000646973745f73706563740b000000 *7363726970745f6e616d6574020000006e73520900000028000000002800000000733a00000043 *3a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567 *675c706b675f7265736f75726365732e7079521d00000001010000730a000000000212010a010a *010a016301000000010000000300000043000000736a0000007400007c00007401008302006f13 *00017402006903007c00008301007d00006e0100017400007c00007402008302006f1000017404 *007c00008301007d00006e0100017400007c0000740500830200701300017406006401007c0000 *8302008201006e0100017c0000532802000000734000000052657475726e20612063757272656e *7420646973747269627574696f6e206f626a65637420666f72206120526571756972656d656e74 *206f7220737472696e67732d000000457870656374656420737472696e672c2052657175697265 *6d656e742c206f7220446973747269627574696f6e2807000000526b000000740a000000626173 *65737472696e67523500000074050000007061727365521e000000523400000074090000005479 *70654572726f72280100000074040000006469737428000000002800000000733a000000433a5c *7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c *706b675f7265736f75726365732e7079521f0000000b010000730e000000000210001301100010 *0110011301630300000003000000030000004300000073160000007400007c0000830100690100 *7c01007c0200830200532801000000734400000052657475726e20606e616d656020656e747279 *20706f696e74206f66206067726f75706020666f7220606469737460206f722072616973652049 *6d706f72744572726f722802000000521f0000005220000000280300000052a200000052170000 *00520900000028000000002800000000733a000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e70 *795220000000130100007302000000000263020000000200000002000000430000007313000000 *7400007c00008301006901007c0100830100532801000000733d00000052657475726e20746865 *20656e74727920706f696e74206d617020666f72206067726f7570602c206f7220746865206675 *6c6c20656e747279206d61702802000000521f0000005221000000280200000052a20000005217 *00000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f *6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e70795221 *000000170100007302000000000263030000000300000003000000430000007316000000740000 *7c00008301006901007c01007c0200830200532801000000733c00000052657475726e20746865 *20456e747279506f696e74206f626a65637420666f72206067726f7570602b606e616d65602c20 *6f722060604e6f6e6560602802000000521f0000005222000000280300000052a2000000521700 *0000520900000028000000002800000000733a000000433a5c7461686f652d6c6166735c736574 *7570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e *707952220000001b010000730200000000026300000000000000000100000042000000733e0000 *006500005a01006400008400005a02006401008400005a03006402008400005a04006403008400 *005a05006404008400005a06006405008400005a07005253280600000063010000000100000001 *000000430000007304000000640100532802000000733b000000446f657320746865207061636b *616765277320646973747269627574696f6e20636f6e7461696e20746865206e616d6564206d65 *7461646174613f4e28000000002801000000520900000028000000002800000000733a00000043 *3a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567 *675c706b675f7265736f75726365732e7079740c0000006861735f6d6574616461746122010000 *730000000063010000000100000001000000430000007304000000640100532802000000732700 *0000546865206e616d6564206d65746164617461207265736f7572636520617320612073747269 *6e674e28000000002801000000520900000028000000002800000000733a000000433a5c746168 *6f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b67 *5f7265736f75726365732e7079740c0000006765745f6d65746164617461250100007300000000 *6301000000010000000100000043000000730400000064010053280200000073d2000000596965 *6c64206e616d6564206d65746164617461207265736f75726365206173206c697374206f66206e *6f6e2d626c616e6b206e6f6e2d636f6d6d656e74206c696e65730a0a202020202020204c656164 *696e6720616e6420747261696c696e672077686974657370616365206973207374726970706564 *2066726f6d2065616368206c696e652c20616e64206c696e65730a202020202020207769746820 *606023606020617320746865206669727374206e6f6e2d626c616e6b2063686172616374657220 *617265206f6d69747465642e4e2800000000280100000052090000002800000000280000000073 *3a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464657664 *65762e6567675c706b675f7265736f75726365732e707974120000006765745f6d657461646174 *615f6c696e65732801000073000000006301000000010000000100000043000000730400000064 *0100532802000000733e000000497320746865206e616d6564206d657461646174612061206469 *726563746f72793f2020286c696b652060606f732e706174682e697364697228296060294e2800 *0000002801000000520900000028000000002800000000733a000000433a5c7461686f652d6c61 *66735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f *75726365732e7079740e0000006d657461646174615f69736469722e0100007300000000630100 *00000100000001000000430000007304000000640100532802000000733f0000004c697374206f *66206d65746164617461206e616d657320696e20746865206469726563746f727920286c696b65 *2060606f732e6c69737464697228296060294e2800000000280100000052090000002800000000 *2800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c706b675f7265736f75726365732e707974100000006d65746164 *6174615f6c69737464697231010000730000000063020000000200000001000000430000007304 *000000640100532802000000733d0000004578656375746520746865206e616d65642073637269 *707420696e2074686520737570706c696564206e616d6573706163652064696374696f6e617279 *4e28000000002802000000529d00000074090000006e616d657370616365280000000028000000 *00733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c706b675f7265736f75726365732e7079521d000000340100007300000000 *28080000005260000000526500000052a300000052a400000052a500000052a600000052a70000 *00521d000000280000000028000000002800000000733a000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572 *6365732e7079524d00000020010000730c00000006020903090309060903090363000000000000 *0000010000004200000073440000006500005a01006400005a02006401008400005a0300640200 *8400005a04006403008400005a05006404008400005a06006405008400005a0700640600840000 *5a0800525328070000007333000000416e206f626a65637420746861742070726f766964657320 *61636365737320746f207061636b616765207265736f7572636573630200000002000000010000 *00430000007304000000640100532802000000736400000052657475726e206120747275652066 *696c6573797374656d207061746820666f7220607265736f757263655f6e616d65600a0a202020 *2020202020606d616e6167657260206d75737420626520616e206060495265736f757263654d61 *6e6167657260604e2800000000280200000074070000006d616e61676572740d0000007265736f *757263655f6e616d6528000000002800000000733a000000433a5c7461686f652d6c6166735c73 *65747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365 *732e707974150000006765745f7265736f757263655f66696c656e616d654c0100007300000000 *630200000002000000010000004300000073040000006401005328020000007369000000526574 *75726e2061207265616461626c652066696c652d6c696b65206f626a65637420666f7220607265 *736f757263655f6e616d65600a0a2020202020202020606d616e6167657260206d757374206265 *20616e206060495265736f757263654d616e6167657260604e2800000000280200000052a90000 *0052aa00000028000000002800000000733a000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e70 *7974130000006765745f7265736f757263655f73747265616d5101000073000000006302000000 *0200000001000000430000007304000000640100532802000000736d00000052657475726e2061 *20737472696e6720636f6e7461696e696e672074686520636f6e74656e7473206f662060726573 *6f757263655f6e616d65600a0a2020202020202020606d616e6167657260206d75737420626520 *616e206060495265736f757263654d616e6167657260604e2800000000280200000052a9000000 *52aa00000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570 *746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e7079 *74130000006765745f7265736f757263655f737472696e67560100007300000000630100000001 *00000001000000430000007304000000640100532802000000732c000000446f65732074686520 *7061636b61676520636f6e7461696e20746865206e616d6564207265736f757263653f4e280000 *0000280100000052aa00000028000000002800000000733a000000433a5c7461686f652d6c6166 *735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75 *726365732e7079740c0000006861735f7265736f757263655b0100007300000000630100000001 *00000001000000430000007304000000640100532802000000733e000000497320746865206e61 *6d6564207265736f757263652061206469726563746f72793f2020286c696b652060606f732e70 *6174682e697364697228296060294e2800000000280100000052aa000000280000000028000000 *00733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c706b675f7265736f75726365732e707952290000005e0100007300000000 *63010000000100000001000000430000007304000000640100532802000000733f0000004c6973 *74206f66207265736f75726365206e616d657320696e20746865206469726563746f727920286c *696b652060606f732e6c69737464697228296060294e2800000000280100000052aa0000002800 *0000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c706b675f7265736f75726365732e707952270000006101 *00007300000000280900000052600000005265000000526600000052ab00000052ac00000052ad *00000052ae00000052290000005227000000280000000028000000002800000000733a00000043 *3a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567 *675c706b675f7265736f75726365732e7079524e00000049010000730e00000006010602090509 *050905090309036300000000000000000400000042000000739e0000006500005a01006400005a *0200640e006401008401005a04006402008400005a05006403008400005a06006404008400005a *0700640e006405008401005a08006406008400005a09006407008400005a0a00640e00650b0064 *08008402005a0c00640e00640e006409008402005a0d00640e00640e00650b00640a008403005a *0e00640b008400005a0f00640c008400005a1000640d008400005a11005253280f000000734400 *00004120636f6c6c656374696f6e206f662061637469766520646973747269627574696f6e7320 *6f6e207379732e7061746820286f7220612073696d696c6172206c697374296302000000030000 *00030000004300000073600000006700007c00005f00006800007c00005f01006800007c00005f *02006700007c00005f03007c01006401006a08006f0d00017405006906007d01006e010001781b *007c0100445d13007d02007c00006907007c02008301000171450057640100532802000000733f *00000043726561746520776f726b696e67207365742066726f6d206c697374206f662070617468 *20656e7472696573202864656661756c743d7379732e70617468294e2808000000740700000065 *6e7472696573740a000000656e7472795f6b657973740600000062795f6b657974090000006361 *6c6c6261636b735212000000521300000074040000007061746874090000006164645f656e7472 *792803000000526300000052af0000007405000000656e74727928000000002800000000733a00 *0000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576646576 *2e6567675c706b675f7265736f75726365732e707974080000005f5f696e69745f5f7501000073 *12000000000209010901090109020d010d02070006016302000000030000000500000043000000 *73540000007c00006900006901007c0100670000830200017c00006902006903007c0100830100 *01782a007404007c0100740500830200445d19007d02007c00006906007c02007c010074070083 *0300017133005764010053280200000073dd01000041646420612070617468206974656d20746f *2060602e656e747269657360602c2066696e64696e6720616e7920646973747269627574696f6e *73206f6e2069740a0a2020202020202020606066696e645f646973747269627574696f6e732865 *6e7472792c46616c7365296060206973207573656420746f2066696e6420646973747269627574 *696f6e730a2020202020202020636f72726573706f6e64696e6720746f20746865207061746820 *656e7472792c20616e642074686579206172652061646465642e202060656e747279602069730a *2020202020202020616c7761797320617070656e64656420746f2060602e656e74726965736060 *2c206576656e20696620697420697320616c72656164792070726573656e742e0a202020202020 *2020285468697320697320626563617573652060607379732e7061746860602063616e20636f6e *7461696e207468652073616d652076616c7565206d6f7265207468616e0a20202020202020206f *6e63652c20616e64207468652060602e656e74726965736060206f66207468652060607379732e *70617468606020576f726b696e675365742073686f756c6420616c776179730a20202020202020 *20657175616c2060607379732e7061746860602e290a20202020202020204e280800000052b000 *0000740a00000073657464656661756c7452af000000527a000000522d000000528f0000007403 *00000061646452910000002803000000526300000052b500000052a20000002800000000280000 *0000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c706b675f7265736f75726365732e707952b400000083010000730a0000 *00000a1301100110000601630200000002000000020000004300000073190000007c0000690000 *6901007c01006902008301007c01006a0200532801000000733900000054727565206966206064 *69737460206973207468652061637469766520646973747269627574696f6e20666f7220697473 *2070726f6a656374280300000052b10000005284000000527f0000002802000000526300000052 *a200000028000000002800000000733a000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707974 *0c0000005f5f636f6e7461696e735f5f9301000073020000000002630200000003000000030000 *0043000000734a0000007c00006900006901007c01006902008301007d02007c02006401006a09 *006f2000017c02007c01006a07006f1300017404007c02007c01008302008201006e0500017c02 *005364010053280200000073d001000046696e64206120646973747269627574696f6e206d6174 *6368696e6720726571756972656d656e742060726571600a0a2020202020202020496620746865 *726520697320616e2061637469766520646973747269627574696f6e20666f7220746865207265 *717565737465642070726f6a6563742c20746869730a202020202020202072657475726e732069 *74206173206c6f6e67206173206974206d65657473207468652076657273696f6e207265717569 *72656d656e74207370656369666965642062790a202020202020202060726571602e2020427574 *2c20696620746865726520697320616e2061637469766520646973747269627574696f6e20666f *72207468652070726f6a65637420616e642069740a2020202020202020646f6573202a6e6f742a *206d6565742074686520607265716020726571756972656d656e742c20606056657273696f6e43 *6f6e666c6963746060206973207261697365642e0a202020202020202049662074686572652069 *73206e6f2061637469766520646973747269627574696f6e20666f722074686520726571756573 *7465642070726f6a6563742c2060604e6f6e6560600a202020202020202069732072657475726e *65642e0a20202020202020204e280500000052b10000005284000000527f000000521200000052 *3800000028030000005263000000740300000072657152a200000028000000002800000000733a *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c706b675f7265736f75726365732e7079526c0000009b0100007308000000000a15 *011a0113026303000000060000000300000063000000736b0000007864007c0000445d5c007d03 *007c03006900007c01008301007d04007c02006401006a08006f2000017837007c040069020083 *0000445d0b007d05007c0500560171360057710700017c02007c04006a06006f0d00017c04007c *0200195601710700017107005764010053280200000073130100005969656c6420656e74727920 *706f696e74206f626a656374732066726f6d206067726f757060206d61746368696e6720606e61 *6d65600a0a2020202020202020496620606e616d6560206973204e6f6e652c207969656c647320 *616c6c20656e74727920706f696e747320696e206067726f7570602066726f6d20616c6c0a2020 *202020202020646973747269627574696f6e7320696e2074686520776f726b696e67207365742c *206f7468657277697365206f6e6c79206f6e6573206d61746368696e670a202020202020202062 *6f7468206067726f75706020616e6420606e616d656020617265207969656c6465642028696e20 *646973747269627574696f6e206f72646572292e0a20202020202020204e280300000052210000 *005212000000740600000076616c756573280600000052630000005217000000520900000052a2 *00000052af0000007402000000657028000000002800000000733a000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265 *736f75726365732e70795223000000ab01000073120000000007070006010f010d010d0006010d *010d01630300000005000000030000004300000073510000007400006901006401008301006902 *007d03007c0300640200197d04007c0300690300830000017c04007c03006402003c7c00006904 *007c0100830100640300196905007c02007c030083020001640400532805000000733f0000004c *6f6361746520646973747269627574696f6e20666f72206072657175697265736020616e642072 *756e20607363726970745f6e616d6560207363726970746901000000526000000069000000004e *280600000052130000005299000000529a000000529b000000521c000000521d00000028050000 *00526300000074080000007265717569726573529d000000529e00000052090000002800000000 *2800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c706b675f7265736f75726365732e7079521d000000ba01000073 *0a000000000212010a010a010a016301000000040000000500000063000000735d000000680000 *7d01007850007c0000690000445d45007d0200783c007c00006901007c020019445d2d007d0300 *7c03007c01006a07006f1a00016401007c01007c03003c7c00006902007c030019560171240001 *712400577110005764020053280300000073b80000005969656c6420646973747269627574696f *6e7320666f72206e6f6e2d6475706c69636174652070726f6a6563747320696e2074686520776f *726b696e67207365740a0a2020202020202020546865207969656c64206f726465722069732074 *6865206f7264657220696e20776869636820746865206974656d7327207061746820656e747269 *657320776572650a2020202020202020616464656420746f2074686520776f726b696e67207365 *742e0a202020202020202069010000004e280300000052af00000052b000000052b10000002804 *000000526300000074040000007365656e74040000006974656d527f0000002800000000280000 *0000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c706b675f7265736f75726365732e707974080000005f5f697465725f5f *c40100007310000000000606010a0006010e0006010d010a016304000000060000000300000043 *00000073e60000007c03006f1700017c01006900007c00006901007c0200830200016e0100017c *02006401006a08006f0d00017c01006903007d02006e0100017c00006904006905007c02006700 *008302007d04007c00006904006905007c01006903006700008302007d05007c01006906007c00 *006907006a06006f05000164010053017c01007c00006907007c01006906003c7c01006906007c *04006a07006f1400017c04006908007c0100690600830100016e0100017c01006906007c05006a *07006f1400017c05006908007c0100690600830100016e0100017c00006909007c010083010001 *64010053280200000073f90100004164642060646973746020746f20776f726b696e6720736574 *2c206173736f63696174656420776974682060656e747279600a0a202020202020202049662060 *656e7472796020697320756e7370656369666965642c2069742064656661756c747320746f2074 *68652060602e6c6f636174696f6e6060206f66206064697374602e0a20202020202020204f6e20 *657869742066726f6d207468697320726f7574696e652c2060656e747279602069732061646465 *6420746f2074686520656e64206f662074686520776f726b696e670a2020202020202020736574 *27732060602e656e7472696573606020286966206974207761736e277420616c72656164792070 *726573656e74292e0a0a2020202020202020606469737460206973206f6e6c7920616464656420 *746f2074686520776f726b696e6720736574206966206974277320666f7220612070726f6a6563 *7420746861740a2020202020202020646f65736e277420616c7265616479206861766520612064 *6973747269627574696f6e20696e20746865207365742e2020496620697427732061646465642c *20616e790a202020202020202063616c6c6261636b732072656769737465726564207769746820 *74686520606073756273637269626528296060206d6574686f642077696c6c2062652063616c6c *65642e0a20202020202020204e280a0000007409000000696e736572745f6f6e52af0000005212 *00000074080000006c6f636174696f6e52b000000052b7000000527f00000052b1000000527a00 *0000740a0000005f61646465645f6e65772806000000526300000052a200000052b50000007406 *000000696e7365727474040000006b65797374050000006b657973322800000000280000000073 *3a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464657664 *65762e6567675c706b675f7265736f75726365732e707952b8000000d1010000731c000000000b *070117020d010d0115011801130105021001100114011001140163040000000900000005000000 *4300000073640100007400007c0100830100640100640100640200850300197d01006800007d04 *006800007d05006700007d06007832017c01006f2a01017c01006901006403008301007d07007c *07007c04006a06006f070001712e006e0100017c05006902007c07006903008301007d08007c08 *006401006a08006f9400017c00006905006902007c07006903008301007d08007c08006401006a *08006f6100017c02006401006a08006f1300017406007c00006907008301007d02006e0100017c *02006908007c07007c00007c0300830300047d08007c05007c07006903003c7c08006401006a08 *006f1000017409007c070083010082010071fa00016e0100017c0600690a007c0800830100016e *0100017c08007c07006a07006f130001740b007c08007c07008302008201006e0100017c010069 *0c007c0800690d007c0700690e008301006401006401006402008503001983010001740f007c04 *007c07003c712e0001577c0600532804000000731b0200004c69737420616c6c20646973747269 *627574696f6e73206e656564656420746f20287265637572736976656c7929206d656574206072 *6571756972656d656e7473600a0a202020202020202060726571756972656d656e747360206d75 *737420626520612073657175656e6365206f66206060526571756972656d656e746060206f626a *656374732e202060656e76602c0a2020202020202020696620737570706c6965642c2073686f75 *6c6420626520616e206060456e7669726f6e6d656e74606020696e7374616e63652e202049660a *20202020202020206e6f7420737570706c6965642c2069742064656661756c747320746f20616c *6c20646973747269627574696f6e7320617661696c61626c652077697468696e20616e790a2020 *202020202020656e747279206f7220646973747269627574696f6e20696e2074686520776f726b *696e67207365742e202060696e7374616c6c6572602c20696620737570706c6965642c0a202020 *202020202077696c6c20626520696e766f6b65642077697468206561636820726571756972656d *656e7420746861742063616e6e6f74206265206d657420627920616e0a2020202020202020616c *72656164792d696e7374616c6c656420646973747269627574696f6e3b2069742073686f756c64 *2072657475726e2061206060446973747269627574696f6e6060206f720a202020202020202060 *604e6f6e6560602e0a20202020202020204e69ffffffff6900000000281000000074040000006c *6973747403000000706f705284000000527f000000521200000052b1000000523100000052af00 *0000740a000000626573745f6d617463685239000000527a000000523800000074060000006578 *74656e6452bd0000007406000000657874726173528f00000028090000005263000000740c0000 *00726571756972656d656e74737403000000656e767409000000696e7374616c6c657274090000 *0070726f636573736564740400000062657374740b000000746f5f616374697661746552ba0000 *0052a200000028000000002800000000733a000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e70 *7974070000007265736f6c7665ed0100007330000000000c1901060106010602030007010f010d *02070112010d0215010d010d01130120010d01140111010d02130126010f0263050000000f0000 *000900000043000000733b0100007400007c01008301007d05007c050069010083000001680000 *7d06006800007d07007c02006401006a08006f1d00017403007c00006904008301007d08007c08 *007c0100377d08006e0b00017c02007c0100177d08007c00006905006700008301007d09007406 *007c09006907007c00008302000178a3007c0500445d9b007d0a007892007c01007c0a0019445d *86007d0b007c0b006908008300006701007d0c007919007c09006909007c0c007c08007c030083 *03007d0d00576e2e0004740a006a0a006f220001017d0e00017c0e007c06007c0b003c7c04006f *070001718d007113010150718d0001587406007c09006907007c0d00830200017c0700690b0074 *0c00690d007c0d008301008301000150718d0057717c00577400007c07008301007d07007c0700 *690100830000017c07007c0600660200532802000000736106000046696e6420616c6c20616374 *6976617461626c6520646973747269627574696f6e7320696e2060706c7567696e5f656e76600a *0a20202020202020204578616d706c652075736167653a3a0a0a20202020202020202020202064 *6973747269627574696f6e732c206572726f7273203d20776f726b696e675f7365742e66696e64 *5f706c7567696e73280a20202020202020202020202020202020456e7669726f6e6d656e742870 *6c7567696e5f6469726c697374290a202020202020202020202020290a20202020202020202020 *20206d617028776f726b696e675f7365742e6164642c20646973747269627574696f6e73292020 *232061646420706c7567696e732b6c69627320746f207379732e706174680a2020202020202020 *202020207072696e742022436f756c646e2774206c6f6164222c206572726f7273202020202020 *20202320646973706c6179206572726f72730a0a20202020202020205468652060706c7567696e *5f656e76602073686f756c6420626520616e206060456e7669726f6e6d656e74606020696e7374 *616e6365207468617420636f6e7461696e730a20202020202020206f6e6c792064697374726962 *7574696f6e7320746861742061726520696e207468652070726f6a65637427732022706c756769 *6e206469726563746f727922206f720a20202020202020206469726563746f726965732e205468 *65206066756c6c5f656e76602c20696620737570706c6965642c2073686f756c6420626520616e *206060456e7669726f6e6d656e7460600a2020202020202020636f6e7461696e7320616c6c2063 *757272656e746c792d617661696c61626c6520646973747269627574696f6e732e202049662060 *66756c6c5f656e7660206973206e6f740a2020202020202020737570706c6965642c206f6e6520 *69732063726561746564206175746f6d61746963616c6c792066726f6d20746865206060576f72 *6b696e67536574606020746869730a20202020202020206d6574686f642069732063616c6c6564 *206f6e2c2077686963682077696c6c207479706963616c6c79206d65616e207468617420657665 *7279206469726563746f7279206f6e0a202020202020202060607379732e706174686060207769 *6c6c206265207363616e6e656420666f7220646973747269627574696f6e732e0a0a2020202020 *20202060696e7374616c6c6572602069732061207374616e6461726420696e7374616c6c657220 *63616c6c6261636b2061732075736564206279207468650a202020202020202060607265736f6c *766528296060206d6574686f642e20546865206066616c6c6261636b6020666c616720696e6469 *636174657320776865746865722077652073686f756c640a2020202020202020617474656d7074 *20746f207265736f6c7665206f6c6465722076657273696f6e73206f66206120706c7567696e20 *696620746865206e65776573742076657273696f6e0a202020202020202063616e6e6f74206265 *207265736f6c7665642e0a0a202020202020202054686973206d6574686f642072657475726e73 *206120322d7475706c653a202860646973747269627574696f6e73602c20606572726f725f696e *666f60292c2077686572650a202020202020202060646973747269627574696f6e736020697320 *61206c697374206f662074686520646973747269627574696f6e7320666f756e6420696e206070 *6c7567696e5f656e76600a2020202020202020746861742077657265206c6f616461626c652c20 *616c6f6e67207769746820616e79206f7468657220646973747269627574696f6e732074686174 *20617265206e65656465640a2020202020202020746f207265736f6c7665207468656972206465 *70656e64656e636965732e2020606572726f725f696e666f6020697320612064696374696f6e61 *7279206d617070696e670a2020202020202020756e6c6f616461626c6520706c7567696e206469 *73747269627574696f6e7320746f20616e20657863657074696f6e20696e7374616e6365206465 *7363726962696e67207468650a20202020202020206572726f722074686174206f636375727265 *642e20557375616c6c7920746869732077696c6c2062652061206060446973747269627574696f *6e4e6f74466f756e646060206f720a2020202020202020606056657273696f6e436f6e666c6963 *74606020696e7374616e63652e0a20202020202020204e280e00000052c7000000740400000073 *6f72745212000000523100000052af000000525f00000074030000006d617052b8000000740e00 *000061735f726571756972656d656e7452d2000000523700000074060000007570646174657404 *00000064696374740800000066726f6d6b657973280f0000005263000000740a000000706c7567 *696e5f656e76740800000066756c6c5f656e7652ce000000740800000066616c6c6261636b740f *000000706c7567696e5f70726f6a65637473740a0000006572726f725f696e666f740d00000064 *6973747269627574696f6e7352cd000000740a000000736861646f775f736574740c0000007072 *6f6a6563745f6e616d6552a200000052ba00000074090000007265736f6c766565737401000000 *7628000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c706b675f7265736f75726365732e7079740c0000 *0066696e645f706c7567696e7316020000733800000000230c010a02060106020d010f010e020a *020f011002070006020b0006020f020301190210010a010701070206031001160309020c010a02 *630100000004000000030000004700000073370000007c00006900007401007c01008301008301 *007d0200781b007c0200445d13007d03007c00006902007c030083010001711c00577c02005328 *0100000073be010000456e73757265207468617420646973747269627574696f6e73206d617463 *68696e672060726571756972656d656e74736020617265206163746976617465640a0a20202020 *2020202060726571756972656d656e747360206d757374206265206120737472696e67206f7220 *612028706f737369626c792d6e6573746564292073657175656e63650a20202020202020207468 *6572656f662c2073706563696679696e672074686520646973747269627574696f6e7320616e64 *2076657273696f6e732072657175697265642e20205468650a202020202020202072657475726e *2076616c756520697320612073657175656e6365206f662074686520646973747269627574696f *6e732074686174206e656564656420746f2062650a202020202020202061637469766174656420 *746f2066756c66696c6c2074686520726571756972656d656e74733b20616c6c2072656c657661 *6e7420646973747269627574696f6e73206172650a2020202020202020696e636c756465642c20 *6576656e2069662074686579207765726520616c72656164792061637469766174656420696e20 *7468697320776f726b696e67207365742e0a2020202020202020280300000052d2000000523c00 *000052b80000002804000000526300000052cc00000074060000006e656564656452a200000028 *000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d *302e366331346465766465762e6567675c706b675f7265736f75726365732e7079521c00000068 *020000730a000000000a1502070006011102630200000003000000030000004300000073440000 *007c01007c00006900006a06006f05000164010053017c00006900006901007c01008301000178 *18007c0000445d10007d02007c01007c020083010001712c005764010053280200000073410000 *00496e766f6b65206063616c6c6261636b6020666f7220616c6c20646973747269627574696f6e *732028696e636c7564696e67206578697374696e67206f6e6573294e280200000052b200000052 *7a00000028030000005263000000740800000063616c6c6261636b52a200000028000000002800 *000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c706b675f7265736f75726365732e7079740900000073756273637269 *62657a020000730c00000000021001050110010700060163020000000300000003000000430000 *007322000000781b007c0000690000445d10007d02007c02007c010083010001710a0057640000 *5328010000004e280100000052b20000002803000000526300000052a200000052e50000002800 *0000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c706b675f7265736f75726365732e707952c30000008302 *0000730600000000010a0006014e28120000005260000000526500000052660000005212000000 *52b600000052b400000052b9000000526c0000005223000000521d00000052c0000000528f0000 *0052b800000052d200000052e3000000521c00000052e600000052c30000002800000000280000 *00002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c706b675f7265736f75726365732e70795232000000720100 *00731c000000060106020c0e0910090809100c0f090a090d0f1c0f2a1251091209096300000000 *00000000040000004200000073860000006500005a01006400005a0200640c0065040083000065 *05006401008403005a06006402008400005a07006403008400005a0800640c006404008401005a *09006405008400005a0a006406008400005a0b00640c006407008401005a0c00640c0064080084 *01005a0d006409008400005a0e00640a008400005a0f00640b008400005a10005253280d000000 *733500000053656172636861626c6520736e617073686f74206f6620646973747269627574696f *6e73206f6e20612073656172636820706174686304000000040000000200000043000000733500 *00006800007c00005f00006800007c00005f01007c02007c00005f02007c03007c00005f03007c *00006904007c0100830100016401005328020000007321030000536e617073686f742064697374 *7269627574696f6e7320617661696c61626c65206f6e20612073656172636820706174680a0a20 *20202020202020416e7920646973747269627574696f6e7320666f756e64206f6e206073656172 *63685f70617468602061726520616464656420746f2074686520656e7669726f6e6d656e742e0a *2020202020202020607365617263685f70617468602073686f756c642062652061207365717565 *6e6365206f662060607379732e706174686060206974656d732e20204966206e6f740a20202020 *20202020737570706c6965642c2060607379732e70617468606020697320757365642e0a0a2020 *20202020202060706c6174666f726d6020697320616e206f7074696f6e616c20737472696e6720 *73706563696679696e6720746865206e616d65206f662074686520706c6174666f726d0a202020 *20202020207468617420706c6174666f726d2d737065636966696320646973747269627574696f *6e73206d75737420626520636f6d70617469626c6520776974682e202049660a20202020202020 *20756e7370656369666965642c2069742064656661756c747320746f207468652063757272656e *7420706c6174666f726d2e202060707974686f6e6020697320616e0a20202020202020206f7074 *696f6e616c20737472696e67206e616d696e672074686520646573697265642076657273696f6e *206f6620507974686f6e2028652e672e20606027322e34276060293b0a20202020202020206974 *2064656661756c747320746f207468652063757272656e742076657273696f6e2e0a0a20202020 *20202020596f75206d6179206578706c696369746c79207365742060706c6174666f726d602028 *616e642f6f722060707974686f6e602920746f2060604e6f6e65606020696620796f750a202020 *20202020207769736820746f206d6170202a616c6c2a20646973747269627574696f6e732c206e *6f74206a7573742074686f736520636f6d70617469626c652077697468207468650a2020202020 *20202072756e6e696e6720706c6174666f726d206f7220507974686f6e2076657273696f6e2e0a *20202020202020204e280500000074080000005f646973746d6170527c00000052140000007406 *000000707974686f6e74040000007363616e28040000005263000000740b000000736561726368 *5f70617468521400000052e800000028000000002800000000733a000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265 *736f75726365732e707952b600000094020000730a000000001109010901090109016302000000 *02000000030000004300000073460000007c00006900006401006a0800702300017c0100690200 *6401006a0800701300017c01006902007c00006900006a02006f1300017403007c01006904007c *000069040083020053280200000073e5000000497320646973747269627574696f6e2060646973 *74602061636365707461626c6520666f72207468697320656e7669726f6e6d656e743f0a0a2020 *20202020202054686520646973747269627574696f6e206d757374206d61746368207468652070 *6c6174666f726d20616e6420707974686f6e2076657273696f6e0a202020202020202072657175 *6972656d656e747320737065636966696564207768656e207468697320656e7669726f6e6d656e *742077617320637265617465642c206f722046616c73650a202020202020202069732072657475 *726e65642e0a20202020202020204e280500000052e80000005212000000740a00000070795f76 *657273696f6e524100000052140000002802000000526300000052a20000002800000000280000 *0000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c706b675f7265736f75726365732e7079740700000063616e5f616464ab *02000073060000000007200113016302000000020000000200000043000000731b0000007c0000 *6900007c0100690100196902007c010083010001640100532802000000732200000052656d6f76 *65206064697374602066726f6d2074686520656e7669726f6e6d656e744e280300000052e70000 *00527f000000740600000072656d6f76652802000000526300000052a200000028000000002800 *000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c706b675f7265736f75726365732e707952ed000000b6020000730200 *00000002630200000004000000040000004300000073530000007c01006401006a08006f0d0001 *7401006902007d01006e0100017832007c0100445d2a007d02007821007403007c020083010044 *5d13007d03007c00006904007c0300830100017134005771210057640100532802000000736401 *00005363616e20607365617263685f706174686020666f7220646973747269627574696f6e7320 *757361626c6520696e207468697320656e7669726f6e6d656e740a0a2020202020202020416e79 *20646973747269627574696f6e7320666f756e642061726520616464656420746f207468652065 *6e7669726f6e6d656e742e0a2020202020202020607365617263685f70617468602073686f756c *6420626520612073657175656e6365206f662060607379732e706174686060206974656d732e20 *204966206e6f740a2020202020202020737570706c6965642c2060607379732e70617468606020 *697320757365642e20204f6e6c7920646973747269627574696f6e7320636f6e666f726d696e67 *20746f0a202020202020202074686520706c6174666f726d2f707974686f6e2076657273696f6e *20646566696e656420617420696e697469616c697a6174696f6e206172652061646465642e0a20 *202020202020204e28050000005212000000521300000052b3000000522d00000052b800000028 *04000000526300000052ea00000052bf00000052a200000028000000002800000000733a000000 *433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e65 *67675c706b675f7265736f75726365732e707952e9000000ba020000730e00000000080d010d02 *070006010d00060163020000000300000006000000430000007387000000790f007c0000690000 *7c01001953576e3400047401006a0a006f2800010101017c01006902008300007d01007c01007c *00006903006a07006f05000167000053016e020001587c01007c00006900006a07006f2600017c *00006903007c010019047d02007c00006900007c01003c7404007c0200830100016e0100017c00 *006900007c010019532801000000734b00000052657475726e2061206e65776573742d746f2d6f *6c64657374206c697374206f6620646973747269627574696f6e7320666f72206070726f6a6563 *745f6e616d65600a20202020202020202805000000527c000000526f00000074050000006c6f77 *657252e7000000740b0000005f736f72745f64697374732803000000526300000052e000000074 *05000000646973747328000000002800000000733a000000433a5c7461686f652d6c6166735c73 *65747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365 *732e7079740b0000005f5f6765746974656d5f5fc90200007314000000000303010f010e010c01 *10010a02100118010e02630200000003000000030000004300000073860000007c00006900007c *01008301006f7200017c01006901008300006f6500017c00006902006903007c01006904006700 *008302007d02007c01007c02006a07006f3c00017c02006905007c0100830100017c0100690400 *7c00006906006a06006f1800017407007c00006906007c01006904001983010001717e00017182 *00016e010001640100532802000000733c00000041646420606469737460206966207765206060 *63616e5f6164642829606020697420616e642069742069736e277420616c726561647920616464 *65644e280800000052ec000000740b0000006861735f76657273696f6e52e700000052b7000000 *527f000000527a000000527c00000052ef0000002803000000526300000052a200000052f00000 *0028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952b80000 *00d9020000730c00000000021d0118010d010d0113016304000000050000000500000043000000 *735b0000007c02006900007c01008301007d04007c04006401006a09006f0500017c0400530178 *27007c00007c010069020019445d18007d04007c04007c01006a06006f0500017c04005301712f *00577c00006903007c01007c030083020053280200000073b802000046696e6420646973747269 *627574696f6e2062657374206d61746368696e6720607265716020616e6420757361626c65206f *6e2060776f726b696e675f736574600a0a2020202020202020546869732063616c6c7320746865 *20606066696e6428726571296060206d6574686f64206f66207468652060776f726b696e675f73 *65746020746f2073656520696620610a20202020202020207375697461626c6520646973747269 *627574696f6e20697320616c7265616479206163746976652e20202854686973206d6179207261 *6973650a2020202020202020606056657273696f6e436f6e666c696374606020696620616e2075 *6e7375697461626c652076657273696f6e206f66207468652070726f6a65637420697320616c72 *656164790a202020202020202061637469766520696e2074686520737065636966696564206077 *6f726b696e675f736574602e29202049662061207375697461626c652064697374726962757469 *6f6e0a202020202020202069736e2774206163746976652c2074686973206d6574686f64207265 *7475726e7320746865206e657765737420646973747269627574696f6e20696e207468650a2020 *202020202020656e7669726f6e6d656e742074686174206d656574732074686520606052657175 *6972656d656e74606020696e2060726571602e20204966206e6f207375697461626c650a202020 *2020202020646973747269627574696f6e20697320666f756e642c20616e642060696e7374616c *6c65726020697320737570706c6965642c207468656e2074686520726573756c74206f660a2020 *20202020202063616c6c696e672074686520656e7669726f6e6d656e7427732060606f62746169 *6e287265712c20696e7374616c6c6572296060206d6574686f642077696c6c2062650a20202020 *2020202072657475726e65642e0a20202020202020204e2804000000526c000000521200000052 *7f00000074060000006f627461696e2805000000526300000052ba000000522b00000052ce0000 *0052a200000028000000002800000000733a000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e70 *7952c9000000e30200007310000000000d0f010d0105010e0006010d0109016303000000030000 *000200000043000000731c0000007c02006401006a09006f0b00017c02007c0100830100530164 *010053280200000073de0100004f627461696e206120646973747269627574696f6e206d617463 *68696e672060726571756972656d656e74602028652e672e2076696120646f776e6c6f6164290a *0a20202020202020204f627461696e20612064697374726f2074686174206d6174636865732072 *6571756972656d656e742028652e672e2076696120646f776e6c6f6164292e2020496e20746865 *0a202020202020202062617365206060456e7669726f6e6d656e74606020636c6173732c207468 *697320726f7574696e65206a7573742072657475726e730a20202020202020206060696e737461 *6c6c657228726571756972656d656e742960602c20756e6c6573732060696e7374616c6c657260 *206973204e6f6e652c20696e20776869636820636173650a20202020202020204e6f6e65206973 *2072657475726e656420696e73746561642e202054686973206d6574686f64206973206120686f *6f6b207468617420616c6c6f777320737562636c61737365730a2020202020202020746f206174 *74656d7074206f746865722077617973206f66206f627461696e696e6720612064697374726962 *7574696f6e206265666f72652066616c6c696e67206261636b0a2020202020202020746f207468 *652060696e7374616c6c65726020617267756d656e742e4e280100000052120000002803000000 *5263000000740b000000726571756972656d656e7452ce00000028000000002800000000733a00 *0000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576646576 *2e6567675c706b675f7265736f75726365732e707952f3000000f8020000730400000000090d01 *63010000000200000003000000630000007332000000782b007c0000690000690100830000445d *1a007d01007c00007c0100196f0900017c01005601711000017110005764010053280200000073 *3d0000005969656c642074686520756e697175652070726f6a656374206e616d6573206f662074 *686520617661696c61626c6520646973747269627574696f6e734e280200000052e700000052c5 *00000028020000005263000000527f00000028000000002800000000733a000000433a5c746168 *6f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b67 *5f7265736f75726365732e707952c00000000403000073080000000002100006010b0063020000 *00040000000400000043000000737f0000007400007c01007401008302006f1100017c00006902 *007c0100830100016e5b00017400007c01007403008302006f3700017847007c0100445d28007d *0200781f007c01007c020019445d13007d03007c00006902007c03008301000171490057713800 *576e1400017404006401007c0100660100168301008201007c0000532802000000733200000049 *6e2d706c616365206164646974696f6e206f66206120646973747269627574696f6e206f722065 *6e7669726f6e6d656e74731b00000043616e27742061646420257220746f20656e7669726f6e6d *656e742805000000526b000000523400000052b8000000523100000052a1000000280400000052 *6300000074050000006f74686572740700000070726f6a65637452a20000002800000000280000 *0000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c706b675f7265736f75726365732e707974080000005f5f696164645f5f *0c03000073140000000002100111011001070006010b0006011902130163020000000400000006 *0000004300000073400000007c00006900006700006401006403006402006403008301027d0200 *781e007c00007c0100660200445d10007d03007c02007c0300377d0200712800577c0200532804 *000000733400000041646420616e20656e7669726f6e6d656e74206f7220646973747269627574 *696f6e20746f20616e20656e7669726f6e6d656e74521400000052e80000004e2802000000525f *00000052120000002804000000526300000052f500000074030000006e657752cd000000280000 *00002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c706b675f7265736f75726365732e707974070000005f5f61 *64645f5f18030000730a00000000021b010d0006010e014e281100000052600000005265000000 *52660000005212000000521b000000740800000050595f4d414a4f5252b600000052ec00000052 *ed00000052e900000052f100000052b800000052c900000052f300000052c000000052f7000000 *52f9000000280000000028000000002800000000733a000000433a5c7461686f652d6c6166735c *7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f757263 *65732e70795231000000910200007318000000060106021517090b09040c0f0910090a0c150c0c *0908090c6300000000000000000100000042000000730e0000006500005a01006400005a020052 *5328010000007354010000416e206572726f72206f636375727265642065787472616374696e67 *2061207265736f757263650a0a2020202054686520666f6c6c6f77696e67206174747269627574 *65732061726520617661696c61626c652066726f6d20696e7374616e636573206f662074686973 *20657863657074696f6e3a0a0a202020206d616e616765720a2020202020202020546865207265 *736f75726365206d616e6167657220746861742072616973656420746869732065786365707469 *6f6e0a0a2020202063616368655f706174680a2020202020202020546865206261736520646972 *6563746f727920666f72207265736f757263652065787472616374696f6e0a0a202020206f7269 *67696e616c5f6572726f720a202020202020202054686520657863657074696f6e20696e737461 *6e63652074686174206361757365642065787472616374696f6e20746f206661696c0a20202020 *2803000000526000000052650000005266000000280000000028000000002800000000733a0000 *00433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e *6567675c706b675f7265736f75726365732e7079523b000000230300007302000000060d630000 *000000000000020000004200000073860000006500005a01006400005a0200640d005a04006401 *008400005a05006402008400005a06006403008400005a07006404008400005a08006405008400 *005a09006406008400005a0a006407008400005a0b006408008400005a0c00640e006409008401 *005a0d00640a008400005a0e00640b008400005a0f00651000640c008401005a11005253280f00 *000073270000004d616e616765207265736f757263652065787472616374696f6e20616e642070 *61636b616765736301000000010000000200000043000000730d0000006800007c00005f000064 *00005328010000004e2801000000740c0000006361636865645f66696c65732801000000526300 *000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f *6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952b600 *00003903000073020000000001630300000003000000020000004300000073130000007400007c *01008301006901007c0200830100532801000000731e000000446f657320746865206e616d6564 *207265736f757263652065786973743f2802000000521e00000052ae0000002803000000526300 *000074160000007061636b6167655f6f725f726571756972656d656e7452aa0000002800000000 *2800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c706b675f7265736f75726365732e707952280000003c03000073 *020000000002630300000003000000020000004300000073130000007400007c01008301006901 *007c0200830100532801000000732c000000497320746865206e616d6564207265736f75726365 *20616e206578697374696e67206469726563746f72793f2802000000521e000000522900000028 *03000000526300000052fc00000052aa00000028000000002800000000733a000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b *675f7265736f75726365732e7079522900000040030000730400000000020c0163030000000300 *0000030000004300000073160000007400007c01008301006901007c00007c0200830200532801 *000000733400000052657475726e206120747275652066696c6573797374656d20706174682066 *6f7220737065636966696564207265736f757263652802000000521e00000052ab000000280300 *0000526300000052fc00000052aa00000028000000002800000000733a000000433a5c7461686f *652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f *7265736f75726365732e7079522600000046030000730400000000020c01630300000003000000 *030000004300000073160000007400007c01008301006901007c00007c02008302005328010000 *00733900000052657475726e2061207265616461626c652066696c652d6c696b65206f626a6563 *7420666f7220737065636966696564207265736f757263652802000000521e00000052ac000000 *2803000000526300000052fc00000052aa00000028000000002800000000733a000000433a5c74 *61686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c70 *6b675f7265736f75726365732e707952250000004c030000730400000000020c01630300000003 *000000030000004300000073160000007400007c01008301006901007c00007c02008302005328 *01000000732500000052657475726e20737065636966696564207265736f757263652061732061 *20737472696e672802000000521e00000052ad0000002803000000526300000052fc00000052aa *00000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f *6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e70795224 *00000052030000730400000000020c016303000000030000000200000043000000731300000074 *00007c01008301006901007c020083010053280100000073310000004c6973742074686520636f *6e74656e7473206f6620746865206e616d6564207265736f75726365206469726563746f727928 *02000000521e00000052270000002803000000526300000052fc00000052aa0000002800000000 *2800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c706b675f7265736f75726365732e707952270000005803000073 *0400000000020c016301000000040000000400000043000000735e000000740000690100830000 *640100197d01007c0000690200700700017403008300007d02007404006402007c01007c020066 *0200168301007d03007c00007c03005f05007c02007c03005f06007c01007c03005f07007c0300 *82010064030053280400000073350000004769766520616e206572726f72206d65737361676520 *666f722070726f626c656d732065787472616374696e672066696c652873296901000000737d01 *000043616e277420657874726163742066696c6528732920746f206567672063616368650a0a54 *686520666f6c6c6f77696e67206572726f72206f63637572726564207768696c6520747279696e *6720746f20657874726163742066696c6528732920746f2074686520507974686f6e206567670a *63616368653a0a0a202025730a0a54686520507974686f6e206567672063616368652064697265 *63746f72792069732063757272656e746c792073657420746f3a0a0a202025730a0a5065726861 *707320796f7572206163636f756e7420646f6573206e6f74206861766520777269746520616363 *65737320746f2074686973206469726563746f72793f2020596f752063616e0a6368616e676520 *746865206361636865206469726563746f72792062792073657474696e67207468652050595448 *4f4e5f4547475f434143484520656e7669726f6e6d656e740a7661726961626c6520746f20706f *696e7420746f20616e2061636365737369626c65206469726563746f72792e0a4e280800000052 *1300000074080000006578635f696e666f740f00000065787472616374696f6e5f706174685230 *000000523b00000052a9000000740a00000063616368655f70617468740e0000006f726967696e *616c5f6572726f722804000000526300000074070000006f6c645f65786352ff00000074030000 *0065727228000000002800000000733a000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707974 *1000000065787472616374696f6e5f6572726f725e0300007310000000000310011302030e1302 *090109010901630300000005000000060000004300000073620000007c00006900007007000174 *01008300007d03007402006903006904007c03007c0100640100177c02008c02007d0400790e00 *7405007c040083010001576e11000101017c0000690600830000016e0100586402007c00006907 *007c04003c7c040053280300000073ae02000052657475726e206162736f6c757465206c6f6361 *74696f6e20696e20636163686520666f722060617263686976655f6e616d656020616e6420606e *616d6573600a0a202020202020202054686520706172656e74206469726563746f7279206f6620 *74686520726573756c74696e6720706174682077696c6c20626520637265617465642069662069 *7420646f65730a20202020202020206e6f7420616c72656164792065786973742e202060617263 *686976655f6e616d65602073686f756c642062652074686520626173652066696c656e616d6520 *6f66207468650a2020202020202020656e636c6f73696e672065676720287768696368206d6179 *206e6f7420626520746865206e616d65206f662074686520656e636c6f73696e67207a69706669 *6c6521292c0a2020202020202020696e636c7564696e672069747320222e656767222065787465 *6e73696f6e2e2020606e616d6573602c2069662070726f76696465642c2073686f756c64206265 *20610a202020202020202073657175656e6365206f662070617468206e616d6520706172747320 *22756e64657222207468652065676727732065787472616374696f6e206c6f636174696f6e2e0a *0a202020202020202054686973206d6574686f642073686f756c64206f6e6c792062652063616c *6c6564206279207265736f757263652070726f7669646572732074686174206e65656420746f0a *20202020202020206f627461696e20616e2065787472616374696f6e206c6f636174696f6e2c20 *616e64206f6e6c7920666f72206e616d6573207468657920696e74656e6420746f0a2020202020 *202020657874726163742c20617320697420747261636b73207468652067656e65726174656420 *6e616d657320666f7220706f737369626c6520636c65616e7570206c617465722e0a2020202020 *20202073040000002d746d706901000000280800000052fe0000005230000000527600000052b3 *00000052150000005208000000520301000052fb00000028050000005263000000740c00000061 *7263686976655f6e616d6574050000006e616d6573740c000000657874726163745f7061746874 *0b0000007461726765745f7061746828000000002800000000733a000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265 *736f75726365732e7079740e0000006765745f63616368655f7061746887030000731000000000 *0d13011c0103010e0103010e020d01630300000004000000030000004300000073420000007400 *006901006401006a02006f2e00017400006902007c010083010069030064020042640300407d03 *007400006904007c01007c0300830200016e010001640400532805000000733402000050657266 *6f726d20616e7920706c6174666f726d2d737065636966696320706f737470726f63657373696e *67206f66206074656d706e616d65600a0a20202020202020205468697320697320776865726520 *4d6163206865616465722072657772697465732073686f756c6420626520646f6e653b206f7468 *657220706c6174666f726d7320646f6e27740a20202020202020206861766520616e797468696e *67207370656369616c20746865792073686f756c6420646f2e0a0a20202020202020205265736f *757263652070726f7669646572732073686f756c642063616c6c2074686973206d6574686f6420 *4f4e4c59206166746572207375636365737366756c6c790a202020202020202065787472616374 *696e67206120636f6d70726573736564207265736f757263652e202054686579206d757374204e *4f542063616c6c206974206f6e207265736f75726365730a202020202020202074686174206172 *6520616c726561647920696e207468652066696c6573797374656d2e0a0a202020202020202060 *74656d706e616d6560206973207468652063757272656e74202874656d706f7261727929206e61 *6d65206f66207468652066696c652c20616e64206066696c656e616d65600a2020202020202020 *697320746865206e616d652069742077696c6c2062652072656e616d656420746f206279207468 *652063616c6c6572206166746572207468697320726f7574696e650a2020202020202020726574 *75726e732e0a20202020202020207405000000706f736978696d01000069ff0f00004e28050000 *0052760000005209000000740400000073746174740700000073745f6d6f646574050000006368 *6d6f6428040000005263000000740800000074656d706e616d65520c000000520a000000280000 *00002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c706b675f7265736f75726365732e7079740b000000706f73 *7470726f63657373b00300007306000000000f10021a0163020000000200000002000000430000 *0073270000007c00006900006f1000017401006401008301008201006e0100017c01007c00005f *020064020053280300000073d20300005365742074686520626173652070617468207768657265 *207265736f75726365732077696c6c2062652065787472616374656420746f2c206966206e6565 *6465642e0a0a2020202020202020496620796f7520646f206e6f742063616c6c20746869732072 *6f7574696e65206265666f726520616e792065787472616374696f6e732074616b6520706c6163 *652c207468650a2020202020202020706174682064656661756c747320746f2074686520726574 *75726e2076616c7565206f662060606765745f64656661756c745f6361636865282960602e2020 *2857686963680a20202020202020206973206261736564206f6e20746865206060505954484f4e *5f4547475f4341434845606020656e7669726f6e6d656e74207661726961626c652c2077697468 *20766172696f75730a2020202020202020706c6174666f726d2d73706563696669632066616c6c *6261636b732e2020536565207468617420726f7574696e65277320646f63756d656e746174696f *6e20666f72206d6f72650a202020202020202064657461696c732e290a0a202020202020202052 *65736f7572636573206172652065787472616374656420746f207375626469726563746f726965 *73206f66207468697320706174682062617365642075706f6e0a2020202020202020696e666f72 *6d6174696f6e20676976656e20627920746865206060495265736f7572636550726f7669646572 *60602e2020596f75206d617920736574207468697320746f20610a202020202020202074656d70 *6f72617279206469726563746f72792c20627574207468656e20796f75206d7573742063616c6c *206060636c65616e75705f7265736f75726365732829606020746f0a202020202020202064656c *65746520746865206578747261637465642066696c6573207768656e20646f6e652e2020546865 *7265206973206e6f2067756172616e74656520746861740a20202020202020206060636c65616e *75705f7265736f7572636573282960602077696c6c2062652061626c6520746f2072656d6f7665 *20616c6c206578747261637465642066696c65732e0a0a2020202020202020284e6f74653a2079 *6f75206d6179206e6f74206368616e6765207468652065787472616374696f6e20706174682066 *6f72206120676976656e207265736f757263650a20202020202020206d616e61676572206f6e63 *65207265736f75726365732068617665206265656e206578747261637465642c20756e6c657373 *20796f752066697273742063616c6c0a20202020202020206060636c65616e75705f7265736f75 *72636573282960602e290a2020202020202020733500000043616e2774206368616e6765206578 *7472616374696f6e20706174682c2066696c657320616c7265616479206578747261637465644e *280300000052fb000000521800000052fe0000002802000000526300000052b300000028000000 *002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36 *6331346465766465762e6567675c706b675f7265736f75726365732e7079522e000000d9030000 *730800000000130a0103010d036302000000020000000100000043000000730400000064010053 *280200000073420200000a202020202020202044656c65746520616c6c20657874726163746564 *207265736f757263652066696c657320616e64206469726563746f726965732c2072657475726e *696e672061206c6973740a20202020202020206f66207468652066696c6520616e642064697265 *63746f7279206e616d6573207468617420636f756c64206e6f7420626520737563636573736675 *6c6c792072656d6f7665642e0a2020202020202020546869732066756e6374696f6e20646f6573 *206e6f74206861766520616e7920636f6e63757272656e63792070726f74656374696f6e2c2073 *6f2069742073686f756c640a202020202020202067656e6572616c6c79206f6e6c792062652063 *616c6c6564207768656e207468652065787472616374696f6e207061746820697320612074656d *706f726172790a20202020202020206469726563746f7279206578636c757369766520746f2061 *2073696e676c652070726f636573732e202054686973206d6574686f64206973206e6f740a2020 *2020202020206175746f6d61746963616c6c792063616c6c65643b20796f75206d757374206361 *6c6c206974206578706c696369746c79206f7220726567697374657220697420617320616e0a20 *20202020202020606061746578697460602066756e6374696f6e20696620796f75207769736820 *746f20656e7375726520636c65616e7570206f6620612074656d706f726172790a202020202020 *20206469726563746f7279207573656420666f722065787472616374696f6e732e0a2020202020 *2020204e2800000000280200000052630000007405000000666f72636528000000002800000000 *733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576 *6465762e6567675c706b675f7265736f75726365732e7079522f000000f303000073000000004e *28000000002812000000526000000052650000005266000000521200000052fe00000052b60000 *005228000000522900000052260000005225000000522400000052270000005203010000520801 *0000520e010000522e0000005291000000522f000000280000000028000000002800000000733a *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c706b675f7265736f75726365732e7079523300000035030000731c000000060106 *010602090309040906090609060906090609290c290929091a6300000000060000000a00000043 *000000731e010000790f007400006901006401001953576e1300047402006a0a006f0700010101 *016e020001587400006903006402006a03006f1100017400006904006905006403008301005301 *6404007d00006410006411007c00006602006412007c00006602006413007c0000660200641500 *6416007c00006602006706007d0100789b007c0100445d87005c02007d02007d0300640b007d04 *007872007c0200445d37007d05007c05007400006901006a06006f200001740000690400690700 *7c04007400006901007c0500198302007d0400719c000150719c00577c03006f19000174000069 *04006907007c04007c03008302007d04006e0100017400006904006907007c0400640c00830200 *5371830057740800640d00830100820100640e00532817000000730c01000044657465726d696e *65207468652064656661756c74206361636865206c6f636174696f6e0a0a202020205468697320 *72657475726e7320746865206060505954484f4e5f4547475f4341434845606020656e7669726f *6e6d656e74207661726961626c652c206966207365742e0a202020204f74686572776973652c20 *6f6e2057696e646f77732c2069742072657475726e7320612022507974686f6e2d456767732220 *7375626469726563746f7279206f66207468650a20202020224170706c69636174696f6e204461 *746122206469726563746f72792e20204f6e20616c6c206f746865722073797374656d732c2069 *74277320227e2f2e707974686f6e2d65676773222e0a202020207410000000505954484f4e5f45 *47475f434143484574020000006e74730e0000007e2f2e707974686f6e2d656767737310000000 *4170706c69636174696f6e2044617461740700000041505044415441740b000000555345525052 *4f46494c457409000000484f4d4544524956457408000000484f4d45504154487404000000484f *4d45740600000057494e4449527400000000730b000000507974686f6e2d456767737333000000 *506c65617365207365742074686520505954484f4e5f4547475f434143484520656e7669726f6d *656e74207661726961626c654e2801000000730700000041505044415441280200000028010000 *007307000000415050444154414e2801000000730b0000005553455250524f46494c4528020000 *007309000000484f4d4544524956457308000000484f4d45504154482801000000730800000048 *4f4d455041544828010000007304000000484f4d45280200000028010000007304000000484f4d *454e28010000005217010000280900000052760000007407000000656e7669726f6e526f000000 *520900000052b3000000740a000000657870616e647573657252120000005215000000740c0000 *0052756e74696d654572726f72280600000074080000006170705f646174617409000000617070 *5f686f6d657352c50000007406000000737562646972520b000000527f00000028000000002800 *000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c706b675f7265736f75726365732e7079523000000002040000733400 *0000000703010f010e010502100111020602030109010901090103010f0307000c010601070006 *011001200205020701190117020301630100000001000000040000004300000073130000007400 *006901006401006402007c0000830300532803000000738f000000436f6e7665727420616e2061 *726269747261727920737472696e6720746f2061207374616e6461726420646973747269627574 *696f6e206e616d650a0a20202020416e792072756e73206f66206e6f6e2d616c7068616e756d65 *7269632f2e206368617261637465727320617265207265706c6163656420776974682061207369 *6e676c6520272d272e0a20202020730e0000005b5e412d5a612d7a302d392e5d2b74010000002d *280200000074020000007265740300000073756228010000005209000000280000000028000000 *00733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c706b675f7265736f75726365732e7079523e0000002b0400007302000000 *0005630100000001000000040000004300000073250000007c0000690000640100640200830200 *7d00007401006902006403006404007c000083030053280500000073cc000000436f6e76657274 *20616e2061726269747261727920737472696e6720746f2061207374616e646172642076657273 *696f6e20737472696e670a0a20202020537061636573206265636f6d6520646f74732c20616e64 *20616c6c206f74686572206e6f6e2d616c7068616e756d65726963206368617261637465727320 *6265636f6d650a202020206461736865732c20776974682072756e73206f66206d756c7469706c *652064617368657320636f6e64656e73656420746f20612073696e676c6520646173682e0a2020 *20205287000000520e000000730e0000005b5e412d5a612d7a302d392e5d2b521f010000280300 *0000528c000000522001000052210100002801000000528e00000028000000002800000000733a *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c706b675f7265736f75726365732e7079523f000000330400007304000000000612 *01630100000001000000040000004300000073190000007400006901006401006402007c000083 *030069020083000053280300000073b1000000436f6e7665727420616e20617262697472617279 *20737472696e6720746f2061207374616e646172642027657874726127206e616d650a0a202020 *20416e792072756e73206f66206e6f6e2d616c7068616e756d6572696320636861726163746572 *7320617265207265706c61636564207769746820612073696e676c6520275f272c0a2020202061 *6e642074686520726573756c7420697320616c77617973206c6f77657263617365642e0a202020 *20730e0000005b5e412d5a612d7a302d392e5d2b52880000002803000000522001000052210100 *0052ee00000028010000007405000000657874726128000000002800000000733a000000433a5c *7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c *706b675f7265736f75726365732e707952440000003d0400007302000000000663010000000100 *0000030000004300000073100000007c0000690000640100640200830200532803000000737c00 *0000436f6e7665727420612070726f6a656374206f722076657273696f6e206e616d6520746f20 *6974732066696c656e616d652d6573636170656420666f726d0a0a20202020416e7920272d2720 *63686172616374657273206172652063757272656e746c79207265706c61636564207769746820 *275f272e0a20202020521f01000052880000002801000000528c00000028010000005209000000 *28000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c73 *2d302e366331346465766465762e6567675c706b675f7265736f75726365732e70795245000000 *4604000073020000000005630000000000000000010000004200000073c20000006500005a0100 *6400005a02006413005a04006413005a05006413005a06006401008400005a0700640200840000 *5a08006403008400005a09006404008400005a0a006405008400005a0b006406008400005a0c00 *6407008400005a0d006408008400005a0e006409008400005a0f00640a008400005a1000640b00 *8400005a1100640c008400005a1200640d008400005a1300640e008400005a1400640f00840000 *5a15006410008400005a16006411008400005a17006412008400005a1800525328140000007345 *00000054727920746f20696d706c656d656e74207265736f757263657320616e64206d65746164 *61746120666f72206172626974726172792050455020333032206c6f6164657273630200000002 *0000000500000043000000733a0000007400007c01006401006400008303007c00005f02007403 *006904006905007400007c01006402006403008303008301007c00005f06006400005328040000 *004e526a00000074080000005f5f66696c655f5f52180100002807000000527100000052120000 *005275000000527600000052b3000000520b000000740b0000006d6f64756c655f706174682802 *0000005263000000527400000028000000002800000000733a000000433a5c7461686f652d6c61 *66735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f *75726365732e707952b60000005b04000073040000000001150163030000000300000003000000 *4300000073130000007c00006900007c00006901007c02008302005328010000004e2802000000 *74030000005f666e52240100002803000000526300000052a900000052aa000000280000000028 *00000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c706b675f7265736f75726365732e707952ab0000005f0400007302 *0000000001630300000003000000040000004300000073160000007400007c00006901007c0100 *7c02008302008301005328010000004e28020000007408000000537472696e67494f52ad000000 *2803000000526300000052a900000052aa00000028000000002800000000733a000000433a5c74 *61686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c70 *6b675f7265736f75726365732e707952ac00000062040000730200000000016303000000030000 *000400000043000000731c0000007c00006900007c00006901007c00006902007c020083020083 *01005328010000004e280300000074040000005f67657452250100005224010000280300000052 *6300000052a900000052aa00000028000000002800000000733a000000433a5c7461686f652d6c *6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f726573 *6f75726365732e707952ad00000065040000730200000000016302000000020000000400000043 *000000731c0000007c00006900007c00006901007c00006902007c010083020083010053280100 *00004e280300000074040000005f686173522501000052240100002802000000526300000052aa *00000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f *6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952ae *0000006804000073020000000001630200000002000000040000004300000073260000007c0000 *6900006f1c00017c00006901007c00006902007c00006900007c01008302008301005328010000 *004e280300000074080000006567675f696e666f52280100005225010000280200000052630000 *00520900000028000000002800000000733a000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e70 *7952a30000006b040000730200000000016302000000020000000400000043000000732b000000 *7c00006900007005000164010053017c00006901007c00006902007c00006900007c0100830200 *8301005328020000004e5218010000280300000052290100005227010000522501000028020000 *005263000000520900000028000000002800000000733a000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572 *6365732e707952a40000006e040000730600000000010a01050163020000000200000003000000 *4300000073130000007400007c00006901007c01008301008301005328010000004e2802000000 *524200000052a400000028020000005263000000520900000028000000002800000000733a0000 *00433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e *6567675c706b675f7265736f75726365732e707952a50000007304000073020000000001630200 *0000020000000400000043000000731c0000007c00006900007c00006901007c00006902007c01 *008302008301005328010000004e280300000074060000005f6973646972522501000052240100 *002802000000526300000052aa00000028000000002800000000733a000000433a5c7461686f65 *2d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f72 *65736f75726365732e707952290000007604000073020000000001630200000002000000040000 *004300000073260000007c00006900006f1c00017c00006901007c00006902007c00006900007c *01008302008301005328010000004e28030000005229010000522a010000522501000028020000 *005263000000520900000028000000002800000000733a000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572 *6365732e707952a600000079040000730200000000016302000000020000000400000043000000 *731c0000007c00006900007c00006901007c00006902007c01008302008301005328010000004e *280300000074080000005f6c697374646972522501000052240100002802000000526300000052 *aa00000028000000002800000000733a000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952 *270000007d040000730200000000016302000000020000000400000043000000732b0000007c00 *006900006f1d00017c00006901007c00006902007c00006900007c010083020083010053016700 *005328010000004e28030000005229010000522b01000052250100002802000000526300000052 *0900000028000000002800000000733a000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952 *a700000080040000730600000000010a011d01630300000008000000050000004200000073f600 *00006401007c0100177d03007c00006900007c0300830100701400016501006402007c01001683 *01008201006e0100017c00006902007c03008301006903006403006404008302007d04007c0400 *6903006405006404008302007d04007c00006904007c00006905007c03008302007d05007c0500 *7c02006406003c6506006907006908007c05008301006f1400016509007c05007c02007c020083 *0300016e5200016407006408006b0a006c0b007d060001650c007c04008301006409007c040069 *0d006404008301007c05006604007c06007c05003c650e007c04007c0500640a008303007d0700 *7c07007c02007c02005564000053280b0000004e7308000000736372697074732f73120000004e *6f20736372697074206e616d656420257273020000000d0a73010000000a73010000000d522301 *000069ffffffff2801000000740500000063616368656900000000740400000065786563280f00 *000052a3000000523700000052a4000000528c00000052250100005229010000527600000052b3 *000000740600000065786973747374080000006578656366696c6574090000006c696e65636163 *6865522c01000074030000006c656e52070000007407000000636f6d70696c6528080000005263 *000000529d00000052a80000007406000000736372697074740b0000007363726970745f746578 *74740f0000007363726970745f66696c656e616d65522c010000740b0000007363726970745f63 *6f646528000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f *6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e7079521d *00000085040000731a00000000010a01100114011b01120115010a011301140210022502120163 *020000000200000002000000430000007310000000740000640100830100820100640000532802 *0000004e733900000043616e277420706572666f726d2074686973206f7065726174696f6e2066 *6f7220756e72656769737465726564206c6f616465722074797065280100000074130000004e6f *74496d706c656d656e7465644572726f722802000000526300000052b300000028000000002800 *000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c706b675f7265736f75726365732e7079522801000097040000730400 *000000010301630200000002000000020000004300000073100000007400006401008301008201 *006400005328020000004e733900000043616e277420706572666f726d2074686973206f706572 *6174696f6e20666f7220756e72656769737465726564206c6f6164657220747970652801000000 *52370100002802000000526300000052b300000028000000002800000000733a000000433a5c74 *61686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c70 *6b675f7265736f75726365732e7079522a0100009c040000730400000000010301630200000002 *000000020000004300000073100000007400006401008301008201006400005328020000004e73 *3900000043616e277420706572666f726d2074686973206f7065726174696f6e20666f7220756e *72656769737465726564206c6f6164657220747970652801000000523701000028020000005263 *00000052b300000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572636573 *2e7079522b010000a1040000730400000000010301630300000003000000040000004300000073 *280000007c02006f1d00017400006901006902007c01007c02006903006401008301008c010053 *017c01005328020000004e74010000002f2804000000527600000052b300000052150000005207 *0000002803000000526300000074040000006261736552aa00000028000000002800000000733a *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c706b675f7265736f75726365732e70795225010000a60400007306000000000107 *011d01630200000002000000030000004300000073340000007400007c00006901006401008302 *006f1100017c00006901006902007c010083010053017403006402008301008201006400005328 *030000004e74080000006765745f64617461733d00000043616e277420706572666f726d207468 *6973206f7065726174696f6e20666f72206c6f616465727320776974686f757420276765745f64 *61746128292728040000007407000000686173617474725275000000523a010000523701000028 *02000000526300000052b300000028000000002800000000733a000000433a5c7461686f652d6c *6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f726573 *6f75726365732e70795227010000ab040000730800000000011301110103014e28190000005260 *00000052650000005266000000521200000074080000006567675f6e616d655229010000527500 *000052b600000052ab00000052ac00000052ad00000052ae00000052a300000052a400000052a5 *000000522900000052a6000000522700000052a7000000521d0000005228010000522a01000052 *2b01000052250100005227010000280000000028000000002800000000733a000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b *675f7265736f75726365732e7079525400000054040000732c0000000601060206010601060209 *040903090309030903090309050903090309040903090509120905090509050905630000000000 *000000010000004200000073200000006500005a01006400005a02006401008400005a03006402 *008400005a040052532803000000732600000050726f7669646572206261736564206f6e206120 *7669727475616c2066696c6573797374656d6302000000020000000300000043000000731e0000 *007400006901007c00007c0100830200017c0000690200830000016400005328010000004e2803 *000000525400000052b6000000740d0000005f73657475705f7072656669782802000000526300 *0000527400000028000000002800000000733a000000433a5c7461686f652d6c6166735c736574 *7570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e *707952b6000000b804000073040000000001100163010000000400000003000000430000007397 *0000007c00006900007d01006400007d02007881007c01007c02006a03006f7300017c01006902 *008300006903006401008301006f3b00017404006905006906007c01008301007c00005f070074 *04006905006908007c01006402008302007c00005f09007c01007c00005f0a00506e0100017c01 *007d0200740400690500690b007c01008301005c02007d01007d03007112000157640000532803 *0000004e73040000002e65676773080000004547472d494e464f280c0000005224010000521200 *000052ee0000007408000000656e647377697468527600000052b3000000740800000062617365 *6e616d65523c0100005215000000522901000074080000006567675f726f6f7452070000002804 *000000526300000052b300000074030000006f6c64523901000028000000002800000000733a00 *0000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576646576 *2e6567675c706b675f7265736f75726365732e7079523d010000bc040000731600000000030901 *060103000d01160115011801090105010601280500000052600000005265000000526600000052 *b6000000523d010000280000000028000000002800000000733a000000433a5c7461686f652d6c *6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f726573 *6f75726365732e70795255000000b5040000730600000006010602090463000000000000000001 *00000042000000733b0000006500005a01006400005a02006401008400005a0300640200840000 *5a04006403008400005a05006404008400005a06006405008400005a0700525328060000007336 *00000050726f76696465732061636365737320746f207061636b616765207265736f7572636573 *20696e207468652066696c6573797374656d630200000002000000020000004300000073100000 *007400006901006902007c01008301005328010000004e2803000000527600000052b300000052 *2e0100002802000000526300000052b300000028000000002800000000733a000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b *675f7265736f75726365732e70795228010000d204000073020000000001630200000002000000 *020000004300000073100000007400006901006902007c01008301005328010000004e28030000 *00527600000052b300000052060000002802000000526300000052b30000002800000000280000 *0000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c706b675f7265736f75726365732e7079522a010000d504000073020000 *0000016302000000020000000200000043000000730d0000007400006901007c01008301005328 *010000004e2802000000527600000074070000006c6973746469722802000000526300000052b3 *00000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f *6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e7079522b *010000d8040000730200000000016303000000030000000400000043000000731c000000740000 *7c00006901007c00006902007c02008302006401008302005328020000004e7402000000726228 *030000005205000000522501000052240100002803000000526300000052a900000052aa000000 *28000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c73 *2d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952ac000000 *db040000730200000000016302000000030000000500000043000000732f0000007400007c0100 *6401008302007d02007a0e007c020069010083000053576400007c020069020083000001586400 *005328020000004e52430100002803000000520500000052780000007405000000636c6f736528 *03000000526300000052b3000000740600000073747265616d28000000002800000000733a0000 *00433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e *6567675c706b675f7265736f75726365732e70795227010000de040000730800000000010f0103 *010e0228080000005260000000526500000052660000005228010000522a010000522b01000052 *ac0000005227010000280000000028000000002800000000733a000000433a5c7461686f652d6c *6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f726573 *6f75726365732e70795256000000cf040000730c00000006010602090309030903090363000000 *00000000000200000042000000733c0000006500005a01006400005a0200640100840000045a03 *005a04006402008400005a05006403008400005a06006405005a08006404008400005a09005253 *2806000000732e00000050726f766964657220746861742072657475726e73206e6f7468696e67 *20666f7220616c6c20726571756573747363020000000200000001000000430000007304000000 *740000532800000000280100000052910000002802000000526300000052b30000002800000000 *2800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c706b675f7265736f75726365732e707974080000003c6c616d62 *64613eeb0400007300000000630200000002000000010000004300000073040000006400005328 *01000000521801000028000000002802000000526300000052b300000028000000002800000000 *733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576 *6465762e6567675c706b675f7265736f75726365732e70795246010000ec040000730000000063 *020000000200000001000000430000007304000000670000532800000000280000000028020000 *00526300000052b300000028000000002800000000733a000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572 *6365732e70795246010000ed040000730000000063010000000100000001000000430000007304 *0000006400005328010000004e2800000000280100000052630000002800000000280000000073 *3a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464657664 *65762e6567675c706b675f7265736f75726365732e707952b6000000f004000073020000000001 *4e280a000000526000000052650000005266000000522a01000052280100005227010000522b01 *00005212000000522401000052b6000000280000000028000000002800000000733a000000433a *5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e656767 *5c706b675f7265736f75726365732e70795252000000e8040000730c000000060106020d010901 *09010602630000000000000000010000004200000073800000006500005a01006400005a020064 *0d005a04006401008400005a05006402008400005a06006403008400005a07006404008400005a *08006405008400005a09006406008400005a0a006407008400005a0b006408008400005a0c0064 *09008400005a0d00640a008400005a0e00640b008400005a0f00640c008400005a10005253280e *00000073220000005265736f7572636520737570706f727420666f72207a69707320616e642065 *676773630200000002000000030000004300000073400000007400006901007c00007c01008302 *00017402006903007c0000690400690500197c00005f06007c0000690400690500740700690800 *177c00005f09006400005328010000004e280a000000525500000052b600000074090000007a69 *70696d706f727474140000005f7a69705f6469726563746f72795f636163686552750000007407 *0000006172636869766574070000007a6970696e666f5276000000740300000073657074070000 *007a69705f70726528020000005263000000527400000028000000002800000000733a00000043 *3a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567 *675c706b675f7265736f75726365732e707952b6000000fd040000730600000000011001160163 *0200000002000000050000004300000073420000007c01006900007c00006901008301006f1200 *017c01007402007c00006901008301001f53017403006401007c01007c00006901006602001683 *01008201006400005328020000004e73190000002573206973206e6f7420612073756270617468 *206f662025732804000000528a000000524c0100005231010000740e000000417373657274696f *6e4572726f7228020000005263000000740600000066737061746828000000002800000000733a *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c706b675f7265736f75726365732e7079740d0000005f7a6970696e666f5f6e616d *650205000073080000000003130112010301630200000003000000050000004300000073660000 *007c00006900007c0100177d02007c02006901007c0000690200740300690400178301006f2200 *017c02007405007c0000690200830100640100171f690600740300690400830100530174070064 *02007c02007c0000690200660200168301008201006400005328030000004e6901000000731900 *00002573206973206e6f7420612073756270617468206f662025732808000000524c010000528a *00000052400100005276000000524b01000052310100005207000000524d010000280300000052 *6300000074080000007a69705f70617468524e01000028000000002800000000733a000000433a *5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e656767 *5c706b675f7265736f75726365732e707974060000005f70617274730b050000730a0000000002 *0d011a0122010301630300000006000000050000004300000073920000007c0000690000701000 *017401006401008301008201006e0100017c00006902007c02008301007d03007c000069030083 *00007d04006402006904007c00006905007c03008301008301007c04006a06006f2e0001782b00 *7c0400445d1f007d05007c00006906007c01007c00006907007c050083010083020001715b0057 *6e0100017c00006906007c01007c03008302005328030000004e73350000007265736f75726365 *5f66696c656e616d652829206f6e6c7920737570706f7274656420666f72202e6567672c206e6f *74202e7a697052380100002808000000523c010000523701000074100000005f7265736f757263 *655f746f5f7a697074140000005f6765745f65616765725f7265736f7572636573521500000052 *5101000074110000005f657874726163745f7265736f75726365740d0000005f65616765725f74 *6f5f7a69702806000000526300000052a900000052aa0000005250010000740600000065616765 *7273520900000028000000002800000000733a000000433a5c7461686f652d6c6166735c736574 *7570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e *707952ab00000014050000731400000000010a0103010d030f010c011f01070006012101630300 *00000f0000000b0000004300000073910200007c02007c00006900008300006a06006f4d000178 *39007c00006900008300007c020019445d27007d03007c00006901007c01007402006903006904 *007c02007c03008302008302007d0400712400577402006903006905007c040083010053017c00 *006906007c0200197d05007c0500640100197c0500640200197c05006403001903027d06007d07 *007d08007c07006404003f640500177c07006401003f640600407c0700640700407c0600640800 *406409003f7c06006401003f640a00407c060064070040640b0014640c00640c00640d00660900 *7d09007407006908007c09008301007d0a007981017c01006909007c0000690a007c0000690b00 *7c02008301008302007d0b00740200690300690c007c0b008301006f380001740200690d007c0b *008301007d0c007c0c00690e007c08006a02006f1500017c0c00690f007c0a006a02006f050001 *7c0b0053016e010001741000640e00640f007402006903006905007c0b008301008301015c0200 *7d0d007d0e007402006911007c0d007c00006912006913007c0200830100830200017402006914 *007c0d00830100017415007c0e007c0a007c0a00660200830200017c01006916007c0e007c0b00 *830200017911007417007c0e007c0b0083020001576e9000047402006918006a0a006f81000101 *0101740200690300690c007c0b008301006f640001740200690d007c0b008301007d0c007c0c00 *690e007c08006a02006f1500017c0c00690f007c0a006a02006f0500017c0b0053017402006919 *006410006a02006f1c0001741a007c0b00830100017417007c0e007c0b00830200017c0b005301 *6e0100018200006e02000158576e2000047402006918006a0a006f1100010101017c0100691b00 *830000016e020001587c0b005328110000004e6905000000690600000069030000006909000000 *69bc070000690f000000691f00000069ffff0000690b000000693f000000690200000069000000 *0069ffffffff73090000002e246578747261637474030000006469725211010000281c00000074 *060000005f696e6465785254010000527600000052b30000005215000000520b000000524a0100 *00740400000074696d6574060000006d6b74696d655208010000523c0100005251010000740600 *0000697366696c65520a010000740700000073745f73697a65740800000073745f6d74696d6574 *080000005f6d6b7374656d70740500000077726974655275000000523a01000052440100005201 *000000520e010000520200000074050000006572726f7252090000005203000000520301000028 *0f000000526300000052a90000005250010000520900000074040000006c61737474080000007a *69705f73746174740100000074740100000064740400000073697a657409000000646174655f74 *696d65740900000074696d657374616d7074090000007265616c5f70617468520a010000740400 *00006f7574667406000000746d706e616d28000000002800000000733a000000433a5c7461686f *652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f *7265736f75726365732e7079525401000021050000734c000000000213011100060106011f0211 *020d0120021d0130020f0203010601180313010f012002090224011c010d011301100203011102 *110113010f022003050110010a010d0109010c0211010f02630100000003000000040000004300 *000073650000007c00006900006400006a08006f4e00016700007d0100783800640300445d3000 *7d02007c00006902007c02008301006f1a00017c01006903007c00006904007c02008301008301 *0001711d0001711d00577c01007c00005f00006e0100017c00006900005328040000004e730f00 *00006e61746976655f6c6962732e747874731300000065616765725f7265736f75726365732e74 *78742802000000730f0000006e61746976655f6c6962732e747874731300000065616765725f72 *65736f75726365732e74787428050000005256010000521200000052a300000052ca00000052a5 *000000280300000052630000005256010000520900000028000000002800000000733a00000043 *3a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567 *675c706b675f7265736f75726365732e7079525301000059050000731000000000011001060107 *00060110011e010d01630100000005000000050000004300000073ba000000790b007c00006900 *0053576ea800047401006a0a006f9c00010101016800007d01007882007c0000690200445d7700 *7d02007c02006903007404006905008301007d0300785c007c03006f5400017404006905006906 *007c0300640100208301007d04007c04007c01006a06006f1a00017c01007c0400196907007c03 *00640100198301000150714700017c03006908008300006701007c01007c04003c714700015771 *2c00577c01007c00005f00007c01005301586400005328020000004e69ffffffff280900000074 *090000005f646972696e646578740e0000004174747269627574654572726f72524a0100005207 *0000005276000000524b0100005215000000527a00000052c80000002805000000526300000074 *03000000696e6452b3000000740500000070617274737406000000706172656e74280000000028 *00000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c706b675f7265736f75726365732e70795258010000620500007320 *000000000103010b010e0106010a00060112010300070116010d01150105021c01090163020000 *00030000000200000043000000732f0000007c00006900007c01008301007d02007c02007c0000 *6901006a0600701000017c02007c00006902008300006a06005328010000004e2803000000524f *010000524a010000525801000028030000005263000000524e0100005250010000280000000028 *00000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c706b675f7265736f75726365732e70795228010000730500007304 *00000000010f01630200000002000000020000004300000073190000007c00006900007c010083 *01007c00006901008300006a06005328010000004e2802000000524f0100005258010000280200 *00005263000000524e01000028000000002800000000733a000000433a5c7461686f652d6c6166 *735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75 *726365732e7079522a010000770500007302000000000163020000000200000004000000430000 *0073250000007400007c00006901008300006902007c00006903007c0100830100640100830200 *8301005328020000004e2800000000280400000052c700000052580100005284000000524f0100 *0028020000005263000000524e01000028000000002800000000733a000000433a5c7461686f65 *2d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f72 *65736f75726365732e7079522b0100007a05000073020000000001630200000002000000040000 *0043000000731c0000007c00006900007c00006901007c00006902007c01008302008301005328 *010000004e2803000000524f010000522501000052400100002802000000526300000052aa0000 *0028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952550100 *007d050000730200000000016302000000020000000400000043000000731c0000007c00006900 *007c00006901007c00006902007c01008302008301005328010000004e2803000000524f010000 *522501000052240100002802000000526300000052aa00000028000000002800000000733a0000 *00433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e *6567675c706b675f7265736f75726365732e7079525201000080050000730200000000014e2811 *0000005260000000526500000052660000005212000000525601000052b6000000524f01000052 *5101000052ab0000005254010000525301000052580100005228010000522a010000522b010000 *52550100005252010000280000000028000000002800000000733a000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265 *736f75726365732e70795257000000f8040000731c000000060106020602090509090909090d09 *38090909110904090309030903630000000000000000010000004200000073320000006500005a *01006400005a02006401008400005a03006402008400005a04006403008400005a050064040084 *00005a060052532805000000732a0100004d657461646174612068616e646c657220666f722073 *74616e64616c6f6e6520504b472d494e464f2066696c65730a0a2020202055736167653a3a0a0a *20202020202020206d65746164617461203d2046696c654d6574616461746128222f706174682f *746f2f504b472d494e464f22290a0a20202020546869732070726f76696465722072656a656374 *7320616c6c206461746120616e64206d6574616461746120726571756573747320657863657074 *20666f7220504b472d494e464f2c0a202020207768696368206973207472656174656420617320 *6578697374696e672c20616e642077696c6c2062652074686520636f6e74656e7473206f662074 *68652066696c652061740a202020207468652070726f7669646564206c6f636174696f6e2e0a20 *2020206302000000020000000200000043000000730d0000007c01007c00005f00006400005328 *010000004e280100000052b30000002802000000526300000052b3000000280000000028000000 *00733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c706b675f7265736f75726365732e707952b6000000a80500007302000000 *00016302000000020000000200000043000000730a0000007c01006401006a0200532802000000 *4e7308000000504b472d494e464f28000000002802000000526300000052090000002800000000 *2800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c706b675f7265736f75726365732e707952a3000000ab05000073 *020000000001630200000002000000030000004300000073340000007c01006401006a02006f17 *00017400007c000069010064020083020069020083000053017403006403008301008201006400 *005328040000004e7308000000504b472d494e464f7402000000725573280000004e6f206d6574 *61646174612065786365707420504b472d494e464f20697320617661696c61626c652804000000 *520500000052b30000005278000000526f00000028020000005263000000520900000028000000 *002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36 *6331346465766465762e6567675c706b675f7265736f75726365732e707952a4000000ae050000 *730600000000010d011701630200000002000000030000004300000073130000007400007c0000 *6901007c01008301008301005328010000004e2802000000524200000052a40000002802000000 *5263000000520900000028000000002800000000733a000000433a5c7461686f652d6c6166735c *7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f757263 *65732e707952a5000000b305000073020000000001280700000052600000005265000000526600 *000052b600000052a300000052a400000052a5000000280000000028000000002800000000733a *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c706b675f7265736f75726365732e7079524f0000009c050000730a000000060a06 *02090309030905630000000000000000010000004200000073170000006500005a01006400005a *02006401008400005a03005253280200000073710200004d657461646174612070726f76696465 *7220666f7220656767206469726563746f726965730a0a2020202055736167653a3a0a0a202020 *20202020202320446576656c6f706d656e7420656767733a0a0a20202020202020206567675f69 *6e666f203d20222f706174682f746f2f5061636b6167654e616d652e6567672d696e666f220a20 *20202020202020626173655f646972203d206f732e706174682e6469726e616d65286567675f69 *6e666f290a20202020202020206d65746164617461203d20506174684d65746164617461286261 *73655f6469722c206567675f696e666f290a2020202020202020646973745f6e616d65203d206f *732e706174682e73706c6974657874286f732e706174682e626173656e616d65286567675f696e *666f29295b305d0a202020202020202064697374203d20446973747269627574696f6e28626173 *656469722c70726f6a6563745f6e616d653d646973745f6e616d652c6d657461646174613d6d65 *746164617461290a0a20202020202020202320556e7061636b656420656767206469726563746f *726965733a0a0a20202020202020206567675f70617468203d20222f706174682f746f2f506163 *6b6167654e616d652d7665722d70797665722d6574632e656767220a20202020202020206d6574 *6164617461203d20506174684d65746164617461286567675f706174682c206f732e706174682e *6a6f696e286567675f706174682c274547472d494e464f2729290a202020202020202064697374 *203d20446973747269627574696f6e2e66726f6d5f66696c656e616d65286567675f706174682c *206d657461646174613d6d65746164617461290a20202020630300000003000000020000004300 *000073160000007c01007c00005f00007c02007c00005f01006400005328010000004e28020000 *00522401000052290100002803000000526300000052b300000052290100002800000000280000 *0000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c706b675f7265736f75726365732e707952b6000000d905000073040000 *0000010901280400000052600000005265000000526600000052b6000000280000000028000000 *002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36 *6331346465766465762e6567675c706b675f7265736f75726365732e70795250000000c5050000 *730400000006120602630000000000000000010000004200000073170000006500005a01006400 *005a02006401008400005a03005253280200000073200000004d657461646174612070726f7669 *64657220666f72202e6567672066696c6573630200000002000000030000004300000073750000 *007400006901007c0100690200197c00005f03007c0100690200740400690500177c00005f0600 *7c01007c00005f07007c01006908006f220001740400690900690a007c01006902007c01006908 *008302007c00005f0b006e0d00017c01006902007c00005f0b007c0000690c0083000001640100 *532802000000732d0000004372656174652061206d657461646174612070726f76696465722066 *726f6d2061207a6970696d706f727465724e280d00000052470100005248010000524901000052 *4a0100005276000000524b010000524c0100005275000000740600000070726566697852b30000 *0052150000005224010000523d010000280200000052630000007408000000696d706f72746572 *28000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c73 *2d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952b6000000 *e1050000730e00000000031301130109010a0122020c0128040000005260000000526500000052 *6600000052b6000000280000000028000000002800000000733a000000433a5c7461686f652d6c *6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f726573 *6f75726365732e70795251000000de050000730400000006010602740a000000496d7057726170 *706572630000000000000000020000004200000073260000006500005a01006400005a02006403 *006401008401005a04006403006402008401005a050052532804000000733e0000005045502033 *303220496d706f72746572207468617420777261707320507974686f6e277320226e6f726d616c *2220696d706f727420616c676f726974686d6302000000020000000200000043000000730d0000 *007c01007c00005f00006400005328010000004e280100000052b3000000280200000052630000 *0052b300000028000000002800000000733a000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e70 *7952b6000000f105000073020000000001630300000007000000070000004300000073a1000000 *7c0100690000640100830100640200197d03007c03007c01006a03006f1500017c000069010064 *00006a08006f05000164000053017c00006901006400006a08006f0a00016400007d02006e0d00 *017c00006901006701007d0200791f007403006904007c03007c02008302005c03007d04007d05 *007d0600576e1400047405006a0a006f0800010101016400005301587406007c04007c05007c06 *008303005328030000004e520e00000069ffffffff2807000000520700000052b3000000521200 *00007403000000696d70740b00000066696e645f6d6f64756c65740b000000496d706f72744572 *726f727409000000496d704c6f6164657228070000005263000000740800000066756c6c6e616d *6552b300000074070000007375626e616d65740400000066696c65520c00000074030000006574 *6328000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952750100 *00f40500007316000000000113011d01050110010a020c0103011f010e0106014e280600000052 *6000000052650000005266000000521200000052b6000000527501000028000000002800000000 *2800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c706b675f7265736f75726365732e70795273010000ee05000073 *06000000060106020c035277010000630000000000000000010000004200000073200000006500 *005a01006400005a02006401008400005a03006402008400005a040052532803000000733c0000 *0050455020333032204c6f61646572207468617420777261707320507974686f6e277320226e6f *726d616c2220696d706f727420616c676f726974686d6304000000040000000200000043000000 *731f0000007c01007c00005f00007c02007c00005f01007c03007c00005f020064000053280100 *00004e2803000000527a010000520c000000527b01000028040000005263000000527a01000052 *0c000000527b01000028000000002800000000733a000000433a5c7461686f652d6c6166735c73 *65747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365 *732e707952b6000000060600007306000000000109010901630200000003000000080000004300 *000073480000007a25007400006901007c01007c00006902007c00006903007c00006904008304 *007d0200576400007c00006902006f1100017c0000690200690500830000016e010001587c0200 *5328010000004e28060000005274010000740b0000006c6f61645f6d6f64756c65527a01000052 *0c000000527b010000524401000028030000005263000000527801000074030000006d6f642800 *0000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c706b675f7265736f75726365732e7079527c0100000b06 *0000730a0000000001030125020a001203280500000052600000005265000000526600000052b6 *000000527c010000280000000028000000002800000000733a000000433a5c7461686f652d6c61 *66735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f *75726365732e707952770100000306000073060000000601060209056301000000030000000800 *00004300000073b60000007911007400006901007c0000197d0100576e5400047402006a0a006f *480001010101784300740000690300445d2d007d02007910007c02007c00008301007d0100576e *1300047404006a0a006f070001010101712c00015850712c00576401007d01006e020001587400 *006901006906007c00007c0100830200017c01006401006a08006f2a00017910007407007c0000 *8301007d01005771b200047404006a0a006f07000101010171b20001586e0100017c0100532802 *00000073e40000005265747269657665206120504550203330322022696d706f72746572222066 *6f722074686520676976656e2070617468206974656d0a0a202020204966207468657265206973 *206e6f20696d706f727465722c20746869732072657475726e7320612077726170706572206172 *6f756e6420746865206275696c74696e20696d706f72740a202020206d616368696e6572792e20 *205468652072657475726e656420696d706f72746572206973206f6e6c79206361636865642069 *6620697420776173206372656174656420627920610a202020207061746820686f6f6b2e0a2020 *20204e280800000052130000007413000000706174685f696d706f727465725f6361636865526f *000000740a000000706174685f686f6f6b735276010000521200000052b7000000527301000028 *030000007409000000706174685f6974656d52720100007404000000686f6f6b28000000002800 *000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c706b675f7265736f75726365732e7079525c00000017060000732400 *00000007030111010e010a000601030110010e01050205020b0213010d01030110010e01090163 *02000000020000000300000043000000730e0000007c01007400007c00003c6401005328020000 *00737801000052656769737465722060646973747269627574696f6e5f66696e6465726020746f *2066696e6420646973747269627574696f6e7320696e207379732e70617468206974656d730a0a *2020202060696d706f727465725f7479706560206973207468652074797065206f7220636c6173 *73206f66206120504550203330322022496d706f727465722220287379732e7061746820697465 *6d0a2020202068616e646c6572292c20616e642060646973747269627574696f6e5f66696e6465 *726020697320612063616c6c61626c6520746861742c20706173736564206120706174680a2020 *20206974656d20616e642074686520696d706f7274657220696e7374616e63652c207969656c64 *73206060446973747269627574696f6e606020696e7374616e63657320666f756e64206f6e0a20 *202020746861742070617468206974656d2e2020536565206060706b675f7265736f7572636573 *2e66696e645f6f6e5f70617468606020666f7220616e206578616d706c652e4e28010000007415 *0000005f646973747269627574696f6e5f66696e646572732802000000740d000000696d706f72 *7465725f747970657413000000646973747269627574696f6e5f66696e64657228000000002800 *000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c706b675f7265736f75726365732e7079525800000042060000730200 *000000076302000000040000000400000043000000732b0000007400007c00008301007d020074 *01007402007c02008302007d03007c03007c02007c00007c0100830300532801000000732e0000 *005969656c6420646973747269627574696f6e732061636365737369626c652076696120607061 *74685f6974656d602803000000525c000000527200000052820100002804000000528001000074 *040000006f6e6c795272010000740600000066696e64657228000000002800000000733a000000 *433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e65 *67675c706b675f7265736f75726365732e7079522d0000004c060000730600000000020c010f01 *630300000007000000040000006300000073af0000007400007c00008301007d03007c03006901 *006401008301006f1800017402006903007c01006402007c030083010156016e0100017c02006f *05000164000053017868007c0300690400640300830100445d57007d04007c0400690500640400 *8301006f4100017406006907006908007c01007c04008302007d0500782900740900740a00690b *007c05008301007c0500830200445d0b007d06007c060056017194005771500001715000576400 *005328050000004e7308000000504b472d494e464f74080000006d657461646174615238010000 *73040000002e656767280c000000525100000052a30000005234000000740d00000066726f6d5f *66696c656e616d655227000000523e010000527600000052b30000005215000000740b00000066 *696e645f696e5f7a69705247010000740b0000007a6970696d706f727465722807000000527201 *000052800100005285010000528701000074070000007375626974656d74070000007375627061 *746852a200000028000000002800000000733a000000433a5c7461686f652d6c6166735c736574 *7570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e *7079528901000052060000731800000000010c0110011801070105011000060110011501190006 *01630000000002000000070000004f00000073470000007914006401006402006b00006c010061 *010001576e2300047402006a0a006f1700010101016401006402006b01006c0100610100016e02 *0001587401007c00007c01008e000053280300000073290000005468756e6b20746f206c6f6164 *20746865207265616c20537472696e67494f206f6e2064656d616e6469ffffffff280100000052 *260100002803000000740900000063537472696e67494f52260100005276010000280200000052 *6200000074020000006b7728000000002800000000733a000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572 *6365732e7079522601000060060000730a0000000003030114010e011501630300000003000000 *010000004300000073040000006401005328020000004e28000000002800000000280300000052 *720100005280010000528501000028000000002800000000733a000000433a5c7461686f652d6c *6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f726573 *6f75726365732e7079740c00000066696e645f6e6f7468696e6769060000730200000000016303 *0000000a000000080000006300000073d70100007400007c01008301007d010074010069020069 *03007c01008301006fb401017c01006904008300006905006401008301006f3000017406006907 *007c01006402007408007c01007401006902006909007c01006403008302008302008301015601 *71d30101786b01740100690a007c0100830100445d56017d03007c03006904008300007d04007c *04006905006404008301006f6500017401006902006909007c01007c03008302007d0500740100 *6902006903007c05008301006f1300017408007c01007c05008302007d06006e0d0001740b007c *05008301007d0600740600690c007c01007c03007c0600640500740d008303015601717500017c *02000c6f3f00017c04006905006401008301006f2f000178b400740e007401006902006909007c *01007c0300830200830100445d0b007d07007c0700560171300157717500017c02000c6f800001 *7c04006905006406008301006f700001786d00740f007401006902006909007c01007c03008302 *00830100445d4c007d08007c0800691000830000700700017177016e010001782e00740e007401 *006902006909007c01007c0800691100830000830200830100445d0b007d09007c0900560171b3 *0157507177015771750001717500576e01000164070053280800000073360000005969656c6420 *646973747269627574696f6e732061636365737369626c65206f6e2061207379732e7061746820 *6469726563746f727973040000002e656767528701000073080000004547472d494e464f730900 *00002e6567672d696e666f740a000000707265636564656e636573090000002e6567672d6c696e *6b4e281200000074110000005f6e6f726d616c697a655f636163686564527600000052b3000000 *520600000052ee000000523e010000523400000052880100005250000000521500000052420100 *00524f000000740d00000066726f6d5f6c6f636174696f6e524c000000522d000000527a010000 *527b0000007406000000727374726970280a00000052720100005280010000528501000052b500 *000052ee000000740800000066756c6c70617468528701000052a2000000527e00000052bf0000 *0028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c706b675f7265736f75726365732e7079740c0000 *0066696e645f6f6e5f706174686d060000733a00000000020c0213011602060109012105100006 *010c0110011501130213020c010601180218011c0006010d0118011c0006010d00070122000601 *09016302000000020000000300000043000000730e0000007c01007400007c00003c6401005328 *020000007397020000526567697374657220606e616d6573706163655f68616e646c6572602074 *6f206465636c617265206e616d657370616365207061636b616765730a0a2020202060696d706f *727465725f7479706560206973207468652074797065206f7220636c617373206f662061205045 *50203330322022496d706f727465722220287379732e70617468206974656d0a2020202068616e *646c6572292c20616e6420606e616d6573706163655f68616e646c65726020697320612063616c *6c61626c65206c696b6520746869733a3a0a0a2020202020202020646566206e616d6573706163 *655f68616e646c657228696d706f727465722c706174685f656e7472792c6d6f64756c654e616d *652c6d6f64756c65293a0a202020202020202020202020232072657475726e206120706174685f *656e74727920746f2075736520666f72206368696c64207061636b616765730a0a202020204e61 *6d6573706163652068616e646c65727320617265206f6e6c792063616c6c656420696620746865 *20696d706f72746572206f626a6563742068617320616c72656164790a20202020616772656564 *20746861742069742063616e2068616e646c65207468652072656c6576616e7420706174682069 *74656d2c20616e6420746865792073686f756c64206f6e6c790a2020202072657475726e206120 *7375627061746820696620746865206d6f64756c65205f5f706174685f5f20646f6573206e6f74 *20616c726561647920636f6e7461696e20616e0a202020206571756976616c656e742073756270 *6174682e2020466f7220616e206578616d706c65206e616d6573706163652068616e646c65722c *207365650a202020206060706b675f7265736f75726365732e66696c655f6e735f68616e646c65 *7260602e0a202020204e280100000074130000005f6e616d6573706163655f68616e646c657273 *2802000000528301000074110000006e616d6573706163655f68616e646c657228000000002800 *000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c706b675f7265736f75726365732e7079525900000095060000730200 *0000000f630200000008000000050000004300000073170100007400007c01008301007d02007c *02006403006a08006f05000164030053017c02006902007c00008301007d03007c03006403006a *08006f05000164030053017403006904006905007c00008301007d04007c04006403006a08006f *3100017406006907007c0000830100047d04007403006904007c00003c6700007c04005f080074 *09007c0000830100016e240001740a007c040064010083020070130001740b006402007c000083 *02008201006e010001740c00740d007c02008302007d05007c05007c02007c01007c00007c0400 *8304007d06007c06006403006a09006f3000017c04006908007d07007c0700690e007c06008301 *00017c0300690f007c0000830100017c07007c04005f08006e0100017c06005328040000007345 *000000456e737572652074686174206e616d6564207061636b61676520696e636c756465732061 *2073756270617468206f6620706174685f6974656d20286966206e65656465642974080000005f *5f706174685f5f730e0000004e6f742061207061636b6167653a4e2810000000525c0000005212 *00000052750100005213000000526e000000528400000052f80000005274000000529801000074 *0e0000005f7365745f706172656e745f6e73523b01000052a10000005272000000529601000052 *7a000000527c0100002808000000740b0000007061636b6167654e616d65528001000052720100 *0052750000005274000000740700000068616e646c6572528c01000052b3000000280000000028 *00000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c706b675f7265736f75726365732e7079740a0000005f68616e646c *655f6e73a6060000732a00000000020c010d0105010f010d01050112010d011a0109000e011001 *13010f0115010d0109000d010d000d016301000000040000000b00000043000000730301000074 *0000690100830000017ae7007c00007402006a06006f0500016401005301740300690400640100 *027d01007d02006402007c00006a06006f6d00016402006906007c000069070064020083010064 *0300208301007d02007408007c0200830100017409007c020083010001791400740300690a007c *020019690b007d01005771a90004740c006a0a006f160001010101740d006404007c0200830200 *82010071a90001586e010001740200690e007c0200670000830200690f007c0000830100017402 *00690e007c000067000083020001781b007c0100445d13007d03007410007c00007c0300830200 *0171d9005757640100740000691100830000015864010053280500000073390000004465636c61 *72652074686174207061636b61676520277061636b6167654e616d65272069732061206e616d65 *7370616365207061636b6167654e520e00000069ffffffff730e0000004e6f742061207061636b *6167653a28120000005274010000740c000000616371756972655f6c6f636b74130000005f6e61 *6d6573706163655f7061636b61676573521300000052b300000052120000005215000000520700 *0000522a0000005270000000526e0000005298010000526c01000052a100000052b7000000527a *000000529c010000740c00000072656c656173655f6c6f636b2804000000529a01000052b30000 *00526f010000528001000028000000002800000000733a000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572 *6365732e7079522a000000bb060000732600000000030a0103010d01050210010d011c010a010a *01030114010e011804190110020700060315036302000000040000000700000043000000736400 *0000740000690100830000017a48007841007402006903007c0100640200830200445d2d007d02 *007404007c02007c00008302007d03007c03006f1100017405007c03007c020083020001712000 *01712000575764010074000069060083000001586401005328030000007344000000456e737572 *6520746861742070726576696f75736c792d6465636c61726564206e616d657370616365207061 *636b6167657320696e636c75646520706174685f6974656d4e2800000000280700000052740100 *00529d010000529e0100005284000000529c010000525b000000529f0100002804000000528001 *0000526f01000074070000007061636b616765528c01000028000000002800000000733a000000 *433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e65 *67675c706b675f7265736f75726365732e7079525b000000da060000731000000000020a010301 *130006010f01070019026304000000070000000400000043000000736200000074000069010069 *02007c01007c0200690300640100830100640200198302007d04007404007c04008301007d0500 *782d007c0300690500445d1e007d06007404007c06008301007c05006a02006f05000150713800 *01713800577c0400536403005328040000007342000000436f6d7075746520616e206e732d7061 *636b616765207375627061746820666f7220612066696c6573797374656d206f72207a69706669 *6c6520696d706f72746572520e00000069ffffffff4e2806000000527600000052b30000005215 *000000520700000052910100005298010000280700000052720100005280010000529a01000052 *74000000528c010000740a0000006e6f726d616c697a656452bf00000028000000002800000000 *733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576 *6465762e6567675c706b675f7265736f75726365732e7079740f00000066696c655f6e735f6861 *6e646c6572e4060000730e000000000322010c010a000601130109036304000000040000000100 *00004300000073040000006400005328010000004e280100000052120000002804000000527201 *00005280010000529a010000527400000028000000002800000000733a000000433a5c7461686f *652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f *7265736f75726365732e7079740f0000006e756c6c5f6e735f68616e646c6572f4060000730200 *000000016301000000010000000300000043000000731c00000074000069010069020074000069 *01006903007c000083010083010053280100000073310000004e6f726d616c697a652061206669 *6c652f646972206e616d6520666f7220636f6d70617269736f6e20707572706f73657328040000 *00527600000052b300000074080000006e6f726d6361736574080000007265616c706174682801 *000000520c00000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572636573 *2e70795247000000fa060000730200000000026302000000030000000500000043000000733b00 *0000790c007c01007c00001953576e2800047400006a0a006f1c00010101017401007c00008301 *00047c01007c00003c7d02007c02005301586400005328010000004e2802000000526f00000052 *470000002803000000520c000000527c0000007406000000726573756c74280000000028000000 *00733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c706b675f7265736f75726365732e70795291010000fe060000730a000000 *000103010c010e011401630100000004000000050000004300000073570000007c000069000064 *01008301007d01007c01006901008300007d02007c01006f3100016401006902007c0100830100 *7d03007403007404006905007c0300197c02007404006905007c000019830300016e0100016400 *005328020000004e520e0000002806000000520700000052c80000005215000000740700000073 *6574617474725213000000526e0000002804000000529a010000526e0100005209000000526f01 *000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f *6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e7079529901 *000005070000730a00000000010f010c0107010f01630100000003000000030000006300000073 *890000007400007c00007401008302006f4800017872007c0000690200830000445d33007d0100 *7c01006903008300007d01007c01006f1a00017c01006904006401008301000c6f0900017c0100 *5601711d0001711d00576e2e0001782a007c0000445d22007d02007819007405007c0200830100 *445d0b007d01007c0100560171720057715f005764020053280300000073410000005969656c64 *206e6f6e2d656d7074792f6e6f6e2d636f6d6d656e74206c696e6573206f662061206060626173 *65737472696e676060206f722073657175656e63657401000000234e2806000000526b00000052 *9f0000005279000000527b000000528a0000005242000000280300000074040000007374727374 *01000000737402000000737328000000002800000000733a000000433a5c7461686f652d6c6166 *735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75 *726365732e707952420000000d0700007316000000000210010d0006010c011801110207000601 *0d000601730a0000005c732a28232e2a293f24730f0000005c732a5c5c5c732a28232e2a293f24 *730f0000005c732a28285c777c5b2d2e5d292b2973210000005c732a283c3d3f7c3e3d3f7c3d3d *7c213d295c732a28285c777c5b2d2e5d292b2973040000005c732a2c73050000005c732a5c5b73 *050000005c732a5c5d730c0000005c772b285c2e5c772b292a24734c000000283f503c6e616d65 *3e5b5e2d5d2b2928202d283f503c7665723e5b5e2d5d2b2920282d7079283f503c70797665723e *5b5e2d5d2b2920282d283f503c706c61743e2e2b29293f20293f20293f7316000000285c642b20 *7c205b612d7a5d2b207c205c2e7c202d2974010000006374030000007072657407000000707265 *76696577730600000066696e616c2d521f01000074020000007263740100000040740300000064 *65766301000000020000000400000063000000737a000000786e007400006901007c0000830100 *445d5d007d01007402007c01007c01008302007d01007c01000c700d00017c01006401006a0200 *6f0700017110006e0100017c0100640200206403006a06006f1200017c01006903006404008301 *005601711000016405007c01001756017110005764060056016400005328070000004e520e0000 *006901000000740a00000030313233343536373839690800000074010000002a73060000002a66 *696e616c2804000000740c000000636f6d706f6e656e745f72655207000000528c000000740500 *00007a66696c6c280200000052aa01000074040000007061727428000000002800000000733a00 *0000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576646576 *2e6567675c706b675f7265736f75726365732e707974140000005f70617273655f76657273696f *6e5f70617274732a07000073120000000001100006010f0115010701110112020d026301000000 *03000000040000004300000073b30000006700007d010078a0007400007c000069010083000083 *0100445d8c007d02007c02006902006401008301006f6900017c02006402006a00006f2e000178 *2b007c01006f1f00017c0100640300196404006a02006f0e00017c010069030083000001713f00 *01576e010001782b007c01006f1f00017c0100640300196405006a02006f0e00017c0100690300 *83000001716d0001576e0100017c01006904007c020083010001711900577405007c0100830100 *53280600000073bc060000436f6e7665727420612076657273696f6e20737472696e6720746f20 *61206368726f6e6f6c6f676963616c6c792d736f727461626c65206b65790a0a20202020546869 *73206973206120726f7567682063726f7373206265747765656e20646973747574696c73272053 *747269637456657273696f6e20616e64204c6f6f736556657273696f6e3b0a2020202069662079 *6f7520676976652069742076657273696f6e73207468617420776f756c6420776f726b20776974 *682053747269637456657273696f6e2c207468656e20697420626568617665730a202020207468 *652073616d653b206f74686572776973652069742061637473206c696b65206120736c69676874 *6c792d736d6172746572204c6f6f736556657273696f6e2e2049742069730a202020202a706f73 *7369626c652a20746f2063726561746520706174686f6c6f676963616c2076657273696f6e2063 *6f64696e6720736368656d657320746861742077696c6c20666f6f6c0a20202020746869732070 *61727365722c2062757420746865792073686f756c642062652076657279207261726520696e20 *70726163746963652e0a0a202020205468652072657475726e65642076616c75652077696c6c20 *62652061207475706c65206f6620737472696e67732e20204e756d6572696320706f7274696f6e *73206f66207468650a2020202076657273696f6e206172652070616464656420746f2038206469 *6769747320736f20746865792077696c6c20636f6d70617265206e756d65726963616c6c792c20 *6275740a20202020776974686f75742072656c79696e67206f6e20686f77206e756d6265727320 *636f6d706172652072656c617469766520746f20737472696e67732e2020446f7473206172650a *2020202064726f707065642c2062757420646173686573206172652072657461696e65642e2020 *547261696c696e67207a65726f73206265747765656e20616c706861207365676d656e74730a20 *2020206f72206461736865732061726520737570707265737365642c20736f207468617420652e *672e2022322e342e302220697320636f6e73696465726564207468652073616d652061730a2020 *202022322e34222e20416c7068616e756d6572696320706172747320617265206c6f7765722d63 *617365642e0a0a2020202054686520616c676f726974686d20617373756d657320746861742073 *7472696e6773206c696b6520222d2220616e6420616e7920616c70686120737472696e67207468 *61740a20202020616c7068616265746963616c6c7920666f6c6c6f7773202266696e616c222020 *726570726573656e7473206120227061746368206c6576656c222e2020536f2c2022322e342d31 *220a20202020697320617373756d656420746f2062652061206272616e6368206f722070617463 *68206f662022322e34222c20616e64207468657265666f72652022322e342e31222069730a2020 *2020636f6e73696465726564206e65776572207468616e2022322e342d31222c20776869636820 *696e207475726e206973206e65776572207468616e2022322e34222e0a0a20202020537472696e *6773206c696b65202261222c202262222c202263222c2022616c706861222c202262657461222c *202263616e6469646174652220616e6420736f206f6e2028746861740a20202020636f6d652062 *65666f7265202266696e616c2220616c7068616265746963616c6c79292061726520617373756d *656420746f206265207072652d72656c656173652076657273696f6e732c0a20202020736f2074 *686174207468652076657273696f6e2022322e342220697320636f6e73696465726564206e6577 *6572207468616e2022322e346131222e0a0a2020202046696e616c6c792c20746f2068616e646c *65206d697363656c6c616e656f75732063617365732c2074686520737472696e67732022707265 *222c202270726576696577222c20616e640a202020202272632220617265207472656174656420 *617320696620746865792077657265202263222c20692e652e2061732074686f75676820746865 *7920776572652072656c656173650a2020202063616e646964617465732c20616e642074686572 *65666f726520617265206e6f74206173206e657720617320612076657273696f6e20737472696e *67207468617420646f6573206e6f740a20202020636f6e7461696e207468656d2c20616e642022 *64657622206973207265706c61636564207769746820616e2027402720736f2074686174206974 *20736f727473206c6f776572207468616e0a202020207468616e20616e79206f74686572207072 *652d72656c65617365207461672e0a2020202052b301000073060000002a66696e616c69ffffff *ff73070000002a66696e616c2d74080000003030303030303030280600000052b701000052ee00 *0000528a00000052c8000000527a00000074050000007475706c65280300000052aa010000526e *01000052b601000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572636573 *2e7079523d00000036070000731a000000001f06011300060110010d0103001800130203001801 *130111016300000000000000000400000042000000739b0000006500005a01006400005a020064 *0900640a00640b006401008403005a04006402008400005a05006403008400005a060065070064 *0b00640b006404008403005a0800640b00640b006405008402005a0900640b006406008401005a *0a00650b00650a008301005a0a00640b006407008401005a0c00650b00650c008301005a0c0064 *0b006408008401005a0d00650b00650d008301005a0d005253280c00000073330000004f626a65 *637420726570726573656e74696e6720616e206164766572746973656420696d706f727461626c *65206f626a656374630600000006000000040000004300000073700000007400007c0200830100 *701300017401006401007c02008302008201006e0100017c01007c00005f02007c02007c00005f *03007404007c03008301007c00005f05007406006907006402006403006908007c040083010016 *8301006909007c00005f09007c05007c00005f0a006400005328040000004e7313000000496e76 *616c6964206d6f64756c65206e616d657305000000785b25735d74010000002c280b0000007406 *0000004d4f44554c4552180000005209000000740b0000006d6f64756c655f6e616d6552b90100 *0074050000006174747273523500000052a0000000521500000052cb00000052a2000000280600 *00005263000000520900000052bc01000052bd01000052cb00000052a200000028000000002800 *000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c706b675f7265736f75726365732e707952b600000063070000730e00 *000000010d011301090109010f0122016301000000020000000400000043000000736a00000064 *01007c00006900007c0000690100660200167d01007c00006902006f1e00017c01006402006403 *006903007c000069020083010017377d01006e0100017c00006904006f1e00017c010064040064 *05006903007c000069040083010016377d01006e0100017c01005328060000004e730700000025 *73203d20257374010000003a520e0000007305000000205b25735d52ba01000028050000005209 *00000052bc01000052bd010000521500000052cb0000002802000000526300000052aa01000028 *000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d *302e366331346465766465762e6567675c706b675f7265736f75726365732e707974070000005f *5f7374725f5f6c070000730c000000000116010a011e010a011e01630100000001000000030000 *0043000000730e0000006401007400007c0000830100165328020000004e7314000000456e7472 *79506f696e742e7061727365282572292801000000526d00000028010000005263000000280000 *00002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c706b675f7265736f75726365732e70795264000000740700 *0073020000000001630400000006000000070000004300000073930000007c01006f1400017c00 *006900007c02007c0300830200016e0100017401007c0000690200740300830000740300830000 *6401006701008304007d04007850007c0000690400445d45007d05007913007405007c04007c05 *008302007d040057714600047406006a0a006f1d00010101017407006402007c04007c05006602 *00168301008201007146000158714600577c04005328030000004e526000000073160000002572 *20686173206e6f202572206174747269627574652808000000521c000000527000000052bc0100 *007407000000676c6f62616c7352bd0100005271000000526c0100005276010000280600000052 *63000000521c00000052cd00000052ce00000052b5000000740400000061747472280000000028 *00000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c706b675f7265736f75726365732e707974040000006c6f61647707 *0000731400000000010700140121010a000601030113010e011f01630300000003000000060000 *0043000000735a0000007c00006900006f1e00017c00006901000c6f1300017402006401007c00 *008302008201006e0100017403007404006905007404006906007c00006901006907007c000069 *00008301007c01007c0200830300830200016400005328020000004e732600000043616e277420 *72657175697265282920776974686f7574206120646973747269627574696f6e280800000052cb *00000052a2000000523a00000052d4000000522b00000052b800000052d200000052bd00000028 *03000000526300000052cd00000052ce00000028000000002800000000733a000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b *675f7265736f75726365732e7079521c0000008107000073080000000001150113010901630300 *0000080000000900000043000000732501000079da00640900047d03007d04007c010069000064 *01006402008302005c02007d05007d06006403007c06006a06006f4c00017c0600690000640300 *6402008302005c02007d06007d04007401006902006404007c0400178301007d07007c07006903 *006f0a00017404008201006e0100017c07006905007d04006e0100016405007c06006a06006f4e *00017c06006900006405006402008302005c02007d06007d03007406007c030069070083000083 *0100700a00017404008201006e0100017c03006907008300006900006406008301007d03006e01 *0001576e2200047404006a0a006f1600010101017404006407007c01008302008201006e240001 *587c00007c05006908008300007c06006908008300007c03007c04007c02008305005364080053 *280a0000007313010000506172736520612073696e676c6520656e74727920706f696e74206672 *6f6d20737472696e672060737263600a0a2020202020202020456e74727920706f696e74207379 *6e74617820666f6c6c6f77732074686520666f726d3a3a0a0a2020202020202020202020206e61 *6d65203d20736f6d652e6d6f64756c653a736f6d652e61747472205b6578747261312c65787472 *61325d0a0a202020202020202054686520656e747279206e616d6520616e64206d6f64756c6520 *6e616d65206172652072657175697265642c20627574207468652060603a617474727360602061 *6e640a202020202020202060605b6578747261735d606020706172747320617265206f7074696f *6e616c0a202020202020202074010000003d690100000074010000005b7302000000785b52be01 *0000520e0000007339000000456e747279506f696e74206d75737420626520696e20276e616d65 *3d6d6f64756c653a6174747273205b6578747261735d2720666f726d61744e2800000000280900 *00005207000000523500000052a000000074050000007370656373521800000052cb00000052bb *0100005293010000527b00000028080000007403000000636c73740300000073726352a2000000 *52bd01000052cb0000005209000000528000000052ba00000028000000002800000000733a0000 *00433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e *6567675c706b675f7265736f75726365732e707952a00000008a0700007326000000000a03010a *0118010d01180113010a000a010d010d01180113010a011d010e01030103010e03630400000007 *000000050000004300000073890000007400007c0100830100701300017401006401007c010083 *02008201006e0100016800007d0400785c007402007c0200830100445d4e007d05007c00006903 *007c05007c03008302007d06007c06006904007c04006a06006f1900017401006402007c01007c *06006904008303008201006e0100017c06007c04007c06006904003c713300577c040053280300 *0000731a000000506172736520616e20656e74727920706f696e742067726f7570731200000049 *6e76616c69642067726f7570206e616d6573150000004475706c696361746520656e7472792070 *6f696e74280500000052bb0100005218000000524200000052a000000052090000002807000000 *52c6010000521700000074050000006c696e657352a2000000740400000074686973527e000000 *52bc00000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570 *746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e7079 *740b00000070617273655f67726f7570b3070000731400000000020d01130106010d0006011201 *100119011101630300000006000000050000004300000073bd0000007400007c01007401008302 *006f1000017c01006902008300007d01006e0d00017403007c01008301007d01006800007d0300 *7884007c0100445d7c005c02007d04007d05007c04006403006a08006f1e00017c050070070001 *7139006e0100017405006401008301008201006e0100017c04006906008300007d04007c04007c *03006a06006f1300017405006402007c04008302008201006e0100017c00006907007c04007c05 *007c02008303007c03007c04003c713900577c0300532804000000732100000050617273652061 *206d6170206f6620656e74727920706f696e742067726f7570737325000000456e74727920706f *696e7473206d757374206265206c697374656420696e2067726f75707373140000004475706c69 *636174652067726f7570206e616d654e2808000000526b00000052d70000007405000000697465 *6d73524300000052120000005218000000527b00000052ca010000280600000052c60100007404 *0000006461746152a200000074040000006d617073521700000052c80100002800000000280000 *0000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c706b675f7265736f75726365732e7079740900000070617273655f6d61 *70c2070000731e0000000002100110020c01060107000c010d010701070110010c010d0113011d *01280000000028000000004e280e000000526000000052650000005266000000521200000052b6 *00000052bf0100005264000000528f00000052c2010000521c00000052a0000000740b00000063 *6c6173736d6574686f6452ca01000052ce010000280000000028000000002800000000733a0000 *00433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e *6567675c706b675f7265736f75726365732e707952360000006007000073180000000601060212 *0909080903120a0f090c1f0c0a0c0c0c030c126300000000000000000800000042000000737901 *00006500005a01006400005a0200641b00641b00641b00641b00650400641b0065050064010084 *07005a0600641b006402008401005a07006508006507008301005a070065090064030084000083 *01005a0a006404008400005a0b006405008400005a0c006406008400005a0d00650900650d0083 *01005a0d006407008400005a0e00650900650e008301005a0e006408008400005a0f0065090065 *0f008301005a0f006409008400005a10006509006510008301005a1000641c00640a008401005a *1100640b008400005a1200641b00640c008401005a1300640d008400005a1400640e008400005a *1500640f008400005a16006410008400005a1700641b006411008401005a180065080065180083 *01005a18006412008400005a19006413008400005a1a00641b006414008401005a1b0064150084 *00005a1c00641b006416008401005a1d006417008400005a1e006418008400005a1f0064190084 *00005a2000641a008400005a21006509006521008301005a21005253281d000000733500000057 *72617020616e2061637475616c206f7220706f74656e7469616c207379732e7061746820656e74 *727920772f6d657461646174616308000000080000000200000043000000736e0000007400007c *0300700400016401008301007c00005f01007c04006400006a09006f1300017403007c04008301 *007c00005f04006e0100017c05007c00005f05007c06007c00005f06007c01007c00005f07007c *07007c00005f08007c0200700400017409007c00005f0a006400005328020000004e7407000000 *556e6b6e6f776e280b000000523e00000052e00000005212000000523f00000074080000005f76 *657273696f6e52eb000000521400000052c20000005290010000525300000074090000005f7072 *6f76696465722808000000526300000052c2000000528701000052e0000000528e00000052eb00 *00005214000000529001000028000000002800000000733a000000433a5c7461686f652d6c6166 *735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75 *726365732e707952b6000000dd0700007310000000000416010d01130109010901090109016304 *0000000b0000000c0000004b00000073ab000000640000670100640100145c04007d05007d0600 *7d07007d08007401006902006903007c02008301005c02007d02007d09007c0900690400830000 *640c006a06006f3f00017405007c02008301007d0a007c0a006f2800017c0a0069060064040064 *05006406006407008304005c04007d05007d06007d07007d0800718300016e0100017c00007c01 *007c03006408007c05006409007c0600640a007c0700640b007c08007c04008d020453280d0000 *004e690400000073040000002e65676773090000002e6567672d696e666f520900000074030000 *0076657274050000007079766572521900000052e0000000528e00000052eb0000005214000000 *280200000073040000002e65676773090000002e6567672d696e666f2807000000521200000052 *7600000052b3000000740800000073706c697465787452ee00000074080000004547475f4e414d *455217000000280b00000052c601000052c2000000523f0100005287010000528e01000052e000 *0000528e00000052eb000000521400000074030000006578745211000000280000000028000000 *00733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c706b675f7265736f75726365732e70795292010000eb0700007314000000 *00011901180113010c010701060126020301150163010000000100000007000000430000007345 *0000007400007c00006400006402008303007c00006901007c00006902007403007c0000690400 *700400016401008301000b7c00006904007c00006905007c000069060066070053280300000074 *0e0000007061727365645f76657273696f6e521801000028000000002807000000527100000052 *90010000527f000000523101000052c200000052eb000000521400000028010000005263000000 *28000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c73 *2d302e366331346465766465762e6567675c706b675f7265736f75726365732e70795246010000 *fb070000730600000000011b012001630200000002000000030000004300000073100000007400 *007c00006901007c01008302005328010000004e28020000007403000000636d70740700000068 *617368636d702802000000526300000052f500000028000000002800000000733a000000433a5c *7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c *706b675f7265736f75726365732e707974070000005f5f636d705f5f0108000073000000006301 *000000010000000200000043000000730d0000007400007c00006901008301005328010000004e *280200000074040000006861736852da0100002801000000526300000028000000002800000000 *733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576 *6465762e6567675c706b675f7265736f75726365732e707974080000005f5f686173685f5f0208 *000073000000006301000000020000000500000043000000733c000000790b007c000069000053 *576e2a00047401006a0a006f1e00010101017c0000690200690300830000047c00005f00007d01 *007c01005301586400005328010000004e280400000074040000005f6b6579526c01000052e000 *000052ee00000028020000005263000000527f00000028000000002800000000733a000000433a *5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e656767 *5c706b675f7265736f75726365732e7079527f00000009080000730a000000000103010b010e01 *16016301000000020000000500000043000000733c000000790b007c000069000053576e2a0004 *7401006a0a006f1e00010101017402007c0000690300830100047c00005f00007d01007c010053 *01586400005328010000004e2804000000740f0000005f7061727365645f76657273696f6e526c *010000523d000000528e0000002802000000526300000074020000007076280000000028000000 *00733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c706b675f7265736f75726365732e707952d801000012080000730a000000 *000103010b010e01160163010000000200000005000000430000007391000000790b007c000069 *000053576e7f00047401006a0a006f730001010101786e007c0000690200640100830100445d49 *007d01007c01006903008300006904006402008301006f2d00017405007c010069060064030064 *0400830200640400196907008300008301007c00005f00007c00006900005301712c0057740800 *6405007c00008302008201006e020001586400005328060000004e7308000000504b472d494e46 *4f730800000076657273696f6e3a52be0100006901000000732e0000004d697373696e67202756 *657273696f6e3a272068656164657220616e642f6f7220504b472d494e464f2066696c65280900 *000052d1010000526c010000740d0000005f6765745f6d6574616461746152ee000000528a0000 *00523f0000005207000000527b000000521800000028020000005263000000527e000000280000 *00002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c706b675f7265736f75726365732e7079528e0000001c0800 *007314000000000103010b010e0110000601160125010c02030163010000000500000005000000 *4300000073a7000000790b007c000069000053576e9500047401006a0a006f8900010101016801 *0067000064000036047d01007c00005f0000786a00640300445d62007d02007859007403007c00 *006904007c0200830100830100445d42005c02007d03007d04007c03006f1000017405007c0300 *8301007d03006e0100017c01006906007c03006700008302006907007408007c04008301008301 *000171530057713700577c01005301586400005328040000004e730c0000007265717569726573 *2e747874730b000000646570656e64732e7478742802000000730c00000072657175697265732e *747874730b000000646570656e64732e747874280900000074160000005f446973747269627574 *696f6e5f5f6465705f6d6170526c0100005212000000524300000052e1010000524400000052b7 *00000052ca000000523c000000280500000052630000007402000000646d520900000052220100 *0074040000007265717328000000002800000000733a000000433a5c7461686f652d6c6166735c *7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f757263 *65732e707974080000005f6465705f6d61702e0800007318000000000103010b010e0114010700 *060116000c01070010012701630200000005000000080000004300000073840000007c00006900 *007d02006700007d03007c03006901007c0200690200640200640300830200830100017855007c *0100445d4d007d0400791b007c03006901007c02007404007c0400830100198301000157712f00 *047405006a0a006f1d00010101017406006401007c00007c040066020016830100820100712f00 *0158712f00577c030053280400000073400000004c697374206f6620526571756972656d656e74 *73206e656564656420666f7220746869732064697374726f206966206065787472617360206172 *652075736564731f000000257320686173206e6f20737563682065787472612066656174757265 *2025724e2800000000280700000052e501000052ca000000528400000052120000005244000000 *526f000000523a0000002805000000526300000052cb00000052e3010000740400000064657073 *52d701000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570 *746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e7079 *52bd0000003a080000731600000000020901060119010700060103011b010e0103011c02630200 *000003000000030000006300000073370000007c00006900007c01008301006f2300017820007c *00006901007c0100830100445d0b007d02007c02005601712000576e0100016400005328010000 *004e280200000052a300000052a5000000280300000052630000005209000000527e0000002800 *0000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c706b675f7265736f75726365732e707952e10100004808 *000073080000000001100110000601630200000003000000030000004300000073840000007c01 *006402006a08006f0d00017401006902007d01006e0100017c00006903007c0100830100017c01 *007401006902006a08006f4900017404007c0000690500830100017839007c0000690600640100 *830100445d24007d02007c02007401006907006a06006f0e00017408007c020083010001715400 *01715400576e010001640200532803000000733e000000456e7375726520646973747269627574 *696f6e20697320696d706f727461626c65206f6e20607061746860202864656661756c743d7379 *732e706174682973160000006e616d6573706163655f7061636b616765732e7478744e28090000 *005212000000521300000052b300000052c1000000525b00000052c200000052e1010000526e00 *0000522a0000002803000000526300000052b30000007403000000706b67280000000028000000 *00733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c706b675f7265736f75726365732e7079740800000061637469766174654d *080000731200000000020d000d010d0110010d0110000601100063010000000200000004000000 *4300000073520000006401007400007c00006901008301007400007c00006902008301007c0000 *69030070040001740400660300167d01007c00006905006f1500017c01006402007c0000690500 *17377d01006e0100017c0100532803000000734000000052657475726e20776861742074686973 *20646973747269627574696f6e2773207374616e64617264202e6567672066696c656e616d6520 *73686f756c64206265730a00000025732d25732d70792573521f01000028060000005245000000 *52e0000000528e00000052eb00000052fa000000521400000028020000005263000000520c0000 *0028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c706b675f7265736f75726365732e7079523c0100 *0056080000730c00000000020301180114030a0115016301000000010000000300000043000000 *732a0000007c00006900006f1200016401007c00007c00006900006602001653017401007c0000 *830100536400005328020000004e730700000025732028257329280200000052c2000000526d00 *00002801000000526300000028000000002800000000733a000000433a5c7461686f652d6c6166 *735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75 *726365732e7079526400000061080000730600000000010a011202630100000002000000070000 *004300000073500000007916007400007c00006401006400008303007d0100576e190004740200 *6a0a006f0d00010101016400007d01006e020001587c0100700400016402007d01006403007c00 *006903007c0100660200165328040000004e528e00000073110000005b756e6b6e6f776e207665 *7273696f6e5d73050000002573202573280400000052710000005212000000521800000052e000 *000028020000005263000000528e00000028000000002800000000733a000000433a5c7461686f *652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f *7265736f75726365732e707952bf01000067080000730c0000000001030016010e000b010d0163 *02000000020000000300000043000000732d0000007c01006900006401008301006f0d00017401 *007c01008202006e0100017402007c00006903007c010083020053280200000073410000004465 *6c656761746520616c6c20756e7265636f676e697a6564207075626c6963206174747269627574 *657320746f202e6d657461646174612070726f766964657252880000002804000000528a000000 *526c010000527100000052d20100002802000000526300000052c1010000280000000028000000 *00733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c706b675f7265736f75726365732e7079740b0000005f5f67657461747472 *5f5f6d0800007306000000000210010d01630300000004000000050000004b0000007328000000 *7c00006900007401007c01008301007402006903006904007c01008301007c02007c03008d0300 *5328010000004e280500000052920100005291010000527600000052b3000000523f0100002804 *00000052c6010000520c0000005287010000528e01000028000000002800000000733a00000043 *3a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567 *675c706b675f7265736f75726365732e70795288010000740800007306000000000106011b0163 *01000000010000000400000043000000731d0000007400006901006401007c00006902007c0000 *69030066020016830100532802000000733f00000052657475726e206120606052657175697265 *6d656e7460602074686174206d617463686573207468697320646973747269627574696f6e2065 *786163746c79730600000025733d3d25732804000000523500000052a000000052e0000000528e *0000002801000000526300000028000000002800000000733a000000433a5c7461686f652d6c61 *66735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f *75726365732e707952d50000007b08000073020000000002630300000004000000040000004300 *000073460000007c00006900007c01007c02008302007d03007c03006402006a08006f1d000174 *02006401007c01007c0200660200660100168301008201006e0100017c03006903008300005328 *03000000733d00000052657475726e2074686520606e616d656020656e74727920706f696e7420 *6f66206067726f757060206f7220726169736520496d706f72744572726f727318000000456e74 *727920706f696e74202572206e6f7420666f756e644e2804000000522200000052120000005276 *01000052c2010000280400000052630000005217000000520900000052bc000000280000000028 *00000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c706b675f7265736f75726365732e707952200000007f0800007308 *000000000212010d011d0163020000000300000006000000430000007367000000790d007c0000 *6900007d0200576e3500047401006a0a006f2900010101017402006903007c0000690400640100 *8301007c0000830200047d02007c00005f00006e020001587c01006402006a09006f1100017c02 *006906007c010068000083020053017c0200532803000000733d00000052657475726e20746865 *20656e74727920706f696e74206d617020666f72206067726f7570602c206f7220746865206675 *6c6c20656e747279206d61707310000000656e7472795f706f696e74732e7478744e2807000000 *74070000005f65705f6d6170526c010000523600000052ce01000052e101000052120000005284 *000000280300000052630000005217000000740600000065705f6d617028000000002800000000 *733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576 *6465762e6567675c706b675f7265736f75726365732e7079522100000086080000731000000000 *0203010d010e01060121020d011101630300000003000000020000004300000073160000007c00 *006900007c01008301006901007c0200830100532801000000733c00000052657475726e207468 *6520456e747279506f696e74206f626a65637420666f72206067726f7570602b606e616d65602c *206f722060604e6f6e656060280200000052210000005284000000280300000052630000005217 *000000520900000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572636573 *2e70795222000000920800007302000000000263030000000a0000000900000043000000733e01 *00007c0200700700017c00006900007d02007c02007005000164010053017c0100740100690200 *6a08006f0e00017c0000690300830000016e0100017404007c02008301007d0300740500690200 *6906007c03008301007d04007407007404007c01008302007d05006401007d0600787f00740900 *7c0500830100445d60005c02007d07007d08007c08007c03006a02006f05000150717a00017c08 *007c04006a02006f3500017c0000690a00740b006a02006f2500017c0100690c007c07007c0200 *830200017c0500690c007c07007c03008302000150717a0001717a00577c0100690d007c020083 *01000164010053784800791a007c0500690e007c03007c0700640200178302007d0900576e1400 *04740f006a0a006f0800010101015071f20001587c05007c09003d7c01007c09003d7c09007d07 *0071f2006401005328030000007340000000496e736572742073656c662e6c6f636174696f6e20 *696e2070617468206265666f726520697473206e65617265737420706172656e74206469726563 *746f72794e6901000000281000000052c2000000521300000052b3000000741600000063686563 *6b5f76657273696f6e5f636f6e666c69637452910100005276000000520b00000052d400000052 *120000007409000000656e756d65726174655290010000524800000052c4000000527a00000074 *05000000696e6465785218000000280a000000526300000052b300000074030000006c6f637404 *0000006e6c6f6374040000006264697274050000006e7061746874020000006270740100000070 *52bf00000074020000006e7028000000002800000000733a000000433a5c7461686f652d6c6166 *735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75 *726365732e707952c1000000a80800007336000000000310010701050210010e020c0112010f02 *06010d000c010d0105011d021001100109020d010403030103011a010e0106020e010902630100 *000005000000060000004300000073e20000007c00006900006401006a02006f05000164000053 *017401006902007c00006903006402008301008301007d01007404007c00006905008301007d02 *00789f007c0000690300640300830100445d8e007d03007c03007406006907006a0700701a0001 *7c03007c01006a0600700d00017c03007408006a06006f070001714c006e010001740900740600 *6907007c0300196404006400008303007d04007c04006f1d00017404007c0400830100690b007c *02008301006f070001714c006e010001740c006405007c03007c04007c00006905006603001683 *010001714c00576400005328060000004e740a0000007365747570746f6f6c7373160000006e61 *6d6573706163655f7061636b616765732e747874730d000000746f705f6c6576656c2e74787452 *2301000073490000004d6f64756c652025732077617320616c726561647920696d706f72746564 *2066726f6d2025732c20627574202573206973206265696e6720616464656420746f207379732e *70617468280d000000527f00000052d700000052d800000052e1010000524700000052c2000000 *5213000000526e000000529e01000052710000005212000000528a000000740d00000069737375 *655f7761726e696e672805000000526300000074030000006e737052ef01000074070000006d6f *646e616d657402000000666e28000000002800000000733a000000433a5c7461686f652d6c6166 *735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75 *726365732e707952ec010000d1080000731e00000000011001050218010f01100006011d010d02 *070219011d010701030103016301000000010000000500000043000000733a000000790b007c00 *0069000001576e2800047401006a0a006f1c00010101017402006401007403007c000083010017 *830100017404005301587405005328020000004e7310000000556e6275696c742065676720666f *72202806000000528e000000521800000052f701000052610000005291000000528f0000002801 *000000526300000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572636573 *2e707952f2000000e5080000730c000000000103010b010e011401060163010000000300000007 *0000004b000000734d000000782a00640800445d22007d02007c01006900007c02007401007c00 *007c020064090083030083020001710700577c01006900006407007c0000690300830200017c00 *006904007c01008d000053280a0000007340000000436f70792074686973206469737472696275 *74696f6e2c20737562737469747574696e6720696e20616e79206368616e676564206b6579776f *7264206172677352e0000000528e00000052eb000000521400000052c200000052900100005287 *0100002806000000730c00000070726f6a6563745f6e616d65730700000076657273696f6e730a *00000070795f76657273696f6e7308000000706c6174666f726d73080000006c6f636174696f6e *730a000000707265636564656e63654e280500000052b70000005271000000521200000052d201 *0000525f00000028030000005263000000528e01000052c101000028000000002800000000733a *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c706b675f7265736f75726365732e70797405000000636c6f6e65ed080000730e00 *000000020301000104000602200113016301000000030000000400000043000000732d00000067 *0000047d01007c0000690000445d18007d02007c02006f0b00017c01007c020012710e0001710e *007e01005328010000004e280100000052e50100002803000000526300000074040000005f5b31 *5d740300000064657028000000002800000000733a000000433a5c7461686f652d6c6166735c73 *65747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365 *732e707952cb000000fb080000730200000000014e280000000028220000005260000000526500 *00005266000000521200000052fa000000524800000052b6000000529201000052cf0100007408 *00000070726f706572747952da01000052db01000052dd010000527f00000052d8010000528e00 *000052e501000052bd00000052e101000052e8010000523c010000526400000052bf01000052e9 *010000528801000052d500000052200000005221000000522200000052c100000052ec01000052 *f200000052fb01000052cb000000280000000028000000002800000000733a000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b *675f7265736f75726365732e70795234000000db0700007348000000060106020c01120c0c0d0c *0203010c060901090709060c0309070c03090c0c06090a0c020c0e09050c09090b090609060907 *0c050c02090409070c0c09160c2909140908090e0902630000000005000000090000004f000000 *737f0000006401007d02007400008300007d0300792f007828007401006902007c020083010069 *03007c03006a08006f0e00017c0200640100377d02007115000157576e1300047404006a0a006f *0700010101016e020001586402006403006b05006c06007d0400017c04006404007c0200640100 *177c00007c01008e0001016400005328050000004e690100000069ffffffff2801000000740400 *00007761726e740a000000737461636b6c6576656c280700000052c00100005213000000529900 *0000529a000000521800000074080000007761726e696e677352ff010000280500000052620000 *00528e01000074050000006c6576656c74010000006752ff01000028000000002800000000733a *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c706b675f7265736f75726365732e707952f7010000000900007314000000000106 *01090103030300190113010e010501100163010000000b0000000900000023000000732f010000 *7400007401007c00008301008301008900008700006601006401008600007d0100780701880000 *445dff007d02007402007c02008301007d03007c0300701300017403006402007c020083020082 *01006e0100017c03006904006403008301007d04007c03006905008300007d05006700007d0600 *7406007c02007c05008302007d03007c03006f3400017c03006905008300007d05007c01007402 *007407007c02007c05006408006404008306005c03007d02007d05007d06006e0100017c010074 *08007409007c02007c05006409006406008306005c03007d02007d05007d0700670000047d0800 *7c0700445d1f005c02007d09007d0a007c08007c0900740a007c0a008301006602001271ee007e *08007d0700740b007c04007c07007c060083030056017128005764070053280a00000073a30000 *005969656c64206060526571756972656d656e746060206f626a6563747320666f722065616368 *2073706563696669636174696f6e20696e206073747273600a0a20202020607374727360206d75 *737420626520616e20696e7374616e6365206f6620606062617365737472696e6760602c206f72 *20612028706f737369626c792d6e6573746564290a202020206974657261626c65207468657265 *6f662e0a202020206306000000080000000a00000013000000734d0100006700007d0600781101 *7c01007c02007c0300830200700001017400007c02007c03008302006f3c000179160088000069 *01008300007d02006401007d030057716500047402006a0a006f13000101010174030064020083 *010082010071650001586e0100017c00007c02007c03008302007d07007c070070250001740300 *6403007c050017640400177c02006405007c02007c03001f8304008201006e0100017c06006904 *007c07006905007c04008c0000830100017c07006906008300007d03007407007c02007c030083 *02007d07007c07006f1000017c07006906008300007d0300710900017c01007c02007c03008302 *00701d00017403006406007c02006405007c02007c03001f830400820100710900017109000157 *7c01007c02007c03008302007d07007c07006f1000017c07006906008300007d03006e0100017c *02007c03007c06006603005328070000004e6900000000732b0000005c206d757374206e6f7420 *617070656172206f6e20746865206c617374206e6f6e626c616e6b206c696e6573090000004578 *70656374656420730300000020696e74020000006174731e000000457870656374656420272c27 *206f7220656e642d6f662d6c69737420696e28080000007408000000434f4e54494e5545740400 *00006e657874740d00000053746f70497465726174696f6e5218000000527a0000005217000000 *7403000000656e647405000000434f4d4d41280800000074040000004954454d740a0000005445 *524d494e41544f52527e00000052f4010000740600000067726f75707374090000006974656d5f *6e616d6552cb0100005211000000280100000052c80100002800000000733a000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b *675f7265736f75726365732e707974090000007363616e5f6c6973742c09000073320000000002 *060203001001100103010c000a010e01030112030f010701250216010c020f0107011001100103 *011f030f010700100173190000004d697373696e6720646973747269627574696f6e2073706563 *6901000000730c00000027657874726127206e616d656902000000730c00000076657273696f6e *20737065634e28010000006901000000280200000069010000006902000000280c000000740400 *0000697465725242000000740600000044495354524f5218000000521700000052080200007408 *0000004f425241434b4554740800000043425241434b4554740700000056455253494f4e740800 *00004c494e455f454e44523f0000005235000000280b00000052a9010000520e020000527e0000 *00521100000052e000000052f401000052cb00000052c501000052fc01000074020000006f7074 *0300000076616c2800000000280100000052c8010000733a000000433a5c7461686f652d6c6166 *735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75 *726365732e7079523c000000230900007324000000000712020f20070006010c01070113010f01 *0c0106020f0107010c0103012503240133016301000000070000000900000043000000736c0000 *00670000047d01007c0000445d16007d02007c01007c02006900007c020066020012710b007e01 *007d03007c030069010083000001670000047d04007c0300445d13005c02007d05007d06007c04 *007c060012713f007e04007c00006400006400006401008503003c6400005328020000004e69ff *ffffff280200000052da01000052d3000000280700000052f000000052fc01000052a200000074 *03000000746d7074040000005f5b325d7402000000686352640100002800000000280000000073 *3a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464657664 *65762e6567675c706b675f7265736f75726365732e707952ef0000006009000073060000000001 *2a010a01630000000000000000020000004200000073530000006500005a01006400008400005a *02006401008400005a03006402008400005a04006403008400005a05006404008400005a060064 *05008400005a07006406008400005a08006509006508008301005a080052532807000000630400 *00000d0000000c0000004300000073350100007c01007400007c0100830100027c00005f01007d *01007c01007c0100690200830000027c00005f03007c00005f0400670000047d04007c0200445d *29005c02007d05007d06007c04007405007c06008301007406007c0500197c05007c0600660400 *12713a007e04007d07007c070069070083000001670000047d08007c0700445d1f005c04007d09 *007d0a007d05007d0b007c08007c05007c0b00660200127181007e08007c00005f08007c070074 *0900740a00740b007c0300830200830100027c00005f0c007c00005f0d007c0000690400740900 *670000047d0c007c0700445d1f005c04007d09007d0a007d05007d0b007c0c007c05007c090066 *02001271e2007e0c00830100740e007c0000690d008301006603007c00005f0f007410007c0000 *690f008301007c00005f1100640100532802000000733e000000444f204e4f542043414c4c2054 *48495320554e444f43554d454e544544204d4554484f443b2075736520526571756972656d656e *742e70617273652829214e2812000000523e000000740b000000756e736166655f6e616d6552ee *00000052e0000000527f000000523d000000740d00000073746174655f6d616368696e6552d300 *000052c501000052b901000052d4000000524400000052ee01000052cb00000074090000006672 *6f7a656e736574740700000068617368436d7052dc01000074120000005f526571756972656d65 *6e745f5f68617368280d000000526300000052e000000052c501000052cb00000052fc01000052 *1502000052e200000052ee0100005218020000740600000070617273656474050000007472616e *7352d301000074040000005f5b335d28000000002800000000733a000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265 *736f75726365732e707952b60000007609000073120000000002160119013d010a01360122023c *01150263010000000500000006000000430000007371000000640100690000670000047d01007c *0000690100445d16007d02007c01006402006900007c0200830100127114007e01008301007d03 *006401006900007c00006902008301007d04007c04006f0e00016403007c0400167d04006e0100 *016404007c00006903007c04007c0300660300165328050000004e52ba01000052180100007304 *0000005b25735d73060000002573257325732804000000521500000052c501000052cb00000052 *e00000002805000000526300000052fc01000052aa01000052c501000052cb0000002800000000 *2800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c706b675f7265736f75726365732e707952bf0100008409000073 *0a00000000013601120107000e0163020000000200000003000000430000007320000000740000 *7c01007401008302006f1000017c00006902007c01006902006a02005328010000004e28030000 *00526b0000005235000000521d0200002802000000526300000052f50000002800000000280000 *0000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c706b675f7265736f75726365732e707974060000005f5f65715f5f8a09 *000073020000000001630200000008000000050000004300000073160100007400007c01007401 *008302006f3300017c01006902007c00006902006a03006f05000174030053017c00006904006f *0d00017c01006905007d0100716300016e2100017400007c01007406008302006f100001740700 *7c01008301007d01006e0100016400007d0200788f007c0000690400445d84005c04007d03007d *04007d05007d06007c04007409007c01007c0300830200197d07007c07006401006a02006f0500 *0174030053017c07006402006a02006f050001740a0053017c07006403006a02006f0a0001740a *007d0200717300017c07006404006a0200700d00017c02006400006a08006f0a00017403007d02 *0071730001717300577c02006400006a08006f0a0001740a007d02006e0100017c020053280500 *00004e74010000004674010000005474010000002b521f010000280b000000526b000000523400 *0000527f000000529100000052ee01000052d8010000529f000000523d000000521200000052d9 *010000528f0000002808000000526300000052bf0000005261010000521f020000522002000052 *1502000052d30100007406000000616374696f6e28000000002800000000733a000000433a5c74 *61686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c70 *6b675f7265736f75726365732e707952b90000008d090000732c00000000011001130005010a00 *11011001100106010a00120113010d0005010d0005010d000a011a000e010d000a016301000000 *01000000010000004300000073070000007c00006900005328010000004e2801000000521e0200 *002801000000526300000028000000002800000000733a000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f7572 *6365732e707952dd0100009e090000730200000000016301000000010000000300000043000000 *730e0000006401007400007c0000830100165328020000004e7315000000526571756972656d65 *6e742e7061727365282572292801000000526d0000002801000000526300000028000000002800 *000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c706b675f7265736f75726365732e70795264000000a1090000730000 *00006301000000020000000300000043000000735b0000007400007401007c0000830100830100 *7d01007c01006f2f00017402007c01008301006401006a02006f0900017c010064020019530174 *03006403007c00008302008201006e0100017403006404007c0000830200820100640000532805 *0000004e69010000006900000000731d0000004578706563746564206f6e6c79206f6e65207265 *71756972656d656e7473150000004e6f20726571756972656d656e747320666f756e6428040000 *0052c7000000523c00000052310100005218000000280200000052aa01000052e4010000280000 *00002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c706b675f7265736f75726365732e707952a0000000a40900 *00730c000000000112010701130109011301280a0000005260000000526500000052b600000052 *bf010000522202000052b900000052dd010000526400000052a0000000740c0000007374617469 *636d6574686f64280000000028000000002800000000733a000000433a5c7461686f652d6c6166 *735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75 *726365732e707952350000007509000073100000000601090e0906090309110903090309087303 *0000002d2d5474010000003c7303000000542d5473020000003c3d7303000000462b4674010000 *003e7303000000542b4673020000003e3d7303000000542e2e73020000003d3d7303000000462b *2b7302000000213d6301000000010000000300000043000000733c0000007400007c0000740100 *830200702500016401007c0000740200660200640200840000830000597d00007c000069030064 *03001f53017c0000690300532804000000732600000047657420616e206d726f20666f72206120 *74797065206f7220636c617373696320636c61737352c601000063000000000000000001000000 *4200000073080000006500005a0100525328000000002802000000526000000052650000002800 *00000028000000002800000000733a000000433a5c7461686f652d6c6166735c7365747570746f *6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952c6 *010000bc0900007302000000060069010000002804000000526b00000074040000007479706574 *060000006f626a65637474070000005f5f6d726f5f5f280100000052c601000028000000002800 *000000733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c706b675f7265736f75726365732e707974080000005f6765745f6d72 *6fb909000073080000000002100119010c01630200000003000000060000004300000073430000 *00783c007400007401007c01006401007402007c0100830100830300830100445d1c007d02007c *02007c00006a06006f0900017c00007c0200195301711f00576402005328030000007332000000 *52657475726e20616e206164617074657220666163746f727920666f7220606f62602066726f6d *2060726567697374727960525f0000004e2803000000522d0200005271000000522a0200002803 *0000007408000000726567697374727974020000006f6252630100002800000000280000000073 *3a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464657664 *65762e6567675c706b675f7265736f75726365732e70795272000000c009000073080000000002 *1f0006010d016301000000020000000200000043000000733a0000007400006901006902007c00 *008301007d01007400006901006903007c0100830100701100017400006904007c010083010001 *6e0100016401005328020000007331000000456e7375726520746861742074686520706172656e *74206469726563746f7279206f6620607061746860206578697374734e28050000005276000000 *52b3000000520b000000520600000074080000006d616b6564697273280200000052b300000052 *0b00000028000000002800000000733a000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c706b675f7265736f75726365732e707952 *46000000c70900007306000000000212011301630100000004000000040000006300000073ac00 *00006406007d01006700007d0200788e007401007c0000830100445d80007d03007c0300690200 *6401008301006f5d00017c03006903006402008301006f3a00017c0100700700017c02006f0f00 *017c01007c020066020056016e0100017c0300640300640400216904008300007d01006700007d *0200719900017405006405007c0300830200820100711900017c02006906007c03008301000171 *1900577c01007c02006602005601640600532807000000737201000053706c6974206120737472 *696e67206f72206974657261626c652074686572656f6620696e746f202873656374696f6e2c63 *6f6e74656e74292070616972730a0a202020204561636820606073656374696f6e606020697320 *612073747269707065642076657273696f6e206f66207468652073656374696f6e206865616465 *722028225b73656374696f6e5d22290a20202020616e642065616368206060636f6e74656e7460 *602069732061206c697374206f66207374726970706564206c696e6573206578636c7564696e67 *20626c616e6b206c696e657320616e640a20202020636f6d6d656e742d6f6e6c79206c696e6573 *2e202049662074686572652061726520616e792073756368206c696e6573206265666f72652074 *68652066697273742073656374696f6e0a202020206865616465722c2074686579277265207265 *7475726e656420696e206120666972737420606073656374696f6e6060206f662060604e6f6e65 *60602e0a2020202052c401000074010000005d690100000069ffffffff7317000000496e76616c *69642073656374696f6e2068656164696e674e280700000052120000005242000000528a000000 *523e010000527b0000005218000000527a000000280400000052aa010000740700000073656374 *696f6e7407000000636f6e74656e74527e00000028000000002800000000733a000000433a5c74 *61686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c70 *6b675f7265736f75726365732e70795243000000cd090000731a0000000008060106010d000601 *100110010e010f0113010a0213021103630000000004000000070000004f000000734400000064 *01006402006b00006c01007d0200017402006903007d03007a1a007404007402005f03007c0200 *7c00007c01008e000053576400007c03007402005f0300586400005328030000004e69ffffffff *280100000074070000006d6b7374656d702805000000740800000074656d7066696c6552340200 *005276000000520500000074070000006f735f6f70656e28040000005262000000528e01000052 *3402000074080000006f6c645f6f70656e28000000002800000000733a000000433a5c7461686f *652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b675f *7265736f75726365732e7079525e010000e6090000730c00000000011001090103010901110263 *010000000200000004000000430000007342000000783b00740000740100830100445d2d007d01 *007c0100690200640100830100701700017403007401007c01008302007c00007c01003c710d00 *01710d00576400005328020000004e52880000002804000000525701000074080000005f6d616e *61676572528a000000527100000028020000005203020000520900000028000000002800000000 *733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576 *6465762e6567675c706b675f7265736f75726365732e7079740b0000005f696e697469616c697a *65f2090000730800000000010d00060110012801000000740c0000005f5f72657175697265735f *5f6301000000010000000100000043000000730a0000007c000069000083000053280000000028 *0100000052e8010000280100000052a200000028000000002800000000733a000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c706b *675f7265736f75726365732e70795246010000160a000073000000002896000000526600000052 *130000005276000000524701000052590100005220010000527401000052f8000000521c020000 *74090000004e616d654572726f7274040000007365747352000000005201000000520200000052 *0300000052040000005205000000523602000074070000006f732e706174685206000000520700 *00005208000000521b00000074070000005f5f616c6c5f5f7409000000457863657074696f6e52 *3700000052380000005239000000523a0000005267000000528e00000052fa0000005248000000 *5249000000524a000000524b000000524c000000525a000000521e000000521600000052860000 *00520f00000052320100005210000000529000000052400000005241000000521d000000525d00 *0000521f0000005220000000521200000052210000005222000000524d000000524e000000522b *02000052320000005231000000525e000000521b010000523b0000005233000000523000000052 *3e000000523f00000052440000005245000000525400000052550000005256000000522a020000 *525200000052530000005257000000528a010000524f0000005250000000525100000052730100 *005277010000525c000000528201000052580000005291000000522d0000005289010000522601 *0000528f01000052950100005296010000529e0100005259000000529c010000522a000000525b *00000052a201000052a30100005247000000529101000052990100005242000000521100000052 *1402000052050200005210020000521302000052090200005211020000521202000052bb010000 *7407000000564552424f5345740a00000049474e4f52454341534552d601000052b40100005284 *000000528c00000052b7010000523d0000005236000000523400000052f7010000523c00000052 *ef0000005235000000521b020000522d020000527200000052460000005243000000525e010000 *5238020000523902000052c0010000522b00000074080000005f5f6d61696e5f5f523a02000052 *76010000521c00000052d200000052a200000052b800000052b300000052b500000052af000000 *52b4000000522300000052e6000000522c00000052d40000002800000000280000000028000000 *00733a000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c706b675f7265736f75726365732e707974080000003c6d6f64756c653e0e *000000735c01000006025402030108010e0115032201100116020c0e092b0c010c010901090309 *0109010303090109030c0103030c010c01060306030f0309010c010c01090106030c0216051603 *1603160306010d01060106010601060106020909090c0c0c090309140f010f0106020933090806 *02090809040c0409051329162916ff0020168f0603161213cd09290908090a0909090e135e0d03 *161a16161303160b0905168b10191629161916101315131409290602090a0c060c0c100209090c *020d020c230d020601060209110915091f0c0a090c0d01100309030d0309040c070908090c1201 *120112011201120112011201120106010302160315012c02090c092a167b16ff00260923093d09 *1513390302070107010701070107010a040907090709060919090b090109040d03090103021401 *0e010503030111010e010c0109011300060211010a000601100115011202090109010901090106 *040d010900 adddir ./setuptools-0.6c14devdev.egg/setuptools addfile ./setuptools-0.6c14devdev.egg/setuptools/__init__.py hunk ./setuptools-0.6c14devdev.egg/setuptools/__init__.py 1 +"""Extensions to the 'distutils' for large or complex distributions""" +from setuptools.extension import Extension, Library +from setuptools.dist import Distribution, Feature, _get_unpatched +import distutils.core, setuptools.command +from setuptools.depends import Require +from distutils.core import Command as _Command +from distutils.util import convert_path +import os.path + +__version__ = '0.7a1' +__all__ = [ + 'setup', 'Distribution', 'Feature', 'Command', 'Extension', 'Require', + 'find_packages' +] + +bootstrap_install_from = None + +def find_packages(where='.', exclude=()): + """Return a list all Python packages found within directory 'where' + + 'where' should be supplied as a "cross-platform" (i.e. URL-style) path; it + will be converted to the appropriate local path syntax. 'exclude' is a + sequence of package names to exclude; '*' can be used as a wildcard in the + names, such that 'foo.*' will exclude all subpackages of 'foo' (but not + 'foo' itself). + """ + out = [] + stack=[(convert_path(where), '')] + while stack: + where,prefix = stack.pop(0) + for name in os.listdir(where): + fn = os.path.join(where,name) + if ('.' not in name and os.path.isdir(fn) and + os.path.isfile(os.path.join(fn,'__init__.py')) + ): + out.append(prefix+name); stack.append((fn,prefix+name+'.')) + for pat in list(exclude)+['ez_setup']: + from fnmatch import fnmatchcase + out = [item for item in out if not fnmatchcase(item,pat)] + return out + +setup = distutils.core.setup + +_Command = _get_unpatched(_Command) + +class Command(_Command): + __doc__ = _Command.__doc__ + + command_consumes_arguments = False + + def __init__(self, dist, **kw): + # Add support for keyword arguments + _Command.__init__(self,dist) + for k,v in kw.items(): + setattr(self,k,v) + + def reinitialize_command(self, command, reinit_subcommands=0, **kw): + cmd = _Command.reinitialize_command(self, command, reinit_subcommands) + for k,v in kw.items(): + setattr(cmd,k,v) # update command with keywords + return cmd + +import distutils.core +distutils.core.Command = Command # we can't patch distutils.cmd, alas + +def findall(dir = os.curdir): + """Find all files under 'dir' and return the list of full filenames + (relative to 'dir'). + """ + all_files = [] + for base, dirs, files in os.walk(dir): + if base==os.curdir or base.startswith(os.curdir+os.sep): + base = base[2:] + if base: + files = [os.path.join(base, f) for f in files] + all_files.extend(filter(os.path.isfile, files)) + return all_files + +import distutils.filelist +distutils.filelist.findall = findall # fix findall bug in distutils. + + addfile ./setuptools-0.6c14devdev.egg/setuptools/__init__.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/__init__.pyc oldhex * newhex *d1f20d0a341ef84b6300000000000000000f0000004000000073330100006400005a0000640100 *6402006b01006c02005a02006c03005a0300016401006403006b04006c05005a05006c06005a06 *006c07005a0700016401006404006b08005a09006401006404006b0a005a0b006401006405006b *0c006c0d005a0d00016401006406006b08006c0e005a0f00016401006407006b10006c11005a11 *00016401006404006b12005a13006408005a1400640900640a00640b00640c00640d00640e0064 *0f006707005a15006404005a17006410006414006411008402005a1800650900691900691a005a *1a00650700650f008301005a0f00640c00650f00660100641200840000830000595a0e00640100 *6404006b08005a0900650e006509006919005f0e00651300691b006413008401005a1c00640100 *6404006b1d005a0900651c00650900691e005f1c00640400532815000000734000000045787465 *6e73696f6e7320746f207468652027646973747574696c732720666f72206c61726765206f7220 *636f6d706c657820646973747269627574696f6e7369ffffffff28020000007409000000457874 *656e73696f6e74070000004c6962726172792803000000740c000000446973747269627574696f *6e740700000046656174757265740e0000005f6765745f756e706174636865644e280100000074 *070000005265717569726528010000007407000000436f6d6d616e642801000000740c00000063 *6f6e766572745f706174687305000000302e376131740500000073657475705202000000520300 *0000520600000052000000005205000000740d00000066696e645f7061636b6167657374010000 *002e63020000000b000000070000004300000073470100006700007d02007400007c0000830100 *6401006602006701007d030078c2007c03006fba00017c03006901006402008301005c02007d00 *007d0400789e007402006903007c0000830100445d8d007d05007402006904006905007c00007c *05008302007d06006403007c05006a07006f6500017402006904006906007c06008301006f5200 *017402006904006907007402006904006905007c06006404008302008301006f3000017c020069 *08007c04007c050017830100017c03006908007c06007c04007c05001764030017660200830100 *01714a0001714a0057711e0001577860007409007c010083010064050067010017445d4b007d07 *006406006407006b0a006c0b007d080001670000047d09007c0200445d21007d0a007c08007c0a *007c0700830200700b00017c09007c0a0012711501017115017e09007d020071f400577c020053 *2808000000738f01000052657475726e2061206c69737420616c6c20507974686f6e207061636b *6167657320666f756e642077697468696e206469726563746f727920277768657265270a0a2020 *2020277768657265272073686f756c6420626520737570706c6965642061732061202263726f73 *732d706c6174666f726d222028692e652e2055524c2d7374796c652920706174683b2069740a20 *20202077696c6c20626520636f6e76657274656420746f2074686520617070726f707269617465 *206c6f63616c20706174682073796e7461782e2020276578636c7564652720697320610a202020 *2073657175656e6365206f66207061636b616765206e616d657320746f206578636c7564653b20 *272a272063616e206265207573656420617320612077696c646361726420696e207468650a2020 *20206e616d65732c207375636820746861742027666f6f2e2a272077696c6c206578636c756465 *20616c6c207375627061636b61676573206f662027666f6f272028627574206e6f740a20202020 *27666f6f2720697473656c66292e0a2020202074000000006900000000520a000000730b000000 *5f5f696e69745f5f2e70797408000000657a5f736574757069ffffffff2801000000740b000000 *666e6d6174636863617365280c00000052070000007403000000706f7074020000006f73740700 *00006c69737464697274040000007061746874040000006a6f696e740500000069736469727406 *000000697366696c657406000000617070656e6474040000006c6973747407000000666e6d6174 *6368520d000000280b0000007405000000776865726574070000006578636c7564657403000000 *6f75747405000000737461636b740600000070726566697874040000006e616d65740200000066 *6e7403000000706174520d00000074040000005f5b315d74040000006974656d28000000002800 *0000007340000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c7365747570746f6f6c735c5f5f696e69745f5f2e7079520900000012 *000000732200000000090601150103000701150110000601150120012202110028011400060110 *0139016300000000000000000200000042000000732c0000006500005a01006502006903005a03 *006504005a05006400008400005a06006401006402008401005a07005253280300000063020000 *0005000000050000004b00000073410000007400006901007c00007c010083020001782a007c02 *00690200830000445d1c005c02007d03007d04007403007c00007c03007c040083030001711d00 *576400005328010000004e280400000074080000005f436f6d6d616e6474080000005f5f696e69 *745f5f74050000006974656d737407000000736574617474722805000000740400000073656c66 *74040000006469737474020000006b7774010000006b7401000000762800000000280000000073 *40000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464657664 *65762e6567675c7365747570746f6f6c735c5f5f696e69745f5f2e707952230000003300000073 *08000000000210010d000c016900000000630300000007000000050000004b0000007346000000 *7400006901007c00007c01007c02008303007d0400782a007c0300690200830000445d1c005c02 *007d05007d06007403007c04007c05007c060083030001712200577c04005328010000004e2804 *000000522200000074140000007265696e697469616c697a655f636f6d6d616e64522400000052 *25000000280700000052260000007407000000636f6d6d616e6474120000007265696e69745f73 *7562636f6d6d616e647352280000007403000000636d645229000000522a000000280000000028 *000000007340000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c7365747570746f6f6c735c5f5f696e69745f5f2e7079522b000000 *39000000730a000000000115010d000c011401280800000074080000005f5f6e616d655f5f740a *0000005f5f6d6f64756c655f5f522200000074070000005f5f646f635f5f740500000046616c73 *65741a000000636f6d6d616e645f636f6e73756d65735f617267756d656e74735223000000522b *0000002800000000280000000028000000007340000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c5f5f *696e69745f5f2e707952060000002e000000730800000006010902060209066301000000070000 *00080000004300000073bc0000006700007d010078af007400006901007c0000830100445d9e00 *5c03007d02007d03007d04007c02007400006902006a0200701a00017c02006903007400006902 *00740000690400178301006f0e00017c02006401001f7d02006e0100017c02006f340001670000 *047d05007c0400445d1c007d06007c05007400006905006906007c02007c060083020012716f00 *7e05007d04006e0100017c01006907007408007400006905006909007c04008302008301000171 *1600577c0100532802000000735e00000046696e6420616c6c2066696c657320756e6465722027 *6469722720616e642072657475726e20746865206c697374206f662066756c6c2066696c656e61 *6d65730a202020202872656c617469766520746f202764697227292e0a20202020690200000028 *0a000000520f000000740400000077616c6b7406000000637572646972740a0000007374617274 *73776974687403000000736570521100000052120000007406000000657874656e647406000000 *66696c7465725214000000280700000074030000006469727409000000616c6c5f66696c657374 *0400000062617365740400000064697273740500000066696c6573522000000074010000006628 *0000000028000000007340000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d *302e366331346465766465762e6567675c7365747570746f6f6c735c5f5f696e69745f5f2e7079 *740700000066696e64616c6c4200000073120000000004060110000f012a010e01070134012001 *2800000000281f000000523100000074140000007365747570746f6f6c732e657874656e73696f *6e52000000005201000000740f0000007365747570746f6f6c732e646973745202000000520300 *00005204000000740e000000646973747574696c732e636f72657409000000646973747574696c *7374120000007365747570746f6f6c732e636f6d6d616e64740a0000007365747570746f6f6c73 *74120000007365747570746f6f6c732e646570656e647352050000005206000000522200000074 *0e000000646973747574696c732e7574696c520700000074070000006f732e70617468520f0000 *00740b0000005f5f76657273696f6e5f5f74070000005f5f616c6c5f5f74040000004e6f6e6574 *16000000626f6f7473747261705f696e7374616c6c5f66726f6d52090000007404000000636f72 *655208000000523500000052400000007412000000646973747574696c732e66696c656c697374 *740800000066696c656c6973742800000000280000000028000000007340000000433a5c746168 *6f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574 *7570746f6f6c735c5f5f696e69745f5f2e707974080000003c6d6f64756c653e01000000732800 *0000060116011c0118011001100110010c0206021201090306020f180c020c0216110c010c020f *0d0c01 addfile ./setuptools-0.6c14devdev.egg/setuptools/archive_util.py hunk ./setuptools-0.6c14devdev.egg/setuptools/archive_util.py 1 +"""Utilities for extracting common archive formats""" + + +__all__ = [ + "unpack_archive", "unpack_zipfile", "unpack_tarfile", "default_filter", + "UnrecognizedFormat", "extraction_drivers", "unpack_directory", +] + +import zipfile, tarfile, os, shutil +from pkg_resources import ensure_directory +from distutils.errors import DistutilsError + +class UnrecognizedFormat(DistutilsError): + """Couldn't recognize the archive type""" + +def default_filter(src,dst): + """The default progress/filter callback; returns True for all files""" + return dst + + + + + + + + + + + + + + + + + + + + + + + +def unpack_archive(filename, extract_dir, progress_filter=default_filter, + drivers=None +): + """Unpack `filename` to `extract_dir`, or raise ``UnrecognizedFormat`` + + `progress_filter` is a function taking two arguments: a source path + internal to the archive ('/'-separated), and a filesystem path where it + will be extracted. The callback must return the desired extract path + (which may be the same as the one passed in), or else ``None`` to skip + that file or directory. The callback can thus be used to report on the + progress of the extraction, as well as to filter the items extracted or + alter their extraction paths. + + `drivers`, if supplied, must be a non-empty sequence of functions with the + same signature as this function (minus the `drivers` argument), that raise + ``UnrecognizedFormat`` if they do not support extracting the designated + archive type. The `drivers` are tried in sequence until one is found that + does not raise an error, or until all are exhausted (in which case + ``UnrecognizedFormat`` is raised). If you do not supply a sequence of + drivers, the module's ``extraction_drivers`` constant will be used, which + means that ``unpack_zipfile`` and ``unpack_tarfile`` will be tried, in that + order. + """ + for driver in drivers or extraction_drivers: + try: + driver(filename, extract_dir, progress_filter) + except UnrecognizedFormat: + continue + else: + return + else: + raise UnrecognizedFormat( + "Not a recognized archive type: %s" % filename + ) + + + + + + + +def unpack_directory(filename, extract_dir, progress_filter=default_filter): + """"Unpack" a directory, using the same interface as for archives + + Raises ``UnrecognizedFormat`` if `filename` is not a directory + """ + if not os.path.isdir(filename): + raise UnrecognizedFormat("%s is not a directory" % (filename,)) + + paths = {filename:('',extract_dir)} + for base, dirs, files in os.walk(filename): + src,dst = paths[base] + for d in dirs: + paths[os.path.join(base,d)] = src+d+'/', os.path.join(dst,d) + for f in files: + name = src+f + target = os.path.join(dst,f) + target = progress_filter(src+f, target) + if not target: + continue # skip non-files + ensure_directory(target) + f = os.path.join(base,f) + shutil.copyfile(f, target) + shutil.copystat(f, target) + + + + + + + + + + + + + + + + + + +def unpack_zipfile(filename, extract_dir, progress_filter=default_filter): + """Unpack zip `filename` to `extract_dir` + + Raises ``UnrecognizedFormat`` if `filename` is not a zipfile (as determined + by ``zipfile.is_zipfile()``). See ``unpack_archive()`` for an explanation + of the `progress_filter` argument. + """ + + if not zipfile.is_zipfile(filename): + raise UnrecognizedFormat("%s is not a zip file" % (filename,)) + + z = zipfile.ZipFile(filename) + try: + for info in z.infolist(): + name = info.filename + + # don't extract absolute paths or ones with .. in them + if name.startswith('/') or '..' in name: + continue + + target = os.path.join(extract_dir, *name.split('/')) + target = progress_filter(name, target) + if not target: + continue + if name.endswith('/'): + # directory + ensure_directory(target) + else: + # file + ensure_directory(target) + data = z.read(info.filename) + f = open(target,'wb') + try: + f.write(data) + finally: + f.close() + del data + finally: + z.close() + + +def unpack_tarfile(filename, extract_dir, progress_filter=default_filter): + """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` + + Raises ``UnrecognizedFormat`` if `filename` is not a tarfile (as determined + by ``tarfile.open()``). See ``unpack_archive()`` for an explanation + of the `progress_filter` argument. + """ + + try: + tarobj = tarfile.open(filename) + except tarfile.TarError: + raise UnrecognizedFormat( + "%s is not a compressed or uncompressed tar file" % (filename,) + ) + + try: + tarobj.chown = lambda *args: None # don't do any chowning! + for member in tarobj: + if member.isfile() or member.isdir(): + name = member.name + # don't extract absolute paths or ones with .. in them + if not name.startswith('/') and '..' not in name: + dst = os.path.join(extract_dir, *name.split('/')) + dst = progress_filter(name, dst) + if dst: + if dst.endswith(os.sep): + dst = dst[:-1] + try: + tarobj._extract_member(member,dst) # XXX Ugh + except tarfile.ExtractError: + pass # chown/chmod/mkfifo/mknode/makedev failed + return True + finally: + tarobj.close() + + + + +extraction_drivers = unpack_directory, unpack_zipfile, unpack_tarfile + + addfile ./setuptools-0.6c14devdev.egg/setuptools/archive_util.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/archive_util.pyc oldhex * newhex *d1f20d0a341ef84b630000000000000000090000004000000073d60000006400005a0000640100 *6402006403006404006405006406006407006707005a01006408006409006b02005a0200640800 *6409006b03005a03006408006409006b04005a04006408006409006b05005a0500640800640a00 *6b06006c07005a070001640800640b006b08006c09005a090001640500650900660100640c0084 *0000830000595a0a00640d008400005a0b00650b00640900640e008402005a0d00650b00640f00 *8401005a0e00650b006410008401005a0f00650b006411008401005a1000650e00650f00651000 *6603005a1100640900532812000000732f0000005574696c697469657320666f72206578747261 *6374696e6720636f6d6d6f6e206172636869766520666f726d617473740e000000756e7061636b *5f61726368697665740e000000756e7061636b5f7a697066696c65740e000000756e7061636b5f *74617266696c65740e00000064656661756c745f66696c7465727412000000556e7265636f676e *697a6564466f726d6174741200000065787472616374696f6e5f64726976657273741000000075 *6e7061636b5f6469726563746f727969ffffffff4e28010000007410000000656e737572655f64 *69726563746f72792801000000740e000000446973747574696c734572726f7263000000000000 *00000100000042000000730e0000006500005a01006400005a0200525328010000007323000000 *436f756c646e2774207265636f676e697a65207468652061726368697665207479706528030000 *0074080000005f5f6e616d655f5f740a0000005f5f6d6f64756c655f5f74070000005f5f646f63 *5f5f2800000000280000000028000000007344000000433a5c7461686f652d6c6166735c736574 *7570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c617263 *686976655f7574696c2e707952040000000d000000730200000006016302000000020000000100 *00004300000073040000007c010053280100000073400000005468652064656661756c74207072 *6f67726573732f66696c7465722063616c6c6261636b3b2072657475726e73205472756520666f *7220616c6c2066696c657328000000002802000000740300000073726374030000006473742800 *00000028000000007344000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c7365747570746f6f6c735c617263686976655f7574696c *2e7079520300000010000000730200000000026304000000050000000800000043000000735d00 *00007856007c030070040001740000445d37007d04007914007c04007c00007c01007c02008303 *0001576e1600047401006a0a006f0a0001010101710e00710e00015864010053710e0057740100 *6402007c00001683010082010064010053280300000073a1040000556e7061636b206066696c65 *6e616d656020746f2060657874726163745f646972602c206f72207261697365206060556e7265 *636f676e697a6564466f726d617460600a0a202020206070726f67726573735f66696c74657260 *20697320612066756e6374696f6e2074616b696e672074776f20617267756d656e74733a206120 *736f7572636520706174680a20202020696e7465726e616c20746f207468652061726368697665 *2028272f272d736570617261746564292c20616e6420612066696c6573797374656d2070617468 *2077686572652069740a2020202077696c6c206265206578747261637465642e20205468652063 *616c6c6261636b206d7573742072657475726e2074686520646573697265642065787472616374 *20706174680a20202020287768696368206d6179206265207468652073616d6520617320746865 *206f6e652070617373656420696e292c206f7220656c73652060604e6f6e65606020746f20736b *69700a20202020746861742066696c65206f72206469726563746f72792e20205468652063616c *6c6261636b2063616e2074687573206265207573656420746f207265706f7274206f6e20746865 *0a2020202070726f6772657373206f66207468652065787472616374696f6e2c2061732077656c *6c20617320746f2066696c74657220746865206974656d7320657874726163746564206f720a20 *202020616c7465722074686569722065787472616374696f6e2070617468732e0a0a2020202060 *64726976657273602c20696620737570706c6965642c206d7573742062652061206e6f6e2d656d *7074792073657175656e6365206f662066756e6374696f6e732077697468207468650a20202020 *73616d65207369676e617475726520617320746869732066756e6374696f6e20286d696e757320 *7468652060647269766572736020617267756d656e74292c20746861742072616973650a202020 *206060556e7265636f676e697a6564466f726d61746060206966207468657920646f206e6f7420 *737570706f72742065787472616374696e67207468652064657369676e617465640a2020202061 *72636869766520747970652e202054686520606472697665727360206172652074726965642069 *6e2073657175656e636520756e74696c206f6e6520697320666f756e6420746861740a20202020 *646f6573206e6f7420726169736520616e206572726f722c206f7220756e74696c20616c6c2061 *7265206578686175737465642028696e20776869636820636173650a202020206060556e726563 *6f676e697a6564466f726d6174606020697320726169736564292e2020496620796f7520646f20 *6e6f7420737570706c7920612073657175656e6365206f660a20202020647269766572732c2074 *6865206d6f64756c65277320606065787472616374696f6e5f64726976657273606020636f6e73 *74616e742077696c6c20626520757365642c2077686963680a202020206d65616e732074686174 *206060756e7061636b5f7a697066696c65606020616e64206060756e7061636b5f74617266696c *6560602077696c6c2062652074726965642c20696e20746861740a202020206f726465722e0a20 *2020204e73210000004e6f742061207265636f676e697a6564206172636869766520747970653a *2025732802000000520500000052040000002805000000740800000066696c656e616d65740b00 *0000657874726163745f646972740f00000070726f67726573735f66696c746572740700000064 *7269766572737406000000647269766572280000000028000000007344000000433a5c7461686f *652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c73657475 *70746f6f6c735c617263686976655f7574696c2e707952000000002a000000731200000000170e *000601030114010e0108020802030163030000000d0000000700000043000000734b0100007400 *006901006902007c0000830100701700017403006401007c0000660100168301008201006e0100 *016801006402007c01006602007c0000367d03007807017400006904007c0000830100445df600 *5c03007d04007d05007d06007c03007c0400195c02007d07007d08007844007c0500445d3c007d *09007c07007c090017640300177400006901006905007c08007c09008302006602007c03007400 *006901006905007c04007c09008302003c71730057788d007c0600445d85007d0a007c07007c0a *00177d0b007400006901006905007c08007c0a008302007d0c007c02007c07007c0a00177c0c00 *8302007d0c007c0c007007000171ba006e0100017406007c0c0083010001740000690100690500 *7c04007c0a008302007d0a007407006908007c0a007c0c00830200017407006909007c0a007c0c *008302000171ba0057714d0057640400532805000000738700000022556e7061636b2220612064 *69726563746f72792c207573696e67207468652073616d6520696e746572666163652061732066 *6f722061726368697665730a0a20202020526169736573206060556e7265636f676e697a656446 *6f726d61746060206966206066696c656e616d6560206973206e6f742061206469726563746f72 *790a2020202073150000002573206973206e6f742061206469726563746f727974000000007401 *0000002f4e280a00000074020000006f7374040000007061746874050000006973646972520400 *0000740400000077616c6b74040000006a6f696e5207000000740600000073687574696c740800 *0000636f707966696c657408000000636f707973746174280d000000520e000000520f00000052 *100000007405000000706174687374040000006261736574040000006469727374050000006669 *6c6573520c000000520d00000074010000006474010000006674040000006e616d657406000000 *746172676574280000000028000000007344000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c61726368 *6976655f7574696c2e70795206000000530000007328000000000513011702130110000f011001 *070006013a01070006010a0115011301070107010a011501100163030000000900000009000000 *4300000073360100007400006901007c0000830100701700017402006401007c00006601001683 *01008201006e0100017400006903007c00008301007d03007aee0078e7007c0300690400830000 *445dd9007d04007c04006905007d05007c0500690600640200830100700d00016403007c05006a *06006f0700017146006e0100017407006908006909007c01007c0500690a006402008301008c01 *007d06007c02007c05007c06008302007d06007c0600700700017146006e0100017c0500690b00 *6402008301006f0e0001740c007c06008301000171460001740c007c0600830100017c0300690d *007c04006905008301007d0700740e007c06006404008302007d08007a11007c0800690f007c07 *0083010001576405007c0800691000830000017e07005871460057576405007c03006910008300 *00015864050053280600000073f2000000556e7061636b207a6970206066696c656e616d656020 *746f2060657874726163745f646972600a0a20202020526169736573206060556e7265636f676e *697a6564466f726d61746060206966206066696c656e616d6560206973206e6f742061207a6970 *66696c65202861732064657465726d696e65640a2020202062792060607a697066696c652e6973 *5f7a697066696c6528296060292e2020536565206060756e7061636b5f61726368697665282960 *6020666f7220616e206578706c616e6174696f6e0a202020206f6620746865206070726f677265 *73735f66696c7465726020617267756d656e742e0a2020202073140000002573206973206e6f74 *2061207a69702066696c65521400000073020000002e2e740200000077624e2811000000740700 *00007a697066696c65740a00000069735f7a697066696c65520400000074070000005a69704669 *6c657408000000696e666f6c697374520e000000740a0000007374617274737769746852150000 *0052160000005219000000740500000073706c69747408000000656e6473776974685207000000 *74040000007265616474040000006f70656e740500000077726974657405000000636c6f736528 *09000000520e000000520f000000521000000074010000007a7404000000696e666f5223000000 *52240000007404000000646174615222000000280000000028000000007344000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365 *747570746f6f6c735c617263686976655f7574696c2e707952010000007c000000732e00000000 *08100117020f0103010d00060109031d0107021e010f010701070110020e030a0112010f010301 *11020a010c026303000000070000000e0000004300000073450100007913007400006901007c00 *008301007d0300576e2900047400006902006a0a006f1a00010101017403006401007c00006601 *00168301008201006e020001587af4006402008400007c03005f040078dd007c0300445dd5007d *04007c0400690500830000700d00017c04006906008300006fb500017c04006907007d05007c05 *006908006403008301000c6f9700016404007c05006a07006f8a0001740900690a00690b007c01 *007c0500690c006403008301008c01007d06007c02007c05007c06008302007d06007c06006f52 *00017c0600690d00740900690e008301006f0e00017c0600640500207d06006e0100017914007c *0300690f007c04007c06008302000157712201047400006910006a0a006f070001010101712201 *015871260101712a0101715500017155005774110053576406007c030069120083000001586406 *0053280700000073fb000000556e7061636b207461722f7461722e677a2f7461722e627a322060 *66696c656e616d656020746f2060657874726163745f646972600a0a2020202052616973657320 *6060556e7265636f676e697a6564466f726d61746060206966206066696c656e616d6560206973 *206e6f7420612074617266696c65202861732064657465726d696e65640a202020206279206060 *74617266696c652e6f70656e28296060292e2020536565206060756e7061636b5f617263686976 *652829606020666f7220616e206578706c616e6174696f6e0a202020206f662074686520607072 *6f67726573735f66696c7465726020617267756d656e742e0a20202020732f0000002573206973 *206e6f74206120636f6d70726573736564206f7220756e636f6d70726573736564207461722066 *696c65630000000001000000010000005700000073040000006400005328010000004e28010000 *0074040000004e6f6e652801000000740400000061726773280000000028000000007344000000 *433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e65 *67675c7365747570746f6f6c735c617263686976655f7574696c2e707974080000003c6c616d62 *64613eb50000007300000000521400000073020000002e2e69ffffffff4e281300000074070000 *0074617266696c65522e00000074080000005461724572726f725204000000740500000063686f *776e7406000000697366696c6552170000005223000000522a0000005215000000521600000052 *19000000522b000000522c0000007403000000736570740f0000005f657874726163745f6d656d *626572740c000000457874726163744572726f7274040000005472756552300000002807000000 *520e000000520f000000521000000074060000007461726f626a74060000006d656d6265725223 *000000520d000000280000000028000000007344000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c6172 *63686976655f7574696c2e70795202000000a5000000732e000000000803011301110103011503 *03010c01070006011a0109021e011e010f01070113010e01030114011101150108022812000000 *520b00000074070000005f5f616c6c5f5f522600000052370000005215000000521a000000740d *000000706b675f7265736f757263657352070000007410000000646973747574696c732e657272 *6f7273520800000052040000005203000000523400000052000000005206000000520100000052 *0200000052050000002800000000280000000028000000007344000000433a5c7461686f652d6c *6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f *6f6c735c617263686976655f7574696c2e707974080000003c6d6f64756c653e01000000731a00 *000006040c010f033001100110021603091a03010c280c290c290c26 addfile ./setuptools-0.6c14devdev.egg/setuptools/cli.exe binary ./setuptools-0.6c14devdev.egg/setuptools/cli.exe oldhex * newhex *4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000 *000000000000000000000000000000000000000000800000000e1fba0e00b409cd21b8014ccd21 *546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e *0d0d0a2400000000000000504500004c01050049c7b7450000000000000000e0000f030b010238 *000e00000008000000020000701200000010000000200000000040000010000000020000040000 *000100000004000000000000000060000000040000ef6c00000300000000002000001000000000 *1000001000000000000010000000000000000000000000500000d4030000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000002e74657874000000f00c00000010 *0000000e000000040000000000000000000000000000200000602e646174610000003000000000 *2000000002000000120000000000000000000000000000400000c02e7264617461000050000000 *003000000002000000140000000000000000000000000000400000402e62737300000000600000 *00004000000000000000000000000000000000000000000000800000c02e69646174610000d403 *0000005000000004000000160000000000000000000000000000400000c0000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000005589e583ec18895df88b450831db8975fc8b0031f68b003d910000c077 *433d8d0000c0725bbe01000000c704240800000031d289542404e8740b000083f801747a85c074 *0ec7042408000000ffd0bbffffffff89d88b75fc8b5df889ec5dc204003d940000c074c2774a3d *930000c074b489d88b75fc8b5df889ec5dc20400903d050000c0745b3d1d0000c075c5c7042404 *00000031f689742404e8100b000083f801746a85c074aac7042404000000ffd0eb9a3d960000c0 *ebd1c7042408000000b80100000089442404e8e00a000085f60f8476ffffffe863090000e96cff *ffffc704240b00000031c089442404e8bc0a000083f801743085c00f8452ffffffc704240b0000 *00ffd0e93fffffffc7042404000000b901000000894c2404e88c0a0000e925ffffffc704240b00 *0000b80100000089442404e8720a0000e90bffffff8db6000000008dbc27000000005589e55383 *ec24c7042400104000e8fd0a000083ec04e8d5080000c745f8000000008d45f889442410a10020 *4000c70424044040008944240c8d45f489442408b80040400089442404e8420a0000a110404000 *85c07459a3102040008b151c51400085d20f858b00000083fae0741fa11040400089442404a11c *5140008b4030890424e8f80900008b151c51400083fac0741da11040400089442404a11c514000 *8b4050890424e8d40900008d742600e8bb0900008b15102040008910e8fe07000083e4f0e88609 *00008b0089442408a10040400089442404a104404000890424e8ba06000089c3e853090000891c *24e82b0a000089442404a11c5140008b4010890424e8770900008b151c514000e956ffffff8db6 *000000008dbf000000005589e583ec08c7042401000000ff1514514000e8c8feffff908db42600 *0000005589e583ec08c7042402000000ff1514514000e8a8feffff908db42600000000558b0d30 *51400089e55dffe18d742600558b0d2451400089e55dffe1909090905589e583ec188b450c8944 *24088b450889442404a11c51400083c040890424e85c090000b802000000c9c35589e557565383 *ec0c8b750889f7fcb9ffffffffb000f2aef7d18d79ffc7442404010000008d443f03890424e814 *0900008945f0c6002289c242b900000000bb0000000039f97d33803c1e5c750341eb1e803c1e22 *751385c97e09c6025c424985c97ff7c6025c42eb05b9000000000fb6041e8802424339fb7ccd85 *c97e09c6025c424985c97ff7c60222c64201008b45f083c40c5b5e5f5dc35589e5565383ec10c7 *44240808000000c7442404000000008b4508890424e8c808000083ec0c89c6b80000000085f674 *3ec744240401000000c7042404010000e86608000089c385c07417c74424080401000089442404 *893424e89c08000083ec0c893424e8a108000083ec0489d88d65f85b5e5dc35589e557565381ec *4c0400008b75088d5e010fb61684d2741380fa2f7504c643ff5c0fb6034388c284c075ed8d85d8 *fcffff894424108d85d8fdffff8944240c8d85d8feffff894424088d45d889442404893424e8cc *070000807dd800750980bdd8feffff5c750d893424e81affffffe9990000008d85d8fcffff8944 *24108d85d8fdffff8944240c8d9dd8feffff895c24088d45d8894424048b450c890424e8800700 *0089dffcb9ffffffffb000f2aef7d18d5c19fe803b5c75064b803b5c74198d85d8feffff89c239 *d8770dc603004b803b5c740439da76f3c7442410000000008974240c8d85d8feffff894424088d *45d8894424048d9dc8fbffff891c24e80f070000891c24e87cfeffff81c44c0400005b5e5f5dc3 *5589e557565383ec1c8b5d0889dffcb9ffffffffb000f2aef7d149c744240404000000890c24e8 *f10600008945f089debf00000000c745e8000000008b450cc700000000008b55f0891aeb01430f *be03890424e89406000085c075f00fb603438845ef84c074150fbec0890424e87a06000085c074 *47837de800754185ff7407c6065c464f75f9c60600468b550c8b024089028b55f0893482807def *00750589d0eb65430fbe03890424e83d06000085c075f0803b0075a48b45f0eb4b807def5c7503 *47eb96807def22751bf7c7010000007511837de8000f94c00fb6c08945e8c645ef00d1ff85ff74 *07c6065c464f75f9807def000f8460ffffff0fb645ef880646e954ffffff83c41c5b5e5f5dc355 *89e557565381ec2c020000c7442408000100008d9de8fdffff895c2404c7042400000000e83206 *000083ec0c89dffcb9ffffffffb000f2aef7d18d7419ff39f37314803e2e740f89d8c606004e39 *f07305803e2e75f3c606008db5e8fdffff89f7fcb9ffffffffb000f2aef7d149c7040e2d736372 *c7440e046970742e66c7440e087079c6440e0a00c744240400000000893424e8a204000089c383 *f8ff751589742404c7042400304000e8ebfbffffe9c50100008db5e8feffffc744240800010000 *89742404890424e85c04000001c6891c24e8420400008dbde7feffff4739f7730f803f00740a80 *3f0a7405803f0d75ecc607008db5e8feffffbf10304000b902000000fcf3a60f97c20f92c038c2 *7425c785e8feffff23217079c785ecfeffff74686f6ec785f0feffff2e657865c685f4feffff00 *8d85e4fdffff894424048d85eafeffff890424e89ffdffff8985dcfdffff8d85e8fdffff894424 *048b95dcfdffff8b02890424e866fcffff89c785c0751d8b95dcfdffff8b0289442404c7042414 *304000e80dfbffffe9e7000000c7442404040000008b45080385e4fdffff40890424e85e040000 *8985e0fdffff893c24e80bfbffff8b95e0fdffff890289d383c304be010000003bb5e4fdffff7d *1f8b95dcfdffff8b04b2890424e8e0faffff890383c304463bb5e4fdffff7ce18d85e8fdffff89 *0424e8c4faffff890383c304be010000003b75087d198b550c8b04b2890424e8a7faffff890383 *c304463b75087ce7c70300000000837d1000742a8b85e0fdffff894424048d9de8feffff891c24 *e8bd020000895c2404c7042436304000e83dfaffffeb1a8b95e0fdffff89542408897c2404c704 *2400000000e8810200008d65f45b5e5f5dc35589e55383ec14e82d03000089c3e836030000c744 *2408000000008b13895424048b00890424e852fdffff83c4145b5dc2100090909090909055b810 *00000089e55383ec6483e4f0e8fc010000e8d7010000e8a203000089c38d45a8890424e8a50300 *0083ec0485db7506e99d000000430fb60b80f9200f94c080f9090f94c209d0a80175ea80f92274 *3e80f9200f95c031d280f9090f95c285d0744c8db6000000008dbf0000000084c9743c430fb60b *80f9200f95c031d280f9090f95c285d075e6eb248d742600430fb60b80f9220f95c031d284c90f *95c285d075eb80f92274668db60000000080f9200f94c080f9090f94c2eb1089f6430fb6033c20 *0f94c23c090f94c009d0a80175ecc7042400000000e80003000083ec04f645d401ba0a00000074 *040fb755d88954240c31d2895c240889542404890424e8bffeffff83ec108b5dfcc9c3430fb60b *eb9a9090909090909090909055b95030400089e5eb148db6000000008b51048b0183c108018200 *00400081f95030400072ea5dc390909090909090905589e5dbe35dc39090909090909090905589 *e583ec08a1202040008338007417ff108b15202040008d42048b5204a32020400085d275e9c9c3 *8db426000000005589e55383ec04a1e01c400083f8ff742985c089c3741389f68dbc2700000000 *ff149de01c40004b75f6c70424501a4000e8faf7ffff595b5dc331c0833de41c400000eb0a408b *1c85e41c400085db75f4ebbe8db6000000008dbc270000000055a12040400089e585c074045dc3 *89f65db801000000a320404000eb839090905189e183c1083d00100000721081e9001000008309 *002d00100000ebe929c183090089e089cc8b088b4004ffe0909090ff25f4504000909000000000 *00000000ff25e850400090900000000000000000ff25e450400090900000000000000000ff25f0 *50400090900000000000000000ff25ec50400090900000000000000000ff251451400090900000 *000000000000ff251851400090900000000000000000ff250c51400090900000000000000000ff *254051400090900000000000000000ff251051400090900000000000000000ff25285140009090 *0000000000000000ff250051400090900000000000000000ff2508514000909000000000000000 *00ff250451400090900000000000000000ff253c51400090900000000000000000ff2520514000 *90900000000000000000ff252c51400090900000000000000000ff253451400090900000000000 *000000ff253851400090900000000000000000ff256851400090900000000000000000ff254c51 *400090900000000000000000ff256451400090900000000000000000ff25585140009090000000 *0000000000ff255051400090900000000000000000ff255451400090900000000000000000ff25 *6051400090900000000000000000ff255c51400090900000000000000000ffffffff00000000ff *ffffff000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000ffffffff00000000000000000000000000400000000000000000000000000000ec *1c4000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000043616e6e6f74206f70656e2025730a002321000043616e6e6f742066 *696e6420507974686f6e2065786563757461626c652025730a00436f756c64206e6f7420657865 *632025730000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *0000000000000000000000000000000054500000000000000000000048530000e4500000705000 *0000000000000000009853000000510000bc5000000000000000000000c45300004c5100000000 *00000000000000000000000000000000000000000000705100007c510000885100009051000098 *5100000000000000000000a4510000b4510000c4510000d4510000e4510000f451000008520000 *145200001c520000285200003452000040520000505200005c5200006852000074520000805200 *0000000000000000008c5200009c520000ac520000c0520000d8520000ec520000005300001453 *00000000000000000000705100007c5100008851000090510000985100000000000000000000a4 *510000b4510000c4510000d4510000e4510000f451000008520000145200001c52000028520000 *3452000040520000505200005c52000068520000745200008052000000000000000000008c5200 *009c520000ac520000c0520000d8520000ec52000000530000145300000000000006005f636c6f *73650000000012005f6578656376000000003a005f6f70656e0040005f72656164004b005f7370 *61776e7600000027005f5f6765746d61696e617267730031005f5f705f5f5f6172676300000000 *32005f5f705f5f5f61726776000000003c005f5f705f5f656e7669726f6e00003e005f5f705f5f *666d6f64650000000050005f5f7365745f6170705f747970650000000079005f63657869740000 *0000e9005f696f6200001f015f6d616b6570617468005e015f6f6e6578697400000084015f7365 *746d6f6465000092015f73706c697470617468000000001c026174657869740000000021026361 *6c6c6f63000000003902667072696e74660000005a026973737061636500000090027369676e61 *6c000000009b004578697450726f63657373000000d500467265654c696272617279000000ec00 *476574436f6d6d616e644c696e65410000004d014765744d6f64756c6546696c654e616d654100 *0000004f014765744d6f64756c6548616e646c65410000800147657453746172747570496e666f *410000000b024c6f61644c69627261727945784100000000df02536574556e68616e646c656445 *7863657074696f6e46696c74657200000000500000005000000050000000500000005000006d73 *766372742e646c6c00001450000014500000145000001450000014500000145000001450000014 *500000145000001450000014500000145000001450000014500000145000001450000014500000 *6d73766372742e646c6c0000285000002850000028500000285000002850000028500000285000 *00285000004b45524e454c33322e646c6c00000000000000000000000000000000000000000000 *0000000000000000000000000000000000000000000000000000 adddir ./setuptools-0.6c14devdev.egg/setuptools/command addfile ./setuptools-0.6c14devdev.egg/setuptools/command/__init__.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/__init__.py 1 +__all__ = [ + 'alias', 'bdist_egg', 'bdist_rpm', 'build_ext', 'build_py', 'develop', + 'easy_install', 'egg_info', 'install', 'install_lib', 'rotate', 'saveopts', + 'sdist', 'setopt', 'test', 'upload', 'install_egg_info', 'install_scripts', + 'register', 'bdist_wininst', +] + +import sys +if sys.version>='2.5': + # In Python 2.5 and above, distutils includes its own upload command + __all__.remove('upload') + + +from distutils.command.bdist import bdist + +if 'egg' not in bdist.format_commands: + bdist.format_command['egg'] = ('bdist_egg', "Python .egg file") + bdist.format_commands.append('egg') + +del bdist, sys addfile ./setuptools-0.6c14devdev.egg/setuptools/command/__init__.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/__init__.pyc oldhex * newhex *d1f20d0a361ef84b630000000000000000140000004000000073ba000000640000640100640200 *640300640400640500640600640700640800640900640a00640b00640c00640d00640e00640f00 *6410006411006412006413006714005a00006414006415006b01005a0100650100690200641600 *6a05006f110001650000690300640f00830100016e0100016414006417006b04006c05005a0500 *016418006505006906006a07006f210001641a006505006907006418003c650500690600690800 *641800830100016e0100015b05005b010064150053281b0000007405000000616c696173740900 *000062646973745f656767740900000062646973745f72706d74090000006275696c645f657874 *74080000006275696c645f70797407000000646576656c6f70740c000000656173795f696e7374 *616c6c74080000006567675f696e666f7407000000696e7374616c6c740b000000696e7374616c *6c5f6c69627406000000726f746174657408000000736176656f70747374050000007364697374 *74060000007365746f7074740400000074657374740600000075706c6f61647410000000696e73 *74616c6c5f6567675f696e666f740f000000696e7374616c6c5f73637269707473740800000072 *65676973746572740d00000062646973745f77696e696e737469ffffffff4e7303000000322e35 *28010000007405000000626469737474030000006567677310000000507974686f6e202e656767 *2066696c65280200000052010000007310000000507974686f6e202e6567672066696c65280900 *000074070000005f5f616c6c5f5f7403000000737973740700000076657273696f6e7406000000 *72656d6f76657417000000646973747574696c732e636f6d6d616e642e62646973745214000000 *740f000000666f726d61745f636f6d6d616e6473740e000000666f726d61745f636f6d6d616e64 *7406000000617070656e642800000000280000000028000000007348000000433a5c7461686f65 *2d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570 *746f6f6c735c636f6d6d616e645c5f5f696e69745f5f2e707974080000003c6d6f64756c653e02 *00000073160000001201120112010c030c0110021103100210010d011402 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/alias.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/alias.py 1 +import distutils, os +from setuptools import Command +from distutils.util import convert_path +from distutils import log +from distutils.errors import * +from setuptools.command.setopt import edit_config, option_base, config_file + +def shquote(arg): + """Quote an argument for later parsing by shlex.split()""" + for c in '"', "'", "\\", "#": + if c in arg: return repr(arg) + if arg.split()<>[arg]: + return repr(arg) + return arg + + +class alias(option_base): + """Define a shortcut that invokes one or more commands""" + + description = "define a shortcut to invoke one or more commands" + command_consumes_arguments = True + + user_options = [ + ('remove', 'r', 'remove (unset) the alias'), + ] + option_base.user_options + + boolean_options = option_base.boolean_options + ['remove'] + + def initialize_options(self): + option_base.initialize_options(self) + self.args = None + self.remove = None + + def finalize_options(self): + option_base.finalize_options(self) + if self.remove and len(self.args)<>1: + raise DistutilsOptionError( + "Must specify exactly one argument (the alias name) when " + "using --remove" + ) + + def run(self): + aliases = self.distribution.get_option_dict('aliases') + + if not self.args: + print "Command Aliases" + print "---------------" + for alias in aliases: + print "setup.py alias", format_alias(alias, aliases) + return + + elif len(self.args)==1: + alias, = self.args + if self.remove: + command = None + elif alias in aliases: + print "setup.py alias", format_alias(alias, aliases) + return + else: + print "No alias definition found for %r" % alias + return + else: + alias = self.args[0] + command = ' '.join(map(shquote,self.args[1:])) + + edit_config(self.filename, {'aliases': {alias:command}}, self.dry_run) + + +def format_alias(name, aliases): + source, command = aliases[name] + if source == config_file('global'): + source = '--global-config ' + elif source == config_file('user'): + source = '--user-config ' + elif source == config_file('local'): + source = '' + else: + source = '--filename=%r' % source + return source+name+' '+command addfile ./setuptools-0.6c14devdev.egg/setuptools/command/alias.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/alias.pyc oldhex * newhex *d1f20d0a381ef84b6300000000000000000a00000040000000739a0000006400006401006b0000 *5a00006400006401006b01005a01006400006402006b02006c03005a0300016400006403006b04 *006c05005a0500016400006404006b00006c06005a0600016400006405006b0700546400006406 *006b08006c09005a09006c0a005a0a006c0b005a0b00016407008400005a0c00640800650a0066 *0100640900840000830000595a0d00640a008400005a0e0064010053280b00000069ffffffff4e *28010000007407000000436f6d6d616e642801000000740c000000636f6e766572745f70617468 *280100000074030000006c6f67280100000074010000002a2803000000740b000000656469745f *636f6e666967740b0000006f7074696f6e5f62617365740b000000636f6e6669675f66696c6563 *01000000020000000400000043000000734e000000782600640500445d1e007d01007c01007c00 *006a06006f0b00017400007c00008301005301710700577c00006901008300007c00006701006a *03006f0b00017400007c000083010053017c0000532806000000733400000051756f746520616e *20617267756d656e7420666f72206c617465722070617273696e672062792073686c65782e7370 *6c6974282974010000002274010000002773010000005c74010000002328040000005207000000 *520800000073010000005c52090000002802000000740400000072657072740500000073706c69 *74280200000074030000006172677401000000632800000000280000000073310000006275696c *645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c616c *6961732e70797407000000736871756f746508000000730e0000000002070006010d000f011601 *0b017405000000616c696173630000000000000000030000004200000073550000006500005a01 *006400005a02006401005a03006504005a0500640800670100650600690700175a070065060069 *0800640200670100175a08006405008400005a09006406008400005a0a006407008400005a0b00 *525328090000007333000000446566696e6520612073686f7274637574207468617420696e766f *6b6573206f6e65206f72206d6f726520636f6d6d616e64737330000000646566696e6520612073 *686f727463757420746f20696e766f6b65206f6e65206f72206d6f726520636f6d6d616e647374 *0600000072656d6f7665740100000072731800000072656d6f76652028756e7365742920746865 *20616c696173630100000001000000020000004300000073230000007400006901007c00008301 *00016400007c00005f03006400007c00005f04006400005328010000004e280500000052050000 *007412000000696e697469616c697a655f6f7074696f6e7374040000004e6f6e65740400000061 *72677352100000002801000000740400000073656c662800000000280000000073310000006275 *696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c *616c6961732e707952120000001d000000730600000000010d0109016301000000010000000200 *00004300000073410000007400006901007c0000830100017c00006902006f2600017403007c00 *006904008301006401006a03006f1000017405006402008301008201006e010001640000532803 *0000004e690100000073460000004d75737420737065636966792065786163746c79206f6e6520 *617267756d656e74202874686520616c696173206e616d6529207768656e207573696e67202d2d *72656d6f766528060000005205000000741000000066696e616c697a655f6f7074696f6e735210 *00000074030000006c656e52140000007414000000446973747574696c734f7074696f6e457272 *6f72280100000052150000002800000000280000000073310000006275696c645c62646973742e *77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c616c6961732e70795216 *00000022000000730800000000010d01200103016301000000040000000800000043000000730d *0100007c00006900006901006401008301007d01007c0000690200703200016402004748640300 *47487820007c0100445d18007d0200640400477403007c02007c01008302004748712d00576400 *0053017404007c00006902008301006405006a02006f5500017c00006902005c01007d02007c00 *006905006f0a00016400007d030071e500017c02007c01006a06006f170001640400477403007c *02007c0100830200474864000053016406007c0200164748640000536e2d00017c000069020064 *0700197d02006408006907007408007409007c00006902006405001f8302008301007d0300740a *007c0000690b006801006801007c03007c020036640100367c0000690c00830300016400005328 *090000004e7407000000616c6961736573730f000000436f6d6d616e6420416c6961736573730f *0000002d2d2d2d2d2d2d2d2d2d2d2d2d2d2d730e00000073657475702e707920616c6961736901 *00000073200000004e6f20616c69617320646566696e6974696f6e20666f756e6420666f722025 *726900000000740100000020280d000000740c000000646973747269627574696f6e740f000000 *6765745f6f7074696f6e5f646963745214000000740c000000666f726d61745f616c6961735217 *0000005210000000521300000074040000006a6f696e74030000006d6170520e00000052040000 *00740800000066696c656e616d6574070000006472795f72756e28040000005215000000521900 *0000520f0000007407000000636f6d6d616e642800000000280000000073310000006275696c64 *5c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c616c69 *61732e7079740300000072756e2a0000007328000000000112020a010501050107000601160105 *0216010c010a010a010d0112010502090108020d011f022803000000730600000072656d6f7665 *5211000000731800000072656d6f76652028756e736574292074686520616c696173280c000000 *74080000005f5f6e616d655f5f740a0000005f5f6d6f64756c655f5f74070000005f5f646f635f *5f740b0000006465736372697074696f6e740400000054727565741a000000636f6d6d616e645f *636f6e73756d65735f617267756d656e74735205000000740c000000757365725f6f7074696f6e *73740f000000626f6f6c65616e5f6f7074696f6e73521200000052160000005223000000280000 *00002800000000280000000073310000006275696c645c62646973742e77696e33325c6567675c *7365747570746f6f6c735c636f6d6d616e645c616c6961732e7079520f00000011000000731200 *0000060106020601060306010a0210020905090863020000000400000003000000430000007381 *0000007c01007c0000195c02007d02007d03007c02007400006401008301006a02006f0a000164 *02007d02006e4500017c02007400006403008301006a02006f0a00016404007d02006e2800017c *02007400006405008301006a02006f0a00016406007d02006e0b00016407007c0200167d02007c *02007c000017640800177c0300175328090000004e7406000000676c6f62616c73100000002d2d *676c6f62616c2d636f6e66696720740400000075736572730e0000002d2d757365722d636f6e66 *69672074050000006c6f63616c7400000000730d0000002d2d66696c656e616d653d2572521a00 *000028010000005206000000280400000074040000006e616d6552190000007406000000736f75 *72636552220000002800000000280000000073310000006275696c645c62646973742e77696e33 *325c6567675c7365747570746f6f6c735c636f6d6d616e645c616c6961732e7079521d00000045 *00000073120000000001100113010a0113010a0113010a020a01280f0000007409000000646973 *747574696c7374020000006f73740a0000007365747570746f6f6c735200000000740e00000064 *6973747574696c732e7574696c520100000052020000007410000000646973747574696c732e65 *72726f727374190000007365747570746f6f6c732e636f6d6d616e642e7365746f707452040000 *0052050000005206000000520e000000520f000000521d00000028000000002800000000280000 *000073310000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c73 *5c636f6d6d616e645c616c6961732e707974080000003c6d6f64756c653e010000007310000000 *18011001100110010a011c0209091634 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_egg.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_egg.py 1 +"""setuptools.command.bdist_egg + +Build .egg distributions""" + +# This module should be kept compatible with Python 2.3 +import sys, os, marshal +from setuptools import Command +from distutils.dir_util import remove_tree, mkpath +from distutils.sysconfig import get_python_version, get_python_lib +from distutils import log +from distutils.errors import DistutilsSetupError +from pkg_resources import get_build_platform, Distribution, ensure_directory +from pkg_resources import EntryPoint +from types import CodeType +from setuptools.extension import Library + +def strip_module(filename): + if '.' in filename: + filename = os.path.splitext(filename)[0] + if filename.endswith('module'): + filename = filename[:-6] + return filename + +def write_stub(resource, pyfile): + f = open(pyfile,'w') + f.write('\n'.join([ + "def __bootstrap__():", + " global __bootstrap__, __loader__, __file__", + " import sys, pkg_resources, imp", + " __file__ = pkg_resources.resource_filename(__name__,%r)" + % resource, + " __loader__ = None; del __bootstrap__, __loader__", + " imp.load_dynamic(__name__,__file__)", + "__bootstrap__()", + "" # terminal \n + ])) + f.close() + +# stub __init__.py for packages distributed without one +NS_PKG_STUB = '__import__("pkg_resources").declare_namespace(__name__)' + +class bdist_egg(Command): + + description = "create an \"egg\" distribution" + + user_options = [ + ('bdist-dir=', 'b', + "temporary directory for creating the distribution"), + ('plat-name=', 'p', + "platform name to embed in generated filenames " + "(default: %s)" % get_build_platform()), + ('exclude-source-files', None, + "remove all .py files from the generated egg"), + ('keep-temp', 'k', + "keep the pseudo-installation tree around after " + + "creating the distribution archive"), + ('dist-dir=', 'd', + "directory to put final built distributions in"), + ('skip-build', None, + "skip rebuilding everything (for testing/debugging)"), + ] + + boolean_options = [ + 'keep-temp', 'skip-build', 'exclude-source-files' + ] + + + + + + + + + + + + + + + + + + def initialize_options (self): + self.bdist_dir = None + self.plat_name = None + self.keep_temp = 0 + self.dist_dir = None + self.skip_build = 0 + self.egg_output = None + self.exclude_source_files = None + + + def finalize_options(self): + ei_cmd = self.ei_cmd = self.get_finalized_command("egg_info") + self.egg_info = ei_cmd.egg_info + + if self.bdist_dir is None: + bdist_base = self.get_finalized_command('bdist').bdist_base + self.bdist_dir = os.path.join(bdist_base, 'egg') + + if self.plat_name is None: + self.plat_name = get_build_platform() + + self.set_undefined_options('bdist',('dist_dir', 'dist_dir')) + + if self.egg_output is None: + + # Compute filename of the output egg + basename = Distribution( + None, None, ei_cmd.egg_name, ei_cmd.egg_version, + get_python_version(), + self.distribution.has_ext_modules() and self.plat_name + ).egg_name() + + self.egg_output = os.path.join(self.dist_dir, basename+'.egg') + + + + + + + + + def do_install_data(self): + # Hack for packages that install data to install's --install-lib + self.get_finalized_command('install').install_lib = self.bdist_dir + + site_packages = os.path.normcase(os.path.realpath(get_python_lib())) + old, self.distribution.data_files = self.distribution.data_files,[] + + for item in old: + if isinstance(item,tuple) and len(item)==2: + if os.path.isabs(item[0]): + realpath = os.path.realpath(item[0]) + normalized = os.path.normcase(realpath) + if normalized==site_packages or normalized.startswith( + site_packages+os.sep + ): + item = realpath[len(site_packages)+1:], item[1] + # XXX else: raise ??? + self.distribution.data_files.append(item) + + try: + log.info("installing package data to %s" % self.bdist_dir) + self.call_command('install_data', force=0, root=None) + finally: + self.distribution.data_files = old + + + def get_outputs(self): + return [self.egg_output] + + + def call_command(self,cmdname,**kw): + """Invoke reinitialized command `cmdname` with keyword args""" + for dirname in INSTALL_DIRECTORY_ATTRS: + kw.setdefault(dirname,self.bdist_dir) + kw.setdefault('skip_build',self.skip_build) + kw.setdefault('dry_run', self.dry_run) + cmd = self.reinitialize_command(cmdname, **kw) + self.run_command(cmdname) + return cmd + + + def run(self): + # Generate metadata first + self.run_command("egg_info") + + # We run install_lib before install_data, because some data hacks + # pull their data path from the install_lib command. + log.info("installing library code to %s" % self.bdist_dir) + instcmd = self.get_finalized_command('install') + old_root = instcmd.root; instcmd.root = None + cmd = self.call_command('install_lib', warn_dir=0) + instcmd.root = old_root + + all_outputs, ext_outputs = self.get_ext_outputs() + self.stubs = [] + to_compile = [] + for (p,ext_name) in enumerate(ext_outputs): + filename,ext = os.path.splitext(ext_name) + pyfile = os.path.join(self.bdist_dir, strip_module(filename)+'.py') + self.stubs.append(pyfile) + log.info("creating stub loader for %s" % ext_name) + if not self.dry_run: + write_stub(os.path.basename(ext_name), pyfile) + to_compile.append(pyfile) + ext_outputs[p] = ext_name.replace(os.sep,'/') + + to_compile.extend(self.make_init_files()) + if to_compile: + cmd.byte_compile(to_compile) + + if self.distribution.data_files: + self.do_install_data() + + # Make the EGG-INFO directory + archive_root = self.bdist_dir + egg_info = os.path.join(archive_root,'EGG-INFO') + self.mkpath(egg_info) + if self.distribution.scripts: + script_dir = os.path.join(egg_info, 'scripts') + log.info("installing scripts to %s" % script_dir) + self.call_command('install_scripts',install_dir=script_dir,no_ep=1) + + self.copy_metadata_to(egg_info) + native_libs = os.path.join(egg_info, "native_libs.txt") + if all_outputs: + log.info("writing %s" % native_libs) + if not self.dry_run: + ensure_directory(native_libs) + libs_file = open(native_libs, 'wt') + libs_file.write('\n'.join(all_outputs)) + libs_file.write('\n') + libs_file.close() + elif os.path.isfile(native_libs): + log.info("removing %s" % native_libs) + if not self.dry_run: + os.unlink(native_libs) + + write_safety_flag( + os.path.join(archive_root,'EGG-INFO'), self.zip_safe() + ) + + if os.path.exists(os.path.join(self.egg_info,'depends.txt')): + log.warn( + "WARNING: 'depends.txt' will not be used by setuptools 0.6!\n" + "Use the install_requires/extras_require setup() args instead." + ) + + if self.exclude_source_files: + self.zap_pyfiles() + + # Make the archive + make_zipfile(self.egg_output, archive_root, verbose=self.verbose, + dry_run=self.dry_run, mode=self.gen_header()) + if not self.keep_temp: + remove_tree(self.bdist_dir, dry_run=self.dry_run) + + # Add to 'Distribution.dist_files' so that the "upload" command works + getattr(self.distribution,'dist_files',[]).append( + ('bdist_egg',get_python_version(),self.egg_output)) + + + + + def zap_pyfiles(self): + log.info("Removing .py files from temporary directory") + for base,dirs,files in walk_egg(self.bdist_dir): + for name in files: + if name.endswith('.py'): + path = os.path.join(base,name) + log.debug("Deleting %s", path) + os.unlink(path) + + def zip_safe(self): + safe = getattr(self.distribution,'zip_safe',None) + if safe is not None: + return safe + log.warn("zip_safe flag not set; analyzing archive contents...") + return analyze_egg(self.bdist_dir, self.stubs) + + def make_init_files(self): + """Create missing package __init__ files""" + init_files = [] + for base,dirs,files in walk_egg(self.bdist_dir): + if base==self.bdist_dir: + # don't put an __init__ in the root + continue + for name in files: + if name.endswith('.py'): + if '__init__.py' not in files: + pkg = base[len(self.bdist_dir)+1:].replace(os.sep,'.') + if self.distribution.has_contents_for(pkg): + log.warn("Creating missing __init__.py for %s",pkg) + filename = os.path.join(base,'__init__.py') + if not self.dry_run: + f = open(filename,'w'); f.write(NS_PKG_STUB) + f.close() + init_files.append(filename) + break + else: + # not a package, don't traverse to subdirectories + dirs[:] = [] + + return init_files + + def gen_header(self): + epm = EntryPoint.parse_map(self.distribution.entry_points or '') + ep = epm.get('setuptools.installation',{}).get('eggsecutable') + if ep is None: + return 'w' # not an eggsecutable, do it the usual way. + + if not ep.attrs or ep.extras: + raise DistutilsSetupError( + "eggsecutable entry point (%r) cannot have 'extras' " + "or refer to a module" % (ep,) + ) + + pyver = sys.version[:3] + pkg = ep.module_name + full = '.'.join(ep.attrs) + base = ep.attrs[0] + basename = os.path.basename(self.egg_output) + + header = ( + "#!/bin/sh\n" + 'if [ `basename $0` = "%(basename)s" ]\n' + 'then exec python%(pyver)s -c "' + "import sys, os; sys.path.insert(0, os.path.abspath('$0')); " + "from %(pkg)s import %(base)s; sys.exit(%(full)s())" + '" "$@"\n' + 'else\n' + ' echo $0 is not the correct name for this egg file.\n' + ' echo Please rename it back to %(basename)s and try again.\n' + ' exec false\n' + 'fi\n' + + ) % locals() + + if not self.dry_run: + mkpath(os.path.dirname(self.egg_output), dry_run=self.dry_run) + f = open(self.egg_output, 'w') + f.write(header) + f.close() + return 'a' + + + def copy_metadata_to(self, target_dir): + prefix = os.path.join(self.egg_info,'') + for path in self.ei_cmd.filelist.files: + if path.startswith(prefix): + target = os.path.join(target_dir, path[len(prefix):]) + ensure_directory(target) + self.copy_file(path, target) + + def get_ext_outputs(self): + """Get a list of relative paths to C extensions in the output distro""" + + all_outputs = [] + ext_outputs = [] + + paths = {self.bdist_dir:''} + for base, dirs, files in os.walk(self.bdist_dir): + for filename in files: + if os.path.splitext(filename)[1].lower() in NATIVE_EXTENSIONS: + all_outputs.append(paths[base]+filename) + for filename in dirs: + paths[os.path.join(base,filename)] = paths[base]+filename+'/' + + if self.distribution.has_ext_modules(): + build_cmd = self.get_finalized_command('build_ext') + for ext in build_cmd.extensions: + if isinstance(ext,Library): + continue + fullname = build_cmd.get_ext_fullname(ext.name) + filename = build_cmd.get_ext_filename(fullname) + if not os.path.basename(filename).startswith('dl-'): + if os.path.exists(os.path.join(self.bdist_dir,filename)): + ext_outputs.append(filename) + + return all_outputs, ext_outputs + + +NATIVE_EXTENSIONS = dict.fromkeys('.dll .so .dylib .pyd'.split()) + + + + +def walk_egg(egg_dir): + """Walk an unpacked egg's contents, skipping the metadata directory""" + walker = os.walk(egg_dir) + base,dirs,files = walker.next() + if 'EGG-INFO' in dirs: + dirs.remove('EGG-INFO') + yield base,dirs,files + for bdf in walker: + yield bdf + +def analyze_egg(egg_dir, stubs): + # check for existing flag in EGG-INFO + for flag,fn in safety_flags.items(): + if os.path.exists(os.path.join(egg_dir,'EGG-INFO',fn)): + return flag + if not can_scan(): return False + safe = True + for base, dirs, files in walk_egg(egg_dir): + for name in files: + if name.endswith('.py') or name.endswith('.pyw'): + continue + elif name.endswith('.pyc') or name.endswith('.pyo'): + # always scan, even if we already know we're not safe + safe = scan_module(egg_dir, base, name, stubs) and safe + return safe + +def write_safety_flag(egg_dir, safe): + # Write or remove zip safety flag file(s) + for flag,fn in safety_flags.items(): + fn = os.path.join(egg_dir, fn) + if os.path.exists(fn): + if safe is None or bool(safe)<>flag: + os.unlink(fn) + elif safe is not None and bool(safe)==flag: + f=open(fn,'wb'); f.write('\n'); f.close() + +safety_flags = { + True: 'zip-safe', + False: 'not-zip-safe', +} + +def scan_module(egg_dir, base, name, stubs): + """Check whether module possibly uses unsafe-for-zipfile stuff""" + + filename = os.path.join(base,name) + if filename[:-1] in stubs: + return True # Extension module + pkg = base[len(egg_dir)+1:].replace(os.sep,'.') + module = pkg+(pkg and '.' or '')+os.path.splitext(name)[0] + f = open(filename,'rb'); f.read(8) # skip magic & date + code = marshal.load(f); f.close() + safe = True + symbols = dict.fromkeys(iter_symbols(code)) + for bad in ['__file__', '__path__']: + if bad in symbols: + log.warn("%s: module references %s", module, bad) + safe = False + if 'inspect' in symbols: + for bad in [ + 'getsource', 'getabsfile', 'getsourcefile', 'getfile' + 'getsourcelines', 'findsource', 'getcomments', 'getframeinfo', + 'getinnerframes', 'getouterframes', 'stack', 'trace' + ]: + if bad in symbols: + log.warn("%s: module MAY be using inspect.%s", module, bad) + safe = False + if '__name__' in symbols and '__main__' in symbols and '.' not in module: + if sys.version[:3]=="2.4": # -m works w/zipfiles in 2.5 + log.warn("%s: top-level module may be 'python -m' script", module) + safe = False + return safe + +def iter_symbols(code): + """Yield names and strings used by `code` and its nested code objects""" + for name in code.co_names: yield name + for const in code.co_consts: + if isinstance(const,basestring): + yield const + elif isinstance(const,CodeType): + for name in iter_symbols(const): + yield name + +def can_scan(): + if not sys.platform.startswith('java') and sys.platform != 'cli': + # CPython, PyPy, etc. + return True + log.warn("Unable to analyze compiled code on this platform.") + log.warn("Please ask the author to include a 'zip_safe'" + " setting (either True or False) in the package's setup.py") + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# Attribute names of options for commands that might need to be convinced to +# install to the egg build directory + +INSTALL_DIRECTORY_ATTRS = [ + 'install_lib', 'install_dir', 'install_data', 'install_base' +] + +def make_zipfile(zip_filename, base_dir, verbose=0, dry_run=0, compress=None, + mode='w' +): + """Create a zip file from all the files under 'base_dir'. The output + zip file will be named 'base_dir' + ".zip". Uses either the "zipfile" + Python module (if available) or the InfoZIP "zip" utility (if installed + and found on the default search path). If neither tool is available, + raises DistutilsExecError. Returns the name of the output zip file. + """ + import zipfile + mkpath(os.path.dirname(zip_filename), dry_run=dry_run) + log.info("creating '%s' and adding '%s' to it", zip_filename, base_dir) + + def visit(z, dirname, names): + for name in names: + path = os.path.normpath(os.path.join(dirname, name)) + if os.path.isfile(path): + p = path[len(base_dir)+1:] + if not dry_run: + z.write(path, p) + log.debug("adding '%s'" % p) + + if compress is None: + compress = (sys.version>="2.4") # avoid 2.3 zipimport bug when 64 bits + + compression = [zipfile.ZIP_STORED, zipfile.ZIP_DEFLATED][bool(compress)] + if not dry_run: + z = zipfile.ZipFile(zip_filename, mode, compression=compression) + os.path.walk(base_dir, visit, z) + z.close() + else: + os.path.walk(base_dir, visit, None) + return zip_filename +# addfile ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_egg.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_egg.pyc oldhex * newhex *d1f20d0a381ef84b6300000000000000001100000040000000738a0100006400005a0000640100 *6402006b01005a01006401006402006b02005a02006401006402006b03005a0300640100640300 *6b04006c05005a0500016401006404006b06006c07005a07006c08005a0800016401006405006b *09006c0a005a0a006c0b005a0b00016401006406006b0c006c0d005a0d00016401006407006b0e *006c0f005a0f00016401006408006b10006c11005a11006c12005a12006c13005a130001640100 *6409006b10006c14005a140001640100640a006b15006c16005a160001640100640b006b17006c *18005a180001640c008400005a1900640d008400005a1a00640e005a1b00640f00650500660100 *641000840000830000595a1c00651d00691e00641100691f008300008301005a20006412008400 *005a21006413008400005a22006414008400005a23006802006415006524003664160065250036 *5a26006417008400005a27006418008400005a28006419008400005a2900641a00641b00641c00 *641d006704005a2a00641e00641e00652b00641f006420008404005a2c00640200532821000000 *73360000007365747570746f6f6c732e636f6d6d616e642e62646973745f6567670a0a4275696c *64202e65676720646973747269627574696f6e7369ffffffff4e28010000007407000000436f6d *6d616e642802000000740b00000072656d6f76655f7472656574060000006d6b70617468280200 *000074120000006765745f707974686f6e5f76657273696f6e740e0000006765745f707974686f *6e5f6c6962280100000074030000006c6f6728010000007413000000446973747574696c735365 *7475704572726f72280300000074120000006765745f6275696c645f706c6174666f726d740c00 *0000446973747269627574696f6e7410000000656e737572655f6469726563746f727928010000 *00740a000000456e747279506f696e7428010000007408000000436f6465547970652801000000 *74070000004c696272617279630100000001000000020000004300000073490000006401007c00 *006a06006f1a00017400006901006902007c0000830100640200197d00006e0100017c00006903 *006403008301006f0e00017c0000640400207d00006e0100017c00005328050000004e74010000 *002e690000000074060000006d6f64756c6569faffffff280400000074020000006f7374040000 *0070617468740800000073706c69746578747408000000656e6473776974682801000000740800 *000066696c656e616d65280000000028000000007349000000433a5c7461686f652d6c6166735c *7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c *636f6d6d616e645c62646973745f6567672e7079740c00000073747269705f6d6f64756c651100 *0000730a00000000010d011a0110010e016302000000030000000a00000043000000734f000000 *7400007c01006401008302007d02007c0200690100640200690200640300640400640500640600 *7c000016640700640800640900640a00670800830100830100017c020069030083000001640000 *53280b0000004e74010000007773010000000a7314000000646566205f5f626f6f747374726170 *5f5f28293a732d000000202020676c6f62616c205f5f626f6f7473747261705f5f2c205f5f6c6f *616465725f5f2c205f5f66696c655f5f7321000000202020696d706f7274207379732c20706b67 *5f7265736f75726365732c20696d70733a0000002020205f5f66696c655f5f203d20706b675f72 *65736f75726365732e7265736f757263655f66696c656e616d65285f5f6e616d655f5f2c257229 *73330000002020205f5f6c6f616465725f5f203d204e6f6e653b2064656c205f5f626f6f747374 *7261705f5f2c205f5f6c6f616465725f5f7326000000202020696d702e6c6f61645f64796e616d *6963285f5f6e616d655f5f2c5f5f66696c655f5f29730f0000005f5f626f6f7473747261705f5f *28297400000000280400000074040000006f70656e7405000000777269746574040000006a6f69 *6e7405000000636c6f7365280300000074080000007265736f757263657406000000707966696c *65740100000066280000000028000000007349000000433a5c7461686f652d6c6166735c736574 *7570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d *6d616e645c62646973745f6567672e7079740a00000077726974655f7374756218000000731800 *000000010f010c01030103010301030104010301030103010d0273370000005f5f696d706f7274 *5f5f2822706b675f7265736f757263657322292e6465636c6172655f6e616d657370616365285f *5f6e616d655f5f29740900000062646973745f6567676300000000000000000800000042000000 *73be0000006500005a01006400005a0200641e0064040064050064060065030083000016660300 *642000640900640a00640b00640c00176603006421006422006706005a05006409006410006407 *006703005a06006412008400005a07006413008400005a08006414008400005a09006415008400 *005a0a006416008400005a0b006417008400005a0c006418008400005a0d006419008400005a0e *00641a008400005a0f00641b008400005a1000641c008400005a1100641d008400005a12005253 *2823000000731c00000063726561746520616e20226567672220646973747269627574696f6e73 *0a00000062646973742d6469723d740100000062733100000074656d706f726172792064697265 *63746f727920666f72206372656174696e672074686520646973747269627574696f6e730a0000 *00706c61742d6e616d653d740100000070733b000000706c6174666f726d206e616d6520746f20 *656d62656420696e2067656e6572617465642066696c656e616d6573202864656661756c743a20 *25732973140000006578636c7564652d736f757263652d66696c6573732b00000072656d6f7665 *20616c6c202e70792066696c65732066726f6d207468652067656e657261746564206567677309 *0000006b6565702d74656d7074010000006b732f0000006b656570207468652070736575646f2d *696e7374616c6c6174696f6e20747265652061726f756e64206166746572207321000000637265 *6174696e672074686520646973747269627574696f6e2061726368697665730900000064697374 *2d6469723d740100000064732d0000006469726563746f727920746f207075742066696e616c20 *6275696c7420646973747269627574696f6e7320696e730a000000736b69702d6275696c647332 *000000736b69702072656275696c64696e672065766572797468696e672028666f722074657374 *696e672f646562756767696e672963010000000100000002000000430000007343000000640000 *7c00005f01006400007c00005f02006401007c00005f03006400007c00005f04006401007c0000 *5f05006400007c00005f06006400007c00005f07006400005328020000004e6900000000280800 *000074040000004e6f6e65740900000062646973745f6469727409000000706c61745f6e616d65 *74090000006b6565705f74656d707408000000646973745f646972740a000000736b69705f6275 *696c64740a0000006567675f6f757470757474140000006578636c7564655f736f757263655f66 *696c65732801000000740400000073656c66280000000028000000007349000000433a5c746168 *6f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574 *7570746f6f6c735c636f6d6d616e645c62646973745f6567672e70797412000000696e69746961 *6c697a655f6f7074696f6e7353000000730e000000000109010901090109010901090163010000 *0004000000070000004300000073040100007c0000690000640100830100047d01007c00005f01 *007c01006902007c00005f02007c00006903006400006a08006f2e00017c000069000064020083 *01006905007d02007406006907006908007c02006403008302007c00005f03006e0100017c0000 *6909006400006a08006f100001740a008300007c00005f09006e0100017c0000690b0064020064 *0600830200017c0000690c006400006a08006f600001740d006400006400007c0100690e007c01 *00690f007410008300007c00006911006912008300006f0700017c0000690900830600690e0083 *00007d03007406006907006908007c00006913007c0300640500178302007c00005f0c006e0100 *016400005328070000004e74080000006567675f696e666f740500000062646973747403000000 *656767522800000073040000002e65676728020000007308000000646973745f64697273080000 *00646973745f646972281400000074150000006765745f66696e616c697a65645f636f6d6d616e *64740600000065695f636d64522e00000052250000005224000000740a00000062646973745f62 *617365520f000000521000000052190000005226000000520700000074150000007365745f756e *646566696e65645f6f7074696f6e73522a000000520800000074080000006567675f6e616d6574 *0b0000006567675f76657273696f6e5203000000740c000000646973747269627574696f6e740f *0000006861735f6578745f6d6f64756c657352280000002804000000522c000000523200000052 *330000007408000000626173656e616d65280000000028000000007349000000433a5c7461686f *652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c73657475 *70746f6f6c735c636f6d6d616e645c62646973745f6567672e7079741000000066696e616c697a *655f6f7074696f6e735d000000731c000000000116010c02100112011c02100110021002100303 *011201060122036301000000060000000b0000004300000073680100007c00006900007c000069 *01006401008301005f020074030069040069050074030069040069060074070083000083010083 *01007d01007c0000690800690900670000027d02007c00006908005f090078d1007c0200445dc9 *007d0300740a007c0300740b008302006fa00001740c007c03008301006402006a02006f8d0001 *740300690400690d007c0300640300198301006f7200017403006904006906007c030064030019 *8301007d04007403006904006905007c04008301007d05007c05007c01006a0200701700017c05 *00690e007c0100740300690f00178301006f2200017c0400740c007c0100830100640400171f7c *0300640400196602007d030071080101710c01016e0100017c00006908006909006910007c0300 *83010001715600577a31007411006912006405007c000069000016830100017c00006913006406 *0064070064030064080064000083010201576400007c02007c00006908005f0900586400005328 *090000004e7407000000696e7374616c6c690200000069000000006901000000731d000000696e *7374616c6c696e67207061636b616765206461746120746f202573740c000000696e7374616c6c *5f646174617405000000666f7263657404000000726f6f74281500000052250000005231000000 *740b000000696e7374616c6c5f6c6962520f000000521000000074080000006e6f726d63617365 *74080000007265616c7061746852040000005237000000740a000000646174615f66696c657374 *0a0000006973696e7374616e636574050000007475706c6574030000006c656e74050000006973 *616273740a0000007374617274737769746874030000007365707406000000617070656e645205 *0000007404000000696e666f740c00000063616c6c5f636f6d6d616e6452240000002806000000 *522c000000740d000000736974655f7061636b6167657374030000006f6c647404000000697465 *6d5241000000740a0000006e6f726d616c697a6564280000000028000000007349000000433a5c *7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c *7365747570746f6f6c735c636f6d6d616e645c62646973745f6567672e7079740f000000646f5f *696e7374616c6c5f646174617c0000007322000000000215022101190207000601230117011601 *1201130111022a021702030114011d026301000000010000000100000043000000730a0000007c *00006900006701005328010000004e2801000000522a0000002801000000522c00000028000000 *0028000000007349000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36 *6331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c62646973745f *6567672e7079740b0000006765745f6f7574707574739600000073020000000001630200000005 *000000050000004b000000736d000000782100740000445d19007d03007c02006901007c03007c *000069020083020001710700577c02006901006401007c0000690300830200017c020069010064 *02007c0000690400830200017c00006905007c01007c02008d01007d04007c00006906007c0100 *830100017c04005328030000007338000000496e766f6b65207265696e697469616c697a656420 *636f6d6d616e642060636d646e616d65602077697468206b6579776f7264206172677352290000 *0074070000006472795f72756e28070000007417000000494e5354414c4c5f4449524543544f52 *595f4154545253740a00000073657464656661756c745225000000522900000052520000007414 *0000007265696e697469616c697a655f636f6d6d616e64740b00000072756e5f636f6d6d616e64 *2805000000522c0000007407000000636d646e616d6574020000006b7774070000006469726e61 *6d657403000000636d64280000000028000000007349000000433a5c7461686f652d6c6166735c *7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c *636f6d6d616e645c62646973745f6567672e7079524b0000009a00000073100000000002070006 *0117011301130112010d016301000000110000000b0000004300000073cd0300007c0000690000 *640100830100017401006902006402007c000069030016830100017c0000690400640300830100 *7d01007c01006905007d02006400007c01005f05007c0000690700640400640500640600830101 *7d03007c02007c01005f05007c00006908008300005c02007d04007d05006700007c00005f0900 *6700007d060078c200740a007c0500830100445db4005c02007d07007d0800740b00690c00690d *007c08008301005c02007d09007d0a00740b00690c00690e007c0000690300740f007c09008301 *00640700178302007d0b007c00006909006910007c0b00830100017401006902006408007c0800 *16830100017c0000691100701d0001741200740b00690c006913007c08008301007c0b00830200 *016e0100017c06006910007c0b00830100017c0800691400740b006915006409008302007c0500 *7c07003c718e00577c06006916007c0000691700830000830100017c06006f1100017c03006918 *007c0600830100016e0100017c0000691900691a006f0e00017c0000691b00830000016e010001 *7c00006903007d0c00740b00690c00690e007c0c00640a008302007d0d007c0000691c007c0d00 *830100017c0000691900691d006f430001740b00690c00690e007c0d00640b008302007d0e0074 *0100690200640c007c0e0016830100017c0000690700640d00640e007c0e00640f006410008301 *02016e0100017c0000691e007c0d0083010001740b00690c00690e007c0d006411008302007d0f *007c04006f6900017401006902006412007c0f0016830100017c0000691100704a0001741f007c *0f00830100017420007c0f006413008302007d10007c1000692100641400690e007c0400830100 *830100017c1000692100641400830100017c10006922008300000171dc02016e440001740b0069 *0c006923007c0f008301006f3000017401006902006415007c0f0016830100017c000069110070 *110001740b006924007c0f008301000171dc02016e010001742500740b00690c00690e007c0c00 *640a008302007c000069260083000083020001740b00690c00692700740b00690c00690e007c00 *006928006416008302008301006f110001740100692900641700830100016e0100017c0000692a *006f0e00017c0000692b00830000016e010001742c007c0000692d007c0c006418007c0000692e *006419007c0000691100641a007c0000692f00830000830203017c0000693000701a0001743100 *7c00006903006419007c0000691100830101016e0100017432007c0000691900641b0067000083 *0300691000641c007433008300007c0000692d006603008301000164000053281d0000004e522e *000000731d000000696e7374616c6c696e67206c69627261727920636f646520746f202573523b *000000523f00000074080000007761726e5f646972690000000073030000002e7079731b000000 *6372656174696e672073747562206c6f6164657220666f7220257374010000002f730800000045 *47472d494e464f7407000000736372697074737318000000696e7374616c6c696e672073637269 *70747320746f202573740f000000696e7374616c6c5f73637269707473740b000000696e737461 *6c6c5f64697274050000006e6f5f65706901000000730f0000006e61746976655f6c6962732e74 *7874730a00000077726974696e672025737402000000777473010000000a730b00000072656d6f *76696e67202573730b000000646570656e64732e74787473780000005741524e494e473a202764 *6570656e64732e747874272077696c6c206e6f742062652075736564206279207365747570746f *6f6c7320302e36210a5573652074686520696e7374616c6c5f72657175697265732f6578747261 *735f726571756972652073657475702829206172677320696e73746561642e7407000000766572 *626f7365525200000074040000006d6f6465740a000000646973745f66696c6573521f00000028 *3400000052560000005205000000524a00000052250000005231000000523e0000005224000000 *524b000000740f0000006765745f6578745f6f7574707574737405000000737475627374090000 *00656e756d6572617465520f000000521000000052110000005219000000521400000052490000 *005252000000521e000000523900000074070000007265706c6163655248000000740600000065 *7874656e64740f0000006d616b655f696e69745f66696c6573740c000000627974655f636f6d70 *696c655237000000524200000052500000005202000000525d0000007410000000636f70795f6d *657461646174615f746f520900000052170000005218000000521a000000740600000069736669 *6c657406000000756e6c696e6b741100000077726974655f7361666574795f666c616774080000 *007a69705f736166657406000000657869737473522e00000074040000007761726e522b000000 *740b0000007a61705f707966696c6573740c0000006d616b655f7a697066696c65522a00000052 *62000000740a00000067656e5f6865616465725227000000520100000074070000006765746174 *747252030000002811000000522c0000007407000000696e7374636d6474080000006f6c645f72 *6f6f74525a000000740b000000616c6c5f6f757470757473740b0000006578745f6f7574707574 *73740a000000746f5f636f6d70696c65522100000074080000006578745f6e616d655213000000 *7403000000657874521c000000740c000000617263686976655f726f6f74522e000000740a0000 *007363726970745f646972740b0000006e61746976655f6c69627374090000006c6962735f6669 *6c65280000000028000000007349000000433a5c7461686f652d6c6166735c7365747570746f6f *6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c *62646973745f6567672e7079740300000072756ea5000000737600000000020d0414010f010900 *0901150109021201090106010d000c0118012201100111010a011d010d011d021301070111020d *010e03090115010d010d01150111011d020d011501070111010a010a010f0116010d0112011301 *11010a01150203011f03250106010b040a010e03180116010a011a031501630100000006000000 *0500000043000000738b000000740000690100640100830100017877007402007c000069030083 *0100445d66005c03007d01007d02007d03007854007c0300445d4c007d04007c04006904006402 *008301006f3600017405006906006907007c01007c04008302007d05007400006908006403007c *0500830200017405006909007c0500830100017133000171330057711d00576400005328040000 *004e732b00000052656d6f76696e67202e70792066696c65732066726f6d2074656d706f726172 *79206469726563746f727973030000002e7079730b00000044656c6574696e67202573280a0000 *005205000000524a000000740800000077616c6b5f65676752250000005212000000520f000000 *5210000000521900000074050000006465627567526e0000002806000000522c00000074040000 *0062617365740400000064697273740500000066696c657374040000006e616d65521000000028 *0000000028000000007349000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d *302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c626469 *73745f6567672e70795273000000f7000000731200000000010d0110000f010700060110011501 *1001630100000002000000040000004300000073470000007400007c0000690100640100640000 *8303007d01007c01006400006a09006f0500017c01005301740300690400640200830100017405 *007c00006906007c00006907008302005328030000004e527000000073340000007a69705f7361 *666520666c6167206e6f74207365743b20616e616c797a696e67206172636869766520636f6e74 *656e74732e2e2e280800000052760000005237000000522400000052050000005272000000740b *000000616e616c797a655f656767522500000052660000002802000000522c0000007404000000 *73616665280000000028000000007349000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e *645c62646973745f6567672e7079527000000000010000730a000000000115010d0105010d0163 *0100000009000000060000004300000073250100006700007d01007818017400007c0000690100 *830100445d07015c03007d02007d03007d04007c02007c00006901006a02006f0700017116006e *01000178de007c0400445dcf007d05007c05006902006401008301006fb900016402007c04006a *07006fa700017c02007403007c0000690100830100640300171f69040074050069060064040083 *02007d06007c00006907006908007c06008301006f6a0001740900690a006405007c0600830200 *01740500690b00690c007c02006402008302007d07007c0000690d00702a0001740e007c070064 *06008302007d08007c0800690f00741000830100017c0800691100830000016e0100017c010069 *12007c070083010001710d01016e0100015071430001714300576700007c030028711600577c01 *005328070000007325000000437265617465206d697373696e67207061636b616765205f5f696e *69745f5f2066696c657373030000002e7079730b0000005f5f696e69745f5f2e70796901000000 *520d00000073230000004372656174696e67206d697373696e67205f5f696e69745f5f2e707920 *666f72202573521500000028130000005283000000522500000052120000005245000000526800 *0000520f0000005248000000523700000074100000006861735f636f6e74656e74735f666f7252 *05000000527200000052100000005219000000525200000052170000005218000000740b000000 *4e535f504b475f53545542521a00000052490000002809000000522c000000740a000000696e69 *745f66696c657352850000005286000000528700000052880000007403000000706b6752130000 *00521d000000280000000028000000007349000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d *616e645c62646973745f6567672e7079526a00000007010000732a0000000002060110000f0110 *0207010700060110010d0126011301100115010a010f000d010e01150109030b0263010000000a *000000050000004300000073290100007400006901007c00006902006903007004000164010083 *01007d01007c01006904006402006800008302006904006403008301007d02007c02006400006a *08006f05000164040053017c02006906000c700a00017c02006907006f1700017408006405007c *0200660100168301008201006e010001740900690a00640600207d03007c0200690b007d040064 *0700690c007c02006906008301007d05007c0200690600640800197d0600740d00690e00690f00 *7c00006910008301007d0700640900741100830000167d08007c0000691200704f000174130074 *0d00690e006914007c0000691000830100640a007c0000691200830101017415007c0000691000 *6404008302007d09007c09006916007c0800830100017c0900691700830000016e010001640b00 *53280c0000004e521600000073170000007365747570746f6f6c732e696e7374616c6c6174696f *6e740c000000656767736563757461626c6552150000007347000000656767736563757461626c *6520656e74727920706f696e7420282572292063616e6e6f742068617665202765787472617327 *206f7220726566657220746f2061206d6f64756c656903000000520d0000006900000000734801 *000023212f62696e2f73680a6966205b2060626173656e616d6520243060203d20222528626173 *656e616d65297322205d0a7468656e206578656320707974686f6e252870797665722973202d63 *2022696d706f7274207379732c206f733b207379732e706174682e696e7365727428302c206f73 *2e706174682e61627370617468282724302729293b2066726f6d202528706b67297320696d706f *72742025286261736529733b207379732e6578697428252866756c6c2973282929222022244022 *0a656c73650a20206563686f202430206973206e6f742074686520636f7272656374206e616d65 *20666f722074686973206567672066696c652e0a20206563686f20506c656173652072656e616d *65206974206261636b20746f202528626173656e616d65297320616e642074727920616761696e *2e0a2020657865632066616c73650a66690a52520000007401000000612818000000520a000000 *740900000070617273655f6d61705237000000740c000000656e7472795f706f696e7473740300 *000067657452240000007405000000617474727374060000006578747261735206000000740300 *0000737973740700000076657273696f6e740b0000006d6f64756c655f6e616d65521900000052 *0f00000052100000005239000000522a00000074060000006c6f63616c73525200000052020000 *00525900000052170000005218000000521a000000280a000000522c000000740300000065706d *7402000000657074050000007079766572528e000000740400000066756c6c5285000000523900 *00007406000000686561646572521d000000280000000028000000007349000000433a5c746168 *6f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574 *7570746f6f6c735c636f6d6d616e645c62646973745f6567672e7079527500000020010000732a *00000000011c011b010d01050215010301030111030d01090112010d011503030c0a020a012201 *12010d010e01630200000005000000060000004300000073830000007400006901006902007c00 *006903006401008302007d02007864007c0000690400690500690600445d53007d03007c030069 *07007c02008301006f3d00017400006901006902007c01007c03007408007c02008301001f8302 *007d04007409007c0400830100017c0000690a007c03007c040083020001712800017128005764 *00005328020000004e5216000000280b000000520f00000052100000005219000000522e000000 *5232000000740800000066696c656c697374528700000052470000005245000000520900000074 *09000000636f70795f66696c652805000000522c000000740a0000007461726765745f64697274 *060000007072656669785210000000740600000074617267657428000000002800000000734900 *0000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576646576 *2e6567675c7365747570746f6f6c735c636f6d6d616e645c62646973745f6567672e7079526c00 *000049010000730e000000000118011000060110011f010a0163010000000b0000000900000043 *00000073940100006700007d01006700007d02006801006401007c0000690000367d030078a600 *7401006902007c0000690000830100445d92005c03007d04007d05007d0600784a007c0600445d *42007d07007401006903006904007c0700830100640200196905008300007406006a06006f1900 *017c01006907007c03007c0400197c0700178301000171450001714500577833007c0500445d2b *007d07007c03007c0400197c070017640300177c03007401006903006908007c04007c07008302 *003c71920057712f00577c0000690900690a008300006fb500017c0000690b006404008301007d *080078a3007c0800690c00445d94007d0900740d007c0900740e008302006f07000171ee006e01 *00017c0800690f007c09006910008301007d0a007c08006911007c0a008301007d070074010069 *03006912007c0700830100691300640500830100703a0001740100690300691400740100690300 *6908007c00006900007c07008302008301006f1100017c02006907007c07008301000171820101 *71ee000171ee00576e0100017c01007c020066020053280600000073410000004765742061206c *697374206f662072656c617469766520706174687320746f204320657874656e73696f6e732069 *6e20746865206f75747075742064697374726f52160000006901000000525c0000007409000000 *6275696c645f6578747303000000646c2d28150000005225000000520f00000074040000007761 *6c6b5210000000521100000074050000006c6f77657274110000004e41544956455f455854454e *53494f4e5352490000005219000000523700000052380000005231000000740a00000065787465 *6e73696f6e735243000000520c00000074100000006765745f6578745f66756c6c6e616d655288 *00000074100000006765745f6578745f66696c656e616d65523900000052470000005271000000 *280b000000522c0000005279000000527a00000074050000007061746873528500000052860000 *005287000000521300000074090000006275696c645f636d64527d000000740800000066756c6c *6e616d65280000000028000000007349000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e *645c62646973745f6567672e70795265000000510100007330000000000306010602100113000f *010700060123011d01070006012d0210010f010a0006011001070112010f011c0125011d022803 *000000730a00000062646973742d6469723d5220000000733100000074656d706f726172792064 *69726563746f727920666f72206372656174696e672074686520646973747269627574696f6e4e *280300000073140000006578636c7564652d736f757263652d66696c65734e732b00000072656d *6f766520616c6c202e70792066696c65732066726f6d207468652067656e657261746564206567 *6728030000007309000000646973742d6469723d5223000000732d0000006469726563746f7279 *20746f207075742066696e616c206275696c7420646973747269627574696f6e7320696e280300 *0000730a000000736b69702d6275696c644e7332000000736b69702072656275696c64696e6720 *65766572797468696e672028666f722074657374696e672f646562756767696e67292813000000 *74080000005f5f6e616d655f5f740a0000005f5f6d6f64756c655f5f740b000000646573637269 *7074696f6e52070000005224000000740c000000757365725f6f7074696f6e73740f000000626f *6f6c65616e5f6f7074696f6e73522d000000523a00000052500000005251000000524b00000052 *8200000052730000005270000000526a0000005275000000526c00000052650000002800000000 *280000000028000000007349000000433a5c7461686f652d6c6166735c7365747570746f6f6c73 *2d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c6264 *6973745f6567672e7079521f0000002a00000073380000000602060300010301060103010a0100 *01030106010301070100010301000109040f13090a091f091a0904090b09520909090709190929 *090873140000002e646c6c202e736f202e64796c6962202e707964630100000006000000030000 *0063000000736a0000007400006901007c00008301007d01007c01006902008300005c03007d02 *007d03007d04006401007c03006a06006f1100017c0300690300640100830100016e0100017c02 *007c03007c040066030056017813007c0100445d0b007d05007c05005601715700576402005328 *03000000734000000057616c6b20616e20756e7061636b656420656767277320636f6e74656e74 *732c20736b697070696e6720746865206d65746164617461206469726563746f72797308000000 *4547472d494e464f4e2804000000520f00000052a500000074040000006e657874740600000072 *656d6f7665280600000074070000006567675f646972740600000077616c6b6572528500000052 *8600000052870000007403000000626466280000000028000000007349000000433a5c7461686f *652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c73657475 *70746f6f6c735c636f6d6d616e645c62646973745f6567672e7079528300000072010000731000 *000000020f0115010d0111010e0107000601630200000009000000090000004300000073f80000 *00784400740000690100830000445d36005c02007d02007d030074020069030069040074020069 *03006905007c00006401007c03008303008301006f0500017c02005301710d0057740600830000 *7005000174070053017408007d04007895007409007c0000830100445d87005c03007d05007d06 *007d07007875007c0700445d6d007d08007c0800690a00640200830100701000017c0800690a00 *6403008301006f070001717f00717f00017c0800690a00640400830100701000017c0800690a00 *6405008301006f200001740b007c00007c05007c08007c01008304006f0400017c04007d040071 *7f0001717f0057716900577c04005328060000004e73080000004547472d494e464f7303000000 *2e707973040000002e70797773040000002e70796373040000002e70796f280c000000740c0000 *007361666574795f666c61677374050000006974656d73520f0000005210000000527100000052 *19000000740800000063616e5f7363616e740500000046616c7365740400000054727565528300 *00005212000000740b0000007363616e5f6d6f64756c65280900000052b5000000526600000074 *04000000666c61677402000000666e528a00000052850000005286000000528700000052880000 *00280000000028000000007349000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c62 *646973745f6567672e707952890000007c010000732000000000020d000c01250109010a000501 *06010d000f01070006012001070120022801630200000005000000040000004300000073c80000 *0078c100740000690100830000445db3005c02007d02007d03007402006903006904007c00007c *03008302007d03007402006903006905007c03008301006f3500017c01006400006a0800701300 *017407007c01008301007c02006a03006f1100017402006908007c03008301000171c00001710d *00017c01006400006a09006f3d00017407007c01008301007c02006a02006f2a00017409007c03 *006401008302007d04007c0400690a00640200830100017c0400690b0083000001710d0001710d *00576400005328030000004e7402000000776273010000000a280c00000052b800000052b90000 *00520f00000052100000005219000000527100000052240000007404000000626f6f6c526e0000 *0052170000005218000000521a000000280500000052b5000000528a00000052be00000052bf00 *0000521d000000280000000028000000007349000000433a5c7461686f652d6c6166735c736574 *7570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d *6d616e645c62646973745f6567672e7079526f0000008c010000731400000000020d000c011501 *13012001150120010f000d0073080000007a69702d73616665730c0000006e6f742d7a69702d73 *61666563040000000c0000000f0000004300000073d50100007400006901006902007c01007c02 *008302007d04007c0400640100207c03006a06006f05000174030053017c01007404007c000083 *0100640200171f6905007400006906006403008302007d05007c05007c05006f07000164030070 *040001640400177400006901006907007c020083010064050019177d06007408007c0400640600 *8302007d07007c070069090064070083010001740a00690b007c07008301007d08007c0700690c *00830000017403007d0900740d00690e00740f007c08008301008301007d0a00783e0064080064 *0900670200445d30007d0b007c0b007c0a006a06006f1d0001741000691100640a007c06007c0b *00830300017412007d090071d7000171d70057640b007c0a006a06006f600001785d00640c0064 *0d00640e00640f00641000641100641200641300641400641500641600670b00445d30007d0b00 *7c0b007c0a006a06006f1d00017410006911006417007c06007c0b00830300017412007d090071 *400101714001576e0100016418007c0a006a06006f4c00016419007c0a006a06006f3f00016403 *007c06006a07006f320001741300691400641a0020641b006a02006f1a0001741000691100641c *007c0600830200017412007d090071d101016e0100017c090053281d000000733b000000436865 *636b2077686574686572206d6f64756c6520706f737369626c79207573657320756e736166652d *666f722d7a697066696c6520737475666669ffffffff6901000000520d00000052160000006900 *00000074020000007262690800000074080000005f5f66696c655f5f74080000005f5f70617468 *5f5f731800000025733a206d6f64756c65207265666572656e6365732025737407000000696e73 *706563747409000000676574736f75726365740a00000067657461627366696c65740d00000067 *6574736f7572636566696c65741500000067657466696c65676574736f757263656c696e657374 *0a00000066696e64736f75726365740b000000676574636f6d6d656e7473740c00000067657466 *72616d65696e666f740e000000676574696e6e65726672616d6573740e0000006765746f757465 *726672616d65737405000000737461636b74050000007472616365732200000025733a206d6f64 *756c65204d4159206265207573696e6720696e73706563742e257352ae00000074080000005f5f *6d61696e5f5f69030000007303000000322e34732e00000025733a20746f702d6c6576656c206d *6f64756c65206d61792062652027707974686f6e202d6d27207363726970742815000000520f00 *00005210000000521900000052bc00000052450000005268000000524800000052110000005217 *00000074040000007265616474070000006d61727368616c74040000006c6f6164521a00000074 *0400000064696374740800000066726f6d6b657973740c000000697465725f73796d626f6c7352 *05000000527200000052bb00000052960000005297000000280c00000052b50000005285000000 *528800000052660000005213000000528e000000520e000000521d0000007404000000636f6465 *528a000000740700000073796d626f6c7374030000006261642800000000280000000073490000 *00433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e *6567675c7365747570746f6f6c735c636f6d6d616e645c62646973745f6567672e707952bd0000 *009b010000733c000000000315011101050123012c010f000d010f000a01060115010d0006010d *0113010e010d0103010c010901100006020d01130112012701140110010e016301000000030000 *000600000063000000737a0000007816007c0000690000445d0b007d01007c01005601710a0057 *785a007c0000690100445d4f007d02007402007c02007403008302006f0900017c020056017123 *00017402007c02007404008302006f200001781d007405007c0200830100445d0b007d01007c01 *005601715f0057712300017123005764010053280200000073420000005969656c64206e616d65 *7320616e6420737472696e677320757365642062792060636f64656020616e6420697473206e65 *7374656420636f6465206f626a656374734e28060000007408000000636f5f6e616d6573740900 *0000636f5f636f6e7374735243000000740a00000062617365737472696e67520b00000052d700 *0000280300000052d800000052880000007405000000636f6e7374280000000028000000007349 *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c7365747570746f6f6c735c636f6d6d616e645c62646973745f6567672e707952d7 *000000ba010000731600000000020a00060009010a0006011001090110010d0006016300000000 *00000000020000004300000073470000007400006901006902006401008301000c6f1500017400 *006901006402006a03006f05000174030053017404006905006403008301000174040069050064 *0400830100016400005328050000004e74040000006a6176617403000000636c69733100000055 *6e61626c6520746f20616e616c797a6520636f6d70696c656420636f6465206f6e207468697320 *706c6174666f726d2e7366000000506c656173652061736b2074686520617574686f7220746f20 *696e636c756465206120277a69705f73616665272073657474696e672028656974686572205472 *7565206f722046616c73652920696e20746865207061636b61676527732073657475702e707928 *0600000052960000007408000000706c6174666f726d524700000052bc00000052050000005272 *0000002800000000280000000028000000007349000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f *6d6d616e645c62646973745f6567672e707952ba000000c401000073080000000001240205010d *01523f000000525f000000523c000000740c000000696e7374616c6c5f62617365690000000052 *1500000063060000000a000000070000000300000073e60000006401006402006b00007d060074 *01007402006903006904007c0000830100640300880000830101017405006906006404007c0000 *880100830300018700008701006602006405008600007d07007c04006402006a08006f13000174 *08006909006406006a05007d04006e0100017c0600690a007c0600690b00670200740c007c0400 *830100197d0800880000703c00017c0600690d007c00007c05006407007c08008302017d090074 *0200690300690e008801007c07007c0900830300017c0900690f00830000016e17000174020069 *0300690e008801007c0700640200830300017c0000532808000000737101000043726561746520 *61207a69702066696c652066726f6d20616c6c207468652066696c657320756e64657220276261 *73655f646972272e2020546865206f75747075740a202020207a69702066696c652077696c6c20 *6265206e616d65642027626173655f64697227202b20222e7a6970222e20205573657320656974 *6865722074686520227a697066696c65220a20202020507974686f6e206d6f64756c6520286966 *20617661696c61626c6529206f722074686520496e666f5a495020227a697022207574696c6974 *792028696620696e7374616c6c65640a20202020616e6420666f756e64206f6e20746865206465 *6661756c74207365617263682070617468292e20204966206e65697468657220746f6f6c206973 *20617661696c61626c652c0a2020202072616973657320446973747574696c7345786563457272 *6f722e202052657475726e7320746865206e616d65206f6620746865206f7574707574207a6970 *2066696c652e0a2020202069ffffffff4e525200000073230000006372656174696e6720272573 *2720616e6420616464696e67202725732720746f20697463030000000600000005000000130000 *00738d0000007886007c0200445d7e007d03007400006901006902007400006901006903007c01 *007c03008302008301007d04007400006901006904007c04008301006f4400017c040074050088 *0100830100640100171f7d0500880000701400017c00006906007c04007c0500830200016e0100 *017407006908006402007c0500168301000171070001710700576400005328030000004e690100 *0000730b000000616464696e6720272573272809000000520f000000521000000074080000006e *6f726d706174685219000000526d00000052450000005218000000520500000052840000002806 *00000074010000007a525900000074050000006e616d6573528800000052100000005221000000 *280200000052520000007408000000626173655f64697228000000007349000000433a5c746168 *6f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574 *7570746f6f6c735c636f6d6d616e645c62646973745f6567672e70797405000000766973697401 *0200007310000000000107000601210113011401070114017303000000322e34740b000000636f *6d7072657373696f6e281000000074070000007a697066696c655202000000520f000000521000 *000052590000005205000000524a000000522400000052960000005297000000740a0000005a49 *505f53544f524544740c0000005a49505f4445464c4154454452c100000074070000005a697046 *696c6552a5000000521a000000280a000000740c0000007a69705f66696c656e616d6552e60000 *00526200000052520000007408000000636f6d7072657373526300000052e900000052e7000000 *52e800000052e400000028000000002802000000525200000052e60000007349000000433a5c74 *61686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c73 *65747570746f6f6c735c636f6d6d616e645c62646973745f6567672e70795274000000f4010000 *731a00000000090c011c01130212090d0113021c010701180116010e021601282d000000740700 *00005f5f646f635f5f5296000000520f00000052d3000000740a0000007365747570746f6f6c73 *52000000007412000000646973747574696c732e6469725f7574696c5201000000520200000074 *13000000646973747574696c732e737973636f6e66696752030000005204000000740900000064 *6973747574696c7352050000007410000000646973747574696c732e6572726f72735206000000 *740d000000706b675f7265736f7572636573520700000052080000005209000000520a00000074 *050000007479706573520b00000074140000007365747570746f6f6c732e657874656e73696f6e *520c0000005214000000521e000000528c000000521f00000052d500000052d600000074050000 *0073706c697452a700000052830000005289000000526f00000052bc00000052bb00000052b800 *000052bd00000052d700000052ba00000052530000005224000000527400000028000000002800 *00000028000000007349000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c62646973 *745f6567672e707974080000003c6d6f64756c653e030000007338000000060324011001160116 *01100110011c0110011001100209070910060216ff00441505090a0910090a030107010a03091f *090a092d12030901 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_rpm.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_rpm.py 1 +# This is just a kludge so that bdist_rpm doesn't guess wrong about the +# distribution name and version, if the egg_info command is going to alter +# them, another kludge to allow you to build old-style non-egg RPMs, and +# finally, a kludge to track .rpm files for uploading when run on Python <2.5. + +from distutils.command.bdist_rpm import bdist_rpm as _bdist_rpm +import sys, os + +class bdist_rpm(_bdist_rpm): + + def initialize_options(self): + _bdist_rpm.initialize_options(self) + self.no_egg = None + + if sys.version<"2.5": + # Track for uploading any .rpm file(s) moved to self.dist_dir + def move_file(self, src, dst, level=1): + _bdist_rpm.move_file(self, src, dst, level) + if dst==self.dist_dir and src.endswith('.rpm'): + getattr(self.distribution,'dist_files',[]).append( + ('bdist_rpm', + src.endswith('.src.rpm') and 'any' or sys.version[:3], + os.path.join(dst, os.path.basename(src))) + ) + + def run(self): + self.run_command('egg_info') # ensure distro name is up-to-date + _bdist_rpm.run(self) + + + + + + + + + + + + + + def _make_spec_file(self): + version = self.distribution.get_version() + rpmversion = version.replace('-','_') + spec = _bdist_rpm._make_spec_file(self) + line23 = '%define version '+version + line24 = '%define version '+rpmversion + spec = [ + line.replace( + "Source0: %{name}-%{version}.tar", + "Source0: %{name}-%{unmangled_version}.tar" + ).replace( + "setup.py install ", + "setup.py install --single-version-externally-managed " + ).replace( + "%setup", + "%setup -n %{name}-%{unmangled_version}" + ).replace(line23,line24) + for line in spec + ] + spec.insert(spec.index(line24)+1, "%define unmangled_version "+version) + return spec + + + + + + + + + + + + + + + + + + + + addfile ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_rpm.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_rpm.pyc oldhex * newhex *d1f20d0a3a1ef84b630000000000000000060000004000000073420000006400006401006b0000 *6c01005a0200016400006402006b03005a03006400006402006b04005a04006403006502006601 *00640400840000830000595a010064020053280500000069ffffffff2801000000740900000062 *646973745f72706d4e520000000063000000000000000002000000420000007343000000650000 *5a01006400008400005a02006503006904006401006a00006f1000016402006403008401005a05 *006e0100016404008400005a06006405008400005a070052532806000000630100000001000000 *0200000043000000731a0000007400006901007c0000830100016400007c00005f030064000053 *28010000004e2804000000740a0000005f62646973745f72706d7412000000696e697469616c69 *7a655f6f7074696f6e7374040000004e6f6e6574060000006e6f5f656767280100000074040000 *0073656c662800000000280000000073350000006275696c645c62646973742e77696e33325c65 *67675c7365747570746f6f6c735c636f6d6d616e645c62646973745f72706d2e70795202000000 *0b000000730400000000010d017303000000322e35690100000063040000000400000008000000 *43000000739c0000007400006901007c00007c01007c02007c0300830400017c02007c00006902 *006a02006f7200017c01006903006401008301006f6200017404007c0000690500640200670000 *8303006906006403007c01006903006404008301006f070001640500700b000174070069080064 *060020740900690a00690b007c0200740900690a00690c007c0100830100830200660300830100 *016e0100016400005328070000004e73040000002e72706d740a000000646973745f66696c6573 *520000000073080000002e7372632e72706d7403000000616e796903000000280d000000520100 *000074090000006d6f76655f66696c657408000000646973745f6469727408000000656e647377 *697468740700000067657461747472740c000000646973747269627574696f6e74060000006170 *70656e647403000000737973740700000076657273696f6e74020000006f737404000000706174 *6874040000006a6f696e7408000000626173656e616d6528040000005205000000740300000073 *7263740300000064737474050000006c6576656c2800000000280000000073350000006275696c *645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c6264 *6973745f72706d2e7079520800000011000000730c000000000116012001150103012101630100 *0000010000000200000043000000731e0000007c0000690000640100830100017401006902007c *0000830100016400005328020000004e74080000006567675f696e666f2803000000740b000000 *72756e5f636f6d6d616e645201000000740300000072756e280100000052050000002800000000 *280000000073350000006275696c645c62646973742e77696e33325c6567675c7365747570746f *6f6c735c636f6d6d616e645c62646973745f72706d2e707952190000001a000000730400000000 *010d01630100000008000000060000004300000073ba0000007c00006900006901008300007d01 *007c01006902006401006402008302007d02007403006904007c00008301007d03006403007c01 *00177d04006403007c0200177d0500670000047d06007c0300445d3d007d07007c06007c070069 *02006404006405008302006902006406006407008302006902006408006409008302006902007c *04007c050083020012714f007e06007d03007c03006905007c03006906007c0500830100640a00 *17640b007c010017830200017c030053280c0000004e74010000002d74010000005f7310000000 *25646566696e652076657273696f6e20731f000000536f75726365303a20257b6e616d657d2d25 *7b76657273696f6e7d2e7461727329000000536f75726365303a20257b6e616d657d2d257b756e *6d616e676c65645f76657273696f6e7d2e746172731100000073657475702e707920696e737461 *6c6c20733500000073657475702e707920696e7374616c6c202d2d73696e676c652d7665727369 *6f6e2d65787465726e616c6c792d6d616e61676564207306000000257365747570732600000025 *7365747570202d6e20257b6e616d657d2d257b756e6d616e676c65645f76657273696f6e7d6901 *000000731a00000025646566696e6520756e6d616e676c65645f76657273696f6e202807000000 *520c000000740b0000006765745f76657273696f6e74070000007265706c616365520100000074 *0f0000005f6d616b655f737065635f66696c657406000000696e736572747405000000696e6465 *7828080000005205000000520f000000740a00000072706d76657273696f6e7404000000737065 *6374060000006c696e65323374060000006c696e65323474040000005f5b315d74040000006c69 *6e652800000000280000000073350000006275696c645c62646973742e77696e33325c6567675c *7365747570746f6f6c735c636f6d6d616e645c62646973745f72706d2e7079521e0000002a0000 *00731200000000010f0112010f010a010a02070a4a022101280800000074080000005f5f6e616d *655f5f740a0000005f5f6d6f64756c655f5f5202000000520e000000520f000000520800000052 *19000000521e00000028000000002800000000280000000073350000006275696c645c62646973 *742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c62646973745f7270 *6d2e7079520000000009000000730a000000060209041002100909102805000000741b00000064 *6973747574696c732e636f6d6d616e642e62646973745f72706d52000000005201000000520e00 *0000521000000028000000002800000000280000000073350000006275696c645c62646973742e *77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c62646973745f72706d2e *707974080000003c6d6f64756c653e06000000730400000010011802 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_wininst.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_wininst.py 1 +from distutils.command.bdist_wininst import bdist_wininst as _bdist_wininst +import os, sys + +class bdist_wininst(_bdist_wininst): + + def create_exe(self, arcname, fullname, bitmap=None): + _bdist_wininst.create_exe(self, arcname, fullname, bitmap) + dist_files = getattr(self.distribution, 'dist_files', []) + + if self.target_version: + installer_name = os.path.join(self.dist_dir, + "%s.win32-py%s.exe" % + (fullname, self.target_version)) + pyversion = self.target_version + + # fix 2.5 bdist_wininst ignoring --target-version spec + bad = ('bdist_wininst','any',installer_name) + if bad in dist_files: + dist_files.remove(bad) + else: + installer_name = os.path.join(self.dist_dir, + "%s.win32.exe" % fullname) + pyversion = 'any' + good = ('bdist_wininst', pyversion, installer_name) + if good not in dist_files: + dist_files.append(good) + + def reinitialize_command (self, command, reinit_subcommands=0): + cmd = self.distribution.reinitialize_command( + command, reinit_subcommands) + if command in ('install', 'install_lib'): + cmd.install_lib = None # work around distutils bug + return cmd + + def run(self): + self._is_running = True + try: + _bdist_wininst.run(self) + finally: + self._is_running = False + addfile ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_wininst.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/bdist_wininst.pyc oldhex * newhex *d1f20d0a3c1ef84b630000000000000000060000004000000073420000006400006401006b0000 *6c01005a0200016400006402006b03005a03006400006402006b04005a04006403006502006601 *00640400840000830000595a010064020053280500000069ffffffff2801000000740d00000062 *646973745f77696e696e73744e5200000000630000000000000000020000004200000073290000 *006500005a01006404006400008401005a03006401006402008401005a04006403008400005a05 *0052532805000000630400000009000000050000004300000073e70000007400006901007c0000 *7c01007c02007c0300830400017402007c00006903006401006700008303007d04007c00006904 *006f5f00017405006906006907007c00006908006402007c02007c000069040066020016830200 *7d05007c00006904007d06006403006404007c05006603007d07007c07007c04006a06006f1100 *017c04006909007c07008301000171b600016e2300017405006906006907007c00006908006405 *007c0200168302007d05006404007d06006403007c06007c05006603007d08007c08007c04006a *07006f1100017c0400690a007c0800830100016e0100016400005328060000004e740a00000064 *6973745f66696c6573731100000025732e77696e33322d707925732e6578655200000000740300 *0000616e79730c00000025732e77696e33322e657865280b000000740e0000005f62646973745f *77696e696e7374740a0000006372656174655f657865740700000067657461747472740c000000 *646973747269627574696f6e740e0000007461726765745f76657273696f6e74020000006f7374 *040000007061746874040000006a6f696e7408000000646973745f646972740600000072656d6f *76657406000000617070656e642809000000740400000073656c6674070000006172636e616d65 *740800000066756c6c6e616d6574060000006269746d61705201000000740e000000696e737461 *6c6c65725f6e616d657409000000707976657273696f6e74030000006261647404000000676f6f *642800000000280000000073390000006275696c645c62646973742e77696e33325c6567675c73 *65747570746f6f6c735c636f6d6d616e645c62646973745f77696e696e73742e70795204000000 *0600000073200000000001160115020a010f010301130109030f010d0115020f010d0106010f01 *0d016900000000630300000004000000030000004300000073330000007c00006900006901007c *01007c02008302007d03007c01006403006a06006f0d00016400007c03005f03006e0100017c03 *005328040000004e7407000000696e7374616c6c740b000000696e7374616c6c5f6c6962280200 *00007307000000696e7374616c6c730b000000696e7374616c6c5f6c6962280400000052060000 *0074140000007265696e697469616c697a655f636f6d6d616e6474040000004e6f6e6552170000 *002804000000520e0000007407000000636f6d6d616e6474120000007265696e69745f73756263 *6f6d6d616e64737403000000636d642800000000280000000073390000006275696c645c626469 *73742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c62646973745f77 *696e696e73742e707952180000001c000000730a000000000109010c010d010d01630100000001 *0000000600000043000000732b0000007400007c00005f01007a11007402006903007c00008301 *0001576400007404007c00005f0100586400005328010000004e28050000007404000000547275 *65740b0000005f69735f72756e6e696e675203000000740300000072756e740500000046616c73 *652801000000520e0000002800000000280000000073390000006275696c645c62646973742e77 *696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c62646973745f77696e696e *73742e7079521f00000023000000730800000000010901030111024e280600000074080000005f *5f6e616d655f5f740a0000005f5f6d6f64756c655f5f521900000052040000005218000000521f *00000028000000002800000000280000000073390000006275696c645c62646973742e77696e33 *325c6567675c7365747570746f6f6c735c636f6d6d616e645c62646973745f77696e696e73742e *7079520000000004000000730600000006020c160c072805000000741f00000064697374757469 *6c732e636f6d6d616e642e62646973745f77696e696e7374520000000052030000005208000000 *740300000073797328000000002800000000280000000073390000006275696c645c6264697374 *2e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c62646973745f77696e *696e73742e707974080000003c6d6f64756c653e01000000730400000010011802 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/build_ext.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/build_ext.py 1 +from distutils.command.build_ext import build_ext as _du_build_ext +try: + # Attempt to use Pyrex for building extensions, if available + from Pyrex.Distutils.build_ext import build_ext as _build_ext +except ImportError: + _build_ext = _du_build_ext + +import os, sys +from distutils.file_util import copy_file +from setuptools.extension import Library +from distutils.ccompiler import new_compiler +from distutils.sysconfig import customize_compiler, get_config_var +get_config_var("LDSHARED") # make sure _config_vars is initialized +from distutils.sysconfig import _config_vars +from distutils import log +from distutils.errors import * + +have_rtld = False +use_stubs = False +libtype = 'shared' + +if sys.platform == "darwin": + use_stubs = True +elif os.name != 'nt': + try: + from dl import RTLD_NOW + have_rtld = True + use_stubs = True + except ImportError: + pass + +def if_dl(s): + if have_rtld: + return s + return '' + + + + + + +class build_ext(_build_ext): + def run(self): + """Build extensions in build directory, then copy if --inplace""" + old_inplace, self.inplace = self.inplace, 0 + _build_ext.run(self) + self.inplace = old_inplace + if old_inplace: + self.copy_extensions_to_source() + + def copy_extensions_to_source(self): + build_py = self.get_finalized_command('build_py') + for ext in self.extensions: + fullname = self.get_ext_fullname(ext.name) + filename = self.get_ext_filename(fullname) + modpath = fullname.split('.') + package = '.'.join(modpath[:-1]) + package_dir = build_py.get_package_dir(package) + dest_filename = os.path.join(package_dir,os.path.basename(filename)) + src_filename = os.path.join(self.build_lib,filename) + + # Always copy, even if source is older than destination, to ensure + # that the right extensions for the current Python/platform are + # used. + copy_file( + src_filename, dest_filename, verbose=self.verbose, + dry_run=self.dry_run + ) + if ext._needs_stub: + self.write_stub(package_dir or os.curdir, ext, True) + + + if _build_ext is not _du_build_ext and not hasattr(_build_ext,'pyrex_sources'): + # Workaround for problems using some Pyrex versions w/SWIG and/or 2.4 + def swig_sources(self, sources, *otherargs): + # first do any Pyrex processing + sources = _build_ext.swig_sources(self, sources) or sources + # Then do any actual SWIG stuff on the remainder + return _du_build_ext.swig_sources(self, sources, *otherargs) + + + + def get_ext_filename(self, fullname): + filename = _build_ext.get_ext_filename(self,fullname) + ext = self.ext_map[fullname] + if isinstance(ext,Library): + fn, ext = os.path.splitext(filename) + return self.shlib_compiler.library_filename(fn,libtype) + elif use_stubs and ext._links_to_dynamic: + d,fn = os.path.split(filename) + return os.path.join(d,'dl-'+fn) + else: + return filename + + def initialize_options(self): + _build_ext.initialize_options(self) + self.shlib_compiler = None + self.shlibs = [] + self.ext_map = {} + + def finalize_options(self): + _build_ext.finalize_options(self) + self.extensions = self.extensions or [] + self.check_extensions_list(self.extensions) + self.shlibs = [ext for ext in self.extensions + if isinstance(ext,Library)] + if self.shlibs: + self.setup_shlib_compiler() + for ext in self.extensions: + ext._full_name = self.get_ext_fullname(ext.name) + for ext in self.extensions: + fullname = ext._full_name + self.ext_map[fullname] = ext + ltd = ext._links_to_dynamic = \ + self.shlibs and self.links_to_dynamic(ext) or False + ext._needs_stub = ltd and use_stubs and not isinstance(ext,Library) + filename = ext._file_name = self.get_ext_filename(fullname) + libdir = os.path.dirname(os.path.join(self.build_lib,filename)) + if ltd and libdir not in ext.library_dirs: + ext.library_dirs.append(libdir) + if ltd and use_stubs and os.curdir not in ext.runtime_library_dirs: + ext.runtime_library_dirs.append(os.curdir) + + def setup_shlib_compiler(self): + compiler = self.shlib_compiler = new_compiler( + compiler=self.compiler, dry_run=self.dry_run, force=self.force + ) + if sys.platform == "darwin": + tmp = _config_vars.copy() + try: + # XXX Help! I don't have any idea whether these are right... + _config_vars['LDSHARED'] = "gcc -Wl,-x -dynamiclib -undefined dynamic_lookup" + _config_vars['CCSHARED'] = " -dynamiclib" + _config_vars['SO'] = ".dylib" + customize_compiler(compiler) + finally: + _config_vars.clear() + _config_vars.update(tmp) + else: + customize_compiler(compiler) + + if self.include_dirs is not None: + compiler.set_include_dirs(self.include_dirs) + if self.define is not None: + # 'define' option is a list of (name,value) tuples + for (name,value) in self.define: + compiler.define_macro(name, value) + if self.undef is not None: + for macro in self.undef: + compiler.undefine_macro(macro) + if self.libraries is not None: + compiler.set_libraries(self.libraries) + if self.library_dirs is not None: + compiler.set_library_dirs(self.library_dirs) + if self.rpath is not None: + compiler.set_runtime_library_dirs(self.rpath) + if self.link_objects is not None: + compiler.set_link_objects(self.link_objects) + + # hack so distutils' build_extension() builds a library instead + compiler.link_shared_object = link_shared_object.__get__(compiler) + + + + def get_export_symbols(self, ext): + if isinstance(ext,Library): + return ext.export_symbols + return _build_ext.get_export_symbols(self,ext) + + def build_extension(self, ext): + _compiler = self.compiler + try: + if isinstance(ext,Library): + self.compiler = self.shlib_compiler + _build_ext.build_extension(self,ext) + if ext._needs_stub: + self.write_stub( + self.get_finalized_command('build_py').build_lib, ext + ) + finally: + self.compiler = _compiler + + def links_to_dynamic(self, ext): + """Return true if 'ext' links to a dynamic lib in the same package""" + # XXX this should check to ensure the lib is actually being built + # XXX as dynamic, and not just using a locally-found version or a + # XXX static-compiled version + libnames = dict.fromkeys([lib._full_name for lib in self.shlibs]) + pkg = '.'.join(ext._full_name.split('.')[:-1]+['']) + for libname in ext.libraries: + if pkg+libname in libnames: return True + return False + + def get_outputs(self): + outputs = _build_ext.get_outputs(self) + optimize = self.get_finalized_command('build_py').optimize + for ext in self.extensions: + if ext._needs_stub: + base = os.path.join(self.build_lib, *ext._full_name.split('.')) + outputs.append(base+'.py') + outputs.append(base+'.pyc') + if optimize: + outputs.append(base+'.pyo') + return outputs + + def write_stub(self, output_dir, ext, compile=False): + log.info("writing stub loader for %s to %s",ext._full_name, output_dir) + stub_file = os.path.join(output_dir, *ext._full_name.split('.'))+'.py' + if compile and os.path.exists(stub_file): + raise DistutilsError(stub_file+" already exists! Please delete.") + if not self.dry_run: + f = open(stub_file,'w') + f.write('\n'.join([ + "def __bootstrap__():", + " global __bootstrap__, __file__, __loader__", + " import sys, os, pkg_resources, imp"+if_dl(", dl"), + " __file__ = pkg_resources.resource_filename(__name__,%r)" + % os.path.basename(ext._file_name), + " del __bootstrap__", + " if '__loader__' in globals():", + " del __loader__", + if_dl(" old_flags = sys.getdlopenflags()"), + " old_dir = os.getcwd()", + " try:", + " os.chdir(os.path.dirname(__file__))", + if_dl(" sys.setdlopenflags(dl.RTLD_NOW)"), + " imp.load_dynamic(__name__,__file__)", + " finally:", + if_dl(" sys.setdlopenflags(old_flags)"), + " os.chdir(old_dir)", + "__bootstrap__()", + "" # terminal \n + ])) + f.close() + if compile: + from distutils.util import byte_compile + byte_compile([stub_file], optimize=0, + force=True, dry_run=self.dry_run) + optimize = self.get_finalized_command('install_lib').optimize + if optimize > 0: + byte_compile([stub_file], optimize=optimize, + force=True, dry_run=self.dry_run) + if os.path.exists(stub_file) and not self.dry_run: + os.unlink(stub_file) + + +if use_stubs or os.name=='nt': + # Build shared libraries + # + def link_shared_object(self, objects, output_libname, output_dir=None, + libraries=None, library_dirs=None, runtime_library_dirs=None, + export_symbols=None, debug=0, extra_preargs=None, + extra_postargs=None, build_temp=None, target_lang=None + ): self.link( + self.SHARED_LIBRARY, objects, output_libname, + output_dir, libraries, library_dirs, runtime_library_dirs, + export_symbols, debug, extra_preargs, extra_postargs, + build_temp, target_lang + ) +else: + # Build static libraries everywhere else + libtype = 'static' + + def link_shared_object(self, objects, output_libname, output_dir=None, + libraries=None, library_dirs=None, runtime_library_dirs=None, + export_symbols=None, debug=0, extra_preargs=None, + extra_postargs=None, build_temp=None, target_lang=None + ): + # XXX we need to either disallow these attrs on Library instances, + # or warn/abort here if set, or something... + #libraries=None, library_dirs=None, runtime_library_dirs=None, + #export_symbols=None, extra_preargs=None, extra_postargs=None, + #build_temp=None + + assert output_dir is None # distutils build_ext doesn't pass this + output_dir,filename = os.path.split(output_libname) + basename, ext = os.path.splitext(filename) + if self.library_filename("x").startswith('lib'): + # strip 'lib' prefix; this is kludgy if some platform uses + # a different prefix + basename = basename[3:] + + self.create_static_lib( + objects, basename, output_dir, debug, target_lang + ) addfile ./setuptools-0.6c14devdev.egg/setuptools/command/build_ext.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/build_ext.pyc oldhex * newhex *d1f20d0a3c1ef84b6300000000000000001d0000004000000073da0100006400006401006b0000 *6c01005a0200017914006400006401006b03006c01005a040001576e1900046505006a0a006f0d *00010101016502005a04006e020001586400006402006b06005a06006400006402006b07005a07 *006400006403006b08006c09005a0900016400006404006b0a006c0b005a0b0001640000640500 *6b0c006c0d005a0d00016400006406006b0e006c0f005a0f006c10005a10000165100064070083 *0100016400006408006b0e006c11005a1100016400006409006b12006c13005a13000164000064 *0a006b1400546515005a16006515005a1700640b005a1800650700691900640c006a02006f0a00 *01651a005a17006e4b0001650600691b00640d006a03006f3a0001792000640000640e006b1c00 *6c1d005a1d0001651a005a1600651a005a170057714801046505006a0a006f0700010101017148 *0101586e010001640f008400005a1e00641000650400660100641100840000830000595a010065 *170070100001650600691b00640d006a02006f2b00016402006402006402006402006402006412 *00640200640200640200640200641300840a005a20006e2e00016414005a180064020064020064 *0200640200640200641200640200640200640200640200641500840a005a200064020053281600 *000069ffffffff280100000074090000006275696c645f6578744e28010000007409000000636f *70795f66696c65280100000074070000004c6962726172792801000000740c0000006e65775f63 *6f6d70696c657228020000007412000000637573746f6d697a655f636f6d70696c6572740e0000 *006765745f636f6e6669675f76617274080000004c445348415245442801000000740c0000005f *636f6e6669675f76617273280100000074030000006c6f67280100000074010000002a74060000 *00736861726564740600000064617277696e74020000006e742801000000740800000052544c44 *5f4e4f57630100000001000000010000004300000073100000007400006f0500017c0000530164 *01005328020000004e740000000028010000007409000000686176655f72746c64280100000074 *0100000073280000000028000000007349000000433a5c7461686f652d6c6166735c7365747570 *746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d61 *6e645c6275696c645f6578742e7079740500000069665f646c2000000073060000000001070105 *015200000000630000000000000000030000004200000073990000006500005a01006400008400 *005a02006401008400005a03006504006505006a09006f1e00016506006504006402008302000c *6f0d00016403008400005a07006e0100016404008400005a08006405008400005a090064060084 *00005a0a006407008400005a0b006408008400005a0c006409008400005a0d00640a008400005a *0e00640b008400005a0f00651000640c008401005a11005253280d000000630100000002000000 *020000004300000073420000007c0000690000640100027d01007c00005f00007401006902007c *0000830100017c01007c00005f00007c01006f0e00017c0000690300830000016e010001640200 *532803000000733b0000004275696c6420657874656e73696f6e7320696e206275696c64206469 *726563746f72792c207468656e20636f7079206966202d2d696e706c61636569000000004e2804 *0000007407000000696e706c616365740a0000005f6275696c645f657874740300000072756e74 *19000000636f70795f657874656e73696f6e735f746f5f736f7572636528020000007404000000 *73656c66740b0000006f6c645f696e706c616365280000000028000000007349000000433a5c74 *61686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c73 *65747570746f6f6c735c636f6d6d616e645c6275696c645f6578742e707952140000002b000000 *730a000000000213010d010901070163010000000a000000090000004300000073fc0000007c00 *006900006401008301007d010078e6007c0000690100445ddb007d02007c00006902007c020069 *03008301007d03007c00006904007c03008301007d04007c03006905006402008301007d050064 *02006906007c0500640300208301007d06007c01006907007c06008301007d0700740800690900 *6906007c0700740800690900690a007c04008301008302007d08007408006909006906007c0000 *690b007c04008302007d0900740c007c09007c08006404007c0000690d006405007c0000690e00 *830202017c0200690f006f2100017c00006910007c0700700700017408006911007c0200741200 *8303000171190001711900576400005328060000004e74080000006275696c645f707974010000 *002e69ffffffff7407000000766572626f736574070000006472795f72756e2813000000741500 *00006765745f66696e616c697a65645f636f6d6d616e64740a000000657874656e73696f6e7374 *100000006765745f6578745f66756c6c6e616d6574040000006e616d6574100000006765745f65 *78745f66696c656e616d65740500000073706c697474040000006a6f696e740f0000006765745f *7061636b6167655f64697274020000006f737404000000706174687408000000626173656e616d *6574090000006275696c645f6c69625201000000521a000000521b000000740b0000005f6e6565 *64735f73747562740a00000077726974655f737475627406000000637572646972740400000054 *727565280a000000521600000052180000007403000000657874740800000066756c6c6e616d65 *740800000066696c656e616d6574070000006d6f647061746874070000007061636b616765740b *0000007061636b6167655f646972740d000000646573745f66696c656e616d65740c0000007372 *635f66696c656e616d65280000000028000000007349000000433a5c7461686f652d6c6166735c *7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c *636f6d6d616e645c6275696c645f6578742e7079521500000033000000731e00000000010f010a *00060112010f010f0113010f0121011805030112010a020a01740d00000070797265785f736f75 *726365736302000000030000000400000047000000732c0000007400006901007c00007c010083 *0200700400017c01007d01007402006901007c00007c01007c02008c02005328010000004e2803 *0000005213000000740c000000737769675f736f7572636573740d0000005f64755f6275696c64 *5f657874280300000052160000007407000000736f757263657374090000006f74686572617267 *73280000000028000000007349000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c62 *75696c645f6578742e707952350000004b00000073040000000002190263020000000600000004 *0000004300000073a40000007400006901007c00007c01008302007d02007c00006902007c0100 *197d03007403007c03007404008302006f2c00017405006906006907007c02008301005c02007d *04007d03007c00006908006909007c0400740a008302005301740b006f3a00017c0300690c006f *300001740500690600690d007c02008301005c02007d05007d0400740500690600690e007c0500 *6401007c04001783020053017c0200536400005328020000004e7303000000646c2d280f000000 *5213000000522000000074070000006578745f6d6170740a0000006973696e7374616e63655202 *00000052240000005225000000740800000073706c6974657874740e00000073686c69625f636f *6d70696c657274100000006c6962726172795f66696c656e616d6574070000006c696274797065 *74090000007573655f737475627374110000005f6c696e6b735f746f5f64796e616d6963522100 *0000522200000028060000005216000000522d000000522e000000522c0000007402000000666e *740100000064280000000028000000007349000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d *616e645c6275696c645f6578742e70795220000000530000007312000000000112010d01100118 *0114011101180118026301000000010000000200000043000000732c0000007400006901007c00 *00830100016400007c00005f03006700007c00005f04006800007c00005f050064000053280100 *00004e280600000052130000007412000000696e697469616c697a655f6f7074696f6e73740400 *00004e6f6e65523c000000740600000073686c6962735239000000280100000052160000002800 *00000028000000007349000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c6275696c *645f6578742e707952430000005f000000730800000000010d0109010901630100000007000000 *090000004300000073bf0100007400006901007c0000830100017c000069020070040001670000 *7c00005f02007c00006903007c000069020083010001670000047d01007c0000690200445d2100 *7d02007404007c02007405008302006f0b00017c01007c020012713e0001713e007e01007c0000 *5f06007c00006906006f0e00017c0000690700830000016e0100017826007c0000690200445d1b *007d02007c00006908007c02006909008301007c02005f0a00718d0057780c017c000069020044 *5d01017d02007c0200690a007d03007c02007c0000690b007c03003c7c00006906006f1000017c *0000690c007c020083010070040001740d00047d04007c02005f0e007c04006f150001740f006f *0e00017404007c02007405008302000c7c02005f10007c00006911007c0300830100047d05007c *02005f12007413006914006915007413006914006916007c00006917007c05008302008301007d *06007c04006f2400017c06007c02006918006a07006f1400017c02006918006919007c06008301 *00016e0100017c04006f310001740f006f2a0001741300691a007c0200691b006a07006f170001 *7c0200691b00691900741300691a008301000171b6000171b600576400005328010000004e281c *0000005213000000741000000066696e616c697a655f6f7074696f6e73521d0000007415000000 *636865636b5f657874656e73696f6e735f6c697374523a00000052020000005245000000741400 *000073657475705f73686c69625f636f6d70696c6572521e000000521f000000740a0000005f66 *756c6c5f6e616d65523900000074100000006c696e6b735f746f5f64796e616d69637405000000 *46616c73655240000000523f00000052280000005220000000740a0000005f66696c655f6e616d *655224000000522500000074070000006469726e616d6552220000005227000000740c0000006c *6962726172795f646972737406000000617070656e64522a000000741400000072756e74696d65 *5f6c6962726172795f646972732807000000521600000074040000005f5b315d522c000000522d *00000074030000006c7464522e00000074060000006c6962646972280000000028000000007349 *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c7365747570746f6f6c735c636f6d6d616e645c6275696c645f6578742e70795246 *00000065000000732c00000000010d0113011001140127010a010e010a00060119010a00060109 *010d022701210116012401170114012101630100000006000000090000004300000073d9010000 *7400006401007c00006901006402007c00006902006403007c0000690300830003047d01007c00 *005f04007405006906006404006a02006f5700017407006908008300007d02007a2c0064050074 *07006406003c6407007407006408003c640900740700640a003c7409007c010083010001576400 *00740700690a0083000001740700690b007c020083010001586e0b00017409007c010083010001 *7c0000690c006400006a09006f1400017c0100690e007c0000690c00830100016e0100017c0000 *690f006400006a09006f2e0001782b007c0000690f00445d1c005c02007d03007d04007c010069 *10007c03007c04008302000171da00576e0100017c00006911006400006a09006f250001782200 *7c0000691100445d13007d05007c01006912007c050083010001711801576e0100017c00006913 *006400006a09006f1400017c01006914007c0000691300830100016e0100017c00006915006400 *006a09006f1400017c01006916007c0000691500830100016e0100017c00006917006400006a09 *006f1400017c01006918007c0000691700830100016e0100017c00006919006400006a09006f14 *00017c0100691a007c0000691900830100016e010001741b00691c007c01008301007c01005f1b *0064000053280b0000004e7408000000636f6d70696c6572521b0000007405000000666f726365 *520b0000007330000000676363202d576c2c2d78202d64796e616d69636c6962202d756e646566 *696e65642064796e616d69635f6c6f6f6b75705206000000730c000000202d64796e616d69636c *69627408000000434353484152454473060000002e64796c69627402000000534f281d00000052 *030000005254000000521b0000005255000000523c00000074030000007379737408000000706c *6174666f726d52070000007404000000636f707952040000007405000000636c65617274060000 *00757064617465740c000000696e636c7564655f64697273524400000074100000007365745f69 *6e636c7564655f646972737406000000646566696e65740c000000646566696e655f6d6163726f *7405000000756e646566740e000000756e646566696e655f6d6163726f74090000006c69627261 *72696573740d0000007365745f6c6962726172696573524e00000074100000007365745f6c6962 *726172795f646972737405000000727061746874180000007365745f72756e74696d655f6c6962 *726172795f64697273740c0000006c696e6b5f6f626a6563747374100000007365745f6c696e6b *5f6f626a6563747374120000006c696e6b5f7368617265645f6f626a65637474070000005f5f67 *65745f5f2806000000521600000052540000007403000000746d70521f00000074050000007661 *6c756574050000006d6163726f280000000028000000007349000000433a5c7461686f652d6c61 *66735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f *6c735c636f6d6d616e645c6275696c645f6578742e707952480000007c000000733e0000000001 *0601250210010c0103020a010a010a010e020a0112020a021001140110020a000c01180110010a *000601150110011401100114011001140110011403630200000002000000030000004300000073 *280000007400007c01007401008302006f0800017c010069020053017403006904007c00007c01 *008302005328010000004e2805000000523a0000005202000000740e0000006578706f72745f73 *796d626f6c73521300000074120000006765745f6578706f72745f73796d626f6c732802000000 *5216000000522c000000280000000028000000007349000000433a5c7461686f652d6c6166735c *7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c *636f6d6d616e645c6275696c645f6578742e70795270000000a500000073060000000001100108 *01630200000003000000060000004300000073780000007c00006900007d02007a5e007401007c *01007402008302006f1000017c00006903007c00005f00006e0100017404006905007c00007c01 *00830200017c01006906006f2000017c00006907007c00006908006401008301006909007c0100 *830200016e010001576400007c02007c00005f0000586400005328020000004e5218000000280a *0000005254000000523a0000005202000000523c0000005213000000740f0000006275696c645f *657874656e73696f6e52280000005229000000521c000000522700000028030000005216000000 *522c00000074090000005f636f6d70696c6572280000000028000000007349000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365 *747570746f6f6c735c636f6d6d616e645c6275696c645f6578742e70795271000000aa00000073 *120000000001090103011001100110010a0106011e036302000000070000000600000043000000 *7384000000740000690100670000047d02007c0000690200445d10007d03007c02007c03006903 *00127114007e02008301007d04006401006904007c010069030069050064010083010064020020 *640300670100178301007d05007827007c0100690600445d1c007d06007c05007c0600177c0400 *6a06006f050001740700530171600057740800532804000000733f00000052657475726e207472 *7565206966202765787427206c696e6b7320746f20612064796e616d6963206c696220696e2074 *68652073616d65207061636b616765521900000069ffffffff520e000000280900000074040000 *0064696374740800000066726f6d6b657973524500000052490000005222000000522100000052 *63000000522b000000524b00000028070000005216000000522c00000052510000007403000000 *6c696274080000006c69626e616d65737403000000706b6774070000006c69626e616d65280000 *000028000000007349000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c6275696c64 *5f6578742e7079524a000000b7000000730e0000000005300126010a0006011100090163010000 *0005000000050000004300000073a90000007400006901007c00008301007d01007c0000690200 *6401008301006903007d02007881007c0000690400445d76007d03007c03006905006f66000174 *06006907006908007c00006909007c0300690a00690b006402008301008c01007d04007c010069 *0c007c040064030017830100017c0100690c007c040064040017830100017c02006f1500017c01 *00690c007c0400640500178301000171a10001712b0001712b00577c01005328060000004e5218 *000000521900000073030000002e707973040000002e70796373040000002e70796f280d000000 *5213000000740b0000006765745f6f757470757473521c00000074080000006f7074696d697a65 *521d00000052280000005224000000522500000052220000005227000000524900000052210000 *00524f0000002805000000521600000074070000006f757470757473527a000000522c00000074 *0400000062617365280000000028000000007349000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f *6d6d616e645c6275696c645f6578742e70795279000000c2000000731600000000010f0112010a *0006010a0124011101110107011d01630400000008000000140000004300000073c00100007400 *006901006401007c02006902007c0100830300017403006904006905007c01007c020069020069 *06006402008301008c0100640300177d04007c03006f2700017403006904006907007c04008301 *006f1400017408007c0400640400178301008201006e0100017c000069090070980001740a007c *04006405008302007d05007c0500690b00640600690500640700640800640900740c00640a0083 *010017640b00740300690400690d007c0200690e0083010016640c00640d00640e00740c00640f *00830100641000641100641200740c00641300830100641400641500740c006416008301006417 *00641800641900671200830100830100017c0500690f00830000016e0100017c03006faa000164 *1a00641b006b10006c11007d0600017c06007c0400670100641c00641d00641e00741200641f00 *7c0000690900830103017c00006913006420008301006914007d07007c0700641d006a04006f26 *00017c06007c0400670100641c007c0700641e00741200641f007c0000690900830103016e0100 *017403006904006907007c04008301006f1c00017c00006909000c6f1100017403006915007c04 *008301000171bc01016e0100016400005328210000004e732000000077726974696e6720737475 *62206c6f6164657220666f7220257320746f202573521900000073030000002e7079731f000000 *20616c7265616479206578697374732120506c656173652064656c6574652e7401000000777301 *0000000a7314000000646566205f5f626f6f7473747261705f5f28293a732d000000202020676c *6f62616c205f5f626f6f7473747261705f5f2c205f5f66696c655f5f2c205f5f6c6f616465725f *5f7325000000202020696d706f7274207379732c206f732c20706b675f7265736f75726365732c *20696d7073040000002c20646c733a0000002020205f5f66696c655f5f203d20706b675f726573 *6f75726365732e7265736f757263655f66696c656e616d65285f5f6e616d655f5f2c2572297314 *00000020202064656c205f5f626f6f7473747261705f5f7320000000202020696620275f5f6c6f *616465725f5f2720696e20676c6f62616c7328293a73150000002020202020202064656c205f5f *6c6f616465725f5f73230000002020206f6c645f666c616773203d207379732e676574646c6f70 *656e666c616773282973180000002020206f6c645f646972203d206f732e676574637764282973 *070000002020207472793a732800000020202020206f732e6368646972286f732e706174682e64 *69726e616d65285f5f66696c655f5f2929732400000020202020207379732e736574646c6f7065 *6e666c61677328646c2e52544c445f4e4f572973280000002020202020696d702e6c6f61645f64 *796e616d6963285f5f6e616d655f5f2c5f5f66696c655f5f29730b00000020202066696e616c6c *793a732200000020202020207379732e736574646c6f70656e666c616773286f6c645f666c6167 *7329731600000020202020206f732e6368646972286f6c645f64697229730f0000005f5f626f6f *7473747261705f5f2829520e00000069ffffffff2801000000740c000000627974655f636f6d70 *696c65527a00000069000000005255000000521b000000740b000000696e7374616c6c5f6c6962 *281600000052080000007404000000696e666f5249000000522400000052250000005222000000 *52210000007406000000657869737473740e000000446973747574696c734572726f72521b0000 *0074040000006f70656e7405000000777269746552110000005226000000524c00000074050000 *00636c6f7365740e000000646973747574696c732e7574696c527e000000522b000000521c0000 *00527a0000007406000000756e6c696e6b28080000005216000000740a0000006f75747075745f *646972522c0000007407000000636f6d70696c657409000000737475625f66696c657401000000 *66527e000000527a000000280000000028000000007349000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c73 *5c636f6d6d616e645c6275696c645f6578742e70795229000000ce000000734a00000000011601 *25011a0114010a010f010c01030103010d01030113010301030103010901030103010301090103 *0103010901030103010d020e01070110011201100112010d01120114011e012812000000740800 *00005f5f6e616d655f5f740a0000005f5f6d6f64756c655f5f5214000000521500000052130000 *005236000000740700000068617361747472523500000052200000005243000000524600000052 *4800000052700000005271000000524a0000005279000000524b00000052290000002800000000 *280000000028000000007349000000433a5c7461686f652d6c6166735c7365747570746f6f6c73 *2d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c6275 *696c645f6578742e707952000000002a000000731a0000000601090809161e020d08090c090609 *1709290905090d090b090c6900000000630d0000000d0000000e0000004300000073380000007c *00006900007c00006901007c01007c02007c03007c04007c05007c06007c07007c08007c09007c *0a007c0b007c0c00830d00016400005328010000004e280200000074040000006c696e6b740e00 *00005348415245445f4c494252415259280d000000521600000074070000006f626a6563747374 *0e0000006f75747075745f6c69626e616d6552880000005263000000524e000000525000000052 *6f00000074050000006465627567740d00000065787472615f70726561726773740e0000006578 *7472615f706f737461726773740a0000006275696c645f74656d70740b0000007461726765745f *6c616e67280000000028000000007349000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e *645c6275696c645f6578742e7079526a000000fa000000730a000000000406010c010c010c0174 *06000000737461746963630d00000010000000070000004300000073880000007c03006400006a *080070070001740100820100017402006903006904007c02008301005c02007d03007d0d007402 *006903006905007c0d008301005c02007d0e007d0f007c00006906006401008301006907006402 *008301006f0e00017c0e006403001f7d0e006e0100017c00006908007c01007c0e007c03007c08 *007c0c00830500016400005328040000004e740100000078527500000069030000002809000000 *5244000000740e000000417373657274696f6e4572726f72522400000052250000005221000000 *523b000000523d000000740a0000007374617274737769746874110000006372656174655f7374 *617469635f6c696228100000005216000000529100000052920000005288000000526300000052 *4e0000005250000000526f00000052930000005294000000529500000052960000005297000000 *522e0000005226000000522c000000280000000028000000007349000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574757074 *6f6f6c735c636f6d6d616e645c6275696c645f6578742e7079526a00000008010000730e000000 *000b14011801180119030e0206012821000000741b000000646973747574696c732e636f6d6d61 *6e642e6275696c645f65787452000000005236000000741900000050797265782e446973747574 *696c732e6275696c645f6578745213000000740b000000496d706f72744572726f725224000000 *52580000007413000000646973747574696c732e66696c655f7574696c52010000007414000000 *7365747570746f6f6c732e657874656e73696f6e52020000007413000000646973747574696c73 *2e63636f6d70696c657252030000007413000000646973747574696c732e737973636f6e666967 *5204000000520500000052070000007409000000646973747574696c7352080000007410000000 *646973747574696c732e6572726f7273524b000000520f000000523f000000523e000000525900 *0000522b000000521f0000007402000000646c520d00000052110000005244000000526a000000 *2800000000280000000028000000007349000000433a5c7461686f652d6c6166735c7365747570 *746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d61 *6e645c6275696c645f6578742e707974080000003c6d6f64756c653e01000000734a0000001001 *030214010e010b02180110011001100116010a01100110010a0206010601060210010a01100103 *01100106010a010e010902090a16cd170303010901090116090602030109010901 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/build_py.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/build_py.py 1 +import os.path, sys, fnmatch +from distutils.command.build_py import build_py as _build_py +from distutils.util import convert_path +from glob import glob + +class build_py(_build_py): + """Enhanced 'build_py' command that includes data files with packages + + The data files are specified via a 'package_data' argument to 'setup()'. + See 'setuptools.dist.Distribution' for more details. + + Also, this version of the 'build_py' command allows you to specify both + 'py_modules' and 'packages' in the same setup operation. + """ + def finalize_options(self): + _build_py.finalize_options(self) + self.package_data = self.distribution.package_data + self.exclude_package_data = self.distribution.exclude_package_data or {} + if 'data_files' in self.__dict__: del self.__dict__['data_files'] + + def run(self): + """Build modules, packages, and copy data files to build directory""" + if not self.py_modules and not self.packages: + return + + if self.py_modules: + self.build_modules() + + if self.packages: + self.build_packages() + self.build_package_data() + + # Only compile actual .py files, using our base class' idea of what our + # output files are. + self.byte_compile(_build_py.get_outputs(self, include_bytecode=0)) + + def __getattr__(self,attr): + if attr=='data_files': # lazily compute data files + self.data_files = files = self._get_data_files(); return files + return _build_py.__getattr__(self,attr) + + def _get_data_files(self): + """Generate list of '(package,src_dir,build_dir,filenames)' tuples""" + self.analyze_manifest() + data = [] + for package in self.packages or (): + # Locate package source directory + src_dir = self.get_package_dir(package) + + # Compute package build directory + build_dir = os.path.join(*([self.build_lib] + package.split('.'))) + + # Length of path to strip from found files + plen = len(src_dir)+1 + + # Strip directory from globbed filenames + filenames = [ + file[plen:] for file in self.find_data_files(package, src_dir) + ] + data.append( (package, src_dir, build_dir, filenames) ) + return data + + def find_data_files(self, package, src_dir): + """Return filenames for package's data files in 'src_dir'""" + globs = (self.package_data.get('', []) + + self.package_data.get(package, [])) + files = self.manifest_files.get(package, [])[:] + for pattern in globs: + # Each pattern has to be converted to a platform-specific path + files.extend(glob(os.path.join(src_dir, convert_path(pattern)))) + return self.exclude_data_files(package, src_dir, files) + + def build_package_data(self): + """Copy data files into build directory""" + lastdir = None + for package, src_dir, build_dir, filenames in self.data_files: + for filename in filenames: + target = os.path.join(build_dir, filename) + self.mkpath(os.path.dirname(target)) + self.copy_file(os.path.join(src_dir, filename), target) + + + def analyze_manifest(self): + self.manifest_files = mf = {} + if not self.distribution.include_package_data: + return + src_dirs = {} + for package in self.packages or (): + # Locate package source directory + src_dirs[assert_relative(self.get_package_dir(package))] = package + + self.run_command('egg_info') + ei_cmd = self.get_finalized_command('egg_info') + for path in ei_cmd.filelist.files: + d,f = os.path.split(assert_relative(path)) + prev = None + oldf = f + while d and d!=prev and d not in src_dirs: + prev = d + d, df = os.path.split(d) + f = os.path.join(df, f) + if d in src_dirs: + if path.endswith('.py') and f==oldf: + continue # it's a module, not data + mf.setdefault(src_dirs[d],[]).append(path) + + def get_data_files(self): pass # kludge 2.4 for lazy computation + + if sys.version<"2.4": # Python 2.4 already has this code + def get_outputs(self, include_bytecode=1): + """Return complete list of files copied to the build directory + + This includes both '.py' files and data files, as well as '.pyc' + and '.pyo' files if 'include_bytecode' is true. (This method is + needed for the 'install_lib' command to do its job properly, and to + generate a correct installation manifest.) + """ + return _build_py.get_outputs(self, include_bytecode) + [ + os.path.join(build_dir, filename) + for package, src_dir, build_dir,filenames in self.data_files + for filename in filenames + ] + + def check_package(self, package, package_dir): + """Check namespace packages' __init__ for declare_namespace""" + try: + return self.packages_checked[package] + except KeyError: + pass + + init_py = _build_py.check_package(self, package, package_dir) + self.packages_checked[package] = init_py + + if not init_py or not self.distribution.namespace_packages: + return init_py + + for pkg in self.distribution.namespace_packages: + if pkg==package or pkg.startswith(package+'.'): + break + else: + return init_py + + f = open(init_py,'rU') + if 'declare_namespace' not in f.read(): + from distutils.errors import DistutilsError + raise DistutilsError( + "Namespace package problem: %s is a namespace package, but its\n" + "__init__.py does not call declare_namespace()! Please fix it.\n" + '(See the setuptools manual under "Namespace Packages" for ' + "details.)\n" % (package,) + ) + f.close() + return init_py + + def initialize_options(self): + self.packages_checked={} + _build_py.initialize_options(self) + + + + + + + + def exclude_data_files(self, package, src_dir, files): + """Filter filenames for package's data files in 'src_dir'""" + globs = (self.exclude_package_data.get('', []) + + self.exclude_package_data.get(package, [])) + bad = [] + for pattern in globs: + bad.extend( + fnmatch.filter( + files, os.path.join(src_dir, convert_path(pattern)) + ) + ) + bad = dict.fromkeys(bad) + seen = {} + return [ + f for f in files if f not in bad + and f not in seen and seen.setdefault(f,1) # ditch dupes + ] + + +def assert_relative(path): + if not os.path.isabs(path): + return path + from distutils.errors import DistutilsSetupError + raise DistutilsSetupError( +"""Error: setup script specifies an absolute path: + + %s + +setup() arguments must *always* be /-separated paths relative to the +setup.py directory, *never* absolute paths. +""" % path + ) + + + + + + + + + addfile ./setuptools-0.6c14devdev.egg/setuptools/command/build_py.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/build_py.pyc oldhex * newhex *d1f20d0a3e1ef84b630000000000000000090000004000000073770000006400006401006b0000 *5a01006400006401006b02005a02006400006401006b03005a03006400006402006b04006c0500 *5a0600016400006403006b07006c08005a0800016400006404006b09006c09005a090001640500 *650600660100640600840000830000595a05006407008400005a0a0064010053280800000069ff *ffffff4e280100000074080000006275696c645f70792801000000740c000000636f6e76657274 *5f7061746828010000007404000000676c6f625200000000630000000000000000020000004200 *000073910000006500005a01006400005a02006401008400005a03006402008400005a04006403 *008400005a05006404008400005a06006405008400005a07006406008400005a08006407008400 *005a09006408008400005a0a00650b00690c006409006a00006f100001640a00640b008401005a *0d006e010001640c008400005a0e00640d008400005a0f00640e008400005a10005253280f0000 *007358010000456e68616e63656420276275696c645f70792720636f6d6d616e64207468617420 *696e636c7564657320646174612066696c65732077697468207061636b616765730a0a20202020 *54686520646174612066696c657320617265207370656369666965642076696120612027706163 *6b6167655f646174612720617267756d656e7420746f202773657475702829272e0a2020202053 *656520277365747570746f6f6c732e646973742e446973747269627574696f6e2720666f72206d *6f72652064657461696c732e0a0a20202020416c736f2c20746869732076657273696f6e206f66 *2074686520276275696c645f70792720636f6d6d616e6420616c6c6f777320796f7520746f2073 *70656369667920626f74680a202020202770795f6d6f64756c65732720616e6420277061636b61 *6765732720696e207468652073616d65207365747570206f7065726174696f6e2e0a2020202063 *0100000001000000020000004300000073540000007400006901007c0000830100017c00006902 *006903007c00005f03007c0000690200690400700400016800007c00005f04006401007c000069 *05006a06006f0e00017c00006905006401003d6e0100016400005328020000004e740a00000064 *6174615f66696c6573280600000074090000005f6275696c645f7079741000000066696e616c69 *7a655f6f7074696f6e73740c000000646973747269627574696f6e740c0000007061636b616765 *5f6461746174140000006578636c7564655f7061636b6167655f6461746174080000005f5f6469 *63745f5f2801000000740400000073656c662800000000280000000073340000006275696c645c *62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c6275696c *645f70792e707952050000000f000000730a00000000010d010f01160110006301000000010000 *00050000004300000073750000007c00006900000c6f1000017c00006901000c6f050001640100 *53017c00006900006f0e00017c0000690200830000016e0100017c00006901006f1800017c0000 *690300830000017c0000690400830000016e0100017c00006905007406006907007c0000640200 *64030083010183010001640100532804000000733f0000004275696c64206d6f64756c65732c20 *7061636b616765732c20616e6420636f707920646174612066696c657320746f206275696c6420 *6469726563746f72794e7410000000696e636c7564655f62797465636f64656900000000280800 *0000740a00000070795f6d6f64756c657374080000007061636b61676573740d0000006275696c *645f6d6f64756c6573740e0000006275696c645f7061636b6167657374120000006275696c645f *7061636b6167655f64617461740c000000627974655f636f6d70696c655204000000740b000000 *6765745f6f7574707574732801000000520a000000280000000028000000007334000000627569 *6c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c62 *75696c645f70792e7079740300000072756e1500000073100000000002160105020a010e020a01 *0a010e04630200000003000000030000004300000073350000007c01006401006a02006f180001 *7c0000690000830000047c00005f01007d02007c020053017402006903007c00007c0100830200 *5328020000004e52030000002804000000740f0000005f6765745f646174615f66696c65735203 *0000005204000000740b0000005f5f676574617474725f5f2803000000520a0000007404000000 *61747472740500000066696c65732800000000280000000073340000006275696c645c62646973 *742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c6275696c645f7079 *2e7079521500000025000000730800000000010d01130005016301000000090000000800000043 *00000073bd0000007c0000690000830000016700007d010078a6007c0000690100700400016403 *00445d94007d02007c00006902007c02008301007d03007403006904006905007c000069060067 *01007c0200690700640100830100178c00007d04007408007c0300830100640200177d05006700 *00047d06007c00006909007c02007c0300830200445d11007d07007c06007c07007c05001f1271 *82007e06007d08007c0100690a007c02007c03007c04007c080066040083010001712100577c01 *00532804000000733f00000047656e6572617465206c697374206f662027287061636b6167652c *7372635f6469722c6275696c645f6469722c66696c656e616d65732927207475706c6573740100 *00002e69010000002800000000280b0000007410000000616e616c797a655f6d616e6966657374 *520d000000740f0000006765745f7061636b6167655f64697274020000006f7374040000007061 *746874040000006a6f696e74090000006275696c645f6c6962740500000073706c697474030000 *006c656e740f00000066696e645f646174615f66696c65737406000000617070656e6428090000 *00520a00000074040000006461746174070000007061636b61676574070000007372635f646972 *74090000006275696c645f6469727404000000706c656e74040000005f5b315d74040000006669 *6c65740900000066696c656e616d65732800000000280000000073340000006275696c645c6264 *6973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c6275696c645f *70792e707952140000002a000000731400000000020a010601110006020f032503100431021d01 *6303000000060000000800000043000000738a0000007c00006900006901006401006700008302 *007c00006900006901007c0100670000830200177d03007c00006902006901007c010067000083 *02001e7d04007836007c0300445d2e007d05007c04006903007404007405006906006907007c02 *007408007c050083010083020083010083010001714500577c00006909007c01007c02007c0400 *830300532802000000733600000052657475726e2066696c656e616d657320666f72207061636b *616765277320646174612066696c657320696e20277372635f646972277400000000280a000000 *52070000007403000000676574740e0000006d616e69666573745f66696c657374060000006578 *74656e645202000000521b000000521c000000521d000000520100000074120000006578636c75 *64655f646174615f66696c65732806000000520a00000052240000005225000000740500000067 *6c6f6273521700000074070000007061747465726e280000000028000000007334000000627569 *6c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c62 *75696c645f70792e707952210000003f000000730e0000000002120116011601070006022c0163 *0100000008000000060000004300000073880000006401007d0100787b007c0000690100445d70 *005c04007d02007d03007d04007d0500785b007c0500445d53007d06007402006903006904007c *04007c06008302007d07007c00006905007402006903006906007c0700830100830100017c0000 *6907007402006903006904007c03007c06008302007c0700830200017129005771100057640100 *5328020000007324000000436f707920646174612066696c657320696e746f206275696c642064 *69726563746f72794e280800000074040000004e6f6e655203000000521b000000521c00000052 *1d00000074060000006d6b7061746874070000006469726e616d657409000000636f70795f6669 *6c652808000000520a00000074070000006c617374646972522400000052250000005226000000 *522a000000740800000066696c656e616d65740600000074617267657428000000002800000000 *73340000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c63 *6f6d6d616e645c6275696c645f70792e70795210000000490000007310000000000206010a0012 *01070006011501190163010000000b00000006000000430000007368010000680000047c00005f *00007d01007c00006901006902007005000164000053016800007d02007831007c000069030070 *040001640300445d1f007d03007c03007c02007404007c00006905007c03008301008301003c71 *3600577c0000690600640100830100017c00006907006401008301007d040078ec007c04006908 *00690900445dde007d0500740a00690b00690c007404007c05008301008301005c02007d06007d *07006400007d08007c07007d09007859007c06006f5100017c06007c08006a03006f4400017c06 *007c02006a07006f3700017c06007d0800740a00690b00690c007c06008301005c02007d06007d *0a00740a00690b00690e007c0a007c07008302007d070071b50001577c06007c02006a06006f45 *00017c0500690f006402008301006f1400017c07007c09006a02006f0700017182006e0100017c *01006910007c02007c0600196700008302006911007c0500830100017182000171820057640000 *5328040000004e74080000006567675f696e666f73030000002e70792800000000281200000052 *2d00000052060000007414000000696e636c7564655f7061636b6167655f64617461520d000000 *740f0000006173736572745f72656c6174697665521a000000740b00000072756e5f636f6d6d61 *6e6474150000006765745f66696e616c697a65645f636f6d6d616e64740800000066696c656c69 *73745217000000521b000000521c000000521f0000005232000000521d0000007408000000656e *647377697468740a00000073657464656661756c745222000000280b000000520a000000740200 *00006d6674080000007372635f646972735224000000740600000065695f636d64521c00000074 *010000006474010000006674040000007072657674040000006f6c646674020000006466280000 *0000280000000073340000006275696c645c62646973742e77696e33325c6567675c7365747570 *746f6f6c735c636f6d6d616e645c6275696c645f70792e7079521900000053000000732e000000 *00010d010d0105010601110006021d020d010f010d0006011e010601060103002101060118011a *010d011d010701630100000001000000010000004300000073040000006400005328010000004e *28000000002801000000520a0000002800000000280000000073340000006275696c645c626469 *73742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c6275696c645f70 *792e7079740e0000006765745f646174615f66696c65736b00000073000000007303000000322e *3469010000006302000000080000000800000043000000735a0000007400006901007c00007c01 *00830200670000047d02007c0000690200445d35005c04007d03007d04007d05007d06007c0600 *445d1c007d07007c02007403006904006905007c05007c070083020012713300711d007e020017 *532801000000736a01000052657475726e20636f6d706c657465206c697374206f662066696c65 *7320636f7069656420746f20746865206275696c64206469726563746f72790a0a202020202020 *2020202020205468697320696e636c7564657320626f746820272e7079272066696c657320616e *6420646174612066696c65732c2061732077656c6c20617320272e707963270a20202020202020 *2020202020616e6420272e70796f272066696c65732069662027696e636c7564655f6279746563 *6f64652720697320747275652e20202854686973206d6574686f642069730a2020202020202020 *202020206e656564656420666f72207468652027696e7374616c6c5f6c69622720636f6d6d616e *6420746f20646f20697473206a6f622070726f7065726c792c20616e6420746f0a202020202020 *20202020202067656e6572617465206120636f727265637420696e7374616c6c6174696f6e206d *616e69666573742e290a2020202020202020202020202806000000520400000052120000005203 *000000521b000000521c000000521d0000002808000000520a000000520b000000522800000052 *2400000052250000005226000000522a0000005237000000280000000028000000007334000000 *6275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e *645c6275696c645f70792e707952120000006e000000730800000000080f010701190163030000 *0007000000090000004300000073fa000000790f007c00006900007c01001953576e1300047401 *006a0a006f0700010101016e020001587402006903007c00007c01007c02008303007d03007c03 *007c00006900007c01003c7c03000c700e00017c00006904006905000c6f0500017c0300530178 *3e007c0000690400690500445d2c007d04007c04007c01006a0200701400017c04006906007c01 *00640100178301006f05000150716f0001716f00577c0300537407007c03006402008302007d05 *006403007c05006908008300006a07006f2700016404006405006b09006c0a007d0600017c0600 *6406007c0100660100168301008201006e0100017c0500690b00830000017c0300532807000000 *7338000000436865636b206e616d657370616365207061636b6167657327205f5f696e69745f5f *20666f72206465636c6172655f6e616d6573706163655218000000740200000072557411000000 *6465636c6172655f6e616d65737061636569ffffffff2801000000740e00000044697374757469 *6c734572726f7273c00000004e616d657370616365207061636b6167652070726f626c656d3a20 *25732069732061206e616d657370616365207061636b6167652c20627574206974730a5f5f696e *69745f5f2e707920646f6573206e6f742063616c6c206465636c6172655f6e616d657370616365 *28292120506c65617365206669782069742e0a2853656520746865207365747570746f6f6c7320 *6d616e75616c20756e64657220224e616d657370616365205061636b616765732220666f722064 *657461696c732e290a280c00000074100000007061636b616765735f636865636b656474080000 *004b65794572726f725204000000740d000000636865636b5f7061636b61676552060000007412 *0000006e616d6573706163655f7061636b61676573740a00000073746172747377697468740400 *00006f70656e7404000000726561647410000000646973747574696c732e6572726f7273524c00 *00007405000000636c6f73652807000000520a0000005224000000740b0000007061636b616765 *5f6469727407000000696e69745f70797403000000706b675245000000524c0000002800000000 *280000000073340000006275696c645c62646973742e77696e33325c6567675c7365747570746f *6f6c735c636f6d6d616e645c6275696c645f70792e7079524f0000007c000000732a0000000002 *03010f010e01050215010d02160105020d0006012101090204020f01130110010301030311020a *016301000000010000000200000043000000731a0000006800007c00005f00007401006902007c *0000830100016400005328010000004e2803000000524d00000052040000007412000000696e69 *7469616c697a655f6f7074696f6e732801000000520a0000002800000000280000000073340000 *006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d61 *6e645c6275696c645f70792e707952590000009b00000073040000000001090163040000000a00 *0000080000004300000073d20000007c00006900006901006401006700008302007c0000690000 *6901007c0100670000830200177d04006700007d0500783c007c0400445d34007d06007c050069 *02007403006904007c03007405006906006907007c02007408007c060083010083020083020083 *01000171350057740900690a007c05008301007d05006800007d0700670000047d08007c030044 *5d3e007d09007c09007c05006a07006f2b00017c09007c07006a07006f1e00017c0700690b007c *09006402008302006f0b00017c08007c090012718d0001718d007e080053280300000073360000 *0046696c7465722066696c656e616d657320666f72207061636b61676527732064617461206669 *6c657320696e20277372635f64697227522b0000006901000000280c0000005208000000522c00 *0000522e0000007407000000666e6d61746368740600000066696c746572521b000000521c0000 *00521d0000005201000000740400000064696374740800000066726f6d6b657973524000000028 *0a000000520a000000522400000052250000005217000000523000000074030000006261645231 *00000074040000007365656e522800000052450000002800000000280000000073340000006275 *696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c *6275696c645f70792e7079522f000000a500000073180000000002120116010601070006010601 *060126030f0106021e01281100000074080000005f5f6e616d655f5f740a0000005f5f6d6f6475 *6c655f5f74070000005f5f646f635f5f5205000000521300000052150000005214000000522100 *00005210000000521900000052490000007403000000737973740700000076657273696f6e5212 *000000524f0000005259000000522f000000280000000028000000002800000000733400000062 *75696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e64 *5c6275696c645f70792e7079520000000006000000731c00000006080601090609100905091509 *0a090a091809021001100e091f090a6301000000020000000400000043000000733c0000007400 *006901006902007c0000830100700500017c000053016401006402006b03006c04007d0100017c *01006403007c0000168301008201006400005328040000004e69ffffffff280100000074130000 *00446973747574696c7353657475704572726f7273aa0000004572726f723a2073657475702073 *63726970742073706563696669657320616e206162736f6c75746520706174683a0a0a20202020 *25730a0a7365747570282920617267756d656e7473206d757374202a616c776179732a20626520 *2f2d7365706172617465642070617468732072656c617469766520746f207468650a7365747570 *2e7079206469726563746f72792c202a6e657665722a206162736f6c7574652070617468732e0a *2805000000521b000000521c000000740500000069736162735254000000526500000028020000 *00521c00000052650000002800000000280000000073340000006275696c645c62646973742e77 *696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c6275696c645f70792e7079 *523b000000b8000000730a00000000011301050110010307280b00000074070000006f732e7061 *7468521b0000005263000000525a000000741a000000646973747574696c732e636f6d6d616e64 *2e6275696c645f707952000000005204000000740e000000646973747574696c732e7574696c52 *010000005202000000523b00000028000000002800000000280000000073340000006275696c64 *5c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c627569 *6c645f70792e707974080000003c6d6f64756c653e01000000730a000000240110011001100216 *b2 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/develop.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/develop.py 1 +from setuptools.command.easy_install import easy_install +from distutils.util import convert_path +from pkg_resources import Distribution, PathMetadata, normalize_path +from distutils import log +from distutils.errors import * +import sys, os, setuptools, glob + +class develop(easy_install): + """Set up package for development""" + + description = "install package in 'development mode'" + + user_options = easy_install.user_options + [ + ("uninstall", "u", "Uninstall this source package"), + ("egg-path=", None, "Set the path to be used in the .egg-link file"), + ] + + boolean_options = easy_install.boolean_options + ['uninstall'] + + command_consumes_arguments = False # override base + + def run(self): + if self.uninstall: + self.multi_version = True + self.uninstall_link() + else: + self.install_for_development() + self.warn_deprecated_options() + + def initialize_options(self): + self.uninstall = None + self.egg_path = None + easy_install.initialize_options(self) + self.setup_path = None + self.always_copy_from = '.' # always copy eggs installed in curdir + + + + + + + def finalize_options(self): + ei = self.get_finalized_command("egg_info") + if ei.broken_egg_info: + raise DistutilsError( + "Please rename %r to %r before using 'develop'" + % (ei.egg_info, ei.broken_egg_info) + ) + self.args = [ei.egg_name] + easy_install.finalize_options(self) + # pick up setup-dir .egg files only: no .egg-info + self.package_index.scan(glob.glob('*.egg')) + + self.egg_link = os.path.join(self.install_dir, ei.egg_name+'.egg-link') + self.egg_base = ei.egg_base + if self.egg_path is None: + self.egg_path = os.path.abspath(ei.egg_base) + + target = normalize_path(self.egg_base) + if normalize_path(os.path.join(self.install_dir, self.egg_path)) != target: + raise DistutilsOptionError( + "--egg-path must be a relative path from the install" + " directory to "+target + ) + + # Make a distribution for the package's source + self.dist = Distribution( + target, + PathMetadata(target, os.path.abspath(ei.egg_info)), + project_name = ei.egg_name + ) + + p = self.egg_base.replace(os.sep,'/') + if p!= os.curdir: + p = '../' * (p.count('/')+1) + self.setup_path = p + p = normalize_path(os.path.join(self.install_dir, self.egg_path, p)) + if p != normalize_path(os.curdir): + raise DistutilsOptionError( + "Can't get a consistent path to setup script from" + " installation directory", p, normalize_path(os.curdir)) + + def install_for_development(self): + # Ensure metadata is up-to-date + self.run_command('egg_info') + # Build extensions in-place + self.reinitialize_command('build_ext', inplace=1) + self.run_command('build_ext') + self.install_site_py() # ensure that target dir is site-safe + if setuptools.bootstrap_install_from: + self.easy_install(setuptools.bootstrap_install_from) + setuptools.bootstrap_install_from = None + + # create an .egg-link in the installation dir, pointing to our egg + log.info("Creating %s (link to %s)", self.egg_link, self.egg_base) + if not self.dry_run: + f = open(self.egg_link,"w") + f.write(self.egg_path + "\n" + self.setup_path) + f.close() + # postprocess the installed distro, fixing up .pth, installing scripts, + # and handling requirements + self.process_distribution(None, self.dist, not self.no_deps) + + + def uninstall_link(self): + if os.path.exists(self.egg_link): + log.info("Removing %s (link to %s)", self.egg_link, self.egg_base) + contents = [line.rstrip() for line in file(self.egg_link)] + if contents not in ([self.egg_path], [self.egg_path, self.setup_path]): + log.warn("Link points to %s: uninstall aborted", contents) + return + if not self.dry_run: + os.unlink(self.egg_link) + if not self.dry_run: + self.update_pth(self.dist) # remove any .pth link to us + if self.distribution.scripts: + # XXX should also check for entry point scripts! + log.warn("Note: you must uninstall or replace scripts manually!") + + + + + + def install_egg_scripts(self, dist): + if dist is not self.dist: + # Installing a dependency, so fall back to normal behavior + return easy_install.install_egg_scripts(self,dist) + + # create wrapper scripts in the script dir, pointing to dist.scripts + + # new-style... + self.install_wrapper_scripts(dist) + + # ...and old-style + for script_name in self.distribution.scripts or []: + script_path = os.path.abspath(convert_path(script_name)) + script_name = os.path.basename(script_path) + f = open(script_path,'rU') + script_text = f.read() + f.close() + self.install_script(dist, script_name, script_text, script_path) + + + + + + + + + + + + + + + + + + + + + + + addfile ./setuptools-0.6c14devdev.egg/setuptools/command/develop.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/develop.pyc oldhex * newhex *d1f20d0a3e1ef84b6300000000000000000c0000004000000073a00000006400006401006b0000 *6c01005a0100016400006402006b02006c03005a0300016400006403006b04006c05005a05006c *06005a06006c07005a0700016400006404006b08006c09005a0900016400006405006b0a005464 *00006406006b0b005a0b006400006406006b0c005a0c006400006406006b0d005a0d0064000064 *06006b0e005a0e00640700650100660100640800840000830000595a0f00640600532809000000 *69ffffffff2801000000740c000000656173795f696e7374616c6c2801000000740c000000636f *6e766572745f706174682803000000740c000000446973747269627574696f6e740c0000005061 *74684d65746164617461740e0000006e6f726d616c697a655f7061746828010000007403000000 *6c6f67280100000074010000002a4e7407000000646576656c6f70630000000000000000050000 *004200000073730000006500005a01006400005a02006401005a0300650400690500640d00640f *00670200175a0500650400690700640200670100175a07006508005a09006407008400005a0a00 *6408008400005a0b006409008400005a0c00640a008400005a0d00640b008400005a0e00640c00 *8400005a0f0052532810000000731e000000536574207570207061636b61676520666f72206465 *76656c6f706d656e747325000000696e7374616c6c207061636b61676520696e2027646576656c *6f706d656e74206d6f6465277409000000756e696e7374616c6c740100000075731d000000556e *696e7374616c6c207468697320736f75726365207061636b61676573090000006567672d706174 *683d732d00000053657420746865207061746820746f206265207573656420696e20746865202e *6567672d6c696e6b2066696c65630100000001000000020000004300000073390000007c000069 *00006f1700017401007c00005f02007c0000690300830000016e0b00017c000069040083000001 *7c0000690500830000016400005328010000004e28060000005208000000740400000054727565 *740d0000006d756c74695f76657273696f6e740e000000756e696e7374616c6c5f6c696e6b7417 *000000696e7374616c6c5f666f725f646576656c6f706d656e7474170000007761726e5f646570 *726563617465645f6f7074696f6e732801000000740400000073656c6628000000002800000000 *7347000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576 *6465762e6567675c7365747570746f6f6c735c636f6d6d616e645c646576656c6f702e70797403 *00000072756e16000000730a00000000010a0109010e020a016301000000010000000200000043 *00000073350000006400007c00005f01006400007c00005f02007403006904007c000083010001 *6400007c00005f05006401007c00005f06006400005328020000004e74010000002e2807000000 *74040000004e6f6e65520800000074080000006567675f7061746852000000007412000000696e *697469616c697a655f6f7074696f6e73740a00000073657475705f706174687410000000616c77 *6179735f636f70795f66726f6d2801000000520f00000028000000002800000000734700000043 *3a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567 *675c7365747570746f6f6c735c636f6d6d616e645c646576656c6f702e707952140000001e0000 *00730a0000000001090109010d010901630100000004000000060000004300000073ef0100007c *00006900006401008301007d01007c01006901006f2000017402006402007c01006903007c0100 *690100660200168301008201006e0100017c01006904006701007c00005f05007406006907007c *0000830100017c0000690800690900740a00690a0064030083010083010001740b00690c00690d *007c0000690e007c0100690400640400178302007c00005f0f007c01006910007c00005f10007c *00006911006400006a08006f1c0001740b00690c006913007c01006910008301007c00005f1100 *6e0100017414007c00006910008301007d0200741400740b00690c00690d007c0000690e007c00 *006911008302008301007c02006a03006f1400017415006405007c0200178301008201006e0100 *017416007c02007417007c0200740b00690c006913007c01006903008301008302006406007c01 *006904008302017c00005f18007c0000691000691900740b00691a006407008302007d03007c03 *00740b00691b006a03006f1b00016408007c0300691c0064070083010064090017147d03006e01 *00017c03007c00005f1d00741400740b00690c00690d007c0000690e007c00006911007c030083 *03008301007d03007c0300741400740b00691b008301006a03006f1f0001741500640a007c0300 *741400740b00691b008301008303008201006e01000164000053280b0000004e74080000006567 *675f696e666f732d000000506c656173652072656e616d6520257220746f202572206265666f72 *65207573696e672027646576656c6f702773050000002a2e65676773090000002e6567672d6c69 *6e6b73410000002d2d6567672d70617468206d75737420626520612072656c6174697665207061 *74682066726f6d2074686520696e7374616c6c206469726563746f727920746f20740c00000070 *726f6a6563745f6e616d6574010000002f73030000002e2e2f6901000000734700000043616e27 *7420676574206120636f6e73697374656e74207061746820746f20736574757020736372697074 *2066726f6d20696e7374616c6c6174696f6e206469726563746f7279281e000000741500000067 *65745f66696e616c697a65645f636f6d6d616e64740f00000062726f6b656e5f6567675f696e66 *6f740e000000446973747574696c734572726f72521700000074080000006567675f6e616d6574 *04000000617267735200000000741000000066696e616c697a655f6f7074696f6e73740d000000 *7061636b6167655f696e64657874040000007363616e7404000000676c6f6274020000006f7374 *040000007061746874040000006a6f696e740b000000696e7374616c6c5f646972740800000065 *67675f6c696e6b74080000006567675f6261736552130000005212000000740700000061627370 *61746852040000007414000000446973747574696c734f7074696f6e4572726f72520200000052 *0300000074040000006469737474070000007265706c6163657403000000736570740600000063 *75726469727405000000636f756e7452150000002804000000520f000000740200000065697406 *000000746172676574740100000070280000000028000000007347000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574757074 *6f6f6c735c636f6d6d616e645c646576656c6f702e7079521f0000002a000000733c0000000001 *0f010a01030103011a020f010d02190222010c0110011c020f012801030103010e04030103011e *010f03180110011b0109012401160103010301630100000002000000040000004300000073da00 *00007c0000690000640100830100017c0000690100640200640300640400830101017c00006900 *00640200830100017c0000690200830000017403006904006f1d00017c00006905007403006904 *00830100016400007403005f04006e0100017407006908006405007c00006909007c0000690a00 *830300017c0000690b00703b0001740c007c00006909006406008302007d01007c0100690d007c *0000690e00640700177c0000690f0017830100017c0100691000830000016e0100017c00006911 *006400007c00006912007c00006913000c830300016400005328080000004e5217000000740900 *00006275696c645f6578747407000000696e706c61636569010000007318000000437265617469 *6e6720257320286c696e6b20746f2025732974010000007773010000000a2814000000740b0000 *0072756e5f636f6d6d616e6474140000007265696e697469616c697a655f636f6d6d616e64740f *000000696e7374616c6c5f736974655f7079740a0000007365747570746f6f6c73741600000062 *6f6f7473747261705f696e7374616c6c5f66726f6d520000000052120000005205000000740400 *0000696e666f5227000000522800000074070000006472795f72756e74040000006f70656e7405 *0000007772697465521300000052150000007405000000636c6f7365741400000070726f636573 *735f646973747269627574696f6e522b00000074070000006e6f5f646570732802000000520f00 *0000740100000066280000000028000000007347000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f *6d6d616e645c646576656c6f702e7079520d00000053000000731a00000000020d0213010d010a *010a0110010d0319010a0112011b010e03630100000004000000060000004300000073fb000000 *7400006901006902007c00006903008301006fa500017404006905006401007c00006903007c00 *0069060083030001670000047d01007407007c0000690300830100445d13007d02007c01007c02 *00690800830000127143007e01007d03007c03007c00006909006701007c00006909007c000069 *0a006702006602006a07006f150001740400690b006402007c03008302000164000053017c0000 *690c0070140001740000690d007c00006903008301000171bb00016e0100017c0000690c007014 *00017c0000690e007c0000690f00830100016e0100017c00006910006911006f11000174040069 *0b00640300830100016e0100016400005328040000004e731800000052656d6f76696e67202573 *20286c696e6b20746f2025732973240000004c696e6b20706f696e747320746f2025733a20756e *696e7374616c6c2061626f7274656473350000004e6f74653a20796f75206d75737420756e696e *7374616c6c206f72207265706c6163652073637269707473206d616e75616c6c79212812000000 *52230000005224000000740600000065786973747352270000005205000000523b000000522800 *0000740400000066696c6574060000007273747269705213000000521500000074040000007761 *726e523c0000007406000000756e6c696e6b740a0000007570646174655f707468522b00000074 *0c000000646973747269627574696f6e7407000000736372697074732804000000520f00000074 *040000005f5b315d74040000006c696e657408000000636f6e74656e7473280000000028000000 *007347000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c646576656c6f702e707952 *0c00000069000000731800000000011601190130012501100105010a0118010a0114010d026302 *00000006000000060000004300000073b50000007c01007c00006900006a09006f110001740100 *6902007c00007c010083020053017c00006903007c0100830100017880007c0000690400690500 *70040001670000445d6b007d02007406006907006908007409007c02008301008301007d030074 *0600690700690a007c03008301007d0200740b007c03006401008302007d04007c0400690c0083 *00007d05007c0400690d00830000017c0000690e007c01007c02007c05007c0300830400017142 *00576400005328020000004e74020000007255280f000000522b00000052000000007413000000 *696e7374616c6c5f6567675f736372697074737417000000696e7374616c6c5f77726170706572 *5f736372697074735249000000524a000000522300000052240000005229000000520100000074 *08000000626173656e616d65523d000000740400000072656164523f000000740e000000696e73 *74616c6c5f7363726970742806000000520f000000522b000000740b0000007363726970745f6e *616d65740b0000007363726970745f706174685242000000740b0000007363726970745f746578 *74280000000028000000007347000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c64 *6576656c6f702e7079524f0000007c00000073160000000001100211050d031400060118011201 *0f010c010a0128030000007309000000756e696e7374616c6c5209000000731d000000556e696e *7374616c6c207468697320736f75726365207061636b6167654e28030000007309000000656767 *2d706174683d4e732d00000053657420746865207061746820746f206265207573656420696e20 *746865202e6567672d6c696e6b2066696c65281000000074080000005f5f6e616d655f5f740a00 *00005f5f6d6f64756c655f5f74070000005f5f646f635f5f740b0000006465736372697074696f *6e5200000000740c000000757365725f6f7074696f6e735212000000740f000000626f6f6c6561 *6e5f6f7074696f6e73740500000046616c7365741a000000636f6d6d616e645f636f6e73756d65 *735f617267756d656e747352100000005214000000521f000000520d000000520c000000524f00 *00002800000000280000000028000000007347000000433a5c7461686f652d6c6166735c736574 *7570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d *6d616e645c646576656c6f702e7079520700000008000000731a00000006010602060206010301 *0a03100206020908090c0929091609132810000000741f0000007365747570746f6f6c732e636f *6d6d616e642e656173795f696e7374616c6c5200000000740e000000646973747574696c732e75 *74696c5201000000740d000000706b675f7265736f757263657352020000005203000000520400 *00007409000000646973747574696c7352050000007410000000646973747574696c732e657272 *6f7273740300000073797352230000005239000000522200000052070000002800000000280000 *000028000000007347000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c646576656c *6f702e707974080000003c6d6f64756c653e01000000730c000000100110011c0110010a013002 * addfile ./setuptools-0.6c14devdev.egg/setuptools/command/easy_install.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/easy_install.py 1 +#!python +"""\ +Easy Install +------------ + +A tool for doing automatic download/extract/build of distutils-based Python +packages. For detailed documentation, see the accompanying EasyInstall.txt +file, or visit the `EasyInstall home page`__. + +__ http://peak.telecommunity.com/DevCenter/EasyInstall +""" +import sys, os.path, zipimport, shutil, tempfile, zipfile, re, stat, random +from glob import glob +from setuptools import Command +from setuptools.sandbox import run_setup +from distutils import log, dir_util +from distutils.sysconfig import get_python_lib +from distutils.errors import DistutilsArgError, DistutilsOptionError, \ + DistutilsError +from setuptools.archive_util import unpack_archive +from setuptools.package_index import PackageIndex, parse_bdist_wininst +from setuptools.package_index import URL_SCHEME +from setuptools.command import bdist_egg, egg_info +from pkg_resources import * +sys_executable = os.path.normpath(sys.executable) + +__all__ = [ + 'samefile', 'easy_install', 'PthDistributions', 'extract_wininst_cfg', + 'main', 'get_exe_prefixes', +] + +def samefile(p1,p2): + if hasattr(os.path,'samefile') and ( + os.path.exists(p1) and os.path.exists(p2) + ): + return os.path.samefile(p1,p2) + return ( + os.path.normpath(os.path.normcase(p1)) == + os.path.normpath(os.path.normcase(p2)) + ) + +class easy_install(Command): + """Manage a download/build/install process""" + description = "Find/get/install Python packages" + command_consumes_arguments = True + + user_options = [ + ('prefix=', None, "installation prefix"), + ("zip-ok", "z", "install package as a zipfile"), + ("multi-version", "m", "make apps have to require() a version"), + ("upgrade", "U", "force upgrade (searches PyPI for latest versions)"), + ("install-dir=", "d", "install package to DIR"), + ("script-dir=", "s", "install scripts to DIR"), + ("exclude-scripts", "x", "Don't install scripts"), + ("always-copy", "a", "Copy all needed packages to install dir"), + ("index-url=", "i", "base URL of Python Package Index"), + ("find-links=", "f", "additional URL(s) to search for packages"), + ("delete-conflicting", "D", "no longer needed; don't use this"), + ("ignore-conflicts-at-my-risk", None, + "no longer needed; don't use this"), + ("build-directory=", "b", + "download/extract/build in DIR; keep the results"), + ('optimize=', 'O', + "also compile with optimization: -O1 for \"python -O\", " + "-O2 for \"python -OO\", and -O0 to disable [default: -O0]"), + ('record=', None, + "filename in which to record list of installed files"), + ('always-unzip', 'Z', "don't install as a zipfile, no matter what"), + ('site-dirs=','S',"list of directories where .pth files work"), + ('editable', 'e', "Install specified packages in editable form"), + ('no-deps', 'N', "don't install dependencies"), + ('allow-hosts=', 'H', "pattern(s) that hostnames must match"), + ('local-snapshots-ok', 'l', "allow building eggs from local checkouts"), + ] + boolean_options = [ + 'zip-ok', 'multi-version', 'exclude-scripts', 'upgrade', 'always-copy', + 'delete-conflicting', 'ignore-conflicts-at-my-risk', 'editable', + 'no-deps', 'local-snapshots-ok', + ] + negative_opt = {'always-unzip': 'zip-ok'} + create_index = PackageIndex + + def initialize_options(self): + self.zip_ok = self.local_snapshots_ok = None + self.install_dir = self.script_dir = self.exclude_scripts = None + self.index_url = None + self.find_links = None + self.build_directory = None + self.args = None + self.optimize = self.record = None + self.upgrade = self.always_copy = self.multi_version = None + self.editable = self.no_deps = self.allow_hosts = None + self.root = self.prefix = self.no_report = None + + # Options not specifiable via command line + self.package_index = None + self.pth_file = self.always_copy_from = None + self.delete_conflicting = None + self.ignore_conflicts_at_my_risk = None + self.site_dirs = None + self.installed_projects = {} + self.sitepy_installed = False + # Always read easy_install options, even if we are subclassed, or have + # an independent instance created. This ensures that defaults will + # always come from the standard configuration file(s)' "easy_install" + # section, even if this is a "develop" or "install" command, or some + # other embedding. + self._dry_run = None + self.verbose = self.distribution.verbose + self.distribution._set_command_options( + self, self.distribution.get_option_dict('easy_install') + ) + + def delete_blockers(self, blockers): + for filename in blockers: + if os.path.exists(filename) or os.path.islink(filename): + log.info("Deleting %s", filename) + if not self.dry_run: + if os.path.isdir(filename) and not os.path.islink(filename): + rmtree(filename) + else: + os.unlink(filename) + + def finalize_options(self): + self._expand('install_dir','script_dir','build_directory','site_dirs') + # If a non-default installation directory was specified, default the + # script directory to match it. + if self.script_dir is None: + self.script_dir = self.install_dir + + # Let install_dir get set by install_lib command, which in turn + # gets its info from the install command, and takes into account + # --prefix and --home and all that other crud. + self.set_undefined_options('install_lib', + ('install_dir','install_dir') + ) + # Likewise, set default script_dir from 'install_scripts.install_dir' + self.set_undefined_options('install_scripts', + ('install_dir', 'script_dir') + ) + # default --record from the install command + self.set_undefined_options('install', ('record', 'record')) + normpath = map(normalize_path, sys.path) + self.all_site_dirs = get_site_dirs() + if self.site_dirs is not None: + site_dirs = [ + os.path.expanduser(s.strip()) for s in self.site_dirs.split(',') + ] + for d in site_dirs: + if not os.path.isdir(d): + log.warn("%s (in --site-dirs) does not exist", d) + elif normalize_path(d) not in normpath: + raise DistutilsOptionError( + d+" (in --site-dirs) is not on sys.path" + ) + else: + self.all_site_dirs.append(normalize_path(d)) + if not self.editable: self.check_site_dir() + self.index_url = self.index_url or "http://pypi.python.org/simple" + self.shadow_path = self.all_site_dirs[:] + for path_item in self.install_dir, normalize_path(self.script_dir): + if path_item not in self.shadow_path: + self.shadow_path.insert(0, path_item) + + if self.allow_hosts is not None: + hosts = [s.strip() for s in self.allow_hosts.split(',')] + else: + hosts = ['*'] + if self.package_index is None: + self.package_index = self.create_index( + self.index_url, search_path = self.shadow_path+sys.path, hosts=hosts, + ) + self.local_index = Environment(self.shadow_path+sys.path) + + if self.find_links is not None: + if isinstance(self.find_links, basestring): + self.find_links = self.find_links.split() + else: + self.find_links = [] + if self.local_snapshots_ok: + self.package_index.scan_egg_links(self.shadow_path+sys.path) + self.package_index.add_find_links(self.find_links) + self.set_undefined_options('install_lib', ('optimize','optimize')) + if not isinstance(self.optimize,int): + try: + self.optimize = int(self.optimize) + if not (0 <= self.optimize <= 2): raise ValueError + except ValueError: + raise DistutilsOptionError("--optimize must be 0, 1, or 2") + + if self.delete_conflicting and self.ignore_conflicts_at_my_risk: + raise DistutilsOptionError( + "Can't use both --delete-conflicting and " + "--ignore-conflicts-at-my-risk at the same time" + ) + if self.editable and not self.build_directory: + raise DistutilsArgError( + "Must specify a build directory (-b) when using --editable" + ) + if not self.args: + raise DistutilsArgError( + "No urls, filenames, or requirements specified (see --help)") + + self.outputs = [] + + def run(self): + if self.verbose<>self.distribution.verbose: + log.set_verbosity(self.verbose) + try: + for spec in self.args: + self.easy_install(spec, not self.no_deps) + if self.record: + outputs = self.outputs + if self.root: # strip any package prefix + root_len = len(self.root) + for counter in xrange(len(outputs)): + outputs[counter] = outputs[counter][root_len:] + from distutils import file_util + self.execute( + file_util.write_file, (self.record, outputs), + "writing list of installed files to '%s'" % + self.record + ) + self.warn_deprecated_options() + finally: + log.set_verbosity(self.distribution.verbose) + + def pseudo_tempname(self): + """Return a pseudo-tempname base in the install directory. + This code is intentionally naive; if a malicious party can write to + the target directory you're already in deep doodoo. + """ + try: + pid = os.getpid() + except: + pid = random.randint(0,sys.maxint) + return os.path.join(self.install_dir, "test-easy-install-%s" % pid) + + def warn_deprecated_options(self): + if self.delete_conflicting or self.ignore_conflicts_at_my_risk: + log.warn( + "Note: The -D, --delete-conflicting and" + " --ignore-conflicts-at-my-risk no longer have any purpose" + " and should not be used." + ) + + def check_site_dir(self): + """Verify that self.install_dir is .pth-capable dir, if needed""" + instdir = normalize_path(self.install_dir) + pth_file = os.path.join(instdir,'easy-install.pth') + + # mkdir it if necessary + try: + os.makedirs(instdir) + except OSError: + # Oh well -- hopefully this error simply means that it is already there. + # If not the subsequent write test will identify the problem. + pass + # add it to site dirs + self.all_site_dirs.append(instdir) + + # Is it a configured, PYTHONPATH, implicit, or explicit site dir? + is_site_dir = instdir in self.all_site_dirs + + if not is_site_dir: + # No? Then directly test whether it does .pth file processing + is_site_dir = self.check_pth_processing() + else: + # make sure we can write to target dir + testfile = self.pseudo_tempname()+'.write-test' + test_exists = os.path.exists(testfile) + try: + if test_exists: os.unlink(testfile) + open(testfile,'w').close() + os.unlink(testfile) + except (OSError,IOError): + self.cant_write_to_target() + + if not is_site_dir and not self.multi_version: + # Can't install non-multi to non-site dir + log.warn(self.no_default_version_msg()) + + if is_site_dir: + if self.pth_file is None: + self.pth_file = PthDistributions(pth_file, self.all_site_dirs) + else: + self.pth_file = None + + if self.multi_version and not os.path.exists(pth_file): + self.sitepy_installed = True # don't need site.py in this case + self.pth_file = None # and don't create a .pth file + self.install_dir = instdir + + def cant_write_to_target(self): + msg = """can't create or remove files in install directory + +The following error occurred while trying to add or remove files in the +installation directory: + + %s + +The installation directory you specified (via --install-dir, --prefix, or +the distutils default setting) was: + + %s +""" % (sys.exc_info()[1], self.install_dir,) + + if not os.path.exists(self.install_dir): + msg += """ +This directory does not currently exist. Please create it and try again, or +choose a different installation directory (using the -d or --install-dir +option). +""" + else: + msg += """ +Perhaps your account does not have write access to this directory? If the +installation directory is a system-owned directory, you may need to sign in +as the administrator or "root" account. If you do not have administrative +access to this machine, you may wish to choose a different installation +directory, preferably one that is listed in your PYTHONPATH environment +variable. + +For information on other options, you may wish to consult the +documentation at: + + http://peak.telecommunity.com/EasyInstall.html + +Please make the appropriate changes for your system and try again. +""" + raise DistutilsError(msg) + + + + + def check_pth_processing(self): + """Empirically verify whether .pth files are supported in inst. dir""" + instdir = self.install_dir + log.info("Checking .pth file support in %s", instdir) + pth_file = self.pseudo_tempname()+".pth" + ok_file = pth_file+'.ok' + ok_exists = os.path.exists(ok_file) + try: + if ok_exists: os.unlink(ok_file) + f = open(pth_file,'w') + except (OSError,IOError): + self.cant_write_to_target() + else: + try: + f.write("import os;open(%r,'w').write('OK')\n" % (ok_file,)) + f.close(); f=None + executable = sys.executable + if os.name=='nt': + dirname,basename = os.path.split(executable) + alt = os.path.join(dirname,'pythonw.exe') + if basename.lower()=='python.exe' and os.path.exists(alt): + # use pythonw.exe to avoid opening a console window + executable = alt + + from distutils.spawn import spawn + spawn([executable,'-E','-c','pass'],0) + + if os.path.exists(ok_file): + log.info( + "TEST PASSED: %s appears to support .pth files", + instdir + ) + return True + finally: + if f: f.close() + if os.path.exists(ok_file): os.unlink(ok_file) + if os.path.exists(pth_file): os.unlink(pth_file) + if not self.multi_version: + log.warn("TEST FAILED: %s does NOT support .pth files", instdir) + return False + + def install_egg_scripts(self, dist): + """Write all the scripts for `dist`, unless scripts are excluded""" + if not self.exclude_scripts and dist.metadata_isdir('scripts'): + for script_name in dist.metadata_listdir('scripts'): + self.install_script( + dist, script_name, + dist.get_metadata('scripts/'+script_name) + ) + self.install_wrapper_scripts(dist) + + def add_output(self, path): + if os.path.isdir(path): + for base, dirs, files in os.walk(path): + for filename in files: + self.outputs.append(os.path.join(base,filename)) + else: + self.outputs.append(path) + + def not_editable(self, spec): + if self.editable: + raise DistutilsArgError( + "Invalid argument %r: you can't use filenames or URLs " + "with --editable (except via the --find-links option)." + % (spec,) + ) + + def check_editable(self,spec): + if not self.editable: + return + + if os.path.exists(os.path.join(self.build_directory, spec.key)): + raise DistutilsArgError( + "%r already exists in %s; can't do a checkout there" % + (spec.key, self.build_directory) + ) + + + + + + + def easy_install(self, spec, deps=False): + tmpdir = tempfile.mkdtemp(prefix="easy_install-") + download = None + if not self.editable: self.install_site_py() + + try: + if not isinstance(spec,Requirement): + if URL_SCHEME(spec): + # It's a url, download it to tmpdir and process + self.not_editable(spec) + download = self.package_index.download(spec, tmpdir) + return self.install_item(None, download, tmpdir, deps, True) + + elif os.path.exists(spec): + # Existing file or directory, just process it directly + self.not_editable(spec) + return self.install_item(None, spec, tmpdir, deps, True) + else: + spec = parse_requirement_arg(spec) + + self.check_editable(spec) + dist = self.package_index.fetch_distribution( + spec, tmpdir, self.upgrade, self.editable, not self.always_copy + ) + + if dist is None: + msg = "Could not find suitable distribution for %r" % spec + if self.always_copy: + msg+=" (--always-copy skips system and development eggs)" + raise DistutilsError(msg) + elif dist.precedence==DEVELOP_DIST: + # .egg-info dists don't need installing, just process deps + self.process_distribution(spec, dist, deps, "Using") + return dist + else: + return self.install_item(spec, dist.location, tmpdir, deps) + + finally: + if os.path.exists(tmpdir): + rmtree(tmpdir) + + def install_item(self, spec, download, tmpdir, deps, install_needed=False): + + # Installation is also needed if file in tmpdir or is not an egg + install_needed = install_needed or self.always_copy + install_needed = install_needed or os.path.dirname(download) == tmpdir + install_needed = install_needed or not download.endswith('.egg') + install_needed = install_needed or ( + self.always_copy_from is not None and + os.path.dirname(normalize_path(download)) == + normalize_path(self.always_copy_from) + ) + + if spec and not install_needed: + # at this point, we know it's a local .egg, we just don't know if + # it's already installed. + for dist in self.local_index[spec.project_name]: + if dist.location==download: + break + else: + install_needed = True # it's not in the local index + + log.info("Processing %s", os.path.basename(download)) + + if install_needed: + dists = self.install_eggs(spec, download, tmpdir) + for dist in dists: + self.process_distribution(spec, dist, deps) + else: + dists = [self.check_conflicts(self.egg_distribution(download))] + self.process_distribution(spec, dists[0], deps, "Using") + + if spec is not None: + for dist in dists: + if dist in spec: + return dist + + + + + + + def process_distribution(self, requirement, dist, deps=True, *info): + self.update_pth(dist) + self.package_index.add(dist) + self.local_index.add(dist) + self.install_egg_scripts(dist) + self.installed_projects[dist.key] = dist + log.info(self.installation_report(requirement, dist, *info)) + if dist.has_metadata('dependency_links.txt'): + self.package_index.add_find_links( + dist.get_metadata_lines('dependency_links.txt') + ) + if not deps and not self.always_copy: + return + elif requirement is not None and dist.key != requirement.key: + log.warn("Skipping dependencies for %s", dist) + return # XXX this is not the distribution we were looking for + elif requirement is None or dist not in requirement: + # if we wound up with a different version, resolve what we've got + distreq = dist.as_requirement() + requirement = requirement or distreq + requirement = Requirement( + distreq.project_name, distreq.specs, requirement.extras + ) + log.info("Processing dependencies for %s", requirement) + try: + distros = WorkingSet([]).resolve( + [requirement], self.local_index, self.easy_install + ) + except DistributionNotFound, e: + raise DistutilsError( + "Could not find required distribution %s" % e.args + ) + except VersionConflict, e: + raise DistutilsError( + "Installed distribution %s conflicts with requirement %s" + % e.args + ) + if self.always_copy or self.always_copy_from: + # Force all the relevant distros to be copied or activated + for dist in distros: + if dist.key not in self.installed_projects: + self.easy_install(dist.as_requirement()) + log.info("Finished processing dependencies for %s", requirement) + + def should_unzip(self, dist): + if self.zip_ok is not None: + return not self.zip_ok + if dist.has_metadata('not-zip-safe'): + return True + if not dist.has_metadata('zip-safe'): + return True + return False + + def maybe_move(self, spec, dist_filename, setup_base): + dst = os.path.join(self.build_directory, spec.key) + if os.path.exists(dst): + log.warn( + "%r already exists in %s; build directory %s will not be kept", + spec.key, self.build_directory, setup_base + ) + return setup_base + if os.path.isdir(dist_filename): + setup_base = dist_filename + else: + if os.path.dirname(dist_filename)==setup_base: + os.unlink(dist_filename) # get it out of the tmp dir + contents = os.listdir(setup_base) + if len(contents)==1: + dist_filename = os.path.join(setup_base,contents[0]) + if os.path.isdir(dist_filename): + # if the only thing there is a directory, move it instead + setup_base = dist_filename + ensure_directory(dst); shutil.move(setup_base, dst) + return dst + + def install_wrapper_scripts(self, dist): + if not self.exclude_scripts: + for args in get_script_args(dist): + self.write_script(*args) + + + + def install_script(self, dist, script_name, script_text, dev_path=None): + """Generate a legacy script wrapper and install it""" + spec = str(dist.as_requirement()) + is_script = is_python_script(script_text, script_name) + + if is_script and dev_path: + script_text = get_script_header(script_text) + ( + "# EASY-INSTALL-DEV-SCRIPT: %(spec)r,%(script_name)r\n" + "__requires__ = %(spec)r\n" + "from pkg_resources import require; require(%(spec)r)\n" + "del require\n" + "__file__ = %(dev_path)r\n" + "execfile(__file__)\n" + ) % locals() + elif is_script: + script_text = get_script_header(script_text) + ( + "# EASY-INSTALL-SCRIPT: %(spec)r,%(script_name)r\n" + "__requires__ = %(spec)r\n" + "import pkg_resources\n" + "pkg_resources.run_script(%(spec)r, %(script_name)r)\n" + ) % locals() + self.write_script(script_name, script_text, 'b') + + def write_script(self, script_name, contents, mode="t", blockers=()): + """Write an executable file to the scripts directory""" + self.delete_blockers( # clean up old .py/.pyw w/o a script + [os.path.join(self.script_dir,x) for x in blockers]) + log.info("Installing %s script to %s", script_name, self.script_dir) + target = os.path.join(self.script_dir, script_name) + self.add_output(target) + + if not self.dry_run: + ensure_directory(target) + f = open(target,"w"+mode) + f.write(contents) + f.close() + chmod(target,0755) + + + + + def install_eggs(self, spec, dist_filename, tmpdir): + # .egg dirs or files are already built, so just return them + if dist_filename.lower().endswith('.egg'): + return [self.install_egg(dist_filename, tmpdir)] + elif dist_filename.lower().endswith('.exe'): + return [self.install_exe(dist_filename, tmpdir)] + + # Anything else, try to extract and build + setup_base = tmpdir + if os.path.isfile(dist_filename) and not dist_filename.endswith('.py'): + unpack_archive(dist_filename, tmpdir, self.unpack_progress) + elif os.path.isdir(dist_filename): + setup_base = os.path.abspath(dist_filename) + + if (setup_base.startswith(tmpdir) # something we downloaded + and self.build_directory and spec is not None + ): + setup_base = self.maybe_move(spec, dist_filename, setup_base) + + # Find the setup.py file + setup_script = os.path.join(setup_base, 'setup.py') + + if not os.path.exists(setup_script): + setups = glob(os.path.join(setup_base, '*', 'setup.py')) + if not setups: + raise DistutilsError( + "Couldn't find a setup script in %s" % os.path.abspath(dist_filename) + ) + if len(setups)>1: + raise DistutilsError( + "Multiple setup scripts in %s" % os.path.abspath(dist_filename) + ) + setup_script = setups[0] + + # Now run it, and return the result + if self.editable: + log.info(self.report_editable(spec, setup_script)) + return [] + else: + return self.build_and_install(setup_script, setup_base) + + def egg_distribution(self, egg_path): + if os.path.isdir(egg_path): + metadata = PathMetadata(egg_path,os.path.join(egg_path,'EGG-INFO')) + else: + metadata = EggMetadata(zipimport.zipimporter(egg_path)) + return Distribution.from_filename(egg_path,metadata=metadata) + + def install_egg(self, egg_path, tmpdir): + destination = os.path.join(self.install_dir,os.path.basename(egg_path)) + destination = os.path.abspath(destination) + if not self.dry_run: + ensure_directory(destination) + + dist = self.egg_distribution(egg_path) + self.check_conflicts(dist) + if not samefile(egg_path, destination): + if os.path.isdir(destination) and not os.path.islink(destination): + dir_util.remove_tree(destination, dry_run=self.dry_run) + elif os.path.exists(destination): + self.execute(os.unlink,(destination,),"Removing "+destination) + uncache_zipdir(destination) + if os.path.isdir(egg_path): + if egg_path.startswith(tmpdir): + f,m = shutil.move, "Moving" + else: + f,m = shutil.copytree, "Copying" + elif self.should_unzip(dist): + self.mkpath(destination) + f,m = self.unpack_and_compile, "Extracting" + elif egg_path.startswith(tmpdir): + f,m = shutil.move, "Moving" + else: + f,m = shutil.copy2, "Copying" + + self.execute(f, (egg_path, destination), + (m+" %s to %s") % + (os.path.basename(egg_path),os.path.dirname(destination))) + + self.add_output(destination) + return self.egg_distribution(destination) + + def install_exe(self, dist_filename, tmpdir): + # See if it's valid, get data + cfg = extract_wininst_cfg(dist_filename) + if cfg is None: + raise DistutilsError( + "%s is not a valid distutils Windows .exe" % dist_filename + ) + # Create a dummy distribution object until we build the real distro + dist = Distribution(None, + project_name=cfg.get('metadata','name'), + version=cfg.get('metadata','version'), platform="win32" + ) + + # Convert the .exe to an unpacked egg + egg_path = dist.location = os.path.join(tmpdir, dist.egg_name()+'.egg') + egg_tmp = egg_path+'.tmp' + egg_info = os.path.join(egg_tmp, 'EGG-INFO') + pkg_inf = os.path.join(egg_info, 'PKG-INFO') + ensure_directory(pkg_inf) # make sure EGG-INFO dir exists + dist._provider = PathMetadata(egg_tmp, egg_info) # XXX + self.exe_to_egg(dist_filename, egg_tmp) + + # Write EGG-INFO/PKG-INFO + if not os.path.exists(pkg_inf): + f = open(pkg_inf,'w') + f.write('Metadata-Version: 1.0\n') + for k,v in cfg.items('metadata'): + if k<>'target_version': + f.write('%s: %s\n' % (k.replace('_','-').title(), v)) + f.close() + script_dir = os.path.join(egg_info,'scripts') + self.delete_blockers( # delete entry-point scripts to avoid duping + [os.path.join(script_dir,args[0]) for args in get_script_args(dist)] + ) + # Build .egg file from tmpdir + bdist_egg.make_zipfile( + egg_path, egg_tmp, verbose=self.verbose, dry_run=self.dry_run + ) + # install the .egg + return self.install_egg(egg_path, tmpdir) + + def exe_to_egg(self, dist_filename, egg_tmp): + """Extract a bdist_wininst to the directories an egg would use""" + # Check for .pth file and set up prefix translations + prefixes = get_exe_prefixes(dist_filename) + to_compile = [] + native_libs = [] + top_level = {} + def process(src,dst): + s = src.lower() + for old,new in prefixes: + if s.startswith(old): + src = new+src[len(old):] + parts = src.split('/') + dst = os.path.join(egg_tmp, *parts) + dl = dst.lower() + if dl.endswith('.pyd') or dl.endswith('.dll'): + parts[-1] = bdist_egg.strip_module(parts[-1]) + top_level[os.path.splitext(parts[0])[0]] = 1 + native_libs.append(src) + elif dl.endswith('.py') and old!='SCRIPTS/': + top_level[os.path.splitext(parts[0])[0]] = 1 + to_compile.append(dst) + return dst + if not src.endswith('.pth'): + log.warn("WARNING: can't process %s", src) + return None + # extract, tracking .pyd/.dll->native_libs and .py -> to_compile + unpack_archive(dist_filename, egg_tmp, process) + stubs = [] + for res in native_libs: + if res.lower().endswith('.pyd'): # create stubs for .pyd's + parts = res.split('/') + resource = parts[-1] + parts[-1] = bdist_egg.strip_module(parts[-1])+'.py' + pyfile = os.path.join(egg_tmp, *parts) + to_compile.append(pyfile); stubs.append(pyfile) + bdist_egg.write_stub(resource, pyfile) + self.byte_compile(to_compile) # compile .py's + bdist_egg.write_safety_flag(os.path.join(egg_tmp,'EGG-INFO'), + bdist_egg.analyze_egg(egg_tmp, stubs)) # write zip-safety flag + + for name in 'top_level','native_libs': + if locals()[name]: + txt = os.path.join(egg_tmp, 'EGG-INFO', name+'.txt') + if not os.path.exists(txt): + open(txt,'w').write('\n'.join(locals()[name])+'\n') + + def check_conflicts(self, dist): + """Verify that there are no conflicting "old-style" packages""" + + return dist # XXX temporarily disable until new strategy is stable + from imp import find_module, get_suffixes + from glob import glob + + blockers = [] + names = dict.fromkeys(dist._get_metadata('top_level.txt')) # XXX private attr + + exts = {'.pyc':1, '.pyo':1} # get_suffixes() might leave one out + for ext,mode,typ in get_suffixes(): + exts[ext] = 1 + + for path,files in expand_paths([self.install_dir]+self.all_site_dirs): + for filename in files: + base,ext = os.path.splitext(filename) + if base in names: + if not ext: + # no extension, check for package + try: + f, filename, descr = find_module(base, [path]) + except ImportError: + continue + else: + if f: f.close() + if filename not in blockers: + blockers.append(filename) + elif ext in exts and base!='site': # XXX ugh + blockers.append(os.path.join(path,filename)) + if blockers: + self.found_conflicts(dist, blockers) + + return dist + + def found_conflicts(self, dist, blockers): + if self.delete_conflicting: + log.warn("Attempting to delete conflicting packages:") + return self.delete_blockers(blockers) + + msg = """\ +------------------------------------------------------------------------- +CONFLICT WARNING: + +The following modules or packages have the same names as modules or +packages being installed, and will be *before* the installed packages in +Python's search path. You MUST remove all of the relevant files and +directories before you will be able to use the package(s) you are +installing: + + %s + +""" % '\n '.join(blockers) + + if self.ignore_conflicts_at_my_risk: + msg += """\ +(Note: you can run EasyInstall on '%s' with the +--delete-conflicting option to attempt deletion of the above files +and/or directories.) +""" % dist.project_name + else: + msg += """\ +Note: you can attempt this installation again with EasyInstall, and use +either the --delete-conflicting (-D) option or the +--ignore-conflicts-at-my-risk option, to either delete the above files +and directories, or to ignore the conflicts, respectively. Note that if +you ignore the conflicts, the installed package(s) may not work. +""" + msg += """\ +------------------------------------------------------------------------- +""" + sys.stderr.write(msg) + sys.stderr.flush() + if not self.ignore_conflicts_at_my_risk: + raise DistutilsError("Installation aborted due to conflicts") + + def installation_report(self, req, dist, what="Installed"): + """Helpful installation message for display to package users""" + msg = "\n%(what)s %(eggloc)s%(extras)s" + if self.multi_version and not self.no_report: + msg += """ + +Because this distribution was installed --multi-version, before you can +import modules from this package in an application, you will need to +'import pkg_resources' and then use a 'require()' call similar to one of +these examples, in order to select the desired version: + + pkg_resources.require("%(name)s") # latest installed version + pkg_resources.require("%(name)s==%(version)s") # this exact version + pkg_resources.require("%(name)s>=%(version)s") # this version or higher +""" + if self.install_dir not in map(normalize_path,sys.path): + msg += """ + +Note also that the installation directory must be on sys.path at runtime for +this to work. (e.g. by being the application's script directory, by being on +PYTHONPATH, or by being added to sys.path by your code.) +""" + eggloc = dist.location + name = dist.project_name + version = dist.version + extras = '' # TODO: self.report_extras(req, dist) + return msg % locals() + + def report_editable(self, spec, setup_script): + dirname = os.path.dirname(setup_script) + python = sys.executable + return """\nExtracted editable version of %(spec)s to %(dirname)s + +If it uses setuptools in its setup script, you can activate it in +"development" mode by going to that directory and running:: + + %(python)s setup.py develop + +See the setuptools documentation for the "develop" command for more info. +""" % locals() + + def run_setup(self, setup_script, setup_base, args): + sys.modules.setdefault('distutils.command.bdist_egg', bdist_egg) + sys.modules.setdefault('distutils.command.egg_info', egg_info) + + args = list(args) + if self.verbose>2: + v = 'v' * (self.verbose - 1) + args.insert(0,'-'+v) + elif self.verbose<2: + args.insert(0,'-q') + if self.dry_run: + args.insert(0,'-n') + log.info( + "Running %s %s", setup_script[len(setup_base)+1:], ' '.join(args) + ) + try: + run_setup(setup_script, args) + except SystemExit, v: + raise DistutilsError("Setup script exited with %s" % (v.args[0],)) + + def build_and_install(self, setup_script, setup_base): + args = ['bdist_egg', '--dist-dir'] + dist_dir = tempfile.mkdtemp( + prefix='egg-dist-tmp-', dir=os.path.dirname(setup_script) + ) + try: + args.append(dist_dir) + self.run_setup(setup_script, setup_base, args) + all_eggs = Environment([dist_dir]) + eggs = [] + for key in all_eggs: + for dist in all_eggs[key]: + eggs.append(self.install_egg(dist.location, setup_base)) + if not eggs and not self.dry_run: + log.warn("No eggs found in %s (setup script problem?)", + dist_dir) + return eggs + finally: + rmtree(dist_dir) + log.set_verbosity(self.verbose) # restore our log verbosity + + def update_pth(self,dist): + if self.pth_file is None: + return + + for d in self.pth_file[dist.key]: # drop old entries + if self.multi_version or d.location != dist.location: + log.info("Removing %s from easy-install.pth file", d) + self.pth_file.remove(d) + if d.location in self.shadow_path: + self.shadow_path.remove(d.location) + + if not self.multi_version: + if dist.location in self.pth_file.paths: + log.info( + "%s is already the active version in easy-install.pth", + dist + ) + else: + log.info("Adding %s to easy-install.pth file", dist) + self.pth_file.add(dist) # add new entry + if dist.location not in self.shadow_path: + self.shadow_path.append(dist.location) + + if not self.dry_run: + + self.pth_file.save() + + if dist.key=='setuptools': + # Ensure that setuptools itself never becomes unavailable! + # XXX should this check for latest version? + filename = os.path.join(self.install_dir,'setuptools.pth') + if os.path.islink(filename): os.unlink(filename) + f = open(filename, 'wt') + f.write(self.pth_file.make_relative(dist.location)+'\n') + f.close() + + def unpack_progress(self, src, dst): + # Progress filter for unpacking + log.debug("Unpacking %s to %s", src, dst) + return dst # only unpack-and-compile skips files for dry run + + def unpack_and_compile(self, egg_path, destination): + to_compile = []; to_chmod = [] + + def pf(src,dst): + if dst.endswith('.py') and not src.startswith('EGG-INFO/'): + to_compile.append(dst) + to_chmod.append(dst) + elif dst.endswith('.dll') or dst.endswith('.so'): + to_chmod.append(dst) + self.unpack_progress(src,dst) + return not self.dry_run and dst or None + + unpack_archive(egg_path, destination, pf) + self.byte_compile(to_compile) + if not self.dry_run: + for f in to_chmod: + mode = ((os.stat(f)[stat.ST_MODE]) | 0555) & 07755 + chmod(f, mode) + + def byte_compile(self, to_compile): + from distutils.util import byte_compile + try: + # try to make the byte compile messages quieter + log.set_verbosity(self.verbose - 1) + + byte_compile(to_compile, optimize=0, force=1, dry_run=self.dry_run) + if self.optimize: + byte_compile( + to_compile, optimize=self.optimize, force=1, + dry_run=self.dry_run + ) + finally: + log.set_verbosity(self.verbose) # restore original verbosity + + + + + + + + + def no_default_version_msg(self): + return """bad install directory or PYTHONPATH + +You are attempting to install a package to a directory that is not +on PYTHONPATH and which Python does not read ".pth" files from. The +installation directory you specified (via --install-dir, --prefix, or +the distutils default setting) was: + + %s + +and your PYTHONPATH environment variable currently contains: + + %r + +Here are some of your options for correcting the problem: + +* You can choose a different installation directory, i.e., one that is + on PYTHONPATH or supports .pth files + +* You can add the installation directory to the PYTHONPATH environment + variable. (It must then also be on PYTHONPATH whenever you run + Python and want to use the package(s) you are installing.) + +* You can set up the installation directory to support ".pth" files by + using one of the approaches described here: + + http://peak.telecommunity.com/EasyInstall.html#custom-installation-locations + +Proceeding to install. Please remember that unless you make one of +these changes you will not be able to run the installed code. +""" % ( + self.install_dir, os.environ.get('PYTHONPATH','') + ) + + + + + + + + + + + def install_site_py(self): + """Make sure there's a site.py in the target dir, if needed""" + + if self.sitepy_installed: + return # already did it, or don't need to + + sitepy = os.path.join(self.install_dir, "site.py") + source = resource_string("setuptools", "site-patch.py") + current = "" + + if os.path.exists(sitepy): + log.debug("Checking existing site.py in %s", self.install_dir) + current = open(sitepy,'rb').read() + if not current.startswith('def __boot():'): + raise DistutilsError( + "%s is not a setuptools-generated site.py; please" + " remove it." % sitepy + ) + + if current != source: + log.info("Creating %s", sitepy) + if not self.dry_run: + ensure_directory(sitepy) + f = open(sitepy,'wb') + f.write(source) + f.close() + self.byte_compile([sitepy]) + + self.sitepy_installed = True + + + + + + + + + + + + + INSTALL_SCHEMES = dict( + posix = dict( + install_dir = '$base/lib/python$py_version_short/site-packages', + script_dir = '$base/bin', + ), + ) + + DEFAULT_SCHEME = dict( + install_dir = '$base/Lib/site-packages', + script_dir = '$base/Scripts', + ) + + def _expand(self, *attrs): + config_vars = self.get_finalized_command('install').config_vars + + if self.prefix: + # Set default install_dir/scripts from --prefix + config_vars = config_vars.copy() + config_vars['base'] = self.prefix + scheme = self.INSTALL_SCHEMES.get(os.name,self.DEFAULT_SCHEME) + for attr,val in scheme.items(): + if getattr(self,attr,None) is None: + setattr(self,attr,val) + + from distutils.util import subst_vars + for attr in attrs: + val = getattr(self, attr) + if val is not None: + val = subst_vars(val, config_vars) + if os.name == 'posix': + val = os.path.expanduser(val) + setattr(self, attr, val) + + + + + + + + + +def get_site_dirs(): + # return a list of 'site' dirs + sitedirs = filter(None,os.environ.get('PYTHONPATH','').split(os.pathsep)) + prefixes = [sys.prefix] + if sys.exec_prefix != sys.prefix: + prefixes.append(sys.exec_prefix) + for prefix in prefixes: + if prefix: + if sys.platform in ('os2emx', 'riscos'): + sitedirs.append(os.path.join(prefix, "Lib", "site-packages")) + elif os.sep == '/': + sitedirs.extend([os.path.join(prefix, + "lib", + "python" + sys.version[:3], + "site-packages"), + os.path.join(prefix, "lib", "site-python")]) + else: + sitedirs.extend( + [prefix, os.path.join(prefix, "lib", "site-packages")] + ) + if sys.platform == 'darwin': + # for framework builds *only* we add the standard Apple + # locations. Currently only per-user, but /Library and + # /Network/Library could be added too + if 'Python.framework' in prefix: + home = os.environ.get('HOME') + if home: + sitedirs.append( + os.path.join(home, + 'Library', + 'Python', + sys.version[:3], + 'site-packages')) + for plat_specific in (0,1): + site_lib = get_python_lib(plat_specific) + if site_lib not in sitedirs: sitedirs.append(site_lib) + + sitedirs = map(normalize_path, sitedirs) + return sitedirs + + +def expand_paths(inputs): + """Yield sys.path directories that might contain "old-style" packages""" + + seen = {} + + for dirname in inputs: + dirname = normalize_path(dirname) + if dirname in seen: + continue + + seen[dirname] = 1 + if not os.path.isdir(dirname): + continue + + files = os.listdir(dirname) + yield dirname, files + + for name in files: + if not name.endswith('.pth'): + # We only care about the .pth files + continue + if name in ('easy-install.pth','setuptools.pth'): + # Ignore .pth files that we control + continue + + # Read the .pth file + f = open(os.path.join(dirname,name)) + lines = list(yield_lines(f)) + f.close() + + # Yield existing non-dupe, non-import directory lines from it + for line in lines: + if not line.startswith("import"): + line = normalize_path(line.rstrip()) + if line not in seen: + seen[line] = 1 + if not os.path.isdir(line): + continue + yield line, os.listdir(line) + + +def extract_wininst_cfg(dist_filename): + """Extract configuration data from a bdist_wininst .exe + + Returns a ConfigParser.RawConfigParser, or None + """ + f = open(dist_filename,'rb') + try: + endrec = zipfile._EndRecData(f) + if endrec is None: + return None + + prepended = (endrec[9] - endrec[5]) - endrec[6] + if prepended < 12: # no wininst data here + return None + f.seek(prepended-12) + + import struct, StringIO, ConfigParser + tag, cfglen, bmlen = struct.unpack("egg path translations for a given .exe file""" + + prefixes = [ + ('PURELIB/', ''), ('PLATLIB/pywin32_system32', ''), + ('PLATLIB/', ''), + ('SCRIPTS/', 'EGG-INFO/scripts/') + ] + z = zipfile.ZipFile(exe_filename) + try: + for info in z.infolist(): + name = info.filename + parts = name.split('/') + if len(parts)==3 and parts[2]=='PKG-INFO': + if parts[1].endswith('.egg-info'): + prefixes.insert(0,('/'.join(parts[:2]), 'EGG-INFO/')) + break + if len(parts)<>2 or not name.endswith('.pth'): + continue + if name.endswith('-nspkg.pth'): + continue + if parts[0].upper() in ('PURELIB','PLATLIB'): + for pth in yield_lines(z.read(name)): + pth = pth.strip().replace('\\','/') + if not pth.startswith('import'): + prefixes.append((('%s/%s/' % (parts[0],pth)), '')) + finally: + z.close() + prefixes = [(x.lower(),y) for x, y in prefixes] + prefixes.sort(); prefixes.reverse() + return prefixes + + +def parse_requirement_arg(spec): + try: + return Requirement.parse(spec) + except ValueError: + raise DistutilsError( + "Not a URL, existing file, or requirement spec: %r" % (spec,) + ) + +class PthDistributions(Environment): + """A .pth file with Distribution paths in it""" + + dirty = False + + def __init__(self, filename, sitedirs=()): + self.filename = filename; self.sitedirs=map(normalize_path, sitedirs) + self.basedir = normalize_path(os.path.dirname(self.filename)) + self._load(); Environment.__init__(self, [], None, None) + for path in yield_lines(self.paths): + map(self.add, find_distributions(path, True)) + + def _load(self): + self.paths = [] + saw_import = False + seen = dict.fromkeys(self.sitedirs) + if os.path.isfile(self.filename): + for line in open(self.filename,'rt'): + if line.startswith('import'): + saw_import = True + continue + path = line.rstrip() + self.paths.append(path) + if not path.strip() or path.strip().startswith('#'): + continue + # skip non-existent paths, in case somebody deleted a package + # manually, and duplicate paths as well + path = self.paths[-1] = normalize_path( + os.path.join(self.basedir,path) + ) + if not os.path.exists(path) or path in seen: + self.paths.pop() # skip it + self.dirty = True # we cleaned up, so we're dirty now :) + continue + seen[path] = 1 + + if self.paths and not saw_import: + self.dirty = True # ensure anything we touch has import wrappers + while self.paths and not self.paths[-1].strip(): + self.paths.pop() + + def save(self): + """Write changed .pth file back to disk""" + if not self.dirty: + return + + data = '\n'.join(map(self.make_relative,self.paths)) + if data: + log.debug("Saving %s", self.filename) + data = ( + "import sys; sys.__plen = len(sys.path)\n" + "%s\n" + "import sys; new=sys.path[sys.__plen:];" + " del sys.path[sys.__plen:];" + " p=getattr(sys,'__egginsert',len(os.environ.get('PYTHONPATH','').split(os.pathsep))); sys.path[p:p]=new;" + " sys.__egginsert = p+len(new)\n" + ) % data + + if os.path.islink(self.filename): + os.unlink(self.filename) + f = open(self.filename,'wb') + f.write(data); f.close() + + elif os.path.exists(self.filename): + log.debug("Deleting empty %s", self.filename) + os.unlink(self.filename) + + self.dirty = False + + def add(self,dist): + """Add `dist` to the distribution map""" + if dist.location not in self.paths and dist.location not in self.sitedirs: + self.paths.append(dist.location); self.dirty = True + Environment.add(self,dist) + + def remove(self,dist): + """Remove `dist` from the distribution map""" + while dist.location in self.paths: + self.paths.remove(dist.location); self.dirty = True + Environment.remove(self,dist) + + + def make_relative(self,path): + npath, last = os.path.split(normalize_path(path)) + baselen = len(self.basedir) + parts = [last] + sep = os.altsep=='/' and '/' or os.sep + while len(npath)>=baselen: + if npath==self.basedir: + parts.append(os.curdir) + parts.reverse() + return sep.join(parts) + npath, last = os.path.split(npath) + parts.append(last) + else: + return path + +def get_script_header(script_text, executable=sys_executable, wininst=False): + """Create a #! line, getting options (if any) from script_text""" + from distutils.command.build_scripts import first_line_re + first = (script_text+'\n').splitlines()[0] + match = first_line_re.match(first) + options = '' + if match: + options = match.group(1) or '' + if options: options = ' '+options + if wininst: + executable = "python.exe" + else: + executable = nt_quote_arg(executable) + hdr = "#!%(executable)s%(options)s\n" % locals() + if unicode(hdr,'ascii','ignore').encode('ascii') != hdr: + # Non-ascii path to sys.executable, use -x to prevent warnings + if options: + if options.strip().startswith('-'): + options = ' -x'+options.strip()[1:] + # else: punt, we can't do it, let the warning happen anyway + else: + options = ' -x' + executable = fix_jython_executable(executable, options) + hdr = "#!%(executable)s%(options)s\n" % locals() + return hdr + +def auto_chmod(func, arg, exc): + if func is os.remove and os.name=='nt': + chmod(arg, stat.S_IWRITE) + return func(arg) + exc = sys.exc_info() + raise exc[0], (exc[1][0], exc[1][1] + (" %s %s" % (func,arg))) + +def uncache_zipdir(path): + """Ensure that the importer caches dont have stale info for `path`""" + from zipimport import _zip_directory_cache as zdc + _uncache(path, zdc) + _uncache(path, sys.path_importer_cache) + +def _uncache(path, cache): + if path in cache: + del cache[path] + else: + path = normalize_path(path) + for p in cache: + if normalize_path(p)==path: + del cache[p] + return + +def is_python(text, filename=''): + "Is this string a valid Python script?" + try: + compile(text, filename, 'exec') + except (SyntaxError, TypeError): + return False + else: + return True + +def is_sh(executable): + """Determine if the specified executable is a .sh (contains a #! line)""" + try: + fp = open(executable) + magic = fp.read(2) + fp.close() + except (OSError,IOError): return executable + return magic == '#!' + +def nt_quote_arg(arg): + """Quote a command line argument according to Windows parsing rules""" + + result = [] + needquote = False + nb = 0 + + needquote = (" " in arg) or ("\t" in arg) + if needquote: + result.append('"') + + for c in arg: + if c == '\\': + nb += 1 + elif c == '"': + # double preceding backslashes, then add a \" + result.append('\\' * (nb*2) + '\\"') + nb = 0 + else: + if nb: + result.append('\\' * nb) + nb = 0 + result.append(c) + + if nb: + result.append('\\' * nb) + + if needquote: + result.append('\\' * nb) # double the trailing backslashes + result.append('"') + + return ''.join(result) + + + + + + + + + +def is_python_script(script_text, filename): + """Is this text, as a whole, a Python script? (as opposed to shell/bat/etc. + """ + if filename.endswith('.py') or filename.endswith('.pyw'): + return True # extension says it's Python + if is_python(script_text, filename): + return True # it's syntactically valid Python + if script_text.startswith('#!'): + # It begins with a '#!' line, so check if 'python' is in it somewhere + return 'python' in script_text.splitlines()[0].lower() + + return False # Not any Python I can recognize + +try: + from os import chmod as _chmod +except ImportError: + # Jython compatibility + def _chmod(*args): pass + +def chmod(path, mode): + log.debug("changing mode of %s to %o", path, mode) + try: + _chmod(path, mode) + except os.error, e: + log.debug("chmod failed: %s", e) + +def fix_jython_executable(executable, options): + if sys.platform.startswith('java') and is_sh(executable): + # Workaround Jython's sys.executable being a .sh (an invalid + # shebang line interpreter) + if options: + # Can't apply the workaround, leave it broken + log.warn("WARNING: Unable to adapt shebang line for Jython," + " the following script is NOT executable\n" + " see http://bugs.jython.org/issue1112 for" + " more information.") + else: + return '/usr/bin/env %s' % executable + return executable + + +def get_script_args(dist, executable=sys_executable, wininst=False): + """Yield write_script() argument tuples for a distribution's entrypoints""" + spec = str(dist.as_requirement()) + header = get_script_header("", executable, wininst) + for group in 'console_scripts', 'gui_scripts': + for name,ep in dist.get_entry_map(group).items(): + script_text = ( + "# EASY-INSTALL-ENTRY-SCRIPT: %(spec)r,%(group)r,%(name)r\n" + "__requires__ = %(spec)r\n" + "import sys\n" + "from pkg_resources import load_entry_point\n" + "\n" + "sys.exit(\n" + " load_entry_point(%(spec)r, %(group)r, %(name)r)()\n" + ")\n" + ) % locals() + if sys.platform=='win32' or wininst: + # On Windows/wininst, add a .py extension and an .exe launcher + if group=='gui_scripts': + ext, launcher = '-script.pyw', 'gui.exe' + old = ['.pyw'] + new_header = re.sub('(?i)python.exe','pythonw.exe',header) + else: + ext, launcher = '-script.py', 'cli.exe' + old = ['.py','.pyc','.pyo'] + new_header = re.sub('(?i)pythonw.exe','python.exe',header) + + if os.path.exists(new_header[2:-1]) or sys.platform!='win32': + hdr = new_header + else: + hdr = header + yield (name+ext, hdr+script_text, 't', [name+x for x in old]) + yield ( + name+'.exe', resource_string('setuptools', launcher), + 'b') # write in binary mode + yield (name+'.exe.manifest', _launcher_manifest % (name,), 't') + else: + # On other platforms, we assume the right thing to do is to + # just write the stub with no extension. + yield (name, header+script_text) + +_launcher_manifest = """ + + + + + + + + + + + + +""" + + + + + + + + + + + + + + + + + + + + + + + + +def rmtree(path, ignore_errors=False, onerror=auto_chmod): + """Recursively delete a directory tree. + + This code is taken from the Python 2.4 version of 'shutil', because + the 2.3 version doesn't really work right. + """ + if ignore_errors: + def onerror(*args): + pass + elif onerror is None: + def onerror(*args): + raise + names = [] + try: + names = os.listdir(path) + except os.error, err: + onerror(os.listdir, path, sys.exc_info()) + for name in names: + fullname = os.path.join(path, name) + try: + mode = os.lstat(fullname).st_mode + except os.error: + mode = 0 + if stat.S_ISDIR(mode): + rmtree(fullname, ignore_errors, onerror) + else: + try: + os.remove(fullname) + except os.error, err: + onerror(os.remove, fullname, sys.exc_info()) + try: + os.rmdir(path) + except os.error: + onerror(os.rmdir, path, sys.exc_info()) + +def bootstrap(): + # This function is called when setuptools*.egg is run using /bin/sh + import setuptools; argv0 = os.path.dirname(setuptools.__path__[0]) + sys.argv[0] = argv0; sys.argv.append(argv0); main() + + +def main(argv=None, **kw): + from setuptools import setup + from setuptools.dist import Distribution + import distutils.core + + USAGE = """\ +usage: %(script)s [options] requirement_or_url ... + or: %(script)s --help +""" + + def gen_usage (script_name): + script = os.path.basename(script_name) + return USAGE % vars() + + def with_ei_usage(f): + old_gen_usage = distutils.core.gen_usage + try: + distutils.core.gen_usage = gen_usage + return f() + finally: + distutils.core.gen_usage = old_gen_usage + + class DistributionWithoutHelpCommands(Distribution): + common_usage = "" + def _show_help(self,*args,**kw): + with_ei_usage(lambda: Distribution._show_help(self,*args,**kw)) + + if argv is None: + argv = sys.argv[1:] + + with_ei_usage(lambda: + setup( + script_args = ['-q','easy_install', '-v']+argv, + script_name = sys.argv[0] or 'easy_install', + distclass=DistributionWithoutHelpCommands, **kw + ) + ) + + + + addfile ./setuptools-0.6c14devdev.egg/setuptools/command/easy_install.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/easy_install.pyc oldhex * newhex *d1f20d0a401ef84b6300000000000000001b00000040000000739c0200006400005a0000640100 *6402006b01005a01006401006402006b02005a03006401006402006b04005a0400640100640200 *6b05005a05006401006402006b06005a06006401006402006b07005a07006401006402006b0800 *5a08006401006402006b09005a09006401006402006b0a005a0a006401006403006b0b006c0b00 *5a0b00016401006404006b0c006c0d005a0d00016401006405006b0e006c0f005a0f0001640100 *6406006b10006c11005a11006c12005a1200016401006407006b13006c14005a14000164010064 *08006b15006c16005a16006c17005a17006c18005a1800016401006409006b19006c1a005a1a00 *01640100640a006b1b006c1c005a1c006c1d005a1d0001640100640b006b1b006c1e005a1e0001 *640100640c006b1f006c20005a20006c21005a210001640100640d006b22005465030069230069 *24006501006925008301005a2600640e00640f006410006411006412006413006706005a270064 *14008400005a2800640f00650d00660100641500840000830000595a29006416008400005a2a00 *6417008400005a2b006418008400005a2c006419008400005a2d00641a008400005a2e00641000 *652f00660100641b00840000830000595a3000652600653100641c008402005a3200641d008400 *005a3300641e008400005a3400641f008400005a35006420006421008401005a36006422008400 *005a37006423008400005a38006424008400005a39007914006401006425006b03006c3a005a3b *0001576e1c0004653c006a0a006f1000010101016426008400005a3b006e020001586427008400 *005a3a006428008400005a3d006526006531006429008402005a3e00642a005a3f006531006533 *00642b008402005a4000642c008400005a4100654200642d008401005a430064020053282e0000 *0073190100004561737920496e7374616c6c0a2d2d2d2d2d2d2d2d2d2d2d2d0a0a4120746f6f6c *20666f7220646f696e67206175746f6d6174696320646f776e6c6f61642f657874726163742f62 *75696c64206f6620646973747574696c732d626173656420507974686f6e0a7061636b61676573 *2e2020466f722064657461696c656420646f63756d656e746174696f6e2c207365652074686520 *6163636f6d70616e79696e672045617379496e7374616c6c2e7478740a66696c652c206f722076 *6973697420746865206045617379496e7374616c6c20686f6d652070616765605f5f2e0a0a5f5f *20687474703a2f2f7065616b2e74656c65636f6d6d756e6974792e636f6d2f44657643656e7465 *722f45617379496e7374616c6c0a69ffffffff4e28010000007404000000676c6f622801000000 *7407000000436f6d6d616e642801000000740900000072756e5f73657475702802000000740300 *00006c6f6774080000006469725f7574696c2801000000740e0000006765745f707974686f6e5f *6c696228030000007411000000446973747574696c734172674572726f72741400000044697374 *7574696c734f7074696f6e4572726f72740e000000446973747574696c734572726f7228010000 *00740e000000756e7061636b5f617263686976652802000000740c0000005061636b616765496e *646578741300000070617273655f62646973745f77696e696e73742801000000740a0000005552 *4c5f534348454d452802000000740900000062646973745f65676774080000006567675f696e66 *6f280100000074010000002a740800000073616d6566696c65740c000000656173795f696e7374 *616c6c7410000000507468446973747269627574696f6e737413000000657874726163745f7769 *6e696e73745f63666774040000006d61696e74100000006765745f6578655f7072656669786573 *630200000002000000040000004300000073870000007400007401006902006401008302006f3a *00017401006902006903007c00008301006f2700017401006902006903007c01008301006f1400 *017401006902006904007c00007c01008302005301740100690200690500740100690200690600 *7c00008301008301007401006902006905007401006902006906007c01008301008301006a0200 *5328020000004e5210000000280700000074070000006861736174747274020000006f73740400 *0000706174687406000000657869737473521000000074080000006e6f726d7061746874080000 *006e6f726d63617365280200000074020000007031740200000070322800000000280000000073 *4c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464657664 *65762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e *7079521000000020000000730a00000000011301260214021b0163000000000000000017000000 *42000000733d0200006500005a01006400005a02006401005a03006504005a0500646e00646f00 *647000647100647200647300647400647500647600647700647800647900647a00647b00647c00 *647d00647e00647f006480006481006482006715005a0700640400640700641300640a00641600 *641f00642200643100643400643a00670a005a0800680100640400642b00365a0900650a005a0b *00643d008400005a0c00643e008400005a0d00643f008400005a0e006440008400005a0f006441 *008400005a10006442008400005a11006443008400005a12006444008400005a13006445008400 *005a14006446008400005a15006447008400005a16006448008400005a17006449008400005a18 *00651900644a008401005a1a00651900644b008401005a1b00650400644c008401005a1c00644d *008400005a1d00644e008400005a1e00644f008400005a1f00646d006450008401005a20006451 *006483006452008402005a21006453008400005a22006454008400005a23006455008400005a24 *006456008400005a25006457008400005a26006458008400005a27006459008400005a2800645a *00645b008401005a2900645c008400005a2a00645d008400005a2b00645e008400005a2c00645f *008400005a2d006460008400005a2e006461008400005a2f006462008400005a30006463008400 *005a31006464008400005a32006533006465006533006466006467006468006469008300028300 *015a3400653300646600646a00646800646b008300025a3500646c008400005a36005253288400 *000073270000004d616e616765206120646f776e6c6f61642f6275696c642f696e7374616c6c20 *70726f63657373732000000046696e642f6765742f696e7374616c6c20507974686f6e20706163 *6b6167657373070000007072656669783d7313000000696e7374616c6c6174696f6e2070726566 *697873060000007a69702d6f6b74010000007a731c000000696e7374616c6c207061636b616765 *2061732061207a697066696c65730d0000006d756c74692d76657273696f6e74010000006d7325 *0000006d616b652061707073206861766520746f2072657175697265282920612076657273696f *6e7407000000757067726164657401000000557331000000666f72636520757067726164652028 *7365617263686573205079504920666f72206c61746573742076657273696f6e7329730c000000 *696e7374616c6c2d6469723d7401000000647316000000696e7374616c6c207061636b61676520 *746f20444952730b0000007363726970742d6469723d7401000000737316000000696e7374616c *6c207363726970747320746f20444952730f0000006578636c7564652d73637269707473740100 *0000787315000000446f6e277420696e7374616c6c2073637269707473730b000000616c776179 *732d636f70797401000000617327000000436f707920616c6c206e6565646564207061636b6167 *657320746f20696e7374616c6c20646972730a000000696e6465782d75726c3d74010000006973 *20000000626173652055524c206f6620507974686f6e205061636b61676520496e646578730b00 *000066696e642d6c696e6b733d74010000006673280000006164646974696f6e616c2055524c28 *732920746f2073656172636820666f72207061636b61676573731200000064656c6574652d636f *6e666c696374696e6774010000004473200000006e6f206c6f6e676572206e65656465643b2064 *6f6e2774207573652074686973731b00000069676e6f72652d636f6e666c696374732d61742d6d *792d7269736b73100000006275696c642d6469726563746f72793d740100000062732f00000064 *6f776e6c6f61642f657874726163742f6275696c6420696e204449523b206b6565702074686520 *726573756c747373090000006f7074696d697a653d74010000004f736c000000616c736f20636f *6d70696c652077697468206f7074696d697a6174696f6e3a202d4f3120666f722022707974686f *6e202d4f222c202d4f3220666f722022707974686f6e202d4f4f222c20616e64202d4f3020746f *2064697361626c65205b64656661756c743a202d4f305d73070000007265636f72643d73330000 *0066696c656e616d6520696e20776869636820746f207265636f7264206c697374206f6620696e *7374616c6c65642066696c6573730c000000616c776179732d756e7a697074010000005a732a00 *0000646f6e277420696e7374616c6c2061732061207a697066696c652c206e6f206d6174746572 *2077686174730a000000736974652d646972733d74010000005373290000006c697374206f6620 *6469726563746f72696573207768657265202e7074682066696c657320776f726b740800000065 *64697461626c65740100000065732b000000496e7374616c6c2073706563696669656420706163 *6b6167657320696e206564697461626c6520666f726d73070000006e6f2d646570737401000000 *4e731a000000646f6e277420696e7374616c6c20646570656e64656e63696573730c000000616c *6c6f772d686f7374733d74010000004873240000007061747465726e287329207468617420686f *73746e616d6573206d757374206d6174636873120000006c6f63616c2d736e617073686f74732d *6f6b74010000006c7328000000616c6c6f77206275696c64696e6720656767732066726f6d206c *6f63616c20636865636b6f75747363010000000100000004000000430000007321010000640000 *047c00005f01007c00005f0200640000047c00005f0300047c00005f04007c00005f0500640000 *7c00005f06006400007c00005f07006400007c00005f08006400007c00005f0900640000047c00 *005f0a007c00005f0b00640000047c00005f0c00047c00005f0d007c00005f0e00640000047c00 *005f0f00047c00005f10007c00005f1100640000047c00005f1200047c00005f13007c00005f14 *006400007c00005f1500640000047c00005f16007c00005f17006400007c00005f18006400007c *00005f19006400007c00005f1a006800007c00005f1b00741c007c00005f1d006400007c00005f *1e007c0000691f006920007c00005f20007c0000691f006921007c00007c0000691f0069220064 *0100830100830200016400005328020000004e5211000000282300000074040000004e6f6e6574 *060000007a69705f6f6b74120000006c6f63616c5f736e617073686f74735f6f6b740b00000069 *6e7374616c6c5f646972740a0000007363726970745f646972740f0000006578636c7564655f73 *6372697074737409000000696e6465785f75726c740a00000066696e645f6c696e6b73740f0000 *006275696c645f6469726563746f727974040000006172677374080000006f7074696d697a6574 *060000007265636f72645220000000740b000000616c776179735f636f7079740d0000006d756c *74695f76657273696f6e522d00000074070000006e6f5f64657073740b000000616c6c6f775f68 *6f7374737404000000726f6f74740600000070726566697874090000006e6f5f7265706f727474 *0d0000007061636b6167655f696e64657874080000007074685f66696c657410000000616c7761 *79735f636f70795f66726f6d741200000064656c6574655f636f6e666c696374696e67741b0000 *0069676e6f72655f636f6e666c696374735f61745f6d795f7269736b7409000000736974655f64 *6972737412000000696e7374616c6c65645f70726f6a65637473740500000046616c7365741000 *00007369746570795f696e7374616c6c656474080000005f6472795f72756e740c000000646973 *747269627574696f6e7407000000766572626f736574140000005f7365745f636f6d6d616e645f *6f7074696f6e73740f0000006765745f6f7074696f6e5f64696374280100000074040000007365 *6c6628000000002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f *6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c *656173795f696e7374616c6c2e70797412000000696e697469616c697a655f6f7074696f6e7353 *000000732a00000000011001170109010901090109011001170117011703090110010901090109 *010901090609010f0109016302000000030000000400000043000000739f0000007898007c0100 *445d90007d02007400006901006902007c0200830100701300017400006901006903007c020083 *01006f6400017404006905006401007c0200830200017c00006906007046000174000069010069 *07007c02008301006f2200017400006901006903007c02008301000c6f0e00017408007c020083 *010001719300017400006909007c02008301000171970001710700017107005764000053280200 *00004e730b00000044656c6574696e67202573280a000000521700000052180000005219000000 *740600000069736c696e6b52030000007404000000696e666f74070000006472795f72756e7405 *00000069736469727406000000726d747265657406000000756e6c696e6b280300000052530000 *007408000000626c6f636b657273740800000066696c656e616d6528000000002800000000734c *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e70 *79740f00000064656c6574655f626c6f636b657273720000007310000000000107000601260110 *010a0127010e026301000000090000000f0000004300000073f10300007c000069000064010064 *0200640300640400830400017c00006901006400006a08006f1000017c00006903007c00005f01 *006e0100017c0000690400640500641700830200017c0000690400640600641800830200017c00 *00690400640700641900830200017405007406007407006908008302007d01007409008300007c *00005f0a007c0000690b006400006a09006fb80001670000047d02007c0000690b00690c006409 *00830100445d1f007d03007c0200740d00690800690e007c0300690f008300008301001271ab00 *7e02007d04007876007c0400445d6a007d0500740d006908006910007c05008301007014000174 *1100691200640a007c05008302000171da00017406007c05008301007c01006a07006f14000174 *13007c0500640b001783010082010071da00017c0000690a006914007406007c05008301008301 *000171da00576e0100017c0000691500700e00017c0000691600830000016e0100017c00006917 *0070040001640c007c00005f17007c0000690a001e7c00005f18007847007c0000690300740600 *7c0000690100830100660200445d2d007d06007c06007c00006918006a07006f1700017c000069 *1800691900640d007c060083020001719d0101719d01577c0000691a006400006a09006f370001 *670000047d07007c0000691a00690c00640900830100445d13007d03007c07007c0300690f0083 *00001271f5017e07007d08006e0a0001640e006701007d08007c0000691b006400006a08006f2f *00017c0000691c007c0000691700640f007c0000691800740700690800176410007c0800830102 *7c00005f1b006e010001741d007c0000691800740700690800178301007c00005f1e007c000069 *1f006400006a09006f2d00017420007c0000691f007421008302006f1600017c0000691f00690c *008300007c00005f1f0071bc02016e0a00016700007c00005f1f007c00006922006f1e00017c00 *00691b006923007c000069180074070069080017830100016e0100017c0000691b006924007c00 *00691f00830100017c0000690400640500641a00830200017420007c0000692500742600830200 *706700017941007426007c00006925008301007c00005f2500640d007c000069250004036a0100 *6f0a00016412006a01006e02000201700a00017427008201006e01000157718103047427006a0a *006f13000101010174130064130083010082010071810301586e0100017c00006928006f1a0001 *7c00006929006f1000017413006414008301008201006e0100017c00006915006f1b00017c0000 *692a000c6f100001742b006415008301008201006e0100017c0000692c0070100001742b006416 *008301008201006e0100016700007c00005f2d0064000053281b0000004e523500000052360000 *00523a000000524a000000740b000000696e7374616c6c5f6c6962740f000000696e7374616c6c *5f736372697074737407000000696e7374616c6c523d00000074010000002c7322000000257320 *28696e202d2d736974652d646972732920646f6573206e6f742065786973747324000000202869 *6e202d2d736974652d6469727329206973206e6f74206f6e207379732e70617468731d00000068 *7474703a2f2f707970692e707974686f6e2e6f72672f73696d706c656900000000520f00000074 *0b0000007365617263685f706174687405000000686f737473523c0000006902000000731d0000 *002d2d6f7074696d697a65206d75737420626520302c20312c206f722032735600000043616e27 *742075736520626f7468202d2d64656c6574652d636f6e666c696374696e6720616e64202d2d69 *676e6f72652d636f6e666c696374732d61742d6d792d7269736b206174207468652073616d6520 *74696d6573390000004d75737420737065636966792061206275696c64206469726563746f7279 *20282d6229207768656e207573696e67202d2d6564697461626c65733a0000004e6f2075726c73 *2c2066696c656e616d65732c206f7220726571756972656d656e74732073706563696669656420 *28736565202d2d68656c70292802000000730b000000696e7374616c6c5f646972730b00000069 *6e7374616c6c5f6469722802000000730b000000696e7374616c6c5f646972730a000000736372 *6970745f646972280200000073060000007265636f726473060000007265636f72642802000000 *73080000006f7074696d697a6573080000006f7074696d697a65282e00000074070000005f6578 *70616e6452360000005232000000523500000074150000007365745f756e646566696e65645f6f *7074696f6e7374030000006d6170740e0000006e6f726d616c697a655f70617468740300000073 *79735218000000740d0000006765745f736974655f64697273740d000000616c6c5f736974655f *64697273524a000000740500000073706c69745217000000740a000000657870616e6475736572 *740500000073747269705258000000520300000074040000007761726e52070000007406000000 *617070656e64522d000000740e000000636865636b5f736974655f6469725238000000740b0000 *00736861646f775f706174687406000000696e7365727452410000005245000000740c00000063 *72656174655f696e646578740b000000456e7669726f6e6d656e74740b0000006c6f63616c5f69 *6e6465785239000000740a0000006973696e7374616e6365740a00000062617365737472696e67 *5234000000740e0000007363616e5f6567675f6c696e6b73740e0000006164645f66696e645f6c *696e6b73523c0000007403000000696e74740a00000056616c75654572726f7252480000005249 *000000523a0000005206000000523b00000074070000006f757470757473280900000052530000 *00521a00000074040000005f5b315d5223000000524a0000005222000000740900000070617468 *5f6974656d74040000005f5b325d526300000028000000002800000000734c000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365 *747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e707974100000006669 *6e616c697a655f6f7074696f6e737c000000737800000000011603100110050901070309010703 *100112010c0110023f0207000601130114011301030111031e010a000e0113010d011900060110 *011b021001370209011001060129021902100113011a0209010a011e0113011001130103011201 *21000e010e011502140103010d03150103010d020a0103010d026301000000060000000d000000 *4300000073140100007c00006900007c00006901006900006a03006f1400017402006903007c00 *00690000830100016e0100017acf007825007c0000690400445d1a007d01007c00006905007c01 *007c00006906000c83020001713700577c00006907006f8f00017c00006908007d02007c000069 *09006f420001740a007c00006909008301007d0300783000740b00740a007c0200830100830100 *445d18007d04007c02007c0400197c03001f7c02007c04003c719400576e010001640100640200 *6b0c006c0d007d0500017c0000690e007c0500690f007c00006907007c02006602006403007c00 *0069070016830300016e0100017c000069100083000001576400007402006903007c0000690100 *69000083010001586400005328040000004e69ffffffff2801000000740900000066696c655f75 *74696c732700000077726974696e67206c697374206f6620696e7374616c6c65642066696c6573 *20746f202725732728110000005250000000524f0000005203000000740d0000007365745f7665 *72626f73697479523b00000052110000005240000000523d000000527c00000052420000007403 *0000006c656e74060000007872616e67657409000000646973747574696c735281000000740700 *000065786563757465740a00000077726974655f66696c6574170000007761726e5f6465707265 *63617465645f6f7074696f6e7328060000005253000000740400000073706563527c0000007408 *000000726f6f745f6c656e7407000000636f756e74657252810000002800000000280000000073 *4c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464657664 *65762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e *7079740300000072756ece000000732800000000011601140103010a00060118010a0109010a01 *0f01130006011a0110010601120103010f020e0263010000000200000007000000430000007349 *0000007910007400006901008300007d0100576e1c000101017402006903006401007404006905 *008302007d01006e0100587400006906006907007c00006908006402007c010016830200532803 *00000073c800000052657475726e20612070736575646f2d74656d706e616d6520626173652069 *6e2074686520696e7374616c6c206469726563746f72792e0a2020202020202020546869732063 *6f646520697320696e74656e74696f6e616c6c79206e616976653b2069662061206d616c696369 *6f75732070617274792063616e20777269746520746f0a20202020202020207468652074617267 *6574206469726563746f727920796f7527726520616c726561647920696e206465657020646f6f *646f6f2e0a202020202020202069000000007314000000746573742d656173792d696e7374616c *6c2d2573280900000052170000007406000000676574706964740600000072616e646f6d740700 *000072616e64696e74526800000074060000006d6178696e74521800000074040000006a6f696e *523500000028020000005253000000740300000070696428000000002800000000734c00000043 *3a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567 *675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e7079740f00 *000070736575646f5f74656d706e616d65e4000000730a00000000050301100103011901630100 *000001000000020000004300000073290000007c0000690000700a00017c00006901006f110001 *740200690300640100830100016e0100016400005328020000004e73770000004e6f74653a2054 *6865202d442c202d2d64656c6574652d636f6e666c696374696e6720616e64202d2d69676e6f72 *652d636f6e666c696374732d61742d6d792d7269736b206e6f206c6f6e67657220686176652061 *6e7920707572706f736520616e642073686f756c64206e6f7420626520757365642e2804000000 *524800000052490000005203000000526e00000028010000005253000000280000000028000000 *00734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c *6c2e70795288000000ef0000007306000000000114010601630100000006000000090000004300 *000073ad0100007400007c00006901008301007d01007402006903006904007c01006401008302 *007d02007911007402006905007c010083010001576e1300047406006a0a006f0700010101016e *020001587c00006907006908007c0100830100017c01007c00006907006a06007d03007c030070 *1000017c00006909008300007d03006e8500017c0000690a00830000640200177d040074020069 *0300690b007c04008301007d0500793c007c05006f110001740200690c007c0400830100016e01 *0001740d007c0400640300830200690e0083000001740200690c007c040083010001576e230004 *740600740f006602006a0a006f1100010101017c0000691000830000016e020001587c03000c6f *2200017c00006911000c6f1700017412006913007c0000691400830000830100016e0100017c03 *006f2d00017c00006915006404006a08006f1900017417007c02007c00006907008302007c0000 *5f1500716c01016e0a00016404007c00005f15007c00006911006f2a0001740200690300690b00 *7c02008301000c6f1600017418007c00005f19006404007c00005f15006e0100017c01007c0000 *5f0100640400532805000000733b00000056657269667920746861742073656c662e696e737461 *6c6c5f646972206973202e7074682d63617061626c65206469722c206966206e65656465647310 *000000656173792d696e7374616c6c2e707468730b0000002e77726974652d7465737474010000 *00774e281a0000005267000000523500000052170000005218000000529100000074080000006d *616b656469727374070000004f534572726f72526a000000526f0000007414000000636865636b *5f7074685f70726f63657373696e6752930000005219000000525a00000074040000006f70656e *7405000000636c6f73657407000000494f4572726f72741400000063616e745f77726974655f74 *6f5f746172676574523f0000005203000000526e00000074160000006e6f5f64656661756c745f *76657273696f6e5f6d7367524600000052320000005212000000740400000054727565524d0000 *00280600000052530000007407000000696e73746469725246000000740b00000069735f736974 *655f64697274080000007465737466696c65740b000000746573745f6578697374732800000000 *2800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e *7374616c6c2e70795270000000f7000000733a00000000020f011503030111010e03050210030f *0207021003100112010301070011011301110114010f0213021702070110011d0209021e010901 *0d016301000000020000000300000043000000735b000000640100740000690100830000640200 *197c0000690200660200167d01007403006904006905007c0000690200830100700e00017c0100 *640300377d01006e0b00017c0100640400377d01007406007c0100830100820100640000532805 *0000004e731201000063616e277420637265617465206f722072656d6f76652066696c65732069 *6e20696e7374616c6c206469726563746f72790a0a54686520666f6c6c6f77696e67206572726f *72206f63637572726564207768696c6520747279696e6720746f20616464206f722072656d6f76 *652066696c657320696e207468650a696e7374616c6c6174696f6e206469726563746f72793a0a *0a2020202025730a0a54686520696e7374616c6c6174696f6e206469726563746f727920796f75 *207370656369666965642028766961202d2d696e7374616c6c2d6469722c202d2d707265666978 *2c206f720a74686520646973747574696c732064656661756c742073657474696e672920776173 *3a0a0a2020202025730a690100000073a00000000a54686973206469726563746f727920646f65 *73206e6f742063757272656e746c792065786973742e2020506c65617365206372656174652069 *7420616e642074727920616761696e2c206f720a63686f6f7365206120646966666572656e7420 *696e7374616c6c6174696f6e206469726563746f727920287573696e6720746865202d64206f72 *202d2d696e7374616c6c2d6469720a6f7074696f6e292e0a73440200000a506572686170732079 *6f7572206163636f756e7420646f6573206e6f7420686176652077726974652061636365737320 *746f2074686973206469726563746f72793f20204966207468650a696e7374616c6c6174696f6e *206469726563746f727920697320612073797374656d2d6f776e6564206469726563746f72792c *20796f75206d6179206e65656420746f207369676e20696e0a6173207468652061646d696e6973 *747261746f72206f722022726f6f7422206163636f756e742e2020496620796f7520646f206e6f *7420686176652061646d696e6973747261746976650a61636365737320746f2074686973206d61 *6368696e652c20796f75206d6179207769736820746f2063686f6f736520612064696666657265 *6e7420696e7374616c6c6174696f6e0a6469726563746f72792c2070726566657261626c79206f *6e652074686174206973206c697374656420696e20796f757220505954484f4e5041544820656e *7669726f6e6d656e740a7661726961626c652e0a0a466f7220696e666f726d6174696f6e206f6e *206f74686572206f7074696f6e732c20796f75206d6179207769736820746f20636f6e73756c74 *207468650a646f63756d656e746174696f6e2061743a0a0a2020687474703a2f2f7065616b2e74 *656c65636f6d6d756e6974792e636f6d2f45617379496e7374616c6c2e68746d6c0a0a506c6561 *7365206d616b652074686520617070726f707269617465206368616e67657320666f7220796f75 *722073797374656d20616e642074727920616761696e2e0a280700000052680000007408000000 *6578635f696e666f52350000005217000000521800000052190000005208000000280200000052 *5300000074030000006d736728000000002800000000734c000000433a5c7461686f652d6c6166 *735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c *735c636f6d6d616e645c656173795f696e7374616c6c2e7079529b00000026010000730e000000 *000c1d02160103040b02030e070163010000000b0000000c00000043000000730c0200007c0000 *6900007d01007401006902006401007c0100830200017c0000690300830000640200177d02007c *0200640300177d03007404006905006906007c03008301007d0400792b007c04006f1100017404 *006907007c0300830100016e0100017408007c02006404008302007d0500576e23000474090074 *0a006602006a0a006f1100010101017c0000690b00830000016e560101587af3007c0500690c00 *6405007c030066010016830100017c0500690d00830000016410007d0500740f006910007d0600 *7404006911006406006a02006f6100017404006905006912007c06008301005c02007d07007d08 *007404006905006913007c07006407008302007d09007c08006914008300006408006a02006f1d *00017404006905006906007c09008301006f0a00017c09007d0600713701016e01000164090064 *0a006b15006c16007d0a00017c0a007c0600640b00640c00640d00670400640e00830200017404 *006905006906007c03008301006f150001740100690200640f007c010083020001741700530157 *6410007c05006f0e00017c0500690d00830000016e0100017404006905006906007c0300830100 *6f1100017404006907007c0300830100016e0100017404006905006906007c02008301006f1100 *017404006907007c0200830100016e010001587c0000691800701400017401006919006411007c *0100830200016e010001741a005328120000007340000000456d7069726963616c6c7920766572 *6966792077686574686572202e7074682066696c65732061726520737570706f7274656420696e *20696e73742e206469727320000000436865636b696e67202e7074682066696c6520737570706f *727420696e20257373040000002e70746873030000002e6f6b52940000007323000000696d706f *7274206f733b6f70656e2825722c277727292e777269746528274f4b27290a74020000006e7473 *0b000000707974686f6e772e657865730a000000707974686f6e2e65786569ffffffff28010000 *007405000000737061776e73020000002d4573020000002d637404000000706173736900000000 *732d00000054455354205041535345443a202573206170706561727320746f20737570706f7274 *202e7074682066696c65734e732b00000054455354204641494c45443a20257320646f6573204e *4f5420737570706f7274202e7074682066696c6573281b00000052350000005203000000525600 *00005293000000521700000052180000005219000000525a00000052980000005296000000529a *000000529b00000074050000007772697465529900000052320000005268000000740a00000065 *786563757461626c6574040000006e616d65526b000000529100000074050000006c6f77657274 *0f000000646973747574696c732e737061776e52a5000000529d000000523f000000526e000000 *524c000000280b0000005253000000529e000000524600000074070000006f6b5f66696c657409 *0000006f6b5f657869737473522700000052a800000074070000006469726e616d657408000000 *626173656e616d657403000000616c7452a500000028000000002800000000734c000000433a5c *7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c *7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e70795297000000 *4f010000734a00000000020901100110010a011201030107001101130114010f02030114010a00 *0601090110011801150126020e02100119021301060103010702090207000e0113001101130012 *010a0114016302000000030000000700000043000000736a0000007c00006900000c6f4e00017c *01006901006401008301006f3e0001783b007c0100690200640100830100445d26007d02007c00 *006903007c01007c02007c01006904006402007c02001783010083030001712b00576e0100017c *00006905007c010083010001640300532804000000733d000000577269746520616c6c20746865 *207363726970747320666f72206064697374602c20756e6c657373207363726970747320617265 *206578636c756465647407000000736372697074737308000000736372697074732f4e28060000 *005237000000740e0000006d657461646174615f697364697274100000006d657461646174615f *6c697374646972740e000000696e7374616c6c5f736372697074740c0000006765745f6d657461 *646174617417000000696e7374616c6c5f777261707065725f7363726970747328030000005253 *000000740400000064697374740b0000007363726970745f6e616d652800000000280000000073 *4c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464657664 *65762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e *70797413000000696e7374616c6c5f6567675f7363726970747378010000730e00000000021b01 *10000601060106011c026302000000060000000600000043000000737e00000074000069010069 *02007c01008301006f5700017864007400006903007c0100830100445d3f005c03007d02007d03 *007d0400782d007c0400445d25007d05007c00006904006905007400006901006906007c02007c *05008302008301000171390057712300576e1100017c00006904006905007c0100830100016400 *005328010000004e2807000000521700000052180000005258000000740400000077616c6b527c *000000526f00000052910000002806000000525300000052180000007404000000626173657404 *00000064697273740500000066696c6573525c00000028000000002800000000734c000000433a *5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e656767 *5c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e7079740a0000 *006164645f6f757470757482010000730e0000000001130110000f01070006012b026302000000 *02000000030000004300000073250000007c00006900006f1700017401006401007c0100660100 *168301008201006e0100016400005328020000004e736a000000496e76616c696420617267756d *656e742025723a20796f752063616e2774207573652066696c656e616d6573206f722055524c73 *2077697468202d2d6564697461626c6520286578636570742076696120746865202d2d66696e64 *2d6c696e6b73206f7074696f6e292e2802000000522d0000005206000000280200000052530000 *00528900000028000000002800000000734c000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d *616e645c656173795f696e7374616c6c2e7079740c0000006e6f745f6564697461626c658a0100 *00730800000000010a01030103026302000000020000000400000043000000735b0000007c0000 *6900007005000164000053017401006902006903007401006902006904007c00006905007c0100 *6906008302008301006f2000017407006401007c01006906007c00006905006602001683010082 *01006e0100016400005328020000004e7332000000257220616c72656164792065786973747320 *696e2025733b2063616e277420646f206120636865636b6f75742074686572652808000000522d *0000005217000000521800000052190000005291000000523a00000074030000006b6579520600 *000028020000005253000000528900000028000000002800000000734c000000433a5c7461686f *652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c73657475 *70746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e7079740e00000063686563 *6b5f6564697461626c6592010000730c00000000010a0105022801030103016303000000070000 *00090000004300000073b80100007400006901006401006402008300017d03006400007d04007c *0000690300700e00017c0000690400830000016e0100017a5f017405007c010074060083020070 *9300017407007c01008301006f3c00017c00006908007c0100830100017c0000690900690a007c *01007c03008302007d04007c0000690b006400007c04007c03007c0200740c008305005301740d *00690e00690f007c01008301006f2700017c00006908007c0100830100017c0000690b00640000 *7c01007c03007c0200740c0083050053017410007c01008301007d01006e0100017c0000691100 *7c0100830100017c00006909006912007c01007c03007c00006913007c00006903007c00006914 *000c8305007d05007c05006400006a08006f3200016403007c0100167d06007c00006914006f0e *00017c0600640400377d06006e0100017415007c06008301008201006e4500017c050069160074 *17006a02006f1b00017c00006918007c01007c05007c0200640500830400017c050053017c0000 *690b007c01007c05006919007c03007c02008304005357640000740d00690e00690f007c030083 *01006f0e0001741a007c0300830100016e010001586400005328060000004e5243000000730d00 *0000656173795f696e7374616c6c2d732b000000436f756c64206e6f742066696e642073756974 *61626c6520646973747269627574696f6e20666f72202572733200000020282d2d616c77617973 *2d636f707920736b6970732073797374656d20616e6420646576656c6f706d656e742065676773 *2974050000005573696e67281b000000740800000074656d7066696c6574070000006d6b647465 *6d705232000000522d000000740f000000696e7374616c6c5f736974655f70795276000000740b *000000526571756972656d656e74520c00000052bf00000052450000007408000000646f776e6c *6f6164740c000000696e7374616c6c5f6974656d529d0000005217000000521800000052190000 *00741500000070617273655f726571756972656d656e745f61726752c100000074120000006665 *7463685f646973747269627574696f6e5220000000523e0000005208000000740a000000707265 *636564656e6365740c000000444556454c4f505f44495354741400000070726f636573735f6469 *73747269627574696f6e74080000006c6f636174696f6e52590000002807000000525300000052 *890000007404000000646570737406000000746d7064697252c700000052b700000052a3000000 *28000000002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c73 *2d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c6561 *73795f696e7374616c6c2e70795211000000a101000073380000000001120106010a000e020301 *10010d020d0115011a0213020d011a0210020d0109011f030d010a010a010e0110011002160105 *021d0313016306000000080000000700000043000000739a0100007c0500700700017c00006900 *007d05007c0500701600017401006902006903007c02008301007c03006a02007d05007c050070 *0e00017c02006904006401008301000c7d05007c0500703500017c00006905006400006a09006f *2500017401006902006903007407007c02008301008301007407007c00006905008301006a0200 *7d05007c01006f4200017c05000c6f3a00017837007c00006908007c010069090019445d1b007d *06007c0600690a007c02006a02006f0500015071a4000171a40057740b007d05006e010001740c *00690d00640200740100690200690e007c0200830100830200017c05006f3d00017c0000690f00 *7c01007c02007c03008303007d0700785a007c0700445d19007d06007c00006910007c01007c06 *007c040083030001710c01576e3600017c00006911007c00006912007c02008301008301006701 *007d07007c00006910007c01007c0700640300197c0400640400830400017c01006400006a0900 *6f2700017824007c0700445d18007d06007c06007c01006a06006f0500017c0600530171760157 *6e0100016400005328050000004e73040000002e656767730d00000050726f63657373696e6720 *2573690000000052c20000002813000000523e0000005217000000521800000052ae0000007408 *000000656e6473776974685247000000523200000052670000005275000000740c00000070726f *6a6563745f6e616d6552ce000000529d0000005203000000525600000052af000000740c000000 *696e7374616c6c5f6567677352cd000000740f000000636865636b5f636f6e666c696374737410 *0000006567675f646973747269627574696f6e28080000005253000000528900000052c7000000 *52d000000052cf000000740e000000696e7374616c6c5f6e656564656452b70000007405000000 *646973747328000000002800000000734c000000433a5c7461686f652d6c6166735c7365747570 *746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d61 *6e645c656173795f696e7374616c6c2e707952c8000000ca0100007334000000000310011f0117 *0107011001150112030f0311000601100109020a021c0207011501070006011b021b011a020d01 *070006010d01630400000008000000080000004700000073230200007c00006900007c02008301 *00017c00006901006902007c0200830100017c00006903006902007c0200830100017c00006904 *007c0200830100017c02007c00006905007c02006906003c7407006908007c00006909007c0100 *7c02007c04008c0200830100017c0200690a006401008301006f1d00017c0000690100690b007c *0200690c00640100830100830100016e0100017c03000c6f1000017c0000690d000c6f05000164 *000053017c01006400006a09006f2800017c02006906007c01006906006a03006f150001740700 *690f006402007c02008302000164000053017c01006400006a0800700d00017c02007c01006a07 *006f3800017c02006910008300007d05007c0100700400017c05007d01007411007c0500691200 *7c05006913007c01006914008303007d01006e0100017407006908006403007c01008302000179 *28007415006700008301006916007c01006701007c00006903007c00006917008303007d060057 *6e4f00047418006a0a006f1c0001017d0700017419006404007c0700691a00168301008201006e *29000104741b006a0a006f1c0001017d0700017419006405007c0700691a00168301008201006e *020001587c0000690d00700a00017c0000691c006f3f0001783c007c0600445d30007d02007c02 *006906007c00006905006a07006f1700017c00006917007c02006910008300008301000171d701 *0171d701576e0100017407006908006406007c0100830200016400005328070000004e73140000 *00646570656e64656e63795f6c696e6b732e747874731c000000536b697070696e672064657065 *6e64656e6369657320666f72202573731e00000050726f63657373696e6720646570656e64656e *6369657320666f722025737327000000436f756c64206e6f742066696e64207265717569726564 *20646973747269627574696f6e2025737337000000496e7374616c6c6564206469737472696275 *74696f6e20257320636f6e666c69637473207769746820726571756972656d656e742025737327 *00000046696e69736865642070726f63657373696e6720646570656e64656e6369657320666f72 *202573281d000000740a0000007570646174655f70746852450000007403000000616464527500 *000052b9000000524b00000052c0000000520300000052560000007413000000696e7374616c6c *6174696f6e5f7265706f7274740c0000006861735f6d6574616461746152790000007412000000 *6765745f6d657461646174615f6c696e6573523e0000005232000000526e000000740e00000061 *735f726571756972656d656e7452c600000052d200000074050000007370656373740600000065 *7874726173740a000000576f726b696e6753657474070000007265736f6c766552110000007414 *000000446973747269627574696f6e4e6f74466f756e645208000000523b000000740f00000056 *657273696f6e436f6e666c696374524700000028080000005253000000740b0000007265717569 *72656d656e7452b700000052cf0000005256000000740700000064697374726571740700000064 *697374726f73522e00000028000000002800000000734c000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c73 *5c636f6d6d616e645c656173795f696e7374616c6c2e707952cd000000f3010000734800000000 *010d01100110010d0110011c01100109011402130105012001100105011a020c010d0103011c02 *100103010c011c02100103011402100103010301120214020700060113011f0163020000000200 *0000020000004300000073470000007c00006900006400006a09006f0900017c00006900000c53 *017c01006902006401008301006f05000174030053017c01006902006402008301007005000174 *030053017404005328030000004e730c0000006e6f742d7a69702d7361666573080000007a6970 *2d7361666528050000005233000000523200000052db000000529d000000524c00000028020000 *00525300000052b700000028000000002800000000734c000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c73 *5c636f6d6d616e645c656173795f696e7374616c6c2e7079740c00000073686f756c645f756e7a *69701f020000730e00000000011001090110010501100105016304000000060000000500000043 *00000073100100007400006901006902007c00006903007c01006904008302007d040074000069 *01006905007c04008301006f2100017406006907006401007c01006904007c00006903007c0300 *830400017c030053017400006901006908007c02008301006f0a00017c02007d03006e87000174 *00006901006909007c02008301007c03006a02006f110001740000690a007c0200830100016e01 *0001740000690b007c03008301007d0500740c007c05008301006402006a02006f3a0001740000 *6901006902007c03007c0500640300198302007d02007400006901006908007c02008301006f0a *00017c02007d030071f200016e010001740d007c040083010001740e00690f007c03007c040083 *0200017c04005328040000004e733c000000257220616c72656164792065786973747320696e20 *25733b206275696c64206469726563746f72792025732077696c6c206e6f74206265206b657074 *690100000069000000002810000000521700000052180000005291000000523a00000052c00000 *0052190000005203000000526e000000525800000052ae000000525a00000074070000006c6973 *7464697252830000007410000000656e737572655f6469726563746f7279740600000073687574 *696c74040000006d6f7665280600000052530000005289000000740d000000646973745f66696c *656e616d65740a00000073657475705f6261736574030000006473747408000000636f6e74656e *747328000000002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f *6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c *656173795f696e7374616c6c2e7079740a0000006d617962655f6d6f7665280200007324000000 *00011b011301060103011302050113010a02190111010f011301190113020e010a001001630200 *000003000000030000004300000073360000007c0000690000702800017825007401007c010083 *0100445d13007d02007c00006902007c02008c000001711700576e010001640000532801000000 *4e28030000005237000000740f0000006765745f7363726970745f61726773740c000000777269 *74655f7363726970742803000000525300000052b7000000523b00000028000000002800000000 *734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576 *6465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c *2e707952b60000003e020000730800000000010a010d0006016305000000070000000400000043 *00000073830000007400007c01006901008300008301007d05007402007c03007c02008302007d *06007c06006f2200017c04006f1b00017403007c030083010064010074040083000016177d0300 *6e2300017c06006f1b00017403007c030083010064020074040083000016177d03006e0100017c *00006905007c02007c030064030083030001640400532805000000732f00000047656e65726174 *652061206c656761637920736372697074207772617070657220616e6420696e7374616c6c2069 *7473b80000002320454153592d494e5354414c4c2d4445562d5343524950543a20252873706563 *29722c25287363726970745f6e616d6529720a5f5f72657175697265735f5f203d202528737065 *6329720a66726f6d20706b675f7265736f757263657320696d706f727420726571756972653b20 *72657175697265282528737065632972290a64656c20726571756972650a5f5f66696c655f5f20 *3d2025286465765f7061746829720a6578656366696c65285f5f66696c655f5f290a7391000000 *2320454153592d494e5354414c4c2d5343524950543a2025287370656329722c25287363726970 *745f6e616d6529720a5f5f72657175697265735f5f203d2025287370656329720a696d706f7274 *20706b675f7265736f75726365730a706b675f7265736f75726365732e72756e5f736372697074 *2825287370656329722c2025287363726970745f6e616d652972290a52290000004e2806000000 *740300000073747252dd000000741000000069735f707974686f6e5f7363726970747411000000 *6765745f7363726970745f68656164657274060000006c6f63616c7352f2000000280700000052 *5300000052b700000052b8000000740b0000007363726970745f7465787474080000006465765f *706174685289000000740900000069735f73637269707428000000002800000000734c00000043 *3a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567 *675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e707952b400 *0000450200007316000000000212010f020e01090103060f010701090103040f01740100000074 *630500000009000000070000004300000073c80000007c0000690000670000047d05007c040044 *5d1f007d06007c05007401006902006903007c00006904007c0600830200127111007e05008301 *00017405006906006401007c01007c0000690400830300017401006902006903007c0000690400 *7c01008302007d07007c00006907007c0700830100017c0000690800704500017409007c070083 *010001740a007c07006402007c0300178302007d08007c0800690b007c0200830100017c080069 *0c0083000001740d007c0700640300830200016e01000164040053280500000073310000005772 *69746520616e2065786563757461626c652066696c6520746f2074686520736372697074732064 *69726563746f7279731a000000496e7374616c6c696e672025732073637269707420746f202573 *529400000069ed0100004e280e000000525d000000521700000052180000005291000000523600 *00005203000000525600000052be000000525700000052e9000000529800000052a70000005299 *000000740500000063686d6f642809000000525300000052b800000052ef00000074040000006d *6f6465525b000000527d0000005224000000740600000074617267657452270000002800000000 *2800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e *7374616c6c2e707952f20000005c0200007316000000000206013401160118010d020a010a0113 *010d010a01630400000007000000050000004300000073e80100007c0200690000830000690100 *6401008301006f1400017c00006902007c02007c030083020067010053017c0200690000830000 *6901006402008301006f1400017c00006903007c02007c030083020067010053017c03007d0400 *7404006905006906007c02008301006f2800017c02006901006403008301000c6f170001740700 *7c02007c03007c0000690800830300016e2a00017404006905006909007c02008301006f160001 *740400690500690a007c02008301007d04006e0100017c0400690b007c03008301006f3000017c *0000690c006f2600017c01006400006a09006f1900017c0000690e007c01007c02007c04008303 *007d04006e010001740400690500690f007c04006404008302007d05007404006905006910007c *050083010070860001741100740400690500690f007c04006405006404008303008301007d0600 *7c060070200001741200640600740400690500690a007c0200830100168301008201006e010001 *7413007c06008301006407006a04006f200001741200640800740400690500690a007c02008301 *00168301008201006e0100017c0600640900197d05006e0100017c00006914006f1e0001741500 *6916007c00006917007c01007c05008302008301000167000053017c00006918007c05007c0400 *8302005364000053280a0000004e73040000002e65676773040000002e65786573030000002e70 *79730800000073657475702e7079520f0000007322000000436f756c646e27742066696e642061 *2073657475702073637269707420696e2025736901000000731c0000004d756c7469706c652073 *65747570207363726970747320696e2025736900000000281900000052aa00000052d100000074 *0b000000696e7374616c6c5f656767740b000000696e7374616c6c5f6578655217000000521800 *00007406000000697366696c655209000000740f000000756e7061636b5f70726f677265737352 *58000000740700000061627370617468740a00000073746172747377697468523a000000523200 *000052f000000052910000005219000000520000000052080000005283000000522d0000005203 *0000005256000000740f0000007265706f72745f6564697461626c6574110000006275696c645f *616e645f696e7374616c6c28070000005253000000528900000052ec00000052d000000052ed00 *0000740c00000073657475705f7363726970747406000000736574757073280000000028000000 *00734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c *6c2e707952d30000006e0200007334000000000216011401160114030601240117011301160210 *0117021903150213011e01070103011d02130103011d020e030a01190105026302000000030000 *000500000043000000735d0000007400006901006902007c01008301006f2200017403007c0100 *7400006901006904007c01006401008302008302007d02006e1600017405007406006907007c01 *008301008301007d02007408006909007c01006402007c02008301015328030000004e73080000 *004547472d494e464f74080000006d65746164617461280a000000521700000052180000005258 *000000740c000000506174684d657461646174615291000000740b0000004567674d6574616461 *746174090000007a6970696d706f7274740b0000007a6970696d706f72746572740c0000004469 *73747269627574696f6e740d00000066726f6d5f66696c656e616d652803000000525300000074 *080000006567675f70617468520801000028000000002800000000734c000000433a5c7461686f *652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c73657475 *70746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e707952d500000097020000 *730800000000011301220215016303000000070000000700000043000000730602000074000069 *01006902007c00006903007400006901006904007c01008301008302007d030074000069010069 *05007c03008301007d03007c0000690600700e00017407007c0300830100016e0100017c000069 *08007c01008301007d04007c00006909007c040083010001740a007c01007c0300830200707201 *01740000690100690b007c03008301006f2e0001740000690100690c007c03008301000c6f1a00 *01740d00690e007c03006401007c0000690600830101016e350001740000690100690f007c0300 *8301006f2100017c00006910007400006911007c03006601006402007c030017830300016e0100 *017412007c030083010001740000690100690b007c01008301006f3800017c01006913007c0200 *8301006f140001741400691500640300027d05007d060071a90101741400691600640400027d05 *007d06006e6600017c00006917007c04008301006f2100017c00006918007c0300830100017c00 *00691900640500027d05007d06006e3500017c01006913007c02008301006f1400017414006915 *00640300027d05007d06006e110001741400691a00640400027d05007d06007c00006910007c05 *007c01007c03006602007c0600640600177400006901006904007c010083010074000069010069 *1b007c030083010066020016830300016e0100017c0000691c007c0300830100017c0000690800 *7c03008301005328070000004e5257000000730900000052656d6f76696e672074060000004d6f *76696e677407000000436f7079696e67740a00000045787472616374696e677309000000202573 *20746f202573281d000000521700000052180000005291000000523500000052af000000520201 *0000525700000052e900000052d500000052d40000005210000000525800000052550000005204 *000000740b00000072656d6f76655f7472656552190000005286000000525a000000740e000000 *756e63616368655f7a6970646972520301000052ea00000052eb0000007408000000636f707974 *72656552e700000074060000006d6b706174687412000000756e7061636b5f616e645f636f6d70 *696c657405000000636f70793252ae00000052be00000028070000005253000000520f01000052 *d0000000740b00000064657374696e6174696f6e52b70000005227000000521f00000028000000 *002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36 *6331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f69 *6e7374616c6c2e707952fe0000009e02000073360000000001240112010a010e020f010d011001 *27011a01130121010a01130110011402140110010d011401100114021002120107012a020d0163 *030000000f0000000b0000004300000073080200007400007c01008301007d03007c0300640000 *6a08006f1400017402006401007c0100168301008201006e0100017403006400006402007c0300 *6904006403006404008302006405007c0300690400640300640500830200640600640700830103 *7d04007405006906006907007c02007c040069080083000064080017830200047d05007c04005f *09007c0500640900177d06007405006906006907007c0600640a008302007d0700740500690600 *6907007c0700640b008302007d0800740a007c080083010001740b007c06007c07008302007c04 *005f0c007c0000690d007c01007c060083020001740500690600690e007c080083010070840001 *740f007c0800640c008302007d09007c0900691000640d00830100017857007c03006911006403 *00830100445d46005c02007d0a007d0b007c0a00640e006a03006f2d00017c0900691000640f00 *7c0a006912006410006411008302006913008300007c0b00660200168301000171280101712801 *577c0900691400830000016e0100017405006906006907007c07006412008302007d0c007c0000 *691500670000047d0d007416007c0400830100445d20007d0e007c0d007405006906006907007c *0c007c0e00641300198302001271ac017e0d00830100017417006918007c05007c06006414007c *00006919006415007c0000691a00830202017c0000691b007c05007c0200830200532816000000 *4e73280000002573206973206e6f7420612076616c696420646973747574696c732057696e646f *7773202e65786552d2000000520801000052a9000000740700000076657273696f6e7408000000 *706c6174666f726d740500000077696e333273040000002e65676773040000002e746d70730800 *00004547472d494e464f7308000000504b472d494e464f529400000073160000004d6574616461 *74612d56657273696f6e3a20312e300a740e0000007461726765745f76657273696f6e73070000 *0025733a2025730a74010000005f74010000002d52b10000006900000000525000000052570000 *00281c000000521300000052320000005208000000520d01000074030000006765745217000000 *5218000000529100000074080000006567675f6e616d6552ce00000052e9000000520901000074 *090000005f70726f7669646572740a0000006578655f746f5f6567675219000000529800000052 *a700000074050000006974656d7374070000007265706c61636574050000007469746c65529900 *0000525d00000052f1000000520d000000740c0000006d616b655f7a697066696c655250000000 *525700000052fe000000280f000000525300000052ec00000052d0000000740300000063666752 *b7000000520f01000074070000006567675f746d70520e0000007407000000706b675f696e6652 *2700000074010000006b7401000000765236000000527d000000523b0000002800000000280000 *0000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e737461 *6c6c2e707952ff000000c0020000733800000000020c010d0103011103090112011b0426010a01 *150115010a011201100313010f010d0110000c010d0131010e01150106013b0306011c03630300 *00000b000000090000000300000073a90100007400007c01008301008903006700008900006700 *008904006800008902008704008701008702008703008700006605006401008600007d03007401 *007c01008801007c0300830300016700007d0400789b00880400445d93007d05007c0500690200 *8300006903006402008301006f7700017c05006904006403008301007d06007c0600640400197d *07007405006906007c060064040019830100640500177c06006404003c74070069080069090088 *01007c06008c01007d0800880000690a007c0800830100017c0400690a007c0800830100017405 *00690b007c07007c08008302000171560001715600577c0000690c008800008301000174050069 *0d00740700690800690900880100640600830200740500690e008801007c040083020083020001 *787d00640d00445d75007d0900740f008300007c0900196f610001740700690800690900880100 *6406007c0900640900178303007d0a007407006908006910007c0a00830100702e00017411007c *0a00640a00830200691200640b00690900740f008300007c090019830100640b00178301000171 *a10101712c0101712c0157640c0053280e000000733b0000004578747261637420612062646973 *745f77696e696e737420746f20746865206469726563746f7269657320616e2065676720776f75 *6c6420757365630200000007000000070000001300000073560100007c00006900008300007d02 *00781f01880300445d17015c02007d03007d04007c02006901007c03008301006ffb00017c0400 *7c00007402007c03008301001f177d00007c00006903006401008301007d050074040069050069 *06008801007c05008c01007d01007c01006900008300007d06007c060069070064020083010070 *1000017c06006907006403008301006f4600017408006909007c0500640400198301007c050064 *04003c640500880200740400690500690a007c050064060019830100640600193c880000690b00 *7c0000830100016e4d00017c06006907006407008301006f3c00017c03006408006a03006f2f00 *01640500880200740400690500690a007c050064060019830100640600193c880400690b007c01 *00830100016e0100017c01005301711300577c000069070064090083010070140001740c00690d *00640a007c0000830200016e01000164000053280b0000004e74010000002f73040000002e7079 *6473040000002e646c6c69ffffffff6901000000690000000073030000002e7079730800000053 *4352495054532f73040000002e70746873190000005741524e494e473a2063616e27742070726f *63657373202573280f00000052aa00000052030100005283000000526b00000052170000005218 *000000529100000052d1000000520d000000740c00000073747269705f6d6f64756c6574080000 *0073706c6974657874526f0000005203000000526e000000523200000028070000007403000000 *73726352ee000000522300000074030000006f6c6474030000006e657774050000007061727473 *7402000000646c2805000000740b0000006e61746976655f6c6962735229010000740900000074 *6f705f6c6576656c74080000007072656669786573740a000000746f5f636f6d70696c65280000 *0000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e737461 *6c6c2e7079740700000070726f63657373f0020000732600000000010c0107000c01100114010f *0115010c01200117011e0111011d011e01110109011001140173040000002e707964522d010000 *69ffffffff73030000002e707973080000004547472d494e464f52360100005235010000730400 *00002e747874529400000073010000000a4e28020000007309000000746f705f6c6576656c730b *0000006e61746976655f6c69627328130000005215000000520900000052aa00000052d1000000 *526b000000520d000000522e010000521700000052180000005291000000526f000000740a0000 *0077726974655f73747562740c000000627974655f636f6d70696c65741100000077726974655f *7361666574795f666c6167740b000000616e616c797a655f65676752f600000052190000005298 *00000052a7000000280b000000525300000052ec00000052290100005239010000740500000073 *747562737403000000726573523301000074080000007265736f75726365740600000070796669 *6c6552a90000007403000000747874280000000028050000005238010000522901000052360100 *0052370100005235010000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c65 *6173795f696e7374616c6c2e70795223010000e9020000733400000000030c010601060106011b *14100106010700060116010f010a011b0115010d000d0118010d0118011302070006010e011c01 *13016302000000110000000c0000004300000073b60100007c0100536401006402006b00006c01 *007d02006c02007d0300016401006403006b03006c03007d0400016700007d0500740400690500 *7c01006906006404008301008301007d060068020064050064060036640500640700367d070078 *24007c0300830000445d19005c03007d08007d09007d0a006405007c07007c08003c7166005778 *11017407007c00006908006701007c000069090017830100445df6005c02007d0b007d0c0078e7 *007c0c00445ddf007d0d00740a00690b00690c007c0d008301005c02007d0e007d08007c0e007c *06006a06006fb400017c0800706f0001791f007c02007c0e007c0b006701008302005c03007d0f *007d0d007d1000576e160004740d006a0a006f0a000101010171b000718b0101587c0f006f0e00 *017c0f00690e00830000016e0100017c0d007c05006a07006f1100017c0500690f007c0d008301 *0001718b0101718f01017c08007c07006a06006f2d00017c0e006408006a03006f2000017c0500 *690f00740a00690b006910007c0b007c0d0083020083010001718f010171b0000171b00057719d *00577c05006f1400017c00006911007c01007c0500830200016e0100017c010053280900000073 *39000000566572696679207468617420746865726520617265206e6f20636f6e666c696374696e *6720226f6c642d7374796c6522207061636b6167657369ffffffff2802000000740b0000006669 *6e645f6d6f64756c65740c0000006765745f737566666978657328010000005200000000730d00 *0000746f705f6c6576656c2e747874690100000073040000002e70796373040000002e70796f74 *040000007369746528120000007403000000696d70524301000052440100005200000000740400 *000064696374740800000066726f6d6b657973740d0000005f6765745f6d65746164617461740c *000000657870616e645f70617468735235000000526a00000052170000005218000000522f0100 *00740b000000496d706f72744572726f725299000000526f0000005291000000740f000000666f *756e645f636f6e666c696374732811000000525300000052b70000005243010000524401000052 *00000000525b00000074050000006e616d6573740400000065787473740300000065787452fc00 *00007403000000747970521800000052bd000000525c00000052bb000000522700000074050000 *00646573637228000000002800000000734c000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d *616e645c656173795f696e7374616c6c2e707952d400000018030000733a000000000304011601 *10020601180214010a000f010e021a000c010700060118010d01070203011f010e01080207000e *010d0115011a012c0107011402630300000004000000030000004300000073a60000007c000069 *00006f1b0001740100690200640100830100017c00006903007c02008301005301640200640300 *6904007c0200830100167d03007c00006905006f1500017c03006404007c010069060016377d03 *006e0b00017c0300640500377d03007c0300640600377d03007407006908006909007c03008301 *0001740700690800690a00830000017c000069050070100001740b006407008301008201006e01 *00016400005328080000004e732a000000417474656d7074696e6720746f2064656c6574652063 *6f6e666c696374696e67207061636b616765733a73850100002d2d2d2d2d2d2d2d2d2d2d2d2d2d *2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d *2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a434f4e464c494354205741524e494e473a0a *0a54686520666f6c6c6f77696e67206d6f64756c6573206f72207061636b616765732068617665 *207468652073616d65206e616d6573206173206d6f64756c6573206f720a7061636b6167657320 *6265696e6720696e7374616c6c65642c20616e642077696c6c206265202a6265666f72652a2074 *686520696e7374616c6c6564207061636b6167657320696e0a507974686f6e2773207365617263 *6820706174682e2020596f75204d5553542072656d6f766520616c6c206f66207468652072656c *6576616e742066696c657320616e640a6469726563746f72696573206265666f726520796f7520 *77696c6c2062652061626c6520746f2075736520746865207061636b61676528732920796f7520 *6172650a696e7374616c6c696e673a0a0a20202025730a0a73040000000a202020738800000028 *4e6f74653a20796f752063616e2072756e2045617379496e7374616c6c206f6e20272573272077 *697468207468650a2d2d64656c6574652d636f6e666c696374696e67206f7074696f6e20746f20 *617474656d70742064656c6574696f6e206f66207468652061626f76652066696c65730a616e64 *2f6f72206469726563746f726965732e290a734c0100004e6f74653a20796f752063616e206174 *74656d7074207468697320696e7374616c6c6174696f6e20616761696e20776974682045617379 *496e7374616c6c2c20616e64207573650a65697468657220746865202d2d64656c6574652d636f *6e666c696374696e6720282d4429206f7074696f6e206f72207468650a2d2d69676e6f72652d63 *6f6e666c696374732d61742d6d792d7269736b206f7074696f6e2c20746f206569746865722064 *656c657465207468652061626f76652066696c65730a616e64206469726563746f726965732c20 *6f7220746f2069676e6f72652074686520636f6e666c696374732c20726573706563746976656c *792e20204e6f746520746861742069660a796f752069676e6f72652074686520636f6e666c6963 *74732c2074686520696e7374616c6c6564207061636b616765287329206d6179206e6f7420776f *726b2e0a734a0000002d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d *2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d *2d2d2d2d0a7325000000496e7374616c6c6174696f6e2061626f727465642064756520746f2063 *6f6e666c69637473280c00000052480000005203000000526e000000525d000000529100000052 *4900000052d20000005268000000740600000073746465727252a70000007405000000666c7573 *6852080000002804000000525300000052b7000000525b00000052a30000002800000000280000 *0000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e737461 *6c6c2e7079524c0100003b030000731e00000000010a010d010e0e13020a010304120203060701 *0302070110010d010a017409000000496e7374616c6c6564630400000009000000040000004300 *0000737f0000006401007d04007c00006900006f4300017c00006901000c6f3800017c04006402 *00377d04007c00006902007403007404007405006906008302006a07006f0e00017c0400640300 *377d0400715300016e0100017c02006907007d05007c02006908007d06007c02006909007d0700 *6404007d08007c0400740a0083000016532805000000733900000048656c7066756c20696e7374 *616c6c6174696f6e206d65737361676520666f7220646973706c617920746f207061636b616765 *207573657273731e0000000a25287768617429732025286567676c6f6329732528657874726173 *297373e90100000a0a42656361757365207468697320646973747269627574696f6e2077617320 *696e7374616c6c6564202d2d6d756c74692d76657273696f6e2c206265666f726520796f752063 *616e0a696d706f7274206d6f64756c65732066726f6d2074686973207061636b61676520696e20 *616e206170706c69636174696f6e2c20796f752077696c6c206e65656420746f0a27696d706f72 *7420706b675f7265736f75726365732720616e64207468656e2075736520612027726571756972 *652829272063616c6c2073696d696c617220746f206f6e65206f660a7468657365206578616d70 *6c65732c20696e206f7264657220746f2073656c65637420746865206465736972656420766572 *73696f6e3a0a0a20202020706b675f7265736f75726365732e72657175697265282225286e616d *6529732229202023206c617465737420696e7374616c6c65642076657273696f6e0a2020202070 *6b675f7265736f75726365732e72657175697265282225286e616d6529733d3d25287665727369 *6f6e2973222920202320746869732065786163742076657273696f6e0a20202020706b675f7265 *736f75726365732e72657175697265282225286e616d6529733e3d252876657273696f6e297322 *2920202320746869732076657273696f6e206f72206869676865720a73d60000000a0a4e6f7465 *20616c736f20746861742074686520696e7374616c6c6174696f6e206469726563746f7279206d *757374206265206f6e207379732e706174682061742072756e74696d6520666f720a7468697320 *746f20776f726b2e202028652e672e206279206265696e6720746865206170706c69636174696f *6e277320736372697074206469726563746f72792c206279206265696e67206f6e0a505954484f *4e504154482c206f72206279206265696e6720616464656420746f207379732e70617468206279 *20796f757220636f64652e290a7400000000280b000000523f0000005244000000523500000052 *6600000052670000005268000000521800000052ce00000052d2000000521a01000052f6000000 *28090000005253000000740300000072657152b700000074040000007768617452a30000007406 *0000006567676c6f6352a9000000521a01000052df00000028000000002800000000734c000000 *433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e65 *67675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e707952da *000000640300007318000000000206011501030a07011c0103050f010901090109010601630300 *000005000000020000004300000073260000007400006901006902007c02008301007d03007403 *006904007d0400640100740500830000165328020000004e73220100000a457874726163746564 *206564697461626c652076657273696f6e206f6620252873706563297320746f2025286469726e *616d6529730a0a49662069742075736573207365747570746f6f6c7320696e2069747320736574 *7570207363726970742c20796f752063616e20616374697661746520697420696e0a2264657665 *6c6f706d656e7422206d6f646520627920676f696e6720746f2074686174206469726563746f72 *7920616e642072756e6e696e673a3a0a0a202020202528707974686f6e29732073657475702e70 *7920646576656c6f700a0a53656520746865207365747570746f6f6c7320646f63756d656e7461 *74696f6e20666f72207468652022646576656c6f702220636f6d6d616e6420666f72206d6f7265 *20696e666f2e0a28060000005217000000521800000052ae000000526800000052a800000052f6 *000000280500000052530000005289000000520601000052ae0000007406000000707974686f6e *28000000002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c73 *2d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c6561 *73795f696e7374616c6c2e70795204010000800300007306000000000112010909630400000005 *0000000700000043000000731e0100007400006901006902006401007403008302000174000069 *0100690200640200740400830200017405007c03008301007d03007c00006906006403006a0400 *6f2900016404007c000069060064050018147d04007c03006907006406006407007c0400178302 *00016e2500017c00006906006403006a00006f1400017c0300690700640600640800830200016e *0100017c00006908006f1400017c0300690700640600640900830200016e010001740900690a00 *640a007c0100740b007c0200830100640500171f640b00690c007c030083010083030001791100 *740d007c01007c030083020001576e2f0004740e006a0a006f230001017d040001740f00640c00 *7c040069100064060019660100168301008201006e0200015864000053280d0000004e731b0000 *00646973747574696c732e636f6d6d616e642e62646973745f656767731a000000646973747574 *696c732e636f6d6d616e642e6567675f696e666f6902000000522c010000690100000069000000 *00521f01000073020000002d7173020000002d6e730d00000052756e6e696e6720257320257374 *0100000020731b0000005365747570207363726970742065786974656420776974682025732811 *000000526800000074070000006d6f64756c6573740a00000073657464656661756c74520d0000 *00520e00000074040000006c697374525000000052720000005257000000520300000052560000 *00528300000052910000005202000000740a00000053797374656d457869745208000000523b00 *000028050000005253000000520601000052ed000000523b000000522c01000028000000002800 *000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134 *6465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374 *616c6c2e707952020000008d03000073200000000001130113020c01100111011801100114010a *01140106012402030111011001630300000009000000090000004300000073f800000064010064 *02006702007d03007400006901006403006404006405007402006903006904007c010083010083 *00027d04007aa6007c03006905007c0400830100017c00006906007c01007c02007c0300830300 *017407007c04006701008301007d05006700007d0600783f007c0500445d37007d0700782e007c *05007c070019445d22007d08007c06006905007c00006908007c08006909007c02008302008301 *000171800057716f00577c06000c6f1f00017c0000690a000c6f140001740b00690c006406007c *0400830200016e0100017c06005357640000740d007c040083010001740b00690e007c0000690f *0083010001586400005328070000004e520d000000730a0000002d2d646973742d646972524300 *0000730d0000006567672d646973742d746d702d7403000000646972732b0000004e6f20656767 *7320666f756e6420696e20257320287365747570207363726970742070726f626c656d3f292810 *00000052c300000052c40000005217000000521800000052ae000000526f000000520200000052 *7400000052fe00000052ce00000052570000005203000000526e00000052590000005282000000 *525000000028090000005253000000520601000052ed000000523b000000740800000064697374 *5f6469727408000000616c6c5f6567677374040000006567677352c000000052b7000000280000 *00002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f *696e7374616c6c2e70795205010000a1030000732600000000010c0109011b0203010d0113010f *010601070006010b0006012401130109010b0108020a0163020000000500000005000000430000 *0073c50100007c00006900006400006a08006f05000164000053017883007c00006900007c0100 *69020019445d71007d02007c0000690300701300017c02006904007c01006904006a03006f4e00 *017405006906006401007c0200830200017c00006900006907007c0200830100017c0200690400 *7c00006908006a06006f1700017c00006908006907007c02006904008301000171970001712600 *01712600577c0000690300707800017c01006904007c00006900006909006a06006f1400017405 *006906006402007c010083020001711d01017405006906006403007c0100830200017c00006900 *00690a007c0100830100017c01006904007c00006908006a07006f1700017c0000690800690b00 *7c010069040083010001711d01016e0100017c0000690c00709a00017c0000690000690d008300 *00017c01006902006404006a02006f790001740e00690f006910007c0000691100640500830200 *7d0300740e00690f006912007c03008301006f110001740e006913007c0300830100016e010001 *7414007c03006406008302007d04007c04006915007c00006900006916007c0100690400830100 *64070017830100017c04006917008300000171c101016e0100016400005328080000004e732600 *000052656d6f76696e672025732066726f6d20656173792d696e7374616c6c2e7074682066696c *657334000000257320697320616c726561647920746865206163746976652076657273696f6e20 *696e20656173792d696e7374616c6c2e7074687322000000416464696e6720257320746f206561 *73792d696e7374616c6c2e7074682066696c65740a0000007365747570746f6f6c73730e000000 *7365747570746f6f6c732e7074687402000000777473010000000a281800000052460000005232 *00000052c0000000523f00000052ce00000052030000005256000000740600000072656d6f7665 *52710000007405000000706174687352d9000000526f0000005257000000740400000073617665 *52170000005218000000529100000052350000005255000000525a000000529800000052a70000 *00740d0000006d616b655f72656c617469766552990000002805000000525300000052b7000000 *5222000000525c000000522700000028000000002800000000734c000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574757074 *6f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e707952d8000000b60300007336 *000000000110010502110006011d011001100113011f020a011601060103010b03100110011301 *1b020a020d0210031801130011010f012001630300000003000000040000004300000073170000 *007400006901006401007c01007c0200830300017c02005328020000004e7312000000556e7061 *636b696e6720257320746f20257328020000005203000000740500000064656275672803000000 *5253000000523001000052ee00000028000000002800000000734c000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574757074 *6f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e70795201010000da0300007304 *000000000213016303000000060000000500000003000000738c00000067000089000067000089 *02008700008701008702006603006401008600007d03007400007c01007c02007c030083030001 *8801006901008800008301000188010069020070400001783d00880200445d31007d0400740300 *6904007c04008301007404006905001964020042640300407d05007406007c04007c0500830200 *01714f00576e0100016400005328040000004e6302000000020000000300000013000000739600 *00007c01006900006401008301006f2f00017c00006901006402008301000c6f1e000188000069 *02007c0100830100018802006902007c0100830100016e3200017c010069000064030083010070 *1000017c01006900006404008301006f1100018802006902007c0100830100016e010001880100 *6903007c00007c0100830200018801006904000c6f0700017c0100700400016400005328050000 *004e73030000002e707973090000004547472d494e464f2f73040000002e646c6c73030000002e *736f280600000052d10000005203010000526f0000005201010000525700000052320000002802 *000000523001000052ee0000002803000000523801000052530000007408000000746f5f63686d *6f642800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f *696e7374616c6c2e707974020000007066e2030000730e000000000121010d0111012001110110 *01696d01000069ed0f000028070000005209000000523b01000052570000005217000000740400 *000073746174740700000053545f4d4f444552fb00000028060000005253000000520f01000052 *19010000526b010000522700000052fc0000002800000000280300000052380100005253000000 *526a010000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e *7374616c6c2e70795217010000df0300007314000000000106000602150910010d010a01070006 *011e016302000000030000000c00000043000000738f0000006401006402006b00006c01007d02 *00017a67007402006903007c000069040064030018830100017c02007c01006404006405006406 *006403006407007c0000690500830103017c00006906006f2600017c02007c01006404007c0000 *6906006406006403006407007c0000690500830103016e010001576400007402006903007c0000 *69040083010001586400005328080000004e69ffffffff2801000000523b010000690100000052 *3c00000069000000007405000000666f72636552570000002807000000740e0000006469737475 *74696c732e7574696c523b0100005203000000528200000052500000005257000000523c000000 *280300000052530000005238010000523b01000028000000002800000000734c000000433a5c74 *61686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c73 *65747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e7079523b010000f2 *030000731200000000011001030214021f010a0103011501120363010000000100000005000000 *4300000073200000006401007c0000690000740100690200690300640200640300830200660200 *165328040000004e731f04000062616420696e7374616c6c206469726563746f7279206f722050 *5954484f4e504154480a0a596f752061726520617474656d7074696e6720746f20696e7374616c *6c2061207061636b61676520746f2061206469726563746f72792074686174206973206e6f740a *6f6e20505954484f4e5041544820616e6420776869636820507974686f6e20646f6573206e6f74 *207265616420222e707468222066696c65732066726f6d2e20205468650a696e7374616c6c6174 *696f6e206469726563746f727920796f75207370656369666965642028766961202d2d696e7374 *616c6c2d6469722c202d2d7072656669782c206f720a74686520646973747574696c7320646566 *61756c742073657474696e6729207761733a0a0a2020202025730a0a616e6420796f7572205059 *54484f4e5041544820656e7669726f6e6d656e74207661726961626c652063757272656e746c79 *20636f6e7461696e733a0a0a2020202025720a0a486572652061726520736f6d65206f6620796f *7572206f7074696f6e7320666f7220636f7272656374696e67207468652070726f626c656d3a0a *0a2a20596f752063616e2063686f6f7365206120646966666572656e7420696e7374616c6c6174 *696f6e206469726563746f72792c20692e652e2c206f6e6520746861742069730a20206f6e2050 *5954484f4e50415448206f7220737570706f727473202e7074682066696c65730a0a2a20596f75 *2063616e206164642074686520696e7374616c6c6174696f6e206469726563746f727920746f20 *74686520505954484f4e5041544820656e7669726f6e6d656e740a20207661726961626c652e20 *20284974206d757374207468656e20616c736f206265206f6e20505954484f4e50415448207768 *656e6576657220796f752072756e0a2020507974686f6e20616e642077616e7420746f20757365 *20746865207061636b61676528732920796f752061726520696e7374616c6c696e672e290a0a2a *20596f752063616e207365742075702074686520696e7374616c6c6174696f6e20646972656374 *6f727920746f20737570706f727420222e707468222066696c65732062790a20207573696e6720 *6f6e65206f662074686520617070726f61636865732064657363726962656420686572653a0a0a *2020687474703a2f2f7065616b2e74656c65636f6d6d756e6974792e636f6d2f45617379496e73 *74616c6c2e68746d6c23637573746f6d2d696e7374616c6c6174696f6e2d6c6f636174696f6e73 *0a0a50726f63656564696e6720746f20696e7374616c6c2e2020506c656173652072656d656d62 *6572207468617420756e6c65737320796f75206d616b65206f6e65206f660a7468657365206368 *616e67657320796f752077696c6c206e6f742062652061626c6520746f2072756e207468652069 *6e7374616c6c656420636f64652e0a740a000000505954484f4e50415448525501000028040000 *00523500000052170000007407000000656e7669726f6e52200100002801000000525300000028 *000000002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d *302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173 *795f696e7374616c6c2e7079529c000000080400007304000000001e0301630100000005000000 *0300000043000000731b0100007c00006900006f05000164010053017401006902006903007c00 *006904006402008302007d01007405006403006404008302007d02006405007d03007401006902 *006906007c01008301006f5000017407006908006406007c0000690400830200017409007c0100 *640700830200690a008300007d03007c0300690b0064080083010070140001740c006409007c01 *0016830100820100719f00016e0100017c03007c02006a03006f620001740700690d00640a007c *0100830200017c0000690e0070340001740f007c0100830100017409007c0100640b008302007d *04007c04006910007c0200830100017c0400691100830000016e0100017c00006912007c010067 *0100830100016e0100017413007c00005f000064010053280c00000073380000004d616b652073 *7572652074686572652773206120736974652e707920696e207468652074617267657420646972 *2c206966206e65656465644e7307000000736974652e70795263010000730d000000736974652d *70617463682e70795255010000731f000000436865636b696e67206578697374696e6720736974 *652e707920696e20257374020000007262730d000000646566205f5f626f6f7428293a733b0000 *002573206973206e6f742061207365747570746f6f6c732d67656e65726174656420736974652e *70793b20706c656173652072656d6f76652069742e730b0000004372656174696e672025737402 *00000077622814000000524d0000005217000000521800000052910000005235000000740f0000 *007265736f757263655f737472696e675219000000520300000052690100005298000000740400 *000072656164520301000052080000005256000000525700000052e900000052a7000000529900 *0000523b010000529d000000280500000052530000007406000000736974657079740600000073 *6f75726365740700000063757272656e74522700000028000000002800000000734c000000433a *5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e656767 *5c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e707952c50000 *0033040000732a00000000030a01050218010f01060213011301150110010301030112030d0110 *010a010a010f010d010e0114027405000000706f7369785235000000732f00000024626173652f *6c69622f707974686f6e2470795f76657273696f6e5f73686f72742f736974652d7061636b6167 *65735236000000730900000024626173652f62696e731700000024626173652f4c69622f736974 *652d7061636b61676573730d00000024626173652f536372697074736301000000070000000800 *00004700000073280100007c00006900006401008301006901007d02007c00006902006f820001 *7c02006903008300007d02007c00006902007c02006402003c7c00006904006905007406006907 *007c00006908008302007d0300784b007c0300690900830000445d39005c02007d04007d050074 *0a007c00007c04006400008303006400006a08006f140001740c007c00007c04007c0500830300 *01715d0001715d00576e0100016403006404006b0d006c0e007d0600017873007c0100445d6b00 *7d0400740a007c00007c04008302007d05007c05006400006a09006f4900017c06007c05007c02 *008302007d05007406006907006405006a02006f160001740600690f006910007c05008301007d *05006e010001740c007c00007c04007c05008303000171b5000171b50057640000532806000000 *4e526000000052bb00000069ffffffff2801000000740a00000073756273745f76617273527901 *0000281100000074150000006765745f66696e616c697a65645f636f6d6d616e64740b00000063 *6f6e6669675f7661727352430000007404000000636f7079740f000000494e5354414c4c5f5343 *48454d45535220010000521700000052a9000000740e00000044454641554c545f534348454d45 *52240100007407000000676574617474725232000000740700000073657461747472526f010000 *527a0100005218000000526c0000002807000000525300000074050000006174747273527c0100 *007406000000736368656d65740400000061747472740300000076616c527a0100002800000000 *2800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e *7374616c6c2e70795264000000680400007324000000000112020a020c010d011b010d000c0119 *011c021001070006010f010d010f01100116014e280300000073070000007072656669783d4e73 *13000000696e7374616c6c6174696f6e20707265666978280300000073060000007a69702d6f6b *521e000000731c000000696e7374616c6c207061636b6167652061732061207a697066696c6528 *03000000730d0000006d756c74692d76657273696f6e521f00000073250000006d616b65206170 *7073206861766520746f2072657175697265282920612076657273696f6e280300000073070000 *007570677261646552210000007331000000666f72636520757067726164652028736561726368 *6573205079504920666f72206c61746573742076657273696f6e73292803000000730c00000069 *6e7374616c6c2d6469723d52220000007316000000696e7374616c6c207061636b61676520746f *204449522803000000730b0000007363726970742d6469723d52230000007316000000696e7374 *616c6c207363726970747320746f204449522803000000730f0000006578636c7564652d736372 *6970747352240000007315000000446f6e277420696e7374616c6c207363726970747328030000 *00730b000000616c776179732d636f707952250000007327000000436f707920616c6c206e6565 *646564207061636b6167657320746f20696e7374616c6c206469722803000000730a000000696e *6465782d75726c3d52260000007320000000626173652055524c206f6620507974686f6e205061 *636b61676520496e6465782803000000730b00000066696e642d6c696e6b733d52270000007328 *0000006164646974696f6e616c2055524c28732920746f2073656172636820666f72207061636b *616765732803000000731200000064656c6574652d636f6e666c696374696e6752280000007320 *0000006e6f206c6f6e676572206e65656465643b20646f6e277420757365207468697328030000 *00731b00000069676e6f72652d636f6e666c696374732d61742d6d792d7269736b4e7320000000 *6e6f206c6f6e676572206e65656465643b20646f6e277420757365207468697328030000007310 *0000006275696c642d6469726563746f72793d5229000000732f000000646f776e6c6f61642f65 *7874726163742f6275696c6420696e204449523b206b6565702074686520726573756c74732803 *00000073090000006f7074696d697a653d522a000000736c000000616c736f20636f6d70696c65 *2077697468206f7074696d697a6174696f6e3a202d4f3120666f722022707974686f6e202d4f22 *2c202d4f3220666f722022707974686f6e202d4f4f222c20616e64202d4f3020746f2064697361 *626c65205b64656661756c743a202d4f305d280300000073070000007265636f72643d4e733300 *000066696c656e616d6520696e20776869636820746f207265636f7264206c697374206f662069 *6e7374616c6c65642066696c65732803000000730c000000616c776179732d756e7a6970522b00 *0000732a000000646f6e277420696e7374616c6c2061732061207a697066696c652c206e6f206d *617474657220776861742803000000730a000000736974652d646972733d522c00000073290000 *006c697374206f66206469726563746f72696573207768657265202e7074682066696c65732077 *6f726b280300000073080000006564697461626c65522e000000732b000000496e7374616c6c20 *737065636966696564207061636b6167657320696e206564697461626c6520666f726d28030000 *0073070000006e6f2d64657073522f000000731a000000646f6e277420696e7374616c6c206465 *70656e64656e636965732803000000730c000000616c6c6f772d686f7374733d52300000007324 *0000007061747465726e287329207468617420686f73746e616d6573206d757374206d61746368 *280300000073120000006c6f63616c2d736e617073686f74732d6f6b5231000000732800000061 *6c6c6f77206275696c64696e6720656767732066726f6d206c6f63616c20636865636b6f757473 *2800000000283700000074080000005f5f6e616d655f5f740a0000005f5f6d6f64756c655f5f74 *070000005f5f646f635f5f740b0000006465736372697074696f6e529d000000741a000000636f *6d6d616e645f636f6e73756d65735f617267756d656e74735232000000740c000000757365725f *6f7074696f6e73740f000000626f6f6c65616e5f6f7074696f6e73740c0000006e656761746976 *655f6f7074520a00000052730000005254000000525d0000005280000000528c00000052930000 *0052880000005270000000529b000000529700000052b900000052be00000052bf00000052c100 *0000524c000000521100000052c800000052cd00000052e700000052f000000052b600000052b4 *00000052f200000052d300000052d500000052fe00000052ff000000522301000052d400000052 *4c01000052da00000052040100005202000000520501000052d800000052010100005217010000 *523b010000529c00000052c50000005247010000527e010000527f010000526400000028000000 *0028000000002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c65 *6173795f696e7374616c6c2e707952110000002a000000739e0000000601060106010603030103 *010301030103010301030103010301030103010001030100010301000103020001030103010301 *03010301030109030f0109010c020d010602091f090a09520916090b0908092f09290929090a09 *080908090f0c290c290c2c0909091609070c170f120929090709220929092f092309290c1c090d *091409150924090509130916092b09290601060106010c04060106010903630000000006000000 *0a0000004300000073e60100007400006400007402006903006904006401006402008302006905 *007402006906008301008302007d00007407006908006701007d01007407006909007407006908 *006a03006f1400017c0100690a00740700690900830100016e0100017838017c0100445d30017d *02007c02006f230101740700690b006413006a06006f2300017c0000690a00740200690c00690d *007c0200640500640600830300830100016e7f0001740200690e006407006a02006f4900017c00 *00690f00740200690c00690d007c0200640800640900740700691000640a002017640600830400 *740200690c00690d007c0200640800640b00830300670200830100016e2600017c0000690f007c *0200740200690c00690d007c020064080064060083030067020083010001740700690b00640c00 *6a02006f5e0001640d007c02006a06006f4d0001740200690300690400640e008301007d03007c *03006f3000017c0000690a00740200690c00690d007c0300640f00641000740700691000640a00 *2064060083050083010001718c010171900101719401017164000171640057783800641400445d *30007d04007411007c04008301007d05007c05007c00006a07006f1100017c0000690a007c0500 *83010001719f0101719f01577412007413007c00008302007d00007c00005328150000004e5270 *010000525501000074060000006f7332656d787406000000726973636f7374030000004c696273 *0d000000736974652d7061636b61676573522d01000074030000006c6962525901000069030000 *00730b000000736974652d707974686f6e740600000064617277696e7310000000507974686f6e *2e6672616d65776f726b7404000000484f4d4574070000004c6962726172797406000000507974 *686f6e69000000006901000000280200000073060000006f7332656d787306000000726973636f *732802000000690000000069010000002814000000740600000066696c74657252320000005217 *00000052710100005220010000526b000000740700000070617468736570526800000052430000 *00740b000000657865635f707265666978526f000000521b010000521800000052910000007403 *0000007365707406000000657874656e64521a0100005205000000526600000052670000002806 *00000074080000007369746564697273523701000052430000007404000000686f6d65740d0000 *00706c61745f73706563696669637408000000736974655f6c696228000000002800000000734c *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e70 *79526900000085040000734400000000022a010c01130114010700060107011001230110011201 *03010e010601200206011f0210040d011201070106010c01030103010a011e01070006010c010d *0015020f016301000000080000000600000063000000736c0100006800007d0100785f017c0000 *445d57017d02007400007c02008301007d02007c02007c01006a06006f070001710d006e010001 *6401007c01007c02003c7401006902006903007c020083010070070001710d006e010001740100 *6904007c02008301007d03007c02007c0300660200560178f0007c0300445de8007d04007c0400 *690500640200830100700700017178006e0100017c04006407006a06006f0700017178006e0100 *017406007401006902006907007c02007c04008302008301007d05007408007409007c05008301 *008301007d06007c0500690a0083000001787d007c0600445d75007d07007c0700690b00640500 *830100705f00017400007c0700690c008300008301007d07007c07007c01006a07006f3c000164 *01007c01007c07003c7401006902006903007c07008301007007000171e7006e0100017c070074 *01006904007c07008301006602005601715c010171e7000171e7005771780057710d0057640600 *53280800000073420000005969656c64207379732e70617468206469726563746f726965732074 *686174206d6967687420636f6e7461696e20226f6c642d7374796c6522207061636b6167657369 *0100000073040000002e7074687310000000656173792d696e7374616c6c2e707468730e000000 *7365747570746f6f6c732e7074687406000000696d706f72744e28020000007310000000656173 *792d696e7374616c6c2e707468730e0000007365747570746f6f6c732e707468280d0000005267 *00000052170000005218000000525800000052e800000052d10000005298000000529100000052 *5d010000740b0000007969656c645f6c696e657352990000005203010000740600000072737472 *697028080000007406000000696e7075747374040000007365656e52ae00000052bd00000052a9 *000000522700000074050000006c696e657374040000006c696e6528000000002800000000734c *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e70 *79524a010000ae040000733a00000000030602070006010c010d0107020a01130107020f010b02 *07000601100207010d0207031b0112010a0307000601100112010d010a01130107016301000000 *0b0000000e00000043000000738d0100007400007c00006401008302007d01007a6c0174010069 *02007c01008301007d02007c02006407006a08006f05000164070053017c0200640200197c0200 *64030019187c020064040019187d03007c03006405006a00006f05000164070053017c01006904 *007c030064050018830100016406006407006b05007d04006406006407006b06007d0500640600 *6407006b07007d06007c04006908006408007c01006909006405008301008302005c03007d0700 *7d08007d09007c07006412006a07006f05000164070053017c01006904007c03006405007c0800 *1718830100017c0600690a00680200640b00640c0036640b00640d00368301007d0a007939007c *0a00690b007c05006906007c01006909007c0800830100690c00740d00640e00830100640f0083 *0200640e001983010083010001576e1700047c0600690e006a0a006f0800010101016407005301 *587c0a00690f006410008301000c701100017c0a00690f006411008301000c6f05000164070053 *017c0a0053576407007c01006910008300000158640700532813000000736e0000004578747261 *637420636f6e66696775726174696f6e20646174612066726f6d20612062646973745f77696e69 *6e7374202e6578650a0a2020202052657475726e73206120436f6e6669675061727365722e5261 *77436f6e6669675061727365722c206f72204e6f6e650a20202020527201000069090000006905 *0000006906000000690c00000069ffffffff4e73040000003c696969697a563412697b56341252 *55010000521a010000521d01000069000000006901000000520801000074050000005365747570 *2802000000697a563412697b5634122811000000529800000074070000007a697066696c65740b *0000005f456e6452656344617461523200000074040000007365656b7406000000737472756374 *7408000000537472696e67494f740c000000436f6e6669675061727365727406000000756e7061 *636b5275010000740f000000526177436f6e666967506172736572740600000072656164667052 *6b000000740300000063687274050000004572726f72740b0000006861735f73656374696f6e52 *99000000280b00000052ec00000052270000007406000000656e64726563740900000070726570 *656e64656452aa01000052ab01000052ac010000740300000074616774060000006366676c656e *7405000000626d6c656e522801000028000000002800000000734c000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574757074 *6f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e70795213000000d7040000732e *00000000050f0103010f010d0105021a010d0105011102240124010d01050215011d0103013901 *1101060122010501080363010000000a0000000a0000004300000073db01000064170064180064 *1900641a006704007d01007400006901007c00008301007d02007a6101785a017c020069020083 *0000445d4c017d03007c03006903007d04007c04006904006407008301007d05007405007c0500 *8301006408006a02006f5100017c050064090019640a006a02006f4000017c0500640b00196906 *00640c008301006f2800017c0100690700640d006407006908007c050064090020830100640e00 *660200830200015071b300016e0100017405007c05008301006409006a0300701100017c040069 *0600640f008301000c6f0700017131006e0100017c04006906006410008301006f070001713100 *6e0100017c0500640d0019690900830000641b006a06006f710001786e00740a007c0200690b00 *7c0400830100830100445d53007d06007c0600690c00830000690d006413006407008302007d06 *007c0600690e00641400830100702500017c0100690f006415007c0500640d00197c0600660200 *166402006602008301000171220101712201577131000171310057576416007c02006910008300 *000158670000047d07007c0100445d1f005c02007d08007d09007c07007c08006911008300007c *090066020012719b017e07007d01007c0100691200830000017c0100691300830000017c010053 *281c0000007334000000476574206578652d3e6567672070617468207472616e736c6174696f6e *7320666f72206120676976656e202e6578652066696c657308000000505552454c49422f525501 *00007318000000504c41544c49422f707977696e33325f73797374656d33327308000000504c41 *544c49422f7308000000534352495054532f73110000004547472d494e464f2f73637269707473 *2f522d010000690300000069020000007308000000504b472d494e464f69010000007309000000 *2e6567672d696e666f690000000073090000004547472d494e464f2f73040000002e707468730a *0000002d6e73706b672e7074687407000000505552454c49427407000000504c41544c49427301 *0000005c529f010000730600000025732f25732f4e28020000007308000000505552454c49422f *525501000028020000007318000000504c41544c49422f707977696e33325f73797374656d3332 *525501000028020000007308000000504c41544c49422f52550100002802000000730800000053 *4352495054532f73110000004547472d494e464f2f736372697074732f280200000052b8010000 *52b9010000281400000052a701000074070000005a697046696c657408000000696e666f6c6973 *74525c000000526b000000528300000052d1000000527200000052910000007405000000757070 *657252a00100005275010000526d00000052250100005203010000526f000000529900000052aa *0000007404000000736f7274740700000072657665727365280a000000740c0000006578655f66 *696c656e616d655237010000521e000000525600000052a9000000523301000074030000007074 *68527d000000522400000074010000007928000000002800000000734c000000433a5c7461686f *652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c73657475 *70746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e7079521500000000050000 *733800000000040601030109020f0103010d00060109010f012401140123010901240107011001 *07011701160006011801100135020b0133010a000a016301000000010000000500000043000000 *733e0000007911007400006901007c000083010053576e2600047402006a0a006f1a0001010101 *7403006401007c0000660100168301008201006e020001586400005328020000004e7331000000 *4e6f7420612055524c2c206578697374696e672066696c652c206f7220726571756972656d656e *7420737065633a202572280400000052c600000074050000007061727365527b00000052080000 *002801000000528900000028000000002800000000734c000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c73 *5c636f6d6d616e645c656173795f696e7374616c6c2e707952c900000021050000730a00000000 *01030111010e0103016300000000000000000200000042000000734d0000006500005a01006400 *005a02006503005a04006407006401008401005a05006402008400005a06006403008400005a07 *006404008400005a08006405008400005a09006406008400005a0a005253280800000073290000 *0041202e7074682066696c65207769746820446973747269627574696f6e20706174687320696e *206974630300000004000000060000004300000073900000007c01007c00005f00007401007402 *007c02008302007c00005f03007402007404006905006906007c00006900008301008301007c00 *005f07007c000069080083000001740900690a007c000067000064000064000083040001783000 *740c007c0000690d00830100445d1f007d03007401007c0000690e00740f007c03007410008302 *0083020001716900576400005328010000004e2811000000525c00000052660000005267000000 *529b0100005217000000521800000052ae00000074070000006261736564697274050000005f6c *6f6164527400000074080000005f5f696e69745f5f523200000052a0010000526601000052d900 *0000741200000066696e645f646973747269627574696f6e73529d000000280400000052530000 *00525c000000529b010000521800000028000000002800000000734c000000433a5c7461686f65 *2d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570 *746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e707952c50100002e05000073 *100000000001090012011e010a0016011000060163010000000500000005000000430000007384 *0100006700007c00005f00007401007d01007402006903007c00006904008301007d0200740500 *6906006907007c00006908008301006ff6000178f3007409007c0000690800640100830200445d *db007d03007c0300690a006402008301006f0d0001740b007d0100714a006e0100017c0300690c *008300007d04007c0000690000690d007c0400830100017c0400690e008300000c701600017c04 *00690e00830000690a006403008301006f070001714a006e010001740f00740500690600691000 *7c00006911007c0400830200830100047d04007c00006900006404003c7405006906006912007c *04008301000c700d00017c04007c02006a06006f1d00017c000069000069130083000001740b00 *7c00005f1400714a006e0100016405007c02007c04003c714a00576e0100017c00006900006f15 *00017c01000c6f0d0001740b007c00005f14006e0100017831007c00006900006f2600017c0000 *69000064040019690e008300000c6f1100017c000069000069130083000001714f010157640000 *5328060000004e74020000007274529f01000074010000002369ffffffff690100000028150000 *005266010000524c00000052470100005248010000529b01000052170000005218000000520001 *0000525c00000052980000005203010000529d00000052a1010000526f000000526d0000005267 *000000529100000052c301000052190000007403000000706f7074050000006469727479280500 *00005253000000740a0000007361775f696d706f727452a301000052a501000052180000002800 *0000002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c65617379 *5f696e7374616c6c2e707952c40100003505000073320000000001090106011201160113000601 *1001060107010c011001240107030301260221010d0109010701120212010d0103001f01630100 *000003000000040000004300000073f20000007c00006900007005000164010053016402006901 *007402007c00006903007c00006904008302008301007d01007c01006f74000174050069060064 *03007c0000690700830200016404007c0100167d0100740800690900690a007c00006907008301 *006f140001740800690b007c0000690700830100016e010001740c007c00006907006405008302 *007d02007c0200690d007c0100830100017c0200690e00830000016e3e0001740800690900690f *007c00006907008301006f2700017405006906006406007c000069070083020001740800690b00 *7c0000690700830100016e0100017410007c00005f000064010053280700000073240000005772 *697465206368616e676564202e7074682066696c65206261636b20746f206469736b4e73010000 *000a7309000000536176696e6720257373f1000000696d706f7274207379733b207379732e5f5f *706c656e203d206c656e287379732e70617468290a25730a696d706f7274207379733b206e6577 *3d7379732e706174685b7379732e5f5f706c656e3a5d3b2064656c207379732e706174685b7379 *732e5f5f706c656e3a5d3b20703d67657461747472287379732c275f5f656767696e7365727427 *2c6c656e286f732e656e7669726f6e2e6765742827505954484f4e50415448272c2727292e7370 *6c6974286f732e706174687365702929293b207379732e706174685b703a705d3d6e65773b2073 *79732e5f5f656767696e73657274203d20702b6c656e286e6577290a5273010000731100000044 *656c6574696e6720656d707479202573281100000052ca01000052910000005266000000526801 *0000526601000052030000005269010000525c000000521700000052180000005255000000525a *000000529800000052a700000052990000005219000000524c0000002803000000525300000074 *0400000064617461522700000028000000002800000000734c000000433a5c7461686f652d6c61 *66735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f *6c735c636f6d6d616e645c656173795f696e7374616c6c2e707952670100005205000073200000 *0000020a0105021e0107011302030607021601140112010d000e02160113011402630200000002 *0000000300000043000000735a0000007c01006900007c00006901006a07006f3300017c010069 *00007c00006902006a07006f2000017c00006901006903007c0100690000830100017404007c00 *005f05006e0100017406006907007c00007c010083020001640100532802000000732200000041 *64642060646973746020746f2074686520646973747269627574696f6e206d61704e2808000000 *52ce0000005266010000529b010000526f000000529d00000052ca010000527400000052d90000 *002802000000525300000052b700000028000000002800000000734c000000433a5c7461686f65 *2d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570 *746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e707952d90000006e05000073 *080000000002260113000d016302000000020000000300000043000000734b0000007834007c01 *006900007c00006901006a06006f2000017c00006901006902007c010069000083010001740300 *7c00005f040071030001577405006902007c00007c010083020001640100532802000000732700 *000052656d6f7665206064697374602066726f6d2074686520646973747269627574696f6e206d *61704e280600000052ce00000052660100005265010000529d00000052ca010000527400000028 *02000000525300000052b700000028000000002800000000734c000000433a5c7461686f652d6c *6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f *6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e7079526501000074050000730a00 *000000020300130113000e01630200000007000000030000004300000073d60000007400006901 *006902007403007c01008301008301005c02007d02007d03007404007c00006905008301007d04 *007c03006701007d05007400006906006401006a02006f07000164010070070001740000690700 *7d06007879007404007c02008301007c04006a05006f6100017c02007c00006905006a02006f28 *00017c0500690800740000690900830100017c0500690a00830000017c0600690b007c05008301 *0053017400006901006902007c02008301005c02007d02007d03007c05006908007c0300830100 *0171590001577c0100536400005328020000004e522d010000280c000000521700000052180000 *00526b0000005267000000528300000052c30100007406000000616c747365705299010000526f *000000740600000063757264697252be0100005291000000280700000052530000005218000000 *74050000006e7061746874040000006c6173747407000000626173656c656e5233010000529901 *000028000000002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f *6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c *656173795f696e7374616c6c2e707952680100007b050000731a00000000011e010f0109012001 *03001301100110010a010e01180112022800000000280b00000052860100005287010000528801 *0000524c00000052ca01000052c501000052c4010000526701000052d900000052650100005268 *010000280000000028000000002800000000734c000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f *6d6d616e645c656173795f696e7374616c6c2e7079521200000029050000731000000006010602 *06020c07091d091c090609076303000000080000000500000043000000731e0100006401006402 *006b00006c01007d0300017c000064030017690200830000640400197d04007c03006903007c04 *008301007d05006405007d06007c05006f2f00017c050069040064060083010070040001640500 *7d06007c06006f0e00016407007c0600177d0600716f00016e0100017c02006f0a00016408007d *01006e0d00017405007c01008301007d0100640900740600830000167d07007407007c0700640a *00640b00830300690800640a008301007c07006a03006f4300017c06006f3200017c0600690900 *830000690a00640c008301006f180001640d007c06006909008300006406001f177d060071fa00 *0171fe0001640d007d06006e010001740b007c01007c06008302007d0100640900740600830000 *167d07007c070053280e000000733b0000004372656174652061202321206c696e652c20676574 *74696e67206f7074696f6e732028696620616e79292066726f6d207363726970745f7465787469 *ffffffff2801000000740d00000066697273745f6c696e655f726573010000000a690000000052 *550100006901000000525a010000730a000000707974686f6e2e657865731c0000002321252865 *786563757461626c65297325286f7074696f6e7329730a74050000006173636969740600000069 *676e6f7265521f0100007303000000202d78280c000000741f000000646973747574696c732e63 *6f6d6d616e642e6275696c645f7363726970747352d2010000740a00000073706c69746c696e65 *7374050000006d61746368740500000067726f7570740c0000006e745f71756f74655f61726752 *f60000007407000000756e69636f64657406000000656e636f6465526d00000052030100007415 *0000006669785f6a7974686f6e5f65786563757461626c65280800000052f700000052a8000000 *740700000077696e696e737452d20100007405000000666972737452d701000074070000006f70 *74696f6e73740300000068647228000000002800000000734c000000433a5c7461686f652d6c61 *66735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f *6c735c636f6d6d616e645c656173795f696e7374616c6c2e707952f50000008a05000073280000 *000002100114010f010601070116010700120107010a020c010d012202070116011c030a010f01 *0d016303000000030000000600000043000000737c0000007c00007400006901006a08006f2b00 *017400006902006401006a02006f1b00017403007c0100740400690500830200017c00007c0100 *83010053017406006907008300007d02007c0200640200197c020064030019640200197c020064 *030019640300196404007c00007c010066020016176602008202006400005328050000004e52a4 *000000690000000069010000007306000000202573202573280800000052170000005265010000 *52a900000052fb000000526c0100007408000000535f495752495445526800000052a200000028 *03000000740400000066756e637403000000617267740300000065786328000000002800000000 *734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576 *6465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c *2e7079740a0000006175746f5f63686d6f64a4050000730a0000000001200110010b010c016301 *00000002000000040000004300000073310000006401006402006b00006c01007d010001740200 *7c00007c0100830200017402007c000074030069040083020001640300532804000000733f0000 *00456e7375726520746861742074686520696d706f727465722063616368657320646f6e742068 *617665207374616c6520696e666f20666f722060706174686069ffffffff280100000074140000 *005f7a69705f6469726563746f72795f63616368654e2805000000520b01000052e60100007408 *0000005f756e636163686552680000007413000000706174685f696d706f727465725f63616368 *652802000000521800000074030000007a646328000000002800000000734c000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365 *747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e70795214010000ab05 *00007306000000000210010d01630200000003000000030000004300000073580000007c00007c *01006a06006f0b00017c01007c00003d6e3d00017400007c00008301007d0000782d007c010044 *5d25007d02007400007c02008301007c00006a02006f0c00017c01007c02003d6400005301712b *00576400005328010000004e280100000052670000002803000000521800000074050000006361 *63686574010000007028000000002800000000734c000000433a5c7461686f652d6c6166735c73 *65747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c63 *6f6d6d616e645c656173795f696e7374616c6c2e707952e7010000b1050000731000000000010d *010b020c01070006011301070173080000003c737472696e673e63020000000200000007000000 *4300000073390000007914007400007c00007c010064010083030001576e1a0004740100740200 *6602006a0a006f0800010101017403005301587404005364020053280300000073250000004973 *207468697320737472696e6720612076616c696420507974686f6e207363726970743f74040000 *00657865634e28050000007407000000636f6d70696c65740b00000053796e7461784572726f72 *7409000000547970654572726f72524c000000529d000000280200000074040000007465787452 *5c00000028000000002800000000734c000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e *645c656173795f696e7374616c6c2e7079740900000069735f707974686f6ebb050000730a0000 *000002030114011401060263010000000300000006000000430000007350000000792900740000 *7c00008301007d01007c01006901006401008301007d02007c010069020083000001576e1a0004 *7403007404006602006a0a006f0800010101017c00005301587c02006402006a02005328030000 *00734300000044657465726d696e65206966207468652073706563696669656420657865637574 *61626c652069732061202e73682028636f6e7461696e732061202321206c696e65296902000000 *7302000000232128050000005298000000527501000052990000005296000000529a0000002803 *00000052a80000007402000000667074050000006d6167696328000000002800000000734c0000 *00433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e *6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e707974 *0500000069735f7368c4050000730e000000000203010c010f010e011400060163010000000500 *0000050000004300000073200100006700007d01007400007d02006401007d03006402007c0000 *6a0600700a00016403007c00006a06007d02007c02006f1100017c010069010064040083010001 *6e0100017888007c0000445d80007d04007c04006405006a02006f0e00017c0300640600377d03 *00714a00017c04006404006a02006f2300017c01006901006405007c0300640700141464080017 *830100016401007d0300714a00017c03006f1b00017c01006901006405007c0300148301000164 *01007d03006e0100017c01006901007c040083010001714a00577c03006f1500017c0100690100 *6405007c030014830100016e0100017c02006f2200017c01006901006405007c03001483010001 *7c0100690100640400830100016e0100016409006902007c010083010053280a00000073400000 *0051756f7465206120636f6d6d616e64206c696e6520617267756d656e74206163636f7264696e *6720746f2057696e646f77732070617273696e672072756c65736900000000525a010000730100 *00000974010000002273010000005c6901000000690200000073020000005c2252550100002803 *000000524c000000526f0000005291000000280500000052e30100007406000000726573756c74 *74090000006e65656471756f746574020000006e6274010000006328000000002800000000734c *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e70 *7952d9010000cd050000732e0000000003060106010602190107011102070006010d010e010d02 *19010a02070111010a011102070115020701110111026302000000020000000300000043000000 *73690000007c0100690000640100830100701000017c01006900006402008301006f0500017401 *0053017402007c00007c01008302006f05000174010053017c00006903006403008301006f1b00 *016404007c0000690400830000640500196905008300006a06005301740600532806000000734d *0000004973207468697320746578742c20617320612077686f6c652c206120507974686f6e2073 *63726970743f20286173206f70706f73656420746f207368656c6c2f6261742f6574632e0a2020 *202073030000002e707973040000002e7079777302000000232152590100006900000000280700 *000052d1000000529d00000052f1010000520301000052d601000052aa000000524c0000002802 *00000052f7000000525c00000028000000002800000000734c000000433a5c7461686f652d6c61 *66735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f *6c735c636f6d6d616e645c656173795f696e7374616c6c2e707952f4000000f6050000730e0000 *000003200105011001050110021b02280100000052fb0000006300000000010000000100000047 *00000073040000006400005328010000004e28000000002801000000523b000000280000000028 *00000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e73 *74616c6c2e707974060000005f63686d6f64070600007300000000630200000003000000060000 *004300000073530000007400006901006401007c00007c0100830300017911007402007c00007c *010083020001576e2800047403006904006a0a006f190001017d0200017400006901006402007c *0200830200016e020001586400005328030000004e73190000006368616e67696e67206d6f6465 *206f6620257320746f20256f731000000063686d6f64206661696c65643a202573280500000052 *03000000526901000052fa010000521700000074050000006572726f7228030000005218000000 *52fc000000522e00000028000000002800000000734c000000433a5c7461686f652d6c6166735c *7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c *636f6d6d616e645c656173795f696e7374616c6c2e707952fb00000009060000730a0000000001 *130103011101130163020000000200000002000000430000007348000000740000690100690200 *6401008301006f3100017403007c00008301006f2400017c01006f110001740400690500640200 *83010001714400016403007c000016536e0100017c00005328040000004e74040000006a617661 *739c0000005741524e494e473a20556e61626c6520746f2061646170742073686562616e67206c *696e6520666f72204a7974686f6e2c2074686520666f6c6c6f77696e6720736372697074206973 *204e4f542065786563757461626c650a20202020202020202073656520687474703a2f2f627567 *732e6a7974686f6e2e6f72672f69737375653131313220666f72206d6f726520696e666f726d61 *74696f6e2e730f0000002f7573722f62696e2f656e7620257328060000005268000000521b0100 *00520301000052f40100005203000000526e000000280200000052a800000052df010000280000 *00002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f *696e7374616c6c2e707952dc01000010060000730a00000000012003070211050c016303000000 *100000000b0000006300000073a70100007400007c00006901008300008301007d030074020064 *01007c01007c02008303007d0400787c01641a00445d74017d0500786b017c00006903007c0500 *830100690400830000445d54015c02007d06007d0700640400740500830000167d080074060069 *07006405006a0200700700017c02006f1501017c05006403006a02006f2e0001641b005c02007d *09007d0a006408006701007d0b00740800690900640900640a007c04008303007d0c006e310001 *641c005c02007d09007d0a00640d00640e00640f006703007d0b00740800690900641000641100 *7c04008303007d0c00740a00690b00690c007c0c00641200641300218301007010000174060069 *07006405006a03006f0a00017c0c007d0d006e0700017c04007d0d007c06007c0900177c0d007c *080017641400670000047d0e007c0b00445d11007d0f007c0e007c06007c0f0017127138017e0e *0066040056017c060064150017740d006416007c0a0083020064170066030056017c0600641800 *17740e007c0600660100166414006603005601714700017c06007c04007c080017660200560171 *470057712b005764190053281d00000073450000005969656c642077726974655f736372697074 *282920617267756d656e74207475706c657320666f72206120646973747269627574696f6e2773 *20656e747279706f696e74735255010000740f000000636f6e736f6c655f73637269707473740b *0000006775695f7363726970747373c90000002320454153592d494e5354414c4c2d454e545259 *2d5343524950543a2025287370656329722c252867726f757029722c25286e616d6529720a5f5f *72657175697265735f5f203d2025287370656329720a696d706f7274207379730a66726f6d2070 *6b675f7265736f757263657320696d706f7274206c6f61645f656e7472795f706f696e740a0a73 *79732e65786974280a2020206c6f61645f656e7472795f706f696e742825287370656329722c20 *252867726f757029722c2025286e616d6529722928290a290a521c010000730b0000002d736372 *6970742e70797773070000006775692e65786573040000002e707977730e000000283f69297079 *74686f6e2e657865730b000000707974686f6e772e657865730a0000002d7363726970742e7079 *7307000000636c692e65786573030000002e707973040000002e70796373040000002e70796f73 *0f000000283f6929707974686f6e772e657865730a000000707974686f6e2e6578656902000000 *69ffffffff52fa00000073040000002e65786552630100005229000000730d0000002e6578652e *6d616e69666573744e2802000000730f000000636f6e736f6c655f7363726970747352fe010000 *2802000000730b0000002d7363726970742e70797773070000006775692e657865280200000073 *0a0000002d7363726970742e70797307000000636c692e657865280f00000052f300000052dd00 *000052f5000000740d0000006765745f656e7472795f6d6170522401000052f600000052680000 *00521b010000740200000072657403000000737562521700000052180000005219000000527401 *000074120000005f6c61756e636865725f6d616e6966657374281000000052b700000052a80000 *0052dd0100005289000000740600000068656164657252d801000052a900000074020000006570 *52f7000000524f01000074080000006c61756e636865725231010000740a0000006e65775f6865 *6164657252e0010000527d000000522400000028000000002800000000734c000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365 *747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e707952f10000001f06 *000073300000000002120112010700060116000c0203080a0117020d010c01090119020c010f01 *15022a010a0206013802130108011d0473f50100000a3c3f786d6c2076657273696f6e3d22312e *302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0a *3c617373656d626c7920786d6c6e733d2275726e3a736368656d61732d6d6963726f736f66742d *636f6d3a61736d2e763122206d616e696665737456657273696f6e3d22312e30223e0a203c6173 *73656d626c794964656e746974792076657273696f6e3d22312e302e302e30220a2070726f6365 *73736f724172636869746563747572653d22583836220a206e616d653d2225732e657865220a20 *747970653d2277696e3332222f3e0a0a203c212d2d204964656e7469667920746865206170706c *69636174696f6e20736563757269747920726571756972656d656e74732e202d2d3e0a203c7472 *757374496e666f20786d6c6e733d2275726e3a736368656d61732d6d6963726f736f66742d636f *6d3a61736d2e7633223e0a203c73656375726974793e0a203c7265717565737465645072697669 *6c656765733e0a203c726571756573746564457865637574696f6e4c6576656c206c6576656c3d *226173496e766f6b6572222075694163636573733d2266616c7365222f3e0a203c2f7265717565 *7374656450726976696c656765733e0a203c2f73656375726974793e0a203c2f7472757374496e *666f3e0a3c2f617373656d626c793e6303000000080000000c0000004300000073860100007c01 *006f0d00016401008400007d02006e1b00017c02006404006a08006f0d00016402008400007d02 *006e0100016700007d03007913007401006902007c00008301007d0300576e3100047401006903 *006a0a006f220001017d0400017c02007401006902007c0000740400690500830000830300016e *0200015878c1007c0300445db9007d05007401006906006907007c00007c05008302007d060079 *16007401006908007c06008301006909007d0700576e1c00047401006903006a0a006f0d000101 *01016403007d07006e02000158740a00690b007c07008301006f140001740c007c06007c01007c *02008303000171820001791100740100690d007c06008301000157718200047401006903006a0a *006f220001017d0400017c0200740100690d007c06007404006905008300008303000171820001 *5871820057791100740100690e007c000083010001576e2f00047401006903006a0a006f200001 *0101017c0200740100690e007c0000740400690500830000830300016e02000158640400532805 *00000073a10000005265637572736976656c792064656c6574652061206469726563746f727920 *747265652e0a0a202020205468697320636f64652069732074616b656e2066726f6d2074686520 *507974686f6e20322e342076657273696f6e206f66202773687574696c272c2062656361757365 *0a2020202074686520322e332076657273696f6e20646f65736e2774207265616c6c7920776f72 *6b2072696768742e0a202020206300000000010000000100000057000000730400000064000053 *28010000004e28000000002801000000523b00000028000000002800000000734c000000433a5c *7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c *7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e70797407000000 *6f6e6572726f727806000073020000000001630000000001000000010000005700000073070000 *008200006400005328010000004e28000000002801000000523b00000028000000002800000000 *734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576 *6465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c *2e707952070200007b0600007302000000000169000000004e280f000000523200000052170000 *0052e800000052fb010000526800000052a20000005218000000529100000074050000006c7374 *6174740700000073745f6d6f6465526c0100007407000000535f49534449525259000000526501 *00007405000000726d64697228080000005218000000740d00000069676e6f72655f6572726f72 *735207020000524d010000740300000065727252a9000000740800000066756c6c6e616d6552fc *00000028000000002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f *6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e64 *5c656173795f696e7374616c6c2e70795259000000710600007334000000000607010d020d010d *0206010301130113011e010700060115010301160111010b011001140203011101130122010301 *110111016300000000020000000400000043000000734d0000006401006400006b00007d000074 *01006902006903007c0000690400640200198301007d01007c01007405006906006402003c7405 *006906006907007c010083010001740800830000016400005328030000004e69ffffffff690000 *0000280900000052630100005217000000521800000052ae00000074080000005f5f706174685f *5f5268000000740400000061726776526f00000052140000002802000000526301000074050000 *00617267763028000000002800000000734c000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d *616e645c656173795f696e7374616c6c2e70797409000000626f6f74737472617094060000730a *00000000020c0019010d0010006301000000020000000c0000000b00000073b000000064010064 *02006b00006c0100890200016401006403006b02006c0300890600016401006400006b04008901 *006404008905008705006601006405008600008900008700008701006602006406008600008907 *00640700880600660100870600870700660200640800860000830000598908008803006400006a *08006f1100017406006907006409001f8903006e01000188070087020087040087080087030066 *0400640a008600008301000164000053280b0000004e69ffffffff280100000074050000007365 *7475702801000000520d010000734c00000075736167653a2025287363726970742973205b6f70 *74696f6e735d20726571756972656d656e745f6f725f75726c202e2e2e0a2020206f723a202528 *7363726970742973202d2d68656c700a6301000000020000000200000013000000731d00000074 *00006901006902007c00008301007d0100880000740300830000165328010000004e2804000000 *5217000000521800000052af000000740400000076617273280200000052b80000007406000000 *7363726970742801000000740500000055534147452800000000734c000000433a5c7461686f65 *2d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570 *746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e7079740900000067656e5f75 *73616765a406000073040000000001120163010000000200000006000000130000007337000000 *8801006900006901007d01007a17008800008801006900005f01007c000083000053576400007c *01008801006900005f0100586400005328010000004e28020000007404000000636f7265521702 *000028020000005227000000740d0000006f6c645f67656e5f7573616765280200000052170200 *0052850000002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c65 *6173795f696e7374616c6c2e7079740d000000776974685f65695f7573616765a8060000730a00 *000000010c0103010c010b02741f000000446973747269627574696f6e576974686f757448656c *70436f6d6d616e6473630000000000000000020000000200000073200000006500005a01006400 *005a02008700008701006602006401008600005a03005253280200000052550100006301000000 *03000000050000001f000000732000000088040087030087010087020087000066040064010086 *0000830100016400005328020000004e6300000000000000000400000013000000731300000088 *00006900008803008801008802008e01005328000000002801000000740a0000005f73686f775f *68656c7028000000002804000000520d010000523b00000074020000006b775253000000280000 *0000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e737461 *6c6c2e707974080000003c6c616d6264613eb30600007300000000280000000028030000005253 *000000523b000000521d0200002802000000520d010000521a0200002803000000525300000052 *3b000000521d020000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d *302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c656173 *795f696e7374616c6c2e7079521c020000b2060000730200000000012804000000528601000052 *87010000740c000000636f6d6d6f6e5f7573616765521c02000028000000002802000000520d01 *0000521a0200002800000000734c000000433a5c7461686f652d6c6166735c7365747570746f6f *6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c *656173795f696e7374616c6c2e7079521b020000b0060000730400000006010601690100000063 *000000000000000008000000130000007337000000880000640000640100640200640300670300 *8803001764040074000069010064050019700400016402006406008802008801008d0003532807 *000000740b0000007363726970745f6172677373020000002d71521100000073020000002d7652 *b80000006900000000740900000064697374636c61737328020000005268000000521002000028 *0000000028040000005213020000521d020000521b02000052100200002800000000734c000000 *433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e65 *67675c7365747570746f6f6c735c636f6d6d616e645c656173795f696e7374616c6c2e7079521e *020000b806000073080000000001060113011401280800000052630100005213020000740f0000 *007365747570746f6f6c732e64697374520d010000740e000000646973747574696c732e636f72 *6552320000005268000000521002000028020000005210020000521d0200002800000000280900 *00005217020000528500000052130200005210020000521d0200005216020000520d010000521a *020000521b020000734c000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c65617379 *5f696e7374616c6c2e707952140000009a06000073140000000001100110010c0506020f041208 *1f050d01110228440000005288010000526800000074070000006f732e70617468521700000052 *0b01000052ea00000052c300000052a70100005200020000526c010000528e0000005200000000 *5263010000520100000074120000007365747570746f6f6c732e73616e64626f78520200000052 *85000000520300000052040000007413000000646973747574696c732e737973636f6e66696752 *050000007410000000646973747574696c732e6572726f72735206000000520700000052080000 *0074170000007365747570746f6f6c732e617263686976655f7574696c52090000007418000000 *7365747570746f6f6c732e7061636b6167655f696e646578520a000000520b000000520c000000 *74120000007365747570746f6f6c732e636f6d6d616e64520d000000520e000000740d00000070 *6b675f7265736f75726365735218000000521a00000052a8000000740e0000007379735f657865 *63757461626c6574070000005f5f616c6c5f5f521000000052110000005269000000524a010000 *5213000000521500000052c900000052740000005212000000524c00000052f500000052e50100 *00521401000052e701000052f101000052f401000052d901000052f400000052fb00000052fa01 *0000524b01000052dc01000052f100000052020200005259000000521202000052320000005214 *000000280000000028000000002800000000734c000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f *6d6d616e645c656173795f696e7374616c6c2e707974080000003c6d6f64756c653e0b00000073 *5c00000006016c01100110011001160110011c0210011601100116010a0115030c010c03090a16 *ff00ff00ff00ff005f0929092909290921090816610f1a09070906090a0c0909090929090d0301 *14010e020e020907090f0f3906190f230906 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/egg_info.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/egg_info.py 1 +"""setuptools.command.egg_info + +Create a distribution's .egg-info directory and contents""" + +# This module should be kept compatible with Python 2.3 +import os, re +from setuptools import Command +from distutils.errors import * +from distutils import log +from setuptools.command.sdist import sdist +from distutils.util import convert_path +from distutils.filelist import FileList +from pkg_resources import parse_requirements, safe_name, parse_version, \ + safe_version, yield_lines, EntryPoint, iter_entry_points, to_filename +from sdist import walk_revctrl + +class egg_info(Command): + description = "create a distribution's .egg-info directory" + + user_options = [ + ('egg-base=', 'e', "directory containing .egg-info directories" + " (default: top of the source tree)"), + ('tag-svn-revision', 'r', + "Add subversion revision ID to version number"), + ('tag-date', 'd', "Add date stamp (e.g. 20050528) to version number"), + ('tag-build=', 'b', "Specify explicit tag to add to version number"), + ('no-svn-revision', 'R', + "Don't add subversion revision ID [default]"), + ('no-date', 'D', "Don't include date stamp [default]"), + ] + + boolean_options = ['tag-date', 'tag-svn-revision'] + negative_opt = {'no-svn-revision': 'tag-svn-revision', + 'no-date': 'tag-date'} + + + + + + + + def initialize_options(self): + self.egg_name = None + self.egg_version = None + self.egg_base = None + self.egg_info = None + self.tag_build = None + self.tag_svn_revision = 0 + self.tag_date = 0 + self.broken_egg_info = False + self.vtags = None + + def save_version_info(self, filename): + from setopt import edit_config + edit_config( + filename, + {'egg_info': + {'tag_svn_revision':0, 'tag_date': 0, 'tag_build': self.tags()} + } + ) + + + + + + + + + + + + + + + + + + + + + + + def finalize_options (self): + self.egg_name = safe_name(self.distribution.get_name()) + self.vtags = self.tags() + self.egg_version = self.tagged_version() + + try: + list( + parse_requirements('%s==%s' % (self.egg_name,self.egg_version)) + ) + except ValueError: + raise DistutilsOptionError( + "Invalid distribution name or version syntax: %s-%s" % + (self.egg_name,self.egg_version) + ) + + if self.egg_base is None: + dirs = self.distribution.package_dir + self.egg_base = (dirs or {}).get('',os.curdir) + + self.ensure_dirname('egg_base') + self.egg_info = to_filename(self.egg_name)+'.egg-info' + if self.egg_base != os.curdir: + self.egg_info = os.path.join(self.egg_base, self.egg_info) + if '-' in self.egg_name: self.check_broken_egg_info() + + # Set package version for the benefit of dumber commands + # (e.g. sdist, bdist_wininst, etc.) + # + self.distribution.metadata.version = self.egg_version + + # If we bootstrapped around the lack of a PKG-INFO, as might be the + # case in a fresh checkout, make sure that any special tags get added + # to the version info + # + pd = self.distribution._patched_dist + if pd is not None and pd.key==self.egg_name.lower(): + pd._version = self.egg_version + pd._parsed_version = parse_version(self.egg_version) + self.distribution._patched_dist = None + + + def write_or_delete_file(self, what, filename, data, force=False): + """Write `data` to `filename` or delete if empty + + If `data` is non-empty, this routine is the same as ``write_file()``. + If `data` is empty but not ``None``, this is the same as calling + ``delete_file(filename)`. If `data` is ``None``, then this is a no-op + unless `filename` exists, in which case a warning is issued about the + orphaned file (if `force` is false), or deleted (if `force` is true). + """ + if data: + self.write_file(what, filename, data) + elif os.path.exists(filename): + if data is None and not force: + log.warn( + "%s not set in setup(), but %s exists", what, filename + ) + return + else: + self.delete_file(filename) + + def write_file(self, what, filename, data): + """Write `data` to `filename` (if not a dry run) after announcing it + + `what` is used in a log message to identify what is being written + to the file. + """ + log.info("writing %s to %s", what, filename) + if not self.dry_run: + f = open(filename, 'wb') + f.write(data) + f.close() + + def delete_file(self, filename): + """Delete `filename` (if not a dry run) after announcing it""" + log.info("deleting %s", filename) + if not self.dry_run: + os.unlink(filename) + + def tagged_version(self): + return safe_version(self.distribution.get_version() + self.vtags) + + def run(self): + self.mkpath(self.egg_info) + installer = self.distribution.fetch_build_egg + for ep in iter_entry_points('egg_info.writers'): + writer = ep.load(installer=installer) + writer(self, ep.name, os.path.join(self.egg_info,ep.name)) + + # Get rid of native_libs.txt if it was put there by older bdist_egg + nl = os.path.join(self.egg_info, "native_libs.txt") + if os.path.exists(nl): + self.delete_file(nl) + + self.find_sources() + + def tags(self): + version = '' + if self.tag_build: + version+=self.tag_build + if self.tag_svn_revision and ( + os.path.exists('.svn') or os.path.exists('PKG-INFO') + ): version += '-r%s' % self.get_svn_revision() + if self.tag_date: + import time; version += time.strftime("-%Y%m%d") + return version + + + + + + + + + + + + + + + + + + def get_svn_revision(self): + revision = 0 + urlre = re.compile('url="([^"]+)"') + revre = re.compile('committed-rev="(\d+)"') + + for base,dirs,files in os.walk(os.curdir): + if '.svn' not in dirs: + dirs[:] = [] + continue # no sense walking uncontrolled subdirs + dirs.remove('.svn') + f = open(os.path.join(base,'.svn','entries')) + data = f.read() + f.close() + + if data.startswith('9') or data.startswith('8'): + data = map(str.splitlines,data.split('\n\x0c\n')) + del data[0][0] # get rid of the '8' or '9' + dirurl = data[0][3] + localrev = max([int(d[9]) for d in data if len(d)>9 and d[9]]+[0]) + elif data.startswith(' 0: + bytecode_files.append(py_file + "o") + + return bytecode_files + + def run(self): + self.build() + outfiles = self.install() + if outfiles is not None: + # always compile, in case we have any extension stubs to deal with + self.byte_compile(outfiles) + + def get_exclusions(self): + exclude = {} + nsp = self.distribution.namespace_packages + + if (nsp and self.get_finalized_command('install') + .single_version_externally_managed + ): + for pkg in nsp: + parts = pkg.split('.') + while parts: + pkgdir = os.path.join(self.install_dir, *parts) + for f in '__init__.py', '__init__.pyc', '__init__.pyo': + exclude[os.path.join(pkgdir,f)] = 1 + parts.pop() + return exclude + + def copy_tree( + self, infile, outfile, + preserve_mode=1, preserve_times=1, preserve_symlinks=0, level=1 + ): + assert preserve_mode and preserve_times and not preserve_symlinks + exclude = self.get_exclusions() + + if not exclude: + return _install_lib.copy_tree(self, infile, outfile) + + # Exclude namespace package __init__.py* files from the output + + from setuptools.archive_util import unpack_directory + from distutils import log + + outfiles = [] + + def pf(src, dst): + if dst in exclude: + log.warn("Skipping installation of %s (namespace package)",dst) + return False + + log.info("copying %s -> %s", src, os.path.dirname(dst)) + outfiles.append(dst) + return dst + + unpack_directory(infile, outfile, pf) + return outfiles + + def get_outputs(self): + outputs = _install_lib.get_outputs(self) + exclude = self.get_exclusions() + if exclude: + return [f for f in outputs if f not in exclude] + return outputs addfile ./setuptools-0.6c14devdev.egg/setuptools/command/install_lib.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/install_lib.pyc oldhex * newhex *d1f20d0a441ef84b630000000000000000050000004000000073360000006400006401006b0000 *6c01005a0200016400006402006b03005a0300640300650200660100640400840000830000595a *010064020053280500000069ffffffff2801000000740b000000696e7374616c6c5f6c69624e52 *00000000630000000000000000050000004200000073470000006500005a01006400005a020064 *01008400005a03006402008400005a04006403008400005a050064040064040064050064040064 *06008404005a06006407008400005a0700525328080000007339000000446f6e27742061646420 *636f6d70696c656420666c61677320746f2066696c656e616d6573206f66206e6f6e2d50797468 *6f6e2066696c6573630200000004000000040000004300000073760000006700007d0200786900 *7c0100445d61007d03007c030069000064010083010070070001710d006e0100017c0000690100 *6f1500017c02006902007c030064020017830100016e0100017c00006903006403006a04006f15 *00017c02006902007c03006404001783010001710d0001710d00577c02005328050000004e7303 *0000002e7079740100000063690000000074010000006f28040000007408000000656e64737769 *74687407000000636f6d70696c657406000000617070656e6474080000006f7074696d697a6528 *04000000740400000073656c66740c00000070795f66696c656e616d6573740e00000062797465 *636f64655f66696c6573740700000070795f66696c652800000000280000000073370000006275 *696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c *696e7374616c6c5f6c69622e707974130000005f62797465636f64655f66696c656e616d657307 *00000073140000000001060107000601100107010a011501100119026301000000020000000200 *00004300000073380000007c0000690000830000017c00006901008300007d01007c0100640000 *6a09006f1100017c00006903007c0100830100016e0100016400005328010000004e2804000000 *74050000006275696c647407000000696e7374616c6c74040000004e6f6e65740c000000627974 *655f636f6d70696c652802000000520700000074080000006f757466696c657328000000002800 *00000073370000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c *735c636f6d6d616e645c696e7374616c6c5f6c69622e7079740300000072756e13000000730800 *000000010a010c010d02630100000007000000070000004300000073af0000006800007d01007c *00006900006901007d02007c02006f9200017c00006902006401008301006903006f7f0001787c *007c0200445d70007d03007c03006904006402008301007d04007858007c04006f500001740500 *6906006907007c00006908007c04008c01007d0500782700640700445d1f007d06006406007c01 *007405006906006907007c05007c06008302003c717100577c040069090083000001714b000157 *713300576e0100017c01005328080000004e520d00000074010000002e730b0000005f5f696e69 *745f5f2e7079730c0000005f5f696e69745f5f2e707963730c0000005f5f696e69745f5f2e7079 *6f69010000002803000000730b0000005f5f696e69745f5f2e7079730c0000005f5f696e69745f *5f2e707963730c0000005f5f696e69745f5f2e70796f280a000000740c00000064697374726962 *7574696f6e74120000006e616d6573706163655f7061636b6167657374150000006765745f6669 *6e616c697a65645f636f6d6d616e64742100000073696e676c655f76657273696f6e5f65787465 *726e616c6c795f6d616e61676564740500000073706c697474020000006f737404000000706174 *6874040000006a6f696e740b000000696e7374616c6c5f6469727403000000706f702807000000 *520700000074070000006578636c75646574030000006e73707403000000706b67740500000070 *617274737406000000706b67646972740100000066280000000028000000007337000000627569 *6c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c69 *6e7374616c6c5f6c69622e7079740e0000006765745f6578636c7573696f6e731a000000731c00 *0000000106010c021a03070006010f01030007011801070006011d011701690100000069000000 *00630700000009000000070000000300000073930000007c03006f0f00017c04006f0800017c05 *000c70070001740000820100017c0000690100830000890100880100701400017402006903007c *00007c01007c020083030053016401006402006b04006c05007d0700016401006403006b06006c *0700890200016700008900008702008700008701006603006404008600007d08007c07007c0100 *7c02007c0800830300018800005328050000004e69ffffffff28010000007410000000756e7061 *636b5f6469726563746f7279280100000074030000006c6f676302000000020000000500000013 *00000073520000007c01008802006a06006f1500018800006900006401007c0100830200017401 *0053018800006902006402007c00007403006904006905007c0100830100830300018801006906 *007c0100830100017c01005328030000004e732f000000536b697070696e6720696e7374616c6c *6174696f6e206f6620257320286e616d657370616365207061636b616765297310000000636f70 *79696e67202573202d3e202573280700000074040000007761726e740500000046616c73657404 *000000696e666f5218000000521900000074070000006469726e616d6552050000002802000000 *74030000007372637403000000647374280300000052250000005210000000521d000000280000 *000073370000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c73 *5c636f6d6d616e645c696e7374616c6c5f6c69622e7079740200000070663b000000730c000000 *00010d01100105021f010d012808000000740e000000417373657274696f6e4572726f72522300 *0000740c0000005f696e7374616c6c5f6c69627409000000636f70795f74726565741700000073 *65747570746f6f6c732e617263686976655f7574696c5224000000740900000064697374757469 *6c735225000000280900000052070000007406000000696e66696c6574070000006f757466696c *65740d00000070726573657276655f6d6f6465740e00000070726573657276655f74696d657374 *1100000070726573657276655f73796d6c696e6b7374050000006c6576656c5224000000522c00 *0000280000000028030000005210000000521d000000522500000073370000006275696c645c62 *646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c696e737461 *6c6c5f6c69622e7079522f0000002a000000731400000000041d010c0207011404100110020602 *15091001630100000005000000040000004300000073570000007400006901007c00008301007d *01007c00006902008300007d02007c02006f310001670000047d03007c0100445d1e007d04007c *04007c02006a07006f0b00017c03007c040012712d0001712d007e030053017c01005328010000 *004e2803000000522e000000740b0000006765745f6f7574707574735223000000280500000052 *0700000074070000006f757470757473521d00000074040000005f5b315d522200000028000000 *00280000000073370000006275696c645c62646973742e77696e33325c6567675c736574757074 *6f6f6c735c636f6d6d616e645c696e7374616c6c5f6c69622e7079523800000047000000730a00 *000000010f010c0107013101280800000074080000005f5f6e616d655f5f740a0000005f5f6d6f *64756c655f5f74070000005f5f646f635f5f520b00000052110000005223000000522f00000052 *3800000028000000002800000000280000000073370000006275696c645c62646973742e77696e *33325c6567675c7365747570746f6f6c735c636f6d6d616e645c696e7374616c6c5f6c69622e70 *79520000000004000000730c00000006010602090c09070912151b2804000000741d0000006469 *73747574696c732e636f6d6d616e642e696e7374616c6c5f6c69625200000000522e0000005218 *00000028000000002800000000280000000073370000006275696c645c62646973742e77696e33 *325c6567675c7365747570746f6f6c735c636f6d6d616e645c696e7374616c6c5f6c69622e7079 *74080000003c6d6f64756c653e01000000730400000010010c02 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/install_scripts.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/install_scripts.py 1 +from distutils.command.install_scripts import install_scripts \ + as _install_scripts +from easy_install import get_script_args, sys_executable, chmod +from pkg_resources import Distribution, PathMetadata, ensure_directory +import os +from distutils import log + +class install_scripts(_install_scripts): + """Do normal script install, plus any egg_info wrapper scripts""" + + def initialize_options(self): + _install_scripts.initialize_options(self) + self.no_ep = False + + def run(self): + self.run_command("egg_info") + if self.distribution.scripts: + _install_scripts.run(self) # run first to set up self.outfiles + else: + self.outfiles = [] + if self.no_ep: + # don't install entry point scripts into .egg file! + return + + ei_cmd = self.get_finalized_command("egg_info") + dist = Distribution( + ei_cmd.egg_base, PathMetadata(ei_cmd.egg_base, ei_cmd.egg_info), + ei_cmd.egg_name, ei_cmd.egg_version, + ) + bs_cmd = self.get_finalized_command('build_scripts') + executable = getattr(bs_cmd,'executable',sys_executable) + is_wininst = getattr( + self.get_finalized_command("bdist_wininst"), '_is_running', False + ) + for args in get_script_args(dist, executable, is_wininst): + self.write_script(*args) + + + + + + def write_script(self, script_name, contents, mode="t", *ignored): + """Write an executable file to the scripts directory""" + log.info("Installing %s script to %s", script_name, self.install_dir) + target = os.path.join(self.install_dir, script_name) + self.outfiles.append(target) + + if not self.dry_run: + ensure_directory(target) + f = open(target,"w"+mode) + f.write(contents) + f.close() + chmod(target,0755) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + addfile ./setuptools-0.6c14devdev.egg/setuptools/command/install_scripts.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/install_scripts.pyc oldhex * newhex *d1f20d0a441ef84b6300000000000000000800000040000000737e0000006400006401006b0000 *6c01005a0200016400006402006b03006c04005a04006c05005a05006c06005a06000164000064 *03006b07006c08005a08006c09005a09006c0a005a0a00016400006404006b0b005a0b00640000 *6405006b0c006c0d005a0d0001640600650200660100640700840000830000595a010064040053 *280800000069ffffffff2801000000740f000000696e7374616c6c5f7363726970747328030000 *00740f0000006765745f7363726970745f61726773740e0000007379735f65786563757461626c *65740500000063686d6f642803000000740c000000446973747269627574696f6e740c00000050 *6174684d657461646174617410000000656e737572655f6469726563746f72794e280100000074 *030000006c6f6752000000006300000000000000000200000042000000732c0000006500005a01 *006400005a02006401008400005a03006402008400005a04006403006404008401005a05005253 *2805000000733b000000446f206e6f726d616c2073637269707420696e7374616c6c2c20706c75 *7320616e79206567675f696e666f20777261707065722073637269707473630100000001000000 *0200000043000000731a0000007400006901007c0000830100017402007c00005f030064000053 *28010000004e280400000074100000005f696e7374616c6c5f736372697074737412000000696e *697469616c697a655f6f7074696f6e73740500000046616c736574050000006e6f5f6570280100 *0000740400000073656c6628000000002800000000734f000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c73 *5c636f6d6d616e645c696e7374616c6c5f736372697074732e707952090000000b000000730400 *000000010d01630100000007000000050000004300000073e90000007c00006900006401008301 *00017c00006901006902006f1100017403006904007c0000830100016e0a00016700007c00005f *05007c00006906006f05000164000053017c00006907006401008301007d01007408007c010069 *0900740a007c01006909007c0100690b008302007c0100690c007c0100690d008304007d02007c *00006907006402008301007d0300740e007c0300640300740f008303007d0400740e007c000069 *07006404008301006405007410008303007d05007827007411007c02007c04007c050083030044 *5d13007d06007c00006912007c06008c00000171ce00576400005328060000004e740800000065 *67675f696e666f740d0000006275696c645f73637269707473740a00000065786563757461626c *65740d00000062646973745f77696e696e7374740b0000005f69735f72756e6e696e6728130000 *00740b00000072756e5f636f6d6d616e64740c000000646973747269627574696f6e7407000000 *736372697074735208000000740300000072756e74080000006f757466696c6573520b00000074 *150000006765745f66696e616c697a65645f636f6d6d616e64520400000074080000006567675f *626173655205000000520d00000074080000006567675f6e616d65740b0000006567675f766572 *73696f6e7407000000676574617474725202000000520a0000005201000000740c000000777269 *74655f7363726970742807000000520c000000740600000065695f636d64740400000064697374 *740600000062735f636d64520f000000740a00000069735f77696e696e73747404000000617267 *7328000000002800000000734f000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c69 *6e7374616c6c5f736372697074732e707952150000000f000000732200000000010d010d011102 *09010a0205020f010301180112020f011201030118021300060174010000007463040000000700 *0000040000004700000073910000007400006901006401007c01007c0000690200830300017403 *006904006905007c00006902007c01008302007d05007c00006906006907007c0500830100017c *0000690800704500017409007c050083010001740a007c05006402007c0300178302007d06007c *0600690b007c0200830100017c0600690c0083000001740d007c0500640300830200016e010001 *6404005328050000007331000000577269746520616e2065786563757461626c652066696c6520 *746f207468652073637269707473206469726563746f7279731a000000496e7374616c6c696e67 *2025732073637269707420746f20257374010000007769ed0100004e280e000000520700000074 *04000000696e666f740b000000696e7374616c6c5f64697274020000006f737404000000706174 *6874040000006a6f696e52160000007406000000617070656e6474070000006472795f72756e52 *0600000074040000006f70656e740500000077726974657405000000636c6f7365520300000028 *07000000520c000000740b0000007363726970745f6e616d657408000000636f6e74656e747374 *040000006d6f6465740700000069676e6f72656474060000007461726765747401000000662800 *0000002800000000734f000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c696e7374 *616c6c5f736372697074732e7079521c0000002a000000731200000000021601180110020a010a *0113010d010a01280600000074080000005f5f6e616d655f5f740a0000005f5f6d6f64756c655f *5f74070000005f5f646f635f5f52090000005215000000521c0000002800000000280000000028 *00000000734f000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c7365747570746f6f6c735c636f6d6d616e645c696e7374616c6c5f *736372697074732e70795200000000080000007308000000060106020904091b280e0000007421 *000000646973747574696c732e636f6d6d616e642e696e7374616c6c5f73637269707473520000 *00005208000000740c000000656173795f696e7374616c6c520100000052020000005203000000 *740d000000706b675f7265736f7572636573520400000052050000005206000000522600000074 *09000000646973747574696c735207000000280000000028000000002800000000734f00000043 *3a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567 *675c7365747570746f6f6c735c636f6d6d616e645c696e7374616c6c5f736372697074732e7079 *74080000003c6d6f64756c653e01000000730a00000010021c011c010c011002 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/register.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/register.py 1 +from distutils.command.register import register as _register + +class register(_register): + __doc__ = _register.__doc__ + + def run(self): + # Make sure that we are using valid current name/version info + self.run_command('egg_info') + _register.run(self) + addfile ./setuptools-0.6c14devdev.egg/setuptools/command/register.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/register.pyc oldhex * newhex *d1f20d0a451ef84b6300000000000000000400000040000000732a0000006400006401006b0000 *6c01005a020001640200650200660100640300840000830000595a010064040053280500000069 *ffffffff2801000000740800000072656769737465725200000000630000000000000000010000 *0042000000731a0000006500005a01006502006903005a03006400008400005a04005253280100 *00006301000000010000000200000043000000731e0000007c0000690000640100830100017401 *006902007c0000830100016400005328020000004e74080000006567675f696e666f2803000000 *740b00000072756e5f636f6d6d616e6474090000005f7265676973746572740300000072756e28 *01000000740400000073656c662800000000280000000073340000006275696c645c6264697374 *2e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c72656769737465722e *7079520400000006000000730400000000020d01280500000074080000005f5f6e616d655f5f74 *0a0000005f5f6d6f64756c655f5f520300000074070000005f5f646f635f5f5204000000280000 *00002800000000280000000073340000006275696c645c62646973742e77696e33325c6567675c *7365747570746f6f6c735c636f6d6d616e645c72656769737465722e7079520000000003000000 *7304000000060109024e2803000000741a000000646973747574696c732e636f6d6d616e642e72 *656769737465725200000000520300000028000000002800000000280000000073340000006275 *696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c *72656769737465722e707974080000003c6d6f64756c653e0100000073020000001002 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/rotate.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/rotate.py 1 +import distutils, os +from setuptools import Command +from distutils.util import convert_path +from distutils import log +from distutils.errors import * + +class rotate(Command): + """Delete older distributions""" + + description = "delete older distributions, keeping N newest files" + user_options = [ + ('match=', 'm', "patterns to match (required)"), + ('dist-dir=', 'd', "directory where the distributions are"), + ('keep=', 'k', "number of matching distributions to keep"), + ] + + boolean_options = [] + + def initialize_options(self): + self.match = None + self.dist_dir = None + self.keep = None + + def finalize_options(self): + if self.match is None: + raise DistutilsOptionError( + "Must specify one or more (comma-separated) match patterns " + "(e.g. '.zip' or '.egg')" + ) + if self.keep is None: + raise DistutilsOptionError("Must specify number of files to keep") + try: + self.keep = int(self.keep) + except ValueError: + raise DistutilsOptionError("--keep must be an integer") + if isinstance(self.match, basestring): + self.match = [ + convert_path(p.strip()) for p in self.match.split(',') + ] + self.set_undefined_options('bdist',('dist_dir', 'dist_dir')) + + def run(self): + self.run_command("egg_info") + from glob import glob + for pattern in self.match: + pattern = self.distribution.get_name()+'*'+pattern + files = glob(os.path.join(self.dist_dir,pattern)) + files = [(os.path.getmtime(f),f) for f in files] + files.sort() + files.reverse() + + log.info("%d file(s) matching %s", len(files), pattern) + files = files[self.keep:] + for (t,f) in files: + log.info("Deleting %s", f) + if not self.dry_run: + os.unlink(f) addfile ./setuptools-0.6c14devdev.egg/setuptools/command/rotate.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/rotate.pyc oldhex * newhex *d1f20d0a461ef84b6300000000000000000900000040000000736c0000006400006401006b0000 *5a00006400006401006b01005a01006400006402006b02006c03005a0300016400006403006b04 *006c05005a0500016400006404006b00006c06005a0600016400006405006b0700546406006503 *00660100640700840000830000595a080064010053280800000069ffffffff4e28010000007407 *000000436f6d6d616e642801000000740c000000636f6e766572745f7061746828010000007403 *0000006c6f67280100000074010000002a7406000000726f746174656300000000000000000500 *00004200000073440000006500005a01006400005a02006401005a0300640e00640f0064100067 *03005a04006700005a0500640b008400005a0600640c008400005a0700640d008400005a080052 *532811000000731a00000044656c657465206f6c64657220646973747269627574696f6e737332 *00000064656c657465206f6c64657220646973747269627574696f6e732c206b656570696e6720 *4e206e65776573742066696c657373060000006d617463683d74010000006d731c000000706174 *7465726e7320746f206d6174636820287265717569726564297309000000646973742d6469723d *74010000006473250000006469726563746f727920776865726520746865206469737472696275 *74696f6e732061726573050000006b6565703d74010000006b73280000006e756d626572206f66 *206d61746368696e6720646973747269627574696f6e7320746f206b6565706301000000010000 *000200000043000000731f0000006400007c00005f01006400007c00005f02006400007c00005f *03006400005328010000004e280400000074040000004e6f6e6574050000006d61746368740800 *0000646973745f64697274040000006b6565702801000000740400000073656c66280000000028 *0000000073320000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f *6c735c636f6d6d616e645c726f746174652e70797412000000696e697469616c697a655f6f7074 *696f6e73130000007306000000000109010901630100000003000000090000004300000073df00 *00007c00006900006400006a08006f1000017402006401008301008201006e0100017c00006903 *006400006a08006f1000017402006402008301008201006e0100017916007404007c0000690300 *8301007c00005f0300576e1f00047405006a0a006f130001010101740200640300830100820100 *6e020001587406007c00006900007407008302006f400001670000047d01007c00006900006908 *00640400830100445d19007d02007c01007409007c0200690a008300008301001271a2007e0100 *7c00005f00006e0100017c0000690b00640500640700830200016400005328080000004e735100 *00004d7573742073706563696679206f6e65206f72206d6f72652028636f6d6d612d7365706172 *6174656429206d61746368207061747465726e732028652e672e20272e7a697027206f7220272e *656767272973240000004d7573742073706563696679206e756d626572206f662066696c657320 *746f206b65657073190000002d2d6b656570206d75737420626520616e20696e74656765727401 *0000002c74050000006264697374520a00000028020000007308000000646973745f6469727308 *000000646973745f646972280c000000520900000052080000007414000000446973747574696c *734f7074696f6e4572726f72520b0000007403000000696e74740a00000056616c75654572726f *72740a0000006973696e7374616e6365740a00000062617365737472696e67740500000073706c *697452010000007405000000737472697074150000007365745f756e646566696e65645f6f7074 *696f6e732803000000520c00000074040000005f5b315d74010000007028000000002800000000 *73320000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c63 *6f6d6d616e645c726f746174652e7079741000000066696e616c697a655f6f7074696f6e731800 *000073180000000001100103010d0310011001030116010e011101130240026301000000070000 *00090000004300000073190100007c0000690000640100830100016402006403006b01006c0100 *7d01000178f5007c0000690200445dea007d02007c0000690300690400830000640400177c0200 *177d02007c01007405006906006907007c00006908007c02008302008301007d0300670000047d *04007c0300445d1f007d05007c04007405006906006909007c05008301007c050066020012716d *007e04007d03007c0300690a00830000017c0300690b0083000001740c00690d00640500740e00 *7c03008301007c0200830300017c03007c0000690f001f7d0300783f007c0300445d37005c0200 *7d06007d0500740c00690d006406007c0500830200017c0000691000701100017405006911007c *05008301000171d6000171d60057712700576400005328070000004e74080000006567675f696e *666f69ffffffff28010000007404000000676c6f625203000000731600000025642066696c6528 *7329206d61746368696e67202573730b00000044656c6574696e672025732812000000740b0000 *0072756e5f636f6d6d616e64521c0000005209000000740c000000646973747269627574696f6e *74080000006765745f6e616d6574020000006f7374040000007061746874040000006a6f696e52 *0a00000074080000006765746d74696d657404000000736f727474070000007265766572736552 *020000007404000000696e666f74030000006c656e520b00000074070000006472795f72756e74 *06000000756e6c696e6b2807000000520c000000521c00000074070000007061747465726e7405 *00000066696c657352180000007401000000667401000000742800000000280000000073320000 *006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d61 *6e645c726f746174652e7079740300000072756e2a000000732000000000010d0110010a000601 *17011e0133010a010a0219010d0107000c0110010a01280300000073060000006d617463683d52 *05000000731c0000007061747465726e7320746f206d6174636820287265717569726564292803 *0000007309000000646973742d6469723d520600000073250000006469726563746f7279207768 *6572652074686520646973747269627574696f6e7320617265280300000073050000006b656570 *3d520700000073280000006e756d626572206f66206d61746368696e6720646973747269627574 *696f6e7320746f206b656570280900000074080000005f5f6e616d655f5f740a0000005f5f6d6f *64756c655f5f74070000005f5f646f635f5f740b0000006465736372697074696f6e740c000000 *757365725f6f7074696f6e73740f000000626f6f6c65616e5f6f7074696f6e73520d000000521a *000000522e00000028000000002800000000280000000073320000006275696c645c6264697374 *2e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c726f746174652e7079 *520400000007000000731200000006010602060203010301090306020905091228090000007409 *000000646973747574696c735220000000740a0000007365747570746f6f6c735200000000740e *000000646973747574696c732e7574696c52010000005202000000741000000064697374757469 *6c732e6572726f7273520400000028000000002800000000280000000073320000006275696c64 *5c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c726f74 *6174652e707974080000003c6d6f64756c653e01000000730a00000018011001100110010a02 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/saveopts.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/saveopts.py 1 +import distutils, os +from setuptools import Command +from setuptools.command.setopt import edit_config, option_base + +class saveopts(option_base): + """Save command-line options to a file""" + + description = "save supplied options to setup.cfg or other config file" + + def run(self): + dist = self.distribution + commands = dist.command_options.keys() + settings = {} + + for cmd in commands: + + if cmd=='saveopts': + continue # don't save our own options! + + for opt,(src,val) in dist.get_option_dict(cmd).items(): + if src=="command line": + settings.setdefault(cmd,{})[opt] = val + + edit_config(self.filename, settings, self.dry_run) addfile ./setuptools-0.6c14devdev.egg/setuptools/command/saveopts.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/saveopts.pyc oldhex * newhex *d1f20d0a461ef84b630000000000000000070000004000000073580000006400006401006b0000 *5a00006400006401006b01005a01006400006402006b02006c03005a0300016400006403006b04 *006c05005a05006c06005a060001640400650600660100640500840000830000595a0700640100 *53280600000069ffffffff4e28010000007407000000436f6d6d616e642802000000740b000000 *656469745f636f6e666967740b0000006f7074696f6e5f626173657408000000736176656f7074 *736300000000000000000100000042000000731d0000006500005a01006400005a02006401005a *03006402008400005a04005253280300000073230000005361766520636f6d6d616e642d6c696e *65206f7074696f6e7320746f20612066696c6573370000007361766520737570706c696564206f *7074696f6e7320746f2073657475702e636667206f72206f7468657220636f6e6669672066696c *65630100000008000000060000004300000073b00000007c00006900007d01007c010069010069 *02008300007d02006800007d03007875007c0200445d6d007d04007c04006401006a02006f0700 *017125006e0100017850007c01006903007c0400830100690400830000445d39005c02007d0500 *5c02007d06007d07007c06006402006a02006f1a00017c07007c03006905007c04006800008302 *007c05003c7155000171550057712500577406007c00006907007c03007c000069080083030001 *6400005328030000004e5203000000730c000000636f6d6d616e64206c696e652809000000740c *000000646973747269627574696f6e740f000000636f6d6d616e645f6f7074696f6e7374040000 *006b657973740f0000006765745f6f7074696f6e5f6469637474050000006974656d73740a0000 *0073657464656661756c745201000000740800000066696c656e616d6574070000006472795f72 *756e2808000000740400000073656c667404000000646973747408000000636f6d6d616e647374 *0800000073657474696e67737403000000636d6474030000006f70747403000000737263740300 *000076616c2800000000280000000073340000006275696c645c62646973742e77696e33325c65 *67675c7365747570746f6f6c735c636f6d6d616e645c736176656f7074732e7079740300000072 *756e0a0000007318000000000109010f010602070006020d010702160012010d01220228050000 *0074080000005f5f6e616d655f5f740a0000005f5f6d6f64756c655f5f74070000005f5f646f63 *5f5f740b0000006465736372697074696f6e521400000028000000002800000000280000000073 *340000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f *6d6d616e645c736176656f7074732e707952030000000500000073060000000601060206022808 *0000007409000000646973747574696c7374020000006f73740a0000007365747570746f6f6c73 *520000000074190000007365747570746f6f6c732e636f6d6d616e642e7365746f707452010000 *005202000000520300000028000000002800000000280000000073340000006275696c645c6264 *6973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c736176656f70 *74732e707974080000003c6d6f64756c653e010000007306000000180110011602 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/sdist.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/sdist.py 1 +from distutils.command.sdist import sdist as _sdist +from distutils.util import convert_path +from distutils import log +import os, re, sys, pkg_resources + +entities = [ + ("<","<"), (">", ">"), (""", '"'), ("'", "'"), + ("&", "&") +] + +def unescape(data): + for old,new in entities: + data = data.replace(old,new) + return data + +def re_finder(pattern, postproc=None): + def find(dirname, filename): + f = open(filename,'rU') + data = f.read() + f.close() + for match in pattern.finditer(data): + path = match.group(1) + if postproc: + path = postproc(path) + yield joinpath(dirname,path) + return find + +def joinpath(prefix,suffix): + if not prefix: + return suffix + return os.path.join(prefix,suffix) + + + + + + + + + + +def walk_revctrl(dirname=''): + """Find all files under revision control""" + for ep in pkg_resources.iter_entry_points('setuptools.file_finders'): + for item in ep.load()(dirname): + yield item + +def _default_revctrl(dirname=''): + for path, finder in finders: + path = joinpath(dirname,path) + if os.path.isfile(path): + for path in finder(dirname,path): + if os.path.isfile(path): + yield path + elif os.path.isdir(path): + for item in _default_revctrl(path): + yield item + +def externals_finder(dirname, filename): + """Find any 'svn:externals' directories""" + found = False + f = open(filename,'rb') + for line in iter(f.readline, ''): # can't use direct iter! + parts = line.split() + if len(parts)==2: + kind,length = parts + data = f.read(int(length)) + if kind=='K' and data=='svn:externals': + found = True + elif kind=='V' and found: + f.close() + break + else: + f.close() + return + + for line in data.splitlines(): + parts = line.split() + if parts: + yield joinpath(dirname, parts[0]) + + +entries_pattern = re.compile(r'name="([^"]+)"(?![^>]+deleted="true")', re.I) + +def entries_finder(dirname, filename): + f = open(filename,'rU') + data = f.read() + f.close() + if data.startswith('9') or data.startswith('8'): # subversion 1.5/1.4 + for record in map(str.splitlines, data.split('\n\x0c\n')[1:]): + if not record or len(record)>=6 and record[5]=="delete": + continue # skip deleted + yield joinpath(dirname, record[0]) + elif data.startswith('1: + raise DistutilsOptionError( + "Must specify only one configuration file option", + filenames + ) + self.filename, = filenames + + + + +class setopt(option_base): + """Save command-line options to a file""" + + description = "set an option in setup.cfg or another config file" + + user_options = [ + ('command=', 'c', 'command to set an option for'), + ('option=', 'o', 'option to set'), + ('set-value=', 's', 'value of the option'), + ('remove', 'r', 'remove (unset) the value'), + ] + option_base.user_options + + boolean_options = option_base.boolean_options + ['remove'] + + def initialize_options(self): + option_base.initialize_options(self) + self.command = None + self.option = None + self.set_value = None + self.remove = None + + def finalize_options(self): + option_base.finalize_options(self) + if self.command is None or self.option is None: + raise DistutilsOptionError("Must specify --command *and* --option") + if self.set_value is None and not self.remove: + raise DistutilsOptionError("Must specify --set-value or --remove") + + def run(self): + edit_config( + self.filename, { + self.command: {self.option.replace('-','_'):self.set_value} + }, + self.dry_run + ) addfile ./setuptools-0.6c14devdev.egg/setuptools/command/setopt.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/setopt.pyc oldhex * newhex *d1f20d0a471ef84b6300000000000000000a0000004000000073ac0000006400006401006b0000 *5a00006400006401006b01005a01006400006402006b02006c03005a0300016400006403006b04 *006c05005a0500016400006404006b00006c06005a0600016400006405006b0700546406006407 *006408006409006704005a0800640a00640b008401005a0900650a00640c008401005a0b006408 *00650300660100640d00840000830000595a0c00640900650c00660100640e0084000083000059 *5a0d0064010053280f00000069ffffffff4e28010000007407000000436f6d6d616e6428010000 *00740c000000636f6e766572745f70617468280100000074030000006c6f672801000000740100 *00002a740b000000636f6e6669675f66696c65740b000000656469745f636f6e666967740b0000 *006f7074696f6e5f6261736574060000007365746f707474050000006c6f63616c630100000002 *0000000400000043000000739a0000007c00006401006a02006f05000164020053017c00006403 *006a02006f23000174000069010069020074000069010069030074040069050083010064040083 *020053017c00006405006a02006f3800017400006906006406006a02006f070001640700700400 *016408007d01007400006901006907007408006409007c0100168301008301005301740900640a *007c0000830200820100640b0053280c0000007381000000476574207468652066696c656e616d *65206f662074686520646973747574696c732c206c6f63616c2c20676c6f62616c2c206f722070 *65722d7573657220636f6e6669670a0a20202020606b696e6460206d757374206265206f6e6520 *6f6620226c6f63616c222c2022676c6f62616c222c206f72202275736572220a20202020520800 *0000730900000073657475702e6366677406000000676c6f62616c730d00000064697374757469 *6c732e6366677404000000757365727405000000706f73697874010000002e7400000000731300 *00007e2f25737079646973747574696c732e6366677337000000636f6e6669675f66696c652829 *2074797065206d75737420626520276c6f63616c272c2027676c6f62616c272c206f7220277573 *6572274e280a00000074020000006f7374040000007061746874040000006a6f696e7407000000 *6469726e616d657409000000646973747574696c7374080000005f5f66696c655f5f7404000000 *6e616d65740a000000657870616e64757365725201000000740a00000056616c75654572726f72 *280200000074040000006b696e647403000000646f742800000000280000000073320000006275 *696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c *7365746f70742e707952040000000a000000731400000000050d0105010d0109011a020d011d01 *1b01030163030000000a000000090000004300000073b40100006401006402006b00006c01007d *0300017402006903006403007c0000830200017c03008300007d04007c04006904007c00006701 *00830100017833017c0100690500830000445d25015c02007d05007d06007c0600640b006a0800 *6f2400017402006907006404007c05007c0000830300017c04006908007c050083010001714600 *017c04006909007c0500830100702400017402006903006405007c05007c0000830300017c0400 *690a007c0500830100016e01000178b1007c0600690500830000445da3005c02007d07007d0800 *7c0800640b006a08006f5e00017402006903006406007c05007c07007c0000830400017c040069 *0b007c05007c0700830200017c0400690c007c0500830100702400017402006907006407007c05 *007c0000830300017c04006908007c0500830100017167010171c400017402006903006408007c *05007c07007c08007c0000830500017c0400690d007c05007c07007c08008303000171c4005771 *4600577402006907006409007c0000830200017c0200702a0001740e007c0000640a008302007d *09007c0400690f007c0900830100017c0900691000830000016e010001640b0053280c00000073 *5901000045646974206120636f6e66696775726174696f6e2066696c6520746f20696e636c7564 *65206073657474696e6773600a0a202020206073657474696e6773602069732061206469637469 *6f6e617279206f662064696374696f6e6172696573206f722060604e6f6e6560602076616c7565 *732c206b657965642062790a20202020636f6d6d616e642f73656374696f6e206e616d652e2020 *412060604e6f6e6560602076616c7565206d65616e7320746f2064656c6574652074686520656e *746972652073656374696f6e2c0a202020207768696c6520612064696374696f6e617279206c69 *7374732073657474696e677320746f206265206368616e676564206f722064656c657465642069 *6e20746861742073656374696f6e2e0a20202020412073657474696e67206f662060604e6f6e65 *6060206d65616e7320746f2064656c65746520746861742073657474696e672e0a2020202069ff *ffffff2801000000740f000000526177436f6e666967506172736572731d00000052656164696e *6720636f6e66696775726174696f6e2066726f6d202573731d00000044656c6574696e67207365 *6374696f6e205b25735d2066726f6d202573731d000000416464696e67206e6577207365637469 *6f6e205b25735d20746f202573731600000044656c6574696e672025732e25732066726f6d2025 *73732300000044656c6574696e6720656d707479205b25735d2073656374696f6e2066726f6d20 *2573731900000053657474696e672025732e257320746f20257220696e202573730a0000005772 *6974696e672025737401000000774e2811000000740c000000436f6e6669675061727365725219 *00000052020000007405000000646562756774040000007265616474050000006974656d737404 *0000004e6f6e657404000000696e666f740e00000072656d6f76655f73656374696f6e740b0000 *006861735f73656374696f6e740b0000006164645f73656374696f6e740d00000072656d6f7665 *5f6f7074696f6e74070000006f7074696f6e73740300000073657474040000006f70656e740500 *000077726974657405000000636c6f7365280a000000740800000066696c656e616d6574080000 *0073657474696e677374070000006472795f72756e521900000074040000006f70747374070000 *0073656374696f6e522500000074060000006f7074696f6e740500000076616c75657401000000 *662800000000280000000073320000006275696c645c62646973742e77696e33325c6567675c73 *65747570746f6f6c735c636f6d6d616e645c7365746f70742e707952050000002a000000733e00 *0000000810011001090110010d000c010d01130111021001130111010d000c010d0109010d0210 *01100109010a0115020601030110021b02100107010f000d006300000000000000000500000042 *000000733b0000006500005a01006400005a0200640c00640d00640e006703005a030064010064 *04006702005a0400640a008400005a0500640b008400005a06005253280f000000733c00000041 *62737472616374206261736520636c61737320666f7220636f6d6d616e64732074686174206d65 *7373207769746820636f6e6669672066696c6573730d000000676c6f62616c2d636f6e66696774 *0100000067733000000073617665206f7074696f6e7320746f2074686520736974652d77696465 *20646973747574696c732e6366672066696c65730b000000757365722d636f6e66696774010000 *0075733700000073617665206f7074696f6e7320746f207468652063757272656e742075736572 *2773207079646973747574696c732e6366672066696c65730900000066696c656e616d653d5231 *000000732d000000636f6e66696775726174696f6e2066696c6520746f20757365202864656661 *756c743d73657475702e636667296301000000010000000200000043000000731f000000640000 *7c00005f01006400007c00005f02006400007c00005f03006400005328010000004e2804000000 *521f000000740d000000676c6f62616c5f636f6e666967740b000000757365725f636f6e666967 *522a0000002801000000740400000073656c662800000000280000000073320000006275696c64 *5c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c736574 *6f70742e70797412000000696e697469616c697a655f6f7074696f6e7363000000730600000000 *0109010901630100000002000000030000004300000073c00000006700007d01007c0000690000 *6f1700017c0100690100740200640100830100830100016e0100017c00006903006f1700017c01 *00690100740200640200830100830100016e0100017c00006904006400006a09006f1400017c01 *006901007c0000690400830100016e0100017c0100701700017c01006901007402006403008301 *00830100016e0100017406007c01008301006404006a04006f1300017407006405007c01008302 *008201006e0100017c01005c01007c00005f04006400005328060000004e5209000000520a0000 *0052080000006901000000732f0000004d7573742073706563696679206f6e6c79206f6e652063 *6f6e66696775726174696f6e2066696c65206f7074696f6e280800000052340000007406000000 *617070656e6452040000005235000000522a000000521f00000074030000006c656e7414000000 *446973747574696c734f7074696f6e4572726f7228020000005236000000740900000066696c65 *6e616d65732800000000280000000073320000006275696c645c62646973742e77696e33325c65 *67675c7365747570746f6f6c735c636f6d6d616e645c7365746f70742e7079741000000066696e *616c697a655f6f7074696f6e7368000000731c000000000106010a0117010a0117011001140107 *0117011301030103010d022803000000730d000000676c6f62616c2d636f6e6669675232000000 *733000000073617665206f7074696f6e7320746f2074686520736974652d776964652064697374 *7574696c732e6366672066696c652803000000730b000000757365722d636f6e66696752330000 *00733700000073617665206f7074696f6e7320746f207468652063757272656e74207573657227 *73207079646973747574696c732e6366672066696c652803000000730900000066696c656e616d *653d5231000000732d000000636f6e66696775726174696f6e2066696c6520746f207573652028 *64656661756c743d73657475702e63666729280700000074080000005f5f6e616d655f5f740a00 *00005f5f6d6f64756c655f5f74070000005f5f646f635f5f740c000000757365725f6f7074696f *6e73740f000000626f6f6c65616e5f6f7074696f6e735237000000523c00000028000000002800 *000000280000000073320000006275696c645c62646973742e77696e33325c6567675c73657475 *70746f6f6c735c636f6d6d616e645c7365746f70742e7079520600000053000000731400000006 *0106030001030100010301000109040c0309056300000000000000000600000042000000735800 *00006500005a01006400005a02006401005a030064110064120064130064140067040065040069 *0500175a0500650400690600640b00670100175a0600640e008400005a0700640f008400005a08 *006410008400005a09005253281500000073230000005361766520636f6d6d616e642d6c696e65 *206f7074696f6e7320746f20612066696c65733100000073657420616e206f7074696f6e20696e *2073657475702e636667206f7220616e6f7468657220636f6e6669672066696c65730800000063 *6f6d6d616e643d740100000063731c000000636f6d6d616e6420746f2073657420616e206f7074 *696f6e20666f7273070000006f7074696f6e3d74010000006f730d0000006f7074696f6e20746f *20736574730a0000007365742d76616c75653d740100000073731300000076616c7565206f6620 *746865206f7074696f6e740600000072656d6f7665740100000072731800000072656d6f766520 *28756e73657429207468652076616c756563010000000100000002000000430000007335000000 *7400006901007c0000830100016400007c00005f03006400007c00005f04006400007c00005f05 *006400007c00005f06006400005328010000004e280700000052060000005237000000521f0000 *007407000000636f6d6d616e64522f00000074090000007365745f76616c756552450000002801 *00000052360000002800000000280000000073320000006275696c645c62646973742e77696e33 *325c6567675c7365747570746f6f6c735c636f6d6d616e645c7365746f70742e70795237000000 *8a000000730a00000000010d010901090109016301000000010000000200000043000000736c00 *00007400006901007c0000830100017c00006902006400006a0800701000017c00006904006400 *006a08006f1000017405006401008301008201006e0100017c00006906006400006a08006f1b00 *017c00006907000c6f1000017405006402008301008201006e0100016400005328030000004e73 *250000004d7573742073706563696679202d2d636f6d6d616e64202a616e642a202d2d6f707469 *6f6e73240000004d7573742073706563696679202d2d7365742d76616c7565206f72202d2d7265 *6d6f766528080000005206000000523c0000005247000000521f000000522f000000523a000000 *52480000005245000000280100000052360000002800000000280000000073320000006275696c *645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c7365 *746f70742e7079523c00000091000000730a00000000010d01200110011b016301000000010000 *000800000043000000733d0000007400007c00006901006801006801007c00006902007c000069 *0300690400640100640200830200367c0000690500367c00006906008303000164000053280300 *00004e74010000002d74010000005f28070000005205000000522a0000005248000000522f0000 *0074070000007265706c6163655247000000522c00000028010000005236000000280000000028 *0000000073320000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f *6c735c636f6d6d616e645c7365746f70742e7079740300000072756e9800000073080000000001 *03010901230228030000007308000000636f6d6d616e643d5242000000731c000000636f6d6d61 *6e6420746f2073657420616e206f7074696f6e20666f72280300000073070000006f7074696f6e *3d5243000000730d0000006f7074696f6e20746f207365742803000000730a0000007365742d76 *616c75653d5244000000731300000076616c7565206f6620746865206f7074696f6e2803000000 *730600000072656d6f76655246000000731800000072656d6f76652028756e7365742920746865 *2076616c7565280a000000523d000000523e000000523f000000740b0000006465736372697074 *696f6e5206000000524000000052410000005237000000523c000000524c000000280000000028 *00000000280000000073320000006275696c645c62646973742e77696e33325c6567675c736574 *7570746f6f6c735c636f6d6d616e645c7365746f70742e707952070000007c0000007316000000 *06010602060303010301030106010a02100209070907280e0000005212000000520e000000740a *0000007365747570746f6f6c735200000000740e000000646973747574696c732e7574696c5201 *00000052020000007410000000646973747574696c732e6572726f727374070000005f5f616c6c *5f5f5204000000740500000046616c736552050000005206000000520700000028000000002800 *000000280000000073320000006275696c645c62646973742e77696e33325c6567675c73657475 *70746f6f6c735c636f6d6d616e645c7365746f70742e707974080000003c6d6f64756c653e0100 *0000731200000018011001100110010a0212030c200c291629 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/test.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/test.py 1 +from setuptools import Command +from distutils.errors import DistutilsOptionError +import sys +from pkg_resources import * +from unittest import TestLoader, main + +class ScanningLoader(TestLoader): + + def loadTestsFromModule(self, module): + """Return a suite of all tests cases contained in the given module + + If the module is a package, load tests from all the modules in it. + If the module has an ``additional_tests`` function, call it and add + the return value to the tests. + """ + tests = [] + if module.__name__!='setuptools.tests.doctest': # ugh + tests.append(TestLoader.loadTestsFromModule(self,module)) + + if hasattr(module, "additional_tests"): + tests.append(module.additional_tests()) + + if hasattr(module, '__path__'): + for file in resource_listdir(module.__name__, ''): + if file.endswith('.py') and file!='__init__.py': + submodule = module.__name__+'.'+file[:-3] + else: + if resource_exists( + module.__name__, file+'/__init__.py' + ): + submodule = module.__name__+'.'+file + else: + continue + tests.append(self.loadTestsFromName(submodule)) + + if len(tests)!=1: + return self.suiteClass(tests) + else: + return tests[0] # don't create a nested suite for only one return + + +class test(Command): + """Command to run unit tests after in-place build""" + + description = "run unit tests after in-place build" + + user_options = [ + ('test-module=','m', "Run 'test_suite' in specified module"), + ('test-suite=','s', + "Test suite to run (e.g. 'some_module.test_suite')"), + ('test-runner=','r', "Test runner to use"), + ] + + def initialize_options(self): + self.test_runner = None + self.test_suite = None + self.test_module = None + self.test_loader = None + + def finalize_options(self): + if self.test_suite is None: + if self.test_module is None: + self.test_suite = self.distribution.test_suite + else: + self.test_suite = self.test_module+".test_suite" + elif self.test_module: + raise DistutilsOptionError( + "You may specify a module or a suite, but not both" + ) + + self.test_args = [self.test_suite] + + if self.verbose: + self.test_args.insert(0,'--verbose') + if self.test_loader is None: + self.test_loader = getattr(self.distribution,'test_loader',None) + if self.test_loader is None: + self.test_loader = "setuptools.command.test:ScanningLoader" + if self.test_runner is None: + self.test_runner = getattr(self.distribution,'test_runner',None) + + + def with_project_on_sys_path(self, func): + # Ensure metadata is up-to-date + self.run_command('egg_info') + + # Build extensions in-place + self.reinitialize_command('build_ext', inplace=1) + self.run_command('build_ext') + + ei_cmd = self.get_finalized_command("egg_info") + + old_path = sys.path[:] + old_modules = sys.modules.copy() + + try: + sys.path.insert(0, normalize_path(ei_cmd.egg_base)) + working_set.__init__() + add_activation_listener(lambda dist: dist.activate()) + require('%s==%s' % (ei_cmd.egg_name, ei_cmd.egg_version)) + func() + finally: + sys.path[:] = old_path + sys.modules.clear() + sys.modules.update(old_modules) + working_set.__init__() + + + def run(self): + if self.distribution.install_requires: + self.distribution.fetch_build_eggs(self.distribution.install_requires) + if self.distribution.tests_require: + self.distribution.fetch_build_eggs(self.distribution.tests_require) + + if self.test_suite: + cmd = ' '.join(self.test_args) + if self.dry_run: + self.announce('skipping "unittest %s" (dry run)' % cmd) + else: + self.announce('running "unittest %s"' % cmd) + self.with_project_on_sys_path(self.run_tests) + + + def run_tests(self): + import unittest + loader_ep = EntryPoint.parse("x="+self.test_loader) + loader_class = loader_ep.load(require=False) + runner = None + if self.test_runner is not None: + runner_ep = EntryPoint.parse("x="+self.test_runner) + runner_class = runner_ep.load(require=False) + runner = runner_class() + unittest.main( + None, None, [unittest.__file__]+self.test_args, + testRunner = runner, testLoader = loader_class() + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + addfile ./setuptools-0.6c14devdev.egg/setuptools/command/test.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/test.pyc oldhex * newhex *d1f20d0a481ef84b6300000000000000000800000040000000737c0000006400006401006b0000 *6c01005a0100016400006402006b02006c03005a0300016400006403006b04005a040064000064 *04006b0500546400006405006b06006c07005a07006c08005a0800016406006507006601006407 *00840000830000595a0900640800650100660100640900840000830000595a0a0064030053280a *00000069ffffffff28010000007407000000436f6d6d616e642801000000741400000044697374 *7574696c734f7074696f6e4572726f724e280100000074010000002a2802000000740a00000054 *6573744c6f6164657274040000006d61696e740e0000005363616e6e696e674c6f616465726300 *00000000000000010000004200000073110000006500005a01006400008400005a020052532801 *000000630200000005000000050000004300000073330100006700007d02007c01006900006401 *006a03006f1d00017c02006901007402006903007c00007c0100830200830100016e0100017404 *007c01006402008302006f1700017c02006901007c0100690500830000830100016e0100017404 *007c01006403008302006f9c00017899007406007c0100690000640400830200445d81007d0300 *7c03006907006405008301006f2600017c03006406006a03006f1900017c010069000064070017 *7c030064080020177d04006e3000017408007c01006900007c0300640900178302006f1500017c *0100690000640700177c0300177d04006e040001717d007c02006901007c00006909007c040083 *010083010001717d00576e010001740a007c0200830100640a006a03006f0e00017c0000690b00 *7c020083010053017c0200640b001953640c0053280d000000730701000052657475726e206120 *7375697465206f6620616c6c20746573747320636173657320636f6e7461696e656420696e2074 *686520676976656e206d6f64756c650a0a2020202020202020496620746865206d6f64756c6520 *69732061207061636b6167652c206c6f61642074657374732066726f6d20616c6c20746865206d *6f64756c657320696e2069742e0a2020202020202020496620746865206d6f64756c6520686173 *20616e2060606164646974696f6e616c5f746573747360602066756e6374696f6e2c2063616c6c *20697420616e64206164640a20202020202020207468652072657475726e2076616c756520746f *207468652074657374732e0a202020202020202073180000007365747570746f6f6c732e746573 *74732e646f637465737474100000006164646974696f6e616c5f746573747374080000005f5f70 *6174685f5f740000000073030000002e7079730b0000005f5f696e69745f5f2e70797401000000 *2e69fdffffff730c0000002f5f5f696e69745f5f2e7079690100000069000000004e280c000000 *74080000005f5f6e616d655f5f7406000000617070656e64520300000074130000006c6f616454 *6573747346726f6d4d6f64756c6574070000006861736174747252060000007410000000726573 *6f757263655f6c6973746469727408000000656e647377697468740f0000007265736f75726365 *5f65786973747374110000006c6f6164546573747346726f6d4e616d6574030000006c656e740a *0000007375697465436c6173732805000000740400000073656c6674060000006d6f64756c6574 *050000007465737473740400000066696c6574090000007375626d6f64756c6528000000002800 *00000073300000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c *735c636f6d6d616e645c746573742e7079520c0000000900000073240000000007060110011d02 *100117021001130006011d01190203011402150203011e0213010e022803000000520a00000074 *0a0000005f5f6d6f64756c655f5f520c0000002800000000280000000028000000007330000000 *6275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e *645c746573742e7079520500000007000000730200000006027404000000746573746300000000 *00000000050000004200000073500000006500005a01006400005a02006401005a030064100064 *11006412006703005a0400640b008400005a0500640c008400005a0600640d008400005a070064 *0e008400005a0800640f008400005a090052532813000000732e000000436f6d6d616e6420746f *2072756e20756e697420746573747320616674657220696e2d706c616365206275696c64732300 *000072756e20756e697420746573747320616674657220696e2d706c616365206275696c64730c *000000746573742d6d6f64756c653d74010000006d732400000052756e2027746573745f737569 *74652720696e20737065636966696564206d6f64756c65730b000000746573742d73756974653d *74010000007373310000005465737420737569746520746f2072756e2028652e672e2027736f6d *655f6d6f64756c652e746573745f73756974652729730c000000746573742d72756e6e65723d74 *01000000727312000000546573742072756e6e657220746f207573656301000000010000000200 *00004300000073280000006400007c00005f01006400007c00005f02006400007c00005f030064 *00007c00005f04006400005328010000004e280500000074040000004e6f6e65740b0000007465 *73745f72756e6e6572740a000000746573745f7375697465740b000000746573745f6d6f64756c *65740b000000746573745f6c6f6164657228010000005214000000280000000028000000007330 *0000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d *6d616e645c746573742e70797412000000696e697469616c697a655f6f7074696f6e7336000000 *730800000000010901090109016301000000010000000400000043000000730a0100007c000069 *00006400006a08006f3700017c00006902006400006a08006f1300017c00006903006900007c00 *005f0000716100017c0000690200640100177c00005f00006e1b00017c00006902006f10000174 *04006402008301008201006e0100017c00006900006701007c00005f05007c00006906006f1700 *017c0000690500690700640300640400830200016e0100017c00006908006400006a08006f1c00 *017409007c00006903006405006400008303007c00005f08006e0100017c00006908006400006a *08006f0d00016406007c00005f08006e0100017c0000690a006400006a08006f1c00017409007c *00006903006407006400008303007c00005f0a006e0100016400005328080000004e730b000000 *2e746573745f73756974657331000000596f75206d617920737065636966792061206d6f64756c *65206f7220612073756974652c20627574206e6f7420626f7468690000000073090000002d2d76 *6572626f7365522200000073260000007365747570746f6f6c732e636f6d6d616e642e74657374 *3a5363616e6e696e674c6f61646572521f000000280b0000005220000000521e00000052210000 *00740c000000646973747269627574696f6e52010000007409000000746573745f617267737407 *000000766572626f73657406000000696e73657274522200000074070000006765746174747252 *1f000000280100000052140000002800000000280000000073300000006275696c645c62646973 *742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c746573742e707974 *1000000066696e616c697a655f6f7074696f6e733c000000732000000000011001100113021401 *0a0103010d030f020a01170110011c0110010d0110016302000000050000000800000043000000 *73e60000007c0000690000640100830100017c0000690100640200640300640400830101017c00 *00690000640200830100017c00006902006401008301007d02007403006904001e7d0300740300 *6905006906008300007d04007a58007403006904006907006405007408007c0200690900830100 *83020001740a00690b0083000001740c0064060084000083010001740d006407007c0200690e00 *7c0200690f0066020016830100017c010083000001576400007c03007403006904002874030069 *0500691000830000017403006905006911007c040083010001740a00690b008300000158640000 *5328080000004e74080000006567675f696e666f74090000006275696c645f6578747407000000 *696e706c616365690100000069000000006301000000010000000100000053000000730a000000 *7c0000690000830000532800000000280100000074080000006163746976617465280100000074 *04000000646973742800000000280000000073300000006275696c645c62646973742e77696e33 *325c6567675c7365747570746f6f6c735c636f6d6d616e645c746573742e707974080000003c6c *616d6264613e630000007300000000730600000025733d3d25732812000000740b00000072756e *5f636f6d6d616e6474140000007265696e697469616c697a655f636f6d6d616e64741500000067 *65745f66696e616c697a65645f636f6d6d616e6474030000007379737404000000706174687407 *0000006d6f64756c65737404000000636f70795227000000740e0000006e6f726d616c697a655f *7061746874080000006567675f62617365740b000000776f726b696e675f73657474080000005f *5f696e69745f5f74170000006164645f61637469766174696f6e5f6c697374656e657274070000 *007265717569726574080000006567675f6e616d65740b0000006567675f76657273696f6e7405 *000000636c656172740600000075706461746528050000005214000000740400000066756e6374 *0600000065695f636d6474080000006f6c645f70617468740b0000006f6c645f6d6f64756c6573 *2800000000280000000073300000006275696c645c62646973742e77696e33325c6567675c7365 *747570746f6f6c735c636f6d6d616e645c746573742e70797418000000776974685f70726f6a65 *63745f6f6e5f7379735f7061746853000000732000000000020d0313010d020f020a010f020301 *1c010a010d011a010b020a010d011001630100000002000000030000004300000073b20000007c *00006900006901006f1a00017c00006900006902007c0000690000690100830100016e0100017c *00006900006903006f1a00017c00006900006902007c0000690000690300830100016e0100017c *00006904006f5600016401006905007c00006906008301007d01007c00006907006f1500017c00 *006908006402007c0100168301000171ae00017c00006908006403007c010016830100017c0000 *6909007c0000690a00830100016e0100016400005328040000004e740100000020732000000073 *6b697070696e672022756e6974746573742025732220286472792072756e29731500000072756e *6e696e672022756e69747465737420257322280b00000052240000007410000000696e7374616c *6c5f7265717569726573741000000066657463685f6275696c645f65676773740d000000746573 *74735f72657175697265522000000074040000006a6f696e522500000074070000006472795f72 *756e7408000000616e6e6f756e63655245000000740900000072756e5f74657374732802000000 *52140000007403000000636d642800000000280000000073300000006275696c645c6264697374 *2e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c746573742e70797403 *00000072756e6d000000731400000000010d011a010d011a020a0112010a011502110163010000 *0007000000090000004300000073b20000006401006400006b00007d0100740100690200640200 *7c0000690300178301007d02007c02006904006403007405008300017d03006400007d04007c00 *006907006400006a09006f3500017401006902006402007c0000690700178301007d05007c0500 *6904006403007405008300017d06007c06008300007d04006e0100017c01006908006400006400 *007c01006909006701007c0000690a00176404007c04006405007c030083000083030201640000 *5328060000004e69ffffffff7302000000783d523c000000740a0000007465737452756e6e6572 *740a000000746573744c6f61646572280b0000007408000000756e697474657374740a00000045 *6e747279506f696e7474050000007061727365522200000074040000006c6f6164740500000046 *616c7365521e000000521f000000520400000074080000005f5f66696c655f5f52250000002807 *0000005214000000525200000074090000006c6f616465725f6570740c0000006c6f616465725f *636c617373740600000072756e6e6572740900000072756e6e65725f6570740c00000072756e6e *65725f636c6173732800000000280000000073300000006275696c645c62646973742e77696e33 *325c6567675c7365747570746f6f6c735c636f6d6d616e645c746573742e7079524d0000007c00 *0000731600000000010c011601120106011001160112010d01060119012803000000730c000000 *746573742d6d6f64756c653d521b000000732400000052756e2027746573745f73756974652720 *696e20737065636966696564206d6f64756c652803000000730b000000746573742d7375697465 *3d521c00000073310000005465737420737569746520746f2072756e2028652e672e2027736f6d *655f6d6f64756c652e746573745f737569746527292803000000730c000000746573742d72756e *6e65723d521d0000007312000000546573742072756e6e657220746f20757365280a000000520a *000000521900000074070000005f5f646f635f5f740b0000006465736372697074696f6e740c00 *0000757365725f6f7074696f6e73522300000052290000005245000000524f000000524d000000 *28000000002800000000280000000073300000006275696c645c62646973742e77696e33325c65 *67675c7365747570746f6f6c735c636f6d6d616e645c746573742e7079521a0000002a00000073 *16000000060106020603030100010301090309060917091a090f280b000000740a000000736574 *7570746f6f6c7352000000007410000000646973747574696c732e6572726f7273520100000052 *33000000740d000000706b675f7265736f75726365735252000000520300000052040000005205 *000000521a00000028000000002800000000280000000073300000006275696c645c6264697374 *2e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c746573742e70797408 *0000003c6d6f64756c653e01000000730c000000100110010c010a0116021623 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/upload.py hunk ./setuptools-0.6c14devdev.egg/setuptools/command/upload.py 1 +"""distutils.command.upload + +Implements the Distutils 'upload' subcommand (upload package to PyPI).""" + +from distutils.errors import * +from distutils.core import Command +from distutils.spawn import spawn +from distutils import log +try: + from hashlib import md5 +except ImportError: + from md5 import md5 +import os +import socket +import platform +import ConfigParser +import httplib +import base64 +import urlparse +import cStringIO as StringIO + +class upload(Command): + + description = "upload binary package to PyPI" + + DEFAULT_REPOSITORY = 'http://pypi.python.org/pypi' + + user_options = [ + ('repository=', 'r', + "url of repository [default: %s]" % DEFAULT_REPOSITORY), + ('show-response', None, + 'display full response text from server'), + ('sign', 's', + 'sign files to upload using gpg'), + ('identity=', 'i', 'GPG identity used to sign files'), + ] + boolean_options = ['show-response', 'sign'] + + def initialize_options(self): + self.username = '' + self.password = '' + self.repository = '' + self.show_response = 0 + self.sign = False + self.identity = None + + def finalize_options(self): + if self.identity and not self.sign: + raise DistutilsOptionError( + "Must use --sign for --identity to have meaning" + ) + if os.environ.has_key('HOME'): + rc = os.path.join(os.environ['HOME'], '.pypirc') + if os.path.exists(rc): + self.announce('Using PyPI login from %s' % rc) + config = ConfigParser.ConfigParser({ + 'username':'', + 'password':'', + 'repository':''}) + config.read(rc) + if not self.repository: + self.repository = config.get('server-login', 'repository') + if not self.username: + self.username = config.get('server-login', 'username') + if not self.password: + self.password = config.get('server-login', 'password') + if not self.repository: + self.repository = self.DEFAULT_REPOSITORY + + def run(self): + if not self.distribution.dist_files: + raise DistutilsOptionError("No dist file created in earlier command") + for command, pyversion, filename in self.distribution.dist_files: + self.upload_file(command, pyversion, filename) + + def upload_file(self, command, pyversion, filename): + # Sign if requested + if self.sign: + gpg_args = ["gpg", "--detach-sign", "-a", filename] + if self.identity: + gpg_args[2:2] = ["--local-user", self.identity] + spawn(gpg_args, + dry_run=self.dry_run) + + # Fill in the data + content = open(filename,'rb').read() + basename = os.path.basename(filename) + comment = '' + if command=='bdist_egg' and self.distribution.has_ext_modules(): + comment = "built on %s" % platform.platform(terse=1) + data = { + ':action':'file_upload', + 'protcol_version':'1', + 'name':self.distribution.get_name(), + 'version':self.distribution.get_version(), + 'content':(basename,content), + 'filetype':command, + 'pyversion':pyversion, + 'md5_digest':md5(content).hexdigest(), + } + if command == 'bdist_rpm': + dist, version, id = platform.dist() + if dist: + comment = 'built for %s %s' % (dist, version) + elif command == 'bdist_dumb': + comment = 'built for %s' % platform.platform(terse=1) + data['comment'] = comment + + if self.sign: + data['gpg_signature'] = (os.path.basename(filename) + ".asc", + open(filename+".asc").read()) + + # set up the authentication + auth = "Basic " + base64.encodestring(self.username + ":" + self.password).strip() + + # Build up the MIME payload for the POST data + boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254' + sep_boundary = '\n--' + boundary + end_boundary = sep_boundary + '--' + body = StringIO.StringIO() + for key, value in data.items(): + # handle multiple entries for the same name + if type(value) != type([]): + value = [value] + for value in value: + if type(value) is tuple: + fn = ';filename="%s"' % value[0] + value = value[1] + else: + fn = "" + value = str(value) + body.write(sep_boundary) + body.write('\nContent-Disposition: form-data; name="%s"'%key) + body.write(fn) + body.write("\n\n") + body.write(value) + if value and value[-1] == '\r': + body.write('\n') # write an extra newline (lurve Macs) + body.write(end_boundary) + body.write("\n") + body = body.getvalue() + + self.announce("Submitting %s to %s" % (filename, self.repository), log.INFO) + + # build the Request + # We can't use urllib2 since we need to send the Basic + # auth right with the first request + schema, netloc, url, params, query, fragments = \ + urlparse.urlparse(self.repository) + assert not params and not query and not fragments + if schema == 'http': + http = httplib.HTTPConnection(netloc) + elif schema == 'https': + http = httplib.HTTPSConnection(netloc) + else: + raise AssertionError, "unsupported schema "+schema + + data = '' + loglevel = log.INFO + try: + http.connect() + http.putrequest("POST", url) + http.putheader('Content-type', + 'multipart/form-data; boundary=%s'%boundary) + http.putheader('Content-length', str(len(body))) + http.putheader('Authorization', auth) + http.endheaders() + http.send(body) + except socket.error, e: + self.announce(str(e), log.ERROR) + return + + r = http.getresponse() + if r.status == 200: + self.announce('Server response (%s): %s' % (r.status, r.reason), + log.INFO) + else: + self.announce('Upload failed (%s): %s' % (r.status, r.reason), + log.ERROR) + if self.show_response: + print '-'*75, r.read(), '-'*75 addfile ./setuptools-0.6c14devdev.egg/setuptools/command/upload.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/command/upload.pyc oldhex * newhex *d1f20d0a481ef84b630000000000000000130000004000000073f40000006400005a0000640100 *6402006b0100546401006403006b02006c03005a0300016401006404006b04006c05005a050001 *6401006405006b06006c07005a0700017914006401006406006b08006c09005a090001576e2300 *04650a006a0a006f1700010101016401006406006b09006c09005a0900016e0200015864010064 *07006b0b005a0b006401006407006b0c005a0c006401006407006b0d005a0d006401006407006b *0e005a0e006401006407006b0f005a0f006401006407006b10005a10006401006407006b11005a *11006401006407006b12005a1300640800650300660100640900840000830000595a1400640700 *53280a0000007360000000646973747574696c732e636f6d6d616e642e75706c6f61640a0a496d *706c656d656e74732074686520446973747574696c73202775706c6f61642720737562636f6d6d *616e64202875706c6f6164207061636b61676520746f2050795049292e69ffffffff2801000000 *74010000002a28010000007407000000436f6d6d616e6428010000007405000000737061776e28 *0100000074030000006c6f67280100000074030000006d64354e740600000075706c6f61646300 *00000000000000060000004200000073630000006500005a01006400005a02006401005a030064 *0200640300640400650300166603006412006413006414006704005a0500640500640700670200 *5a0600640d008400005a0700640e008400005a0800640f008400005a09006410008400005a0a00 *52532815000000731d00000075706c6f61642062696e617279207061636b61676520746f205079 *5049731b000000687474703a2f2f707970692e707974686f6e2e6f72672f70797069730b000000 *7265706f7369746f72793d740100000072731f00000075726c206f66207265706f7369746f7279 *205b64656661756c743a2025735d730d00000073686f772d726573706f6e736573260000006469 *73706c61792066756c6c20726573706f6e736520746578742066726f6d20736572766572740400 *00007369676e740100000073731e0000007369676e2066696c657320746f2075706c6f61642075 *73696e672067706773090000006964656e746974793d740100000069731f000000475047206964 *656e74697479207573656420746f207369676e2066696c65736301000000010000000200000043 *000000733a0000006401007c00005f00006401007c00005f01006401007c00005f02006402007c *00005f03007404007c00005f05006400007c00005f07006400005328030000004e740000000069 *0000000028080000007408000000757365726e616d65740800000070617373776f7264740a0000 *007265706f7369746f7279740d00000073686f775f726573706f6e7365740500000046616c7365 *520700000074040000004e6f6e6574080000006964656e74697479280100000074040000007365 *6c662800000000280000000073320000006275696c645c62646973742e77696e33325c6567675c *7365747570746f6f6c735c636f6d6d616e645c75706c6f61642e70797412000000696e69746961 *6c697a655f6f7074696f6e7327000000730c000000000109010901090109010901630100000003 *000000040000004300000073380100007c00006900006f1b00017c00006901000c6f1000017402 *006401008301008201006e0100017403006904006905006402008301006fe20001740300690600 *690700740300690400640200196403008302007d01007403006906006908007c01008301006faf *00017c00006909006404007c01001683010001740a00690a006803006405006406003664050064 *070036640500640800368301007d02007c0200690b007c0100830100017c0000690c0070190001 *7c0200690d006409006408008302007c00005f0c006e0100017c0000690e00701900017c020069 *0d006409006406008302007c00005f0e006e0100017c0000690f00701900017c0200690d006409 *006407008302007c00005f0f0071160101711a01016e0100017c0000690c00701000017c000069 *10007c00005f0c006e01000164000053280a0000004e732e0000004d75737420757365202d2d73 *69676e20666f72202d2d6964656e7469747920746f2068617665206d65616e696e677404000000 *484f4d4573070000002e70797069726373180000005573696e672050795049206c6f67696e2066 *726f6d202573520a000000520b000000520c000000520d000000730c0000007365727665722d6c *6f67696e2811000000521100000052070000007414000000446973747574696c734f7074696f6e *4572726f7274020000006f737407000000656e7669726f6e74070000006861735f6b6579740400 *00007061746874040000006a6f696e74060000006578697374737408000000616e6e6f756e6365 *740c000000436f6e666967506172736572740400000072656164520d0000007403000000676574 *520b000000520c000000741200000044454641554c545f5245504f5349544f5259280300000052 *12000000740200000072637406000000636f6e6669672800000000280000000073320000006275 *696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c *75706c6f61642e7079741000000066696e616c697a655f6f7074696f6e732f0000007328000000 *0001150103010d0213011c01130111010901070107010d010d010a0119010a0119010a0121010a *01630100000004000000050000004300000073540000007c000069000069010070100001740200 *6401008301008201006e0100017830007c0000690000690100445d22005c03007d01007d02007d *03007c00006903007c01007c02007c030083030001712a00576400005328020000004e73270000 *004e6f20646973742066696c65206372656174656420696e206561726c69657220636f6d6d616e *642804000000740c000000646973747269627574696f6e740a000000646973745f66696c657352 *15000000740b00000075706c6f61645f66696c65280400000052120000007407000000636f6d6d *616e647409000000707976657273696f6e740800000066696c656e616d65280000000028000000 *0073320000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c *636f6d6d616e645c75706c6f61642e7079740300000072756e46000000730a00000000010d0110 *010d000f0163040000001e0000000a00000043000000733f0500007c00006900006f4d00016401 *006402006403007c03006704007d04007c00006901006f1a00016404007c00006901006702007c *04006405006405002b6e0100017402007c04006406007c0000690300830101016e010001740400 *7c03006407008302006905008300007d05007406006907006908007c03008301007d0600640800 *7d07007c01006409006a02006f2a00017c0000690900690a008300006f1a0001640a00740b0069 *0b00640b00640c00830001167d07006e010001680800640d00640e0036640f00641000367c0000 *690900690c00830000641100367c0000690900690d00830000641200367c06007c050066020064 *1300367c0100641400367c020064150036740e007c0500830100690f00830000641600367d0800 *7c01006417006a02006f340001740b006910008300005c03007d09007d0a007d0b007c09006f14 *00016418007c09007c0a00660200167d0700718501016e2800017c01006419006a02006f1a0001 *641a00740b00690b00640b00640c00830001167d07006e0100017c07007c0800641b003c7c0000 *6900006f3400017406006907006908007c0300830100641c00177404007c0300641c0017830100 *6905008300006602007c0800641d003c6e010001641e007411006912007c0000691300641f0017 *7c000069140017830100691500830000177d0c006420007d0d006421007c0d00177d0e007c0e00 *642200177d0f007416006916008300007d10007800017c0800691700830000445df2005c02007d *11007d12007418007c12008301007418006700008301006a03006f0d00017c12006701007d1200 *6e01000178bd007c1200445db5007d12007418007c12008301007419006a08006f1c0001642300 *7c120064240019167d13007c1200640c00197d12006e0700016408007d1300741a007c12008301 *007d12007c1000691b007c0e00830100017c1000691b006425007c110016830100017c1000691b *007c1300830100017c1000691b00642600830100017c1000691b007c1200830100017c12006f22 *00017c1200642700196428006a02006f1100017c1000691b006429008301000171600201716002 *57712702577c1000691b007c0f00830100017c1000691b00642900830100017c1000691c008300 *007d10007c0000691d00642a007c03007c0000691e0066020016741f0069200083020001742100 *6921007c0000691e008301005c06007d14007d15007d16007d17007d18007d19007c17000c6f10 *00017c18000c6f0800017c19000c70070001742200820100017c1400642b006a02006f13000174 *23006924007c15008301007d1a006e2e00017c1400642c006a02006f1300017423006925007c15 *008301007d1a006e0e0001742200642d007c1400178202006408007d0800741f006920007d1b00 *7975007c1a00692600830000017c1a00692700642e007c1600830200017c1a00692800642f0064 *30007c0d0016830200017c1a00692800643100741a007429007c1000830100830100830200017c *1a006928006432007c0c00830200017c1a00692a00830000017c1a00692b007c10008301000157 *6e320004742c00692d006a0a006f230001017d1c00017c0000691d00741a007c1c00830100741f *00692e00830200016400005301587c1a00692f008300007d1d007c1d006930006433006a02006f *2700017c0000691d006434007c1d006930007c1d0069310066020016741f00692000830200016e *2400017c0000691d006435007c1d006930007c1d0069310066020016741f00692e00830200017c *00006932006f1f000164360064370014477c1d00690500830000476436006437001447486e0100 *016400005328380000004e7403000000677067730d0000002d2d6465746163682d7369676e7302 *0000002d61730c0000002d2d6c6f63616c2d75736572690200000074070000006472795f72756e *74020000007262520a000000740900000062646973745f656767730b0000006275696c74206f6e *202573740500000074657273656901000000740b00000066696c655f75706c6f61647307000000 *3a616374696f6e740100000031740f00000070726f74636f6c5f76657273696f6e74040000006e *616d65740700000076657273696f6e7407000000636f6e74656e74740800000066696c65747970 *655228000000740a0000006d64355f646967657374740900000062646973745f72706d730f0000 *006275696c7420666f72202573202573740a00000062646973745f64756d62730c000000627569 *6c7420666f722025737407000000636f6d6d656e7473040000002e617363740d0000006770675f *7369676e6174757265730600000042617369632074010000003a73330000002d2d2d2d2d2d2d2d *2d2d2d2d2d2d4748534b464a444c47445337353433464a4b4c4648524537353634323735363734 *3332353473030000000a2d2d73020000002d2d730e0000003b66696c656e616d653d2225732269 *00000000732a0000000a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174 *613b206e616d653d2225732273020000000a0a69ffffffff73010000000d73010000000a731300 *00005375626d697474696e6720257320746f202573740400000068747470740500000068747470 *737313000000756e737570706f7274656420736368656d61207404000000504f5354730c000000 *436f6e74656e742d7479706573200000006d756c7469706172742f666f726d2d646174613b2062 *6f756e646172793d2573730e000000436f6e74656e742d6c656e677468740d000000417574686f *72697a6174696f6e69c8000000731800000053657276657220726573706f6e736520282573293a *202573731600000055706c6f6164206661696c656420282573293a20257374010000002d694b00 *00002833000000520700000052110000005202000000522c00000074040000006f70656e521e00 *0000521600000052190000007408000000626173656e616d655224000000740f0000006861735f *6578745f6d6f64756c65737408000000706c6174666f726d74080000006765745f6e616d65740b *0000006765745f76657273696f6e52040000007409000000686578646967657374740400000064 *6973747406000000626173653634740c000000656e636f6465737472696e67520b000000520c00 *0000740500000073747269707408000000537472696e67494f74050000006974656d7374040000 *007479706574050000007475706c65740300000073747274050000007772697465740800000067 *657476616c7565521c000000520d00000052030000007404000000494e464f740800000075726c *7061727365740e000000417373657274696f6e4572726f727407000000687474706c6962740e00 *000048545450436f6e6e656374696f6e740f0000004854545053436f6e6e656374696f6e740700 *0000636f6e6e656374740a00000070757472657175657374740900000070757468656164657274 *030000006c656e740a000000656e6468656164657273740400000073656e647406000000736f63 *6b657474050000006572726f7274050000004552524f52740b000000676574726573706f6e7365 *74060000007374617475737406000000726561736f6e520e000000281e00000052120000005227 *0000005228000000522900000074080000006770675f6172677352350000005243000000523a00 *000074040000006461746152490000005234000000740200000069647404000000617574687408 *000000626f756e64617279740c0000007365705f626f756e64617279740c000000656e645f626f *756e646172797404000000626f647974030000006b6579740500000076616c7565740200000066 *6e7406000000736368656d6174060000006e65746c6f63740300000075726c7406000000706172 *616d73740500000071756572797409000000667261676d656e7473523d00000074080000006c6f *676c6576656c74010000006552060000002800000000280000000073320000006275696c645c62 *646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e645c75706c6f61 *642e707952260000004c00000073ac00000000020a0112010a011a0109010e031501120106011d *011a01030107010701100110010d010701070116020d011501070118010d011a010a020a011301 *2103270306010a010a010c010d000c0219010d010700060113010e010e0206010c010d0111010d *010d010d01180119010d010d010c02200624011f010d0113010d0113020d020601090103010a01 *100109010b011c0110010a0111011301190106020c01100119010e0219010a010a014e28030000 *00730d00000073686f772d726573706f6e73654e7326000000646973706c61792066756c6c2072 *6573706f6e736520746578742066726f6d20736572766572280300000073040000007369676e52 *08000000731e0000007369676e2066696c657320746f2075706c6f6164207573696e6720677067 *280300000073090000006964656e746974793d5209000000731f000000475047206964656e7469 *7479207573656420746f207369676e2066696c6573280b00000074080000005f5f6e616d655f5f *740a0000005f5f6d6f64756c655f5f740b0000006465736372697074696f6e5220000000521000 *0000740c000000757365725f6f7074696f6e73740f000000626f6f6c65616e5f6f7074696f6e73 *52130000005223000000522a000000522600000028000000002800000000280000000073320000 *006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d61 *6e645c75706c6f61642e7079520500000016000000731c00000006020602060306010a01000103 *010001030109020c02090809170906281500000074070000005f5f646f635f5f74100000006469 *73747574696c732e6572726f7273740e000000646973747574696c732e636f7265520100000074 *0f000000646973747574696c732e737061776e52020000007409000000646973747574696c7352 *030000007407000000686173686c69625204000000740b000000496d706f72744572726f725216 *00000052600000005245000000521d0000005257000000524a0000005255000000740900000063 *537472696e67494f524d0000005205000000280000000028000000002800000000733200000062 *75696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c636f6d6d616e64 *5c75706c6f61642e707974080000003c6d6f64756c653e03000000732200000006020a01100110 *011001030114010e0115010c010c010c010c010c010c010c010c02 addfile ./setuptools-0.6c14devdev.egg/setuptools/depends.py hunk ./setuptools-0.6c14devdev.egg/setuptools/depends.py 1 +from __future__ import generators +import sys, imp, marshal +from imp import PKG_DIRECTORY, PY_COMPILED, PY_SOURCE, PY_FROZEN +from distutils.version import StrictVersion, LooseVersion + +__all__ = [ + 'Require', 'find_module', 'get_module_constant', 'extract_constant' +] + +class Require: + """A prerequisite to building or installing a distribution""" + + def __init__(self,name,requested_version,module,homepage='', + attribute=None,format=None + ): + + if format is None and requested_version is not None: + format = StrictVersion + + if format is not None: + requested_version = format(requested_version) + if attribute is None: + attribute = '__version__' + + self.__dict__.update(locals()) + del self.self + + + def full_name(self): + """Return full package/distribution name, w/version""" + if self.requested_version is not None: + return '%s-%s' % (self.name,self.requested_version) + return self.name + + + def version_ok(self,version): + """Is 'version' sufficiently up-to-date?""" + return self.attribute is None or self.format is None or \ + str(version)<>"unknown" and version >= self.requested_version + + + def get_version(self, paths=None, default="unknown"): + + """Get version number of installed module, 'None', or 'default' + + Search 'paths' for module. If not found, return 'None'. If found, + return the extracted version attribute, or 'default' if no version + attribute was specified, or the value cannot be determined without + importing the module. The version is formatted according to the + requirement's version format (if any), unless it is 'None' or the + supplied 'default'. + """ + + if self.attribute is None: + try: + f,p,i = find_module(self.module,paths) + if f: f.close() + return default + except ImportError: + return None + + v = get_module_constant(self.module,self.attribute,default,paths) + + if v is not None and v is not default and self.format is not None: + return self.format(v) + + return v + + + def is_present(self,paths=None): + """Return true if dependency is present on 'paths'""" + return self.get_version(paths) is not None + + + def is_current(self,paths=None): + """Return true if dependency is present and up-to-date on 'paths'""" + version = self.get_version(paths) + if version is None: + return False + return self.version_ok(version) + + +def _iter_code(code): + + """Yield '(op,arg)' pair for each operation in code object 'code'""" + + from array import array + from dis import HAVE_ARGUMENT, EXTENDED_ARG + + bytes = array('b',code.co_code) + eof = len(code.co_code) + + ptr = 0 + extended_arg = 0 + + while ptr=HAVE_ARGUMENT: + + arg = bytes[ptr+1] + bytes[ptr+2]*256 + extended_arg + ptr += 3 + + if op==EXTENDED_ARG: + extended_arg = arg * 65536L + continue + + else: + arg = None + ptr += 1 + + yield op,arg + + + + + + + + + + +def find_module(module, paths=None): + """Just like 'imp.find_module()', but with package support""" + + parts = module.split('.') + + while parts: + part = parts.pop(0) + f, path, (suffix,mode,kind) = info = imp.find_module(part, paths) + + if kind==PKG_DIRECTORY: + parts = parts or ['__init__'] + paths = [path] + + elif parts: + raise ImportError("Can't find %r in %s" % (parts,module)) + + return info + + + + + + + + + + + + + + + + + + + + + + + + +def get_module_constant(module, symbol, default=-1, paths=None): + + """Find 'module' by searching 'paths', and extract 'symbol' + + Return 'None' if 'module' does not exist on 'paths', or it does not define + 'symbol'. If the module defines 'symbol' as a constant, return the + constant. Otherwise, return 'default'.""" + + try: + f, path, (suffix,mode,kind) = find_module(module,paths) + except ImportError: + # Module doesn't exist + return None + + try: + if kind==PY_COMPILED: + f.read(8) # skip magic & date + code = marshal.load(f) + elif kind==PY_FROZEN: + code = imp.get_frozen_object(module) + elif kind==PY_SOURCE: + code = compile(f.read(), path, 'exec') + else: + # Not something we can parse; we'll have to import it. :( + if module not in sys.modules: + imp.load_module(module,f,path,(suffix,mode,kind)) + return getattr(sys.modules[module],symbol,None) + + finally: + if f: + f.close() + + return extract_constant(code,symbol,default) + + + + + + + + +def extract_constant(code,symbol,default=-1): + """Extract the constant value of 'symbol' from 'code' + + If the name 'symbol' is bound to a constant value by the Python code + object 'code', return that value. If 'symbol' is bound to an expression, + return 'default'. Otherwise, return 'None'. + + Return value is based on the first assignment to 'symbol'. 'symbol' must + be a global, or at least a non-"fast" local in the code block. That is, + only 'STORE_NAME' and 'STORE_GLOBAL' opcodes are checked, and 'symbol' + must be present in 'code.co_names'. + """ + + if symbol not in code.co_names: + # name's not there, can't possibly be an assigment + return None + + name_idx = list(code.co_names).index(symbol) + + STORE_NAME = 90 + STORE_GLOBAL = 97 + LOAD_CONST = 100 + + const = default + + for op, arg in _iter_code(code): + + if op==LOAD_CONST: + const = code.co_consts[arg] + elif arg==name_idx and (op==STORE_NAME or op==STORE_GLOBAL): + return const + else: + const = default + +if sys.platform.startswith('java') or sys.platform == 'cli': + # XXX it'd be better to test assertions about bytecode instead... + del extract_constant, get_module_constant + __all__.remove('extract_constant') + __all__.remove('get_module_constant') + + addfile ./setuptools-0.6c14devdev.egg/setuptools/depends.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/depends.pyc oldhex * newhex *d1f20d0a481ef84b6300000000000000000a00000040000000730c0100006400006401006b0000 *6c01005a0100016400006402006b02005a02006400006402006b03005a03006400006402006b04 *005a04006400006403006b03006c05005a05006c06005a06006c07005a07006c08005a08000164 *00006404006b09006c0a005a0a006c0b005a0b00016405006406006407006408006704005a0c00 *640500641000640900840000830000595a0d00640a008400005a0e00640200640b008401005a10 *00640000640200640c008402005a1100640000640d008401005a1200650200691300691400640e *0083010070100001650200691300640f006a02006f2400015b12005b1100650c00691500640800 *83010001650c00691500640700830100016e01000164020053281100000069ffffffff28010000 *00740a00000067656e657261746f72734e2804000000740d000000504b475f4449524543544f52 *59740b00000050595f434f4d50494c4544740900000050595f534f55524345740900000050595f *46524f5a454e2802000000740d00000053747269637456657273696f6e740c0000004c6f6f7365 *56657273696f6e740700000052657175697265740b00000066696e645f6d6f64756c6574130000 *006765745f6d6f64756c655f636f6e7374616e747410000000657874726163745f636f6e737461 *6e74630000000000000000040000004200000073590000006500005a01006400005a0200640100 *6409006409006402008403005a04006403008400005a05006404008400005a0600640900640500 *6406008402005a07006409006407008401005a08006409006408008401005a09005253280a0000 *007337000000412070726572657175697369746520746f206275696c64696e67206f7220696e73 *74616c6c696e67206120646973747269627574696f6e7400000000630700000007000000020000 *004300000073750000007c06006400006a08006f1700017c02006400006a09006f0a0001740100 *7d06006e0100017c06006400006a09006f2700017c06007c02008301007d02007c05006400006a *08006f0a00016401007d0500715800016e0100017c000069020069030074040083000083010001 *7c00006005006400005328020000004e740b0000005f5f76657273696f6e5f5f28060000007404 *0000004e6f6e65520500000074080000005f5f646963745f5f7406000000757064617465740600 *00006c6f63616c73740400000073656c662807000000521100000074040000006e616d65741100 *00007265717565737465645f76657273696f6e74060000006d6f64756c657408000000686f6d65 *7061676574090000006174747269627574657406000000666f726d617428000000002800000000 *733f000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576 *6465762e6567675c7365747570746f6f6c735c646570656e64732e707974080000005f5f696e69 *745f5f0d000000731000000000041a010a020d010c010d010e0213016301000000010000000300 *000043000000732c0000007c00006900006402006a09006f1500016401007c00006902007c0000 *6900006602001653017c0000690200532803000000733000000052657475726e2066756c6c2070 *61636b6167652f646973747269627574696f6e206e616d652c20772f76657273696f6e73050000 *0025732d25734e28030000005213000000520d0000005212000000280100000052110000002800 *0000002800000000733f000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c7365747570746f6f6c735c646570656e64732e70797409 *00000066756c6c5f6e616d651d0000007306000000000210011501630200000002000000020000 *004300000073400000007c00006900006402006a0800703000017c00006902006402006a080070 *2000017403007c01008301006401006a03006f0d00017c01007c00006904006a05005328030000 *0073250000004973202776657273696f6e272073756666696369656e746c792075702d746f2d64 *6174653f7407000000756e6b6e6f776e4e28050000005216000000520d00000052170000007403 *000000737472521300000028020000005211000000740700000076657273696f6e280000000028 *00000000733f000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c7365747570746f6f6c735c646570656e64732e7079740a00000076 *657273696f6e5f6f6b24000000730400000000022001521a000000630300000007000000080000 *004300000073ba0000007c00006900006401006a08006f5300017938007402007c00006903007c *01008302005c03007d03007d04007d05007c03006f0e00017c0300690400830000016e0100017c *02005357716300047405006a0a006f0800010101016401005301586e0100017406007c00006903 *007c00006900007c02007c01008304007d06007c06006401006a09006f2b00017c06007c02006a *09006f1e00017c00006907006401006a09006f0e00017c00006907007c060083010053017c0600 *53280200000073d70100004765742076657273696f6e206e756d626572206f6620696e7374616c *6c6564206d6f64756c652c20274e6f6e65272c206f72202764656661756c74270a0a2020202020 *202020536561726368202770617468732720666f72206d6f64756c652e20204966206e6f742066 *6f756e642c2072657475726e20274e6f6e65272e2020496620666f756e642c0a20202020202020 *2072657475726e20746865206578747261637465642076657273696f6e20617474726962757465 *2c206f72202764656661756c7427206966206e6f2076657273696f6e0a20202020202020206174 *7472696275746520776173207370656369666965642c206f72207468652076616c75652063616e *6e6f742062652064657465726d696e656420776974686f75740a2020202020202020696d706f72 *74696e6720746865206d6f64756c652e20205468652076657273696f6e20697320666f726d6174 *746564206163636f7264696e6720746f207468650a2020202020202020726571756972656d656e *7427732076657273696f6e20666f726d61742028696620616e79292c20756e6c65737320697420 *697320274e6f6e6527206f72207468650a2020202020202020737570706c696564202764656661 *756c74272e0a20202020202020204e28080000005216000000520d000000520800000052140000 *007405000000636c6f7365740b000000496d706f72744572726f72520900000052170000002807 *000000521100000074050000007061746873740700000064656661756c74740100000066740100 *00007074010000006974010000007628000000002800000000733f000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574757074 *6f6f6c735c646570656e64732e7079740b0000006765745f76657273696f6e2a00000073180000 *00000c100103011b0107000e0108010e010a021b022a010e026302000000020000000200000043 *00000073130000007c00006900007c01008301006401006a0900532802000000732f0000005265 *7475726e207472756520696620646570656e64656e63792069732070726573656e74206f6e2027 *7061746873274e28020000005226000000520d0000002802000000521100000052200000002800 *0000002800000000733f000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c7365747570746f6f6c735c646570656e64732e7079740a *00000069735f70726573656e744600000073020000000002630200000003000000020000004300 *0000732e0000007c00006900007c01008301007d02007c02006401006a08006f05000174020053 *017c00006903007c0200830100532802000000733e00000052657475726e207472756520696620 *646570656e64656e63792069732070726573656e7420616e642075702d746f2d64617465206f6e *20277061746873274e28040000005226000000520d000000740500000046616c7365521d000000 *280300000052110000005220000000521c00000028000000002800000000733f000000433a5c74 *61686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c73 *65747570746f6f6c735c646570656e64732e7079740a00000069735f63757272656e744b000000 *730800000000020f010d0105014e280a00000074080000005f5f6e616d655f5f740a0000005f5f *6d6f64756c655f5f74070000005f5f646f635f5f520d00000052180000005219000000521d0000 *00522600000052270000005229000000280000000028000000002800000000733f000000433a5c *7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c *7365747570746f6f6c735c646570656e64732e707952070000000a000000731000000006010602 *03010f0f090709060f1c0c0563010000000a000000060000006300000073ec0000006401006402 *006b00006c00007d0100016401006403006b01006c02007d02006c03007d0300017c0100640400 *7c00006904008302007d04007405007c00006904008301007d05006405007d06006405007d0700 *7892007c06007c05006a00006f8400017c04007c0600197d08007c08007c02006a05006f4e0001 *7c04007c060064060017197c04007c0600640700171964080014177c0700177d09007c06006409 *00377d06007c08007c03006a02006f1100017c0900640a00147d070071560071d800016e110001 *640b007d09007c0600640600377d06007c08007c090066020056017156000157640b0053280c00 *0000733e0000005969656c642027286f702c6172672927207061697220666f722065616368206f *7065726174696f6e20696e20636f6465206f626a6563742027636f64652769ffffffff28010000 *00740500000061727261792802000000740d000000484156455f415247554d454e54740c000000 *455854454e4445445f415247740100000062690000000069010000006902000000690001000069 *030000006c02000000000002004e2807000000522d0000007403000000646973522e000000522f *0000007407000000636f5f636f646574030000006c656e520d000000280a000000740400000063 *6f6465522d000000522e000000522f000000740500000062797465737403000000656f66740300 *0000707472740c000000657874656e6465645f61726774020000006f7074030000006172672800 *0000002800000000733f000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c7365747570746f6f6c735c646570656e64732e7079740a *0000005f697465725f636f646553000000732400000000041001160212010f020601060203000d *020a020d0222010a020d010a010b0306010a0263020000000a000000040000004300000073a400 *00007c00006900006401008301007d0200788e007c02006f8600017c0200690100640200830100 *7d03007402006903007c03007c0100830200045c03007d04007d05005c03007d06007d07007d08 *007d09007c08007404006a02006f1d00017c0200700700016403006701007d02007c0500670100 *7d0100711200017c02006f1a00017405006404007c02007c000066020016830100820100711200 *0171120001577c090053280500000073370000004a757374206c696b652027696d702e66696e64 *5f6d6f64756c652829272c206275742077697468207061636b61676520737570706f7274740100 *00002e69000000005218000000731300000043616e27742066696e6420257220696e2025732806 *000000740500000073706c69747403000000706f707403000000696d7052080000005201000000 *521f000000280a0000005214000000522000000074050000007061727473740400000070617274 *5222000000740400000070617468740600000073756666697874040000006d6f64657404000000 *6b696e647404000000696e666f28000000002800000000733f000000433a5c7461686f652d6c61 *66735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f *6c735c646570656e64732e707952080000007c000000731600000000030f02030007010f012802 *0d0110010d0207011f0263040000000a0000000d0000004300000073290100007925007400007c *00007c03008302005c03007d04007d05005c03007d06007d07007d0800576e1400047401006a0a *006f0800010101016403005301587ac4007c08007403006a02006f2000017c0400690400640100 *830100017405006906007c04008301007d09006e9400017c08007407006a02006f130001740800 *6909007c00008301007d09006e7400017c0800740a006a02006f1c0001740b007c040069040083 *00007c05006402008303007d09006e4b00017c0000740c00690d006a07006f230001740800690e *007c00007c04007c05007c06007c07007c0800660300830400016e010001740f00740c00690d00 *7c0000197c010064030083030053576403007c04006f0e00017c0400691000830000016e010001 *587411007c09007c01007c020083030053280400000073fc00000046696e6420276d6f64756c65 *2720627920736561726368696e6720277061746873272c20616e64206578747261637420277379 *6d626f6c270a0a2020202052657475726e20274e6f6e652720696620276d6f64756c652720646f *6573206e6f74206578697374206f6e20277061746873272c206f7220697420646f6573206e6f74 *20646566696e650a202020202773796d626f6c272e2020496620746865206d6f64756c65206465 *66696e6573202773796d626f6c27206173206120636f6e7374616e742c2072657475726e207468 *650a20202020636f6e7374616e742e20204f74686572776973652c2072657475726e2027646566 *61756c74272e69080000007404000000657865634e28120000005208000000521f000000520d00 *0000520200000074040000007265616474070000006d61727368616c74040000006c6f61645204 *000000523f00000074110000006765745f66726f7a656e5f6f626a656374520300000074070000 *00636f6d70696c65740300000073797374070000006d6f64756c6573740b0000006c6f61645f6d *6f64756c65740700000067657461747472521e000000520a000000280a00000052140000007406 *00000073796d626f6c522100000052200000005222000000524200000052430000005244000000 *5245000000523400000028000000002800000000733f000000433a5c7461686f652d6c6166735c *7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c *646570656e64732e70795209000000a500000073240000000008030125010e02060203010d010d *0113010d0113010d011c03100123011b0307010f0263030000000a000000030000004300000073 *b60000007c01007c00006900006a07006f05000164040053017402007c00006900008301006903 *007c01008301007d03006401007d04006402007d05006403007d06007c02007d0700786a007404 *007c0000830100445d5c005c02007d08007d09007c08007c06006a02006f1100017c0000690500 *7c0900197d0700715200017c09007c03006a02006f1f00017c08007c04006a0200700d00017c08 *007c05006a02006f0500017c070053017c02007d070071520057640400532805000000730f0200 *00457874726163742074686520636f6e7374616e742076616c7565206f66202773796d626f6c27 *2066726f6d2027636f6465270a0a20202020496620746865206e616d65202773796d626f6c2720 *697320626f756e6420746f206120636f6e7374616e742076616c75652062792074686520507974 *686f6e20636f64650a202020206f626a6563742027636f6465272c2072657475726e2074686174 *2076616c75652e20204966202773796d626f6c2720697320626f756e6420746f20616e20657870 *72657373696f6e2c0a2020202072657475726e202764656661756c74272e20204f746865727769 *73652c2072657475726e20274e6f6e65272e0a0a2020202052657475726e2076616c7565206973 *206261736564206f6e207468652066697273742061737369676e6d656e7420746f202773796d62 *6f6c272e20202773796d626f6c27206d7573740a202020206265206120676c6f62616c2c206f72 *206174206c656173742061206e6f6e2d226661737422206c6f63616c20696e2074686520636f64 *6520626c6f636b2e2020546861742069732c0a202020206f6e6c79202753544f52455f4e414d45 *2720616e64202753544f52455f474c4f42414c27206f70636f6465732061726520636865636b65 *642c20616e64202773796d626f6c270a202020206d7573742062652070726573656e7420696e20 *27636f64652e636f5f6e616d6573272e0a20202020695a000000696100000069640000004e2806 *0000007408000000636f5f6e616d6573520d00000074040000006c6973747405000000696e6465 *78523b0000007409000000636f5f636f6e737473280a0000005234000000525100000052210000 *0074080000006e616d655f696478740a00000053544f52455f4e414d45740c00000053544f5245 *5f474c4f42414c740a0000004c4f41445f434f4e53547405000000636f6e73745239000000523a *00000028000000002800000000733f000000433a5c7461686f652d6c6166735c7365747570746f *6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c646570656e6473 *2e7079520a000000ce000000731c000000000d10020502180206010601060206020d000c020d01 *11012701050274040000006a6176617403000000636c6928000000002816000000740a0000005f *5f6675747572655f5f5200000000524d000000523f000000524900000052010000005202000000 *520300000052040000007411000000646973747574696c732e76657273696f6e52050000005206 *00000074070000005f5f616c6c5f5f5207000000523b000000520d000000520800000052090000 *00520a0000007408000000706c6174666f726d740a000000737461727473776974687406000000 *72656d6f7665280000000028000000002800000000733f000000433a5c7461686f652d6c616673 *5c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c73 *5c646570656e64732e707974080000003c6d6f64756c653e01000000731a000000100124012201 *16031203134909290c290f290c22230206010d01 addfile ./setuptools-0.6c14devdev.egg/setuptools/dist.py hunk ./setuptools-0.6c14devdev.egg/setuptools/dist.py 1 +__all__ = ['Distribution'] + +from distutils.core import Distribution as _Distribution +from setuptools.depends import Require +from setuptools.command.install import install +from setuptools.command.sdist import sdist +from setuptools.command.install_lib import install_lib +from distutils.errors import DistutilsOptionError, DistutilsPlatformError +from distutils.errors import DistutilsSetupError +import setuptools, pkg_resources, distutils.core, distutils.dist, distutils.cmd +import os, distutils.log + +def _get_unpatched(cls): + """Protect against re-patching the distutils if reloaded + + Also ensures that no other distutils extension monkeypatched the distutils + first. + """ + while cls.__module__.startswith('setuptools'): + cls, = cls.__bases__ + if not cls.__module__.startswith('distutils'): + raise AssertionError( + "distutils has already been patched by %r" % cls + ) + return cls + +_Distribution = _get_unpatched(_Distribution) + +sequence = tuple, list + +def check_importable(dist, attr, value): + try: + ep = pkg_resources.EntryPoint.parse('x='+value) + assert not ep.extras + except (TypeError,ValueError,AttributeError,AssertionError): + raise DistutilsSetupError( + "%r must be importable 'module:attrs' string (got %r)" + % (attr,value) + ) + + +def assert_string_list(dist, attr, value): + """Verify that value is a string list or None""" + try: + assert ''.join(value)!=value + except (TypeError,ValueError,AttributeError,AssertionError): + raise DistutilsSetupError( + "%r must be a list of strings (got %r)" % (attr,value) + ) + +def check_nsp(dist, attr, value): + """Verify that namespace packages are valid""" + assert_string_list(dist,attr,value) + for nsp in value: + if not dist.has_contents_for(nsp): + raise DistutilsSetupError( + "Distribution contains no modules or packages for " + + "namespace package %r" % nsp + ) + if '.' in nsp: + parent = '.'.join(nsp.split('.')[:-1]) + if parent not in value: + distutils.log.warn( + "%r is declared as a package namespace, but %r is not:" + " please correct this in setup.py", nsp, parent + ) + +def check_extras(dist, attr, value): + """Verify that extras_require mapping is valid""" + try: + for k,v in value.items(): + list(pkg_resources.parse_requirements(v)) + except (TypeError,ValueError,AttributeError): + raise DistutilsSetupError( + "'extras_require' must be a dictionary whose values are " + "strings or lists of strings containing valid project/version " + "requirement specifiers." + ) + + + + +def assert_bool(dist, attr, value): + """Verify that value is True, False, 0, or 1""" + if bool(value) != value: + raise DistutilsSetupError( + "%r must be a boolean value (got %r)" % (attr,value) + ) +def check_requirements(dist, attr, value): + """Verify that install_requires is a valid requirements list""" + try: + list(pkg_resources.parse_requirements(value)) + except (TypeError,ValueError): + raise DistutilsSetupError( + "%r must be a string or list of strings " + "containing valid project/version requirement specifiers" % (attr,) + ) +def check_entry_points(dist, attr, value): + """Verify that entry_points map is parseable""" + try: + pkg_resources.EntryPoint.parse_map(value) + except ValueError, e: + raise DistutilsSetupError(e) + +def check_test_suite(dist, attr, value): + if not isinstance(value,basestring): + raise DistutilsSetupError("test_suite must be a string") + +def check_package_data(dist, attr, value): + """Verify that value is a dictionary of package names to glob lists""" + if isinstance(value,dict): + for k,v in value.items(): + if not isinstance(k,str): break + try: iter(v) + except TypeError: + break + else: + return + raise DistutilsSetupError( + attr+" must be a dictionary mapping package names to lists of " + "wildcard patterns" + ) + +class Distribution(_Distribution): + """Distribution with support for features, tests, and package data + + This is an enhanced version of 'distutils.dist.Distribution' that + effectively adds the following new optional keyword arguments to 'setup()': + + 'install_requires' -- a string or sequence of strings specifying project + versions that the distribution requires when installed, in the format + used by 'pkg_resources.require()'. They will be installed + automatically when the package is installed. If you wish to use + packages that are not available in PyPI, or want to give your users an + alternate download location, you can add a 'find_links' option to the + '[easy_install]' section of your project's 'setup.cfg' file, and then + setuptools will scan the listed web pages for links that satisfy the + requirements. + + 'extras_require' -- a dictionary mapping names of optional "extras" to the + additional requirement(s) that using those extras incurs. For example, + this:: + + extras_require = dict(reST = ["docutils>=0.3", "reSTedit"]) + + indicates that the distribution can optionally provide an extra + capability called "reST", but it can only be used if docutils and + reSTedit are installed. If the user installs your package using + EasyInstall and requests one of your extras, the corresponding + additional requirements will be installed if needed. + + 'features' -- a dictionary mapping option names to 'setuptools.Feature' + objects. Features are a portion of the distribution that can be + included or excluded based on user options, inter-feature dependencies, + and availability on the current system. Excluded features are omitted + from all setup commands, including source and binary distributions, so + you can create multiple distributions from the same source tree. + Feature names should be valid Python identifiers, except that they may + contain the '-' (minus) sign. Features can be included or excluded + via the command line options '--with-X' and '--without-X', where 'X' is + the name of the feature. Whether a feature is included by default, and + whether you are allowed to control this from the command line, is + determined by the Feature object. See the 'Feature' class for more + information. + + 'test_suite' -- the name of a test suite to run for the 'test' command. + If the user runs 'python setup.py test', the package will be installed, + and the named test suite will be run. The format is the same as + would be used on a 'unittest.py' command line. That is, it is the + dotted name of an object to import and call to generate a test suite. + + 'package_data' -- a dictionary mapping package names to lists of filenames + or globs to use to find data files contained in the named packages. + If the dictionary has filenames or globs listed under '""' (the empty + string), those names will be searched for in every package, in addition + to any names for the specific package. Data files found using these + names/globs will be installed along with the package, in the same + location as the package. Note that globs are allowed to reference + the contents of non-package subdirectories, as long as you use '/' as + a path separator. (Globs are automatically converted to + platform-specific paths at runtime.) + + In addition to these new keywords, this class also has several new methods + for manipulating the distribution's contents. For example, the 'include()' + and 'exclude()' methods can be thought of as in-place add and subtract + commands that add or remove packages, modules, extensions, and so on from + the distribution. They are used by the feature subsystem to configure the + distribution for the included and excluded features. + """ + + _patched_dist = None + + def patch_missing_pkg_info(self, attrs): + # Fake up a replacement for the data that would normally come from + # PKG-INFO, but which might not yet be built if this is a fresh + # checkout. + # + if not attrs or 'name' not in attrs or 'version' not in attrs: + return + key = pkg_resources.safe_name(str(attrs['name'])).lower() + dist = pkg_resources.working_set.by_key.get(key) + if dist is not None and not dist.has_metadata('PKG-INFO'): + dist._version = pkg_resources.safe_version(str(attrs['version'])) + self._patched_dist = dist + + def __init__ (self, attrs=None): + have_package_data = hasattr(self, "package_data") + if not have_package_data: + self.package_data = {} + self.require_features = [] + self.features = {} + self.dist_files = [] + self.patch_missing_pkg_info(attrs) + # Make sure we have any eggs needed to interpret 'attrs' + if attrs is not None: + self.dependency_links = attrs.pop('dependency_links', []) + assert_string_list(self,'dependency_links',self.dependency_links) + if attrs and 'setup_requires' in attrs: + self.fetch_build_eggs(attrs.pop('setup_requires')) + for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'): + if not hasattr(self,ep.name): + setattr(self,ep.name,None) + _Distribution.__init__(self,attrs) + if isinstance(self.metadata.version, (int,long,float)): + # Some people apparently take "version number" too literally :) + self.metadata.version = str(self.metadata.version) + + def parse_command_line(self): + """Process features after parsing command line options""" + result = _Distribution.parse_command_line(self) + if self.features: + self._finalize_features() + return result + + def _feature_attrname(self,name): + """Convert feature name to corresponding option attribute name""" + return 'with_'+name.replace('-','_') + + def fetch_build_eggs(self, requires): + """Resolve pre-setup requirements""" + from pkg_resources import working_set, parse_requirements + for dist in working_set.resolve( + parse_requirements(requires), installer=self.fetch_build_egg + ): + working_set.add(dist) + + def finalize_options(self): + _Distribution.finalize_options(self) + if self.features: + self._set_global_opts_from_features() + + for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'): + value = getattr(self,ep.name,None) + if value is not None: + ep.require(installer=self.fetch_build_egg) + ep.load()(self, ep.name, value) + + def fetch_build_egg(self, req): + """Fetch an egg needed for building""" + try: + cmd = self._egg_fetcher + except AttributeError: + from setuptools.command.easy_install import easy_install + dist = self.__class__({'script_args':['easy_install']}) + dist.parse_config_files() + opts = dist.get_option_dict('easy_install') + keep = ( + 'find_links', 'site_dirs', 'index_url', 'optimize', + 'site_dirs', 'allow_hosts' + ) + for key in opts.keys(): + if key not in keep: + del opts[key] # don't use any other settings + if self.dependency_links: + links = self.dependency_links[:] + if 'find_links' in opts: + links = opts['find_links'][1].split() + links + opts['find_links'] = ('setup', links) + cmd = easy_install( + dist, args=["x"], install_dir=os.curdir, exclude_scripts=True, + always_copy=False, build_directory=None, editable=False, + upgrade=False, multi_version=True, no_report = True + ) + cmd.ensure_finalized() + self._egg_fetcher = cmd + return cmd.easy_install(req) + + def _set_global_opts_from_features(self): + """Add --with-X/--without-X options based on optional features""" + + go = [] + no = self.negative_opt.copy() + + for name,feature in self.features.items(): + self._set_feature(name,None) + feature.validate(self) + + if feature.optional: + descr = feature.description + incdef = ' (default)' + excdef='' + if not feature.include_by_default(): + excdef, incdef = incdef, excdef + + go.append(('with-'+name, None, 'include '+descr+incdef)) + go.append(('without-'+name, None, 'exclude '+descr+excdef)) + no['without-'+name] = 'with-'+name + + self.global_options = self.feature_options = go + self.global_options + self.negative_opt = self.feature_negopt = no + + + + + + + + + + + + + + + + + + + def _finalize_features(self): + """Add/remove features and resolve dependencies between them""" + + # First, flag all the enabled items (and thus their dependencies) + for name,feature in self.features.items(): + enabled = self.feature_is_included(name) + if enabled or (enabled is None and feature.include_by_default()): + feature.include_in(self) + self._set_feature(name,1) + + # Then disable the rest, so that off-by-default features don't + # get flagged as errors when they're required by an enabled feature + for name,feature in self.features.items(): + if not self.feature_is_included(name): + feature.exclude_from(self) + self._set_feature(name,0) + + + def get_command_class(self, command): + """Pluggable version of get_command_class()""" + if command in self.cmdclass: + return self.cmdclass[command] + + for ep in pkg_resources.iter_entry_points('distutils.commands',command): + ep.require(installer=self.fetch_build_egg) + self.cmdclass[command] = cmdclass = ep.load() + return cmdclass + else: + return _Distribution.get_command_class(self, command) + + def print_commands(self): + for ep in pkg_resources.iter_entry_points('distutils.commands'): + if ep.name not in self.cmdclass: + cmdclass = ep.load(False) # don't require extras, we're not running + self.cmdclass[ep.name] = cmdclass + return _Distribution.print_commands(self) + + + + + + def _set_feature(self,name,status): + """Set feature's inclusion status""" + setattr(self,self._feature_attrname(name),status) + + def feature_is_included(self,name): + """Return 1 if feature is included, 0 if excluded, 'None' if unknown""" + return getattr(self,self._feature_attrname(name)) + + def include_feature(self,name): + """Request inclusion of feature named 'name'""" + + if self.feature_is_included(name)==0: + descr = self.features[name].description + raise DistutilsOptionError( + descr + " is required, but was excluded or is not available" + ) + self.features[name].include_in(self) + self._set_feature(name,1) + + def include(self,**attrs): + """Add items to distribution that are named in keyword arguments + + For example, 'dist.exclude(py_modules=["x"])' would add 'x' to + the distribution's 'py_modules' attribute, if it was not already + there. + + Currently, this method only supports inclusion for attributes that are + lists or tuples. If you need to add support for adding to other + attributes in this or a subclass, you can add an '_include_X' method, + where 'X' is the name of the attribute. The method will be called with + the value passed to 'include()'. So, 'dist.include(foo={"bar":"baz"})' + will try to call 'dist._include_foo({"bar":"baz"})', which can then + handle whatever special inclusion logic is needed. + """ + for k,v in attrs.items(): + include = getattr(self, '_include_'+k, None) + if include: + include(v) + else: + self._include_misc(k,v) + + def exclude_package(self,package): + """Remove packages, modules, and extensions in named package""" + + pfx = package+'.' + if self.packages: + self.packages = [ + p for p in self.packages + if p<>package and not p.startswith(pfx) + ] + + if self.py_modules: + self.py_modules = [ + p for p in self.py_modules + if p<>package and not p.startswith(pfx) + ] + + if self.ext_modules: + self.ext_modules = [ + p for p in self.ext_modules + if p.name<>package and not p.name.startswith(pfx) + ] + + + def has_contents_for(self,package): + """Return true if 'exclude_package(package)' would do something""" + + pfx = package+'.' + + for p in self.iter_distribution_names(): + if p==package or p.startswith(pfx): + return True + + + + + + + + + + + def _exclude_misc(self,name,value): + """Handle 'exclude()' for list/tuple attrs without a special handler""" + if not isinstance(value,sequence): + raise DistutilsSetupError( + "%s: setting must be a list or tuple (%r)" % (name, value) + ) + try: + old = getattr(self,name) + except AttributeError: + raise DistutilsSetupError( + "%s: No such distribution setting" % name + ) + if old is not None and not isinstance(old,sequence): + raise DistutilsSetupError( + name+": this setting cannot be changed via include/exclude" + ) + elif old: + setattr(self,name,[item for item in old if item not in value]) + + def _include_misc(self,name,value): + """Handle 'include()' for list/tuple attrs without a special handler""" + + if not isinstance(value,sequence): + raise DistutilsSetupError( + "%s: setting must be a list (%r)" % (name, value) + ) + try: + old = getattr(self,name) + except AttributeError: + raise DistutilsSetupError( + "%s: No such distribution setting" % name + ) + if old is None: + setattr(self,name,value) + elif not isinstance(old,sequence): + raise DistutilsSetupError( + name+": this setting cannot be changed via include/exclude" + ) + else: + setattr(self,name,old+[item for item in value if item not in old]) + + def exclude(self,**attrs): + """Remove items from distribution that are named in keyword arguments + + For example, 'dist.exclude(py_modules=["x"])' would remove 'x' from + the distribution's 'py_modules' attribute. Excluding packages uses + the 'exclude_package()' method, so all of the package's contained + packages, modules, and extensions are also excluded. + + Currently, this method only supports exclusion from attributes that are + lists or tuples. If you need to add support for excluding from other + attributes in this or a subclass, you can add an '_exclude_X' method, + where 'X' is the name of the attribute. The method will be called with + the value passed to 'exclude()'. So, 'dist.exclude(foo={"bar":"baz"})' + will try to call 'dist._exclude_foo({"bar":"baz"})', which can then + handle whatever special exclusion logic is needed. + """ + for k,v in attrs.items(): + exclude = getattr(self, '_exclude_'+k, None) + if exclude: + exclude(v) + else: + self._exclude_misc(k,v) + + def _exclude_packages(self,packages): + if not isinstance(packages,sequence): + raise DistutilsSetupError( + "packages: setting must be a list or tuple (%r)" % (packages,) + ) + map(self.exclude_package, packages) + + + + + + + + + + + + + def _parse_command_opts(self, parser, args): + # Remove --with-X/--without-X options when processing command args + self.global_options = self.__class__.global_options + self.negative_opt = self.__class__.negative_opt + + # First, expand any aliases + command = args[0] + aliases = self.get_option_dict('aliases') + while command in aliases: + src,alias = aliases[command] + del aliases[command] # ensure each alias can expand only once! + import shlex + args[:1] = shlex.split(alias,True) + command = args[0] + + nargs = _Distribution._parse_command_opts(self, parser, args) + + # Handle commands that want to consume all remaining arguments + cmd_class = self.get_command_class(command) + if getattr(cmd_class,'command_consumes_arguments',None): + self.get_option_dict(command)['args'] = ("command line", nargs) + if nargs is not None: + return [] + + return nargs + + + + + + + + + + + + + + + + + def get_cmdline_options(self): + """Return a '{cmd: {opt:val}}' map of all command-line options + + Option names are all long, but do not include the leading '--', and + contain dashes rather than underscores. If the option doesn't take + an argument (e.g. '--quiet'), the 'val' is 'None'. + + Note that options provided by config files are intentionally excluded. + """ + + d = {} + + for cmd,opts in self.command_options.items(): + + for opt,(src,val) in opts.items(): + + if src != "command line": + continue + + opt = opt.replace('_','-') + + if val==0: + cmdobj = self.get_command_obj(cmd) + neg_opt = self.negative_opt.copy() + neg_opt.update(getattr(cmdobj,'negative_opt',{})) + for neg,pos in neg_opt.items(): + if pos==opt: + opt=neg + val=None + break + else: + raise AssertionError("Shouldn't be able to get here") + + elif val==1: + val = None + + d.setdefault(cmd,{})[opt] = val + + return d + + + def iter_distribution_names(self): + """Yield all packages, modules, and extension names in distribution""" + + for pkg in self.packages or (): + yield pkg + + for module in self.py_modules or (): + yield module + + for ext in self.ext_modules or (): + if isinstance(ext,tuple): + name, buildinfo = ext + else: + name = ext.name + if name.endswith('module'): + name = name[:-6] + yield name + +# Install it throughout the distutils +for module in distutils.dist, distutils.core, distutils.cmd: + module.Distribution = Distribution + + + + + + + + + + + + + + + + + + + + +class Feature: + """A subset of the distribution that can be excluded if unneeded/wanted + + Features are created using these keyword arguments: + + 'description' -- a short, human readable description of the feature, to + be used in error messages, and option help messages. + + 'standard' -- if true, the feature is included by default if it is + available on the current system. Otherwise, the feature is only + included if requested via a command line '--with-X' option, or if + another included feature requires it. The default setting is 'False'. + + 'available' -- if true, the feature is available for installation on the + current system. The default setting is 'True'. + + 'optional' -- if true, the feature's inclusion can be controlled from the + command line, using the '--with-X' or '--without-X' options. If + false, the feature's inclusion status is determined automatically, + based on 'availabile', 'standard', and whether any other feature + requires it. The default setting is 'True'. + + 'require_features' -- a string or sequence of strings naming features + that should also be included if this feature is included. Defaults to + empty list. May also contain 'Require' objects that should be + added/removed from the distribution. + + 'remove' -- a string or list of strings naming packages to be removed + from the distribution if this feature is *not* included. If the + feature *is* included, this argument is ignored. This argument exists + to support removing features that "crosscut" a distribution, such as + defining a 'tests' feature that removes all the 'tests' subpackages + provided by other features. The default for this argument is an empty + list. (Note: the named package(s) or modules must exist in the base + distribution when the 'setup()' function is initially called.) + + other keywords -- any other keyword arguments are saved, and passed to + the distribution's 'include()' and 'exclude()' methods when the + feature is included or excluded, respectively. So, for example, you + could pass 'packages=["a","b"]' to cause packages 'a' and 'b' to be + added or removed from the distribution as appropriate. + + A feature must include at least one 'requires', 'remove', or other + keyword argument. Otherwise, it can't affect the distribution in any way. + Note also that you can subclass 'Feature' to create your own specialized + feature types that modify the distribution in other ways when included or + excluded. See the docstrings for the various methods here for more detail. + Aside from the methods, the only feature attributes that distributions look + at are 'description' and 'optional'. + """ + def __init__(self, description, standard=False, available=True, + optional=True, require_features=(), remove=(), **extras + ): + + self.description = description + self.standard = standard + self.available = available + self.optional = optional + if isinstance(require_features,(str,Require)): + require_features = require_features, + + self.require_features = [ + r for r in require_features if isinstance(r,str) + ] + er = [r for r in require_features if not isinstance(r,str)] + if er: extras['require_features'] = er + + if isinstance(remove,str): + remove = remove, + self.remove = remove + self.extras = extras + + if not remove and not require_features and not extras: + raise DistutilsSetupError( + "Feature %s: must define 'require_features', 'remove', or at least one" + " of 'packages', 'py_modules', etc." + ) + + def include_by_default(self): + """Should this feature be included by default?""" + return self.available and self.standard + + def include_in(self,dist): + + """Ensure feature and its requirements are included in distribution + + You may override this in a subclass to perform additional operations on + the distribution. Note that this method may be called more than once + per feature, and so should be idempotent. + + """ + + if not self.available: + raise DistutilsPlatformError( + self.description+" is required," + "but is not available on this platform" + ) + + dist.include(**self.extras) + + for f in self.require_features: + dist.include_feature(f) + + + + def exclude_from(self,dist): + + """Ensure feature is excluded from distribution + + You may override this in a subclass to perform additional operations on + the distribution. This method will be called at most once per + feature, and only after all included features have been asked to + include themselves. + """ + + dist.exclude(**self.extras) + + if self.remove: + for item in self.remove: + dist.exclude_package(item) + + + + def validate(self,dist): + + """Verify that feature makes sense in context of distribution + + This method is called by the distribution just before it parses its + command line. It checks to ensure that the 'remove' attribute, if any, + contains only valid package/module names that are present in the base + distribution when 'setup()' is called. You may override it in a + subclass to perform any other required validation of the feature + against a target distribution. + """ + + for item in self.remove: + if not dist.has_contents_for(item): + raise DistutilsSetupError( + "%s wants to be able to remove %s, but the distribution" + " doesn't contain any packages or modules under %s" + % (self.description, item, item) + ) addfile ./setuptools-0.6c14devdev.egg/setuptools/dist.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/dist.pyc oldhex * newhex *d1f20d0a4a1ef84b6300000000000000001300000040000000739e0100006400006701005a0000 *6401006402006b01006c02005a0300016401006403006b04006c05005a0500016401006404006b *06006c07005a0700016401006405006b08006c09005a0900016401006406006b0a006c0b005a0b *00016401006407006b0c006c0d005a0d006c0e005a0e00016401006408006b0c006c0f005a0f00 *016401006409006b10005a10006401006409006b11005a11006401006409006b01005a12006401 *006409006b13005a12006401006409006b14005a12006401006409006b15005a15006401006409 *006b16005a1200640a008400005a17006517006503008301005a03006518006519006602005a1a *00640b008400005a1b00640c008400005a1c00640d008400005a1d00640e008400005a1e00640f *008400005a1f006410008400005a20006411008400005a21006412008400005a22006413008400 *005a2300640000650300660100641400840000830000595a020078290065120069240065120069 *2500651200692600660300445d0f005a27006502006527005f0200717401576415006600006416 *00840000830000595a2800640900532817000000740c000000446973747269627574696f6e69ff *ffffff280100000052000000002801000000740700000052657175697265280100000074070000 *00696e7374616c6c2801000000740500000073646973742801000000740b000000696e7374616c *6c5f6c696228020000007414000000446973747574696c734f7074696f6e4572726f7274160000 *00446973747574696c73506c6174666f726d4572726f7228010000007413000000446973747574 *696c7353657475704572726f724e63010000000100000003000000430000007352000000782400 *7c00006900006901006401008301006f1000017c00006902005c01007d000071030001577c0000 *690000690100640200830100701400017403006403007c0000168301008201006e0100017c0000 *532804000000739500000050726f7465637420616761696e73742072652d7061746368696e6720 *74686520646973747574696c732069662072656c6f616465640a0a20202020416c736f20656e73 *757265732074686174206e6f206f7468657220646973747574696c7320657874656e73696f6e20 *6d6f6e6b6579706174636865642074686520646973747574696c730a2020202066697273742e0a *20202020740a0000007365747570746f6f6c737409000000646973747574696c73732800000064 *6973747574696c732068617320616c7265616479206265656e2070617463686564206279202572 *2804000000740a0000005f5f6d6f64756c655f5f740a0000007374617274737769746874090000 *005f5f62617365735f5f740e000000417373657274696f6e4572726f7228010000007403000000 *636c732800000000280000000073280000006275696c645c62646973742e77696e33325c656767 *5c7365747570746f6f6c735c646973742e7079740e0000005f6765745f756e706174636865640d *000000730e00000000060300130111011301030111026303000000040000000800000043000000 *7368000000792c007400006901006902006401007c0200178301007d03007c03006903000c7007 *000174040082010001576e3500047405007406007407007404006604006a0a006f1d0001010101 *7408006402007c01007c0200660200168301008201006e020001586400005328030000004e7302 *000000783d73340000002572206d75737420626520696d706f727461626c6520276d6f64756c65 *3a61747472732720737472696e672028676f74202572292809000000740d000000706b675f7265 *736f7572636573740a000000456e747279506f696e747405000000706172736574060000006578 *74726173520d0000007409000000547970654572726f72740a00000056616c75654572726f7274 *0e0000004174747269627574654572726f72520700000028040000007404000000646973747404 *00000061747472740500000076616c756574020000006570280000000028000000007328000000 *6275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c646973742e70 *797410000000636865636b5f696d706f727461626c651f000000730e0000000001030116011601 *1a01030103016303000000030000000800000043000000735d0000007921006401006900007c02 *008301007c02006a03007007000174010082010001576e35000474020074030074040074010066 *04006a0a006f1d00010101017405006402007c01007c0200660200168301008201006e02000158 *640300532804000000732a00000056657269667920746861742076616c75652069732061207374 *72696e67206c697374206f72204e6f6e65740000000073250000002572206d7573742062652061 *206c697374206f6620737472696e67732028676f74202572294e280600000074040000006a6f69 *6e520d000000521400000052150000005216000000520700000028030000005217000000521800 *000052190000002800000000280000000073280000006275696c645c62646973742e77696e3332 *5c6567675c7365747570746f6f6c735c646973742e707974120000006173736572745f73747269 *6e675f6c6973742a000000730a0000000002030121011a01030163030000000500000006000000 *4300000073a10000007400007c00007c01007c020083030001788a007c0200445d82007d03007c *00006901007c0300830100701800017402006401006402007c030016178301008201006e010001 *6403007c03006a06006f4700016403006903007c0300690400640300830100640400208301007d *04007c04007c02006a07006f1a00017405006906006907006405007c03007c0400830300017199 *0001711700017117005764060053280700000073280000005665726966792074686174206e616d *657370616365207061636b61676573206172652076616c69647331000000446973747269627574 *696f6e20636f6e7461696e73206e6f206d6f64756c6573206f72207061636b6167657320666f72 *2073140000006e616d657370616365207061636b61676520257274010000002e69ffffffff7355 *0000002572206973206465636c617265642061732061207061636b616765206e616d6573706163 *652c20627574202572206973206e6f743a20706c6561736520636f727265637420746869732069 *6e2073657475702e70794e2808000000521e00000074100000006861735f636f6e74656e74735f *666f725207000000521d000000740500000073706c6974520900000074030000006c6f67740400 *00007761726e280500000052170000005218000000521900000074030000006e73707406000000 *706172656e742800000000280000000073280000006275696c645c62646973742e77696e33325c *6567675c7365747570746f6f6c735c646973742e70797409000000636865636b5f6e7370330000 *00731a000000000210010700060110010301030112020d011c010d010901030163030000000500 *000007000000430000007363000000793400782d007c0200690000830000445d1f005c02007d03 *007d04007401007402006903007c04008301008301000171100057576e28000474040074050074 *06006603006a0a006f1300010101017407006401008301008201006e0200015864020053280300 *0000732b0000005665726966792074686174206578747261735f72657175697265206d61707069 *6e672069732076616c6964738b000000276578747261735f7265717569726527206d7573742062 *6520612064696374696f6e6172792077686f73652076616c7565732061726520737472696e6773 *206f72206c69737473206f6620737472696e677320636f6e7461696e696e672076616c69642070 *726f6a6563742f76657273696f6e20726571756972656d656e7420737065636966696572732e4e *280800000074050000006974656d7374040000006c697374521000000074120000007061727365 *5f726571756972656d656e74735214000000521500000052160000005207000000280500000052 *170000005218000000521900000074010000006b74010000007628000000002800000000732800 *00006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c64697374 *2e7079740c000000636865636b5f65787472617344000000730e000000000203010d000c011b01 *17010301630300000003000000040000004300000073310000007400007c02008301007c02006a *03006f1a00017401006401007c01007c0200660200168301008201006e01000164020053280300 *0000732900000056657269667920746861742076616c756520697320547275652c2046616c7365 *2c20302c206f72203173230000002572206d757374206265206120626f6f6c65616e2076616c75 *652028676f74202572294e28020000007404000000626f6f6c5207000000280300000052170000 *00521800000052190000002800000000280000000073280000006275696c645c62646973742e77 *696e33325c6567675c7365747570746f6f6c735c646973742e7079740b0000006173736572745f *626f6f6c5300000073060000000002130103016303000000030000000600000043000000734a00 *00007917007400007401006902007c020083010083010001576e2c00047403007404006602006a *0a006f1a00010101017405006401007c0100660100168301008201006e02000158640200532803 *0000007339000000566572696679207468617420696e7374616c6c5f7265717569726573206973 *20612076616c696420726571756972656d656e7473206c697374735e0000002572206d75737420 *6265206120737472696e67206f72206c697374206f6620737472696e677320636f6e7461696e69 *6e672076616c69642070726f6a6563742f76657273696f6e20726571756972656d656e74207370 *65636966696572734e280600000052280000005210000000522900000052140000005215000000 *520700000028030000005217000000521800000052190000002800000000280000000073280000 *006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c646973742e *70797412000000636865636b5f726571756972656d656e747359000000730c0000000002030117 *011401030103016303000000040000000500000043000000733c00000079140074000069010069 *02007c020083010001576e2100047403006a0a006f150001017d0300017404007c030083010082 *01006e020001586401005328020000007329000000566572696679207468617420656e7472795f *706f696e7473206d617020697320706172736561626c654e280500000052100000005211000000 *740900000070617273655f6d617052150000005207000000280400000052170000005218000000 *52190000007401000000652800000000280000000073280000006275696c645c62646973742e77 *696e33325c6567675c7365747570746f6f6c735c646973742e70797412000000636865636b5f65 *6e7472795f706f696e747362000000730800000000020301140110016303000000030000000300 *00004300000073240000007400007c020074010083020070100001740200640100830100820100 *6e0100016400005328020000004e731b000000746573745f7375697465206d7573742062652061 *20737472696e672803000000740a0000006973696e7374616e6365740a00000062617365737472 *696e67520700000028030000005217000000521800000052190000002800000000280000000073 *280000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c6469 *73742e70797410000000636865636b5f746573745f737569746569000000730400000000011001 *630300000005000000060000004300000073830000007400007c02007401008302006f5f000178 *5c007c0200690200830000445d46005c02007d03007d04007400007c0300740300830200700500 *01506e010001790e007404007c04008301000157711d00047405006a0a006f0800010101015071 *1d000158711d0057640100536e0100017406007c01006402001783010082010064010053280300 *0000734000000056657269667920746861742076616c756520697320612064696374696f6e6172 *79206f66207061636b616765206e616d657320746f20676c6f62206c697374734e734900000020 *6d75737420626520612064696374696f6e617279206d617070696e67207061636b616765206e61 *6d657320746f206c69737473206f662077696c6463617264207061747465726e73280700000052 *330000007404000000646963745227000000740300000073747274040000006974657252140000 *0052070000002805000000521700000052180000005219000000522a000000522b000000280000 *0000280000000073280000006275696c645c62646973742e77696e33325c6567675c7365747570 *746f6f6c735c646973742e70797412000000636865636b5f7061636b6167655f646174616d0000 *007318000000000210010d000c011000050103000e010e010a0208010301630000000000000000 *020000004200000073ef0000006500005a01006400005a02006419005a04006401008400005a05 *006419006402008401005a06006403008400005a07006404008400005a08006405008400005a09 *006406008400005a0a006407008400005a0b006408008400005a0c006409008400005a0d00640a *008400005a0e00640b008400005a0f00640c008400005a1000640d008400005a1100640e008400 *005a1200640f008400005a13006410008400005a14006411008400005a15006412008400005a16 *006413008400005a17006414008400005a18006415008400005a19006416008400005a1a006417 *008400005a1b006418008400005a1c005253281a00000073780f0000446973747269627574696f *6e207769746820737570706f727420666f722066656174757265732c2074657374732c20616e64 *207061636b61676520646174610a0a202020205468697320697320616e20656e68616e63656420 *76657273696f6e206f662027646973747574696c732e646973742e446973747269627574696f6e *2720746861740a202020206566666563746976656c7920616464732074686520666f6c6c6f7769 *6e67206e6577206f7074696f6e616c206b6579776f726420617267756d656e747320746f202773 *657475702829273a0a0a202020202027696e7374616c6c5f726571756972657327202d2d206120 *737472696e67206f722073657175656e6365206f6620737472696e67732073706563696679696e *672070726f6a6563740a202020202020202076657273696f6e7320746861742074686520646973 *747269627574696f6e207265717569726573207768656e20696e7374616c6c65642c20696e2074 *686520666f726d61740a2020202020202020757365642062792027706b675f7265736f75726365 *732e726571756972652829272e2020546865792077696c6c20626520696e7374616c6c65640a20 *202020202020206175746f6d61746963616c6c79207768656e20746865207061636b6167652069 *7320696e7374616c6c65642e2020496620796f75207769736820746f207573650a202020202020 *20207061636b61676573207468617420617265206e6f7420617661696c61626c6520696e205079 *50492c206f722077616e7420746f206769766520796f757220757365727320616e0a2020202020 *202020616c7465726e61746520646f776e6c6f6164206c6f636174696f6e2c20796f752063616e *206164642061202766696e645f6c696e6b7327206f7074696f6e20746f207468650a2020202020 *202020275b656173795f696e7374616c6c5d272073656374696f6e206f6620796f75722070726f *6a6563742773202773657475702e636667272066696c652c20616e64207468656e0a2020202020 *2020207365747570746f6f6c732077696c6c207363616e20746865206c69737465642077656220 *706167657320666f72206c696e6b7320746861742073617469736679207468650a202020202020 *2020726571756972656d656e74732e0a0a2020202020276578747261735f726571756972652720 *2d2d20612064696374696f6e617279206d617070696e67206e616d6573206f66206f7074696f6e *616c20226578747261732220746f207468650a20202020202020206164646974696f6e616c2072 *6571756972656d656e742873292074686174207573696e672074686f7365206578747261732069 *6e637572732e20466f72206578616d706c652c0a2020202020202020746869733a3a0a0a202020 *2020202020202020206578747261735f72657175697265203d20646963742872655354203d205b *22646f637574696c733e3d302e33222c20227265535465646974225d290a0a2020202020202020 *696e6469636174657320746861742074686520646973747269627574696f6e2063616e206f7074 *696f6e616c6c792070726f7669646520616e2065787472610a2020202020202020636170616269 *6c6974792063616c6c6564202272655354222c206275742069742063616e206f6e6c7920626520 *7573656420696620646f637574696c7320616e640a202020202020202072655354656469742061 *726520696e7374616c6c65642e2020496620746865207573657220696e7374616c6c7320796f75 *72207061636b616765207573696e670a202020202020202045617379496e7374616c6c20616e64 *207265717565737473206f6e65206f6620796f7572206578747261732c2074686520636f727265 *73706f6e64696e670a20202020202020206164646974696f6e616c20726571756972656d656e74 *732077696c6c20626520696e7374616c6c6564206966206e65656465642e0a0a20202020202766 *6561747572657327202d2d20612064696374696f6e617279206d617070696e67206f7074696f6e *206e616d657320746f20277365747570746f6f6c732e46656174757265270a2020202020202020 *6f626a656374732e2020466561747572657320617265206120706f7274696f6e206f6620746865 *20646973747269627574696f6e20746861742063616e2062650a2020202020202020696e636c75 *646564206f72206578636c75646564206261736564206f6e2075736572206f7074696f6e732c20 *696e7465722d6665617475726520646570656e64656e636965732c0a2020202020202020616e64 *20617661696c6162696c697479206f6e207468652063757272656e742073797374656d2e202045 *78636c7564656420666561747572657320617265206f6d69747465640a20202020202020206672 *6f6d20616c6c20736574757020636f6d6d616e64732c20696e636c7564696e6720736f75726365 *20616e642062696e61727920646973747269627574696f6e732c20736f0a202020202020202079 *6f752063616e20637265617465206d756c7469706c6520646973747269627574696f6e73206672 *6f6d207468652073616d6520736f7572636520747265652e0a2020202020202020466561747572 *65206e616d65732073686f756c642062652076616c696420507974686f6e206964656e74696669 *6572732c2065786365707420746861742074686579206d61790a2020202020202020636f6e7461 *696e2074686520272d2720286d696e757329207369676e2e202046656174757265732063616e20 *626520696e636c75646564206f72206578636c756465640a202020202020202076696120746865 *20636f6d6d616e64206c696e65206f7074696f6e7320272d2d776974682d582720616e6420272d *2d776974686f75742d58272c207768657265202758272069730a2020202020202020746865206e *616d65206f662074686520666561747572652e2020576865746865722061206665617475726520 *697320696e636c756465642062792064656661756c742c20616e640a2020202020202020776865 *7468657220796f752061726520616c6c6f77656420746f20636f6e74726f6c2074686973206672 *6f6d2074686520636f6d6d616e64206c696e652c2069730a202020202020202064657465726d69 *6e6564206279207468652046656174757265206f626a6563742e20205365652074686520274665 *61747572652720636c61737320666f72206d6f72650a2020202020202020696e666f726d617469 *6f6e2e0a0a202020202027746573745f737569746527202d2d20746865206e616d65206f662061 *207465737420737569746520746f2072756e20666f72207468652027746573742720636f6d6d61 *6e642e0a202020202020202049662074686520757365722072756e732027707974686f6e207365 *7475702e70792074657374272c20746865207061636b6167652077696c6c20626520696e737461 *6c6c65642c0a2020202020202020616e6420746865206e616d6564207465737420737569746520 *77696c6c2062652072756e2e202054686520666f726d6174206973207468652073616d65206173 *0a2020202020202020776f756c642062652075736564206f6e20612027756e6974746573742e70 *792720636f6d6d616e64206c696e652e2020546861742069732c206974206973207468650a2020 *202020202020646f74746564206e616d65206f6620616e206f626a65637420746f20696d706f72 *7420616e642063616c6c20746f2067656e6572617465206120746573742073756974652e0a0a20 *20202020277061636b6167655f6461746127202d2d20612064696374696f6e617279206d617070 *696e67207061636b616765206e616d657320746f206c69737473206f662066696c656e616d6573 *0a20202020202020206f7220676c6f627320746f2075736520746f2066696e6420646174612066 *696c657320636f6e7461696e656420696e20746865206e616d6564207061636b616765732e0a20 *202020202020204966207468652064696374696f6e617279206861732066696c656e616d657320 *6f7220676c6f6273206c697374656420756e6465722027222227202874686520656d7074790a20 *20202020202020737472696e67292c2074686f7365206e616d65732077696c6c20626520736561 *726368656420666f7220696e206576657279207061636b6167652c20696e206164646974696f6e *0a2020202020202020746f20616e79206e616d657320666f722074686520737065636966696320 *7061636b6167652e2020446174612066696c657320666f756e64207573696e672074686573650a *20202020202020206e616d65732f676c6f62732077696c6c20626520696e7374616c6c65642061 *6c6f6e67207769746820746865207061636b6167652c20696e207468652073616d650a20202020 *202020206c6f636174696f6e20617320746865207061636b6167652e20204e6f74652074686174 *20676c6f62732061726520616c6c6f77656420746f207265666572656e63650a20202020202020 *2074686520636f6e74656e7473206f66206e6f6e2d7061636b616765207375626469726563746f *726965732c206173206c6f6e6720617320796f752075736520272f272061730a20202020202020 *2061207061746820736570617261746f722e202028476c6f627320617265206175746f6d617469 *63616c6c7920636f6e76657274656420746f0a2020202020202020706c6174666f726d2d737065 *63696669632070617468732061742072756e74696d652e290a0a20202020496e20616464697469 *6f6e20746f207468657365206e6577206b6579776f7264732c207468697320636c61737320616c *736f20686173207365766572616c206e6577206d6574686f64730a20202020666f72206d616e69 *70756c6174696e672074686520646973747269627574696f6e277320636f6e74656e74732e2020 *466f72206578616d706c652c207468652027696e636c7564652829270a20202020616e64202765 *78636c756465282927206d6574686f64732063616e2062652074686f75676874206f6620617320 *696e2d706c6163652061646420616e642073756274726163740a20202020636f6d6d616e647320 *7468617420616464206f722072656d6f7665207061636b616765732c206d6f64756c65732c2065 *7874656e73696f6e732c20616e6420736f206f6e2066726f6d0a20202020746865206469737472 *69627574696f6e2e20205468657920617265207573656420627920746865206665617475726520 *73756273797374656d20746f20636f6e666967757265207468650a202020206469737472696275 *74696f6e20666f722074686520696e636c7564656420616e64206578636c756465642066656174 *757265732e0a20202020630200000004000000040000004300000073a60000007c01000c701a00 *016401007c01006a0700700d00016402007c01006a07006f050001640000530174000069010074 *02007c0100640100198301008301006903008300007d02007400006904006905006906007c0200 *8301007d03007c03006400006a09006f3a00017c03006908006403008301000c6f290001740000 *6909007402007c0100640200198301008301007c03005f0a007c03007c00005f0b006e01000164 *00005328040000004e74040000006e616d65740700000076657273696f6e7308000000504b472d *494e464f280c00000052100000007409000000736166655f6e616d65523700000074050000006c *6f776572740b000000776f726b696e675f736574740600000062795f6b65797403000000676574 *74040000004e6f6e65740c0000006861735f6d65746164617461740c000000736166655f766572 *73696f6e74080000005f76657273696f6e740d0000005f706174636865645f6469737428040000 *00740400000073656c667405000000617474727374030000006b65795217000000280000000028 *0000000073280000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f *6c735c646973742e7079741600000070617463685f6d697373696e675f706b675f696e666fc100 *0000730e0000000005220105011f0115011e011c01630200000004000000070000004300000073 *450100007400007c00006401008302007d02007c0200700d00016800007c00005f01006e010001 *6700007c00005f02006800007c00005f03006700007c00005f04007c00006905007c0100830100 *017c01006400006a09006f2c00017c01006907006402006700008302007c00005f08007409007c *00006402007c0000690800830300016e0100017c01006f2700016403007c01006a06006f1a0001 *7c0000690a007c0100690700640300830100830100016e010001784100740b00690c0064040083 *0100445d30007d03007400007c00007c0300690d0083020070170001740e007c00007c0300690d *006400008303000171c2000171c20057740f006910007c00007c0100830200017411007c000069 *12006913007414007415007416006603008302006f1c00017417007c0000691200691300830100 *7c00006912005f13006e0100016400005328050000004e740c0000007061636b6167655f646174 *617410000000646570656e64656e63795f6c696e6b73740e00000073657475705f726571756972 *65737318000000646973747574696c732e73657475705f6b6579776f7264732818000000740700 *000068617361747472524a0000007410000000726571756972655f666561747572657374080000 *006665617475726573740a000000646973745f66696c6573524900000052410000007403000000 *706f70524b000000521e000000741000000066657463685f6275696c645f656767735210000000 *7411000000697465725f656e7472795f706f696e7473523a000000740700000073657461747472 *740d0000005f446973747269627574696f6e74080000005f5f696e69745f5f5233000000740800 *00006d65746164617461523b0000007403000000696e7474040000006c6f6e677405000000666c *6f617452370000002804000000524600000052470000007411000000686176655f7061636b6167 *655f64617461521a0000002800000000280000000073280000006275696c645c62646973742e77 *696e33325c6567675c7365747570746f6f6c735c646973742e70795256000000ce000000732600 *000000010f0107010d010901090109010d020d011501170114011a011000060113011b0110011f *026301000000020000000200000043000000732b0000007400006901007c00008301007d01007c *00006902006f0e00017c0000690300830000016e0100017c010053280100000073330000005072 *6f636573732066656174757265732061667465722070617273696e6720636f6d6d616e64206c69 *6e65206f7074696f6e7328040000005255000000741200000070617273655f636f6d6d616e645f *6c696e65524f00000074120000005f66696e616c697a655f666561747572657328020000005246 *0000007406000000726573756c742800000000280000000073280000006275696c645c62646973 *742e77696e33325c6567675c7365747570746f6f6c735c646973742e7079525c000000e4000000 *730800000000020f010a010e01630200000002000000040000004300000073140000006401007c *010069000064020064030083020017532804000000733b000000436f6e76657274206665617475 *7265206e616d6520746f20636f72726573706f6e64696e67206f7074696f6e2061747472696275 *7465206e616d657405000000776974685f74010000002d74010000005f28010000007407000000 *7265706c61636528020000005246000000523a0000002800000000280000000073280000006275 *696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c646973742e707974 *110000005f666561747572655f617474726e616d65eb0000007302000000000263020000000500 *0000050000004300000073500000006401006402006b00006c01007d02006c02007d0300017833 *007c02006903007c03007c01008301006403007c0000690400830101445d13007d04007c020069 *05007c04008301000171350057640400532805000000731e0000005265736f6c7665207072652d *736574757020726571756972656d656e747369ffffffff2802000000523e000000522900000074 *09000000696e7374616c6c65724e28060000005210000000523e00000052290000007407000000 *7265736f6c7665740f00000066657463685f6275696c645f656767740300000061646428050000 *00524600000074080000007265717569726573523e000000522900000052170000002800000000 *280000000073280000006275696c645c62646973742e77696e33325c6567675c7365747570746f *6f6c735c646973742e70795252000000ef000000730a0000000002160109011600060263010000 *0003000000050000004300000073950000007400006901007c0000830100017c00006902006f0e *00017c0000690300830000016e010001786900740400690500640100830100445d58007d010074 *06007c00007c01006907006400008303007d02007c02006400006a09006f3000017c0100690900 *6402007c0000690a00830001017c0100690b008300007c00007c01006907007c02008303000171 *350001713500576400005328030000004e7318000000646973747574696c732e73657475705f6b *6579776f7264735264000000280c0000005255000000741000000066696e616c697a655f6f7074 *696f6e73524f000000741e0000005f7365745f676c6f62616c5f6f7074735f66726f6d5f666561 *747572657352100000005253000000740700000067657461747472523a00000052410000007407 *00000072657175697265526600000074040000006c6f616428030000005246000000521a000000 *52190000002800000000280000000073280000006275696c645c62646973742e77696e33325c65 *67675c7365747570746f6f6c735c646973742e70795269000000f7000000731200000000010d01 *0a010e021000060115010d01130163020000000900000018000000430000007353010000790d00 *7c00006900007d0200576e3601047401006a0a006f2a01010101016401006402006b02006c0300 *7d0300017c0000690400680100640300670100640400368301007d04007c040069050083000001 *7c04006906006403008301007d05006416007d0600782c007c0500690700830000445d1e007d07 *007c07007c06006a07006f0b00017c05007c07003d71730001717300577c00006908006f470001 *7c00006908001e7d08006405007c05006a06006f1c00017c050064050019640a00196909008300 *007c0800177d08006e010001640b007c08006602007c05006405003c6e0100017c03007c040064 *0c00640d00670100640e00740a00690b00640f00740c00641000740d0064110064170064120074 *0d00641300740d00641400740c00641500740c008301097d02007c0200690f00830000017c0200 *7c00005f00006e020001587c02006903007c010083010053281800000073200000004665746368 *20616e20656767206e656564656420666f72206275696c64696e6769ffffffff2801000000740c *000000656173795f696e7374616c6c526e000000740b0000007363726970745f61726773740a00 *000066696e645f6c696e6b737409000000736974655f646972737409000000696e6465785f7572 *6c74080000006f7074696d697a65740b000000616c6c6f775f686f737473690100000074050000 *007365747570740400000061726773740100000078740b000000696e7374616c6c5f646972740f *0000006578636c7564655f73637269707473740b000000616c776179735f636f7079740f000000 *6275696c645f6469726563746f727974080000006564697461626c657407000000757067726164 *65740d0000006d756c74695f76657273696f6e74090000006e6f5f7265706f7274280600000073 *0a00000066696e645f6c696e6b737309000000736974655f646972737309000000696e6465785f *75726c73080000006f7074696d697a657309000000736974655f64697273730b000000616c6c6f *775f686f7374734e2810000000740c0000005f6567675f666574636865725216000000741f0000 *007365747570746f6f6c732e636f6d6d616e642e656173795f696e7374616c6c526e0000007409 *0000005f5f636c6173735f5f741200000070617273655f636f6e6669675f66696c6573740f0000 *006765745f6f7074696f6e5f6469637474040000006b657973524b000000522100000074020000 *006f737406000000637572646972740400000054727565740500000046616c7365524100000074 *10000000656e737572655f66696e616c697a656428090000005246000000740300000072657174 *03000000636d64526e000000521700000074040000006f70747374040000006b65657052480000 *0074050000006c696e6b732800000000280000000073280000006275696c645c62646973742e77 *696e33325c6567675c7365747570746f6f6c735c646973742e7079526600000002010000733200 *0000000203010d010e01100119010a010f02000106020d0006010d010f010a010a010d011c0114 *0103011e01120115020a010e01630100000008000000060000004300000073140100006700007d *01007c00006900006901008300007d020078d1007c0000690200690300830000445dc0005c0200 *7d03007d04007c00006904007c0300640700830200017c04006906007c0000830100017c040069 *07006f8d00017c04006908007d05006401007d06006402007d07007c0400690900830000701100 *017c06007c0700027d07007d06006e0100017c0100690a006403007c0300176407006404007c05 *00177c060017660300830100017c0100690a006405007c0300176407006406007c0500177c0700 *17660300830100016403007c0300177c02006405007c0300173c71250001712500577c01007c00 *00690b0017047c00005f0b007c00005f0c007c0200047c00005f00007c00005f0d006407005328 *08000000733b000000416464202d2d776974682d582f2d2d776974686f75742d58206f7074696f *6e73206261736564206f6e206f7074696f6e616c206665617475726573730a0000002028646566 *61756c7429521c0000007305000000776974682d7308000000696e636c75646520730800000077 *6974686f75742d73080000006578636c756465204e280e000000740c0000006e65676174697665 *5f6f70747404000000636f7079524f0000005227000000740c0000005f7365745f666561747572 *655241000000740800000076616c696461746574080000006f7074696f6e616c740b0000006465 *736372697074696f6e7412000000696e636c7564655f62795f64656661756c7474060000006170 *70656e64740e000000676c6f62616c5f6f7074696f6e73740f000000666561747572655f6f7074 *696f6e73740e000000666561747572655f6e65676f707428080000005246000000740200000067 *6f74020000006e6f523a0000007407000000666561747572657405000000646573637274060000 *00696e6364656674060000006578636465662800000000280000000073280000006275696c645c *62646973742e77696e33325c6567675c7365747570746f6f6c735c646973742e7079526a000000 *200100007322000000000306010f0210000c0110010d020a010901060106010d01110222012201 *1a021701630100000004000000060000004300000073c6000000786e007c000069000069010083 *0000445d5d005c02007d01007d02007c00006902007c01008301007d03007c0300701a00017c03 *006403006a08006f2e00017c02006904008300006f2100017c02006905007c0000830100017c00 *006906007c0100640100830200017110000171100057784e007c0000690000690100830000445d *3d005c02007d01007d02007c00006902007c0100830100702100017c02006907007c0000830100 *017c00006906007c01006402008302000171810001718100576403005328040000007339000000 *4164642f72656d6f766520666561747572657320616e64207265736f6c766520646570656e6465 *6e63696573206265747765656e207468656d690100000069000000004e2808000000524f000000 *52270000007413000000666561747572655f69735f696e636c7564656452410000005296000000 *740a000000696e636c7564655f696e5292000000740c0000006578636c7564655f66726f6d2804 *0000005246000000523a000000529d0000007407000000656e61626c6564280000000028000000 *0073280000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c *646973742e7079525d000000490100007316000000000410000c010f0121010d01180410000c01 *10010d01630200000004000000050000004300000073780000007c01007c00006900006a06006f *0c00017c00006900007c01001953017855007401006902006401007c0100830200445d31007d02 *007c02006903006402007c0000690400830001017c0200690500830000047c00006900007c0100 *3c7d03007c030053577406006907007c00007c0100830200536403005328040000007328000000 *506c75676761626c652076657273696f6e206f66206765745f636f6d6d616e645f636c61737328 *297312000000646973747574696c732e636f6d6d616e647352640000004e280800000074080000 *00636d64636c61737352100000005253000000526c0000005266000000526d0000005255000000 *74110000006765745f636f6d6d616e645f636c617373280400000052460000007407000000636f *6d6d616e64521a00000052a50000002800000000280000000073280000006275696c645c626469 *73742e77696e33325c6567675c7365747570746f6f6c735c646973742e707952a60000005b0100 *007310000000000210010c02130006011301170105026301000000030000000400000043000000 *735d000000784d00740000690100640100830100445d3c007d01007c01006902007c0000690300 *6a07006f2300017c01006904007405008301007d02007c02007c00006903007c01006902003c71 *100001711000577406006907007c00008301005328020000004e7312000000646973747574696c *732e636f6d6d616e6473280800000052100000005253000000523a00000052a5000000526d0000 *0052890000005255000000740e0000007072696e745f636f6d6d616e6473280300000052460000 *00521a00000052a50000002800000000280000000073280000006275696c645c62646973742e77 *696e33325c6567675c7365747570746f6f6c735c646973742e707952a800000067010000730c00 *000000011000060113010f0118016303000000030000000400000043000000731d000000740000 *7c00007c00006901007c01008301007c020083030001640100532802000000731e000000536574 *2066656174757265277320696e636c7573696f6e207374617475734e2802000000525400000052 *6300000028030000005246000000523a0000007406000000737461747573280000000028000000 *0073280000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c *646973742e70795292000000720100007302000000000263020000000200000004000000430000 *0073160000007400007c00007c00006901007c0100830100830200532801000000734100000052 *657475726e2031206966206665617475726520697320696e636c756465642c2030206966206578 *636c756465642c20274e6f6e652720696620756e6b6e6f776e2802000000526b00000052630000 *0028020000005246000000523a0000002800000000280000000073280000006275696c645c6264 *6973742e77696e33325c6567675c7365747570746f6f6c735c646973742e707952a10000007601 *000073020000000002630200000003000000030000004300000073620000007c00006900007c01 *008301006401006a02006f2400017c00006901007c0100196902007d02007403007c0200640200 *178301008201006e0100017c00006901007c0100196904007c0000830100017c00006905007c01 *006403008302000164040053280500000073290000005265717565737420696e636c7573696f6e *206f662066656174757265206e616d656420276e616d6527690000000073320000002069732072 *657175697265642c2062757420776173206578636c75646564206f72206973206e6f7420617661 *696c61626c6569010000004e280600000052a1000000524f0000005295000000520500000052a2 *000000529200000028030000005246000000523a000000529e0000002800000000280000000073 *280000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c6469 *73742e7079740f000000696e636c7564655f666561747572657a010000730c0000000003160110 *01030111021401630100000005000000050000004b000000735c0000007855007c010069000083 *0000445d47005c02007d02007d03007401007c00006401007c0200176402008303007d04007c04 *006f0e00017c04007c030083010001710d00017c00006903007c02007c030083020001710d0057 *64020053280300000073f4020000416464206974656d7320746f20646973747269627574696f6e *207468617420617265206e616d656420696e206b6579776f726420617267756d656e74730a0a20 *20202020202020466f72206578616d706c652c2027646973742e6578636c7564652870795f6d6f *64756c65733d5b2278225d292720776f756c64206164642027782720746f0a2020202020202020 *74686520646973747269627574696f6e2773202770795f6d6f64756c6573272061747472696275 *74652c20696620697420776173206e6f7420616c72656164790a20202020202020207468657265 *2e0a0a202020202020202043757272656e746c792c2074686973206d6574686f64206f6e6c7920 *737570706f72747320696e636c7573696f6e20666f722061747472696275746573207468617420 *6172650a20202020202020206c69737473206f72207475706c65732e2020496620796f75206e65 *656420746f2061646420737570706f727420666f7220616464696e6720746f206f746865720a20 *202020202020206174747269627574657320696e2074686973206f72206120737562636c617373 *2c20796f752063616e2061646420616e20275f696e636c7564655f5827206d6574686f642c0a20 *2020202020202077686572652027582720697320746865206e616d65206f662074686520617474 *7269627574652e2020546865206d6574686f642077696c6c2062652063616c6c65642077697468 *0a20202020202020207468652076616c75652070617373656420746f2027696e636c7564652829 *272e2020536f2c2027646973742e696e636c75646528666f6f3d7b22626172223a2262617a227d *29270a202020202020202077696c6c2074727920746f2063616c6c2027646973742e5f696e636c *7564655f666f6f287b22626172223a2262617a227d29272c2077686963682063616e207468656e *0a202020202020202068616e646c65207768617465766572207370656369616c20696e636c7573 *696f6e206c6f676963206973206e65656465642e0a202020202020202074090000005f696e636c *7564655f4e28040000005227000000526b0000005241000000740d0000005f696e636c7564655f *6d697363280500000052460000005247000000522a000000522b0000007407000000696e636c75 *64652800000000280000000073280000006275696c645c62646973742e77696e33325c6567675c *7365747570746f6f6c735c646973742e707952ad00000085010000730c000000000f0d000c0116 *0107010e02630200000007000000080000004300000073190100007c0100640100177d02007c00 *006900006f4d0001670000047d03007c0000690000445d2f007d04007c04007c01006a03006f1c *00017c04006901007c02008301000c6f0b00017c03007c040012712200017122007e03007c0000 *5f00006e0100017c00006902006f4d0001670000047d05007c0000690200445d2f007d04007c04 *007c01006a03006f1c00017c04006901007c02008301000c6f0b00017c05007c04001271790001 *7179007e05007c00005f02006e0100017c00006903006f530001670000047d06007c0000690300 *445d35007d04007c04006904007c01006a03006f1f00017c04006904006901007c02008301000c *6f0b00017c06007c04001271d0000171d0007e06007c00005f03006e0100016402005328030000 *00733900000052656d6f7665207061636b616765732c206d6f64756c65732c20616e6420657874 *656e73696f6e7320696e206e616d6564207061636b616765521f0000004e280500000074080000 *007061636b61676573520b000000740a00000070795f6d6f64756c6573740b0000006578745f6d *6f64756c6573523a0000002807000000524600000074070000007061636b616765740300000070 *667874040000005f5b315d74010000007074040000005f5b325d74040000005f5b335d28000000 *00280000000073280000006275696c645c62646973742e77696e33325c6567675c736574757074 *6f6f6c735c646973742e7079740f0000006578636c7564655f7061636b6167659b010000731400 *000000030a010a02140139030a02140139030a0214016302000000040000000300000043000000 *73470000007c0100640100177d02007836007c0000690000830000445d28007d03007c03007c01 *006a0200701000017c03006901007c02008301006f050001740200530171170057640200532803 *000000733c00000052657475726e207472756520696620276578636c7564655f7061636b616765 *287061636b616765292720776f756c6420646f20736f6d657468696e67521f0000004e28030000 *007417000000697465725f646973747269627574696f6e5f6e616d6573520b0000005288000000 *2804000000524600000052b100000052b200000052b40000002800000000280000000073280000 *006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c646973742e *70795220000000b2010000730a00000000030a020d0006011d016303000000060000000a000000 *4300000073e00000007400007c0200740100830200701a00017402006401007c01007c02006602 *00168301008201006e0100017913007403007c00007c01008302007d0300576e2300047404006a *0a006f1700010101017402006402007c0100168301008201006e020001587c03006404006a0900 *6f2500017400007c03007401008302000c6f1400017402007c0100640300178301008201006e48 *00017c03006f4000017406007c00007c0100670000047d04007c0300445d1e007d05007c05007c *02006a07006f0b00017c04007c05001271b0000171b0007e0400830300016e0100016404005328 *05000000734100000048616e646c6520276578636c75646528292720666f72206c6973742f7475 *706c6520617474727320776974686f75742061207370656369616c2068616e646c657273280000 *0025733a2073657474696e67206d7573742062652061206c697374206f72207475706c65202825 *7229732000000025733a204e6f207375636820646973747269627574696f6e2073657474696e67 *73340000003a20746869732073657474696e672063616e6e6f74206265206368616e6765642076 *696120696e636c7564652f6578636c7564654e2807000000523300000074080000007365717565 *6e63655207000000526b0000005216000000524100000052540000002806000000524600000052 *3a000000521900000074030000006f6c6452b300000074040000006974656d2800000000280000 *000073280000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c73 *5c646973742e7079740d0000005f6578636c7564655f6d697363c4010000731a00000000021001 *03011702030113010e01030112021e010301110207016303000000060000000b00000043000000 *73ec0000007400007c0200740100830200701a00017402006401007c01007c0200660200168301 *008201006e0100017913007403007c00007c01008302007d0300576e2300047404006a0a006f17 *00010101017402006402007c0100168301008201006e020001587c03006404006a08006f140001 *7406007c00007c01007c0200830300016e6500017400007c030074010083020070140001740200 *7c0100640300178301008201006e4100017406007c00007c01007c0300670000047d04007c0200 *445d1e007d05007c05007c03006a07006f0b00017c04007c05001271bf000171bf007e04001783 *030001640400532805000000734100000048616e646c652027696e636c75646528292720666f72 *206c6973742f7475706c6520617474727320776974686f75742061207370656369616c2068616e *646c6572731f00000025733a2073657474696e67206d7573742062652061206c69737420282572 *29732000000025733a204e6f207375636820646973747269627574696f6e2073657474696e6773 *340000003a20746869732073657474696e672063616e6e6f74206265206368616e676564207669 *6120696e636c7564652f6578636c7564654e2807000000523300000052b9000000520700000052 *6b00000052160000005241000000525400000028060000005246000000523a0000005219000000 *52ba00000052b300000052bb0000002800000000280000000073280000006275696c645c626469 *73742e77696e33325c6567675c7365747570746f6f6c735c646973742e707952ac000000d70100 *00731c0000000003100103011702030113010e01030112020d0114011001030111036301000000 *05000000050000004b000000735c0000007855007c0100690000830000445d47005c02007d0200 *7d03007401007c00006401007c0200176402008303007d04007c04006f0e00017c04007c030083 *010001710d00017c00006903007c02007c030083020001710d0057640200532803000000737f03 *000052656d6f7665206974656d732066726f6d20646973747269627574696f6e20746861742061 *7265206e616d656420696e206b6579776f726420617267756d656e74730a0a2020202020202020 *466f72206578616d706c652c2027646973742e6578636c7564652870795f6d6f64756c65733d5b *2278225d292720776f756c642072656d6f7665202778272066726f6d0a20202020202020207468 *6520646973747269627574696f6e2773202770795f6d6f64756c65732720617474726962757465 *2e20204578636c7564696e67207061636b6167657320757365730a202020202020202074686520 *276578636c7564655f7061636b616765282927206d6574686f642c20736f20616c6c206f662074 *6865207061636b616765277320636f6e7461696e65640a20202020202020207061636b61676573 *2c206d6f64756c65732c20616e6420657874656e73696f6e732061726520616c736f206578636c *756465642e0a0a202020202020202043757272656e746c792c2074686973206d6574686f64206f *6e6c7920737570706f727473206578636c7573696f6e2066726f6d206174747269627574657320 *74686174206172650a20202020202020206c69737473206f72207475706c65732e202049662079 *6f75206e65656420746f2061646420737570706f727420666f72206578636c7564696e67206672 *6f6d206f746865720a20202020202020206174747269627574657320696e2074686973206f7220 *6120737562636c6173732c20796f752063616e2061646420616e20275f6578636c7564655f5827 *206d6574686f642c0a202020202020202077686572652027582720697320746865206e616d6520 *6f6620746865206174747269627574652e2020546865206d6574686f642077696c6c2062652063 *616c6c656420776974680a20202020202020207468652076616c75652070617373656420746f20 *276578636c7564652829272e2020536f2c2027646973742e6578636c75646528666f6f3d7b2262 *6172223a2262617a227d29270a202020202020202077696c6c2074727920746f2063616c6c2027 *646973742e5f6578636c7564655f666f6f287b22626172223a2262617a227d29272c2077686963 *682063616e207468656e0a202020202020202068616e646c652077686174657665722073706563 *69616c206578636c7573696f6e206c6f676963206973206e65656465642e0a2020202020202020 *74090000005f6578636c7564655f4e28040000005227000000526b000000524100000052bc0000 *00280500000052460000005247000000522a000000522b00000074070000006578636c75646528 *00000000280000000073280000006275696c645c62646973742e77696e33325c6567675c736574 *7570746f6f6c735c646973742e707952be000000ed010000730c00000000100d000c0116010701 *0e026302000000020000000300000043000000733b0000007400007c0100740100830200701700 *017402006401007c0100660100168301008201006e0100017403007c00006904007c0100830200 *016400005328020000004e732e0000007061636b616765733a2073657474696e67206d75737420 *62652061206c697374206f72207475706c6520282572292805000000523300000052b900000052 *0700000074030000006d617052b70000002802000000524600000052ae00000028000000002800 *00000073280000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c *735c646973742e707974110000005f6578636c7564655f7061636b616765730402000073080000 *00000110010301140263030000000a000000040000004300000073f90000007c00006900006901 *007c00005f01007c00006900006902007c00005f02007c0200640100197d03007c000069030064 *02008301007d04007855007c03007c04006a06006f4700017c04007c0300195c02007d05007d06 *007c04007c03003d6403006400006b04007d07007c07006905007c06007406008302007c020064 *04002a7c0200640100197d0300713a0001577407006908007c00007c01007c02008303007d0800 *7c00006909007c03008301007d0900740a007c09006405006400008303006f2f00016406007c08 *006602007c00006903007c03008301006407003c7c08006400006a09006f05000167000053016e *0100017c08005328080000004e69000000007407000000616c696173657369ffffffff69010000 *00741a000000636f6d6d616e645f636f6e73756d65735f617267756d656e7473730c000000636f *6d6d616e64206c696e655276000000280c00000052820000005298000000529000000052840000 *00740500000073686c657852210000005288000000525500000074130000005f70617273655f63 *6f6d6d616e645f6f70747352a6000000526b0000005241000000280a0000005246000000740600 *0000706172736572527600000052a700000052c100000074030000007372637405000000616c69 *617352c300000074050000006e617267737409000000636d645f636c6173732800000000280000 *000073280000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c73 *5c646973742e707952c400000016020000732400000000020f010f030a010f0103000d01100107 *010c0116010f0215030f01130119010d01090263010000000b0000000800000043000000732f01 *00006800007d01007822017c0000690000690100830000445d11015c02007d02007d0300780201 *7c0300690100830000445df4005c02007d04005c02007d05007d06007c05006401006a03006f07 *0001712f006e0100017c04006902006402006403008302007d04007c06006404006a02006f8200 *017c00006903007c02008301007d07007c00006904006905008300007d08007c08006906007407 *007c070064050068000083030083010001785f007c0800690100830000445d2a005c02007d0900 *7d0a007c0a007c04006a02006f1100017c09007d04006408007d06005071b8000171b800577409 *006406008301008201006e1800017c06006407006a02006f0a00016408007d06006e0100017c06 *007c0100690a007c02006800008302007c04003c712f0057711600577c01005328090000007368 *01000052657475726e206120277b636d643a207b6f70743a76616c7d7d27206d6170206f662061 *6c6c20636f6d6d616e642d6c696e65206f7074696f6e730a0a20202020202020204f7074696f6e *206e616d65732061726520616c6c206c6f6e672c2062757420646f206e6f7420696e636c756465 *20746865206c656164696e6720272d2d272c20616e640a2020202020202020636f6e7461696e20 *64617368657320726174686572207468616e20756e64657273636f7265732e2020496620746865 *206f7074696f6e20646f65736e27742074616b650a2020202020202020616e20617267756d656e *742028652e672e20272d2d717569657427292c20746865202776616c2720697320274e6f6e6527 *2e0a0a20202020202020204e6f74652074686174206f7074696f6e732070726f76696465642062 *7920636f6e6669672066696c65732061726520696e74656e74696f6e616c6c79206578636c7564 *65642e0a2020202020202020730c000000636f6d6d616e64206c696e6552610000005260000000 *69000000005290000000731d00000053686f756c646e27742062652061626c6520746f20676574 *206865726569010000004e280b000000740f000000636f6d6d616e645f6f7074696f6e73522700 *00005262000000740f0000006765745f636f6d6d616e645f6f626a529000000052910000007406 *000000757064617465526b0000005241000000520d000000740a00000073657464656661756c74 *280b0000005246000000740100000064528c000000528d00000074030000006f707452c6000000 *740300000076616c7406000000636d646f626a74070000006e65675f6f707474030000006e6567 *7403000000706f732800000000280000000073280000006275696c645c62646973742e77696e33 *325c6567675c7365747570746f6f6c735c646973742e707974130000006765745f636d646c696e *655f6f7074696f6e733f020000732e000000000a060210000c020d0012020d01070212020d010f *010f0119010d000c010d0106010601090210020d010a021e026301000000060000000800000063 *00000073ab000000781d007c000069000070040001640400445d0b007d01007c01005601711100 *57781d007c000069010070040001640500445d0b007d02007c02005601713100577864007c0000 *69020070040001640600445d52007d03007403007c03007404008302006f1000017c03005c0200 *7d04007d05006e0a00017c03006905007d04007c04006906006401008301006f0e00017c040064 *0200207d04006e0100017c040056017151005764030053280700000073400000005969656c6420 *616c6c207061636b616765732c206d6f64756c65732c20616e6420657874656e73696f6e206e61 *6d657320696e20646973747269627574696f6e74060000006d6f64756c6569faffffff4e280000 *000028000000002800000000280700000052ae00000052af00000052b000000052330000007405 *0000007475706c65523a0000007408000000656e64737769746828060000005246000000740300 *0000706b6752d60000007403000000657874523a00000074090000006275696c64696e666f2800 *000000280000000073280000006275696c645c62646973742e77696e33325c6567675c73657475 *70746f6f6c735c646973742e707952b800000068020000731c0000000003110006010902110006 *0109021100060110011002090110010e014e281d00000074080000005f5f6e616d655f5f520a00 *000074070000005f5f646f635f5f5241000000524500000052490000005256000000525c000000 *5263000000525200000052690000005266000000526a000000525d00000052a600000052a80000 *00529200000052a100000052aa00000052ad00000052b7000000522000000052bc00000052ac00 *000052be00000052c000000052c400000052d500000052b8000000280000000028000000002800 *00000073280000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c *735c646973742e707952000000007c0000007334000000064106020602090d0c16090709040908 *090b091e09290912090c090b09040904090b091609170912091309160917091209290929740700 *0000466561747572656300000000000000000600000042000000734a0000006500005a01006400 *005a02006503006504006504006406006407006401008405005a05006402008400005a06006403 *008400005a07006404008400005a08006405008400005a09005253280800000073160b00004120 *737562736574206f662074686520646973747269627574696f6e20746861742063616e20626520 *6578636c7564656420696620756e6e65656465642f77616e7465640a0a20202020466561747572 *6573206172652063726561746564207573696e67207468657365206b6579776f72642061726775 *6d656e74733a0a0a202020202020276465736372697074696f6e27202d2d20612073686f72742c *2068756d616e207265616461626c65206465736372697074696f6e206f66207468652066656174 *7572652c20746f0a2020202020202020206265207573656420696e206572726f72206d65737361 *6765732c20616e64206f7074696f6e2068656c70206d657373616765732e0a0a20202020202027 *7374616e6461726427202d2d20696620747275652c20746865206665617475726520697320696e *636c756465642062792064656661756c742069662069742069730a202020202020202020617661 *696c61626c65206f6e207468652063757272656e742073797374656d2e20204f74686572776973 *652c207468652066656174757265206973206f6e6c790a202020202020202020696e636c756465 *642069662072657175657374656420766961206120636f6d6d616e64206c696e6520272d2d7769 *74682d5827206f7074696f6e2c206f722069660a202020202020202020616e6f7468657220696e *636c7564656420666561747572652072657175697265732069742e20205468652064656661756c *742073657474696e67206973202746616c7365272e0a0a20202020202027617661696c61626c65 *27202d2d20696620747275652c20746865206665617475726520697320617661696c61626c6520 *666f7220696e7374616c6c6174696f6e206f6e207468650a20202020202020202063757272656e *742073797374656d2e20205468652064656661756c742073657474696e67206973202754727565 *272e0a0a202020202020276f7074696f6e616c27202d2d20696620747275652c20746865206665 *6174757265277320696e636c7573696f6e2063616e20626520636f6e74726f6c6c65642066726f *6d207468650a202020202020202020636f6d6d616e64206c696e652c207573696e672074686520 *272d2d776974682d5827206f7220272d2d776974686f75742d5827206f7074696f6e732e202049 *660a20202020202020202066616c73652c207468652066656174757265277320696e636c757369 *6f6e207374617475732069732064657465726d696e6564206175746f6d61746963616c6c792c0a *2020202020202020206261736564206f6e2027617661696c6162696c65272c20277374616e6461 *7264272c20616e64207768657468657220616e79206f7468657220666561747572650a20202020 *202020202072657175697265732069742e20205468652064656661756c742073657474696e6720 *6973202754727565272e0a0a20202020202027726571756972655f666561747572657327202d2d *206120737472696e67206f722073657175656e6365206f6620737472696e6773206e616d696e67 *2066656174757265730a202020202020202020746861742073686f756c6420616c736f20626520 *696e636c756465642069662074686973206665617475726520697320696e636c756465642e2020 *44656661756c747320746f0a202020202020202020656d707479206c6973742e20204d61792061 *6c736f20636f6e7461696e20275265717569726527206f626a6563747320746861742073686f75 *6c642062650a20202020202020202061646465642f72656d6f7665642066726f6d207468652064 *6973747269627574696f6e2e0a0a2020202020202772656d6f766527202d2d206120737472696e *67206f72206c697374206f6620737472696e6773206e616d696e67207061636b6167657320746f *2062652072656d6f7665640a20202020202020202066726f6d2074686520646973747269627574 *696f6e20696620746869732066656174757265206973202a6e6f742a20696e636c756465642e20 *204966207468650a20202020202020202066656174757265202a69732a20696e636c756465642c *207468697320617267756d656e742069732069676e6f7265642e20205468697320617267756d65 *6e74206578697374730a202020202020202020746f20737570706f72742072656d6f76696e6720 *66656174757265732074686174202263726f737363757422206120646973747269627574696f6e *2c20737563682061730a202020202020202020646566696e696e67206120277465737473272066 *65617475726520746861742072656d6f76657320616c6c20746865202774657374732720737562 *7061636b616765730a20202020202020202070726f7669646564206279206f7468657220666561 *74757265732e20205468652064656661756c7420666f72207468697320617267756d656e742069 *7320616e20656d7074790a2020202020202020206c6973742e2020284e6f74653a20746865206e *616d6564207061636b616765287329206f72206d6f64756c6573206d7573742065786973742069 *6e2074686520626173650a202020202020202020646973747269627574696f6e207768656e2074 *6865202773657475702829272066756e6374696f6e20697320696e697469616c6c792063616c6c *65642e290a0a2020202020206f74686572206b6579776f726473202d2d20616e79206f74686572 *206b6579776f726420617267756d656e7473206172652073617665642c20616e64207061737365 *6420746f0a20202020202020202074686520646973747269627574696f6e27732027696e636c75 *646528292720616e6420276578636c756465282927206d6574686f6473207768656e207468650a *2020202020202020206665617475726520697320696e636c75646564206f72206578636c756465 *642c20726573706563746976656c792e2020536f2c20666f72206578616d706c652c20796f750a *202020202020202020636f756c64207061737320277061636b616765733d5b2261222c2262225d *2720746f206361757365207061636b616765732027612720616e642027622720746f2062650a20 *20202020202020206164646564206f722072656d6f7665642066726f6d20746865206469737472 *69627574696f6e20617320617070726f7072696174652e0a0a2020202041206665617475726520 *6d75737420696e636c756465206174206c65617374206f6e6520277265717569726573272c2027 *72656d6f7665272c206f72206f746865720a202020206b6579776f726420617267756d656e742e *20204f74686572776973652c2069742063616e2774206166666563742074686520646973747269 *627574696f6e20696e20616e79207761792e0a202020204e6f746520616c736f20746861742079 *6f752063616e20737562636c6173732027466561747572652720746f2063726561746520796f75 *72206f776e207370656369616c697a65640a202020206665617475726520747970657320746861 *74206d6f646966792074686520646973747269627574696f6e20696e206f746865722077617973 *207768656e20696e636c75646564206f720a202020206578636c756465642e2020536565207468 *6520646f63737472696e677320666f722074686520766172696f7573206d6574686f6473206865 *726520666f72206d6f72652064657461696c2e0a2020202041736964652066726f6d2074686520 *6d6574686f64732c20746865206f6e6c7920666561747572652061747472696275746573207468 *617420646973747269627574696f6e73206c6f6f6b0a2020202061742061726520276465736372 *697074696f6e2720616e6420276f7074696f6e616c272e0a2020202063070000000c0000000700 *00004b00000073240100007c01007c00005f00007c02007c00005f01007c03007c00005f02007c *04007c00005f03007404007c05007405007406006602008302006f0d00017c05006601007d0500 *6e010001670000047d08007c0500445d21007d09007404007c09007405008302006f0b00017c08 *007c090012715200017152007e08007c00005f0700670000047d0a007c0500445d21007d090074 *04007c0900740500830200700b00017c0a007c090012718a0001718a007e0a007d0b007c0b006f *0e00017c0b007c07006401003c6e0100017404007c06007405008302006f0d00017c0600660100 *7d06006e0100017c06007c00005f08007c07007c00005f09007c06000c6f2000017c05000c6f18 *00017c07000c6f100001740a006402008301008201006e0100016400005328030000004e524e00 *00007367000000466561747572652025733a206d75737420646566696e65202772657175697265 *5f6665617475726573272c202772656d6f7665272c206f72206174206c65617374206f6e65206f *6620277061636b61676573272c202770795f6d6f64756c6573272c206574632e280b0000005295 *00000074080000007374616e646172647409000000617661696c61626c65529400000052330000 *0052370000005201000000524e000000740600000072656d6f766552130000005207000000280c *0000005246000000529500000052df00000052e00000005294000000524e00000052e100000052 *1300000052b300000074010000007252b500000074020000006572280000000028000000007328 *0000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c646973 *742e70795256000000c302000073220000000004090109010901090116010d033802350107000e *0210010d010901090218010301630100000001000000010000004300000073110000007c000069 *00006f0700017c0000690100532801000000732b00000053686f756c6420746869732066656174 *75726520626520696e636c756465642062792064656661756c743f280200000052e000000052df *000000280100000052460000002800000000280000000073280000006275696c645c6264697374 *2e77696e33325c6567675c7365747570746f6f6c735c646973742e70795296000000df02000073 *020000000002630200000003000000030000004300000073560000007c00006900007017000174 *01007c0000690200640100178301008201006e0100017c01006903007c00006904008d00000178 *1e007c0000690500445d13007d02007c01006906007c020083010001713b005764020053280300 *0000731b010000456e73757265206665617475726520616e642069747320726571756972656d65 *6e74732061726520696e636c7564656420696e20646973747269627574696f6e0a0a2020202020 *202020596f75206d6179206f76657272696465207468697320696e206120737562636c61737320 *746f20706572666f726d206164646974696f6e616c206f7065726174696f6e73206f6e0a202020 *202020202074686520646973747269627574696f6e2e20204e6f74652074686174207468697320 *6d6574686f64206d61792062652063616c6c6564206d6f7265207468616e206f6e63650a202020 *202020202070657220666561747572652c20616e6420736f2073686f756c64206265206964656d *706f74656e742e0a0a202020202020202073320000002069732072657175697265642c62757420 *6973206e6f7420617661696c61626c65206f6e207468697320706c6174666f726d4e2807000000 *52e00000005206000000529500000052ad0000005213000000524e00000052aa00000028030000 *00524600000052170000007401000000662800000000280000000073280000006275696c645c62 *646973742e77696e33325c6567675c7365747570746f6f6c735c646973742e707952a2000000e3 *020000730e000000000a0a010301140410020a0006016302000000030000000300000043000000 *73430000007c01006900007c00006901008d0000017c00006902006f2500017822007c00006902 *00445d13007d02007c01006903007c020083010001712400576e01000164010053280200000073 *32010000456e737572652066656174757265206973206578636c756465642066726f6d20646973 *747269627574696f6e0a0a2020202020202020596f75206d6179206f7665727269646520746869 *7320696e206120737562636c61737320746f20706572666f726d206164646974696f6e616c206f *7065726174696f6e73206f6e0a202020202020202074686520646973747269627574696f6e2e20 *2054686973206d6574686f642077696c6c2062652063616c6c6564206174206d6f7374206f6e63 *65207065720a2020202020202020666561747572652c20616e64206f6e6c792061667465722061 *6c6c20696e636c756465642066656174757265732068617665206265656e2061736b656420746f *0a2020202020202020696e636c756465207468656d73656c7665732e0a20202020202020204e28 *0400000052be000000521300000052e100000052b7000000280300000052460000005217000000 *52bb0000002800000000280000000073280000006275696c645c62646973742e77696e33325c65 *67675c7365747570746f6f6c735c646973742e707952a3000000fa020000730a000000000a1002 *0a010a000601630200000003000000060000004300000073480000007841007c0000690000445d *36007d02007c01006901007c0200830100702000017402006401007c00006903007c02007c0200 *66030016830100820100710a0001710a005764020053280300000073e701000056657269667920 *746861742066656174757265206d616b65732073656e736520696e20636f6e74657874206f6620 *646973747269627574696f6e0a0a202020202020202054686973206d6574686f64206973206361 *6c6c65642062792074686520646973747269627574696f6e206a757374206265666f7265206974 *20706172736573206974730a2020202020202020636f6d6d616e64206c696e652e202049742063 *6865636b7320746f20656e73757265207468617420746865202772656d6f766527206174747269 *627574652c20696620616e792c0a2020202020202020636f6e7461696e73206f6e6c792076616c *6964207061636b6167652f6d6f64756c65206e616d65732074686174206172652070726573656e *7420696e2074686520626173650a2020202020202020646973747269627574696f6e207768656e *202773657475702829272069732063616c6c65642e2020596f75206d6179206f76657272696465 *20697420696e20610a2020202020202020737562636c61737320746f20706572666f726d20616e *79206f746865722072657175697265642076616c69646174696f6e206f66207468652066656174 *7572650a2020202020202020616761696e73742061207461726765742064697374726962757469 *6f6e2e0a2020202020202020736700000025732077616e747320746f2062652061626c6520746f *2072656d6f76652025732c206275742074686520646973747269627574696f6e20646f65736e27 *7420636f6e7461696e20616e79207061636b61676573206f72206d6f64756c657320756e646572 *2025734e280400000052e100000052200000005207000000529500000028030000005246000000 *521700000052bb0000002800000000280000000073280000006275696c645c62646973742e7769 *6e33325c6567675c7365747570746f6f6c735c646973742e707952930000000c030000730c0000 *00000c0a00060110010301030228000000002800000000280a00000052dc000000520a00000052 *dd000000528900000052880000005256000000529600000052a200000052a30000005293000000 *28000000002800000000280000000073280000006275696c645c62646973742e77696e33325c65 *67675c7365747570746f6f6c735c646973742e707952de00000091020000730e00000006310601 *0601121b090409170912282900000074070000005f5f616c6c5f5f740e00000064697374757469 *6c732e636f72655200000000525500000074120000007365747570746f6f6c732e646570656e64 *735201000000741a0000007365747570746f6f6c732e636f6d6d616e642e696e7374616c6c5202 *00000074180000007365747570746f6f6c732e636f6d6d616e642e73646973745203000000741e *0000007365747570746f6f6c732e636f6d6d616e642e696e7374616c6c5f6c6962520400000074 *10000000646973747574696c732e6572726f727352050000005206000000520700000052080000 *0052100000005209000000740e000000646973747574696c732e64697374740d00000064697374 *7574696c732e636d645286000000740d000000646973747574696c732e6c6f67520f00000052d7 *000000522800000052b9000000521b000000521e0000005226000000522c000000522e00000052 *2f00000052320000005235000000523900000052170000007404000000636f7265528c00000052 *d600000052de00000028000000002800000000280000000073280000006275696c645c62646973 *742e77696e33325c6567675c7365747570746f6f6c735c646973742e707974080000003c6d6f64 *756c653e010000007338000000090210011001100110011001160110013c011802090e0c020c02 *090b09090911090f0906090909070904090f16ff00ff0001190006010d15 addfile ./setuptools-0.6c14devdev.egg/setuptools/extension.py hunk ./setuptools-0.6c14devdev.egg/setuptools/extension.py 1 +from distutils.core import Extension as _Extension +from dist import _get_unpatched +_Extension = _get_unpatched(_Extension) + +try: + from Pyrex.Distutils.build_ext import build_ext +except ImportError: + have_pyrex = False +else: + have_pyrex = True + + +class Extension(_Extension): + """Extension that uses '.c' files in place of '.pyx' files""" + + if not have_pyrex: + # convert .pyx extensions to .c + def __init__(self,*args,**kw): + _Extension.__init__(self,*args,**kw) + sources = [] + for s in self.sources: + if s.endswith('.pyx'): + sources.append(s[:-3]+'c') + else: + sources.append(s) + self.sources = sources + +class Library(Extension): + """Just like a regular Extension, but built as a library instead""" + +import sys, distutils.core, distutils.extension +distutils.core.Extension = Extension +distutils.extension.Extension = Extension +if 'distutils.command.build_ext' in sys.modules: + sys.modules['distutils.command.build_ext'].Extension = Extension addfile ./setuptools-0.6c14devdev.egg/setuptools/extension.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/extension.pyc oldhex * newhex *d1f20d0a4c1ef84b6300000000000000000c0000004000000073f20000006400006401006b0000 *6c01005a0200016400006402006b03006c04005a0400016504006502008301005a020079140064 *00006403006b05006c06005a060001576e1900046507006a0a006f0d00010101016508005a0900 *6e08000158650a005a0900640400650200660100640500840000830000595a0100640600650100 *660100640700840000830000595a0b006400006408006b0c005a0c006400006408006b00005a0d *006400006408006b0e005a0d00650100650d00690f005f0100650100650d006910005f01006409 *00650c006911006a06006f140001650100650c00691100640900195f01006e0100016408005328 *0a00000069ffffffff28010000007409000000457874656e73696f6e2801000000740e0000005f *6765745f756e70617463686564280100000074090000006275696c645f65787452000000006300 *00000000000000010000004200000073220000006500005a01006400005a0200650300700d0001 *6401008400005a04006e010001525328020000007337000000457874656e73696f6e2074686174 *207573657320272e63272066696c657320696e20706c616365206f6620272e707978272066696c *6573630100000005000000050000004f00000073700000007400006901007c00007c01007c0200 *8e0100016700007d03007847007c0000690200445d3c007d04007c04006903006401008301006f *1900017c03006904007c0400640200206403001783010001712300017c03006904007c04008301 *0001712300577c03007c00005f02006400005328040000004e73040000002e70797869fdffffff *7401000000632805000000740a0000005f457874656e73696f6e74080000005f5f696e69745f5f *7407000000736f75726365737408000000656e6473776974687406000000617070656e64280500 *0000740400000073656c6674040000006172677374020000006b77520600000074010000007328 *000000002800000000732d0000006275696c645c62646973742e77696e33325c6567675c736574 *7570746f6f6c735c657874656e73696f6e2e707952050000001200000073100000000001130106 *010a000601100119021101280500000074080000005f5f6e616d655f5f740a0000005f5f6d6f64 *756c655f5f74070000005f5f646f635f5f740a000000686176655f707972657852050000002800 *00000028000000002800000000732d0000006275696c645c62646973742e77696e33325c656767 *5c7365747570746f6f6c735c657874656e73696f6e2e707952000000000d000000730600000006 *010602070274070000004c6962726172796300000000000000000100000042000000730e000000 *6500005a01006400005a020052532801000000733d0000004a757374206c696b65206120726567 *756c617220457874656e73696f6e2c20627574206275696c742061732061206c69627261727920 *696e73746561642803000000520d000000520e000000520f000000280000000028000000002800 *000000732d0000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c *735c657874656e73696f6e2e707952110000001c000000730200000006014e731b000000646973 *747574696c732e636f6d6d616e642e6275696c645f6578742812000000740e0000006469737475 *74696c732e636f7265520000000052040000007404000000646973745201000000741900000050 *797265782e446973747574696c732e6275696c645f6578745202000000740b000000496d706f72 *744572726f72740500000046616c73655210000000740400000054727565521100000074030000 *007379737409000000646973747574696c737413000000646973747574696c732e657874656e73 *696f6e7404000000636f72657409000000657874656e73696f6e74070000006d6f64756c657328 *0000000028000000002800000000732d0000006275696c645c62646973742e77696e33325c6567 *675c7365747570746f6f6c735c657874656e73696f6e2e707974080000003c6d6f64756c653e01 *000000731c000000100110010c02030114010e010b020603160f160324010c010c011001 addfile ./setuptools-0.6c14devdev.egg/setuptools/gui.exe binary ./setuptools-0.6c14devdev.egg/setuptools/gui.exe oldhex * newhex *4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000 *000000000000000000000000000000000000000000800000000e1fba0e00b409cd21b8014ccd21 *546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e *0d0d0a2400000000000000504500004c0105002e737d470000000000000000e0000f030b010238 *001000000008000000020000801200000010000000200000000040000010000000020000040000 *00010000000400000000000000006000000004000010cd00000200000000002000001000000000 *1000001000000000000010000000000000000000000000500000d4030000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000002e74657874000000400e00000010 *00000010000000040000000000000000000000000000200000602e646174610000003000000000 *2000000002000000140000000000000000000000000000400000c02e7264617461000050000000 *003000000002000000160000000000000000000000000000400000402e62737300000000700000 *00004000000000000000000000000000000000000000000000800000c02e69646174610000d403 *0000005000000004000000180000000000000000000000000000400000c0000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000005589e583ec18895df88b550831db8975fc8b0231f68b003d910000c077 *433d8d0000c0725bbe01000000c704240800000031d289542404e8c40c000083f801747a85c074 *0ec7042408000000ffd0bbffffffff89d88b75fc8b5df889ec5dc204003d940000c074c2774a3d *930000c074b489d88b75fc8b5df889ec5dc20400903d050000c0745b3d1d0000c075c5c7042404 *00000031f689742404e8600c000083f801746a85c074aac7042404000000ffd0eb9a3d960000c0 *ebd1c7042408000000b901000000894c2404e8300c000085f60f8476ffffffe8630a0000e96cff *ffffc704240b00000031c9894c2404e80c0c000083f801743085c00f8452ffffffc704240b0000 *00ffd0e93fffffffc7042404000000b80100000089442404e8dc0b0000e925ffffffc704240b00 *0000bb01000000895c2404e8c20b0000e90bffffff8db6000000008dbc27000000005589e55383 *ec248d5df8c7042400104000e84a0c000083ec04e8d2080000e8cd090000c745f800000000b800 *4040008d55f4895c24108b0d002040008944240489542408894c240cc7042404404000e88c0b00 *00a11040400085c07463a3102040008b151c51400085d20f859600000083fae07420a110404000 *894424048b1d1c5140008b4b30890c24e8410b00008b151c51400083fac074268b1d1040400089 *5c24048b0d1c5140008b5150891424e81b0b00008d7426008dbc2700000000e8fb0a00008b1d10 *2040008918e8ee07000083e4f0e8c60a00008b08894c24088b150040400089542404a104404000 *890424e8a906000089c3e8920a0000891c24e86a0b0000894424048b151c5140008b4210890424 *e8b50a00008b151c514000e94affffff8d76008dbc27000000005589e583ec08c7042401000000 *ff1514514000e8b8feffff908db426000000005589e583ec08c7042402000000ff1514514000e8 *98feffff908db42600000000558b0d3051400089e55dffe18d742600558b0d2451400089e55dff *e1909090905589e583ec188b450c894424088b450889442404a11c51400083c040890424e89c0a *0000b802000000c9c35589e557565383ec0c8b750889f7fcb9ffffffffb000f2aef7d18d79ffc7 *442404010000008d443f03890424e8540a00008945f0c6002289c242b900000000bb0000000039 *f97d33803c1e5c750341eb1e803c1e22751385c97e09c6025c424985c97ff7c6025c42eb05b900 *0000000fb6041e8802424339fb7ccd85c97e09c6025c424985c97ff7c60222c64201008b45f083 *c40c5b5e5f5dc35589e5565383ec10c744240808000000c7442404000000008b4508890424e808 *0a000083ec0c89c6b80000000085f6743ec744240401000000c7042404010000e8a609000089c3 *85c07417c74424080401000089442404893424e8dc09000083ec0c893424e8e109000083ec0489 *d88d65f85b5e5dc35589e557565381ec4c0400008b75088d5e010fb61684d2741380fa2f7504c6 *43ff5c0fb6034388c284c075ed8d85d8fcffff894424108d85d8fdffff8944240c8d85d8feffff *894424088d45d889442404893424e80c090000807dd800750980bdd8feffff5c750d893424e81a *ffffffe9990000008d85d8fcffff894424108d85d8fdffff8944240c8d9dd8feffff895c24088d *45d8894424048b450c890424e8c008000089dffcb9ffffffffb000f2aef7d18d5c19fe803b5c75 *064b803b5c74198d85d8feffff89c239d8770dc603004b803b5c740439da76f3c7442410000000 *008974240c8d85d8feffff894424088d45d8894424048d9dc8fbffff891c24e84f080000891c24 *e87cfeffff81c44c0400005b5e5f5dc35589e557565383ec1c8b5d0889dffcb9ffffffffb000f2 *aef7d149c744240404000000890c24e8310800008945f089debf00000000c745e8000000008b45 *0cc700000000008b55f0891aeb01430fbe03890424e8d407000085c075f00fb603438845ef84c0 *74150fbec0890424e8ba07000085c07447837de800754185ff7407c6065c464f75f9c60600468b *550c8b024089028b55f0893482807def00750589d0eb65430fbe03890424e87d07000085c075f0 *803b0075a48b45f0eb4b807def5c750347eb96807def22751bf7c7010000007511837de8000f94 *c00fb6c08945e8c645ef00d1ff85ff7407c6065c464f75f9807def000f8460ffffff0fb645ef88 *0646e954ffffff83c41c5b5e5f5dc35589e557565381ec2c020000c7442408000100008d9de8fd *ffff895c2404c7042400000000e87207000083ec0c89dffcb9ffffffffb000f2aef7d18d7419ff *39f37314803e2e740f89d8c606004e39f07305803e2e75f3c606008db5e8fdffff89f7fcb9ffff *ffffb000f2aef7d149c7040e2d736372c7440e046970742ec7440e0870797700c7442404000000 *00893424e8e605000089c383f8ff751589742404c7042400304000e8effbffffe9bf0100008db5 *e8feffffc74424080001000089742404890424e8a005000001c6891c24e8860500008dbde7feff *ff4739f7730f803f00740a803f0a7405803f0d75ecc607008db5e8feffffbf10304000b9020000 *00fcf3a60f97c20f92c038c27425c785e8feffff23217079c785ecfeffff74686f6ec785f0feff *ff2e657865c685f4feffff008d85e4fdffff894424048d85eafeffff890424e8a3fdffff8985dc *fdffff8d85e8fdffff894424048b95dcfdffff8b02890424e86afcffff89c785c0751d8b95dcfd *ffff8b0289442404c7042414304000e811fbffffe9e1000000c7442404040000008b45080385e4 *fdffff40890424e8a20500008985e0fdffff893c24e80ffbffff8b95e0fdffff890289d383c304 *be010000003bb5e4fdffff7d1f8b95dcfdffff8b04b2890424e8e4faffff890383c304463bb5e4 *fdffff7ce18d85e8fdffff890424e8c8faffff890383c304be010000003b75087d198b550c8b04 *b2890424e8abfaffff890383c304463b75087ce7c70300000000837d100074248b85e0fdffff89 *442404893c24e807040000897c2404c7042436304000e847faffffeb1a8b95e0fdffff89542408 *897c2404c7042400000000e8cb0300008d65f45b5e5f5dc35589e55383ec14e87704000089c3e8 *80040000c7442408010000008b13895424048b00890424e85cfdffff83c4145b5dc2100055b810 *00000089e55383ec6483e4f0e84c030000e8d7020000e8f204000089c38d45a8890424e8f50400 *0083ec0485db7506e99f000000430fb60b80f9200f94c080f9090f94c209d0a80175ea80f92274 *3e80f9200f95c031d280f9090f95c285d0744c8db6000000008dbf0000000084c9743c430fb60b *80f9200f95c031d280f9090f95c285d075e6eb248d742600430fb60b80f9220f95c031d284c90f *95c285d075eb80f92274688db60000000080f9200f94c080f9090f94c2eb126690430fb60b80f9 *200f94c280f9090f94c009d0a80175eac7042400000000e84e04000083ec04f645d401ba0a0000 *0074040fb755d8895c240831db895c24048954240c890424e8c3feffff83ec108b5dfcc9c3430f *b60beb98909090909090909055b95030400089e5eb148db6000000008b51048b0183c108018200 *00400081f95030400072ea5dc390909090909090905589e5539c9c5889c23500002000509d9c58 *9d31d0a9000020000f84c000000031c00fa285c00f84b4000000b8010000000fa2f6c6010f85a7 *00000089d381e3008000006685db7407830d2040400002f7c2000080007407830d2040400004f7 *c2000000017407830d2040400008f7c2000000027407830d204040001081e2000000047407830d *2040400020f6c1017407830d2040400040f6c520740a810d2040400080000000b8000000800fa2 *3d00000080762bb8010000800fa2a12040400089c181c90001000081e200000040741e0d000300 *00a320404000908d7426005b5dc3830d2040400001e94dffffff5b890d204040005dc390909090 *909090905589e5dbe35dc39090909090909090905589e583ec08a1202040008338007417ff108b *0d202040008b51048d4104a32020400085d275e9c9c38db426000000005589e55383ec04a1301e *400083f8ff742985c089c3741389f68dbc2700000000ff149d301e40004b75f6c70424501b4000 *e80af7ffff595b5dc331c0833d341e400000eb0a408b1c85341e400085db75f4ebbe8db6000000 *008dbc27000000005589e55383ec048b1d3040400085db7535a1301e4000b901000000890d3040 *400083f8ff742485c089c3740e8d742600ff149d301e40004b75f6c70424501b4000e89af6ffff *585b5dc331c0833d341e400000eb0a408b1485341e400085d275f4ebc390909090909090909090 *9090905189e183c1083d00100000721081e9001000008309002d00100000ebe929c183090089e0 *89cc8b088b4004ffe0909090ff25f450400090900000000000000000ff25e85040009090000000 *0000000000ff25e450400090900000000000000000ff25f050400090900000000000000000ff25 *ec50400090900000000000000000ff251451400090900000000000000000ff2518514000909000 *00000000000000ff250c51400090900000000000000000ff254051400090900000000000000000 *ff251051400090900000000000000000ff252851400090900000000000000000ff250051400090 *900000000000000000ff250851400090900000000000000000ff25045140009090000000000000 *0000ff253c51400090900000000000000000ff252051400090900000000000000000ff252c5140 *0090900000000000000000ff253451400090900000000000000000ff2538514000909000000000 *00000000ff256851400090900000000000000000ff254c51400090900000000000000000ff2564 *51400090900000000000000000ff255851400090900000000000000000ff255051400090900000 *000000000000ff255451400090900000000000000000ff256051400090900000000000000000ff *255c51400090900000000000000000ffffffff00000000ffffffff000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *0000000000000000000000ffffffff000000000000000000000000004000000000000000000000 *000000003c1e400000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *0000000000000000000000000000000043616e6e6f74206f70656e2025730a002321000043616e *6e6f742066696e6420507974686f6e2065786563757461626c652025730a00436f756c64206e6f *742065786563202573000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *000000000000000000000000000000000000000000000000000000000000000000000000000000 *00000000000000000000000000000000000000000054500000000000000000000048530000e450 *00007050000000000000000000009853000000510000bc5000000000000000000000c45300004c *510000000000000000000000000000000000000000000000000000705100007c51000088510000 *90510000985100000000000000000000a4510000b4510000c4510000d4510000e4510000f45100 *0008520000145200001c520000285200003452000040520000505200005c520000685200007452 *00008052000000000000000000008c5200009c520000ac520000c0520000d8520000ec52000000 *530000145300000000000000000000705100007c51000088510000905100009851000000000000 *00000000a4510000b4510000c4510000d4510000e4510000f451000008520000145200001c5200 *00285200003452000040520000505200005c520000685200007452000080520000000000000000 *00008c5200009c520000ac520000c0520000d8520000ec52000000530000145300000000000006 *005f636c6f73650000000012005f6578656376000000003a005f6f70656e0040005f7265616400 *4b005f737061776e7600000027005f5f6765746d61696e617267730031005f5f705f5f5f617267 *630000000032005f5f705f5f5f61726776000000003c005f5f705f5f656e7669726f6e00003e00 *5f5f705f5f666d6f64650000000050005f5f7365745f6170705f747970650000000079005f6365 *78697400000000e9005f696f6200001f015f6d616b6570617468005e015f6f6e65786974000000 *84015f7365746d6f6465000092015f73706c697470617468000000001c02617465786974000000 *00210263616c6c6f63000000003902667072696e74660000005a02697373706163650000009002 *7369676e616c000000009b004578697450726f63657373000000d500467265654c696272617279 *000000ec00476574436f6d6d616e644c696e65410000004d014765744d6f64756c6546696c654e *616d6541000000004f014765744d6f64756c6548616e646c654100008001476574537461727475 *70496e666f410000000b024c6f61644c69627261727945784100000000e002536574556e68616e *646c6564457863657074696f6e46696c7465720000000050000000500000005000000050000000 *5000006d73766372742e646c6c0000145000001450000014500000145000001450000014500000 *145000001450000014500000145000001450000014500000145000001450000014500000145000 *00145000006d73766372742e646c6c000028500000285000002850000028500000285000002850 *000028500000285000004b45524e454c33322e646c6c0000000000000000000000000000000000 *00000000000000000000000000000000000000000000000000000000000000 addfile ./setuptools-0.6c14devdev.egg/setuptools/package_index.py hunk ./setuptools-0.6c14devdev.egg/setuptools/package_index.py 1 +"""PyPI and direct package downloading""" +import sys, os.path, re, urlparse, urllib2, shutil, random, socket, cStringIO +from pkg_resources import * +from distutils import log +from distutils.errors import DistutilsError +try: + from hashlib import md5 +except ImportError: + from md5 import md5 +from fnmatch import translate + +EGG_FRAGMENT = re.compile(r'^egg=([-A-Za-z0-9_.]+)$') +HREF = re.compile("""href\\s*=\\s*['"]?([^'"> ]+)""", re.I) +# this is here to fix emacs' cruddy broken syntax highlighting +PYPI_MD5 = re.compile( + '([^<]+)\n\s+\\(md5\\)' +) +URL_SCHEME = re.compile('([-+.a-z0-9]{2,}):',re.I).match +EXTENSIONS = ".tar.gz .tar.bz2 .tar .zip .tgz".split() + +__all__ = [ + 'PackageIndex', 'distros_for_url', 'parse_bdist_wininst', + 'interpret_distro_name', +] + +def parse_bdist_wininst(name): + """Return (base,pyversion) or (None,None) for possible .exe name""" + + lower = name.lower() + base, py_ver = None, None + + if lower.endswith('.exe'): + if lower.endswith('.win32.exe'): + base = name[:-10] + elif lower.startswith('.win32-py',-16): + py_ver = name[-7:-4] + base = name[:-16] + + return base,py_ver + +def egg_info_for_url(url): + scheme, server, path, parameters, query, fragment = urlparse.urlparse(url) + base = urllib2.unquote(path.split('/')[-1]) + if '#' in base: base, fragment = base.split('#',1) + return base,fragment + +def distros_for_url(url, metadata=None): + """Yield egg or source distribution objects that might be found at a URL""" + base, fragment = egg_info_for_url(url) + for dist in distros_for_location(url, base, metadata): yield dist + if fragment: + match = EGG_FRAGMENT.match(fragment) + if match: + for dist in interpret_distro_name( + url, match.group(1), metadata, precedence = CHECKOUT_DIST + ): + yield dist + +def distros_for_location(location, basename, metadata=None): + """Yield egg or source distribution objects based on basename""" + if basename.endswith('.egg.zip'): + basename = basename[:-4] # strip the .zip + if basename.endswith('.egg') and '-' in basename: + # only one, unambiguous interpretation + return [Distribution.from_location(location, basename, metadata)] + + if basename.endswith('.exe'): + win_base, py_ver = parse_bdist_wininst(basename) + if win_base is not None: + return interpret_distro_name( + location, win_base, metadata, py_ver, BINARY_DIST, "win32" + ) + + # Try source distro extensions (.zip, .tgz, etc.) + # + for ext in EXTENSIONS: + if basename.endswith(ext): + basename = basename[:-len(ext)] + return interpret_distro_name(location, basename, metadata) + return [] # no extension matched + +def distros_for_filename(filename, metadata=None): + """Yield possible egg or source distribution objects based on a filename""" + return distros_for_location( + normalize_path(filename), os.path.basename(filename), metadata + ) + + +def interpret_distro_name(location, basename, metadata, + py_version=None, precedence=SOURCE_DIST, platform=None +): + """Generate alternative interpretations of a source distro name + + Note: if `location` is a filesystem filename, you should call + ``pkg_resources.normalize_path()`` on it before passing it to this + routine! + """ + # Generate alternative interpretations of a source distro name + # Because some packages are ambiguous as to name/versions split + # e.g. "adns-python-1.1.0", "egenix-mx-commercial", etc. + # So, we generate each possible interepretation (e.g. "adns, python-1.1.0" + # "adns-python, 1.1.0", and "adns-python-1.1.0, no version"). In practice, + # the spurious interpretations should be ignored, because in the event + # there's also an "adns" package, the spurious "python-1.1.0" version will + # compare lower than any numeric version number, and is therefore unlikely + # to match a request for it. It's still a potential problem, though, and + # in the long run PyPI and the distutils should go for "safe" names and + # versions in distribution archive names (sdist and bdist). + + parts = basename.split('-') + if not py_version: + for i,p in enumerate(parts[2:]): + if len(p)==5 and p.startswith('py2.'): + return # It's a bdist_dumb, not an sdist -- bail out + + for p in range(1,len(parts)+1): + yield Distribution( + location, metadata, '-'.join(parts[:p]), '-'.join(parts[p:]), + py_version=py_version, precedence = precedence, + platform = platform + ) + +REL = re.compile("""<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>""", re.I) +# this line is here to fix emacs' cruddy broken syntax highlighting + +def find_external_links(url, page): + """Find rel="homepage" and rel="download" links in `page`, yielding URLs""" + + for match in REL.finditer(page): + tag, rel = match.groups() + rels = map(str.strip, rel.lower().split(',')) + if 'homepage' in rels or 'download' in rels: + for match in HREF.finditer(tag): + yield urlparse.urljoin(url, htmldecode(match.group(1))) + + for tag in ("Home Page", "Download URL"): + pos = page.find(tag) + if pos!=-1: + match = HREF.search(page,pos) + if match: + yield urlparse.urljoin(url, htmldecode(match.group(1))) + +user_agent = "Python-urllib/%s setuptools/%s" % ( + urllib2.__version__, require('setuptools')[0].version +) + + +class PackageIndex(Environment): + """A distribution index that scans web pages for download URLs""" + + def __init__(self, index_url="http://pypi.python.org/simple", hosts=('*',), + *args, **kw + ): + Environment.__init__(self,*args,**kw) + self.index_url = index_url + "/"[:not index_url.endswith('/')] + self.scanned_urls = {} + self.fetched_urls = {} + self.package_pages = {} + self.allows = re.compile('|'.join(map(translate,hosts))).match + self.to_scan = [] + + + + def process_url(self, url, retrieve=False): + """Evaluate a URL as a possible download, and maybe retrieve it""" + if url in self.scanned_urls and not retrieve: + return + self.scanned_urls[url] = True + if not URL_SCHEME(url): + self.process_filename(url) + return + else: + dists = list(distros_for_url(url)) + if dists: + if not self.url_ok(url): + return + self.debug("Found link: %s", url) + + if dists or not retrieve or url in self.fetched_urls: + map(self.add, dists) + return # don't need the actual page + + if not self.url_ok(url): + self.fetched_urls[url] = True + return + + self.info("Reading %s", url) + f = self.open_url(url, "Download error: %s -- Some packages may not be found!") + if f is None: return + self.fetched_urls[url] = self.fetched_urls[f.url] = True + + if 'html' not in f.headers.get('content-type', '').lower(): + f.close() # not html, we can't process it + return + + base = f.url # handle redirects + page = f.read() + f.close() + if url.startswith(self.index_url) and getattr(f,'code',None)!=404: + page = self.process_index(url, page) + for match in HREF.finditer(page): + link = urlparse.urljoin(base, htmldecode(match.group(1))) + self.process_url(link) + + def process_filename(self, fn, nested=False): + # process filenames or directories + if not os.path.exists(fn): + self.warn("Not found: %s", fn) + return + + if os.path.isdir(fn) and not nested: + path = os.path.realpath(fn) + for item in os.listdir(path): + self.process_filename(os.path.join(path,item), True) + + dists = distros_for_filename(fn) + if dists: + self.debug("Found: %s", fn) + map(self.add, dists) + + def url_ok(self, url, fatal=False): + if self.allows(urlparse.urlparse(url)[1]): + return True + msg = "\nLink to % s ***BLOCKED*** by --allow-hosts\n" + if fatal: + raise DistutilsError(msg % url) + else: + self.warn(msg, url) + + def scan_egg_links(self, search_path): + for item in search_path: + if os.path.isdir(item): + for entry in os.listdir(item): + if entry.endswith('.egg-link'): + self.scan_egg_link(item, entry) + + def scan_egg_link(self, path, entry): + lines = filter(None, map(str.strip, file(os.path.join(path, entry)))) + if len(lines)==2: + for dist in find_distributions(os.path.join(path, lines[0])): + dist.location = os.path.join(path, *lines) + dist.precedence = SOURCE_DIST + self.add(dist) + + + def process_index(self,url,page): + """Process the contents of a PyPI page""" + def scan(link): + # Process a URL to see if it's for a package page + if link.startswith(self.index_url): + parts = map( + urllib2.unquote, link[len(self.index_url):].split('/') + ) + if len(parts)==2 and '#' not in parts[1]: + # it's a package page, sanitize and index it + pkg = safe_name(parts[0]) + ver = safe_version(parts[1]) + self.package_pages.setdefault(pkg.lower(),{})[link] = True + return to_filename(pkg), to_filename(ver) + return None, None + + # process an index page into the package-page index + for match in HREF.finditer(page): + scan( urlparse.urljoin(url, htmldecode(match.group(1))) ) + + pkg, ver = scan(url) # ensure this page is in the page index + if pkg: + # process individual package page + for new_url in find_external_links(url, page): + # Process the found URL + base, frag = egg_info_for_url(new_url) + if base.endswith('.py') and not frag: + if ver: + new_url+='#egg=%s-%s' % (pkg,ver) + else: + self.need_version_info(url) + self.scan_url(new_url) + + return PYPI_MD5.sub( + lambda m: '%s' % m.group(1,3,2), page + ) + else: + return "" # no sense double-scanning non-package pages + + + + def need_version_info(self, url): + self.scan_all( + "Page at %s links to .py file(s) without version info; an index " + "scan is required.", url + ) + + def scan_all(self, msg=None, *args): + if self.index_url not in self.fetched_urls: + if msg: self.warn(msg,*args) + self.info( + "Scanning index of all packages (this may take a while)" + ) + self.scan_url(self.index_url) + + def find_packages(self, requirement): + self.scan_url(self.index_url + requirement.unsafe_name+'/') + + if not self.package_pages.get(requirement.key): + # Fall back to safe version of the name + self.scan_url(self.index_url + requirement.project_name+'/') + + if not self.package_pages.get(requirement.key): + # We couldn't find the target package, so search the index page too + self.not_found_in_index(requirement) + + for url in list(self.package_pages.get(requirement.key,())): + # scan each page that might be related to the desired package + self.scan_url(url) + + def obtain(self, requirement, installer=None): + self.prescan(); self.find_packages(requirement) + for dist in self[requirement.key]: + if dist in requirement: + return dist + self.debug("%s does not match %s", requirement, dist) + return super(PackageIndex, self).obtain(requirement,installer) + + + + + + def check_md5(self, cs, info, filename, tfp): + if re.match('md5=[0-9a-f]{32}$', info): + self.debug("Validating md5 checksum for %s", filename) + if cs.hexdigest()<>info[4:]: + tfp.close() + os.unlink(filename) + raise DistutilsError( + "MD5 validation failed for "+os.path.basename(filename)+ + "; possible download problem?" + ) + + def add_find_links(self, urls): + """Add `urls` to the list that will be prescanned for searches""" + for url in urls: + if ( + self.to_scan is None # if we have already "gone online" + or not URL_SCHEME(url) # or it's a local file/directory + or url.startswith('file:') + or list(distros_for_url(url)) # or a direct package link + ): + # then go ahead and process it now + self.scan_url(url) + else: + # otherwise, defer retrieval till later + self.to_scan.append(url) + + def prescan(self): + """Scan urls scheduled for prescanning (e.g. --find-links)""" + if self.to_scan: + map(self.scan_url, self.to_scan) + self.to_scan = None # from now on, go ahead and process immediately + + def not_found_in_index(self, requirement): + if self[requirement.key]: # we've seen at least one distro + meth, msg = self.info, "Couldn't retrieve index page for %r" + else: # no distros seen for this name, might be misspelled + meth, msg = (self.warn, + "Couldn't find index page for %r (maybe misspelled?)") + meth(msg, requirement.unsafe_name) + self.scan_all() + + def download(self, spec, tmpdir): + """Locate and/or download `spec` to `tmpdir`, returning a local path + + `spec` may be a ``Requirement`` object, or a string containing a URL, + an existing local filename, or a project/version requirement spec + (i.e. the string form of a ``Requirement`` object). If it is the URL + of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one + that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is + automatically created alongside the downloaded file. + + If `spec` is a ``Requirement`` object or a string containing a + project/version requirement spec, this method returns the location of + a matching distribution (possibly after downloading it to `tmpdir`). + If `spec` is a locally existing file or directory name, it is simply + returned unchanged. If `spec` is a URL, it is downloaded to a subpath + of `tmpdir`, and the local filename is returned. Various errors may be + raised if a problem occurs during downloading. + """ + if not isinstance(spec,Requirement): + scheme = URL_SCHEME(spec) + if scheme: + # It's a url, download it to tmpdir + found = self._download_url(scheme.group(1), spec, tmpdir) + base, fragment = egg_info_for_url(spec) + if base.endswith('.py'): + found = self.gen_setup(found,fragment,tmpdir) + return found + elif os.path.exists(spec): + # Existing file or directory, just return it + return spec + else: + try: + spec = Requirement.parse(spec) + except ValueError: + raise DistutilsError( + "Not a URL, existing file, or requirement spec: %r" % + (spec,) + ) + return getattr(self.fetch_distribution(spec, tmpdir),'location',None) + + + def fetch_distribution(self, + requirement, tmpdir, force_scan=False, source=False, develop_ok=False + ): + """Obtain a distribution suitable for fulfilling `requirement` + + `requirement` must be a ``pkg_resources.Requirement`` instance. + If necessary, or if the `force_scan` flag is set, the requirement is + searched for in the (online) package index as well as the locally + installed packages. If a distribution matching `requirement` is found, + the returned distribution's ``location`` is the value you would have + gotten from calling the ``download()`` method with the matching + distribution's URL or filename. If no matching distribution is found, + ``None`` is returned. + + If the `source` flag is set, only source distributions and source + checkout links will be considered. Unless the `develop_ok` flag is + set, development and system eggs (i.e., those using the ``.egg-info`` + format) will be ignored. + """ + + # process a Requirement + self.info("Searching for %s", requirement) + skipped = {} + + def find(req): + # Find a matching distribution; may be called more than once + + for dist in self[req.key]: + + if dist.precedence==DEVELOP_DIST and not develop_ok: + if dist not in skipped: + self.warn("Skipping development or system egg: %s",dist) + skipped[dist] = 1 + continue + + if dist in req and (dist.precedence<=SOURCE_DIST or not source): + self.info("Best match: %s", dist) + return dist.clone( + location=self.download(dist.location, tmpdir) + ) + + if force_scan: + self.prescan() + self.find_packages(requirement) + + dist = find(requirement) + if dist is None and self.to_scan is not None: + self.prescan() + dist = find(requirement) + + if dist is None and not force_scan: + self.find_packages(requirement) + dist = find(requirement) + + if dist is None: + self.warn( + "No local packages or download links found for %s%s", + (source and "a source distribution of " or ""), + requirement, + ) + return dist + + def fetch(self, requirement, tmpdir, force_scan=False, source=False): + """Obtain a file suitable for fulfilling `requirement` + + DEPRECATED; use the ``fetch_distribution()`` method now instead. For + backward compatibility, this routine is identical but returns the + ``location`` of the downloaded distribution instead of a distribution + object. + """ + dist = self.fetch_distribution(requirement,tmpdir,force_scan,source) + if dist is not None: + return dist.location + return None + + + + + + + + + def gen_setup(self, filename, fragment, tmpdir): + match = EGG_FRAGMENT.match(fragment) + dists = match and [d for d in + interpret_distro_name(filename, match.group(1), None) if d.version + ] or [] + + if len(dists)==1: # unambiguous ``#egg`` fragment + basename = os.path.basename(filename) + + # Make sure the file has been downloaded to the temp dir. + if os.path.dirname(filename) != tmpdir: + dst = os.path.join(tmpdir, basename) + from setuptools.command.easy_install import samefile + if not samefile(filename, dst): + shutil.copy2(filename, dst) + filename=dst + + file = open(os.path.join(tmpdir, 'setup.py'), 'w') + file.write( + "from setuptools import setup\n" + "setup(name=%r, version=%r, py_modules=[%r])\n" + % ( + dists[0].project_name, dists[0].version, + os.path.splitext(basename)[0] + ) + ) + file.close() + return filename + + elif match: + raise DistutilsError( + "Can't unambiguously interpret project/version identifier %r; " + "any dashes in the name or version should be escaped using " + "underscores. %r" % (fragment,dists) + ) + else: + raise DistutilsError( + "Can't process plain .py files without an '#egg=name-version'" + " suffix to enable automatic setup script generation." + ) + + dl_blocksize = 8192 + def _download_to(self, url, filename): + self.info("Downloading %s", url) + # Download the file + fp, tfp, info = None, None, None + try: + if '#' in url: + url, info = url.split('#', 1) + fp = self.open_url(url) + if isinstance(fp, urllib2.HTTPError): + raise DistutilsError( + "Can't download %s: %s %s" % (url, fp.code,fp.msg) + ) + cs = md5() + headers = fp.info() + blocknum = 0 + bs = self.dl_blocksize + size = -1 + if "content-length" in headers: + size = int(headers["Content-Length"]) + self.reporthook(url, filename, blocknum, bs, size) + tfp = open(filename,'wb') + while True: + block = fp.read(bs) + if block: + cs.update(block) + tfp.write(block) + blocknum += 1 + self.reporthook(url, filename, blocknum, bs, size) + else: + break + if info: self.check_md5(cs, info, filename, tfp) + return headers + finally: + if fp: fp.close() + if tfp: tfp.close() + + def reporthook(self, url, filename, blocknum, blksize, size): + pass # no-op + + + def open_url(self, url, warning=None): + if url.startswith('file:'): + return local_open(url) + try: + return open_with_auth(url) + except urllib2.HTTPError, v: + return v + except urllib2.URLError, v: + if warning: self.warn(warning, v.reason) + else: + raise DistutilsError("Download error for %s: %s" + % (url, v.reason)) + + def _download_url(self, scheme, url, tmpdir): + # Determine download filename + # + name = filter(None,urlparse.urlparse(url)[2].split('/')) + if name: + name = name[-1] + while '..' in name: + name = name.replace('..','.').replace('\\','_') + else: + name = "__downloaded__" # default if URL has no path contents + + if name.endswith('.egg.zip'): + name = name[:-4] # strip the extra .zip before download + + filename = os.path.join(tmpdir,name) + + # Download the file + # + if scheme=='svn' or scheme.startswith('svn+'): + return self._download_svn(url, filename) + elif scheme=='file': + return urllib2.url2pathname(urlparse.urlparse(url)[2]) + else: + self.url_ok(url, True) # raises error if not allowed + return self._attempt_download(url, filename) + + + + def scan_url(self, url): + self.process_url(url, True) + + + def _attempt_download(self, url, filename): + headers = self._download_to(url, filename) + if 'html' in headers.get('content-type','').lower(): + return self._download_html(url, headers, filename) + else: + return filename + + def _download_html(self, url, headers, filename): + file = open(filename) + for line in file: + if line.strip(): + # Check for a subversion index page + if re.search(r'([^- ]+ - )?Revision \d+:', line): + # it's a subversion index page: + file.close() + os.unlink(filename) + return self._download_svn(url, filename) + break # not an index page + file.close() + os.unlink(filename) + raise DistutilsError("Unexpected HTML page found at "+url) + + def _download_svn(self, url, filename): + url = url.split('#',1)[0] # remove any fragment for svn's sake + self.info("Doing subversion checkout from %s to %s", url, filename) + os.system("svn checkout -q %s %s" % (url, filename)) + return filename + + def debug(self, msg, *args): + log.debug(msg, *args) + + def info(self, msg, *args): + log.info(msg, *args) + + def warn(self, msg, *args): + log.warn(msg, *args) + +# This pattern matches a character entity reference (a decimal numeric +# references, a hexadecimal numeric reference, or a named reference). +entity_sub = re.compile(r'&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?').sub + +def uchr(c): + if not isinstance(c, int): + return c + if c>255: return unichr(c) + return chr(c) + +def decode_entity(match): + what = match.group(1) + if what.startswith('#x'): + what = int(what[2:], 16) + elif what.startswith('#'): + what = int(what[1:]) + else: + from htmlentitydefs import name2codepoint + what = name2codepoint.get(what, match.group(0)) + return uchr(what) + +def htmldecode(text): + """Decode HTML entities in the given text.""" + return entity_sub(decode_entity, text) + + + + + + + + + + + + + + + + + +def open_with_auth(url): + """Open a urllib2 request, handling HTTP authentication""" + + scheme, netloc, path, params, query, frag = urlparse.urlparse(url) + + if scheme in ('http', 'https'): + auth, host = urllib2.splituser(netloc) + else: + auth = None + + if auth: + auth = "Basic " + urllib2.unquote(auth).encode('base64').strip() + new_url = urlparse.urlunparse((scheme,host,path,params,query,frag)) + request = urllib2.Request(new_url) + request.add_header("Authorization", auth) + else: + request = urllib2.Request(url) + + request.add_header('User-Agent', user_agent) + fp = urllib2.urlopen(request) + + if auth: + # Put authentication info back into request URL if same host, + # so that links found on the page will work + s2, h2, path2, param2, query2, frag2 = urlparse.urlparse(fp.url) + if s2==scheme and h2==host: + fp.url = urlparse.urlunparse((s2,netloc,path2,param2,query2,frag2)) + + return fp + + + + + + + + + + + + +def fix_sf_url(url): + return url # backward compatibility + +def local_open(url): + """Read a local path, with special support for directories""" + scheme, server, path, param, query, frag = urlparse.urlparse(url) + filename = urllib2.url2pathname(path) + if os.path.isfile(filename): + return urllib2.urlopen(url) + elif path.endswith('/') and os.path.isdir(filename): + files = [] + for f in os.listdir(filename): + if f=='index.html': + body = open(os.path.join(filename,f),'rb').read() + break + elif os.path.isdir(os.path.join(filename,f)): + f+='/' + files.append("<a href=%r>%s</a>" % (f,f)) + else: + body = ("<html><head><title>%s" % url) + \ + "%s" % '\n'.join(files) + status, message = 200, "OK" + else: + status, message, body = 404, "Path not found", "Not found" + + return urllib2.HTTPError(url, status, message, + {'content-type':'text/html'}, cStringIO.StringIO(body)) + + + + + + + + + + + + + +# this line is a kludge to keep the trailing blank lines for pje's editor addfile ./setuptools-0.6c14devdev.egg/setuptools/package_index.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/package_index.pyc oldhex * newhex *d1f20d0a4c1ef84b630000000000000000150000004000000073370200006400005a0000640100 *6402006b01005a01006401006402006b02005a03006401006402006b04005a0400640100640200 *6b05005a05006401006402006b06005a06006401006402006b07005a07006401006402006b0800 *5a08006401006402006b09005a09006401006402006b0a005a0a006401006403006b0b00546401 *006404006b0c006c0d005a0d00016401006405006b0e006c0f005a0f0001791400640100640600 *6b10006c11005a110001576e2300046512006a0a006f1700010101016401006406006b11006c11 *005a1100016e020001586401006407006b13006c14005a1400016504006915006408008301005a *16006504006915006409006504006917008302005a1800650400691500640a008301005a190065 *0400691500640b00650400691700830200691a005a1b00640c00691c008300005a1d00640d0064 *0e00640f006410006704005a1e006411008400005a1f006412008400005a200065210064130084 *01005a22006521006414008401005a23006521006415008401005a240065210065250065210064 *16008403005a26006504006915006417006504006917008302005a27006418008400005a280064 *1900650600692900652a00641a00830100641b0019692b00660200165a2c00640d00652d006601 *00641c00840000830000595a2e00650400691500641d00830100692f005a3000641e008400005a *3100641f008400005a32006420008400005a33006421008400005a34006422008400005a350064 *23008400005a360064020053282400000073230000005079504920616e64206469726563742070 *61636b61676520646f776e6c6f6164696e6769ffffffff4e280100000074010000002a28010000 *0074030000006c6f672801000000740e000000446973747574696c734572726f72280100000074 *030000006d6435280100000074090000007472616e736c61746573170000005e6567673d285b2d *412d5a612d7a302d395f2e5d2b2924731a000000687265665c732a3d5c732a5b27225d3f285b5e *27223e205d2b2973810000003c6120687265663d22285b5e22235d2b29223e285b5e3c5d2b293c *2f613e0a5c732b5c283c6120283f3a7469746c653d224d44352068617368220a5c732b29687265 *663d225b5e3f5d2b5c3f3a616374696f6e3d73686f775f6d643526616d703b6469676573743d28 *5b302d39612d665d7b33327d29223e6d64353c2f613e5c297312000000285b2d2b2e612d7a302d *395d7b322c7d293a731f0000002e7461722e677a202e7461722e627a32202e746172202e7a6970 *202e74677a740c0000005061636b616765496e646578740f00000064697374726f735f666f725f *75726c741300000070617273655f62646973745f77696e696e73747415000000696e7465727072 *65745f64697374726f5f6e616d65630100000004000000040000004300000073820000007c0000 *6900008300007d01006409005c02007d02007d03007c01006902006401008301006f5000017c01 *006902006402008301006f0e00017c0000640300207d0200717800017c01006903006404006405 *008302006f1b00017c0000640600640700217d03007c0000640500207d0200717800016e010001 *7c02007c030066020053280a000000733d00000052657475726e2028626173652c707976657273 *696f6e29206f7220284e6f6e652c4e6f6e652920666f7220706f737369626c65202e657865206e *616d6573040000002e657865730a0000002e77696e33322e65786569f6ffffff73090000002e77 *696e33322d707969f0ffffff69f9ffffff69fcffffff4e28020000004e4e280400000074050000 *006c6f77657274040000004e6f6e657408000000656e647377697468740a000000737461727473 *77697468280400000074040000006e616d65520900000074040000006261736574060000007079 *5f766572280000000028000000007345000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c7061636b6167 *655f696e6465782e707952070000001b000000731200000000030c010c02100110010e0113010d *011202630100000008000000060000004300000073700000007400006900007c00008301005c06 *007d01007d02007d03007d04007d05007d06007401006902007c03006903006401008301006402 *00198301007d07006403007c07006a06006f1c00017c07006903006403006404008302005c0200 *7d07007d06006e0100017c07007c06006602005328050000004e74010000002f69ffffffff7401 *0000002369010000002804000000740800000075726c7061727365740700000075726c6c696232 *7407000000756e71756f7465740500000073706c69742808000000740300000075726c74060000 *00736368656d657406000000736572766572740400000070617468740a000000706172616d6574 *657273740500000071756572797408000000667261676d656e74520e0000002800000000280000 *00007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e70797410 *0000006567675f696e666f5f666f725f75726c2a000000730a000000000121011c010d001c0163 *02000000060000000800000063000000738e0000007400007c00008301005c02007d02007d0300 *781f007401007c00007c02007c0100830300445d0b007d04007c04005601712500577c03006f4f *00017402006903007c03008301007d05007c05006f3500017832007404007c00007c0500690500 *6401008301007c0100640200740600830301445d0b007d04007c0400560171730057718a00016e *01000164030053280400000073450000005969656c6420656767206f7220736f75726365206469 *73747269627574696f6e206f626a656374732074686174206d6967687420626520666f756e6420 *617420612055524c6901000000740a000000707265636564656e63654e2807000000521d000000 *741400000064697374726f735f666f725f6c6f636174696f6e740c0000004547475f465241474d *454e5474050000006d617463685208000000740500000067726f7570740d000000434845434b4f *55545f444953542806000000521600000074080000006d65746164617461520e000000521c0000 *007404000000646973745221000000280000000028000000007345000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574757074 *6f6f6c735c7061636b6167655f696e6465782e7079520600000030000000731600000000021201 *13000600090107010f01070106011c000602630300000006000000080000004300000073e60000 *007c01006900006401008301006f0e00017c0100640200207d01006e0100017c01006900006403 *008301006f2400016404007c01006a06006f1700017401006902007c00007c01007c0200830300 *67010053017c01006900006405008301006f3d00017403007c01008301005c02007d03007d0400 *7c03006407006a09006f1a00017405007c00007c03007c02007c04007406006406008306005301 *6e010001784000740700445d38007d05007c01006900007c05008301006f2200017c0100740800 *7c05008301000b207d01007405007c00007c01007c0200830300530171a6005767000053280800 *0000733a0000005969656c6420656767206f7220736f7572636520646973747269627574696f6e *206f626a65637473206261736564206f6e20626173656e616d6573080000002e6567672e7a6970 *69fcffffff73040000002e65676774010000002d73040000002e657865740500000077696e3332 *4e2809000000520b000000740c000000446973747269627574696f6e740d00000066726f6d5f6c *6f636174696f6e5207000000520a0000005208000000740b00000042494e4152595f4449535474 *0a000000455854454e53494f4e5374030000006c656e280600000074080000006c6f636174696f *6e7408000000626173656e616d655224000000740800000077696e5f62617365520f0000007403 *000000657874280000000028000000007345000000433a5c7461686f652d6c6166735c73657475 *70746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c7061636b *6167655f696e6465782e7079521f0000003c000000731e000000000210010e011d021702100112 *010d0103011b050700060110011101150163020000000200000004000000430000007322000000 *7400007401007c00008301007402006903006904007c00008301007c0100830300532801000000 *73450000005969656c6420706f737369626c6520656767206f7220736f75726365206469737472 *69627574696f6e206f626a65637473206261736564206f6e20612066696c656e616d6528050000 *00521f000000740e0000006e6f726d616c697a655f7061746874020000006f735219000000522e *0000002802000000740800000066696c656e616d65522400000028000000002800000000734500 *0000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576646576 *2e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e707974140000006469 *7374726f735f666f725f66696c656e616d65530000007304000000000203016306000000090000 *00110000006300000073cb0000007c01006900006401008301007d06007c0300704d0001784a00 *7401007c06006402001f830100445d34005c02007d07007d08007402007c08008301006403006a *02006f1500017c08006903006404008301006f0500016405005301712700576e01000178610074 *04006406007402007c060083010064060017830200445d46007d08007405007c00007c02006401 *006906007c06007c0800208301006401006906007c06007c08001f8301006407007c0300640800 *7c04006409007c05008304035601717d005764050053280a00000073d800000047656e65726174 *6520616c7465726e617469766520696e746572707265746174696f6e73206f66206120736f7572 *63652064697374726f206e616d650a0a202020204e6f74653a20696620606c6f636174696f6e60 *20697320612066696c6573797374656d2066696c656e616d652c20796f752073686f756c642063 *616c6c0a202020206060706b675f7265736f75726365732e6e6f726d616c697a655f7061746828 *296060206f6e206974206265666f72652070617373696e6720697420746f20746869730a202020 *20726f7574696e65210a2020202052260000006902000000690500000073040000007079322e4e *6901000000740a00000070795f76657273696f6e521e0000007408000000706c6174666f726d28 *0700000052150000007409000000656e756d6572617465522c000000520c000000740500000072 *616e6765522800000074040000006a6f696e2809000000522d000000522e000000522400000052 *35000000521e000000523600000074050000007061727473740100000069740100000070280000 *000028000000007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e646578 *2e707952080000005a000000731800000000150f01070111000c0123010d021a00060103012901 *0c0173280000003c285b5e3e5d2a5c7372656c5c732a3d5c732a5b27225d3f285b5e27223e5d2b *295b5e3e5d2a293e6302000000070000000800000063000000731701000078a200740000690100 *7c0100830100445d91007d02007c02006902008300005c02007d03007d04007403007404006905 *007c04006906008300006907006401008301008302007d05006402007c05006a0600700d000164 *03007c05006a06006f3e0001783b007408006901007c0300830100445d26007d0200740900690a *007c0000740b007c0200690c006404008301008301008302005601717300577110000171100057 *786b00640900445d63007d03007c0100690d007c03008301007d06007c06006407006a03006f41 *0001740800690e007c01007c06008302007d02007c02006f240001740900690a007c0000740b00 *7c0200690c006404008301008301008302005601710f010171ac000171ac005764080053280a00 *0000734500000046696e642072656c3d22686f6d65706167652220616e642072656c3d22646f77 *6e6c6f616422206c696e6b7320696e206070616765602c207969656c64696e672055524c737401 *0000002c7408000000686f6d65706167657408000000646f776e6c6f61646901000000730d0000 *003c74683e486f6d65205061676573100000003c74683e446f776e6c6f61642055524c69ffffff *ff4e2802000000730d0000003c74683e486f6d65205061676573100000003c74683e446f776e6c *6f61642055524c280f000000740300000052454c740800000066696e6469746572740600000067 *726f75707374030000006d61707403000000737472740500000073747269705209000000521500 *00007404000000485245465212000000740700000075726c6a6f696e740a00000068746d6c6465 *636f64655222000000740400000066696e64740600000073656172636828070000005216000000 *74040000007061676552210000007403000000746167740300000072656c740400000072656c73 *7403000000706f73280000000028000000007345000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c7061 *636b6167655f696e6465782e7079741300000066696e645f65787465726e616c5f6c696e6b737f *000000731e000000000310000601120121011a01100006012c02070006010f010d011201070173 *1e000000507974686f6e2d75726c6c69622f2573207365747570746f6f6c732f2573740a000000 *7365747570746f6f6c736900000000630000000000000000040000004200000073490100006500 *005a01006400005a02006401006422006403008402005a03006504006404008401005a05006504 *006405008401005a06006504006406008401005a07006407008400005a08006408008400005a09 *006409008400005a0a00640a008400005a0b00642300640b008401005a0d00640c008400005a0e *00642300640d008401005a0f00640e008400005a1000640f008400005a11006410008400005a12 *006411008400005a13006412008400005a14006504006504006504006413008403005a15006504 *006504006414008402005a16006415008400005a17006416005a18006417008400005a19006418 *008400005a1a006423006419008401005a1b00641a008400005a1c00641b008400005a1d00641c *008400005a1e00641d008400005a1f00641e008400005a2000641f008400005a21006420008400 *005a22006421008400005a230052532824000000733b0000004120646973747269627574696f6e *20696e6465782074686174207363616e732077656220706167657320666f7220646f776e6c6f61 *642055524c73731d000000687474703a2f2f707970692e707974686f6e2e6f72672f73696d706c *655200000000630300000005000000060000004f000000737d0000007400006901007c00007c03 *007c04008e0100017c01006401007c01006902006401008301000c20177c00005f03006800007c *00005f04006800007c00005f05006800007c00005f0600740700690800640200690900740a0074 *0b007c0200830200830100830100690c007c00005f0d006700007c00005f0e0064000053280300 *00004e521000000074010000007c280f000000740b000000456e7669726f6e6d656e7474080000 *005f5f696e69745f5f520b0000007409000000696e6465785f75726c740c0000007363616e6e65 *645f75726c73740c000000666574636865645f75726c73740d0000007061636b6167655f706167 *6573740200000072657407000000636f6d70696c65523900000052430000005204000000522100 *00007406000000616c6c6f77737407000000746f5f7363616e2805000000740400000073656c66 *52550000007405000000686f73747374040000006172677374020000006b772800000000280000 *00007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e70795254 *00000098000000730e000000000313011b01090109010901270163030000000900000006000000 *43000000730e0200007c01007c00006900006a06006f0d00017c02000c6f050001640100530174 *01007c00006900007c01003c7402007c0100830100701200017c00006903007c01008301000164 *010053017404007405007c01008301008301007d03007c03006f2900017c00006906007c010083 *01007005000164010053017c00006907006402007c0100830200016e0100017c0300701800017c *02000c701000017c01007c00006908006a06006f1500017409007c0000690a007c030083020001 *64010053017c00006906007c0100830100701200017401007c00006908007c01003c6401005301 *7c0000690b006403007c0100830200017c0000690c007c01006404008302007d04007c04006401 *006a08006f0500016401005301740100047c00006908007c01003c7c00006908007c0400690e00 *3c6405007c0400690f006910006406006407008302006911008300006a07006f0f00017c040069 *12008300000164010053017c0400690e007d05007c04006913008300007d06007c040069120083 *0000017c01006914007c00006915008301006f2f00017416007c04006408006401008303006409 *006a03006f1600017c00006917007c01007c06008302007d06006e010001784500741800691900 *7c0600830100445d34007d0700741a00691b007c0500741c007c0700691d00640a008301008301 *008302007d08007c0000691e007c08008301000171d2015764010053280b000000733c00000045 *76616c7561746520612055524c206173206120706f737369626c6520646f776e6c6f61642c2061 *6e64206d617962652072657472696576652069744e730e000000466f756e64206c696e6b3a2025 *73730a00000052656164696e672025737335000000446f776e6c6f6164206572726f723a202573 *202d2d20536f6d65207061636b61676573206d6179206e6f7420626520666f756e642174040000 *0068746d6c730c000000636f6e74656e742d7479706574000000007404000000636f6465699401 *00006901000000281f0000005256000000740400000054727565740a00000055524c5f53434845 *4d45741000000070726f636573735f66696c656e616d6574040000006c69737452060000007406 *00000075726c5f6f6b740500000064656275675257000000524300000074030000006164647404 *000000696e666f74080000006f70656e5f75726c520a0000005216000000740700000068656164 *657273740300000067657452090000007405000000636c6f7365740400000072656164520c0000 *005255000000740700000067657461747472740d00000070726f636573735f696e646578524600 *000052410000005212000000524700000052480000005222000000740b00000070726f63657373 *5f75726c2809000000525d00000052160000007408000000726574726965766574050000006469 *737473740100000066520e000000524b000000522100000074040000006c696e6b280000000028 *000000007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e7079 *5273000000a500000073440000000002180105010d010d010d010502120107011001050114021f *011001050210010d010502100112010d0005011b0222010a01050209010c010a012c0116011000 *06012101630300000006000000050000004300000073cd0000007400006901006902007c010083 *0100701500017c00006903006401007c01008302000164000053017400006901006904007c0100 *8301006f5700017c02000c6f4f00017400006901006905007c01008301007d0300783a00740000 *6906007c0300830100445d25007d04007c00006907007400006901006908007c03007c04008302 *0074090083020001716500576e010001740a007c01008301007d05007c05006f2400017c000069 *0b006402007c010083020001740c007c0000690d007c0500830200016e01000164000053280300 *00004e730d0000004e6f7420666f756e643a2025737309000000466f756e643a202573280e0000 *0052320000005219000000740600000065786973747374040000007761726e7405000000697364 *697274080000007265616c7061746874070000006c697374646972526600000052390000005264 *000000523400000052690000005243000000526a0000002806000000525d000000740200000066 *6e74060000006e6573746564521900000074040000006974656d52750000002800000000280000 *00007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e70795266 *000000ce000000731800000000021301100105021b0112011000060127020c0107011001630300 *000004000000030000004300000073570000007c00006900007401006901007c01008301006401 *00198301006f05000174020053016402007d03007c02006f1400017403007c03007c0100168301 *008201006e1100017c00006904007c03007c0100830200016400005328030000004e6901000000 *732c0000000a4c696e6b20746f20252073202a2a2a424c4f434b45442a2a2a206279202d2d616c *6c6f772d686f7374730a2805000000525b00000052120000005264000000520200000052790000 *002804000000525d00000052160000007405000000666174616c74030000006d73672800000000 *28000000007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e70 *795268000000de000000730c00000000011d010501060107011402630200000004000000050000 *0043000000736a0000007863007c0100445d5b007d02007400006901006902007c02008301006f *420001783f007400006903007c0200830100445d2a007d03007c03006904006401008301006f14 *00017c00006905007c02007c030083020001713000017130005771070001710700576400005328 *020000004e73090000002e6567672d6c696e6b280600000052320000005219000000527a000000 *527c000000520b000000740d0000007363616e5f6567675f6c696e6b2804000000525d00000074 *0b0000007365617263685f70617468527f0000007405000000656e747279280000000028000000 *007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e7079740e00 *00007363616e5f6567675f6c696e6b73e7000000730e0000000001070006011301100006011001 *630300000005000000080000004300000073a30000007400006400007402007403006904007405 *007406006907006908007c01007c02008302008301008302008302007d03007409007c03008301 *006401006a02006f5c0001785900740a007406006907006908007c01007c030064020019830200 *830100445d34007d04007406006907006908007c01007c03008c01007c04005f0b00740c007c04 *005f0d007c0000690e007c040083010001716300576e0100016400005328030000004e69020000 *006900000000280f000000740600000066696c746572520a000000524300000052440000005245 *000000740400000066696c65523200000052190000005239000000522c00000074120000006669 *6e645f646973747269627574696f6e73522d000000740b000000534f555243455f44495354521e *000000526a0000002805000000525d0000005219000000528400000074050000006c696e657352 *25000000280000000028000000007345000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c7061636b6167 *655f696e6465782e70795282000000ee000000730e000000000130011301200006011801090163 *030000000a000000080000000300000073040100008700006601006401008600007d0300783c00 *7400006901007c0200830100445d2b007d04007c03007402006903007c01007404007c04006905 *0064020083010083010083020083010001711f00577c03007c01008301005c02007d05007d0600 *7c05006f950001787e007406007c01007c0200830200445d6d007d07007407007c07008301005c *02007d08007d09007c08006908006403008301006f3800017c09000c6f3000017c06006f180001 *7c07006404007c05007c060066020016377d070071d700018800006909007c0100830100016e01 *0001880000690a007c07008301000171770057740b00690c006405008400007c02008302005301 *64060053640700532808000000732300000050726f636573732074686520636f6e74656e747320 *6f66206120507950492070616765630100000004000000050000001300000073bd0000007c0000 *6900008800006901008301006fa600017402007403006904007c00007405008800006901008301 *001f6906006401008301008302007d01007405007c01008301006402006a02006f670001640300 *7c0100640400196a07006f5600017407007c0100640500198301007d02007408007c0100640400 *198301007d0300740900880000690a00690b007c0200690c008300006800008302007c00003c74 *0d007c0200830100740d007c030083010066020053016e0100016406005328070000004e521000 *0000690200000052110000006901000000690000000028020000004e4e280f000000520c000000 *5255000000524300000052130000005214000000522c0000005215000000740900000073616665 *5f6e616d65740c000000736166655f76657273696f6e52640000005258000000740a0000007365 *7464656661756c745209000000740b000000746f5f66696c656e616d65520a0000002804000000 *5277000000523a0000007403000000706b6774030000007665722801000000525d000000280000 *00007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e70797404 *0000007363616ef9000000731200000000021301030125022402100110011f011b016901000000 *73030000002e7079730a000000236567673d25732d257363010000000100000005000000530000 *0073170000006400007c000069000064010064020064030083030016532804000000731a000000 *3c6120687265663d222573236d64353d2573223e25733c2f613e69010000006903000000690200 *000028010000005222000000280100000074010000006d28000000002800000000734500000043 *3a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567 *675c7365747570746f6f6c735c7061636b6167655f696e6465782e707974080000003c6c616d62 *64613e19010000730000000052620000004e280d00000052460000005241000000521200000052 *47000000524800000052220000005250000000521d000000520b00000074110000006e6565645f *76657273696f6e5f696e666f74080000007363616e5f75726c7408000000505950495f4d443574 *03000000737562280a000000525d0000005216000000524b00000052910000005221000000528f *000000529000000074070000006e65775f75726c520e0000007404000000667261672800000000 *2801000000525d0000007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c73 *2d302e366331346465766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e *6465782e70795272000000f7000000732200000000020f0f100006012902120107021000060212 *011801070118021101110206010e03630200000002000000030000004300000073140000007c00 *006900006401007c0100830200016400005328020000004e735000000050616765206174202573 *206c696e6b7320746f202e70792066696c6528732920776974686f75742076657273696f6e2069 *6e666f3b20616e20696e646578207363616e2069732072657175697265642e2801000000740800 *00007363616e5f616c6c2802000000525d00000052160000002800000000280000000073450000 *00433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e *6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e70795294000000200100 *007306000000000106010301630200000003000000030000004700000073530000007c00006900 *007c00006901006a07006f2c00017c01006f1400017c00006902007c01007c02008c0100016e01 *00017c0000690300640100830100016e0100017c00006904007c00006900008301000164000053 *28020000004e73360000005363616e6e696e6720696e646578206f6620616c6c207061636b6167 *6573202874686973206d61792074616b652061207768696c652928050000005255000000525700 *00005279000000526b00000052950000002803000000525d0000005281000000525f0000002800 *00000028000000007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d30 *2e366331346465766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465 *782e7079529a00000026010000730c000000000113010700140106010b02630200000003000000 *040000004300000073b10000007c00006900007c00006901007c01006902001764010017830100 *017c00006903006904007c0100690500830100701f00017c00006900007c00006901007c010069 *06001764010017830100016e0100017c00006903006904007c0100690500830100701100017c00 *006907007c0100830100016e0100017833007408007c00006903006904007c0100690500640200 *830200830100445d13007d02007c00006900007c02008301000171960057640000532803000000 *4e52100000002800000000280900000052950000005255000000740b000000756e736166655f6e *616d655258000000526e00000074030000006b6579740c00000070726f6a6563745f6e616d6574 *120000006e6f745f666f756e645f696e5f696e64657852670000002803000000525d000000740b *000000726571756972656d656e745216000000280000000028000000007345000000433a5c7461 *686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365 *747570746f6f6c735c7061636b6167655f696e6465782e7079740d00000066696e645f7061636b *616765732e010000731000000000011b0216021f02160211021f00060263030000000400000005 *00000043000000736d0000007c0000690000830000017c00006901007c010083010001783a007c *00007c010069020019445d2b007d03007c03007c01006a06006f0500017c030053017c00006903 *006401007c01007c030083030001712500577404007405007c00008302006906007c01007c0200 *8302005328020000004e7314000000257320646f6573206e6f74206d6174636820257328070000 *0074070000007072657363616e52a0000000529c00000052690000007405000000737570657252 *0500000074060000006f627461696e2804000000525d000000529f0000007409000000696e7374 *616c6c65725225000000280000000028000000007345000000433a5c7461686f652d6c6166735c *7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c *7061636b6167655f696e6465782e707952a30000003d010000731000000000010a000d010e0006 *010d01050117016305000000050000000500000043000000737d0000007400006901006401007c *02008302006f6600017c00006902006402007c0300830200017c01006903008300007c02006403 *001f6a03006f3b00017c0400690400830000017405006906007c03008301000174070064040074 *05006908006909007c03008301001764050017830100820100717900016e010001640000532806 *0000004e73110000006d64353d5b302d39612d665d7b33327d24731e00000056616c6964617469 *6e67206d643520636865636b73756d20666f722025736904000000731a0000004d44352076616c *69646174696f6e206661696c656420666f7220731c0000003b20706f737369626c6520646f776e *6c6f61642070726f626c656d3f280a000000525900000052210000005269000000740900000068 *6578646967657374526f00000052320000007406000000756e6c696e6b52020000005219000000 *522e0000002805000000525d00000074020000006373526b000000523300000074030000007466 *70280000000028000000007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c *732d302e366331346465766465762e6567675c7365747570746f6f6c735c7061636b6167655f69 *6e6465782e70797409000000636865636b5f6d643549010000731000000000011301100117010a *010d0103011301630200000003000000040000004300000073770000007870007c0100445d6800 *7d02007c00006900006402006a0800703100017402007c02008301000c702300017c0200690300 *640100830100701300017404007405007c02008301008301006f1100017c00006906007c020083 *010001710700017c00006900006907007c02008301000171070057640200532803000000733b00 *0000416464206075726c736020746f20746865206c69737420746861742077696c6c2062652070 *72657363616e6e656420666f72207365617263686573730500000066696c653a4e280800000052 *5c000000520a0000005265000000520c0000005267000000520600000052950000007406000000 *617070656e642803000000525d000000740400000075726c735216000000280000000028000000 *007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e7079740e00 *00006164645f66696e645f6c696e6b7354010000731000000000020700060210010e0110011303 *11036301000000010000000300000043000000732e0000007c00006900006f1700017401007c00 *006902007c0000690000830200016e0100016401007c00005f0000640100532802000000733700 *00005363616e2075726c73207363686564756c656420666f72207072657363616e6e696e672028 *652e672e202d2d66696e642d6c696e6b73294e2804000000525c00000052430000005295000000 *520a0000002801000000525d000000280000000028000000007345000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574757074 *6f6f6c735c7061636b6167655f696e6465782e707952a100000063010000730600000000020a01 *1701630200000004000000030000004300000073500000007c00007c0100690000196f1400017c *0000690100640100027d02007d03006e1100017c0000690200640200027d02007d03007c02007c *03007c0100690300830200017c0000690400830000016400005328030000004e7323000000436f *756c646e277420726574726965766520696e646578207061676520666f72202572733300000043 *6f756c646e27742066696e6420696e646578207061676520666f7220257220286d61796265206d *69737370656c6c65643f292805000000529c000000526b0000005279000000529b000000529a00 *00002804000000525d000000529f00000074040000006d65746852810000002800000000280000 *00007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e7079529e *00000069010000730c00000000010e01140206010a011001630300000007000000070000004300 *000073f50000007400007c010074010083020070c900017402007c01008301007d03007c03006f *5e00017c00006903007c03006904006401008301007c01007c02008303007d04007405007c0100 *8301005c02007d05007d06007c05006906006402008301006f1900017c00006907007c04007c06 *007c02008303007d04006e0100017c04005301740800690900690a007c01008301006f0500017c *01005301791300740100690b007c01008301007d01005771d90004740c006a0a006f1a00010101 *01740d006403007c01006601001683010082010071d90001586e010001740e007c0000690f007c *01007c0200830200640400640500830300532806000000730e0400004c6f6361746520616e642f *6f7220646f776e6c6f61642060737065636020746f2060746d70646972602c2072657475726e69 *6e672061206c6f63616c20706174680a0a2020202020202020607370656360206d617920626520 *61206060526571756972656d656e746060206f626a6563742c206f72206120737472696e672063 *6f6e7461696e696e6720612055524c2c0a2020202020202020616e206578697374696e67206c6f *63616c2066696c656e616d652c206f7220612070726f6a6563742f76657273696f6e2072657175 *6972656d656e7420737065630a202020202020202028692e652e2074686520737472696e672066 *6f726d206f662061206060526571756972656d656e746060206f626a656374292e202049662069 *74206973207468652055524c0a20202020202020206f662061202e70792066696c652077697468 *20616e20756e616d626967756f7573206060236567673d6e616d652d76657273696f6e60602074 *61672028692e652e2c206f6e650a20202020202020207468617420657363617065732060602d60 *602061732060605f6060207468726f7567686f7574292c2061207472697669616c206060736574 *75702e707960602069730a20202020202020206175746f6d61746963616c6c7920637265617465 *6420616c6f6e67736964652074686520646f776e6c6f616465642066696c652e0a0a2020202020 *2020204966206073706563602069732061206060526571756972656d656e746060206f626a6563 *74206f72206120737472696e6720636f6e7461696e696e6720610a202020202020202070726f6a *6563742f76657273696f6e20726571756972656d656e7420737065632c2074686973206d657468 *6f642072657475726e7320746865206c6f636174696f6e206f660a202020202020202061206d61 *746368696e6720646973747269627574696f6e2028706f737369626c7920616674657220646f77 *6e6c6f6164696e6720697420746f2060746d7064697260292e0a20202020202020204966206073 *706563602069732061206c6f63616c6c79206578697374696e672066696c65206f722064697265 *63746f7279206e616d652c2069742069732073696d706c790a202020202020202072657475726e *656420756e6368616e6765642e202049662060737065636020697320612055524c2c2069742069 *7320646f776e6c6f6164656420746f206120737562706174680a20202020202020206f66206074 *6d70646972602c20616e6420746865206c6f63616c2066696c656e616d65206973207265747572 *6e65642e2020566172696f7573206572726f7273206d61792062650a2020202020202020726169 *73656420696620612070726f626c656d206f636375727320647572696e6720646f776e6c6f6164 *696e672e0a2020202020202020690100000073030000002e707973310000004e6f742061205552 *4c2c206578697374696e672066696c652c206f7220726571756972656d656e7420737065633a20 *2572522d0000004e2811000000740a0000006973696e7374616e6365740b000000526571756972 *656d656e745265000000740d0000005f646f776e6c6f61645f75726c5222000000521d00000052 *0b000000740900000067656e5f7365747570523200000052190000005278000000740500000070 *61727365740a00000056616c75654572726f725202000000527100000074120000006665746368 *5f646973747269627574696f6e520a0000002807000000525d0000007404000000737065637406 *000000746d7064697252170000007405000000666f756e64520e000000521c0000002800000000 *28000000007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663 *31346465766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e70 *79523f000000720100007322000000001210010c0107021e011201100119010501130205020301 *13010e01030103011602630600000008000000050000000300000073fe00000088020069000064 *01007c010083020001680000890000870000870100870200870300870400660500640200860000 *7d06007c03006f1b0001880200690100830000018802006902007c0100830100016e0100017c06 *007c01008301007d07007c07006406006a08006f2a00018802006904006406006a09006f1a0001 *880200690100830000017c06007c01008301007d07006e0100017c07006406006a08006f250001 *7c03000c6f1d00018802006902007c0100830100017c06007c01008301007d07006e0100017c07 *006406006a08006f2500018802006905006403008803006f070001640400700400016405007c01 *00830300016e0100017c0700532807000000737c0300004f627461696e20612064697374726962 *7574696f6e207375697461626c6520666f722066756c66696c6c696e672060726571756972656d *656e74600a0a202020202020202060726571756972656d656e7460206d75737420626520612060 *60706b675f7265736f75726365732e526571756972656d656e74606020696e7374616e63652e0a *20202020202020204966206e65636573736172792c206f72206966207468652060666f7263655f *7363616e6020666c6167206973207365742c2074686520726571756972656d656e742069730a20 *20202020202020736561726368656420666f7220696e2074686520286f6e6c696e652920706163 *6b61676520696e6465782061732077656c6c20617320746865206c6f63616c6c790a2020202020 *202020696e7374616c6c6564207061636b616765732e2020496620612064697374726962757469 *6f6e206d61746368696e672060726571756972656d656e746020697320666f756e642c0a202020 *20202020207468652072657475726e656420646973747269627574696f6e27732060606c6f6361 *74696f6e6060206973207468652076616c756520796f7520776f756c6420686176650a20202020 *20202020676f7474656e2066726f6d2063616c6c696e6720746865206060646f776e6c6f616428 *296060206d6574686f64207769746820746865206d61746368696e670a20202020202020206469 *73747269627574696f6e27732055524c206f722066696c656e616d652e20204966206e6f206d61 *746368696e6720646973747269627574696f6e20697320666f756e642c0a202020202020202060 *604e6f6e6560602069732072657475726e65642e0a0a2020202020202020496620746865206073 *6f757263656020666c6167206973207365742c206f6e6c7920736f757263652064697374726962 *7574696f6e7320616e6420736f757263650a2020202020202020636865636b6f7574206c696e6b *732077696c6c20626520636f6e736964657265642e2020556e6c65737320746865206064657665 *6c6f705f6f6b6020666c61672069730a20202020202020207365742c20646576656c6f706d656e *7420616e642073797374656d20656767732028692e652e2c2074686f7365207573696e67207468 *652060602e6567672d696e666f60600a2020202020202020666f726d6174292077696c6c206265 *2069676e6f7265642e0a20202020202020207310000000536561726368696e6720666f72202573 *630100000002000000060000001300000073bb00000078b4008802007c000069000019445da500 *7d01007c01006901007402006a02006f3a00018801000c6f3200017c01008800006a07006f1e00 *018802006903006401007c0100830200016402008800007c01003c710e0001710e006e0100017c *01007c00006a06006f4800017c01006901007404006a0100700800018803000c6f300001880200 *6905006403007c0100830200017c01006906006404008802006907007c01006908008804008302 *008300015301710e00576400005328050000004e7326000000536b697070696e6720646576656c *6f706d656e74206f722073797374656d206567673a2025736901000000730e0000004265737420 *6d617463683a202573522d0000002809000000529c000000521e000000740c000000444556454c *4f505f4449535452790000005289000000526b0000007405000000636c6f6e65523f000000522d *00000028020000007403000000726571522500000028050000007407000000736b697070656474 *0a000000646576656c6f705f6f6b525d0000007406000000736f7572636552b600000028000000 *007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e7079524900 *0000b3010000731600000000030e00060218010d0110010e01070225011001090173320000004e *6f206c6f63616c207061636b61676573206f7220646f776e6c6f6164206c696e6b7320666f756e *6420666f72202573257373190000006120736f7572636520646973747269627574696f6e206f66 *2052620000004e2806000000526b00000052a100000052a0000000520a000000525c0000005279 *0000002808000000525d000000529f00000052b6000000740a000000666f7263655f7363616e52 *bd00000052bc000000524900000052250000002800000000280500000052bb00000052bc000000 *525d00000052bd00000052b60000007345000000433a5c7461686f652d6c6166735c7365747570 *746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c7061636b61 *67655f696e6465782e707952b40000009b01000073260000000015100106021b1107010a011102 *0c011d010a01100215010d0110020d010601030111010b02630500000006000000050000004300 *000073310000007c00006900007c01007c02007c03007c04008304007d05007c05006401006a09 *006f0800017c0500690200530164010053280200000073330100004f627461696e20612066696c *65207375697461626c6520666f722066756c66696c6c696e672060726571756972656d656e7460 *0a0a2020202020202020444550524543415445443b207573652074686520606066657463685f64 *6973747269627574696f6e28296060206d6574686f64206e6f7720696e73746561642e2020466f *720a20202020202020206261636b7761726420636f6d7061746962696c6974792c207468697320 *726f7574696e65206973206964656e746963616c206275742072657475726e73207468650a2020 *20202020202060606c6f636174696f6e6060206f662074686520646f776e6c6f61646564206469 *73747269627574696f6e20696e7374656164206f66206120646973747269627574696f6e0a2020 *2020202020206f626a6563742e0a20202020202020204e280300000052b4000000520a00000052 *2d0000002806000000525d000000529f00000052b600000052be00000052bd0000005225000000 *280000000028000000007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c73 *2d302e366331346465766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e *6465782e707974050000006665746368d90100007308000000000818010d01080163040000000c *000000090000004300000073880100007400006901007c02008301007d04007c04006f45000167 *0000047d05007402007c01007c0400690300640100830100640000830300445d1b007d06007c06 *006905006f0b00017c05007c060012713600017136007e0500700400016700007d07007406007c *07008301006401006a02006fe300017407006908006909007c01008301007d0800740700690800 *690a007c01008301007c03006a03006f530001740700690800690b007c03007c08008302007d09 *006402006403006b0c006c0d007d0a00017c0a007c01007c0900830200701a0001740e00690f00 *7c01007c0900830200017c09007d010071f200016e010001741000740700690800690b007c0300 *6404008302006405008302007d0b007c0b006911006406007c0700640700196912007c07006407 *00196905007407006908006913007c08008301006407001966030016830100017c0b0069140083 *0000017c010053017c04006f1a00017415006408007c02007c0700660200168301008201006e0d *000174150064090083010082010064000053280a0000004e690100000069ffffffff2801000000 *740800000073616d6566696c65730800000073657475702e707974010000007773490000006672 *6f6d207365747570746f6f6c7320696d706f72742073657475700a7365747570286e616d653d25 *722c2076657273696f6e3d25722c2070795f6d6f64756c65733d5b25725d290a69000000007386 *00000043616e277420756e616d626967756f75736c7920696e746572707265742070726f6a6563 *742f76657273696f6e206964656e7469666965722025723b20616e792064617368657320696e20 *746865206e616d65206f722076657273696f6e2073686f756c6420626520657363617065642075 *73696e6720756e64657273636f7265732e202572737000000043616e27742070726f6365737320 *706c61696e202e70792066696c657320776974686f757420616e2027236567673d6e616d652d76 *657273696f6e272073756666697820746f20656e61626c65206175746f6d617469632073657475 *70207363726970742067656e65726174696f6e2e28160000005220000000522100000052080000 *005222000000520a000000740700000076657273696f6e522c0000005232000000521900000052 *2e00000074070000006469726e616d655239000000741f0000007365747570746f6f6c732e636f *6d6d616e642e656173795f696e7374616c6c52c0000000740600000073687574696c7405000000 *636f70793274040000006f70656e74050000007772697465529d000000740800000073706c6974 *657874526f0000005202000000280c000000525d0000005233000000521c00000052b600000052 *2100000074040000005f5b315d7401000000645275000000522e000000740300000064737452c0 *0000005287000000280000000028000000007345000000433a5c7461686f652d6c6166735c7365 *747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c7061 *636b6167655f696e6465782e707952b1000000ed010000733200000000010f010e013e01060213 *011203190115011001100110010e021e010601030314011b030a01050207010301030214030301 *690020000063030000000c000000090000004300000073c20100007c00006900006401007c0100 *83020001640a005c03007d03007d04007d05007a71016402007c01006a06006f1c00017c010069 *02006402006403008302005c02007d01007d05006e0100017c00006903007c01008301007d0300 *7404007c03007405006906008302006f2300017407006404007c01007c03006908007c03006909 *00660300168301008201006e010001740a008300007d06007c03006900008300007d0700640500 *7d08007c0000690b007d09006406007d0a006407007c07006a06006f2d0001740c007c07006408 *00198301007d0a007c0000690d007c01007c02007c08007c09007c0a00830500016e010001740e *007c02006409008302007d0400786400740f006f5c00017c03006910007c09008301007d0b007c *0b006f4100017c06006911007c0b00830100017c04006912007c0b00830100017c080064030037 *7d08007c0000690d007c01007c02007c08007c09007c0a0083050001710601015071060101577c *05006f1a00017c00006913007c06007c05007c02007c0400830400016e0100017c070053576400 *007c03006f0e00017c0300691400830000016e0100017c04006f0e00017c040069140083000001 *6e0100015864000053280b0000004e730e000000446f776e6c6f6164696e672025735211000000 *6901000000731800000043616e277420646f776e6c6f61642025733a2025732025736900000000 *69ffffffff730e000000636f6e74656e742d6c656e677468730e000000436f6e74656e742d4c65 *6e6774687402000000776228030000004e4e4e2815000000526b000000520a0000005215000000 *526c00000052ae00000052130000007409000000485454504572726f7252020000005263000000 *52810000005203000000740c000000646c5f626c6f636b73697a657403000000696e74740a0000 *007265706f7274686f6f6b52c700000052640000005270000000740600000075706461746552c8 *00000052a9000000526f000000280c000000525d00000052160000005233000000740200000066 *7052a8000000526b00000052a7000000526d0000007408000000626c6f636b6e756d7402000000 *6273740400000073697a657405000000626c6f636b280000000028000000007345000000433a5c *7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c *7365747570746f6f6c735c7061636b6167655f696e6465782e7079740c0000005f646f776e6c6f *61645f746f170200007344000000000110020f0103010d011c010f0113010301200209010c0106 *01090106010d0110011d010f01030007010f0107010d010d010a011d02060107001a0108020700 *0e010700630600000006000000010000004300000073040000006400005328010000004e280000 *00002806000000525d0000005216000000523300000052d40000007407000000626c6b73697a65 *52d6000000280000000028000000007345000000433a5c7461686f652d6c6166735c7365747570 *746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c7061636b61 *67655f696e6465782e707952d10000003b02000073020000000001630300000004000000050000 *004300000073970000007c01006900006401008301006f0b00017401007c01008301005301790e *007402007c010083010053576e6700047403006904006a0a006f0a0001017d0300017c03005301 *047403006905006a0a006f400001017d0300017c02006f1700017c00006906007c02007c030069 *070083020001719300017408006402007c01007c0300690700660200168301008201006e020001 *586400005328030000004e730500000066696c653a7319000000446f776e6c6f6164206572726f *7220666f722025733a2025732809000000520c000000740a0000006c6f63616c5f6f70656e740e *0000006f70656e5f776974685f61757468521300000052ce000000740800000055524c4572726f *7252790000007406000000726561736f6e52020000002804000000525d00000052160000007407 *0000007761726e696e67740100000076280000000028000000007345000000433a5c7461686f65 *2d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570 *746f6f6c735c7061636b6167655f696e6465782e7079526c0000003f0200007316000000000110 *010b0103010e011301050113010700170206016304000000060000000400000043000000732001 *00007400006400007402006902007c0200830100640100196903006402008301008302007d0400 *7c04006f4100017c0400640300197d0400783a006404007c04006a06006f2200017c0400690400 *6404006405008302006904006406006407008302007d040071390001576e0700016408007d0400 *7c04006905006409008301006f0e00017c0400640a00207d04006e010001740600690700690800 *7c03007c04008302007d05007c0100640b006a0200701000017c0100690900640c008301006f11 *00017c0000690a007c02007c050083020053017c0100640d006a02006f1b0001740b00690c0074 *02006902007c02008301006401001983010053017c0000690d007c0200740e00830200017c0000 *690f007c02007c05008302005364000053280e0000004e6902000000521000000069ffffffff73 *020000002e2e74010000002e73010000005c74010000005f740e0000005f5f646f776e6c6f6164 *65645f5f73080000002e6567672e7a697069fcffffff740300000073766e730400000073766e2b *528700000028100000005286000000520a0000005212000000521500000074070000007265706c *616365520b000000523200000052190000005239000000520c000000740d0000005f646f776e6c *6f61645f73766e5213000000740c00000075726c32706174686e616d6552680000005264000000 *74110000005f617474656d70745f646f776e6c6f61642806000000525d00000052170000005216 *00000052b6000000520d0000005233000000280000000028000000007345000000433a5c746168 *6f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574 *7570746f6f6c735c7061636b6167655f696e6465782e707952b00000004c020000732000000000 *03250107010a0103000d012702060210010e0215041d0111010d011b0210016302000000020000 *00030000004300000073140000007c00006900007c010074010083020001640000532801000000 *4e2802000000527300000052640000002802000000525d00000052160000002800000000280000 *00007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e3663313464 *65766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e70795295 *00000068020000730200000000016303000000040000000400000043000000734d0000007c0000 *6900007c01007c02008302007d03006401007c0300690100640200640300830200690200830000 *6a06006f1400017c00006903007c01007c03007c020083030053017c0200536400005328040000 *004e5261000000730c000000636f6e74656e742d747970655262000000280400000052d8000000 *526e0000005209000000740e0000005f646f776e6c6f61645f68746d6c2804000000525d000000 *52160000005233000000526d000000280000000028000000007345000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574757074 *6f6f6c735c7061636b6167655f696e6465782e707952e70000006c020000730800000000011201 *1f011402630400000006000000050000004300000073950000007400007c03008301007d040078 *5b007c0400445d53007d05007c05006901008300006f4000017402006903006401007c05008302 *006f2800017c0400690400830000017405006906007c0300830100017c00006907007c01007c03 *0083020053015071130001711300577c0400690400830000017405006906007c03008301000174 *08006402007c0100178301008201006400005328030000004e73200000003c7469746c653e285b *5e2d205d2b202d20293f5265766973696f6e205c642b3a731e000000556e657870656374656420 *48544d4c207061676520666f756e6420617420280900000052c700000052450000005259000000 *524a000000526f000000523200000052a600000052e500000052020000002806000000525d0000 *005216000000526d0000005233000000528700000074040000006c696e65280000000028000000 *007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465 *766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e707952e800 *000073020000731800000000010c01070006010d0213020a010d01110109010a010d0163030000 *0003000000040000004300000073440000007c0100690000640100640200830200640300197d01 *007c00006901006404007c01007c0200830300017402006903006405007c01007c020066020016 *830100017c02005328060000004e5211000000690100000069000000007327000000446f696e67 *2073756276657273696f6e20636865636b6f75742066726f6d20257320746f2025737315000000 *73766e20636865636b6f7574202d7120257320257328040000005215000000526b000000523200 *0000740600000073797374656d2803000000525d00000052160000005233000000280000000028 *000000007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331 *346465766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e7079 *52e500000082020000730800000000011601130117016302000000030000000300000047000000 *73140000007400006901007c01007c02008c0100016400005328010000004e2802000000520100 *000052690000002803000000525d0000005281000000525f000000280000000028000000007345 *000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465 *762e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e7079526900000088 *02000073020000000001630200000003000000030000004700000073140000007400006901007c *01007c02008c0100016400005328010000004e28020000005201000000526b0000002803000000 *525d0000005281000000525f000000280000000028000000007345000000433a5c7461686f652d *6c6166735c7365747570746f6f6c732d302e366331346465766465762e6567675c736574757074 *6f6f6c735c7061636b6167655f696e6465782e7079526b0000008b020000730200000000016302 *00000003000000030000004700000073140000007400006901007c01007c02008c010001640000 *5328010000004e2802000000520100000052790000002803000000525d0000005281000000525f *000000280000000028000000007345000000433a5c7461686f652d6c6166735c7365747570746f *6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c7061636b616765 *5f696e6465782e707952790000008e02000073020000000001280100000052000000004e282400 *000074080000005f5f6e616d655f5f740a0000005f5f6d6f64756c655f5f74070000005f5f646f *635f5f5254000000740500000046616c7365527300000052660000005268000000528500000052 *8200000052720000005294000000520a000000529a00000052a000000052a300000052a9000000 *52ac00000052a1000000529e000000523f00000052b400000052bf00000052b100000052cf0000 *0052d800000052d1000000526c00000052b0000000529500000052e700000052e800000052e500 *00005269000000526b00000052790000002800000000280000000028000000007345000000433a *5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e656767 *5c7365747570746f6f6c735c7061636b6167655f696e6465782e70795205000000950000007340 *000000060106020f0d0c290c100c0909070909092909060c08090f0c0c090b090f09060909092a *123d0f1409290601092409040c0d091c09040907090f0906090309037321000000262823285c64 *2b7c785b5c64612d66412d465d2b297c5b5c772e3a2d5d2b293b3f630100000001000000030000 *004300000073370000007400007c0000740100830200700500017c000053017c00006401006a04 *006f0b00017402007c000083010053017403007c00008301005328020000004e69ff0000002804 *00000052ae00000052d00000007406000000756e69636872740300000063687228010000007401 *00000063280000000028000000007345000000433a5c7461686f652d6c6166735c736574757074 *6f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c7061636b6167 *655f696e6465782e707974040000007563687295020000730a0000000001100105010d000b0163 *01000000030000000500000043000000738f0000007c00006900006401008301007d01007c0100 *6901006402008301006f1700017402007c01006403001f6404008302007d01006e5000017c0100 *6901006405008301006f1400017402007c01006401001f8301007d01006e2c0001640600640700 *6b03006c04007d0200017c02006905007c01007c00006900006408008301008302007d01007406 *007c01008301005328090000004e69010000007302000000237869020000006910000000521100 *000069ffffffff2801000000740e0000006e616d6532636f6465706f696e746900000000280700 *00005222000000520c00000052d0000000740e00000068746d6c656e746974796465667352f300 *0000526e00000052f20000002803000000522100000074040000007768617452f3000000280000 *000028000000007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e *366331346465766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e646578 *2e7079740d0000006465636f64655f656e746974799b020000731000000000010f011001170110 *01140210011b016301000000010000000300000043000000730d0000007400007401007c000083 *020053280100000073270000004465636f64652048544d4c20656e74697469657320696e207468 *6520676976656e20746578742e2802000000740a000000656e746974795f73756252f600000028 *01000000740400000074657874280000000028000000007345000000433a5c7461686f652d6c61 *66735c7365747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f *6c735c7061636b6167655f696e6465782e70795248000000a60200007302000000000263010000 *00120000000700000043000000735d0100007400006900007c00008301005c06007d01007d0200 *7d03007d04007d05007d06007c01006407006a06006f1900017401006902007c02008301005c02 *007d07007d08006e0700016408007d07007c07006f6600016403007401006904007c0700830100 *690500640400830100690600830000177d07007400006907007c01007c08007c03007c04007c05 *007c06006606008301007d09007401006908007c09008301007d0a007c0a006909006405007c07 *00830200016e1000017401006908007c00008301007d0a007c0a00690900640600740a00830200 *01740100690b007c0a008301007d0b007c07006f6a00017400006900007c0b00690c008301005c *06007d0c007d0d007d0e007d0f007d10007d11007c0c007c01006a02006f3500017c0d007c0800 *6a02006f2800017400006907007c0c007c02007c0e007c0f007c10007c11006606008301007c0b *005f0c00715901016e0100017c0b0053280900000073340000004f70656e20612075726c6c6962 *3220726571756573742c2068616e646c696e6720485454502061757468656e7469636174696f6e *740400000068747470740500000068747470737306000000426173696320740600000062617365 *3634740d000000417574686f72697a6174696f6e730a000000557365722d4167656e7428020000 *00730400000068747470730500000068747470734e280d00000052120000005213000000740900 *000073706c697475736572520a00000052140000007406000000656e636f64655245000000740a *00000075726c756e7061727365740700000052657175657374740a0000006164645f6865616465 *72740a000000757365725f6167656e74740700000075726c6f70656e5216000000281200000052 *16000000521700000074060000006e65746c6f6352190000007406000000706172616d73521b00 *000052990000007404000000617574687404000000686f73745298000000740700000072657175 *65737452d300000074020000007332740200000068327405000000706174683274060000007061 *72616d327406000000717565727932740500000066726167322800000000280000000073450000 *00433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e366331346465766465762e *6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e707952db000000ba0200 *007322000000000321020d01190206020701220121010f0114020f0210010f02070324011a012c *02630100000001000000010000004300000073040000007c00005328010000004e280000000028 *010000005216000000280000000028000000007345000000433a5c7461686f652d6c6166735c73 *65747570746f6f6c732d302e366331346465766465762e6567675c7365747570746f6f6c735c70 *61636b6167655f696e6465782e7079740a0000006669785f73665f75726ce30200007302000000 *000163010000000d000000090000004300000073740100007400006900007c00008301005c0600 *7d01007d02007d03007d04007d05007d06007401006902007c03008301007d0700740300690400 *6905007c07008301006f0e00017401006906007c000083010053017c0300690700640100830100 *6fdb00017403006904006908007c07008301006fc800016700007d080078af007403006909007c *0700830100445d83007d09007c09006402006a02006f290001740a00740300690400690b007c07 *007c0900830200640300830200690c008300007d0a00506e310001740300690400690800740300 *690400690b007c07007c09008302008301006f0e00017c0900640100377d09006e0100017c0800 *690d006404007c09007c09006602001683010001718a00576405007c000016640600640700690b *007c080083010016177d0a00640f005c02007d0b007d0c006e1000016410005c03007d0b007d0c *007d0a00740100690e007c00007c0b007c0c00680100640d00640e0036740f006910007c0a0083 *01008305005328110000007337000000526561642061206c6f63616c20706174682c2077697468 *207370656369616c20737570706f727420666f72206469726563746f726965735210000000730a *000000696e6465782e68746d6c7402000000726273110000003c6120687265663d25723e25733c *2f613e731d0000003c68746d6c3e3c686561643e3c7469746c653e25733c2f7469746c653e731d *0000003c2f686561643e3c626f64793e25733c2f626f64793e3c2f68746d6c3e73010000000a69 *c800000074020000004f4b6994010000730e00000050617468206e6f7420666f756e6473090000 *004e6f7420666f756e647309000000746578742f68746d6c730c000000636f6e74656e742d7479 *7065280200000069c800000073020000004f4b28030000006994010000730e0000005061746820 *6e6f7420666f756e6473090000004e6f7420666f756e6428110000005212000000521300000052 *e6000000523200000052190000007406000000697366696c655203010000520b000000527a0000 *00527c00000052c70000005239000000527000000052aa00000052ce0000007409000000635374 *72696e67494f7408000000537472696e67494f280d000000521600000052170000005218000000 *52190000007405000000706172616d521b00000052990000005233000000740500000066696c65 *7352760000007404000000626f6479740600000073746174757374070000006d65737361676528 *0000000028000000007345000000433a5c7461686f652d6c6166735c7365747570746f6f6c732d *302e366331346465766465762e6567675c7365747570746f6f6c735c7061636b6167655f696e64 *65782e707952da000000e60200007328000000000221010f0113010e0123010601100006010d01 *2401050122010e011b020701140110020f020f01283700000052ed000000740300000073797374 *070000006f732e70617468523200000052590000005212000000521300000052c5000000740600 *000072616e646f6d7406000000736f636b65745213010000740d000000706b675f7265736f7572 *6365737409000000646973747574696c7352010000007410000000646973747574696c732e6572 *726f727352020000007407000000686173686c69625203000000740b000000496d706f72744572 *726f727407000000666e6d617463685204000000525a0000005220000000740100000049524600 *00005296000000522100000052650000005215000000522b00000074070000005f5f616c6c5f5f *5207000000521d000000520a0000005206000000521f0000005234000000528900000052080000 *0052400000005250000000740b0000005f5f76657273696f6e5f5f740700000072657175697265 *52c2000000520201000052530000005205000000529700000052f700000052f200000052f60000 *00524800000052db000000520f01000052da000000280000000028000000002800000000734500 *0000433a5c7461686f652d6c6166735c7365747570746f6f6c732d302e36633134646576646576 *2e6567675c7365747570746f6f6c735c7061636b6167655f696e6465782e707974080000003c6d *6f64756c653e01000000734a00000006016c010a0110011001030114010e01150110020f011502 *0601090318010c0309010903090f09060c0c0c170c0812211503091103011d0416ff00ff000012 *020906090b091409290903 addfile ./setuptools-0.6c14devdev.egg/setuptools/sandbox.py hunk ./setuptools-0.6c14devdev.egg/setuptools/sandbox.py 1 +import os, sys, __builtin__, tempfile, operator +_os = sys.modules[os.name] +_open = open +from distutils.errors import DistutilsError +__all__ = [ + "AbstractSandbox", "DirectorySandbox", "SandboxViolation", "run_setup", +] +def run_setup(setup_script, args): + """Run a distutils setup script, sandboxed in its directory""" + old_dir = os.getcwd() + save_argv = sys.argv[:] + save_path = sys.path[:] + setup_dir = os.path.abspath(os.path.dirname(setup_script)) + temp_dir = os.path.join(setup_dir,'temp') + if not os.path.isdir(temp_dir): os.makedirs(temp_dir) + save_tmp = tempfile.tempdir + save_modules = sys.modules.copy() + try: + tempfile.tempdir = temp_dir; os.chdir(setup_dir) + try: + sys.argv[:] = [setup_script]+list(args) + sys.path.insert(0, setup_dir) + DirectorySandbox(setup_dir).run( + lambda: execfile( + "setup.py", + {'__file__':setup_script, '__name__':'__main__'} + ) + ) + except SystemExit, v: + if v.args and v.args[0]: + raise + # Normal exit, just return + finally: + sys.modules.update(save_modules) + for key in list(sys.modules): + if key not in save_modules: del sys.modules[key] + os.chdir(old_dir) + sys.path[:] = save_path + sys.argv[:] = save_argv + tempfile.tempdir = save_tmp + +class AbstractSandbox: + """Wrap 'os' module and 'open()' builtin for virtualizing setup scripts""" + + _active = False + + def __init__(self): + self._attrs = [ + name for name in dir(_os) + if not name.startswith('_') and hasattr(self,name) + ] + + def _copy(self, source): + for name in self._attrs: + setattr(os, name, getattr(source,name)) + + def run(self, func): + """Run 'func' under os sandboxing""" + try: + self._copy(self) + __builtin__.open = __builtin__.file = self._open + self._active = True + return func() + finally: + self._active = False + __builtin__.open = __builtin__.file = _open + self._copy(_os) + + + def _mk_dual_path_wrapper(name): + original = getattr(_os,name) + def wrap(self,src,dst,*args,**kw): + if self._active: + src,dst = self._remap_pair(name,src,dst,*args,**kw) + return original(src,dst,*args,**kw) + return wrap + + + for name in ["rename", "link", "symlink"]: + if hasattr(_os,name): locals()[name] = _mk_dual_path_wrapper(name) + + + def _mk_single_path_wrapper(name, original=None): + original = original or getattr(_os,name) + def wrap(self,path,*args,**kw): + if self._active: + path = self._remap_input(name,path,*args,**kw) + return original(path,*args,**kw) + return wrap + + _open = _mk_single_path_wrapper('file', _open) + for name in [ + "stat", "listdir", "chdir", "open", "chmod", "chown", "mkdir", + "remove", "unlink", "rmdir", "utime", "lchown", "chroot", "lstat", + "startfile", "mkfifo", "mknod", "pathconf", "access" + ]: + if hasattr(_os,name): locals()[name] = _mk_single_path_wrapper(name) + + + def _mk_single_with_return(name): + original = getattr(_os,name) + def wrap(self,path,*args,**kw): + if self._active: + path = self._remap_input(name,path,*args,**kw) + return self._remap_output(name, original(path,*args,**kw)) + return original(path,*args,**kw) + return wrap + + for name in ['readlink', 'tempnam']: + if hasattr(_os,name): locals()[name] = _mk_single_with_return(name) + + def _mk_query(name): + original = getattr(_os,name) + def wrap(self,*args,**kw): + retval = original(*args,**kw) + if self._active: + return self._remap_output(name, retval) + return retval + return wrap + + for name in ['getcwd', 'tmpnam']: + if hasattr(_os,name): locals()[name] = _mk_query(name) + + def _validate_path(self,path): + """Called to remap or validate any path, whether input or output""" + return path + + def _remap_input(self,operation,path,*args,**kw): + """Called for path inputs""" + return self._validate_path(path) + + def _remap_output(self,operation,path): + """Called for path outputs""" + return self._validate_path(path) + + def _remap_pair(self,operation,src,dst,*args,**kw): + """Called for path pairs like rename, link, and symlink operations""" + return ( + self._remap_input(operation+'-from',src,*args,**kw), + self._remap_input(operation+'-to',dst,*args,**kw) + ) + + +class DirectorySandbox(AbstractSandbox): + """Restrict operations to a single subdirectory - pseudo-chroot""" + + write_ops = dict.fromkeys([ + "open", "chmod", "chown", "mkdir", "remove", "unlink", "rmdir", + "utime", "lchown", "chroot", "mkfifo", "mknod", "tempnam", + ]) + + def __init__(self,sandbox): + self._sandbox = os.path.normcase(os.path.realpath(sandbox)) + self._prefix = os.path.join(self._sandbox,'') + AbstractSandbox.__init__(self) + + def _violation(self, operation, *args, **kw): + raise SandboxViolation(operation, args, kw) + + def _open(self, path, mode='r', *args, **kw): + if mode not in ('r', 'rt', 'rb', 'rU', 'U') and not self._ok(path): + self._violation("open", path, mode, *args, **kw) + return _open(path,mode,*args,**kw) + + def tmpnam(self): + self._violation("tmpnam") + + def _ok(self,path): + active = self._active + try: + self._active = False + realpath = os.path.normcase(os.path.realpath(path)) + if realpath==self._sandbox or realpath.startswith(self._prefix): + return True + finally: + self._active = active + + def _remap_input(self,operation,path,*args,**kw): + """Called for path inputs""" + if operation in self.write_ops and not self._ok(path): + self._violation(operation, os.path.realpath(path), *args, **kw) + return path + + def _remap_pair(self,operation,src,dst,*args,**kw): + """Called for path pairs like rename, link, and symlink operations""" + if not self._ok(src) or not self._ok(dst): + self._violation(operation, src, dst, *args, **kw) + return (src,dst) + + def open(self, file, flags, mode=0777): + """Called for low-level os.open()""" + if flags & WRITE_FLAGS and not self._ok(file): + self._violation("os.open", file, flags, mode) + return _os.open(file,flags,mode) + + +WRITE_FLAGS = reduce( + operator.or_, + [getattr(_os, a, 0) for a in + "O_WRONLY O_RDWR O_APPEND O_CREAT O_TRUNC O_TEMPORARY".split()] +) + + + + +class SandboxViolation(DistutilsError): + """A setup script attempted to modify the filesystem outside the sandbox""" + + def __str__(self): + return """SandboxViolation: %s%r %s + +The package setup script has attempted to modify files on your system +that are not within the EasyInstall build area, and has been aborted. + +This package cannot be safely installed by EasyInstall, and may not +support alternate installation locations even if you run its setup +script by hand. Please inform the package's author and the EasyInstall +maintainers to find out if a fix or workaround is available.""" % self.args + + + + + + + + + + + + + + + + + + + + + + + + + + + +# addfile ./setuptools-0.6c14devdev.egg/setuptools/sandbox.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/sandbox.pyc oldhex * newhex *d1f20d0a4e1ef84b6300000000000000000f0000004000000073ff0000006400006401006b0000 *5a00006400006401006b01005a01006400006401006b02005a02006400006401006b03005a0300 *6400006401006b04005a0400650100690500650000690600195a07006508005a09006400006402 *006b0a006c0b005a0b00016403006404006405006406006704005a0c006407008400005a0d0064 *0300640d00640800840000830000595a0e00640400650e00660100640900840000830000595a0f *00651000650400691100670000045a1200640a00691300830000445d19005a1400651200651500 *650700651400640b008303001271c0005b12008302005a1600640500650b00660100640c008400 *00830000595a170064010053280e00000069ffffffff4e2801000000740e000000446973747574 *696c734572726f72740f000000416273747261637453616e64626f787410000000446972656374 *6f727953616e64626f78741000000053616e64626f7856696f6c6174696f6e740900000072756e *5f736574757063020000000b0000000e0000000300000073a10100007400006901008300007d02 *007402006903001e7d03007402006904001e7d0400740000690400690500740000690400690600 *8800008301008301007d05007400006904006907007c05006401008302007d0600740000690400 *6908007c0600830100701100017400006909007c0600830100016e010001740a00690b007d0700 *740200690c00690d008300007d08007a9b007c0600740a005f0b00740000690e007c0500830100 *01794a00880000670100740f007c01008301001774020069030028740200690400691000640200 *7c0500830200017411007c050083010069120087000066010064030086000083010001576e3400 *047413006a0a006f280001017d0900017c09006914006f1500017c0900691400640200196f0700 *01820000712901016e0200015857640400740200690c006915007c080083010001783200740f00 *740200690c00830100445d21007d0a007c0a007c08006a07006f0e0001740200690c007c0a003d *714d0101714d0157740000690e007c0200830100017c0400740200690400287c03007402006903 *00287c0700740a005f0b0058640400532805000000733800000052756e20612064697374757469 *6c73207365747570207363726970742c2073616e64626f78656420696e20697473206469726563 *746f7279740400000074656d7069000000006300000000000000000500000013000000731b0000 *007400006400006802008800006401003664020064030036830200532804000000730800000073 *657475702e707974080000005f5f66696c655f5f74080000005f5f6d61696e5f5f74080000005f *5f6e616d655f5f280100000074080000006578656366696c6528000000002801000000740c0000 *0073657475705f7363726970742800000000732b0000006275696c645c62646973742e77696e33 *325c6567675c7365747570746f6f6c735c73616e64626f782e707974080000003c6c616d626461 *3e180000007304000000030103014e281600000074020000006f73740600000067657463776474 *030000007379737404000000617267767404000000706174687407000000616273706174687407 *0000006469726e616d6574040000006a6f696e7405000000697364697274080000006d616b6564 *697273740800000074656d7066696c65740700000074656d7064697274070000006d6f64756c65 *737404000000636f70797405000000636864697274040000006c6973747406000000696e736572 *745202000000740300000072756e740a00000053797374656d4578697474040000006172677374 *06000000757064617465280b000000520a000000521f00000074070000006f6c645f6469727409 *000000736176655f617267767409000000736176655f70617468740900000073657475705f6469 *72740800000074656d705f6469727408000000736176655f746d70740c000000736176655f6d6f *64756c657374010000007674030000006b657928000000002801000000520a000000732b000000 *6275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c73616e64626f *782e7079520400000008000000733a00000000020c010a010a011e0115011300110109010f0103 *0109000d010301170113010c0114051001180110031001100006010d0012010d010a010a016300 *00000000000000150000004200000073b70100006500005a01006400005a02006503005a040064 *01008400005a05006402008400005a06006403008400005a07006404008400005a0800783e0064 *0500640600640700670300445d2d005a0900650a00650b006509008302006f1700016508006509 *00830100650c008300006509003c71460001714600576427006408008401005a0e00650e006409 *00650f008302005a0f00786e00640a00640b00640c00640d00640e00640f006410006411006412 *00641300641400641500641600641700641800641900641a00641b00641c00671300445d2d005a *0900650a00650b006509008302006f170001650e00650900830100650c008300006509003c71d2 *000171d20057641d008400005a1000783b00641e00641f00670200445d2d005a0900650a00650b *006509008302006f170001651000650900830100650c008300006509003c711901017119015764 *20008400005a1100783b00642100642200670200445d2d005a0900650a00650b00650900830200 *6f170001651100650900830100650c008300006509003c71600101716001576423008400005a12 *006424008400005a13006425008400005a14006426008400005a15005253282800000073440000 *005772617020276f7327206d6f64756c6520616e6420276f70656e282927206275696c74696e20 *666f72207669727475616c697a696e672073657475702073637269707473630100000003000000 *05000000430000007353000000670000047d0100740000740100830100445d32007d02007c0200 *6902006401008301000c6f1b00017403007c00007c02008302006f0b00017c01007c0200127111 *00017111007e01007c00005f04006400005328020000004e74010000005f280500000074030000 *0064697274030000005f6f73740a00000073746172747377697468740700000068617361747472 *74060000005f61747472732803000000740400000073656c6674040000005f5b315d7404000000 *6e616d6528000000002800000000732b0000006275696c645c62646973742e77696e33325c6567 *675c7365747570746f6f6c735c73616e64626f782e707974080000005f5f696e69745f5f2f0000 *0073040000000002170163020000000300000007000000430000007331000000782a007c000069 *0000445d1f007d02007401007402007c02007403007c01007c020083020083030001710a005764 *00005328010000004e2804000000522f000000740700000073657461747472520c000000740700 *000067657461747472280300000052300000007406000000736f75726365523200000028000000 *002800000000732b0000006275696c645c62646973742e77696e33325c6567675c736574757074 *6f6f6c735c73616e64626f782e707974050000005f636f707935000000730600000000010a0006 *01630200000002000000070000004300000073620000007a34007c00006900007c000083010001 *7c0000690100047402005f03007402005f04007405007c00005f06007c01008300005357640100 *7407007c00005f0600740100047402005f03007402005f04007c00006900007408008301000158 *640100532802000000731e00000052756e202766756e632720756e646572206f732073616e6462 *6f78696e674e2809000000523700000074050000005f6f70656e740b0000005f5f6275696c7469 *6e5f5f74040000006f70656e740400000066696c6574040000005472756574070000005f616374 *697665740500000046616c7365522c00000028020000005230000000740400000066756e632800 *0000002800000000732b0000006275696c645c62646973742e77696e33325c6567675c73657475 *70746f6f6c735c73616e64626f782e7079521d000000390000007310000000000203010d011301 *09010b020901100163010000000200000003000000030000007325000000740000740100880000 *8302008901008700008701006602006401008600007d01007c01005328020000004e6303000000 *05000000060000001f00000073420000007c00006900006f2500017c00006901008800007c0100 *7c02007c03007c04008e03005c02007d01007d02006e0100018801007c01007c02007c03007c04 *008e02005328010000004e2802000000523d000000740b0000005f72656d61705f706169722805 *000000523000000074030000007372637403000000647374521f00000074020000006b77280200 *0000523200000074080000006f726967696e616c2800000000732b0000006275696c645c626469 *73742e77696e33325c6567675c7365747570746f6f6c735c73616e64626f782e70797404000000 *7772617048000000730600000000010a01250128020000005235000000522c0000002802000000 *523200000052450000002800000000280200000052320000005244000000732b0000006275696c *645c62646973742e77696e33325c6567675c7365747570746f6f6c735c73616e64626f782e7079 *74150000005f6d6b5f6475616c5f706174685f7772617070657246000000730600000000010f01 *1204740600000072656e616d6574040000006c696e6b740700000073796d6c696e6b6302000000 *030000000300000003000000732c000000880100700d0001740000740100880000830200890100 *8700008701006602006401008600007d02007c02005328020000004e6302000000040000000500 *00001f00000073360000007c00006900006f1c00017c00006901008800007c01007c02007c0300 *8e02007d01006e0100018801007c01007c02007c03008e01005328010000004e2802000000523d *000000740c0000005f72656d61705f696e707574280400000052300000005210000000521f0000 *0052430000002802000000523200000052440000002800000000732b0000006275696c645c6264 *6973742e77696e33325c6567675c7365747570746f6f6c735c73616e64626f782e707952450000 *0055000000730600000000010a011c0128020000005235000000522c0000002803000000523200 *0000524400000052450000002800000000280200000052320000005244000000732b0000006275 *696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c73616e64626f782e *707974170000005f6d6b5f73696e676c655f706174685f77726170706572530000007306000000 *000116011204523b00000074040000007374617474070000006c697374646972521a000000523a *000000740500000063686d6f64740500000063686f776e74050000006d6b646972740600000072 *656d6f76657406000000756e6c696e6b7405000000726d64697274050000007574696d65740600 *00006c63686f776e74060000006368726f6f7474050000006c7374617474090000007374617274 *66696c6574060000006d6b6669666f74050000006d6b6e6f64740800000070617468636f6e6674 *060000006163636573736301000000020000000300000003000000732500000074000074010088 *00008302008901008700008701006602006401008600007d01007c01005328020000004e630200 *000004000000060000001f000000734f0000007c00006900006f3500017c00006901008800007c *01007c02007c03008e02007d01007c00006902008800008801007c01007c02007c03008e010083 *020053018801007c01007c02007c03008e01005328010000004e2803000000523d000000524a00 *0000740d0000005f72656d61705f6f7574707574280400000052300000005210000000521f0000 *0052430000002802000000523200000052440000002800000000732b0000006275696c645c6264 *6973742e77696e33325c6567675c7365747570746f6f6c735c73616e64626f782e707952450000 *0066000000730800000000010a0118011d0128020000005235000000522c000000280200000052 *3200000052450000002800000000280200000052320000005244000000732b0000006275696c64 *5c62646973742e77696e33325c6567675c7365747570746f6f6c735c73616e64626f782e707974 *160000005f6d6b5f73696e676c655f776974685f72657475726e64000000730600000000010f01 *12057408000000726561646c696e6b740700000074656d706e616d630100000002000000030000 *000300000073250000007400007401008800008302008901008700008701006602006401008600 *007d01007c01005328020000004e630100000004000000030000001f000000732e000000880100 *7c01007c02008e00007d03007c00006900006f1100017c00006901008800007c03008302005301 *7c03005328010000004e2802000000523d000000525d00000028040000005230000000521f0000 *005243000000740600000072657476616c2802000000523200000052440000002800000000732b *0000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c73616e *64626f782e7079524500000072000000730800000000010f010a01110128020000005235000000 *522c00000028020000005232000000524500000028000000002802000000523200000052440000 *00732b0000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c *73616e64626f782e707974090000005f6d6b5f717565727970000000730600000000010f011205 *520d0000007406000000746d706e616d630200000002000000010000004300000073040000007c *0100532801000000733d00000043616c6c656420746f2072656d6170206f722076616c69646174 *6520616e7920706174682c207768657468657220696e707574206f72206f757470757428000000 *0028020000005230000000521000000028000000002800000000732b0000006275696c645c6264 *6973742e77696e33325c6567675c7365747570746f6f6c735c73616e64626f782e7079740e0000 *005f76616c69646174655f706174687c0000007302000000000263030000000500000002000000 *4f000000730d0000007c00006900007c0200830100532801000000731600000043616c6c656420 *666f72207061746820696e70757473280100000052640000002805000000523000000074090000 *006f7065726174696f6e5210000000521f000000524300000028000000002800000000732b0000 *006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c73616e6462 *6f782e7079524a0000008000000073020000000002630300000003000000020000004300000073 *0d0000007c00006900007c0200830100532801000000731700000043616c6c656420666f722070 *617468206f75747075747328010000005264000000280300000052300000005265000000521000 *000028000000002800000000732b0000006275696c645c62646973742e77696e33325c6567675c *7365747570746f6f6c735c73616e64626f782e7079525d00000084000000730200000000026304 *00000006000000060000004f00000073360000007c00006900007c0100640100177c02007c0400 *7c05008e02007c00006900007c0100640200177c03007c04007c05008e02006602005328030000 *00733f00000043616c6c656420666f722070617468207061697273206c696b652072656e616d65 *2c206c696e6b2c20616e642073796d6c696e6b206f7065726174696f6e7373050000002d66726f *6d73030000002d746f2801000000524a0000002806000000523000000052650000005241000000 *5242000000521f000000524300000028000000002800000000732b0000006275696c645c626469 *73742e77696e33325c6567675c7365747570746f6f6c735c73616e64626f782e70795240000000 *880000007304000000000319014e28160000005208000000740a0000005f5f6d6f64756c655f5f *74070000005f5f646f635f5f523e000000523d00000052330000005237000000521d0000005246 *0000005232000000522e000000522c00000074060000006c6f63616c7374040000004e6f6e6552 *4b0000005238000000525e00000052620000005264000000524a000000525d0000005240000000 *280000000028000000002800000000732b0000006275696c645c62646973742e77696e33325c65 *67675c7365747570746f6f6c735c73616e64626f782e707952010000002a000000734200000006 *010602060209060904090d09091000060110001b030c080f010301150115011300060210001b03 *09090d00060110001b0209090d00060110001b020904090409046300000000000000000e000000 *4200000073920000006500005a01006400005a0200650300690400640100640200640300640400 *640500640600640700640800640900640a00640b00640c00640d00670d008301005a0500640e00 *8400005a0600640f008400005a07006410006411008401005a08006412008400005a0900641300 *8400005a0a006414008400005a0b006415008400005a0c006416006417008401005a0d00525328 *18000000733c0000005265737472696374206f7065726174696f6e7320746f20612073696e676c *65207375626469726563746f7279202d2070736575646f2d6368726f6f74523a000000524e0000 *00524f000000525000000052510000005252000000525300000052540000005255000000525600 *00005259000000525a00000052600000006302000000020000000300000043000000734d000000 *7400006901006902007400006901006903007c01008301008301007c00005f0400740000690100 *6905007c00006904006401008302007c00005f06007407006908007c0000830100016400005328 *020000004e74000000002809000000520c000000521000000074080000006e6f726d6361736574 *080000007265616c7061746874080000005f73616e64626f78521300000074070000005f707265 *6669785201000000523300000028020000005230000000740700000073616e64626f7828000000 *002800000000732b0000006275696c645c62646973742e77696e33325c6567675c736574757074 *6f6f6c735c73616e64626f782e70795233000000980000007306000000000121011b0163020000 *0004000000040000004f00000073160000007400007c01007c02007c0300830300820100640000 *5328010000004e28010000005203000000280400000052300000005265000000521f0000005243 *00000028000000002800000000732b0000006275696c645c62646973742e77696e33325c656767 *5c7365747570746f6f6c735c73616e64626f782e7079740a0000005f76696f6c6174696f6e9d00 *000073020000000001740100000072630300000005000000060000004f000000734e0000007c02 *006407006a07006f2e00017c00006900007c01008301000c6f1d00017c00006901006406007c01 *007c02007c03007c04008e0300016e0100017402007c01007c02007c03007c04008e0200532808 *0000004e5271000000740200000072747402000000726274020000007255740100000055523a00 *000028050000005271000000527200000073020000007262730200000072555275000000280300 *000074030000005f6f6b5270000000523800000028050000005230000000521000000074040000 *006d6f6465521f000000524300000028000000002800000000732b0000006275696c645c626469 *73742e77696e33325c6567675c7365747570746f6f6c735c73616e64626f782e70795238000000 *a0000000730600000000011e011d01630100000001000000020000004300000073110000007c00 *00690000640100830100016400005328020000004e526300000028010000005270000000280100 *0000523000000028000000002800000000732b0000006275696c645c62646973742e77696e3332 *5c6567675c7365747570746f6f6c735c73616e64626f782e70795263000000a500000073020000 *0000016302000000040000000600000043000000736d0000007c00006900007d02007a53007401 *007c00005f00007402006903006904007402006903006905007c01008301008301007d03007c03 *007c00006906006a0200701300017c03006907007c00006908008301006f050001740900530157 *6400007c02007c00005f0000586400005328010000004e280a000000523d000000523e00000052 *0c0000005210000000526b000000526c000000526d000000522d000000526e000000523c000000 *2804000000523000000052100000007406000000616374697665526c0000002800000000280000 *0000732b0000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c73 *5c73616e64626f782e70795276000000a8000000730e00000000010901030109011e0123010902 *630300000005000000050000004f000000734b0000007c01007c00006900006a06006f3700017c *00006901007c02008301000c6f2600017c00006902007c01007403006904006905007c02008301 *007c03007c04008e0200016e0100017c0200532801000000731600000043616c6c656420666f72 *207061746820696e707574732806000000740900000077726974655f6f70735276000000527000 *0000520c0000005210000000526c0000002805000000523000000052650000005210000000521f *000000524300000028000000002800000000732b0000006275696c645c62646973742e77696e33 *325c6567675c7365747570746f6f6c735c73616e64626f782e7079524a000000b2000000730600 *0000000221012601630400000006000000060000004f00000073490000007c00006900007c0200 *8301000c701100017c00006900007c03008301000c6f1d00017c00006901007c01007c02007c03 *007c04007c05008e0300016e0100017c02007c0300660200532801000000733f00000043616c6c *656420666f722070617468207061697273206c696b652072656e616d652c206c696e6b2c20616e *642073796d6c696e6b206f7065726174696f6e7328020000005276000000527000000028060000 *005230000000526500000052410000005242000000521f00000052430000002800000000280000 *0000732b0000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c73 *5c73616e64626f782e70795240000000b80000007306000000000222011d0169ff010000630400 *000004000000050000004300000073490000007c0200740000406f2b00017c00006901007c0100 *8301000c6f1a00017c00006902006401007c01007c02007c0300830400016e0100017403006904 *007c01007c02007c0300830300532802000000731e00000043616c6c656420666f72206c6f772d *6c6576656c206f732e6f70656e282973070000006f732e6f70656e2805000000740b0000005752 *4954455f464c41475352760000005270000000522c000000523a00000028040000005230000000 *523b0000007405000000666c616773527700000028000000002800000000732b0000006275696c *645c62646973742e77696e33325c6567675c7365747570746f6f6c735c73616e64626f782e7079 *523a000000be000000730600000000021c011a01280e0000005208000000526600000052670000 *00740400000064696374740800000066726f6d6b65797352790000005233000000527000000052 *3800000052630000005276000000524a0000005240000000523a00000028000000002800000000 *2800000000732b0000006275696c645c62646973742e77696e33325c6567675c7365747570746f *6f6c735c73616e64626f782e7079520200000090000000731800000006010602060115011b0309 *0509030c050903090a0906090673340000004f5f57524f4e4c59204f5f52445752204f5f415050 *454e44204f5f4352454154204f5f5452554e43204f5f54454d504f524152596900000000630000 *000000000000010000004200000073170000006500005a01006400005a02006401008400005a03 *00525328020000007345000000412073657475702073637269707420617474656d707465642074 *6f206d6f64696679207468652066696c6573797374656d206f757473696465207468652073616e *64626f786301000000010000000200000043000000730b0000006401007c000069000016532802 *0000004e73b301000053616e64626f7856696f6c6174696f6e3a20257325722025730a0a546865 *207061636b616765207365747570207363726970742068617320617474656d7074656420746f20 *6d6f646966792066696c6573206f6e20796f75722073797374656d0a7468617420617265206e6f *742077697468696e207468652045617379496e7374616c6c206275696c6420617265612c20616e *6420686173206265656e2061626f727465642e0a0a54686973207061636b6167652063616e6e6f *7420626520736166656c7920696e7374616c6c65642062792045617379496e7374616c6c2c2061 *6e64206d6179206e6f740a737570706f727420616c7465726e61746520696e7374616c6c617469 *6f6e206c6f636174696f6e73206576656e20696620796f752072756e206974732073657475700a *7363726970742062792068616e642e2020506c6561736520696e666f726d20746865207061636b *616765277320617574686f7220616e64207468652045617379496e7374616c6c0a6d61696e7461 *696e65727320746f2066696e64206f7574206966206120666978206f7220776f726b61726f756e *6420697320617661696c61626c652e2801000000521f0000002801000000523000000028000000 *002800000000732b0000006275696c645c62646973742e77696e33325c6567675c736574757074 *6f6f6c735c73616e64626f782e707974070000005f5f7374725f5fd10000007302000000000928 *04000000520800000052660000005267000000527e000000280000000028000000002800000000 *732b0000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c73 *616e64626f782e70795203000000ce00000073040000000601060228000000002818000000520c *000000520e0000005239000000521600000074080000006f70657261746f725218000000523200 *0000522c000000523a00000052380000007410000000646973747574696c732e6572726f727352 *0000000074070000005f5f616c6c5f5f5204000000520100000052020000007406000000726564 *75636574030000006f725f5231000000740500000073706c69747401000000615235000000527a *0000005203000000280000000028000000002800000000732b0000006275696c645c6264697374 *2e77696e33325c6567675c7365747570746f6f6c735c73616e64626f782e707974080000003c6d *6f64756c653e0100000073180000003c0110010601100212020922136616350301060107012f06 * addfile ./setuptools-0.6c14devdev.egg/setuptools/site-patch.py hunk ./setuptools-0.6c14devdev.egg/setuptools/site-patch.py 1 +def __boot(): + import sys, imp, os, os.path + PYTHONPATH = os.environ.get('PYTHONPATH') + if PYTHONPATH is None or (sys.platform=='win32' and not PYTHONPATH): + PYTHONPATH = [] + else: + PYTHONPATH = PYTHONPATH.split(os.pathsep) + + pic = getattr(sys,'path_importer_cache',{}) + stdpath = sys.path[len(PYTHONPATH):] + mydir = os.path.dirname(__file__) + #print "searching",stdpath,sys.path + + for item in stdpath: + if item==mydir or not item: + continue # skip if current dir. on Windows, or my own directory + importer = pic.get(item) + if importer is not None: + loader = importer.find_module('site') + if loader is not None: + # This should actually reload the current module + loader.load_module('site') + break + else: + try: + stream, path, descr = imp.find_module('site',[item]) + except ImportError: + continue + if stream is None: + continue + try: + # This should actually reload the current module + imp.load_module('site',stream,path,descr) + finally: + stream.close() + break + else: + raise ImportError("Couldn't find the real 'site' module") + + #print "loaded", __file__ + + known_paths = dict([(makepath(item)[1],1) for item in sys.path]) # 2.2 comp + + oldpos = getattr(sys,'__egginsert',0) # save old insertion position + sys.__egginsert = 0 # and reset the current one + + for item in PYTHONPATH: + addsitedir(item) + + sys.__egginsert += oldpos # restore effective old position + + d,nd = makepath(stdpath[0]) + insert_at = None + new_path = [] + + for item in sys.path: + p,np = makepath(item) + + if np==nd and insert_at is None: + # We've hit the first 'system' path entry, so added entries go here + insert_at = len(new_path) + + if np in known_paths or insert_at is None: + new_path.append(item) + else: + # new path after the insert point, back-insert it + new_path.insert(insert_at, item) + insert_at += 1 + + sys.path[:] = new_path + +if __name__=='site': + __boot() + del __boot addfile ./setuptools-0.6c14devdev.egg/setuptools/site-patch.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/site-patch.pyc oldhex * newhex *d1f20d0a4f1ef84b630000000000000000020000004000000073280000006400008400005a0000 *6501006401006a02006f0e0001650000830000015b00006e010001640200532803000000630000 *000016000000110000004300000073fd0200006401006400006b00007d00006401006400006b01 *007d01006401006400006b02007d02006401006400006b03007d02007c02006904006905006402 *008301007d03007c03006400006a0800701800017c00006907006403006a02006f1200017c0300 *0c6f0a00016700007d03006e1300017c03006908007c02006909008301007d0300740a007c0000 *6404006800008303007d04007c0000690b00740c007c03008301001f7d05007c0200690b00690d *00740e008301007d060078fc007c0500445de8007d07007c07007c06006a0200700800017c0700 *0c6f07000171c1006e0100017c04006905007c07008301007d08007c08006400006a09006f3200 *017c0800690f006405008301007d09007c09006400006a09006f1200017c090069100064050083 *0100015071a9010171c100017922007c0100690f006405007c07006701008302005c03007d0a00 *7d0b007d0c00576e1600047411006a0a006f0a000101010171c1006e020001587c0a006400006a *08006f07000171c1006e0100017a1a007c01006910006405007c0a007c0b007c0c008304000157 *6400007c0a0069120083000001585071c10057741100640600830100820100741300670000047d *0d007c0000690b00445d1d007d07007c0d007414007c0700830100640700196407006602001271 *ca017e0d008301007d0e00740a007c00006408006409008303007d0f006409007c00005f150078 *18007c0300445d10007d07007416007c070083010001711502577c0000046915007c0f0037025f *15007414007c0500640900198301005c02007d10007d11006400007d12006700007d1300789200 *7c0000690b00445d87007d07007414007c07008301005c02007d14007d15007c15007c11006a02 *006f1d00017c12006400006a08006f100001740c007c13008301007d12006e0100017c15007c0e *006a0600700d00017c12006400006a08006f1100017c13006917007c070083010001716402017c *13006918007c12007c0700830200017c1200640700377d1200716402577c13007c0000690b0028 *64000053280a0000004e69ffffffff740a000000505954484f4e50415448740500000077696e33 *327413000000706174685f696d706f727465725f63616368657404000000736974657324000000 *436f756c646e27742066696e6420746865207265616c20277369746527206d6f64756c65690100 *0000740b0000005f5f656767696e73657274690000000028190000007403000000737973740300 *0000696d7074020000006f7374070000006f732e706174687407000000656e7669726f6e740300 *000067657474040000004e6f6e657408000000706c6174666f726d740500000073706c69747407 *0000007061746873657074070000006765746174747274040000007061746874030000006c656e *74070000006469726e616d6574080000005f5f66696c655f5f740b00000066696e645f6d6f6475 *6c65740b0000006c6f61645f6d6f64756c65740b000000496d706f72744572726f727405000000 *636c6f736574040000006469637474080000006d616b65706174685204000000740a0000006164 *64736974656469727406000000617070656e647406000000696e73657274281600000052050000 *005206000000520700000052000000007403000000706963740700000073746470617468740500 *00006d7964697274040000006974656d7408000000696d706f7274657274060000006c6f616465 *72740600000073747265616d52100000007405000000646573637274040000005f5b315d740b00 *00006b6e6f776e5f706174687374060000006f6c64706f7374010000006474020000006e647409 *000000696e736572745f617474080000006e65775f7061746874010000007074020000006e7028 *000000002800000000732e0000006275696c645c62646973742e77696e33325c6567675c736574 *7570746f6f6c735c736974652d70617463682e707974060000005f5f626f6f7401000000736200 *000000013001120125010a02120212011301120307000601150107010f010d010f010d020d0109 *02030122010e0108010d01070103021a020b0105020c043a0212010902070006010e020f021601 *060106020a00060112021a0210021a01110310010e0252030000004e2802000000522e00000074 *080000005f5f6e616d655f5f280000000028000000002800000000732e0000006275696c645c62 *646973742e77696e33325c6567675c7365747570746f6f6c735c736974652d70617463682e7079 *74080000003c6d6f64756c653e01000000730600000009470d010701 adddir ./setuptools-0.6c14devdev.egg/setuptools/tests addfile ./setuptools-0.6c14devdev.egg/setuptools/tests/__init__.py hunk ./setuptools-0.6c14devdev.egg/setuptools/tests/__init__.py 1 +"""Tests for the 'setuptools' package""" +from unittest import TestSuite, TestCase, makeSuite, defaultTestLoader +import distutils.core, distutils.cmd +from distutils.errors import DistutilsOptionError, DistutilsPlatformError +from distutils.errors import DistutilsSetupError +import setuptools, setuptools.dist +from setuptools import Feature +from distutils.core import Extension +extract_constant, get_module_constant = None, None +from setuptools.depends import * +from distutils.version import StrictVersion, LooseVersion +from distutils.util import convert_path +import sys, os.path + +def additional_tests(): + import doctest, unittest + suite = unittest.TestSuite(( + doctest.DocFileSuite('api_tests.txt', + optionflags=doctest.ELLIPSIS, package=__name__, + ), + )) + if sys.platform == 'win32': + suite.addTest(doctest.DocFileSuite('win_script_wrapper.txt')) + return suite + +def makeSetup(**args): + """Return distribution from 'setup(**args)', without executing commands""" + + distutils.core._setup_stop_after = "commandline" + + # Don't let system command line leak into tests! + args.setdefault('script_args',['install']) + + try: + return setuptools.setup(**args) + finally: + distutils.core_setup_stop_after = None + + + + +class DependsTests(TestCase): + + def testExtractConst(self): + if not extract_constant: return # skip on non-bytecode platforms + + def f1(): + global x,y,z + x = "test" + y = z + + # unrecognized name + self.assertEqual(extract_constant(f1.func_code,'q', -1), None) + + # constant assigned + self.assertEqual(extract_constant(f1.func_code,'x', -1), "test") + + # expression assigned + self.assertEqual(extract_constant(f1.func_code,'y', -1), -1) + + # recognized name, not assigned + self.assertEqual(extract_constant(f1.func_code,'z', -1), None) + + + def testFindModule(self): + self.assertRaises(ImportError, find_module, 'no-such.-thing') + self.assertRaises(ImportError, find_module, 'setuptools.non-existent') + f,p,i = find_module('setuptools.tests'); f.close() + + def testModuleExtract(self): + if not get_module_constant: return # skip on non-bytecode platforms + from distutils import __version__ + self.assertEqual( + get_module_constant('distutils','__version__'), __version__ + ) + self.assertEqual( + get_module_constant('sys','version'), sys.version + ) + self.assertEqual( + get_module_constant('setuptools.tests','__doc__'),__doc__ + ) + + def testRequire(self): + if not extract_constant: return # skip on non-bytecode platforms + + req = Require('Distutils','1.0.3','distutils') + + self.assertEqual(req.name, 'Distutils') + self.assertEqual(req.module, 'distutils') + self.assertEqual(req.requested_version, '1.0.3') + self.assertEqual(req.attribute, '__version__') + self.assertEqual(req.full_name(), 'Distutils-1.0.3') + + from distutils import __version__ + self.assertEqual(req.get_version(), __version__) + self.failUnless(req.version_ok('1.0.9')) + self.failIf(req.version_ok('0.9.1')) + self.failIf(req.version_ok('unknown')) + + self.failUnless(req.is_present()) + self.failUnless(req.is_current()) + + req = Require('Distutils 3000','03000','distutils',format=LooseVersion) + self.failUnless(req.is_present()) + self.failIf(req.is_current()) + self.failIf(req.version_ok('unknown')) + + req = Require('Do-what-I-mean','1.0','d-w-i-m') + self.failIf(req.is_present()) + self.failIf(req.is_current()) + + req = Require('Tests', None, 'tests', homepage="http://example.com") + self.assertEqual(req.format, None) + self.assertEqual(req.attribute, None) + self.assertEqual(req.requested_version, None) + self.assertEqual(req.full_name(), 'Tests') + self.assertEqual(req.homepage, 'http://example.com') + + paths = [os.path.dirname(p) for p in __path__] + self.failUnless(req.is_present(paths)) + self.failUnless(req.is_current(paths)) + + +class DistroTests(TestCase): + + def setUp(self): + self.e1 = Extension('bar.ext',['bar.c']) + self.e2 = Extension('c.y', ['y.c']) + + self.dist = makeSetup( + packages=['a', 'a.b', 'a.b.c', 'b', 'c'], + py_modules=['b.d','x'], + ext_modules = (self.e1, self.e2), + package_dir = {}, + ) + + + def testDistroType(self): + self.failUnless(isinstance(self.dist,setuptools.dist.Distribution)) + + + def testExcludePackage(self): + self.dist.exclude_package('a') + self.assertEqual(self.dist.packages, ['b','c']) + + self.dist.exclude_package('b') + self.assertEqual(self.dist.packages, ['c']) + self.assertEqual(self.dist.py_modules, ['x']) + self.assertEqual(self.dist.ext_modules, [self.e1, self.e2]) + + self.dist.exclude_package('c') + self.assertEqual(self.dist.packages, []) + self.assertEqual(self.dist.py_modules, ['x']) + self.assertEqual(self.dist.ext_modules, [self.e1]) + + # test removals from unspecified options + makeSetup().exclude_package('x') + + + + + + + + def testIncludeExclude(self): + # remove an extension + self.dist.exclude(ext_modules=[self.e1]) + self.assertEqual(self.dist.ext_modules, [self.e2]) + + # add it back in + self.dist.include(ext_modules=[self.e1]) + self.assertEqual(self.dist.ext_modules, [self.e2, self.e1]) + + # should not add duplicate + self.dist.include(ext_modules=[self.e1]) + self.assertEqual(self.dist.ext_modules, [self.e2, self.e1]) + + def testExcludePackages(self): + self.dist.exclude(packages=['c','b','a']) + self.assertEqual(self.dist.packages, []) + self.assertEqual(self.dist.py_modules, ['x']) + self.assertEqual(self.dist.ext_modules, [self.e1]) + + def testEmpty(self): + dist = makeSetup() + dist.include(packages=['a'], py_modules=['b'], ext_modules=[self.e2]) + dist = makeSetup() + dist.exclude(packages=['a'], py_modules=['b'], ext_modules=[self.e2]) + + def testContents(self): + self.failUnless(self.dist.has_contents_for('a')) + self.dist.exclude_package('a') + self.failIf(self.dist.has_contents_for('a')) + + self.failUnless(self.dist.has_contents_for('b')) + self.dist.exclude_package('b') + self.failIf(self.dist.has_contents_for('b')) + + self.failUnless(self.dist.has_contents_for('c')) + self.dist.exclude_package('c') + self.failIf(self.dist.has_contents_for('c')) + + + + + def testInvalidIncludeExclude(self): + self.assertRaises(DistutilsSetupError, + self.dist.include, nonexistent_option='x' + ) + self.assertRaises(DistutilsSetupError, + self.dist.exclude, nonexistent_option='x' + ) + self.assertRaises(DistutilsSetupError, + self.dist.include, packages={'x':'y'} + ) + self.assertRaises(DistutilsSetupError, + self.dist.exclude, packages={'x':'y'} + ) + self.assertRaises(DistutilsSetupError, + self.dist.include, ext_modules={'x':'y'} + ) + self.assertRaises(DistutilsSetupError, + self.dist.exclude, ext_modules={'x':'y'} + ) + + self.assertRaises(DistutilsSetupError, + self.dist.include, package_dir=['q'] + ) + self.assertRaises(DistutilsSetupError, + self.dist.exclude, package_dir=['q'] + ) + + + + + + + + + + + + + + + +class FeatureTests(TestCase): + + def setUp(self): + self.req = Require('Distutils','1.0.3','distutils') + self.dist = makeSetup( + features={ + 'foo': Feature("foo",standard=True,require_features=['baz',self.req]), + 'bar': Feature("bar", standard=True, packages=['pkg.bar'], + py_modules=['bar_et'], remove=['bar.ext'], + ), + 'baz': Feature( + "baz", optional=False, packages=['pkg.baz'], + scripts = ['scripts/baz_it'], + libraries=[('libfoo','foo/foofoo.c')] + ), + 'dwim': Feature("DWIM", available=False, remove='bazish'), + }, + script_args=['--without-bar', 'install'], + packages = ['pkg.bar', 'pkg.foo'], + py_modules = ['bar_et', 'bazish'], + ext_modules = [Extension('bar.ext',['bar.c'])] + ) + + def testDefaults(self): + self.failIf( + Feature( + "test",standard=True,remove='x',available=False + ).include_by_default() + ) + self.failUnless( + Feature("test",standard=True,remove='x').include_by_default() + ) + # Feature must have either kwargs, removes, or require_features + self.assertRaises(DistutilsSetupError, Feature, "test") + + def testAvailability(self): + self.assertRaises( + DistutilsPlatformError, + self.dist.features['dwim'].include_in, self.dist + ) + + def testFeatureOptions(self): + dist = self.dist + self.failUnless( + ('with-dwim',None,'include DWIM') in dist.feature_options + ) + self.failUnless( + ('without-dwim',None,'exclude DWIM (default)') in dist.feature_options + ) + self.failUnless( + ('with-bar',None,'include bar (default)') in dist.feature_options + ) + self.failUnless( + ('without-bar',None,'exclude bar') in dist.feature_options + ) + self.assertEqual(dist.feature_negopt['without-foo'],'with-foo') + self.assertEqual(dist.feature_negopt['without-bar'],'with-bar') + self.assertEqual(dist.feature_negopt['without-dwim'],'with-dwim') + self.failIf('without-baz' in dist.feature_negopt) + + def testUseFeatures(self): + dist = self.dist + self.assertEqual(dist.with_foo,1) + self.assertEqual(dist.with_bar,0) + self.assertEqual(dist.with_baz,1) + self.failIf('bar_et' in dist.py_modules) + self.failIf('pkg.bar' in dist.packages) + self.failUnless('pkg.baz' in dist.packages) + self.failUnless('scripts/baz_it' in dist.scripts) + self.failUnless(('libfoo','foo/foofoo.c') in dist.libraries) + self.assertEqual(dist.ext_modules,[]) + self.assertEqual(dist.require_features, [self.req]) + + # If we ask for bar, it should fail because we explicitly disabled + # it on the command line + self.assertRaises(DistutilsOptionError, dist.include_feature, 'bar') + + def testFeatureWithInvalidRemove(self): + self.assertRaises( + SystemExit, makeSetup, features = {'x':Feature('x', remove='y')} + ) + +class TestCommandTests(TestCase): + + def testTestIsCommand(self): + test_cmd = makeSetup().get_command_obj('test') + self.failUnless(isinstance(test_cmd, distutils.cmd.Command)) + + def testLongOptSuiteWNoDefault(self): + ts1 = makeSetup(script_args=['test','--test-suite=foo.tests.suite']) + ts1 = ts1.get_command_obj('test') + ts1.ensure_finalized() + self.assertEqual(ts1.test_suite, 'foo.tests.suite') + + def testDefaultSuite(self): + ts2 = makeSetup(test_suite='bar.tests.suite').get_command_obj('test') + ts2.ensure_finalized() + self.assertEqual(ts2.test_suite, 'bar.tests.suite') + + def testDefaultWModuleOnCmdLine(self): + ts3 = makeSetup( + test_suite='bar.tests', + script_args=['test','-m','foo.tests'] + ).get_command_obj('test') + ts3.ensure_finalized() + self.assertEqual(ts3.test_module, 'foo.tests') + self.assertEqual(ts3.test_suite, 'foo.tests.test_suite') + + def testConflictingOptions(self): + ts4 = makeSetup( + script_args=['test','-m','bar.tests', '-s','foo.tests.suite'] + ).get_command_obj('test') + self.assertRaises(DistutilsOptionError, ts4.ensure_finalized) + + def testNoSuite(self): + ts5 = makeSetup().get_command_obj('test') + ts5.ensure_finalized() + self.assertEqual(ts5.test_suite, None) + + + + + addfile ./setuptools-0.6c14devdev.egg/setuptools/tests/__init__.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/tests/__init__.pyc oldhex * newhex *d1f20d0a501ef84b630000000000000000110000004000000073600100006400005a0000640100 *6402006b01006c02005a02006c03005a03006c04005a04006c05005a0500016401006403006b06 *005a07006401006403006b08005a07006401006404006b09006c0a005a0a006c0b005a0b000164 *01006405006b09006c0c005a0c00016401006403006b0d005a0d006401006403006b0e005a0d00 *6401006406006b0d006c0f005a0f00016401006407006b06006c10005a1000016415005c02005a *12005a13006401006408006b1400546401006409006b15006c16005a16006c17005a1700016401 *00640a006b18006c19005a1900016401006403006b1a005a1a006401006403006b1b005a1c0064 *0b008400005a1d00640c008400005a1e00640d00650300660100640e00840000830000595a1f00 *640f00650300660100641000840000830000595a20006411006503006601006412008400008300 *00595a2100641300650300660100641400840000830000595a2200640300532816000000732200 *0000546573747320666f722074686520277365747570746f6f6c7327207061636b61676569ffff *ffff28040000007409000000546573745375697465740800000054657374436173657409000000 *6d616b655375697465741100000064656661756c74546573744c6f616465724e28020000007414 *000000446973747574696c734f7074696f6e4572726f727416000000446973747574696c73506c *6174666f726d4572726f7228010000007413000000446973747574696c7353657475704572726f *72280100000074070000004665617475726528010000007409000000457874656e73696f6e2801 *00000074010000002a2802000000740d00000053747269637456657273696f6e740c0000004c6f *6f736556657273696f6e2801000000740c000000636f6e766572745f7061746863000000000300 *0000090000004300000073700000006401006400006b00007d00006401006400006b01007d0100 *7c01006902007c00006903006402006403007c0000690400640400740500830102660100830100 *7d02007406006907006405006a02006f1a00017c02006908007c00006903006406008301008301 *00016e0100017c02005328070000004e69ffffffff730d0000006170695f74657374732e747874 *740b0000006f7074696f6e666c61677374070000007061636b616765740500000077696e333273 *1600000077696e5f7363726970745f777261707065722e74787428090000007407000000646f63 *746573747408000000756e6974746573745200000000740c000000446f6346696c655375697465 *7408000000454c4c495053495374080000005f5f6e616d655f5f74030000007379737408000000 *706c6174666f726d74070000006164645465737428030000005210000000521100000074050000 *0073756974652800000000280000000073320000006275696c645c62646973742e77696e33325c *6567675c7365747570746f6f6c735c74657374735c5f5f696e69745f5f2e707974100000006164 *646974696f6e616c5f74657374730f000000730e0000000001180106010c01180310011a016300 *00000001000000060000004b00000073410000006401007400006901005f02007c000069030064 *0200640300670100830200017a11007404006905007c00008d000053576404006404007400005f *070058640400532805000000734400000052657475726e20646973747269627574696f6e206672 *6f6d20277365747570282a2a6172677329272c20776974686f757420657865637574696e672063 *6f6d6d616e6473740b000000636f6d6d616e646c696e65740b0000007363726970745f61726773 *7407000000696e7374616c6c4e28080000007409000000646973747574696c737404000000636f *726574110000005f73657475705f73746f705f6166746572740a00000073657464656661756c74 *740a0000007365747570746f6f6c737405000000736574757074040000004e6f6e657415000000 *636f72655f73657475705f73746f705f6166746572280100000074040000006172677328000000 *00280000000073320000006275696c645c62646973742e77696e33325c6567675c736574757074 *6f6f6c735c74657374735c5f5f696e69745f5f2e707974090000006d616b6553657475701a0000 *00730a00000000030c03130203011102740c000000446570656e64735465737473630000000000 *0000000100000042000000732c0000006500005a01006400008400005a02006401008400005a03 *006402008400005a04006403008400005a05005253280400000063010000000200000005000000 *4300000073950000007400007005000164000053016401008400007d01007c0000690100740000 *7c0100690200640200640300830300640000830200017c00006901007400007c01006902006404 *00640300830300640500830200017c00006901007400007c010069020064060064030083030064 *0300830200017c00006901007400007c0100690200640700640300830300640000830200016400 *005328080000004e63000000000000000001000000530000007310000000640100610000740100 *6102006400005328020000004e740400000074657374280300000074010000007874010000007a *74010000007928000000002800000000280000000073320000006275696c645c62646973742e77 *696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f696e69745f5f2e70797402 *00000066312f00000073040000000002060174010000007169ffffffff52290000005228000000 *522b000000522a00000028040000007410000000657874726163745f636f6e7374616e74740b00 *0000617373657274457175616c740900000066756e635f636f6465522300000028020000007404 *00000073656c66522c0000002800000000280000000073320000006275696c645c62646973742e *77696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f696e69745f5f2e707974 *100000007465737445787472616374436f6e73742c000000730e00000000010700050209061f03 *1f031f03630100000004000000040000004300000073490000007c000069000074010074020064 *0100830300017c0000690000740100740200640200830300017402006403008301005c03007d01 *007d02007d03007c0100690300830000016400005328040000004e730e0000006e6f2d73756368 *2e2d7468696e6773170000007365747570746f6f6c732e6e6f6e2d6578697374656e7473100000 *007365747570746f6f6c732e74657374732804000000740c000000617373657274526169736573 *740b000000496d706f72744572726f72740b00000066696e645f6d6f64756c657405000000636c *6f7365280400000052310000007401000000667401000000707401000000692800000000280000 *000073320000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c73 *5c74657374735c5f5f696e69745f5f2e7079740e0000007465737446696e644d6f64756c654100 *0000730800000000011301130115006301000000020000000500000043000000736e0000007400 *007005000164000053016401006402006b01006c02007d0100017c000069030074000064030064 *04008302007c0100830200017c0000690300740000640500640600830200740400690500830200 *017c0000690300740000640700640800830200740600830200016400005328090000004e69ffff *ffff2801000000740b0000005f5f76657273696f6e5f5f521d000000523b000000521500000074 *0700000076657273696f6e73100000007365747570746f6f6c732e746573747374070000005f5f *646f635f5f280700000074130000006765745f6d6f64756c655f636f6e7374616e74521d000000 *523b000000522f0000005215000000523c000000523d00000028020000005231000000523b0000 *002800000000280000000073320000006275696c645c62646973742e77696e33325c6567675c73 *65747570746f6f6c735c74657374735c5f5f696e69745f5f2e70797411000000746573744d6f64 *756c65457874726163744600000073120000000001070005011001060113020601160206016301 *000000060000000700000043000000737102000074000070050001640000530174010064010064 *02006403008303007d01007c00006902007c0100690300640100830200017c00006902007c0100 *690400640300830200017c00006902007c0100690500640200830200017c00006902007c010069 *0600640400830200017c00006902007c0100690700830000640500830200016406006407006b08 *006c09007d0200017c00006902007c0100690a008300007c0200830200017c0000690b007c0100 *690c00640800830100830100017c0000690d007c0100690c00640900830100830100017c000069 *0d007c0100690c00640a00830100830100017c0000690b007c0100690e00830000830100017c00 *00690b007c0100690f0083000083010001740100640b00640c00640300640d007410008303017d *01007c0000690b007c0100690e00830000830100017c0000690d007c0100690f00830000830100 *017c0000690d007c0100690c00640a0083010083010001740100640e00640f006410008303007d *01007c0000690d007c0100690e00830000830100017c0000690d007c0100690f00830000830100 *017401006411006400006412006413006414008303017d01007c00006902007c01006912006400 *00830200017c00006902007c0100690600640000830200017c00006902007c0100690500640000 *830200017c00006902007c0100690700830000641100830200017c00006902007c010069130064 *140083020001670000047d0300741400445d19007d04007c03007415006916006917007c040083 *010012711f027e03007d05007c0000690b007c0100690e007c0500830100830100017c0000690b *007c0100690f007c0500830100830100016400005328150000004e740900000044697374757469 *6c737305000000312e302e33521d000000523b000000730f000000446973747574696c732d312e *302e3369ffffffff2801000000523b0000007305000000312e302e397305000000302e392e3174 *07000000756e6b6e6f776e730e000000446973747574696c732033303030740500000030333030 *307406000000666f726d6174730e000000446f2d776861742d492d6d65616e7303000000312e30 *7307000000642d772d692d6d74050000005465737473740500000074657374737408000000686f *6d65706167657312000000687474703a2f2f6578616d706c652e636f6d2818000000522e000000 *740700000052657175697265522f00000074040000006e616d6574060000006d6f64756c657411 *0000007265717565737465645f76657273696f6e74090000006174747269627574657409000000 *66756c6c5f6e616d65521d000000523b000000740b0000006765745f76657273696f6e740a0000 *006661696c556e6c657373740a00000076657273696f6e5f6f6b74060000006661696c4966740a *00000069735f70726573656e74740a00000069735f63757272656e74520b000000522300000052 *43000000524600000074080000005f5f706174685f5f74020000006f7374040000007061746874 *070000006469726e616d65280600000052310000007403000000726571523b0000007404000000 *5f5b315d5238000000740500000070617468732800000000280000000073320000006275696c64 *5c62646973742e77696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f696e69 *745f5f2e7079740b000000746573745265717569726553000000733e0000000001070005021202 *130113011301130116021001160116011601160213011302180113011301160212011301130218 *01130113011301160113022d01160128060000005214000000740a0000005f5f6d6f64756c655f *5f5232000000523a000000523f000000525a000000280000000028000000002800000000733200 *00006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c74657374 *735c5f5f696e69745f5f2e707952270000002a0000007308000000060209150905090d740b0000 *0044697374726f5465737473630000000000000000010000004200000073500000006500005a01 *006400008400005a02006401008400005a03006402008400005a04006403008400005a05006404 *008400005a06006405008400005a07006406008400005a08006407008400005a09005253280800 *000063010000000100000009000000430000007373000000740000640100640200670100830200 *7c00005f01007400006403006404006701008302007c00005f0200740300640500640600640700 *640800640900640a00670500640b00640c00640d00670200640e007c00006901007c0000690200 *660200640f006800008300047c00005f04006400005328100000004e73070000006261722e6578 *7473050000006261722e637303000000632e797303000000792e6374080000007061636b616765 *737401000000617303000000612e627305000000612e622e63740100000062740100000063740a *00000070795f6d6f64756c65737303000000622e645229000000740b0000006578745f6d6f6475 *6c6573740b0000007061636b6167655f6469722805000000520800000074020000006531740200 *000065325226000000740400000064697374280100000052310000002800000000280000000073 *320000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c7465 *7374735c5f5f696e69745f5f2e7079740500000073657455707e000000730e0000000001150115 *02060115010c011201630100000001000000040000004300000073230000007c00006900007401 *007c0000690200740300690200690400830200830100016400005328010000004e280500000052 *4e000000740a0000006973696e7374616e636552660000005221000000740c0000004469737472 *69627574696f6e280100000052310000002800000000280000000073320000006275696c645c62 *646973742e77696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f696e69745f *5f2e7079740e0000007465737444697374726f547970658a000000730200000000016301000000 *01000000040000004300000073ff0000007c0000690000690100640100830100017c0000690200 *7c0000690000690300640200640300670200830200017c0000690000690100640200830100017c *00006902007c0000690000690300640300670100830200017c00006902007c0000690000690400 *640400670100830200017c00006902007c00006900006905007c00006906007c00006907006702 *00830200017c0000690000690100640300830100017c00006902007c0000690000690300670000 *830200017c00006902007c0000690000690400640400670100830200017c00006902007c000069 *00006905007c000069060067010083020001740800830000690100640400830100016400005328 *050000004e525e000000525f0000005260000000522900000028090000005266000000740f0000 *006578636c7564655f7061636b616765522f000000525d00000052610000005262000000526400 *000052650000005226000000280100000052310000002800000000280000000073320000006275 *696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f *696e69745f5f2e70797412000000746573744578636c7564655061636b6167658e000000731600 *0000000110011c0210011901190122021001160119011c03630100000001000000040000004300 *000073af0000007c00006900006901006401007c0000690200670100830001017c00006903007c *00006900006904007c0000690500670100830200017c00006900006906006401007c0000690200 *670100830001017c00006903007c00006900006904007c00006905007c00006902006702008302 *00017c00006900006906006401007c0000690200670100830001017c00006903007c0000690000 *6904007c00006905007c0000690200670200830200016400005328020000004e52620000002807 *000000526600000074070000006578636c7564655264000000522f000000526200000052650000 *007407000000696e636c7564652801000000523100000028000000002800000000733200000062 *75696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c74657374735c5f *5f696e69745f5f2e7079741200000074657374496e636c7564654578636c756465a5000000730c *000000000219011c031901220319016301000000010000000500000043000000736b0000007c00 *00690000690100640100640200640300640400670300830001017c00006902007c000069000069 *0300670000830200017c00006902007c0000690000690400640500670100830200017c00006902 *007c00006900006905007c0000690600670100830200016400005328060000004e525d00000052 *60000000525f000000525e000000522900000028070000005266000000526d000000522f000000 *525d00000052610000005262000000526400000028010000005231000000280000000028000000 *0073320000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c *74657374735c5f5f696e69745f5f2e70797413000000746573744578636c7564655061636b6167 *6573b2000000730800000000011c01160119016301000000020000000700000043000000736600 *00007400008300007d01007c01006901006401006402006701006403006404006701006405007c *0000690200670100830003017400008300007d01007c0100690300640100640200670100640300 *6404006701006405007c0000690200670100830003016400005328060000004e525d000000525e *0000005261000000525f000000526200000028040000005226000000526e000000526500000052 *6d0000002802000000523100000052660000002800000000280000000073320000006275696c64 *5c62646973742e77696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f696e69 *745f5f2e7079740900000074657374456d707479b8000000730800000000010901280109016301 *00000001000000030000004300000073ca0000007c00006900007c000069010069020064010083 *0100830100017c0000690100690300640100830100017c00006904007c00006901006902006401 *00830100830100017c00006900007c0000690100690200640200830100830100017c0000690100 *690300640200830100017c00006904007c0000690100690200640200830100830100017c000069 *00007c0000690100690200640300830100830100017c0000690100690300640300830100017c00 *006904007c0000690100690200640300830100830100016400005328040000004e525e00000052 *5f00000052600000002805000000524e000000526600000074100000006861735f636f6e74656e *74735f666f72526b00000052500000002801000000523100000028000000002800000000733200 *00006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c74657374 *735c5f5f696e69745f5f2e7079740c00000074657374436f6e74656e7473be0000007312000000 *000119011001190219011001190219011001630100000001000000070000004300000073060100 *007c00006900007401007c0000690200690300640100640200830201017c00006900007401007c *0000690200690400640100640200830201017c00006900007401007c0000690200690300640300 *68010064040064020036830201017c00006900007401007c000069020069040064030068010064 *040064020036830201017c00006900007401007c00006902006903006405006801006404006402 *0036830201017c00006900007401007c0000690200690400640500680100640400640200368302 *01017c00006900007401007c0000690200690300640600640700670100830201017c0000690000 *7401007c0000690200690400640600640700670100830201016400005328080000004e74120000 *006e6f6e6578697374656e745f6f7074696f6e5229000000525d000000522b0000005262000000 *5263000000522d0000002805000000523300000052060000005266000000526e000000526d0000 *00280100000052310000002800000000280000000073320000006275696c645c62646973742e77 *696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f696e69745f5f2e70797419 *00000074657374496e76616c6964496e636c7564654578636c756465ce00000073200000000001 *090113020901130209011a0209011a0209011a0209011a03090116020901280a00000052140000 *00525b0000005267000000526a000000526c000000526f00000052700000005271000000527300 *0000527500000028000000002800000000280000000073320000006275696c645c62646973742e *77696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f696e69745f5f2e707952 *5c0000007c00000073100000000602090c09040917090d090609060910740c0000004665617475 *726554657374736300000000000000000100000042000000733e0000006500005a010064000084 *00005a02006401008400005a03006402008400005a04006403008400005a05006404008400005a *06006405008400005a0700525328060000006301000000010000000e0000004300000073fb0000 *007400006401006402006403008303007c00005f01007402006404006804007403006405006406 *007404006407006408007c00006901006702008301026405003674030064090064060074040064 *0a00640b00670100640c00640d00670100640e00640f0067010083010464090036740300640800 *641000740500640a00641100670100641200641300670100641400642100670100830104640800 *36740300641700641800740500640e00641900830102641a0036641b00641c00641d0067020064 *0a00640b00641e00670200640c00640d00641900670200641f00740600640f0064200067010083 *02006701008300057c00005f07006400005328220000004e52400000007305000000312e302e33 *521d000000740800000066656174757265737403000000666f6f74080000007374616e64617264 *7410000000726571756972655f6665617475726573740300000062617a7403000000626172525d *0000007307000000706b672e626172526100000074060000006261725f6574740600000072656d *6f766573070000006261722e65787474080000006f7074696f6e616c7307000000706b672e6261 *7a740700000073637269707473730e000000736372697074732f62617a5f697474090000006c69 *6272617269657374060000006c6962666f6f730c000000666f6f2f666f6f666f6f2e6374040000 *004457494d7409000000617661696c61626c65740600000062617a69736874040000006477696d *521b000000730d0000002d2d776974686f75742d626172521c0000007307000000706b672e666f *6f526200000073050000006261722e6328020000005282000000730c000000666f6f2f666f6f66 *6f6f2e632808000000524700000052570000005226000000520700000074040000005472756574 *0500000046616c7365520800000052660000002801000000523100000028000000002800000000 *73320000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c74 *657374735c5f5f696e69745f5f2e70795267000000f9000000731e000000000115010601030122 *01180116020301150109010d021c020c010c010c01630100000001000000090000004300000073 *670000007c00006900007401006401006402007402006403006404006405007403008301036904 *00830000830100017c000069050074010064010064020074020064030064040083010269040083 *0000830100017c0000690600740700740100640100830300016400005328060000004e52280000 *005279000000527e00000052290000005284000000280800000052500000005207000000528700 *000052880000007412000000696e636c7564655f62795f64656661756c74524e00000052330000 *005206000000280100000052310000002800000000280000000073320000006275696c645c6264 *6973742e77696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f696e69745f5f *2e7079740c0000007465737444656661756c74730e010000730c00000000010601030122030601 *1f03630100000001000000040000004300000073270000007c00006900007401007c0000690200 *690300640100196904007c0000690200830300016400005328020000004e528600000028050000 *005233000000520500000052660000005277000000740a000000696e636c7564655f696e280100 *000052310000002800000000280000000073320000006275696c645c62646973742e77696e3332 *5c6567675c7365747570746f6f6c735c74657374735c5f5f696e69745f5f2e7079741000000074 *657374417661696c6162696c6974791a0100007306000000000106010301630100000002000000 *040000004300000073c00000007c00006900007d01007c0000690100640c007c01006903006a06 *00830100017c0000690100640d007c01006903006a0600830100017c0000690100640e007c0100 *6903006a0600830100017c0000690100640f007c01006903006a0600830100017c00006904007c *010069050064090019640a00830200017c00006904007c01006905006407001964050083020001 *7c00006904007c010069050064030019640100830200017c0000690600640b007c01006905006a *0600830100016400005328100000004e7309000000776974682d6477696d730c000000696e636c *756465204457494d730c000000776974686f75742d6477696d73160000006578636c7564652044 *57494d202864656661756c74297308000000776974682d6261727315000000696e636c75646520 *626172202864656661756c7429730b000000776974686f75742d626172730b0000006578636c75 *646520626172730b000000776974686f75742d666f6f7308000000776974682d666f6f730b0000 *00776974686f75742d62617a28030000007309000000776974682d6477696d4e730c000000696e *636c756465204457494d2803000000730c000000776974686f75742d6477696d4e731600000065 *78636c756465204457494d202864656661756c742928030000007308000000776974682d626172 *4e7315000000696e636c75646520626172202864656661756c74292803000000730b0000007769 *74686f75742d6261724e730b0000006578636c7564652062617228070000005266000000524e00 *00005223000000740f000000666561747572655f6f7074696f6e73522f000000740e0000006665 *61747572655f6e65676f7074525000000028020000005231000000526600000028000000002800 *00000073320000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c *735c74657374735c5f5f696e69745f5f2e7079741200000074657374466561747572654f707469 *6f6e7320010000731a000000000109010601100206011002060110020601100217011701170163 *0100000002000000040000004300000073f60000007c00006900007d01007c00006901007c0100 *690200640100830200017c00006901007c0100690300640200830200017c00006901007c010069 *0400640100830200017c00006905006403007c01006906006a0600830100017c00006905006404 *007c01006907006a0600830100017c00006908006405007c01006907006a0600830100017c0000 *6908006406007c01006909006a0600830100017c0000690800640a007c0100690a006a06008301 *00017c00006901007c0100690b00670000830200017c00006901007c0100690c007c0000690d00 *670100830200017c0000690e00740f007c01006910006409008303000164000053280b0000004e *69010000006900000000527d0000007307000000706b672e6261727307000000706b672e62617a *730e000000736372697074732f62617a5f69745282000000730c000000666f6f2f666f6f666f6f *2e63527c000000280200000073060000006c6962666f6f730c000000666f6f2f666f6f666f6f2e *6328110000005266000000522f0000007408000000776974685f666f6f7408000000776974685f *6261727408000000776974685f62617a52500000005261000000525d000000524e000000528000 *000052810000005262000000527a000000525700000052330000005204000000740f000000696e *636c7564655f666561747572652802000000523100000052660000002800000000280000000073 *320000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c7465 *7374735c5f5f696e69745f5f2e7079740f00000074657374557365466561747572657333010000 *731800000000010901130113011301160116011601160116011301190463010000000100000009 *00000043000000732d0000007c0000690000740100740200640100680100740300640200640300 *64040083010164020036830201016400005328050000004e52770000005229000000527e000000 *522b00000028040000005233000000740a00000053797374656d45786974522600000052070000 *00280100000052310000002800000000280000000073320000006275696c645c62646973742e77 *696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f696e69745f5f2e7079741c *000000746573744665617475726557697468496e76616c696452656d6f76654401000073040000 *000001060128080000005214000000525b0000005267000000528a000000528c000000528f0000 *005294000000529600000028000000002800000000280000000073320000006275696c645c6264 *6973742e77696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f696e69745f5f *2e70795276000000f7000000730c00000006020915090c09060913091174100000005465737443 *6f6d6d616e6454657374736300000000000000000100000042000000733e0000006500005a0100 *6400008400005a02006401008400005a03006402008400005a04006403008400005a0500640400 *8400005a06006405008400005a0700525328060000006301000000020000000400000043000000 *73320000007400008300006901006401008301007d01007c00006902007403007c010074040069 *0500690600830200830100016400005328020000004e522800000028070000005226000000740f *0000006765745f636f6d6d616e645f6f626a524e0000005268000000521d000000740300000063 *6d647407000000436f6d6d616e64280200000052310000007408000000746573745f636d642800 *000000280000000073320000006275696c645c62646973742e77696e33325c6567675c73657475 *70746f6f6c735c74657374735c5f5f696e69745f5f2e7079741100000074657374546573744973 *436f6d6d616e644b01000073040000000001120163010000000200000004000000430000007345 *0000007400006401006402006403006702008300017d01007c01006901006402008301007d0100 *7c0100690200830000017c00006903007c0100690400640400830200016400005328050000004e *521b0000005228000000731c0000002d2d746573742d73756974653d666f6f2e74657374732e73 *75697465730f000000666f6f2e74657374732e7375697465280500000052260000005298000000 *7410000000656e737572655f66696e616c697a6564522f000000740a000000746573745f737569 *74652802000000523100000074030000007473312800000000280000000073320000006275696c *645c62646973742e77696e33325c6567675c7365747570746f6f6c735c74657374735c5f5f696e *69745f5f2e7079741a000000746573744c6f6e674f70745375697465574e6f44656661756c744f *0100007308000000000115010f010a016301000000020000000300000043000000733900000074 *00006401006402008300016901006403008301007d01007c0100690200830000017c0000690300 *7c0100690400640200830200016400005328040000004e529e000000730f0000006261722e7465 *7374732e73756974655228000000280500000052260000005298000000529d000000522f000000 *529e00000028020000005231000000740300000074733228000000002800000000733200000062 *75696c645c62646973742e77696e33325c6567675c7365747570746f6f6c735c74657374735c5f *5f696e69745f5f2e707974100000007465737444656661756c7453756974655501000073060000 *00000118010a016301000000020000000700000043000000735b00000074000064010064020064 *03006404006405006406006703008300026901006404008301007d01007c010069020083000001 *7c00006903007c0100690400640600830200017c00006903007c01006905006407008302000164 *00005328080000004e529e00000073090000006261722e7465737473521b000000522800000073 *020000002d6d7309000000666f6f2e74657374737314000000666f6f2e74657374732e74657374 *5f7375697465280600000052260000005298000000529d000000522f000000740b000000746573 *745f6d6f64756c65529e0000002802000000523100000074030000007473332800000000280000 *000073320000006275696c645c62646973742e77696e33325c6567675c7365747570746f6f6c73 *5c74657374735c5f5f696e69745f5f2e7079741b0000007465737444656661756c74574d6f6475 *6c654f6e436d644c696e655a010000730e000000000106010601120109010a0113016301000000 *020000000700000043000000733e00000074000064010064020064030064040064050064060067 *05008300016901006402008301007d01007c00006902007403007c010069040083020001640000 *5328070000004e521b000000522800000073020000002d6d73090000006261722e746573747373 *020000002d73730f000000666f6f2e74657374732e737569746528050000005226000000529800 *000052330000005204000000529d00000028020000005231000000740300000074733428000000 *00280000000073320000006275696c645c62646973742e77696e33325c6567675c736574757074 *6f6f6c735c74657374735c5f5f696e69745f5f2e7079741600000074657374436f6e666c696374 *696e674f7074696f6e736301000073080000000001060118010901630100000002000000030000 *004300000073330000007400008300006901006401008301007d01007c0100690200830000017c *00006903007c0100690400640000830200016400005328020000004e5228000000280600000052 *260000005298000000529d000000522f000000529e000000522300000028020000005231000000 *74030000007473352800000000280000000073320000006275696c645c62646973742e77696e33 *325c6567675c7365747570746f6f6c735c74657374735c5f5f696e69745f5f2e7079740b000000 *746573744e6f5375697465690100007306000000000112010a0128080000005214000000525b00 *0000529c00000052a000000052a200000052a500000052a700000052a900000028000000002800 *000000280000000073320000006275696c645c62646973742e77696e33325c6567675c73657475 *70746f6f6c735c74657374735c5f5f696e69745f5f2e7079529700000049010000730c00000006 *020904090609050909090628020000004e4e2823000000523d0000005211000000520000000052 *0100000052020000005203000000740e000000646973747574696c732e636f7265521d00000074 *0d000000646973747574696c732e636d647410000000646973747574696c732e6572726f727352 *04000000520500000052060000005221000000740f0000007365747570746f6f6c732e64697374 *520700000052080000005223000000522e000000523e00000074120000007365747570746f6f6c *732e646570656e64737411000000646973747574696c732e76657273696f6e520a000000520b00 *0000740e000000646973747574696c732e7574696c520c000000521500000074070000006f732e *706174685254000000521900000052260000005227000000525c00000052760000005297000000 *28000000002800000000280000000073320000006275696c645c62646973742e77696e33325c65 *67675c7365747570746f6f6c735c74657374735c5f5f696e69745f5f2e707974080000003c6d6f *64756c653e010000007324000000060122011801160110011801100110010c010a011601100118 *02090b09101652167b1652 addfile ./setuptools-0.6c14devdev.egg/setuptools/tests/test_packageindex.py hunk ./setuptools-0.6c14devdev.egg/setuptools/tests/test_packageindex.py 1 +"""Package Index Tests +""" +# More would be better! + +import os, shutil, tempfile, unittest, urllib2 +import pkg_resources +import setuptools.package_index + +class TestPackageIndex(unittest.TestCase): + + def test_bad_urls(self): + index = setuptools.package_index.PackageIndex() + url = 'http://127.0.0.1/nonesuch/test_package_index' + try: + v = index.open_url(url) + except Exception, v: + self.assert_(url in str(v)) + else: + self.assert_(isinstance(v,urllib2.HTTPError)) addfile ./setuptools-0.6c14devdev.egg/setuptools/tests/test_packageindex.pyc binary ./setuptools-0.6c14devdev.egg/setuptools/tests/test_packageindex.pyc oldhex * newhex *d1f20d0a511ef84b6300000000000000000a0000004000000073770000006400005a0000640100 *6402006b01005a01006401006402006b02005a02006401006402006b03005a0300640100640200 *6b04005a04006401006402006b05005a05006401006402006b06005a06006401006402006b0700 *5a0800640300650400690900660100640400840000830000595a0a006402005328050000007314 *0000005061636b61676520496e6465782054657374730a69ffffffff4e74100000005465737450 *61636b616765496e646578630000000000000000010000004200000073110000006500005a0100 *6400008400005a0200525328010000006301000000040000000700000043000000737600000074 *00006901006902008300007d01006401007d02007913007c01006903007c02008301007d030057 *6e2e00047404006a0a006f220001017d0300017c00006905007c02007406007c03008301006a06 *00830100016e1b0001587c00006905007407007c03007408006909008302008301000164000053 *28020000004e732c000000687474703a2f2f3132372e302e302e312f6e6f6e65737563682f7465 *73745f7061636b6167655f696e646578280a000000740a0000007365747570746f6f6c73740d00 *00007061636b6167655f696e646578740c0000005061636b616765496e64657874080000006f70 *656e5f75726c7409000000457863657074696f6e74070000006173736572745f74030000007374 *72740a0000006973696e7374616e6365740700000075726c6c6962327409000000485454504572 *726f722804000000740400000073656c667405000000696e646578740300000075726c74010000 *007628000000002800000000733b0000006275696c645c62646973742e77696e33325c6567675c *7365747570746f6f6c735c74657374735c746573745f7061636b616765696e6465782e7079740d *000000746573745f6261645f75726c730b000000730e00000000010f0106010301130110011e02 *280300000074080000005f5f6e616d655f5f740a0000005f5f6d6f64756c655f5f520f00000028 *0000000028000000002800000000733b0000006275696c645c62646973742e77696e33325c6567 *675c7365747570746f6f6c735c74657374735c746573745f7061636b616765696e6465782e7079 *52000000000900000073020000000602280b00000074070000005f5f646f635f5f74020000006f *73740600000073687574696c740800000074656d7066696c657408000000756e69747465737452 *09000000740d000000706b675f7265736f757263657374180000007365747570746f6f6c732e70 *61636b6167655f696e646578520100000074080000005465737443617365520000000028000000 *0028000000002800000000733b0000006275696c645c62646973742e77696e33325c6567675c73 *65747570746f6f6c735c74657374735c746573745f7061636b616765696e6465782e7079740800 *00003c6d6f64756c653e02000000730800000006033c010c010c02 addfile ./setuptools-0.6c14devdev.egg/setuptools/tests/test_resources.py hunk ./setuptools-0.6c14devdev.egg/setuptools/tests/test_resources.py 1 +#!/usr/bin/python +# -*- coding: utf-8 -*- +# NOTE: the shebang and encoding lines are for ScriptHeaderTests; do not remove +from unittest import TestCase, makeSuite; from pkg_resources import * +from setuptools.command.easy_install import get_script_header, is_sh +import os, pkg_resources, sys, StringIO +try: frozenset +except NameError: + from sets import ImmutableSet as frozenset + +class Metadata(EmptyProvider): + """Mock object to return metadata as if from an on-disk distribution""" + + def __init__(self,*pairs): + self.metadata = dict(pairs) + + def has_metadata(self,name): + return name in self.metadata + + def get_metadata(self,name): + return self.metadata[name] + + def get_metadata_lines(self,name): + return yield_lines(self.get_metadata(name)) + +class DistroTests(TestCase): + + def testCollection(self): + # empty path should produce no distributions + ad = Environment([], platform=None, python=None) + self.assertEqual(list(ad), []) + self.assertEqual(ad['FooPkg'],[]) + ad.add(Distribution.from_filename("FooPkg-1.3_1.egg")) + ad.add(Distribution.from_filename("FooPkg-1.4-py2.4-win32.egg")) + ad.add(Distribution.from_filename("FooPkg-1.2-py2.4.egg")) + + # Name is in there now + self.failUnless(ad['FooPkg']) + # But only 1 package + self.assertEqual(list(ad), ['foopkg']) + + # Distributions sort by version + self.assertEqual( + [dist.version for dist in ad['FooPkg']], ['1.4','1.3-1','1.2'] + ) + # Removing a distribution leaves sequence alone + ad.remove(ad['FooPkg'][1]) + self.assertEqual( + [dist.version for dist in ad['FooPkg']], ['1.4','1.2'] + ) + # And inserting adds them in order + ad.add(Distribution.from_filename("FooPkg-1.9.egg")) + self.assertEqual( + [dist.version for dist in ad['FooPkg']], ['1.9','1.4','1.2'] + ) + + ws = WorkingSet([]) + foo12 = Distribution.from_filename("FooPkg-1.2-py2.4.egg") + foo14 = Distribution.from_filename("FooPkg-1.4-py2.4-win32.egg") + req, = parse_requirements("FooPkg>=1.3") + + # Nominal case: no distros on path, should yield all applicable + self.assertEqual(ad.best_match(req,ws).version, '1.9') + # If a matching distro is already installed, should return only that + ws.add(foo14); self.assertEqual(ad.best_match(req,ws).version, '1.4') + + # If the first matching distro is unsuitable, it's a version conflict + ws = WorkingSet([]); ws.add(foo12); ws.add(foo14) + self.assertRaises(VersionConflict, ad.best_match, req, ws) + + # If more than one match on the path, the first one takes precedence + ws = WorkingSet([]); ws.add(foo14); ws.add(foo12); ws.add(foo14); + self.assertEqual(ad.best_match(req,ws).version, '1.4') + + def checkFooPkg(self,d): + self.assertEqual(d.project_name, "FooPkg") + self.assertEqual(d.key, "foopkg") + self.assertEqual(d.version, "1.3-1") + self.assertEqual(d.py_version, "2.4") + self.assertEqual(d.platform, "win32") + self.assertEqual(d.parsed_version, parse_version("1.3-1")) + + def testDistroBasics(self): + d = Distribution( + "/some/path", + project_name="FooPkg",version="1.3-1",py_version="2.4",platform="win32" + ) + self.checkFooPkg(d) + + d = Distribution("/some/path") + self.assertEqual(d.py_version, sys.version[:3]) + self.assertEqual(d.platform, None) + + def testDistroParse(self): + d = Distribution.from_filename("FooPkg-1.3_1-py2.4-win32.egg") + self.checkFooPkg(d) + d = Distribution.from_filename("FooPkg-1.3_1-py2.4-win32.egg-info") + self.checkFooPkg(d) + + def testDistroMetadata(self): + d = Distribution( + "/some/path", project_name="FooPkg", py_version="2.4", platform="win32", + metadata = Metadata( + ('PKG-INFO',"Metadata-Version: 1.0\nVersion: 1.3-1\n") + ) + ) + self.checkFooPkg(d) + + + def distRequires(self, txt): + return Distribution("/foo", metadata=Metadata(('depends.txt', txt))) + + def checkRequires(self, dist, txt, extras=()): + self.assertEqual( + list(dist.requires(extras)), + list(parse_requirements(txt)) + ) + + def testDistroDependsSimple(self): + for v in "Twisted>=1.5", "Twisted>=1.5\nZConfig>=2.0": + self.checkRequires(self.distRequires(v), v) + + + def testResolve(self): + ad = Environment([]); ws = WorkingSet([]) + # Resolving no requirements -> nothing to install + self.assertEqual( list(ws.resolve([],ad)), [] ) + # Request something not in the collection -> DistributionNotFound + self.assertRaises( + DistributionNotFound, ws.resolve, parse_requirements("Foo"), ad + ) + Foo = Distribution.from_filename( + "/foo_dir/Foo-1.2.egg", + metadata=Metadata(('depends.txt', "[bar]\nBaz>=2.0")) + ) + ad.add(Foo); ad.add(Distribution.from_filename("Foo-0.9.egg")) + + # Request thing(s) that are available -> list to activate + for i in range(3): + targets = list(ws.resolve(parse_requirements("Foo"), ad)) + self.assertEqual(targets, [Foo]) + map(ws.add,targets) + self.assertRaises(VersionConflict, ws.resolve, + parse_requirements("Foo==0.9"), ad) + ws = WorkingSet([]) # reset + + # Request an extra that causes an unresolved dependency for "Baz" + self.assertRaises( + DistributionNotFound, ws.resolve,parse_requirements("Foo[bar]"), ad + ) + Baz = Distribution.from_filename( + "/foo_dir/Baz-2.1.egg", metadata=Metadata(('depends.txt', "Foo")) + ) + ad.add(Baz) + + # Activation list now includes resolved dependency + self.assertEqual( + list(ws.resolve(parse_requirements("Foo[bar]"), ad)), [Foo,Baz] + ) + # Requests for conflicting versions produce VersionConflict + self.assertRaises( VersionConflict, + ws.resolve, parse_requirements("Foo==1.2\nFoo!=1.2"), ad + ) + + def testDistroDependsOptions(self): + d = self.distRequires(""" + Twisted>=1.5 + [docgen] + ZConfig>=2.0 + docutils>=0.3 + [fastcgi] + fcgiapp>=0.1""") + self.checkRequires(d,"Twisted>=1.5") + self.checkRequires( + d,"Twisted>=1.5 ZConfig>=2.0 docutils>=0.3".split(), ["docgen"] + ) + self.checkRequires( + d,"Twisted>=1.5 fcgiapp>=0.1".split(), ["fastcgi"] + ) + self.checkRequires( + d,"Twisted>=1.5 ZConfig>=2.0 docutils>=0.3 fcgiapp>=0.1".split(), + ["docgen","fastcgi"] + ) + self.checkRequires( + d,"Twisted>=1.5 fcgiapp>=0.1 ZConfig>=2.0 docutils>=0.3".split(), + ["fastcgi", "docgen"] + ) + self.assertRaises(UnknownExtra, d.requires, ["foo"]) + + + + + + + + + + + + + + + + + +class EntryPointTests(TestCase): + + def assertfields(self, ep): + self.assertEqual(ep.name,"foo") + self.assertEqual(ep.module_name,"setuptools.tests.test_resources") + self.assertEqual(ep.attrs, ("EntryPointTests",)) + self.assertEqual(ep.extras, ("x",)) + self.failUnless(ep.load() is EntryPointTests) + self.assertEqual( + str(ep), + "foo = setuptools.tests.test_resources:EntryPointTests [x]" + ) + + def setUp(self): + self.dist = Distribution.from_filename( + "FooPkg-1.2-py2.4.egg", metadata=Metadata(('requires.txt','[x]'))) + + def testBasics(self): + ep = EntryPoint( + "foo", "setuptools.tests.test_resources", ["EntryPointTests"], + ["x"], self.dist + ) + self.assertfields(ep) + + def testParse(self): + s = "foo = setuptools.tests.test_resources:EntryPointTests [x]" + ep = EntryPoint.parse(s, self.dist) + self.assertfields(ep) + + ep = EntryPoint.parse("bar baz= spammity[PING]") + self.assertEqual(ep.name,"bar baz") + self.assertEqual(ep.module_name,"spammity") + self.assertEqual(ep.attrs, ()) + self.assertEqual(ep.extras, ("ping",)) + + ep = EntryPoint.parse(" fizzly = wocka:foo") + self.assertEqual(ep.name,"fizzly") + self.assertEqual(ep.module_name,"wocka") + self.assertEqual(ep.attrs, ("foo",)) + self.assertEqual(ep.extras, ()) + + def testRejects(self): + for ep in [ + "foo", "x=1=2", "x=a:b:c", "q=x/na", "fez=pish:tush-z", "x=f[a]>2", + ]: + try: EntryPoint.parse(ep) + except ValueError: pass + else: raise AssertionError("Should've been bad", ep) + + def checkSubMap(self, m): + self.assertEqual(len(m), len(self.submap_expect)) + for key, ep in self.submap_expect.iteritems(): + self.assertEqual(repr(m.get(key)), repr(ep)) + + submap_expect = dict( + feature1=EntryPoint('feature1', 'somemodule', ['somefunction']), + feature2=EntryPoint('feature2', 'another.module', ['SomeClass'], ['extra1','extra2']), + feature3=EntryPoint('feature3', 'this.module', extras=['something']) + ) + submap_str = """ + # define features for blah blah + feature1 = somemodule:somefunction + feature2 = another.module:SomeClass [extra1,extra2] + feature3 = this.module [something] + """ + + def testParseList(self): + self.checkSubMap(EntryPoint.parse_group("xyz", self.submap_str)) + self.assertRaises(ValueError, EntryPoint.parse_group, "x a", "foo=bar") + self.assertRaises(ValueError, EntryPoint.parse_group, "x", + ["foo=baz", "foo=bar"]) + + def testParseMap(self): + m = EntryPoint.parse_map({'xyz':self.submap_str}) + self.checkSubMap(m['xyz']) + self.assertEqual(m.keys(),['xyz']) + m = EntryPoint.parse_map("[xyz]\n"+self.submap_str) + self.checkSubMap(m['xyz']) + self.assertEqual(m.keys(),['xyz']) + self.assertRaises(ValueError, EntryPoint.parse_map, ["[xyz]", "[xyz]"]) + self.assertRaises(ValueError, EntryPoint.parse_map, self.submap_str) + +class RequirementsTests(TestCase): + + def testBasics(self): + r = Requirement.parse("Twisted>=1.2") + self.assertEqual(str(r),"Twisted>=1.2") + self.assertEqual(repr(r),"Requirement.parse('Twisted>=1.2')") + self.assertEqual(r, Requirement("Twisted", [('>=','1.2')], ())) + self.assertEqual(r, Requirement("twisTed", [('>=','1.2')], ())) + self.assertNotEqual(r, Requirement("Twisted", [('>=','2.0')], ())) + self.assertNotEqual(r, Requirement("Zope", [('>=','1.2')], ())) + self.assertNotEqual(r, Requirement("Zope", [('>=','3.0')], ())) + self.assertNotEqual(r, Requirement.parse("Twisted[extras]>=1.2")) + + def testOrdering(self): + r1 = Requirement("Twisted", [('==','1.2c1'),('>=','1.2')], ()) + r2 = Requirement("Twisted", [('>=','1.2'),('==','1.2c1')], ()) + self.assertEqual(r1,r2) + self.assertEqual(str(r1),str(r2)) + self.assertEqual(str(r2),"Twisted==1.2c1,>=1.2") + + def testBasicContains(self): + r = Requirement("Twisted", [('>=','1.2')], ()) + foo_dist = Distribution.from_filename("FooPkg-1.3_1.egg") + twist11 = Distribution.from_filename("Twisted-1.1.egg") + twist12 = Distribution.from_filename("Twisted-1.2.egg") + self.failUnless(parse_version('1.2') in r) + self.failUnless(parse_version('1.1') not in r) + self.failUnless('1.2' in r) + self.failUnless('1.1' not in r) + self.failUnless(foo_dist not in r) + self.failUnless(twist11 not in r) + self.failUnless(twist12 in r) + + def testAdvancedContains(self): + r, = parse_requirements("Foo>=1.2,<=1.3,==1.9,>2.0,!=2.5,<3.0,==4.5") + for v in ('1.2','1.2.2','1.3','1.9','2.0.1','2.3','2.6','3.0c1','4.5'): + self.failUnless(v in r, (v,r)) + for v in ('1.2c1','1.3.1','1.5','1.9.1','2.0','2.5','3.0','4.0'): + self.failUnless(v not in r, (v,r)) + + + def testOptionsAndHashing(self): + r1 = Requirement.parse("Twisted[foo,bar]>=1.2") + r2 = Requirement.parse("Twisted[bar,FOO]>=1.2") + r3 = Requirement.parse("Twisted[BAR,FOO]>=1.2.0") + self.assertEqual(r1,r2) + self.assertEqual(r1,r3) + self.assertEqual(r1.extras, ("foo","bar")) + self.assertEqual(r2.extras, ("bar","foo")) # extras are normalized + self.assertEqual(hash(r1), hash(r2)) + self.assertEqual( + hash(r1), hash(("twisted", ((">=",parse_version("1.2")),), + frozenset(["foo","bar"]))) + ) + + def testVersionEquality(self): + r1 = Requirement.parse("setuptools==0.3a2") + r2 = Requirement.parse("setuptools!=0.3a4") + d = Distribution.from_filename + + self.failIf(d("setuptools-0.3a4.egg") in r1) + self.failIf(d("setuptools-0.3a1.egg") in r1) + self.failIf(d("setuptools-0.3a4.egg") in r2) + + self.failUnless(d("setuptools-0.3a2.egg") in r1) + self.failUnless(d("setuptools-0.3a2.egg") in r2) + self.failUnless(d("setuptools-0.3a3.egg") in r2) + self.failUnless(d("setuptools-0.3a5.egg") in r2) + + + + + + + + + + + + + + +class ParseTests(TestCase): + + def testEmptyParse(self): + self.assertEqual(list(parse_requirements('')), []) + + def testYielding(self): + for inp,out in [ + ([], []), ('x',['x']), ([[]],[]), (' x\n y', ['x','y']), + (['x\n\n','y'], ['x','y']), + ]: + self.assertEqual(list(pkg_resources.yield_lines(inp)),out) + + def testSplitting(self): + self.assertEqual( + list( + pkg_resources.split_sections(""" + x + [Y] + z + + a + [b ] + # foo + c + [ d] + [q] + v + """ + ) + ), + [(None,["x"]), ("Y",["z","a"]), ("b",["c"]), ("d",[]), ("q",["v"])] + ) + self.assertRaises(ValueError,list,pkg_resources.split_sections("[foo")) + + def testSafeName(self): + self.assertEqual(safe_name("adns-python"), "adns-python") + self.assertEqual(safe_name("WSGI Utils"), "WSGI-Utils") + self.assertEqual(safe_name("WSGI Utils"), "WSGI-Utils") + self.assertEqual(safe_name("Money$$$Maker"), "Money-Maker") + self.assertNotEqual(safe_name("peak.web"), "peak-web") + + def testSafeVersion(self): + self.assertEqual(safe_version("1.2-1"), "1.2-1") + self.assertEqual(safe_version("1.2 alpha"), "1.2.alpha") + self.assertEqual(safe_version("2.3.4 20050521"), "2.3.4.20050521") + self.assertEqual(safe_version("Money$$$Maker"), "Money-Maker") + self.assertEqual(safe_version("peak.web"), "peak.web") + + def testSimpleRequirements(self): + self.assertEqual( + list(parse_requirements('Twis-Ted>=1.2-1')), + [Requirement('Twis-Ted',[('>=','1.2-1')], ())] + ) + self.assertEqual( + list(parse_requirements('Twisted >=1.2, \ # more\n<2.0')), + [Requirement('Twisted',[('>=','1.2'),('<','2.0')], ())] + ) + self.assertEqual( + Requirement.parse("FooBar==1.99a3"), + Requirement("FooBar", [('==','1.99a3')], ()) + ) + self.assertRaises(ValueError,Requirement.parse,">=2.3") + self.assertRaises(ValueError,Requirement.parse,"x\\") + self.assertRaises(ValueError,Requirement.parse,"x==2 q") + self.assertRaises(ValueError,Requirement.parse,"X==1\nY==2") + self.assertRaises(ValueError,Requirement.parse,"#") + + def testVersionEquality(self): + def c(s1,s2): + p1, p2 = parse_version(s1),parse_version(s2) + self.assertEqual(p1,p2, (s1,s2,p1,p2)) + + c('1.2-rc1', '1.2rc1') + c('0.4', '0.4.0') + c('0.4.0.0', '0.4.0') + c('0.4.0-0', '0.4-0') + c('0pl1', '0.0pl1') + c('0pre1', '0.0c1') + c('0.0.0preview1', '0c1') + c('0.0c1', '0-rc1') + c('1.2a1', '1.2.a.1'); c('1.2...a', '1.2a') + + def testVersionOrdering(self): + def c(s1,s2): + p1, p2 = parse_version(s1),parse_version(s2) + self.failUnless(p1**20100515184344 Ignore-this: fd602c3bba115057770715c36a87b400 ] [setup: new improved misc/show-tool-versions.py zooko@zooko.com**20100516050122 Ignore-this: ce9b1de1b35b07d733e6cf823b66335a ] [Improve code coverage of the Tahoe2PeerSelector tests. Kevan Carstensen **20100515032913 Ignore-this: 793151b63ffa65fdae6915db22d9924a ] [Remove a comment that no longer makes sense. Kevan Carstensen **20100514203516 Ignore-this: 956983c7e7c7e4477215494dfce8f058 ] [docs: update docs/architecture.txt to more fully and correctly explain the upload procedure zooko@zooko.com**20100514043458 Ignore-this: 538b6ea256a49fed837500342092efa3 ] [Fix up the behavior of #778, per reviewers' comments Kevan Carstensen **20100514004917 Ignore-this: 9c20b60716125278b5456e8feb396bff - Make some important utility functions clearer and more thoroughly documented. - Assert in upload.servers_of_happiness that the buckets attributes of PeerTrackers passed to it are mutually disjoint. - Get rid of some silly non-Pythonisms that I didn't see when I first wrote these patches. - Make sure that should_add_server returns true when queried about a shnum that it doesn't know about yet. - Change Tahoe2PeerSelector.preexisting_shares to map a shareid to a set of peerids, alter dependencies to deal with that. - Remove upload.should_add_servers, because it is no longer necessary - Move upload.shares_of_happiness and upload.shares_by_server to a utility file. - Change some points in Tahoe2PeerSelector. - Compute servers_of_happiness using a bipartite matching algorithm that we know is optimal instead of an ad-hoc greedy algorithm that isn't. - Change servers_of_happiness to just take a sharemap as an argument, change its callers to merge existing_shares and used_peers before calling it. - Change an error message in the encoder to be more appropriate for servers of happiness. - Clarify the wording of an error message in immutable/upload.py - Refactor a happiness failure message to happinessutil.py, and make immutable/upload.py and immutable/encode.py use it. - Move the word "only" as far to the right as possible in failure messages. - Use a better definition of progress during peer selection. - Do read-only peer share detection queries in parallel, not sequentially. - Clean up logging semantics; print the query statistics whenever an upload is unsuccessful, not just in one case. ] [Alter the error message when an upload fails, per some comments in #778. Kevan Carstensen **20091230210344 Ignore-this: ba97422b2f9737c46abeb828727beb1 When I first implemented #778, I just altered the error messages to refer to servers where they referred to shares. The resulting error messages weren't very good. These are a bit better. ] [Change "UploadHappinessError" to "UploadUnhappinessError" Kevan Carstensen **20091205043037 Ignore-this: 236b64ab19836854af4993bb5c1b221a ] [Alter the error message returned when peer selection fails Kevan Carstensen **20091123002405 Ignore-this: b2a7dc163edcab8d9613bfd6907e5166 The Tahoe2PeerSelector returned either NoSharesError or NotEnoughSharesError for a variety of error conditions that weren't informatively described by them. This patch creates a new error, UploadHappinessError, replaces uses of NoSharesError and NotEnoughSharesError with it, and alters the error message raised with the errors to be more in line with the new servers_of_happiness behavior. See ticket #834 for more information. ] [Eliminate overcounting iof servers_of_happiness in Tahoe2PeerSelector; also reorganize some things. Kevan Carstensen **20091118014542 Ignore-this: a6cb032cbff74f4f9d4238faebd99868 ] [Change stray "shares_of_happiness" to "servers_of_happiness" Kevan Carstensen **20091116212459 Ignore-this: 1c971ba8c3c4d2e7ba9f020577b28b73 ] [Alter Tahoe2PeerSelector to make sure that it recognizes existing shares on readonly servers, fixing an issue in #778 Kevan Carstensen **20091116192805 Ignore-this: 15289f4d709e03851ed0587b286fd955 ] [Alter 'immutable/encode.py' and 'immutable/upload.py' to use servers_of_happiness instead of shares_of_happiness. Kevan Carstensen **20091104111222 Ignore-this: abb3283314820a8bbf9b5d0cbfbb57c8 ] [Alter the signature of set_shareholders in IEncoder to add a 'servermap' parameter, which gives IEncoders enough information to perform a sane check for servers_of_happiness. Kevan Carstensen **20091104033241 Ignore-this: b3a6649a8ac66431beca1026a31fed94 ] [Alter CiphertextDownloader to work with servers_of_happiness Kevan Carstensen **20090924041932 Ignore-this: e81edccf0308c2d3bedbc4cf217da197 ] [Revisions of the #778 tests, per reviewers' comments Kevan Carstensen **20100514012542 Ignore-this: 735bbc7f663dce633caeb3b66a53cf6e - Fix comments and confusing naming. - Add tests for the new error messages suggested by David-Sarah and Zooko. - Alter existing tests for new error messages. - Make sure that the tests continue to work with the trunk. - Add a test for a mutual disjointedness assertion that I added to upload.servers_of_happiness. - Fix the comments to correctly reflect read-onlyness - Add a test for an edge case in should_add_server - Add an assertion to make sure that share redistribution works as it should - Alter tests to work with revised servers_of_happiness semantics - Remove tests for should_add_server, since that function no longer exists. - Alter tests to know about merge_peers, and to use it before calling servers_of_happiness. - Add tests for merge_peers. - Add Zooko's puzzles to the tests. - Edit encoding tests to expect the new kind of failure message. - Edit tests to expect error messages with the word "only" moved as far to the right as possible. - Extended and cleaned up some helper functions. - Changed some tests to call more appropriate helper functions. - Added a test for the failing redistribution algorithm - Added a test for the progress message - Added a test for the upper bound on readonly peer share discovery. ] [Alter various unit tests to work with the new happy behavior Kevan Carstensen **20100107181325 Ignore-this: 132032bbf865e63a079f869b663be34a ] [Replace "UploadHappinessError" with "UploadUnhappinessError" in tests. Kevan Carstensen **20091205043453 Ignore-this: 83f4bc50c697d21b5f4e2a4cd91862ca ] [Add tests for the behavior described in #834. Kevan Carstensen **20091123012008 Ignore-this: d8e0aa0f3f7965ce9b5cea843c6d6f9f ] [Re-work 'test_upload.py' to be more readable; add more tests for #778 Kevan Carstensen **20091116192334 Ignore-this: 7e8565f92fe51dece5ae28daf442d659 ] [Test Tahoe2PeerSelector to make sure that it recognizeses existing shares on readonly servers Kevan Carstensen **20091109003735 Ignore-this: 12f9b4cff5752fca7ed32a6ebcff6446 ] [Add more tests for comment:53 in ticket #778 Kevan Carstensen **20091104112849 Ignore-this: 3bb2edd299a944cc9586e14d5d83ec8c ] [Add a test for upload.shares_by_server Kevan Carstensen **20091104111324 Ignore-this: f9802e82d6982a93e00f92e0b276f018 ] [Minor tweak to an existing test -- make the first server read-write, instead of read-only Kevan Carstensen **20091104034232 Ignore-this: a951a46c93f7f58dd44d93d8623b2aee ] [Alter tests to use the new form of set_shareholders Kevan Carstensen **20091104033602 Ignore-this: 3deac11fc831618d11441317463ef830 ] [Refactor some behavior into a mixin, and add tests for the behavior described in #778 "Kevan Carstensen" **20091030091908 Ignore-this: a6f9797057ca135579b249af3b2b66ac ] [Alter NoNetworkGrid to allow the creation of readonly servers for testing purposes. Kevan Carstensen **20091018013013 Ignore-this: e12cd7c4ddeb65305c5a7e08df57c754 ] [Update 'docs/architecture.txt' to reflect readonly share discovery kevan@isnotajoke.com**20100514003852 Ignore-this: 7ead71b34df3b1ecfdcfd3cb2882e4f9 ] [Alter the wording in docs/architecture.txt to more accurately describe the servers_of_happiness behavior. Kevan Carstensen **20100428002455 Ignore-this: 6eff7fa756858a1c6f73728d989544cc ] [Alter wording in 'interfaces.py' to be correct wrt #778 "Kevan Carstensen" **20091205034005 Ignore-this: c9913c700ac14e7a63569458b06980e0 ] [Update 'docs/configuration.txt' to reflect the servers_of_happiness behavior. Kevan Carstensen **20091205033813 Ignore-this: 5e1cb171f8239bfb5b565d73c75ac2b8 ] [Clarify quickstart instructions for installing pywin32 david-sarah@jacaranda.org**20100511180300 Ignore-this: d4668359673600d2acbc7cd8dd44b93c ] [web: add a simple test that you can load directory.xhtml zooko@zooko.com**20100510063729 Ignore-this: e49b25fa3c67b3c7a56c8b1ae01bb463 ] [setup: fix typos in misc/show-tool-versions.py zooko@zooko.com**20100510063615 Ignore-this: 2181b1303a0e288e7a9ebd4c4855628 ] [setup: show code-coverage tool versions in show-tools-versions.py zooko@zooko.com**20100510062955 Ignore-this: 4b4c68eb3780b762c8dbbd22b39df7cf ] [docs: update README, mv it to README.txt, update setup.py zooko@zooko.com**20100504094340 Ignore-this: 40e28ca36c299ea1fd12d3b91e5b421c ] [Dependency on Windmill test framework is not needed yet. david-sarah@jacaranda.org**20100504161043 Ignore-this: be088712bec650d4ef24766c0026ebc8 ] [tests: pass z to tar so that BSD tar will know to ungzip zooko@zooko.com**20100504090628 Ignore-this: 1339e493f255e8fc0b01b70478f23a09 ] [setup: update comments and URLs in setup.cfg zooko@zooko.com**20100504061653 Ignore-this: f97692807c74bcab56d33100c899f829 ] [setup: reorder and extend the show-tool-versions script, the better to glean information about our new buildslaves zooko@zooko.com**20100504045643 Ignore-this: 836084b56b8d4ee8f1de1f4efb706d36 ] [CLI: Support for https url in option --node-url Francois Deppierraz **20100430185609 Ignore-this: 1717176b4d27c877e6bc67a944d9bf34 This patch modifies the regular expression used for verifying of '--node-url' parameter. Support for accessing a Tahoe gateway over HTTPS was already present, thanks to Python's urllib. ] [backupdb.did_create_directory: use REPLACE INTO, not INSERT INTO + ignore error Brian Warner **20100428050803 Ignore-this: 1fca7b8f364a21ae413be8767161e32f This handles the case where we upload a new tahoe directory for a previously-processed local directory, possibly creating a new dircap (if the metadata had changed). Now we replace the old dirhash->dircap record. The previous behavior left the old record in place (with the old dircap and timestamps), so we'd never stop creating new directories and never converge on a null backup. ] ["tahoe webopen": add --info flag, to get ?t=info Brian Warner **20100424233003 Ignore-this: 126b0bb6db340fabacb623d295eb45fa Also fix some trailing whitespace. ] [docs: install.html http-equiv refresh to quickstart.html zooko@zooko.com**20100421165708 Ignore-this: 52b4b619f9dde5886ae2cd7f1f3b734b ] [docs: install.html -> quickstart.html zooko@zooko.com**20100421155757 Ignore-this: 6084e203909306bed93efb09d0e6181d It is not called "installing" because that implies that it is going to change the configuration of your operating system. It is not called "building" because that implies that you need developer tools like a compiler. Also I added a stern warning against looking at the "InstallDetails" wiki page, which I have renamed to "AdvancedInstall". ] [Fix another typo in tahoe_storagespace munin plugin david-sarah@jacaranda.org**20100416220935 Ignore-this: ad1f7aa66b554174f91dfb2b7a3ea5f3 ] [Add dependency on windmill >= 1.3 david-sarah@jacaranda.org**20100416190404 Ignore-this: 4437a7a464e92d6c9012926b18676211 ] [licensing: phrase the OpenSSL-exemption in the vocabulary of copyright instead of computer technology, and replicate the exemption from the GPL to the TGPPL zooko@zooko.com**20100414232521 Ignore-this: a5494b2f582a295544c6cad3f245e91 ] [munin-tahoe_storagespace freestorm77@gmail.com**20100221203626 Ignore-this: 14d6d6a587afe1f8883152bf2e46b4aa Plugin configuration rename ] [setup: add licensing declaration for setuptools (noticed by the FSF compliance folks) zooko@zooko.com**20100309184415 Ignore-this: 2dfa7d812d65fec7c72ddbf0de609ccb ] [setup: fix error in licensing declaration from Shawn Willden, as noted by the FSF compliance division zooko@zooko.com**20100309163736 Ignore-this: c0623d27e469799d86cabf67921a13f8 ] [CREDITS to Jacob Appelbaum zooko@zooko.com**20100304015616 Ignore-this: 70db493abbc23968fcc8db93f386ea54 ] [desert-island-build-with-proper-versions jacob@appelbaum.net**20100304013858] [docs: a few small edits to try to guide newcomers through the docs zooko@zooko.com**20100303231902 Ignore-this: a6aab44f5bf5ad97ea73e6976bc4042d These edits were suggested by my watching over Jake Appelbaum's shoulder as he completely ignored/skipped/missed install.html and also as he decided that debian.txt wouldn't help him with basic installation. Then I threw in a few docs edits that have been sitting around in my sandbox asking to be committed for months. ] [TAG allmydata-tahoe-1.6.1 david-sarah@jacaranda.org**20100228062314 Ignore-this: eb5f03ada8ea953ee7780e7fe068539 ] Patch bundle hash: 6b9f4635b391a14c554b511fb34d83a626459bb4