0x60806040526004361061012a5760003560e01c80639fa12d0b116100ab578063e5285dcc1161006f578063e5285dcc14610487578063e8295588146104b1578063ec732959146104db578063ed33639f146104f0578063f178e47c14610505578063fc7e9c6f1461052f5761012a565b80639fa12d0b1461034b578063b214faa514610416578063ba70f75714610433578063c2b40ae414610448578063cd87a3b4146104725761012a565b80636d9833e3116100f25780636d9833e31461028e578063839df945146102b85780638bca6d16146102e25780638ea3099e146102f757806390eeb02b146103365761012a565b806317cc915c1461012f57806321a0adb61461016d5780632b7ac3f314610208578063414a37ba146102395780634ecf518b14610260575b600080fd5b34801561013b57600080fd5b506101596004803603602081101561015257600080fd5b5035610544565b604080519115158252519081900360200190f35b610206600480360360e081101561018357600080fd5b810190602081018135600160201b81111561019d57600080fd5b8201836020820111156101af57600080fd5b803590602001918460018302840111600160201b831117156101d057600080fd5b91935091508035906020810135906001600160a01b03604082013581169160608101359091169060808101359060a00135610559565b005b34801561021457600080fd5b5061021d6108c6565b604080516001600160a01b039092168252519081900360200190f35b34801561024557600080fd5b5061024e6108ea565b60408051918252519081900360200190f35b34801561026c57600080fd5b506102756108fc565b6040805163ffffffff9092168252519081900360200190f35b34801561029a57600080fd5b50610159600480360360208110156102b157600080fd5b5035610908565b3480156102c457600080fd5b50610159600480360360208110156102db57600080fd5b503561097a565b3480156102ee57600080fd5b5061024e61098f565b34801561030357600080fd5b5061024e6004803603606081101561031a57600080fd5b506001600160a01b038135169060208101359060400135610995565b34801561034257600080fd5b50610275610b61565b34801561035757600080fd5b506103c66004803603602081101561036e57600080fd5b810190602081018135600160201b81111561038857600080fd5b82018360208201111561039a57600080fd5b803590602001918460208302840111600160201b831117156103bb57600080fd5b509092509050610b6d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104025781810151838201526020016103ea565b505050509050019250505060405180910390f35b6102066004803603602081101561042c57600080fd5b5035610c0c565b34801561043f57600080fd5b5061024e610d2d565b34801561045457600080fd5b5061024e6004803603602081101561046b57600080fd5b5035610d48565b34801561047e57600080fd5b50610275610d5a565b34801561049357600080fd5b50610159600480360360208110156104aa57600080fd5b5035610d5f565b3480156104bd57600080fd5b5061024e600480360360208110156104d457600080fd5b5035610d74565b3480156104e757600080fd5b5061024e6113b3565b3480156104fc57600080fd5b5061021d6113d7565b34801561051157600080fd5b5061024e6004803603602081101561052857600080fd5b50356113fb565b34801561053b57600080fd5b5061027561140d565b60066020526000908152604090205460ff1681565b600260045414156105b1576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260045560055482111561060d576040805162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c7565000000000000604482015290519081900360640190fd5b60008581526006602052604090205460ff1615610671576040805162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e7400604482015290519081900360640190fd5b61067a86610908565b6106cb576040805162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f7400000000604482015290519081900360640190fd5b7f000000000000000000000000d4508eb7f17d939900eca7257b244c719c5398126001600160a01b031663695ef6f989896040518060c001604052808b60001c81526020018a60001c8152602001896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152506040518463ffffffff1660e01b8152600401808060200183600660200280838360005b8381101561077c578181015183820152602001610764565b505050509050018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050945050505050602060405180830381600087803b1580156107ce57600080fd5b505af11580156107e2573d6000803e3d6000fd5b505050506040513d60208110156107f857600080fd5b5051610844576040805162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b604482015290519081900360640190fd5b6000858152600660205260409020805460ff1916600117905561086984848484611420565b604080516001600160a01b038681168252602082018890528183018590529151918516917fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319181900360600190a250506001600455505050505050565b7f000000000000000000000000d4508eb7f17d939900eca7257b244c719c53981281565b60008051602061181183398151915281565b60005463ffffffff1681565b60008161091757506000610975565b60035463ffffffff16805b63ffffffff811660009081526002602052604090205484141561094a57600192505050610975565b63ffffffff81166109595750601e5b6000190163ffffffff8082169083161415610922576000925050505b919050565b60076020526000908152604090205460ff1681565b60055481565b600060008051602061181183398151915283106109f9576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b6000805160206118118339815191528210610a455760405162461bcd60e51b81526004018080602001828103825260218152602001806117bc6021913960400191505060405180910390fd5b6040805163f47d33b560e01b8152600481018590526000602482018190528251869391926001600160a01b0389169263f47d33b592604480840193829003018186803b158015610a9457600080fd5b505afa158015610aa8573d6000803e3d6000fd5b505050506040513d6040811015610abe57600080fd5b50805160209091015190925090506000805160206118118339815191528483089150856001600160a01b031663f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b158015610b2b57600080fd5b505afa158015610b3f573d6000803e3d6000fd5b505050506040513d6040811015610b5557600080fd5b50519695505050505050565b60035463ffffffff1681565b60608167ffffffffffffffff81118015610b8657600080fd5b50604051908082528060200260200182016040528015610bb0578160200160208202803683370190505b50905060005b82811015610c0557610bd9848483818110610bcd57fe5b90506020020135610d5f565b15610bfd576001828281518110610bec57fe5b911515602092830291909101909101525b600101610bb6565b5092915050565b60026004541415610c64576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260045560008181526007602052604090205460ff1615610cb75760405162461bcd60e51b81526004018080602001828103825260218152602001806118316021913960400191505060405180910390fd5b6000610cc2826115cd565b6000838152600760205260409020805460ff191660011790559050610ce5611741565b6040805163ffffffff83168152426020820152815184927fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196928290030190a250506001600455565b60035463ffffffff1660009081526002602052604090205490565b60026020526000908152604090205481565b601e81565b60009081526006602052604090205460ff1690565b600081610da257507f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c610975565b8160011415610dd257507f256a6135777eee2fd26f54b8b7037a25439d5235caee224154186d2b8a52e31d610975565b8160021415610e0257507f1151949895e82ab19924de92c40a3d6f7bcb60d92b00504b8199613683f0c200610975565b8160031415610e3257507f20121ee811489ff8d61f09fb89e313f14959a0f28bb428a20dba6b0b068b3bdb610975565b8160041415610e6257507f0a89ca6ffa14cc462cfedb842c30ed221a50a3d6bf022a6a57dc82ab24c157c9610975565b8160051415610e9257507f24ca05c2b5cd42e890d6be94c68d0689f4f21c9cec9c0f13fe41d566dfb54959610975565b8160061415610ec257507f1ccb97c932565a92c60156bdba2d08f3bf1377464e025cee765679e604a7315c610975565b8160071415610ef257507f19156fbd7d1a8bf5cba8909367de1b624534ebab4f0f79e003bccdd1b182bdb4610975565b8160081415610f2257507f261af8c1f0912e465744641409f622d466c3920ac6e5ff37e36604cb11dfff80610975565b8160091415610f5157507e58459724ff6ca5a1652fcbc3e82b93895cf08e975b19beab3f54c217d1c007610975565b81600a1415610f8157507f1f04ef20dee48d39984d8eabe768a70eafa6310ad20849d4573c3c40c2ad1e30610975565b81600b1415610fb157507f1bea3dec5dab51567ce7e200a30f7ba6d4276aeaa53e2686f962a46c66d511e5610975565b81600c1415610fe157507f0ee0f941e2da4b9e31c3ca97a40d8fa9ce68d97c084177071b3cb46cd3372f0f610975565b81600d141561101157507f1ca9503e8935884501bbaf20be14eb4c46b89772c97b96e3b2ebf3a36a948bbd610975565b81600e141561104157507f133a80e30697cd55d8f7d4b0965b7be24057ba5dc3da898ee2187232446cb108610975565b81600f141561107157507f13e6d8fc88839ed76e182c2a779af5b2c0da9dd18c90427a644f7e148a6253b6610975565b81601014156110a157507f1eb16b057a477f4bc8f572ea6bee39561098f78f15bfb3699dcbb7bd8db61854610975565b81601114156110d157507f0da2cb16a1ceaabf1c16b838f7a9e3f2a3a3088d9e0a6debaa748114620696ea610975565b816012141561110157507f24a3b3d822420b14b5d8cb6c28a574f01e98ea9e940551d2ebd75cee12649f9d610975565b816013141561113157507f198622acbd783d1b0d9064105b1fc8e4d8889de95c4c519b3f635809fe6afc05610975565b816014141561116157507f29d7ed391256ccc3ea596c86e933b89ff339d25ea8ddced975ae2fe30b5296d4610975565b816015141561119157507f19be59f2f0413ce78c0c3703a3a5451b1d7f39629fa33abd11548a76065b2967610975565b81601614156111c157507f1ff3f61797e538b70e619310d33f2a063e7eb59104e112e95738da1254dc3453610975565b81601714156111f157507f10c16ae9959cf8358980d9dd9616e48228737310a10e2b6b731c1a548f036c48610975565b816018141561122157507f0ba433a63174a90ac20992e75e3095496812b652685b5e1a2eae0b1bf4e8fcd1610975565b816019141561125157507f019ddb9df2bc98d987d0dfeca9d2b643deafab8f7036562e627c3667266a044c610975565b81601a141561128157507f2d3c88b23175c5a5565db928414c66d1912b11acf974b2e644caaac04739ce99610975565b81601b14156112b157507f2eab55f6ae4e66e32c5189eed5c470840863445760f5ed7e7b69b2a62600f354610975565b81601c14156112e057507e2df37a2642621802383cf952bf4dd1f32e05433beeb1fd41031fb7eace979d610975565b81601d141561131057507f104aeb41435db66c3e62feccc1d6f5d98d0a0ed75d1374db457cf462e3a1f427610975565b81601e141561134057507f1f3c6fd858e9a7d4b0d1f38e256a09d81d5a5e3c963987e2d4b814cfab7c6ebb610975565b81601f141561137057507f2c7a07d20dff79d01fecedc1134284a8d08436606c93693b67e333f671bf69cc610975565b6040805162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b7f0000000000000000000000008a29f9c827ce9fab2d5cbb22ac42130e1e9f107681565b60016020526000908152604090205481565b600354600160201b900463ffffffff1681565b341561145d5760405162461bcd60e51b81526004018080602001828103825260358152602001806118ca6035913960400191505060405180910390fd5b801561149a5760405162461bcd60e51b81526004018080602001828103825260348152602001806117dd6034913960400191505060405180910390fd5b6005546040516000916001600160a01b0387169190859003908381818185875af1925050503d80600081146114eb576040519150601f19603f3d011682016040523d82523d6000602084013e6114f0565b606091505b50509050806115305760405162461bcd60e51b81526004018080602001828103825260258152602001806118526025913960400191505060405180910390fd5b82156115c6576040516001600160a01b038516908490600081818185875af1925050503d806000811461157f576040519150601f19603f3d011682016040523d82523d6000602084013e611584565b606091505b505080915050806115c65760405162461bcd60e51b81526004018080602001828103825260238152602001806118776023913960400191505060405180910390fd5b5050505050565b60035460008054909163ffffffff600160201b909104811691811660020a1681141561162a5760405162461bcd60e51b815260040180806020018281038252603081526020018061189a6030913960400191505060405180910390fd5b8083600080805b60005463ffffffff90811690821610156116db576001851661167e5783925061165f8163ffffffff16610d74565b63ffffffff82166000908152600160205260409020859055915061169a565b63ffffffff811660009081526001602052604090205492508391505b6116c57f0000000000000000000000008a29f9c827ce9fab2d5cbb22ac42130e1e9f10768484610995565b9350600263ffffffff8616049450600101611631565b505060038054601e63ffffffff8083166001908101821692909206811663ffffffff199093168317845560009283526002602052604090922094909455815493860116600160201b0267ffffffff00000000199093169290921790915550909392505050565b60055434146117815760405162461bcd60e51b81526004018080602001828103825260388152602001806117846038913960400191505060405180910390fd5b56fe506c656173652073656e6420606d697844656e6f6d696e6174696f6e602045544820616c6f6e672077697468207472616e73616374696f6e5f72696768742073686f756c6420626520696e7369646520746865206669656c64526566756e642076616c756520697320737570706f73656420746f206265207a65726f20666f722045544820696e7374616e636530644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000154686520636f6d6d69746d656e7420686173206265656e207375626d69747465647061796d656e7420746f205f726563697069656e7420646964206e6f7420676f20746872757061796d656e7420746f205f72656c6179657220646964206e6f7420676f20746872754d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c65617665732063616e2062652061646465644d6573736167652076616c756520697320737570706f73656420746f206265207a65726f20666f722045544820696e7374616e6365a2646970667358221220bca6d79af59b9ba38a503d30494eeedb8841902d428bc49db184550e90fea3b864736f6c63430007060033